这是我参与8月更文挑战的第18天,活动详情查看:8月更文挑战
目前来看,Java依然是一门主流的编程语言,以其强大的生态以及企业级开发场景,占据了70%的市场份额,Java高级工程师也是在市场中炙手可热。
根据自己学习这门语言的经验,总结了一些从小白到Java高手所必须掌握的技能点。
JVM
jvm本质上就是一个程序,当它命令行上启动时,就开始执行保存在某字节码中的文件指令。
虚拟机把描述类的数据从class文件加载到内存,并对数据进行校验、转换、解析以及格式化,最后形成虚拟机可直接执行的指令,这就是虚拟机的类加载机制。
类加载的过程:
- 加载:找class文件
- 验证:验证格式依赖
- 准备:静态字段、方法表
- 解析:符号解析为引用
- 初始化:构造器、静态变量赋值、静态代码块
- 使用:执行
同时,要掌握主流的GC算法:标记-清除,复制,标记-整理,分代算法。以及各个垃圾收集器和它们的组合。
JVM调参也是迈向Java高级开发必会的内容,需要根据现实业务的特点,去制定参数。
NIO
要理解操作系统的四种IO模型,以及Java的NIO。
阻塞io/bio:一般通过在循环中服务端会调用accept()方法等待接受客户端的连接方式监听请求,请求一旦接收到一个连接请求,就可以建立通信套接字在这个通信套接字上进行读写操作,此时不能再接收其他客户端连接请求,只能等待同当前连接的客户端操作执行完成,不过可以通过多线程来支持多个客户端的连接。
异步式io:异步io实现了io全流程的非阻塞。用户进程发出系统调用后立即返回,内核等待数据准备完成,然后将数据拷贝到用户进程缓冲区,然后发送信号告诉用户进程io操作执行完毕。
并发编程
Java并发的内容非常多,还有非常多的类库以及锁。
线程的实现方式:通过实现runnable接口, 通过继承thread类
线程安全:当多个线程竞争同一个公共资源时,如果对该资源的访问顺序敏感,就存在竟态条件。导致竟态。导致竟态条件发生的代码区称作临界区。不进行有效的控制,会有线程安全问题。
并发相关的性质:原子性,可见性,有序性。
关键字:synchronized,volatile,final
线程池
- Excutor: 执行者 – 顶层接口
- ExcutorService: 接口 API
- ThreadFactory: 线程工厂
- Excutors: 工具类,创建线程
JUC
锁
最小使用锁:
- 降低锁范围:锁定代码的范围/作用域
- 细分锁粒度:讲一个大锁,拆分成多个小锁
线程安全类型
- copyOnWriteArrayList
- concurrentHashMap
并发编程
- ThreadLocal
Spring 和 ORM 等框架
spring是Java的主流框架,其各种优秀特性也让Java在业内保持长青,两者互相成就。
spring boot 约定大于配置
JDBC,Hibernate,MyBatis
使用ORM的经验
- 本地事务(事务的设计与坑)
- 多数据源(配置、静态制定、动态切换)
- 线程池配置(大小、重连)
- ORM 内的复杂SQL,级联查询
- 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