Java工程师成长指南

494 阅读5分钟

这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战

目前来看,Java依然是一门主流的编程语言,以其强大的生态以及企业级开发场景,占据了70%的市场份额,Java高级工程师也是在市场中炙手可热。

根据自己学习这门语言的经验,总结了一些从小白到Java高手所必须掌握的技能点。

JVM

jvm本质上就是一个程序,当它命令行上启动时,就开始执行保存在某字节码中的文件指令。

虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换、解析以及格式化,最后形成虚拟机可直接执行的指令,这就是虚拟机的类加载机制。

类加载的过程:

  1. 加载:找class文件
  2. 验证:验证格式依赖
  3. 准备:静态字段、方法表
  4. 解析:符号解析为引用
  5. 初始化:构造器、静态变量赋值、静态代码块
  6. 使用:执行

同时,要掌握主流的GC算法:标记-清除,复制,标记-整理,分代算法。以及各个垃圾收集器和它们的组合。

JVM调参也是迈向Java高级开发必会的内容,需要根据现实业务的特点,去制定参数。

NIO

要理解操作系统的四种IO模型,以及Java的NIO。

阻塞io/bio:一般通过在循环中服务端会调用accept()方法等待接受客户端的连接方式监听请求,请求一旦接收到一个连接请求,就可以建立通信套接字在这个通信套接字上进行读写操作,此时不能再接收其他客户端连接请求,只能等待同当前连接的客户端操作执行完成,不过可以通过多线程来支持多个客户端的连接。

异步式io:异步io实现了io全流程的非阻塞。用户进程发出系统调用后立即返回,内核等待数据准备完成,然后将数据拷贝到用户进程缓冲区,然后发送信号告诉用户进程io操作执行完毕。

并发编程

Java并发的内容非常多,还有非常多的类库以及锁。

线程的实现方式:通过实现runnable接口, 通过继承thread类

线程安全:当多个线程竞争同一个公共资源时,如果对该资源的访问顺序敏感,就存在竟态条件。导致竟态。导致竟态条件发生的代码区称作临界区。不进行有效的控制,会有线程安全问题。

并发相关的性质:原子性,可见性,有序性。

关键字:synchronized,volatile,final

线程池

  1. Excutor: 执行者 – 顶层接口
  2. ExcutorService: 接口 API
  3. ThreadFactory: 线程工厂
  4. Excutors: 工具类,创建线程

JUC

最小使用锁:

  1. 降低锁范围:锁定代码的范围/作用域
  2. 细分锁粒度:讲一个大锁,拆分成多个小锁

线程安全类型

  • copyOnWriteArrayList
  • concurrentHashMap

并发编程

  • ThreadLocal

Spring 和 ORM 等框架

spring是Java的主流框架,其各种优秀特性也让Java在业内保持长青,两者互相成就。

spring boot 约定大于配置

JDBC,Hibernate,MyBatis

使用ORM的经验

  1. 本地事务(事务的设计与坑)
  2. 多数据源(配置、静态制定、动态切换)
  3. 线程池配置(大小、重连)
  4. ORM 内的复杂SQL,级联查询
  5. ORM 辅助工具和插件

MySQL 数据库和 SQL

MySQL不光是Java开发,对于任何后端开发的从业者都是一项必备的技能

  • MySQL流程,SQL执行顺序
  • 索引原理,配置优化,设计优化
  • 事务和锁,ACID,事务级别
  • SQL优化
  • 主从复制,读写分离,高可用

分库分表

垂直拆分,水平拆分,分库分表

数据库中间件shardingSphere

Apache ShardingSphere 是一套开源的分布式数据库中间件解决方案组成的生态圈,它由JDBC、Proxy 和Sidecar(规划中)这3 款相互独立,却又能够混合部署配合使用的产品组成。它们均提供标准化的数据分片、分布式事务和数据库治理功能,可适用于如Java 同构、异构语言、云原生等各种多样化的应用场景。

数据迁移

分布式事务

强一致:XA 弱一致:

  • 不用事务,业务侧补偿冲正
  • 所谓的柔性事务,使用一套事务框架保证最终一致的事务

XA 分布式事务协议 BASE 柔性事务 TCC

ShardingSphere 对分布式事务的支持

RPC 和微服务

RPC是远程过程调用(Remote Procedure Call)的缩写形式。 简单来说,就是“像调用本地方法一样调用远程方法”。

设计,代理,序列化,网络传输,查找实现类

dubbo

微服务:

  • 配置中心
  • 注册中心
  • 元数据中心
  • 服务注册与发现
  • 服务集群与路由
  • 服务负载均衡
  • 服务过滤和流控

spring cloud

分布式缓存

  • 缓存穿透
  • 缓存击穿
  • 缓存雪崩

redis:事务,lua,管道,数据备份与恢复,性能优化,分区

redis集群与高可用,主从复制,sentinel,cluster

分布式消息队列

mq

  • 异步通信
  • 系统解耦
  • 削峰平谷
  • 可靠通信

各种MQ:

  • activemq
  • kafka
  • rabbitmq
  • rocketmq