主要版本更新时间备注v1.02015-08-01首次发布v1.12018-03-12增加新技术知识、完善知识体系v2.02019-02-19结构调整,更适合从入门到精通;进一步完善知识体系; 新技术补充;一、基础篇面向对象什么是面向对象面向对象、面向过程面向对象的三大基本特征和五大基本原则平台无关性Java如何实现的平台无关JVM还支持哪些语言(Kotlin、Groovy、JRuby、Jython、Scala)值传递值传递、引用传递为什么说Java中只有值传递封装、继承、多态什么是多态、方法重写与重载Java的继承与实现构造函数与默认构造函数类变量、成员变量和局部变量成员变量和方法作用域Java基础知识基本数据类型7种基本数据类型:整型、浮点型、布尔型、字符型整型中byte、short、int、long的取值范围什么是浮点型?什么是单精度和双精度?为什么不能用浮点型表示金额?自动拆装箱什么是包装类型、什么是基本类型、什么是自动拆装箱Integer的缓存机制String字符串的不可变性JDK 6和JDK 7中substring的原理及区别、replaceFirst、replaceAll、replace区别、String对“+”的重载、字符串拼接的几种方式和区别String.valueOf和Integer.toString的区别、switch对String的支持字符串池、常量池(运行时常量池、Class常量池)、intern熟悉Java中各种关键字transient、instanceof、volatile、synchronized、final、static、const 原理及用法。集合类常用集合类的使用、ArrayList和LinkedList和Vector的区别 、SynchronizedList和Vector的区别、HashMap、HashTable、ConcurrentHashMap区别、Set和List区别?Set如何保证元素不重复?Java 8中stream相关用法、apache集合处理工具类的使用、不同版本的JDK中HashMap的实现的区别以及原因Collection和Collections区别Arrays.asList获得的List使用时需要注意什么Enumeration和Iterator区别fail-fast 和 fail-safeCopyOnWriteArrayList、ConcurrentSkipListMap枚举枚举的用法、枚举的实现、枚举与单例、Enum类Java枚举如何比较switch对枚举的支持枚举的序列化如何实现枚举的线程安全性问题IO字符流、字节流、输入流、输出流、同步、异步、阻塞、非阻塞、Linux 5种IO模型BIO、NIO和AIO的区别、三种IO的用法与原理、nettyJava反射与javassist反射与工厂模式、 反射有什么作用Class类java.lang.reflect.动态代理静态代理、动态代理动态代理和反射的关系动态代理的几种实现方式AOP序列化什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全注解元注解、自定义注解、Java中常用注解使用、注解与反射的结合Spring常用注解JMS什么是Java消息服务、JMS消息传送模型JMXjava.lang.management.、 javax.management.泛型泛型与继承、类型擦除、泛型中K T V E ? object等的含义、泛型各种用法限定通配符和非限定通配符、上下界限定符extends 和 superList<Object>和原始类型List之间的区别? List<?>和List<Object>之间的区别是什么?单元测试junit、mock、mockito、内存数据库(h2)正则表达式java.lang.util.regex.常用的Java工具库commons.lang, commons.… guava-libraries nettyAPI&SPIAPI、API和SPI的关系和区别如何定义SPI、SPI的实现原理异常异常类型、正确处理异常、自定义异常Error和Exception异常链、try-with-resourcesfinally和return的执行顺序时间处理时区、冬令时和夏令时、时间戳、Java中时间API格林威治时间、CET,UTC,GMT,CST几种常见时间的含义和关系SimpleDateFormat的线程安全性问题Java 8中的时间处理如何在东八区的计算机上获取美国时间编码方式Unicode、有了Unicode为啥还需要UTF-8GBK、GB2312、GB18030之间的区别UTF8、UTF16、UTF32区别URL编解码、Big Endian和Little Endian如何解决乱码问题语法糖Java中语法糖原理、解语法糖语法糖:switch 支持 String 与枚举、泛型、自动装箱与拆箱、方法变长参数、枚举、内部类、条件编译、 断言、数值字面量、for-each、try-with-resource、Lambda表达式、阅读源代码String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLClassLoader、ArrayList & LinkedList、 HashMap & LinkedHashMap & TreeMap & CouncurrentHashMap、HashSet & LinkedHashSet & TreeSetJava并发编程并发与并行什么是并发什么是并行并发与并行的区别线程线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程线程与进程的区别线程池自己设计线程池、submit() 和 execute()、线程池原理为什么不允许使用Executors创建线程池线程安全死锁、死锁如何排查、线程安全和内存模型的关系锁CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向锁、轻量级锁、重量级锁、monitor、锁优化、锁消除、锁粗化、自旋锁、可重入锁、阻塞锁、死锁死锁死锁的原因死锁的解决办法synchronizedsynchronized是如何实现的?synchronized和lock之间关系、不使用synchronized如何实现一个线程安全的单例synchronized和原子性、可见性和有序性之间的关系volatilehappens-before、内存屏障、编译器指令重排和CPU指令重volatile的实现原理volatile和原子性、可见性和有序性之间的关系有了symchronized为什么还需要volatilesleep 和 waitwait 和 notifynotify 和 notifyAllThreadLocal写一个死锁的程序写代码来解决生产者消费者问题并发包阅读源代码,并学会使用Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic、Semaphore、CountDownLatch、、ConcurrentHashMap、Executors二、底层篇JVMJVM内存结构class文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、堆和栈区别Java中的对象一定在堆上分配吗?Java内存模型计算机内存模型、缓存一致性、MESI协议可见性、原子性、顺序性、happens-before、内存屏障、synchronized、volatile、final、锁垃圾回收GC算法:标记清除、引用计数、复制、标记压缩、分代回收、增量式回收GC参数、对象存活的判定、垃圾收集器(CMS、G1、ZGC、Epsilon)JVM参数及调优-Xmx、-Xmn、-Xms、Xss、-XX:SurvivorRatio、-XX:PermSize、-XX:MaxPermSize、-XX:MaxTenuringThresholdJava对象模型oop-klass、对象头HotSpot即时编译器、编译优化虚拟机性能监控与故障处理工具jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfilerArthas类加载机制classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)编译与反编译什么是编译(前端编译、后端编译)、什么是反编译JIT、JIT优化(逃逸分析、栈上分配、标量替换、锁优化)编译工具:javac反编译工具:javap 、jad 、CRF三、 进阶篇Java底层知识字节码、class文件格式CPU缓存,L1,L2,L3和伪共享尾递归位运算用位运算实现加、减、乘、除、取余设计模式设计模式的六大原则:开闭原则(Open Close Principle)、里氏代换原则(Liskov Substitution Principle)、依赖倒转原则(Dependence Inversion Principle)接口隔离原则(Interface Segregation Principle)、迪米特法则(最少知道原则)(Demeter Principle)、合成复用原则(Composite Reuse Principle)了解23种设计模式创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。会使用常用设计模式单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁工厂模式、适配器模式、策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会不用synchronized和lock,实现线程安全的单例模式实现AOP实现IOCnio和reactor设计模式网络编程知识tcp、udp、http、https等常用协议三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包http/1.0 http/1.1 http/2之间的区别http中 get和post区别常见的web请求返回的状态码404、302、301、500分别代表什么http/3Java RMI,Socket,HttpClientcookie 与 sessioncookie被禁用,如何实现session用Java写一个简单的静态文件的HTTP服务器了解nginx和apache服务器的特性并搭建一个对应的服务器用Java实现FTP、SMTP协议进程间通讯的方式什么是CDN?如果实现?DNS?什么是DNS 、记录类型:A记录、CNAME记录、AAAA记录等域名解析、根域名服务器DNS污染、DNS劫持、公共DNS:114 DNS、Google DNS、OpenDNS反向代理正向代理、反向代理反向代理服务器框架知识Servlet生命周期线程安全问题filter和listenerweb.xml中常用配置及作用Hibernate什么是OR MappingHibernate的缓存机制Hibernate的懒加载Hibernate/Ibatis/MyBatis之间的区别SpringBean的初始化AOP原理实现Spring的IOCspring四种依赖注入方式Spring MVC什么是MVCSpring mvc与Struts mvc的区别Spring BootSpring Boot 2.0、起步依赖、自动配置、Spring Boot的starter原理,自己实现一个starterSpring SecuritySpring Cloud服务发现与注册:Eureka、Zookeeper、Consul负载均衡:Feign、Spring Cloud Loadbalance服务配置:Spring Cloud Config服务限流与熔断:Hystrix服务链路追踪:Dapper服务网关、安全、消息应用服务器知识JBosstomcatjettyWeblogic工具git & svnmaven & gradleIntellij IDEA常用插件:Maven Helper 、FindBugs-IDEA、阿里巴巴代码规约检测、GsonFormatLombok plugin、.ignore、Mybatis plugin四、 高级篇新技术Java 8lambda表达式、Stream API、时间APIJava 9Jigsaw、Jshell、Reactive StreamsJava 10局部变量类型推断、G1的并行Full GC、ThreadLocal握手机制Java 11ZGC、Epsilon、增强var、Spring 5响应式编程Spring Boot 2.0http/2http/3性能优化使用单例、使用Future模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存线上问题分析dump获取线程Dump、内存Dump、gc情况dump分析分析死锁、分析内存泄露dump分析及获取工具jstack、jstat、jmap、jhat、Arthas自己编写各种outofmemory,stackoverflow程序HeapOutOfMemory、 Young OutOfMemory、MethodArea OutOfMemory、ConstantPool OutOfMemory、DirectMemory OutOfMemory、Stack OutOfMemory Stack OverFlowArthasjvm相关、class/classloader相关、monitor/watch/trace相关、options、管道、后台异步任务文档:https://alibaba.github.io/art…常见问题解决思路内存溢出、线程死锁、类加载冲突使用工具尝试解决以下问题,并写下总结当一个Java程序响应很慢时如何查找问题、当一个Java程序频繁FullGC时如何解决问题、如何查看垃圾回收日志、当一个Java应用发生OutOfMemory时该如何解决、如何判断是否出现死锁、如何判断是否存在内存泄露使用Arthas快速排查Spring Boot应用404/401问题使用Arthas排查线上应用日志打满问题利用Arthas排查Spring Boot应用NoSuchMethodError编译原理知识编译与反编译Java代码的编译与反编译Java的反编译工具javap 、jad 、CRF即时编译器词法分析,语法分析(LL算法,递归下降算法,LR算法),语义分析,运行时环境,中间代码,代码生成,代码优化操作系统知识Linux的常用命令进程间通信进程同步生产者消费者问题、哲学家就餐问题、读者写者问题缓冲区溢出分段和分页虚拟内存与主存虚拟内存管理换页算法数据库知识MySql 执行引擎MySQL 执行计划如何查看执行计划,如何根据执行计划进行SQL优化索引Hash索引、B树索引(B+树、和B树、R树)普通索引、唯一索引覆盖索引、最左前缀原则、索引下推SQL优化数据库事务和隔离级别事务的隔离级别、事务能不能实现锁的功能数据库锁行锁、表锁、使用数据库锁实现乐观锁、连接内连接,左连接,右连接数据库主备搭建binlogredolog内存数据库h2分库分表读写分离常用的nosql数据库redis、memcached分别使用数据库锁、NoSql实现分布式锁性能调优数据库连接池数据结构与算法知识简单的数据结构栈、队列、链表、数组、哈希表、栈和队列的相同和不同之处栈通常采用的两种存储结构树二叉树、字典树、平衡树、排序树、B树、B+树、R树、多路树、红黑树堆大根堆、小根堆图有向图、无向图、拓扑排序算法稳定的排序:冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序不稳定的排序:选择排序、希尔排序、Clover排序算法、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序各种排序算法和时间复杂度深度优先和广度优先搜索全排列、贪心算法、KMP算法、hash算法海量数据处理分治,hash映射,堆排序,双层桶划分,Bloom Filter,bitmap,数据库索引,mapreduce等。两个栈实现队列,和两个队列实现栈大数据知识Zookeeper基本概念、常见用法Solr,Lucene,ElasticSearch在linux上部署solr,solrcloud,,新增、删除、查询索引Storm,流式计算,了解Spark,S4在linux上部署storm,用zookeeper做协调,运行storm hello world,local和remote模式运行调试storm topology。Hadoop,离线计算HDFS、MapReduce分布式日志收集flume,kafka,logstash数据挖掘,mahout网络安全知识XSSXSS的防御CSRF注入攻击SQL注入、XML注入、CRLF注入文件上传漏洞加密与解密对称加密、非对称加密、哈希算法、加盐哈希算法MD5,SHA1、DES、AES、RSA、DSA彩虹表DDOS攻击DOS攻击、DDOS攻击memcached为什么可以导致DDos攻击、什么是反射型DDoS如何通过Hash碰撞进行DOS攻击SSL、TLS,HTTPS用openssl签一个证书部署到apache或nginx五、架构篇分布式数据一致性、服务治理、服务降级分布式事务2PC、3PC、CAP、BASE、 可靠消息最终一致性、最大努力通知、TCCDubbo服务注册、服务发现,服务治理http://dubbo.apache.org/zh-cn/分布式数据库怎样打造一个分布式数据库、什么时候需要分布式数据库、mycat、otter、HBase分布式文件系统mfs、fastdfs分布式缓存缓存一致性、缓存命中率、缓存冗余限流降级Hystrix、Sentinal算法共识算法、Raft协议、Paxos 算法与 Raft 算法、拜占庭问题与算法2PC、3PC微服务SOA、康威定律ServiceMeshsidecarDocker & KubernetsSpring BootSpring Cloud高并发分库分表CDN技术消息队列ActiveMQ监控监控什么CPU、内存、磁盘I/O、网络I/O等监控手段进程监控、语义监控、机器资源监控、数据波动监控数据采集日志、埋点Dapper负载均衡tomcat负载均衡、Nginx负载均衡四层负载均衡、七层负载均衡DNSDNS原理、DNS的设计CDN数据一致性六、 扩展篇云计算IaaS、SaaS、PaaS、虚拟化技术、openstack、Serverlsess搜索引擎Solr、Lucene、Nutch、Elasticsearch权限管理Shiro区块链哈希算法、Merkle树、公钥密码算法、共识算法、Raft协议、Paxos 算法与 Raft 算法、拜占庭问题与算法、消息认证码与数字签名比特币挖矿、共识机制、闪电网络、侧链、热点问题、分叉以太坊超级账本人工智能数学基础、机器学习、人工神经网络、深度学习、应用场景。常用框架TensorFlow、DeepLearning4JIoT量子计算AR & VR其他语言Groovy、Python、Go、NodeJs、Swift、Rust六、 推荐书籍《深入理解Java虚拟机》 《Effective Java》 《深入分析Java Web技术内幕》 《大型网站技术架构》 《代码整洁之道》 《架构整洁之道》 《Head First设计模式》 《maven实战》 《区块链原理、设计与应用》 《Java并发编程实战》 《鸟哥的Linux私房菜》 《从Paxos到Zookeeper》 《架构即未来》本文首发自微信公众号:Hollis