前几天刷微博,看到博主 @Java大本营 发了一个图片,总结 Java 一些常见的知识点,感觉挺好,整理成文字版,发在我的个人博客,作为一个大家学习复习的文档,也欢迎有人在评论中留下各种参考资料,一下是正文。
一、基础篇
1. JVM
①. JVM 内存结构
堆、栈、方法区、直接内存、堆和栈的区别
②. Java 内存模型
内存可见性、重排序、顺序一致性、volatile、锁、final
③. 垃圾回收
内存分配策略、垃圾收集器(G1)、GC 算法、GC 参数、对象存活的判定
④. JVM 参数及调优
⑤. Java 对象模型
oop-klass、对象头
⑥. HotSpot
即时编译器、编译优化
⑦. 类加载机制
ClassLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss、modules、osgl、jigsaw)
⑧. 虚拟机性能监控与故障处理工具
jps、jstack、jmap、jstat、jconsole、jinfo、jhat、javap、btrace、tprofiler
2. 编译与反编译
javac、javap、jad、CRF
3. Java 基础知识
①. 阅读源代码
String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、HashMap & LinkedHashMap & TreeMap & ConcurrentHashMap、HashSet & LinkedHashSet & TreeSet
②. Java 中各种变量的类型
③. 熟悉 Java String 的使用,熟悉 String 的各种函数
JDK 6 和 JDK 7 中 substring 的原理及区别、replaceFirst、replaceAll、replace 的区别、String 对 “+” 的重载、String.valueOf 和 Integer.toString 的区别、字符串的不可变性
④. 自动拆装箱
Integer 的缓存机制
⑤. 熟悉 Java 中各种关键字
transient、instanceof、volatile、synchronized、final、static、const 原理及用法
⑥. 集合类
常用集合类的使用,ArrayList 和 LinkedList 和 Vector 的区别、SynchronizedList 和 Vector 的区别、HashMap 和 HashTable 和 ConcurrentHashMap 区别,Java 8 中 stream 相关用法、apache 集合处理工具类的使用、不同版本 JDK 中 HashMap 的实现的区别及原因
⑦. 枚举
枚举的用法、枚举与单例、Enum 类
⑧. Java IO & Java NIO,并学会使用
bio、nio 和 aio 的区别、三种 io 的用法与原理、netty
⑨. Java 反射与 javassist
反射与工厂模式、java.lang.reflect.*
⑩. Java 序列化
什么是序列化与反序列化、为什么要序列化
序列化底层原理
序列化与单例模式
protobuf
为什么说序列化并不安全
⑪注解
元注解、自定义注解、Java 中常用注解使用、注解与反注解结合
⑫JMS
什么事 Java 消息服务、JMS 消息传递模型
⑬JMX
java.lang.management.*
⑭泛型
泛型与继承、类型擦除、泛型中的 K T V E、Object 等的含义、泛型各种用法
⑮单元测试
junit、mock、mockito、内存数据库(h2)
⑯正则表达式
java.lang.utl.regex.*
⑰常用的 Java 工具库
commons.lang、guava、netty
⑱什么是 API & SPI
⑲异常
异常类型、正确处理异常、自定义异常
⑳时间处理
时区、时令、Java 中的时间 API
编码方式
解决乱码问题、常用编码方式
语法糖
Java 中语法糖原理、解语法糖
3. Java 并发编程
①. 什么是线程,与进程的区别
②. 阅读源代码,并学会使用 Thread、Runnable、Callable、ReentrantLock、TeentrantReadWriteLock、Atomic*、Semaphore、CountDownLatch、Executors
③. 线程池
自己设计线程池、submit() 和 execute()
④. 线程安全
死锁、死锁如何排查、Java 线程调度、线程安全和内存模型的关系
⑤. 锁
CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁
⑥. volatile
happents-before、编译器指令重排和 CPU 指令重排
⑦. synchronized
synchronized 是如何实现的、synchronized 和 lock 之间的关系、不使用 synchronized 如何实现一个线程安全的单例
⑧. sleep 和 wait、wait 和 notify、notify 和 notifyAll
⑨. ThreadLocal
⑩. 写一个死锁的程序
⑪写代码解决生产者消费者问题
⑫守护线程
守护线程和非守护线程的区别以及用法
二、进阶篇
1. Java 底层知识
①. 字节码、class 文件格式
②. CPU 缓存、L1,L2,L3 和伪共享
③. 尾递归
④. 位运算
用位运算实现加减乘除取余
2. 设计模式
①. 了解 23 种设计模式
②. 会使用常见设计模式
单例、策略、工厂、适配器、责任链
③. 实现 AOP
④. 实现 IOC
⑤. 不用 synchronized 和 lock,实现线程安全的单例模式
⑥. nio 和 reactor 设计模式
3. 网络编程
①. tcp、udp、http、https 等常用协议
三次握手与四次挥手、流量控制和拥塞控制、OSI 七层模型、tcp 沾包与拆包
②. http/1.0、http/1.1、http/2 的区别
③. Java RMI、socket、HttpCliect
④. cookie 与 session
cookie 被禁用如何实现 session
⑤. 用 Java 写一个简单的静态文件的 http 服务器
实现客户端缓存功能,支持返回 304,实现可并发下载一个文件,使用线程池处理客户端请求,使用 nio 处理客户端请求,支持简单的 rewrite 规则,上述功能在实现的时候需要满足“开闭原则”
⑥. 了解 nginx 和 apache 服务器的特性并搭建一个对应的服务器
⑦. 用 Java 实现 FTP、SMTP 协议
⑧. 进程间通讯的方式
⑨. 什么是 CDN,如何实现
⑩. 什么是 DNS
⑪反向代理
4. 框架知识
①. servlet 线程安全问题
②. servlet 中的 filter 和 listener
③. hibernate 的缓存机制
④. hibernate 的懒加载
⑤. Spring bean 的初始化
⑥. Spring 的 AOP 原理
⑦. 自己实现 Spring 的 IOC
⑧. Spring MVC
⑨. Spring boot2.0
Spring boot 的 starter 原理,自己实现一个 starter
⑩. Spring security
5. 应用服务器
①. JBoss
②. tomcat
③. jetty
6. 工具
①. git & svn
②. maven 和 gradle
三、高级篇
1. 新技术
①. java 8
lambda 表达式、stream api
②. Java 9
Jigsaw、Jshell、reactive streams
③. Java 10
局部变量类型推断、G1 的并行 Full GC、ThreadLocal 握手机制
④. Spring 5
响应式编程
⑤. Spring boot 2.0
2. 性能优化
使用单例、使用 Future 模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存
3. 线上问题分析
①. dump 获取
线程 dump、内存 dump、GC 情况
②. dump 分析
分析死锁、分析内存泄露
③. 自己编写各种 outofmemory、stackoverflow 程序
HeapOutOfMemory、Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、stack OutOfMemory、stack overflow
④. 常见问题解决思路
内存溢出、线程死锁、类加载冲突
⑤. 使用工具尝试解决以下问题,并写下总结
当一个 Java 程序相应很慢时如何查找问题?
当一个 Java 程序频繁 Full GC 时如何解决问题?
如何查看垃圾回收日志
当一个 Java 应用发生 OutOfMemory 时该如何解决?
如何判断是否出现死锁?
如何判断是否存在内存泄露?
4. 编译原理知识
①. 编译与反编译
②. Java 代码的编译与反编译
③. Java 的反编译工具
④. 词法分析、语法分析(LL 算法,递归下降算法,LR 算法)、语义分析、运行时环境、中间代码、代码生成、代码优化
5. 操作系统知识
①. Linux 的常用命令
②. 进程同步
③. 缓冲区溢出
④. 分段与分页
⑤. 虚拟内存与主存
6. 数据库知识
①. MySQL 执行引擎
②. MySQL 执行计划
如何查看执行计划、如何根据执行计划进行 SQL 优化
③. SQL 优化
④. 事务
事务的隔离级别、事务能不能实现锁的功能
⑤. 数据库锁
行锁、表锁、使用数据库锁实现乐观锁
⑥. 数据库主备搭建
⑦. binlog
⑧. 常用的 NoSQL 数据库
Redis、memcached
⑨. 分布使用数据库锁、NoSQL 实现分布式锁
⑩. 内存数据库
h2
性能优化
7. 数据结构和算法知识
①. 简单的数据结构
栈、队列、链表、数组、哈希表
②. 树
二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、多路树、红黑树
③. 排序算法
各种排序算法和时间复杂度、深度优先和广度优先搜索、全排列、贪心算法、KMP 算法、hash 算法、海量数据处理
8. 大数据知识
①. zookeeper
基本概念、常见用法
②. solr、Lucene、ElasticSearch
在 linux 上部署 solr、solrcloud、ES、新增、删除、查询索引
③. storm 流式计算、了解 spark、S4
在 linux 上部署 storm,使用 zookeeper 做协调,运行 storm hello word、local 和 remote 模式运行调试 storm topology
④. Hadoop 离线计算
HDFS、MapReduce
⑤. 分布式日志收集iflume、kafka、logstash
⑥. 数据挖掘、mahout
8. 网络安全知识
①. 什么是 XSS,如何防御
②. 什么是 CSRF
③. 什么是注入攻击
SQL 注入、XML 注入、CRLF 注入
④. 什么是文件上传漏洞
⑤. 加密与解密
MD5、SHA1、DES、AES、RSA、DSA
⑥. 什么是 DOS 攻击和 DDOS 攻击
memcached 为什么可以导致 DDOS 攻击、什么是反射性 DDOS
⑦. SSL、TLS、HTTPS
⑧. 如何通过 Hash 碰撞进行 DOS 攻击
⑨. 用 openssl 签一个证书部署到 apache 或者 nginx
4. 架构篇
1. 分布式
①. 分布式基础
数据一致性、服务治理、服务降级
②. 分布式事务
2PC、3PC、CAP、BASE、可靠消息最终一致性、最大努力通知、TCC
③. Dubbo
服务注册、服务发现、服务治理
④. 分布式数据库
怎么打造一个分布式数据库、什么时候需要分布式数据库、mycat、canal、otter、HBase
⑤. 分布式文件系统
mfs、fastdfs
⑥. 分布式缓存
缓存一致性、缓存命中率、缓存冗余
2. 微服务
SOA、康威定律、ServiceMesh、Docker & Kubernets、Spring boot、Spring Cloud
3. 高并发
分库分表、CDN 技术、MQ(kafka、ActiveMQ)
4. 监控
①. 监控什么
CPU、内存、磁盘I/O、网络I/O
②. 监控手段
进程监控、语义监控、机器资源监控、数据波动
③. 监控数据采集
日志、埋点
④. Dapper
5. 负载均衡
Tomcat 负载均衡、nginx 负载均衡
6. DNS
DNS原理、DNS 设计
7. CDN
数据一致性
五、扩展篇
1. 云计算
LaaS、SaaS、Pass、虚拟化技术、openstack、Serverlsess
2. 搜索引擎
Solr、Lucene、Nutch、ElasticSearch
3. 权限管理
Shiro
4. 区块链
①.区块链技术
哈希算法、Merkle 树、公钥密码算法、共识算法、Raft 协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证与数字签名
②. 比特币
挖矿、共识机制、闪电网络、侧链、热点问题、分叉
③. 以太坊
④. 超级账本
5. 人工智能
①. 人工智能基础
数学基础、机器学习、人工神经网络、深度学习、应用场景
②. 常用框架
TensorFlow、DeepLearning4J
6. 其他语言
Groovy、Python、Go、NodeJs、Swift、Rust
六、推荐书籍
《深入理解Java虚拟机》
《Effective Java》
《深入分析Java Web技术内幕》
《大型网站技术架构》
《代码整洁之道》
《Head First设计模式》
《maven实战》
《区块链原理、设计与应用》
《Java并发编程实战》
《鸟哥的Linux私房菜》
《从Paxos到Zookeeper》
《架构即未来》