@@ -112,7 +112,7 @@ switch对枚举的支持
112112
113113枚举的线程安全性问题
114114
115- #### Java IO&Java NIO,并学会使用
115+ #### IO
116116
117117字符流、字节流、输入流、输出流、
118118
@@ -122,7 +122,11 @@ BIO、NIO和AIO的区别、三种IO的用法与原理、netty
122122
123123#### Java反射与javassist
124124
125- 反射与工厂模式、 ` java.lang.reflect.* `
125+ 反射与工厂模式、 反射有什么作用
126+
127+ Class类
128+
129+ ` java.lang.reflect.* `
126130
127131#### 动态代理
128132
@@ -134,14 +138,16 @@ BIO、NIO和AIO的区别、三种IO的用法与原理、netty
134138
135139AOP
136140
137- #### Java序列化
141+ #### 序列化
138142
139143什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全
140144
141145#### 注解
142146
143147元注解、自定义注解、Java中常用注解使用、注解与反射的结合
144148
149+ Spring常用注解
150+
145151#### JMS
146152
147153什么是Java消息服务、JMS消息传送模型
154160
155161泛型与继承、类型擦除、泛型中K T V E ? object等的含义、泛型各种用法
156162
163+ 限定通配符和非限定通配符、上下界限定符extends 和 super
164+
165+ List<Object >和原始类型List之间的区别?
166+
167+ List<?>和List<Object >之间的区别是什么?
168+
157169#### 单元测试
158170
159171junit、mock、mockito、内存数据库(h2)
@@ -166,7 +178,9 @@ junit、mock、mockito、内存数据库(h2)
166178
167179` commons.lang ` , ` commons.*... ` ` guava-libraries ` ` netty `
168180
169- #### 什么是API&SPI
181+ #### API&SPI
182+
183+ API、API和SPI的关系和区别
170184
171185如何定义SPI、SPI的实现原理
172186
@@ -178,14 +192,20 @@ Error和Exception
178192
179193异常链、try-with-resources
180194
195+ finally和return的执行顺序
196+
181197#### 时间处理
182198
183199时区、冬令时和夏令时、时间戳、Java中时间API
184200
201+ 格林威治时间、CET,UTC,GMT,CST几种常见时间的含义和关系
202+
185203SimpleDateFormat的线程安全性问题
186204
187205Java 8中的时间处理
188206
207+ 如何在东八区的计算机上获取美国时间
208+
189209#### 编码方式
190210
191211Unicode、有了Unicode为啥还需要UTF-8
@@ -212,11 +232,18 @@ String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLCla
212232
213233#### 并发与并行
214234
235+ 什么是并发
236+
237+ 什么是并行
238+
239+ 并发与并行的区别
215240
216- #### 什么是线程,与进程的区别
241+ #### 线程
217242
218243线程的实现、线程的状态、优先级、线程调度、创建线程的多种方式、守护线程
219244
245+ 线程与进程的区别
246+
220247#### 线程池
221248
222249自己设计线程池、submit() 和 execute()、线程池原理
@@ -225,7 +252,7 @@ String、Integer、Long、Enum、BigDecimal、ThreadLocal、ClassLoader & URLCla
225252
226253#### 线程安全
227254
228- 死锁、死锁如何排查、Java线程调度、 线程安全和内存模型的关系
255+ 死锁、死锁如何排查、线程安全和内存模型的关系
229256
230257#### 锁
231258
@@ -235,6 +262,10 @@ CAS、乐观锁与悲观锁、数据库相关锁机制、分布式锁、偏向
235262
236263#### 死锁
237264
265+ 死锁的原因
266+
267+ 死锁的解决办法
268+
238269#### synchronized
239270
240271synchronized是如何实现的?
@@ -279,7 +310,7 @@ Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*
279310
280311class文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、
281312
282- 堆和栈区别、
313+ 堆和栈区别
283314
284315Java中的对象一定在堆上分配吗?
285316
@@ -315,6 +346,8 @@ oop-klass、对象头
315346
316347jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler
317348
349+ Arthas
350+
318351### 类加载机制
319352
320353classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(jboss modules、osgi、jigsaw)
@@ -345,18 +378,32 @@ JIT、JIT优化(逃逸分析、栈上分配、标量替换、锁优化)
345378
346379### 设计模式
347380
381+ 设计模式的六大原则:
382+
383+ 开闭原则(Open Close Principle)、里氏代换原则(Liskov Substitution Principle)、依赖倒转原则(Dependence Inversion Principle)
384+
385+ 接口隔离原则(Interface Segregation Principle)、迪米特法则(最少知道原则)(Demeter Principle)、合成复用原则(Composite Reuse Principle)
386+
348387#### 了解23种设计模式
349388
389+ 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
390+
391+ 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
392+
393+ 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter模式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
394+
350395#### 会使用常用设计模式
351396
352- 单例、策略、工厂、适配器、责任链。
397+ 单例的七种写法:懒汉——线程不安全、懒汉——线程安全、饿汉、饿汉——变种、静态内部类、枚举、双重校验锁
398+
399+ 工厂模式、适配器模式、策略模式、模板方法模式、观察者模式、外观模式、代理模式等必会
400+
401+ #### 不用synchronized和lock,实现线程安全的单例模式
353402
354403#### 实现AOP
355404
356405#### 实现IOC
357406
358- #### 不用synchronized和lock,实现线程安全的单例模式
359-
360407#### nio和reactor设计模式
361408
362409### 网络编程知识
@@ -365,7 +412,15 @@ JIT、JIT优化(逃逸分析、栈上分配、标量替换、锁优化)
365412
366413三次握手与四次关闭、流量控制和拥塞控制、OSI七层模型、tcp粘包与拆包
367414
368- #### http/1.0 http/1.1 http/2之前的区别
415+ #### http/1.0 http/1.1 http/2之间的区别
416+
417+ http中 get和post区别
418+
419+ 常见的web请求返回的状态码
420+
421+ 404、302、301、500分别代表什么
422+
423+ #### http/3
369424
370425#### Java RMI,Socket,HttpClient
371426
@@ -375,8 +430,6 @@ cookie被禁用,如何实现session
375430
376431#### 用Java写一个简单的静态文件的HTTP服务器
377432
378- > 实现客户端缓存功能,支持返回304 实现可并发下载一个文件 使用线程池处理客户端请求 使用nio处理客户端请求 支持简单的rewrite规则 上述功能在实现的时候需要满足“开闭原则”
379-
380433#### 了解nginx和apache服务器的特性并搭建一个对应的服务器
381434
382435#### 用Java实现FTP、SMTP协议
@@ -385,32 +438,58 @@ cookie被禁用,如何实现session
385438
386439#### 什么是CDN?如果实现?
387440
388- #### 什么是DNS?
441+ #### DNS?
442+
443+ 什么是DNS 、记录类型: A 记录、CNAME记录、AAAA记录等
389444
390- DNS污染、DNS劫持
445+ 域名解析、根域名服务器
446+
447+ DNS污染、DNS劫持、公共DNS:114 DNS、Google DNS、OpenDNS
391448
392449#### 反向代理
393450
394- 正向代理、反向代理、反向代理服务器、
451+ 正向代理、反向代理
452+
453+ 反向代理服务器
395454
396455### 框架知识
397456
398- #### Servlet线程安全问题
457+ #### Servlet
458+
459+ 生命周期
460+
461+ 线程安全问题
399462
400- #### Servlet中的filter和listener
463+ filter和listener
401464
402- #### Hibernate的缓存机制
465+ web.xml中常用配置及作用
403466
404- #### Hiberate的懒加载
467+ #### Hibernate
405468
406- #### Spring Bean的初始化
469+ 什么是OR Mapping
407470
408- #### Spring的AOP原理
471+ Hibernate的缓存机制
409472
410- #### 自己实现Spring的IOC
473+ Hibernate的懒加载
474+
475+ Hibernate/Ibatis/MyBatis之间的区别
476+
477+ #### Spring
478+
479+ Bean的初始化
480+
481+ AOP原理
482+
483+ 实现Spring的IOC
484+
485+ spring四种依赖注入方式
411486
412487#### Spring MVC
413488
489+ 什么是MVC
490+
491+ Spring mvc与Struts mvc的区别
492+
414493#### Spring Boot
415494
416495Spring Boot 2.0、起步依赖、自动配置、
@@ -449,13 +528,19 @@ Spring Boot的starter原理,自己实现一个starter
449528
450529#### maven & gradle
451530
531+ #### Intellij IDEA
532+
533+ 常用插件:Maven Helper 、FindBugs-IDEA、阿里巴巴代码规约检测、GsonFormat
534+
535+ Lombok plugin、.ignore、Mybatis plugin
536+
452537## 四、 高级篇
453538
454539### 新技术
455540
456541#### Java 8
457542
458- lambda表达式、Stream API、
543+ lambda表达式、Stream API、时间API
459544
460545#### Java 9
461546
@@ -475,6 +560,10 @@ ZGC、Epsilon、增强var、
475560
476561#### Spring Boot 2.0
477562
563+ ### http/2
564+
565+ ### http/3
566+
478567### 性能优化
479568
480569使用单例、使用Future模式、使用线程池、选择就绪、减少上下文切换、减少锁粒度、数据压缩、结果缓存
@@ -641,9 +730,19 @@ redis、memcached
641730
642731#### 排序算法
643732
644- 各种排序算法和时间复杂度 深度优先和广度优先搜索
733+ 稳定的排序:冒泡排序、插入排序、鸡尾酒排序、桶排序、计数排序、归并排序、原地归并排序、二叉排序树排序、鸽巢排序、基数排序、侏儒排序、图书馆排序、块排序
734+
735+ 不稳定的排序:选择排序、希尔排序、Clover排序算法、梳排序、堆排序、平滑排序、快速排序、内省排序、耐心排序
645736
646- 全排列、贪心算法、KMP算法、hash算法、海量数据处理
737+ 各种排序算法和时间复杂度
738+
739+ #### 深度优先和广度优先搜索
740+
741+ #### 全排列、贪心算法、KMP算法、hash算法
742+
743+ #### 海量数据处理
744+
745+ 分治,hash映射,堆排序,双层桶划分,Bloom Filter,bitmap,数据库索引,mapreduce等。
647746
648747#### 两个栈实现队列,和两个队列实现栈
649748
@@ -697,9 +796,9 @@ DOS攻击、DDOS攻击
697796
698797memcached为什么可以导致DDos攻击、什么是反射型DDoS
699798
700- #### SSL、TLS,HTTPS
799+ 如何通过Hash碰撞进行DOS攻击
701800
702- #### 如何通过Hash碰撞进行DOS攻击
801+ #### SSL、TLS,HTTPS
703802
704803#### 用openssl签一个证书部署到apache或nginx
705804
@@ -747,6 +846,8 @@ SOA、康威定律
747846
748847#### ServiceMesh
749848
849+ sidecar
850+
750851#### Docker & Kubernets
751852
752853#### Spring Boot
0 commit comments