前几天刷微博,看到博主 @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

  1. 编译与反编译

javac、javap、jad、CRF

  1. 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 中语法糖原理、解语法糖

  1. 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 和伪共享

③. 尾递归

④. 位运算 用位运算实现加减乘除取余

  1. 设计模式

①. 了解 23 种设计模式

②. 会使用常见设计模式 单例、策略、工厂、适配器、责任链

③. 实现 AOP

④. 实现 IOC

⑤. 不用 synchronized 和 lock,实现线程安全的单例模式

⑥. nio 和 reactor 设计模式

  1. 网络编程

①. 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

⑪反向代理

  1. 框架知识

①. servlet 线程安全问题

②. servlet 中的 filter 和 listener

③. hibernate 的缓存机制

④. hibernate 的懒加载

⑤. Spring bean 的初始化

⑥. Spring 的 AOP 原理

⑦. 自己实现 Spring 的 IOC

⑧. Spring MVC

⑨. Spring boot2.0 Spring boot 的 starter 原理,自己实现一个 starter

⑩. Spring security

  1. 应用服务器

①. JBoss

②. tomcat

③. jetty

  1. 工具

①. 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

  1. 性能优化

使用单例、使用 Future 模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存

  1. 线上问题分析

①. 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 时该如何解决? 如何判断是否出现死锁? 如何判断是否存在内存泄露?

  1. 编译原理知识

①. 编译与反编译

②. Java 代码的编译与反编译

③. Java 的反编译工具

④. 词法分析、语法分析(LL 算法,递归下降算法,LR 算法)、语义分析、运行时环境、中间代码、代码生成、代码优化

  1. 操作系统知识

①. Linux 的常用命令

②. 进程同步

③. 缓冲区溢出

④. 分段与分页

⑤. 虚拟内存与主存

  1. 数据库知识

①. MySQL 执行引擎

②. MySQL 执行计划 如何查看执行计划、如何根据执行计划进行 SQL 优化

③. SQL 优化

④. 事务 事务的隔离级别、事务能不能实现锁的功能

⑤. 数据库锁 行锁、表锁、使用数据库锁实现乐观锁

⑥. 数据库主备搭建

⑦. binlog

⑧. 常用的 NoSQL 数据库 Redis、memcached

⑨. 分布使用数据库锁、NoSQL 实现分布式锁

⑩. 内存数据库 h2

性能优化

  1. 数据结构和算法知识

①. 简单的数据结构 栈、队列、链表、数组、哈希表

②. 树 二叉树、字典树、平衡树、排序树、B 树、B+ 树、R 树、多路树、红黑树

③. 排序算法 各种排序算法和时间复杂度、深度优先和广度优先搜索、全排列、贪心算法、KMP 算法、hash 算法、海量数据处理

  1. 大数据知识

①. 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

  1. 网络安全知识

①. 什么是 XSS,如何防御

②. 什么是 CSRF

③. 什么是注入攻击 SQL 注入、XML 注入、CRLF 注入

④. 什么是文件上传漏洞

⑤. 加密与解密 MD5、SHA1、DES、AES、RSA、DSA

⑥. 什么是 DOS 攻击和 DDOS 攻击 memcached 为什么可以导致 DDOS 攻击、什么是反射性 DDOS

⑦. SSL、TLS、HTTPS

⑧. 如何通过 Hash 碰撞进行 DOS 攻击

⑨. 用 openssl 签一个证书部署到 apache 或者 nginx

  1. 架构篇

  2. 分布式

①. 分布式基础 数据一致性、服务治理、服务降级

②. 分布式事务 2PC、3PC、CAP、BASE、可靠消息最终一致性、最大努力通知、TCC

③. Dubbo 服务注册、服务发现、服务治理

④. 分布式数据库 怎么打造一个分布式数据库、什么时候需要分布式数据库、mycat、canal、otter、HBase

⑤. 分布式文件系统 mfs、fastdfs

⑥. 分布式缓存 缓存一致性、缓存命中率、缓存冗余

  1. 微服务 SOA、康威定律、ServiceMesh、Docker & Kubernets、Spring boot、Spring Cloud

  2. 高并发 分库分表、CDN 技术、MQ(kafka、ActiveMQ)

  3. 监控

①. 监控什么 CPU、内存、磁盘I/O、网络I/O

②. 监控手段 进程监控、语义监控、机器资源监控、数据波动

③. 监控数据采集 日志、埋点

④. Dapper

  1. 负载均衡 Tomcat 负载均衡、nginx 负载均衡

  2. DNS DNS原理、DNS 设计

  3. CDN 数据一致性

五、扩展篇

  1. 云计算 LaaS、SaaS、Pass、虚拟化技术、openstack、Serverlsess

  2. 搜索引擎 Solr、Lucene、Nutch、ElasticSearch

  3. 权限管理 Shiro

  4. 区块链

①.区块链技术 哈希算法、Merkle 树、公钥密码算法、共识算法、Raft 协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证与数字签名

②. 比特币 挖矿、共识机制、闪电网络、侧链、热点问题、分叉

③. 以太坊

④. 超级账本

  1. 人工智能

①. 人工智能基础 数学基础、机器学习、人工神经网络、深度学习、应用场景

②. 常用框架 TensorFlow、DeepLearning4J

  1. 其他语言 Groovy、Python、Go、NodeJs、Swift、Rust

六、推荐书籍

《深入理解Java虚拟机》

《Effective Java》

《深入分析Java Web技术内幕》

《大型网站技术架构》

《代码整洁之道》

《Head First设计模式》

《maven实战》

《区块链原理、设计与应用》

《Java并发编程实战》

《鸟哥的Linux私房菜》

《从Paxos到Zookeeper》

《架构即未来》