1
+ 一、Java基础
2
+
3
+ 基础部分
4
+
5
+ Java Collections相关,主要是List,Set,Map和Queue
6
+
7
+ [2] 了解的常用实现及其用法(能按照需要使用ArrayList和LinkedList,HashSet和HashMap的特性,在什么情况下使用过Queue)
8
+
9
+ [3] 了解线程安全的实现,有使用经验(比如用过CopyOnWriteList,ConcurrentHashMap和ConcurrentLinkedQueue以及为什么要用它)
10
+
11
+ [4] 能大概说出线程安全的集合类的具体实现方法(比如CopyOnWriteList,ConcurrentHashMap和ConcurrentLinkedQueue的实现)
12
+
13
+ [5] 在源码层面上研究过类的实现(比如看过jdk6里的CopyOnWriteList,ConcurrentHashMap和ConcurrentLinkedQueue的代码,看过一部分,能说出一点就行)
14
+
15
+ Java内存模型
16
+
17
+ [2] 知道volatile怎么用,Atomic类的用法
18
+
19
+ [3] CAS是什么;能写出用double check locking实现的线程安全的单例
20
+
21
+ [4] 了解happen-before规则(能利用此规则分析代码是否线程安全)
22
+
23
+ [5] 了解Java里的类是怎么保存的。Object的头部都有什么。什么是false-sharing,最好举例,如果研究过LMAX的disruptor更好
24
+
25
+ Java多线程开发
26
+
27
+ [2] 基本的锁synchronized, Lock, Condition的用法。ThreadLocal的实现(Map)
28
+
29
+ [3] 了解线程池参数意义;知道怎么分析线程异常的情况(例如cpu占用过高,可利用top命令找出线程id,再利用jstack定位stacktrace)
30
+
31
+ [4] 了解其他线程同步的类的用法,比如CountdownLatch,Exchanger,Barrier,Semaphore等
32
+
33
+ [5] 知道怎么用wait和notify来控制线程同步(java monitor基础);了解AbstractQueuedSynchronizer原理
34
+
35
+ JVM
36
+
37
+ [2] jdk6的hotspot堆的结构。了解两个survivor区
38
+
39
+ [3] 了解常用GC算法的特点,能讲清楚CMS算法的过程,有根据不同应用程序调优jvm参数的经验(比如对于网络程序,知道调整survivor ratio的大小)
40
+
41
+ [4] 熟悉常用GC算法的应用场景及优缺点,能根据不同的需求进行选型
42
+
43
+ [5] 了解垃圾回收生命周期,具体可考察Strong, Soft, Weak和Phantom引用的区别,以及都有什么作用(主要区别在于被GC的时间不同。Soft比Weak更不eager被GC。Weak和Phantom的区别在于入ReferenceQueue的时候不同);或者知道线程safepoint,能指出哪些执行语句能达到safepoint
44
+
45
+ 网络
46
+
47
+ [2] 对http 协议有一定熟悉,知道get与post的区别,对http的header常见参数了解一些
48
+
49
+ [3] 知道socket的用法。对于nio,知道怎么用socket.select和socket.accept写出一个基本的socket服务(大概伪代码写出来就行)
50
+
51
+ [4] 如果用过Netty,能说出netty的基本概念(事件驱动,channel的几种状态,channel pipeline等。如果熟悉netty3,了解boss和worker;如果熟悉netty4,了解eventloop);如果没用过netty,说说用过的网络IO框架
52
+
53
+ [5] 了解常见io模型:bio,nio,aio,对tcp调优有经验,或者有c100k规模的网络程序的开发经验
54
+
55
+ 开源框架相关
56
+
57
+ [2] 能说出使用过的开源框架的概念和原理,和一些经验
58
+
59
+ [4] 看过开源框架的代码
60
+
61
+ [5] 自己有开源框架或者深度参与过
62
+
63
+ 其他
64
+
65
+ [2] 对jdk 源码看过部分类的实现 如String, HashMap等
66
+
67
+ [3] 能列举出一些常用的设计模式在生产中的一些应用场景
68
+
69
+ [4] java里类加载的机制(能说出delegate或者双亲委派就行);了解String pool;Integer -128~128的缓存
70
+
71
+ [5] 对java 虚拟机规范以及java 语言特性有深入了解
72
+
73
+ 二、服务器相关
74
+
75
+ LINUX
76
+
77
+ [2] 熟练使用tail、less等。
78
+
79
+ [3] 熟练使用grep、find、sed、awk等基本用法。了解文件权限规则。
80
+
81
+ [4] 编写过功能相对复杂的shell 脚本,例如 日志处理,启动shell脚本等
82
+
83
+ 三、存储
84
+
85
+ 存储
86
+
87
+ [2] 了解mongodb、mysql、redis、hbase 使用方式,大概知道相关存储的一些使用场景
88
+
89
+ [3] 对redis 存储方式aof、rdb等有一些了解,熟悉mysql 读写分离、一主多从等架构方式,对常用mysql proxy 选型有一定了解。
90
+
91
+ [4] 对分布式存储集群有一定了解,对b+tree, LSM 等存储方式有一定了解,能列出常见mysql、redis、hbase、mongo存储的利弊
92
+
0 commit comments