Skip to content

Commit a72a537

Browse files
author
hollis.zhl
committed
知识体系完善
1 parent 5537a09 commit a72a537

2 files changed

Lines changed: 138 additions & 28 deletions

File tree

.idea/smartfox/common_info.xml

Lines changed: 9 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

README.md

Lines changed: 129 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -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

135139
AOP
136140

137-
#### Java序列化
141+
#### 序列化
138142

139143
什么是序列化与反序列化、为什么序列化、序列化底层原理、序列化与单例模式、protobuf、为什么说序列化并不安全
140144

141145
#### 注解
142146

143147
元注解、自定义注解、Java中常用注解使用、注解与反射的结合
144148

149+
Spring常用注解
150+
145151
#### JMS
146152

147153
什么是Java消息服务、JMS消息传送模型
@@ -154,6 +160,12 @@ AOP
154160

155161
泛型与继承、类型擦除、泛型中K T V E ? object等的含义、泛型各种用法
156162

163+
限定通配符和非限定通配符、上下界限定符extends 和 super
164+
165+
List<Object>和原始类型List之间的区别?
166+
167+
List<?>和List<Object>之间的区别是什么?
168+
157169
#### 单元测试
158170

159171
junit、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+
185203
SimpleDateFormat的线程安全性问题
186204

187205
Java 8中的时间处理
188206

207+
如何在东八区的计算机上获取美国时间
208+
189209
#### 编码方式
190210

191211
Unicode、有了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

240271
synchronized是如何实现的?
@@ -279,7 +310,7 @@ Thread、Runnable、Callable、ReentrantLock、ReentrantReadWriteLock、Atomic*
279310

280311
class文件格式、运行时数据区:堆、栈、方法区、直接内存、运行时常量池、
281312

282-
堆和栈区别
313+
堆和栈区别
283314

284315
Java中的对象一定在堆上分配吗?
285316

@@ -315,6 +346,8 @@ oop-klass、对象头
315346

316347
jps, jstack, jmap、jstat, jconsole, jinfo, jhat, javap, btrace、TProfiler
317348

349+
Arthas
350+
318351
### 类加载机制
319352

320353
classLoader、类加载过程、双亲委派(破坏双亲委派)、模块化(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

416495
Spring 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

698797
memcached为什么可以导致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

Comments
 (0)