【例子介绍】Java核心知识点整理
【相关图片】
【源码结构】
目录
1. 目录 ......................................................................................................................................................... 1
2. JVM ....................................................................................................................................................... 19
2.1. 线程 ...................................................................................................................................................... 20
2.2. JVM 内存区域 ..................................................................................................................................... 21
2.2.1. 程序计数器 ( 线程私有 ) ................................................................................................................ 22
2.2.2. 虚拟机栈 ( 线程私有 ) .................................................................................................................... 22
2.2.3. 本地方法区 ( 线程私有 ) ................................................................................................................ 23
2.2.4. 堆( Heap- 线程共享) - 运行时数据区 ...................................................................................... 23
2.2.5. 方法区 / 永久代(线程共享) ..................................................................................................... 23
2.3. JVM 运行时内存 ................................................................................................................................. 24
2.3.1. 新生代 .......................................................................................................................................... 24
2.3.1.1. Eden 区 .................................................................................................................................................... 24
2.3.1.2. ServivorFrom ........................................................................................................................................... 24
2.3.1.3. ServivorTo .............................................................................................................................................. 24
2.3.1.4. MinorGC 的过程(复制->清空->互换) ....................................................................................... 24
1:eden、servicorFrom 复制到 ServicorTo,年龄 1 ................................................................................... 25
2:清空 eden、servicorFrom ............................................................................................................................. 25
3:ServicorTo 和 ServicorFrom 互换 ................................................................................................................ 25
2.3.2. 老年代 .......................................................................................................................................... 25
2.3.3. 永久代 .......................................................................................................................................... 25
2.3.3.1. JAVA8 与元数据 ................................................................................................................................. 25
2.4. 垃圾回收与算法 .................................................................................................................................. 26
2.4.1. 如何确定垃圾 .............................................................................................................................. 26
2.4.1.1. 引用计数法............................................................................................................................................... 26
2.4.1.2. 可达性分析............................................................................................................................................... 26
2.4.2. 标记清除算法(Mark-Sweep) .............................................................................................. 27
2.4.3. 复制算法( copying ) ................................................................................................................. 27
2.4.4. 标记整理算法 (Mark-Compact) .................................................................................................. 28
2.4.5. 分代收集算法 .............................................................................................................................. 29
2.4.5.1. 新生代与复制算法 .............................................................................................................................. 29
2.4.5.2. 老年代与标记复制算法 ...................................................................................................................... 29
2.5. JAVA 四中引用类型 ........................................................................................................................... 30
2.5.1. 强引用 .......................................................................................................................................... 30
2.5.2. 软引用 .......................................................................................................................................... 30
2.5.3. 弱引用 .......................................................................................................................................... 30
2.5.4. 虚引用 .......................................................................................................................................... 30
2.6. GC 分代收集算法 VS 分区收集算法 ................................................................................................ 30
2.6.1. 分代收集算法 .............................................................................................................................. 30
2.6.1.1. 在新生代-复制算法 ............................................................................................................................. 30
2.6.1.2. 在老年代-标记整理算法 ..................................................................................................................... 30
2.6.2. 分区收集算法 .............................................................................................................................. 31
2.7. GC 垃圾收集器 ................................................................................................................................... 31
2.7.1. Serial 垃圾收集器(单线程、复制算法) ................................................................................ 31
2.7.2. ParNew 垃圾收集器( Serial 多线程) ................................................................................... 31
2.7.3. Parallel Scavenge 收集器(多线程复制算法、高效) .......................................................... 32
2.7.4. Serial Old 收集器(单线程标记整理算法 ) ........................................................................... 32
2.7.5. Parallel Old 收集器(多线程标记整理算法) ......................................................................... 33
2.7.6. CMS 收集器(多线程标记清除算法) ..................................................................................... 33
2.7.6.1. 初始标记 .............................................................................................................................................. 33
13/04/2018 Page 2 of 283
2.7.6.2. 并发标记 .............................................................................................................................................. 34
2.7.6.3. 重新标记 .............................................................................................................................................. 34
2.7.6.4. 并发清除 .............................................................................................................................................. 34
2.7.7. G1 收集器 .................................................................................................................................... 34
2.8. JAVA IO/NIO ....................................................................................................................................... 34
2.8.1. 阻塞 IO 模型 ................................................................................................................................ 34
2.8.2. 非阻塞 IO 模型 ............................................................................................................................ 35
2.8.3. 多路复用 IO 模型 ........................................................................................................................ 35
2.8.4. 信号驱动 IO 模型 ........................................................................................................................ 36
2.8.5. 异步 IO 模型 ................................................................................................................................ 36
2.8.1. JAVA IO 包 .................................................................................................................................. 36
2.8.2. JAVA NIO .................................................................................................................................... 37
2.8.2.1. NIO 的缓冲区 ..................................................................................................................................... 38
2.8.2.2. NIO 的非阻塞 ..................................................................................................................................... 38
2.8.3. Channel ....................................................................................................................................... 40
2.8.4. Buffer ............................................................................................................................................ 40
2.8.5. Selector ........................................................................................................................................ 40
2.9. JVM 类加载机制 ................................................................................................................................. 41
2.9.1.1. 加载 .......................................................................................................................................................... 41
2.9.1.2. 验证 .......................................................................................................................................................... 41
2.9.1.3. 准备 .......................................................................................................................................................... 41
2.9.1.4. 解析 .......................................................................................................................................................... 41
2.9.1.5. 符号引用 .............................................................................................................................................. 42
2.9.1.6. 直接引用 .............................................................................................................................................. 42
2.9.1.7. 初始化 ...................................................................................................................................................... 42
2.9.1.8. 类构造器<client> .............................................................................................................................. 42
2.9.2. 类加载器 ...................................................................................................................................... 42
2.9.2.1. 启动类加载器(Bootstrap ClassLoader) ......................................................................................... 43
2.9.2.2. 扩展类加载器(Extension ClassLoader) .......................................................................................... 43
2.9.2.3. 应用程序类加载器(Application ClassLoader): .......................................................................... 43
2.9.3. 双亲委派 ...................................................................................................................................... 43
2.9.4. OSGI (动态模型系统) ............................................................................................................ 44
2.9.4.1. 动态改变构造 ...................................................................................................................................... 44
2.9.4.2. 模块化编程与热插拔 .......................................................................................................................... 44
3. JAVA 集合 ............................................................................................................................................ 45
3.1. 接口继承关系和实现 .......................................................................................................................... 45
3.2. L IST ....................................................................................................................................................... 47
3.2.1. ArrayList (数组) ....................................................................................................................... 47
3.2.2. Vector (数组实现、线程同步) ............................................................................................... 47
3.2.3. LinkList (链表) ......................................................................................................................... 47
3.3. S ET ....................................................................................................................................................... 48
3.3.1.1. HashSet(Hash 表) ............................................................................................................................. 48
3.3.1.2. TreeSet(二叉树) ................................................................................................................................ 49
3.3.1.3. LinkHashSet(HashSet LinkedHashMap) ................................................................................... 49
3.4. M AP ....................................................................................................................................................... 50
3.4.1. HashMap (数组 链表 红黑树) ............................................................................................. 50
3.4.1.1. JAVA7 实现 ............................................................................................................................................. 50
3.4.1.2. JAVA8 实现 ............................................................................................................................................. 51
3.4.2. ConcurrentHashMap.................................................................................................................. 51
3.4.2.1. Segment 段 .............................................................................................................................................. 51
3.4.2.2. 线程安全(Segment 继承 ReentrantLock 加锁) .............................................................................. 51
3.4.2.3. 并行度(默认 16) ................................................................................................................................. 52
3.4.2.4. Java8 实现 (引入了红黑树) .............................................................................................................. 52
13/04/2018 Page 3 of 283
3.4.3. HashTable (线程安全) ........................................................................................................... 53
3.4.4. TreeMap (可排序) .................................................................................................................. 53
3.4.5. LinkHashMap (记录插入顺序) .............................................................................................. 53
4. JAVA 多线程并发 ................................................................................................................................. 54
4.1.1. JAVA 并发知识库 ....................................................................................................................... 54
4.1.2. JAVA 线程实现 / 创建方式 .......................................................................................................... 54
4.1.2.1. 继承 Thread 类 ........................................................................................................................................ 54
4.1.2.2. 实现 Runnable 接口。 ............................................................................................................................ 54
4.1.2.3. ExecutorService、Callable<Class>、Future 有返回值线程 ............................................................. 55
4.1.2.4. 基于线程池的方式 ................................................................................................................................... 56
4.1.3. 4 种线程池 ................................................................................................................................... 56
4.1.3.1. newCachedThreadPool ......................................................................................................................... 57
4.1.3.2. newFixedThreadPool ............................................................................................................................. 57
4.1.3.3. newScheduledThreadPool .................................................................................................................... 58
4.1.3.4. newSingleThreadExecutor ................................................................................................................. 58
4.1.4. 线程生命周期 ( 状态 ) .................................................................................................................... 58
4.1.4.1. 新建状态(NEW) ................................................................................................................................. 58
4.1.4.2. 就绪状态(RUNNABLE): ................................................................................................................. 59
4.1.4.3. 运行状态(RUNNING): .................................................................................................................... 59
4.1.4.4. 阻塞状态(BLOCKED): .................................................................................................................... 59
等待阻塞(o.wait->等待对列): ...................................................................................................................... 59
同步阻塞(lock->锁池) .......................................................................................................................................... 59
其他阻塞(sleep/join) ............................................................................................................................................ 59
4.1.4.5. 线程死亡(DEAD) ................................................................................................................................ 59
正常结束 ................................................................................................................................................................ 59
异常结束 ................................................................................................................................................................ 59
调用 stop ............................................................................................................................................................... 59
4.1.5. 终止线程 4 种方式 ...................................................................................................................... 60
4.1.5.1. 正常运行结束 ........................................................................................................................................... 60
4.1.5.2. 使用退出标志退出线程 ........................................................................................................................... 60
4.1.5.3. Interrupt 方法结束线程 ........................................................................................................................... 60
4.1.5.4. stop 方法终止线程(线程不安全) ....................................................................................................... 61
4.1.6. sleep 与 wait 区别 ....................................................................................................................... 61
4.1.7. start 与 run 区别 .......................................................................................................................... 62
4.1.8. JAVA 后台线程 ........................................................................................................................... 62
4.1.9. JAVA 锁 ....................................................................................................................................... 63
4.1.9.1. 乐观锁 ...................................................................................................................................................... 63
4.1.9.2. 悲观锁 ...................................................................................................................................................... 63
4.1.9.3. 自旋锁 ...................................................................................................................................................... 63
自旋锁的优缺点 .................................................................................................................................................... 63
自旋锁时间阈值(1.6 引入了适应性自旋锁) .................................................................................................. 63
自旋锁的开启 ........................................................................................................................................................ 64
4.1.9.4. Synchronized 同步锁 .............................................................................................................................. 64
Synchronized 作用范围 ....................................................................................................................................... 64
Synchronized 核心组件 ....................................................................................................................................... 64
Synchronized 实现 ............................................................................................................................................... 64
4.1.9.5. ReentrantLock ......................................................................................................................................... 66
Lock 接口的主要方法 ........................................................................................................................................... 66
非公平锁 ................................................................................................................................................................ 66
公平锁 .................................................................................................................................................................... 67
ReentrantLock 与 synchronized ........................................................................................................................ 67
ReentrantLock 实现 ............................................................................................................................................. 67
Condition 类和 Object 类锁方法区别区别 ......................................................................................................... 68
tryLock 和 lock 和 lockInterruptibly 的区别 ........................................................................................................ 68
4.1.9.6. Semaphore 信号量 ................................................................................................................................. 68
实现互斥锁(计数器为 1) ................................................................................................................................. 68
代码实现 ................................................................................................................................................................ 68
Semaphore 与 ReentrantLock ........................................................................................................................... 69
4.1.9.7. AtomicInteger .......................................................................................................................................... 69
13/04/2018 Page 4 of 283
4.1.9.8. 可重入锁(递归锁) ............................................................................................................................... 69
4.1.9.9. 公平锁与非公平锁 ................................................................................................................................... 70
公平锁(Fair) ..................................................................................................................................................... 70
非公平锁(Nonfair) ........................................................................................................................................... 70
4.1.9.10. ReadWriteLock 读写锁 ...................................................................................................................... 70
读锁........................................................................................................................................................................ 70
写锁........................................................................................................................................................................ 70
4.1.9.11. 共享锁和独占锁 .................................................................................................................................. 70
独占锁 .................................................................................................................................................................... 70
共享锁 .................................................................................................................................................................... 70
4.1.9.12. 重量级锁(Mutex Lock) ................................................................................................................ 71
4.1.9.13. 轻量级锁 .............................................................................................................................................. 71
锁升级 .................................................................................................................................................................... 71
4.1.9.14. 偏向锁 .................................................................................................................................................. 71
4.1.9.15. 分段锁 .................................................................................................................................................. 71
4.1.9.16. 锁优化 .................................................................................................................................................. 71
减少锁持有时间 .................................................................................................................................................... 72
减小锁粒度 ............................................................................................................................................................ 72
锁分离 .................................................................................................................................................................... 72
锁粗化 .................................................................................................................................................................... 72
锁消除 .................................................................................................................................................................... 72
4.1.10. 线程基本方法 .............................................................................................................................. 72
4.1.10.1. 线程等待(wait) ............................................................................................................................... 73
4.1.10.2. 线程睡眠(sleep) ............................................................................................................................. 73
4.1.10.3. 线程让步(yield) .............................................................................................................................. 73
4.1.10.4. 线程中断(interrupt) ........................................................................................................................ 73
4.1.10.5. Join 等待其他线程终止 ...................................................................................................................... 74
4.1.10.6. 为什么要用 join()方法? .................................................................................................................... 74
4.1.10.7. 线程唤醒(notify) ............................................................................................................................. 74
4.1.10.8. 其他方法: .......................................................................................................................................... 74
4.1.11. 线程上下文切换 .......................................................................................................................... 75
4.1.11.1. 进程 ...................................................................................................................................................... 75
4.1.11.2. 上下文 .................................................................................................................................................. 75
4.1.11.3. 寄存器 .................................................................................................................................................. 75
4.1.11.4. 程序计数器 .......................................................................................................................................... 75
4.1.11.5. PCB-“切换桢” ................................................................................................................................. 75
4.1.11.6. 上下文切换的活动: .......................................................................................................................... 76
4.1.11.7. 引起线程上下文切换的原因 .............................................................................................................. 76
4.1.12. 同步锁与死锁 .............................................................................................................................. 76
4.1.12.1. 同步锁 .................................................................................................................................................. 76
4.1.12.2. 死锁 ...................................................................................................................................................... 76
4.1.13. 线程池原理 .................................................................................................................................. 76
4.1.13.1. 线程复用 .............................................................................................................................................. 76
4.1.13.2. 线程池的组成 ...................................................................................................................................... 76
4.1.13.3. 拒绝策略 .............................................................................................................................................. 78
4.1.13.4. Java 线程池工作过程 ......................................................................................................................... 78
4.1.14. JAVA 阻塞队列原理 .................................................................................................................... 79
4.1.14.1. 阻塞队列的主要方法 .......................................................................................................................... 80
插入操作: ............................................................................................................................................................ 80
获取数据操作: .................................................................................................................................................... 81
4.1.14.2. Java 中的阻塞队列 ............................................................................................................................. 81
4.1.14.3. ArrayBlockingQueue(公平、非公平) ....................................................................................... 82
4.1.14.4. LinkedBlockingQueue(两个独立锁提高并发) ......................................................................... 82
4.1.14.5. PriorityBlockingQueue(compareTo 排序实现优先).............................................................. 82
4.1.14.6. DelayQueue(缓存失效、定时任务 ) .......................................................................................... 82
4.1.14.7. SynchronousQueue(不存储数据、可用于传递数据) .............................................................. 83
4.1.14.8. LinkedTransferQueue...................................................................................................................... 83
13/04/2018 Page 5 of 283
4.1.14.9. LinkedBlockingDeque ..................................................................................................................... 83
4.1.15. CyclicBarrier 、 CountDownLatch 、 Semaphore 的用法 ........................................................ 84
4.1.15.1. CountDownLatch(线程计数器 ) ................................................................................................ 84
4.1.15.2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) ............................................... 84
4.1.15.3. Semaphore(信号量-控制同时访问的线程个数) ....................................................................... 85
4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) ............................................................. 87
变量可见性 ............................................................................................................................................................ 87
禁止重排序 ............................................................................................................................................................ 87
比 sychronized 更轻量级的同步锁 ..................................................................................................................... 87
适用场景 ................................................................................................................................................................ 87
4.1.17. 如何在两个线程之间共享数据 ................................................................................................... 88
将数据抽象成一个类,并将数据的操作作为这个类的方法 ............................................................................. 88
Runnable 对象作为一个类的内部类 .................................................................................................................. 89
4.1.18. ThreadLocal 作用(线程本地存储) ........................................................................................ 90
ThreadLocalMap(线程的一个属性) .............................................................................................................. 90
使用场景 ................................................................................................................................................................ 91
4.1.19. synchronized 和 ReentrantLock 的区别 .................................................................................. 91
4.1.19.1. 两者的共同点: .................................................................................................................................. 91
4.1.19.2. 两者的不同点: .................................................................................................................................. 92
4.1.20. ConcurrentHashMap 并发 ......................................................................................................... 92
4.1.20.1. 减小锁粒度 .......................................................................................................................................... 92
4.1.20.2. ConcurrentHashMap 分段锁 .......................................................................................................... 92
ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成 ................................................. 93
4.1.21. Java 中用到的线程调度 ............................................................................................................. 93
4.1.21.1. 抢占式调度: ...................................................................................................................................... 93
4.1.21.2. 协同式调度: ...................................................................................................................................... 93
4.1.21.3. JVM 的线程调度实现(抢占式调度) ............................................................................................. 94
4.1.21.4. 线程让出 cpu 的情况: ..................................................................................................................... 94
4.1.22. 进程调度算法 .............................................................................................................................. 94
4.1.22.1. 优先调度算法 ...................................................................................................................................... 94
4.1.22.2. 高优先权优先调度算法 ...................................................................................................................... 95
4.1.22.3. 基于时间片的轮转调度算法 .............................................................................................................. 96
4.1.23. 什么是 CAS (比较并交换-乐观锁机制-锁自旋) .................................................................. 96
4.1.23.1. 概念及特性 .......................................................................................................................................... 96
4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋) ........................................................................... 97
4.1.23.3. ABA 问题 ............................................................................................................................................. 98
4.1.24. 什么是 AQS (抽象的队列同步器) ......................................................................................... 98
Exclusive 独占资源-ReentrantLock ................................................................................................................... 99
Share 共享资源-Semaphore/CountDownLatch ............................................................................................... 99
同步器的实现是 ABS 核心(state 资源状态计数) ....................................................................................... 100
ReentrantReadWriteLock 实现独占和共享两种方式 ..................................................................................... 100
5. JAVA 基础 .......................................................................................................................................... 101
5.1.1. JAVA 异常分类及处理 .............................................................................................................. 101
5.1.1.1. 概念 .................................................................................................................................................... 101
5.1.1.2. 异常分类 ............................................................................................................................................ 101
Error ..................................................................................................................................................................... 101
Exception(RuntimeException、CheckedException) ........................................................................... 101
5.1.1.3. 异常的处理方式 ................................................................................................................................ 102
遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws) ......................................................... 102
try catch 捕获异常针对性处理方式 .................................................................................................................. 102
5.1.1.4. Throw 和 throws 的区别: ............................................................................................................ 102
13/04/2018 Page 6 of 283
位置不同 .............................................................................................................................................................. 102
功能不同: .......................................................................................................................................................... 102
5.1.2. JAVA 反射 ................................................................................................................................. 103
5.1.2.1. 动态语言 ............................................................................................................................................ 103
5.1.2.2. 反射机制概念 (运行状态中知道类所有的属性和方法) ............................................................ 103
5.1.2.3. 反射的应用场合 ................................................................................................................................ 103
编译时类型和运行时类型 .................................................................................................................................. 103
的编译时类型无法获取具体方法 ...................................................................................................................... 104
5.1.2.4. Java 反射 API .................................................................................................................................... 104
反射 API 用来生成 JVM 中的类、接口或则对象的信息。 ............................................................................ 104
5.1.2.5. 反射使用步骤(获取 Class 对象、调用对象方法) ..................................................................... 104
5.1.2.6. 获取 Class 对象的 3 种方法 ............................................................................................................ 104
调用某个对象的 getClass()方法 ....................................................................................................................... 104
调用某个类的 class 属性来获取该类对应的 Class 对象 ................................................................................ 104
使用 Class 类中的 forName()静态方法(最安全/性能最好) ............................................................................ 104
5.1.2.7. 创建对象的两种方法 ........................................................................................................................ 105
Class 对象的 newInstance() ............................................................................................................................. 105
调用 Constructor 对象的 newInstance() .......................................................................................................... 105
5.1.3. JAVA 注解 ................................................................................................................................. 106
5.1.3.1. 概念 ........................................................................................................................................................ 106
5.1.3.2. 4 种标准元注解...................................................................................................................................... 106
@Target 修饰的对象范围 ................................................................................................................................. 106
@Retention 定义 被保留的时间长短 ............................................................................................................... 106
@Documented 描述-javadoc ................................................................................................................................ 106
@Inherited 阐述了某个被标注的类型是被继承的 .............................................................................................. 106
5.1.3.3. 注解处理器............................................................................................................................................. 107
5.1.4. JAVA 内部类 ............................................................................................................................. 109
5.1.4.1. 静态内部类............................................................................................................................................. 109
5.1.4.2. 成员内部类............................................................................................................................................. 110
5.1.4.3. 局部内部类(定义在方法中的类) ..................................................................................................... 110
5.1.4.4. 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用) ..... 111
5.1.5. JAVA 泛型 ................................................................................................................................. 112
5.1.5.1. 泛型方法(<E>) ............................................................................................................................. 112
5.1.5.2. 泛型类<T> ............................................................................................................................................. 112
5.1.5.3. 类型通配符? .......................................................................................................................................... 113
5.1.5.4. 类型擦除 ................................................................................................................................................ 113
5.1.6. JAVA 序列化 ( 创建可复用的 Java 对象 ) ................................................................................. 113
保存(持久化)对象及其状态到内存或者磁盘 .................................................................................................... 113
序列化对象以字节数组保持-静态成员不保存 ................................................................................................. 113
序列化用户远程对象传输 .................................................................................................................................. 113
Serializable 实现序列化 .................................................................................................................................... 113
ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化............................................... 113
writeObject 和 readObject 自定义序列化策略 ................................................................................................ 113
序列化 ID............................................................................................................................................................. 113
序列化并不保存静态变量 .................................................................................................................................. 114
序列化子父类说明 .............................................................................................................................................. 114
Transient 关键字阻止该变量被序列化到文件中 ............................................................................................ 114
5.1.7. JAVA 复制 ................................................................................................................................. 114
5.1.7.1. 直接赋值复制 ......................................................................................................................................... 114
5.1.7.2. 浅复制(复制引用但不复制引用的对象) ..................................................................................... 114
5.1.7.3. 深复制(复制对象和其应用对象) ................................................................................................. 115
5.1.7.4. 序列化(深 clone 一中实现) ........................................................................................................ 115
6. SPRING 原理 ..................................................................................................................................... 116
6.1.1. Spring 特点 ................................................................................................................................ 116
6.1.1.1. 轻量级 ................................................................................................................................................ 116
13/04/2018 Page 7 of 283
6.1.1.2. 控制反转 ............................................................................................................................................ 116
6.1.1.3. 面向切面 ............................................................................................................................................ 116
6.1.1.4. 容器 .................................................................................................................................................... 116
6.1.1.5. 框架集合 ............................................................................................................................................ 116
6.1.2. Spring 核心组件 ........................................................................................................................ 117
6.1.3. Spring 常用模块 ........................................................................................................................ 117
6.1.4. Spring 主要包 ............................................................................................................................ 118
6.1.5. Spring 常用注解 ........................................................................................................................ 118
6.1.6. Spring 第三方结合 .................................................................................................................... 119
6.1.7. Spring IOC 原理 ........................................................................................................................ 120
6.1.7.1. 概念 ........................................................................................................................................................ 120
6.1.7.2. Spring 容器高层视图 ............................................................................................................................ 120
6.1.7.3. IOC 容器实现 ......................................................................................................................................... 120
BeanFactory-框架基础设施 .............................................................................................................................. 120
1.1..1.1.1 BeanDefinitionRegistry 注册表................................................................................................. 121
1.1..1.1.2 BeanFactory 顶层接口 .............................................................................................................. 121
1.1..1.1.3 ListableBeanFactory ................................................................................................................. 121
1.1..1.1.4 HierarchicalBeanFactory 父子级联.......................................................................................... 121
1.1..1.1.5 ConfigurableBeanFactory ......................................................................................................... 121
1.1..1.1.6 AutowireCapableBeanFactory 自动装配 ................................................................................ 122
1.1..1.1.7 SingletonBeanRegistry 运行期间注册单例 Bean ................................................................... 122
1.1..1.1.8 依赖日志框框 ............................................................................................................................. 122
ApplicationContext 面向开发应用 .................................................................................................................... 122
WebApplication 体系架构 ................................................................................................................................. 123
6.1.7.4. Spring Bean 作用域 .............................................................................................................................. 123
singleton:单例模式(多线程下不安全) ...................................................................................................... 123
prototype:原型模式每次使用时创建 ................................................................................................................ 124
Request:一次 request 一个实例 .................................................................................................................... 124
session ................................................................................................................................................................ 124
global Session .................................................................................................................................................... 124
6.1.7.5. Spring Bean 生命周期 .......................................................................................................................... 124
实例化 .................................................................................................................................................................. 124
IOC 依赖注入 ...................................................................................................................................................... 124
setBeanName 实现 ............................................................................................................................................ 124
BeanFactoryAware 实现 ................................................................................................................................... 124
ApplicationContextAware 实现......................................................................................................................... 125
postProcessBeforeInitialization 接口实现-初始化预处理 .......................................................................... 125
init-method .......................................................................................................................................................... 125
postProcessAfterInitialization ........................................................................................................................... 125
Destroy 过期自动清理阶段 ............................................................................................................................... 125
destroy-method 自配置清理 ............................................................................................................................. 125
6.1.7.6. Spring 依赖注入四种方式 .................................................................................................................... 126
构造器注入 .......................................................................................................................................................... 126
setter 方法注入 ................................................................................................................................................... 127
静态工厂注入 ...................................................................................................................................................... 127
实例工厂 .............................................................................................................................................................. 127
6.1.7.7. 5 种不同方式的自动装配 ...................................................................................................................... 128
6.1.8. Spring APO 原理 ...................................................................................................................... 129
6.1.8.1. 概念 ........................................................................................................................................................ 129
6.1.8.2. AOP 核心概念 ....................................................................................................................................... 129
6.1.8.1. AOP 两种代理方式 ............................................................................................................................... 130
JDK 动态接口代理 ............................................................................................................................................. 130
CGLib 动态代理 .................................................................................................................................................. 131
6.1.8.2. 实现原理 ................................................................................................................................................ 131
6.1.9. Spring MVC 原理 ...................................................................................................................... 132
6.1.9.1. MVC 流程 ............................................................................................................................................... 132
Http 请求到 DispatcherServlet ....................................................................................................................... 133
HandlerMapping 寻找处理器 ............................................................................................................................ 133
调用处理器 Controller ........................................................................................................................................ 133
13/04/2018 Page 8 of 283
Controller 调用业务逻辑处理后,返回 ModelAndView ................................................................................. 133
DispatcherServlet 查询 ModelAndView .......................................................................................................... 133
ModelAndView 反馈浏览器 HTTP ................................................................................................................... 133
6.1.9.1. MVC 常用注解 ....................................................................................................................................... 133
6.1.10. Spring Boot 原理 ....................................................................................................................... 134
1. 创建独立的 Spring 应用程序 ............................................................................................................................. 134
2. 嵌入的 Tomcat,无需部署 WAR 文件 ............................................................................................................. 134
3. 简化 Maven 配置 ................................................................................................................................................ 134
4. 自动配置 Spring ................................................................................................................................................. 134
5. 提供生产就绪型功能,如指标,健康检查和外部配置 ................................................................................... 134
6. 绝对没有代码生成和对 XML 没有要求配置 [1] ............................................................................................... 134
6.1.11. JPA 原理 .................................................................................................................................... 134
6.1.11.1. 事务 .................................................................................................................................................... 134
6.1.11.2. 本地事务 ............................................................................................................................................ 134
6.1.11.1. 分布式事务 ........................................................................................................................................ 135
6.1.11.1. 两阶段提交 ........................................................................................................................................ 136
1 准备阶段 ........................................................................................................................................................... 136
2 提交阶段: ....................................................................................................................................................... 136
6.1.12. Mybatis 缓存 .............................................................................................................................. 137
6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别) .............................................................................. 138
6.1.12.2. 二级缓存原理(mapper 基本) ..................................................................................................... 138
具体使用需要配置: .......................................................................................................................................... 139
6.1.13. Tomcat 架构 .............................................................................................................................. 139
7. 微服务 ................................................................................................................................................. 140
7.1.1. 服务注册发现 ............................................................................................................................ 140
7.1.1.1. 客户端注册(zookeeper) .................................................................................................................. 140
7.1.1.2. 第三方注册(独立的服务 Registrar) ............................................................................................... 140
7.1.1.3. 客户端发现............................................................................................................................................. 141
7.1.1.4. 服务端发现............................................................................................................................................. 142
7.1.1.5. Consul .................................................................................................................................................... 142
7.1.1.6. Eureka .................................................................................................................................................... 142
7.1.1.7. SmartStack ............................................................................................................................................ 142
7.1.1.8. Etcd ........................................................................................................................................................ 142
7.1.2. API 网关 ..................................................................................................................................... 142
7.1.2.1. 请求转发 ................................................................................................................................................ 143
7.1.2.2. 响应合并 ................................................................................................................................................ 143
7.1.2.3. 协议转换 ................................................................................................................................................ 143
7.1.2.4. 数据转换 ................................................................................................................................................ 143
7.1.2.5. 安全认证 ................................................................................................................................................ 144
7.1.3. 配置中心 .................................................................................................................................... 144
7.1.3.1. zookeeper 配置中心 ............................................................................................................................. 144
7.1.3.2. 配置中心数据分类 ................................................................................................................................. 144
7.1.4. 事件调度( kafka ) ................................................................................................................... 144
7.1.5. 服务跟踪(starter-sleuth) ................................................................................................... 144
7.1.6. 服务熔断( Hystrix ) ................................................................................................................ 145
7.1.6.1. Hystrix 断路器机制 ................................................................................................................................ 146
7.1.7. API 管理 ..................................................................................................................................... 146
8. NETTY 与 与 RPC .................................................................................................................................. 147
8.1.1. Netty 原理 .................................................................................................................................. 147
8.1.2. Netty 高性能 .............................................................................................................................. 147
8.1.2.1. 多路复用通讯方式 ............................................................................................................................ 147
8.1.2.1. 异步通讯 NIO .................................................................................................................................... 148
8.1.2.2. 零拷贝(DIRECT BUFFERS 使用堆外直接内存) .......................................................................... 149
8.1.2.3. 内存池(基于内存池的缓冲区重用机制) ......................................................................................... 149
8.1.2.4. 高效的 Reactor 线程模型 ..................................................................................................................... 149
Reactor 单线程模型 ........................................................................................................................................... 149
Reactor 多线程模型 ........................................................................................................................................... 150
13/04/2018 Page 9 of 283
主从 Reactor 多线程模型 .................................................................................................................................. 150
8.1.2.5. 无锁设计、线程绑定 ............................................................................................................................. 151
8.1.2.6. 高性能的序列化框架 ............................................................................................................................. 151
小包封大包,防止网络阻塞 .............................................................................................................................. 152
软中断 Hash 值和 CPU 绑定............................................................................................................................. 152
8.1.3. Netty RPC 实现 ......................................................................................................................... 152
8.1.3.1. 概念 ........................................................................................................................................................ 152
8.1.3.2. 关键技术 ................................................................................................................................................ 152
8.1.3.3. 核心流程 ................................................................................................................................................ 152
8.1.3.1. 消息编解码............................................................................................................................................. 153
息数据结构(接口名称 方法名 参数类型和参数值 超时时间 requestID) ........................................... 153
序列化 .................................................................................................................................................................. 154
8.1.3.1. 通讯过程 ................................................................................................................................................ 154
核心问题(线程暂停、消息乱序) ....................................................................................................................... 154
通讯流程 .............................................................................................................................................................. 154
requestID 生成-AtomicLong ............................................................................................................................. 154
存放回调对象 callback 到全局 ConcurrentHashMap .................................................................................... 154
synchronized 获取回调对象 callback 的锁并自旋 wait .................................................................................. 154
监听消息的线程收到消息,找到 callback 上的锁并唤醒 .............................................................................. 155
8.1.4. RMI 实现方式 ............................................................................................................................ 155
8.1.4.1. 实现步骤 ................................................................................................................................................ 155
8.1.5. Protoclol Buffer ......................................................................................................................... 156
8.1.5.1. 特点 ........................................................................................................................................................ 157
8.1.6. Thrift ........................................................................................................................................... 157
9. 网络 ..................................................................................................................................................... 159
9.1.1. 网络 7 层架构 ............................................................................................................................ 159
9.1.2. TCP/IP 原理 ............................................................................................................................... 160
9.1.2.1. 网络访问层(Network Access Layer) ................................................................................................... 160
9.1.2.2. 网络层(Internet Layer) ......................................................................................................................... 160
9.1.2.3. 传输层(Tramsport Layer-TCP/UDP) .................................................................................................. 160
9.1.2.4. 应用层(Application Layer).................................................................................................................... 160
9.1.3. TCP 三次握手 / 四次挥手 .......................................................................................................... 161
9.1.3.1. 数据包说明............................................................................................................................................. 161
9.1.3.2. 三次握手 ................................................................................................................................................ 162
9.1.3.3. 四次挥手 ................................................................................................................................................ 163
9.1.4. HTTP 原理 ................................................................................................................................. 164
9.1.4.1. 传输流程 ................................................................................................................................................ 164
1:地址解析 ....................................................................................................................................................... 164
2:封装 HTTP 请求数据包 ............................................................................................................................... 165
3:封装成 TCP 包并建立连接 .......................................................................................................................... 165
4:客户机发送请求命 ........................................................................................................................................ 165
5:服务器响应.................................................................................................................................................... 165
6:服务器关闭 TCP 连接 .................................................................................................................................. 165
9.1.4.2. HTTP 状态 ............................................................................................................................................. 165
9.1.4.3. HTTPS ................................................................................................................................................... 166
建立连接获取证书 .............................................................................................................................................. 167
证书验证 .............................................................................................................................................................. 167
数据加密和传输 .................................................................................................................................................. 167
9.1.5. CDN 原理 ................................................................................................................................... 167
9.1.5.1. 分发服务系统 ......................................................................................................................................... 167
9.1.5.2. 负载均衡系统: ..................................................................................................................................... 168
9.1.5.3. 管理系统:............................................................................................................................................. 168
10. 日志 ................................................................................................................................................. 169
10.1.1. Slf4j ............................................................................................................................................ 169
10.1.2. Log4j .......................................................................................................................................... 169
10.1.3. LogBack ..................................................................................................................................... 169
10.1.3.1. Logback 优点 ................................................................................................................................... 169
10.1.4. ELK ............................................................................................................................................. 170
13/04/2018 Page 10 of 283
11. ZOOKEEPER ................................................................................................................................. 171
11.1.1. Zookeeper 概念 ........................................................................................................................ 171
11.1.1. Zookeeper 角色 ........................................................................................................................ 171
11.1.1.1. Leader ............................................................................................................................................... 171
11.1.1.2. Follower ............................................................................................................................................ 171
11.1.1.3. Observer ........................................................................................................................................... 171
11.1.1.1. ZAB 协议 ........................................................................................................................................... 172
事务编号 Zxid(事务请求计数器 epoch) ................................................................................................... 172
epoch ................................................................................................................................................................... 172
Zab 协议有两种模式-恢复模式(选主)、广播模式(同步) ...................................................................... 172
ZAB 协议 4 阶段 ................................................................................................................................................. 172
Leader election(选举阶段-选出准 Leader) ................................................................................................ 172
Discovery(发现阶段-接受提议、生成 epoch、接受 epoch) .................................................................... 173
Synchronization(同步阶段-同步 follower 副本) ......................................................................................... 173
Broadcast(广播阶段-leader 消息广播) ....................................................................................................... 173
ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段)) ............................ 173
11.1.1.2. 投票机制 ............................................................................................................................................ 173
11.1.2. Zookeeper 工作原理(原子广播) ......................................................................................... 174
11.1.3. Znode 有四种形式的目录节点 ................................................................................................ 174
12. KAFKA ............................................................................................................................................ 175
12.1.1. Kafka 概念 ................................................................................................................................. 175
12.1.2. Kafka 数据存储设计 ................................................................................................................. 175
12.1.2.1. partition 的数据文件(offset,MessageSize,data) ............................................................ 175
12.1.2.2. 数据文件分段 segment(顺序读写、分段命令、二分查找) .................................................... 176
12.1.2.3. 数据文件索引(分段索引、稀疏存储) ......................................................................................... 176
12.1.3. 生产者设计 ................................................................................................................................ 176
12.1.3.1. 负载均衡(partition 会均衡分布到不同 broker 上) ................................................................. 176
12.1.3.2. 批量发送 ............................................................................................................................................ 177
12.1.3.3. 压缩(GZIP 或 Snappy) ............................................................................................................... 177
12.1.1. 消费者设计 ................................................................................................................................ 177
12.1.1.1. Consumer Group ........................................................................................................................... 178
13. RABBITMQ .................................................................................................................................... 179
13.1.1. 概念 ............................................................................................................................................ 179
13.1.2. RabbitMQ 架构 ......................................................................................................................... 179
13.1.2.1. Message ........................................................................................................................................... 180
13.1.2.2. Publisher .......................................................................................................................................... 180
13.1.2.3. Exchange(将消息路由给队列 ) ................................................................................................. 180
13.1.2.4. Binding(消息队列和交换器之间的关联) .................................................................................. 180
13.1.2.5. Queue ............................................................................................................................................... 180
13.1.2.6. Connection ...................................................................................................................................... 180
13.1.2.7. Channel ............................................................................................................................................ 180
13.1.2.8. Consumer ......................................................................................................................................... 180
13.1.2.9. Virtual Host ..................................................................................................................................... 180
13.1.2.10. Broker ............................................................................................................................................... 181
13.1.3. Exchange 类型 ......................................................................................................................... 181
13.1.3.1. Direct 键(routing key)分布: .................................................................................................. 181
13.1.3.2. Fanout(广播分发) ....................................................................................................................... 181
13.1.3.3. topic 交换器(模式匹配) ................................................................................................... 182
13/04/2018 Page 11 of 283
14. HBASE ............................................................................................................................................ 183
14.1.1. 概念 ............................................................................................................................................ 183
14.1.2. 列式存储 .................................................................................................................................... 183
14.1.3. Hbase 核心概念 ........................................................................................................................ 184
14.1.3.1. Column Family 列族 ....................................................................................................................... 184
14.1.3.2. Rowkey(Rowkey 查询,Rowkey 范围扫描,全表扫描) ....................................................... 184
14.1.3.3. Region 分区 ...................................................................................................................................... 184
14.1.3.4. TimeStamp 多版本 .......................................................................................................................... 184
14.1.4. Hbase 核心架构 ........................................................................................................................ 184
14.1.4.1. Client: ............................................................................................................................................. 185
14.1.4.2. Zookeeper:.................................................................................................................................... 185
14.1.4.3. Hmaster ............................................................................................................................................ 185
14.1.4.4. HregionServer ................................................................................................................................. 185
14.1.4.5. Region 寻址方式(通过 zookeeper .META) ............................................................................ 186
14.1.4.6. HDFS ................................................................................................................................................. 186
14.1.5. Hbase 的写逻辑 ........................................................................................................................ 187
14.1.5.1. Hbase 的写入流程 ........................................................................................................................... 187
获取 RegionServer ............................................................................................................................................ 187
请求写 Hlog ........................................................................................................................................................ 187
请求写 MemStore .............................................................................................................................................. 187
14.1.5.2. MemStore 刷盘 ............................................................................................................................... 187
全局内存控制 ...................................................................................................................................................... 188
MemStore 达到上限........................................................................................................................................... 188
RegionServer 的 Hlog 数量达到上限 ............................................................................................................... 188
手工触发 .............................................................................................................................................................. 188
关闭 RegionServer 触发 .................................................................................................................................... 188
Region 使用 HLOG 恢复完数据后触发............................................................................................................ 188
14.1.6. HBase vs Cassandra ............................................................................................................... 188
15. MONGODB ..................................................................................................................................... 190
15.1.1. 概念 ............................................................................................................................................ 190
15.1.2. 特点 ............................................................................................................................................ 190
16. CASSANDRA ................................................................................................................................. 192
16.1.1. 概念 ............................................................................................................................................ 192
16.1.2. 数据模型 .................................................................................................................................... 192
Key Space(对应 SQL 数据库中的 database) ................................................................................................ 192
Key(对应 SQL 数据库中的主键) ...................................................................................................................... 192
column(对应 SQL 数据库中的列) .................................................................................................................... 192
super column(SQL 数据库不支持) .................................................................................................................. 192
Standard Column Family(相对应 SQL 数据库中的 table) ............................................................................ 192
Super Column Family(SQL 数据库不支持) ................................................................................................... 192
16.1.3. Cassandra 一致 Hash 和虚拟节点 ......................................................................................... 192
一致性 Hash(多米诺 down 机) ......................................................................................................................... 192
虚拟节点(down 机多节点托管) ........................................................................................................................ 193
16.1.4. Gossip 协议 ............................................................................................................................... 193
Gossip 节点的通信方式及收敛性 ......................................................................................................................... 194
Gossip 两个节点(A、B)之间存在三种通信方式(push、pull、push&pull) ........................................ 194
gossip 的协议和 seed list(防止集群分列) .................................................................................................. 194
16.1.5. 数据复制 .................................................................................................................................... 194
Partitioners(计算 primary key token 的 hash 函数) ....................................................................................... 194
两种可用的复制策略: .......................................................................................................................................... 194
SimpleStrategy:仅用于单数据中心, ........................................................................................................... 194
将第一个 replica 放在由 partitioner 确定的节点中,其余的 replicas 放在上述节点顺时针方向的后续节
点中。 .................................................................................................................................................................. 194
13/04/2018 Page 12 of 283
NetworkTopologyStrategy:可用于较复杂的多数据中心。 ......................................................................... 194
可以指定在每个数据中心分别存储多少份 replicas。 ................................................................................... 194
16.1.6. 数据写请求和协调者 ................................................................................................................ 195
协调者(coordinator) ................................................................................................................................................ 195
16.1.7. 数据读请求和后台修复 ............................................................................................................ 195
16.1.8. 数据存储(CommitLog、MemTable、SSTable) ........................................................... 196
SSTable 文件构成(BloomFilter、index、data、static) ................................................................................ 196
16.1.9. 二级索引(对要索引的 value 摘要,生成 RowKey ) .......................................................... 196
16.1.10. 数据读写 ................................................................................................................................ 197
数据写入和更新(数据追加) .............................................................................................................................. 197
数据的写和删除效率极高 .................................................................................................................................. 197
错误恢复简单 ...................................................................................................................................................... 197
读的复杂度高 ...................................................................................................................................................... 197
数据删除(column 的墓碑) ................................................................................................................................ 197
墓碑...................................................................................................................................................................... 198
垃圾回收 compaction ........................................................................................................................................ 198
数据读取(memtable SStables) ................................................................................................................ 198
行缓存和键缓存请求流程图 .................................................................................................................................. 199
Row Cache(SSTables 中频繁被访问的数据) ............................................................................................ 199
Bloom Filter(查找数据可能对应的 SSTable) ............................................................................................. 200
Partition Key Cache(查找数据可能对应的 Partition key) ........................................................................ 200
Partition Summary(内存中存储一些 partition index 的样本) ................................................................... 200
Partition Index(磁盘中) ................................................................................................................................ 200
Compression offset map(磁盘中) ............................................................................................................... 200
17. 设计模式 .......................................................................................................................................... 201
17.1.1. 设计原则 .................................................................................................................................... 201
17.1.2. 工厂方法模式 ............................................................................................................................ 201
17.1.3. 抽象工厂模式 ............................................................................................................................ 201
17.1.4. 单例模式 .................................................................................................................................... 201
17.1.5. 建造者模式 ................................................................................................................................ 201
17.1.6. 原型模式 .................................................................................................................................... 201
17.1.7. 适配器模式 ................................................................................................................................ 201
17.1.8. 装饰器模式 ................................................................................................................................ 201
17.1.9. 代理模式 .................................................................................................................................... 201
17.1.10. 外观模式 ................................................................................................................................ 201
17.1.11. 桥接模式 ................................................................................................................................ 201
17.1.12. 组合模式 ................................................................................................................................ 201
17.1.13. 享元模式 ................................................................................................................................ 201
17.1.14. 策略模式 ................................................................................................................................ 201
17.1.15. 模板方法模式 ........................................................................................................................ 201
17.1.16. 观察者模式 ............................................................................................................................ 201
17.1.17. 迭代子模式 ............................................................................................................................ 201
17.1.18. 责任链模式 ............................................................................................................................ 201
17.1.19. 命令模式 ................................................................................................................................ 201
17.1.20. 备忘录模式 ............................................................................................................................ 201
17.1.21. 状态模式 ................................................................................................................................ 202
17.1.22. 访问者模式 ............................................................................................................................ 202
17.1.23. 中介者模式 ............................................................................................................................ 202
17.1.24. 解释器模式 ............................................................................................................................ 202
18. 负载均衡 .......................................................................................................................................... 203
18.1.1. 四层负载均衡 vs 七层负载均衡 .............................................................................................. 203
18.1.1.1. 四层负载均衡(目标地址和端口交换) ......................................................................................... 203
F5:硬件负载均衡器,功能很好,但是成本很高。 ...................................................................................... 203
lvs:重量级的四层负载软件。 ......................................................................................................................... 203
nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。 ......................................................... 203
13/04/2018 Page 13 of 283
haproxy:模拟四层转发,较灵活。 ................................................................................................................ 203
18.1.1.2. 七层负载均衡(内容交换) ............................................................................................................ 203
haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移; ................................. 204
nginx:只在 http 协议和 mail 协议上功能比较好,性能与 haproxy 差不多; ............................................ 204
apache:功能较差 ............................................................................................................................................. 204
Mysql proxy:功能尚可。 ................................................................................................................................. 204
18.1.2. 负载均衡算法 / 策略 ................................................................................................................... 204
18.1.2.1. 轮循均衡(Round Robin) ........................................................................................................... 204
18.1.2.2. 权重轮循均衡(Weighted Round Robin) ................................................................................ 204
18.1.2.3. 随机均衡(Random) .................................................................................................................... 204
18.1.2.4. 权重随机均衡(Weighted Random) ......................................................................................... 204
18.1.2.5. 响应速度均衡(Response Time 探测时间) ............................................................................... 204
18.1.2.6. 最少连接数均衡(Least Connection) ........................................................................................ 205
18.1.2.7. 处理能力均衡(CPU、内存) ........................................................................................................ 205
18.1.2.8. DNS 响应均衡(Flash DNS) ....................................................................................................... 205
18.1.2.9. 哈希算法 ............................................................................................................................................ 205
18.1.2.10. IP 地址散列(保证客户端服务器对应关系稳定) ........................................................................ 205
18.1.2.11. URL 散列 ........................................................................................................................................... 205
18.1.3. LVS ............................................................................................................................................. 206
18.1.3.1. LVS 原理 ............................................................................................................................................ 206
IPVS .................................................................................................................................................................... 206
18.1.3.1. LVS NAT 模式 .................................................................................................................................. 207
18.1.3.2. LVS DR 模式(局域网改写 mac 地址) ........................................................................................ 208
18.1.3.3. LVS TUN 模式(IP 封装、跨网段) .............................................................................................. 209
18.1.3.4. LVS FULLNAT 模式 ......................................................................................................................... 210
18.1.4. Keepalive ................................................................................................................................... 211
18.1.5. Nginx 反向代理负载均衡 ......................................................................................................... 211
18.1.5.1. upstream_module 和健康检测 ........................................................................................................ 212
18.1.5.1. proxy_pass 请求转发 ....................................................................................................................... 212
18.1.6. HAProxy .................................................................................................................................... 213
19. 数据库 ............................................................................................................................................. 214
19.1.1. 存储引擎 .................................................................................................................................... 214
19.1.1.1. 概念 .................................................................................................................................................... 214
19.1.1.2. InnoDB(B 树) ............................................................................................................................. 214
19.1.1.3. TokuDB(Fractal Tree-节点带数据) .......................................................................................... 215
19.1.1.4. MyIASM ............................................................................................................................................. 215
19.1.1.5. Memory .............................................................................................................................................. 215
19.1.2. 索引 ............................................................................................................................................ 215
19.1.2.1. 常见索引原则有 ................................................................................................................................ 216
1.选择唯一性索引 .............................................................................................................................................. 216
2.为经常需要排序、分组和联合操作的字段建立索引: ............................................................................... 216
3.为常作为查询条件的字段建立索引。 ........................................................................................................ 216
4.限制索引的数目: ........................................................................................................................................ 216
尽量使用数据量少的索引 .................................................................................................................................. 216
尽量使用前缀来索引 .......................................................................................................................................... 216
7.删除不再使用或者很少使用的索引 ............................................................................................................ 216
8 . 最左前缀匹配原则,非常重要的原则。 ..................................................................................................... 216
10 . 尽量选择区分度高的列作为索引 .............................................................................................................. 216
11 .索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。 ................................................ 216
12 .尽量的扩展索引,不要新建索引。 ............................................................................................................ 216
19.1.3. 数据库三范式 ............................................................................................................................ 216
19.1.3.1. 第一范式(1st NF -列都是不可再分) ............................................................................................. 216
19.1.3.2. 第二范式(2nd NF-每个表只描述一件事情) ................................................................................. 216
19.1.3.3. 第三范式(3rd NF- 不存在对非主键列的传递依赖) ..................................................................... 217
19.1.4. 数据库是事务 ............................................................................................................................ 217
13/04/2018 Page 14 of 283
原子性(Atomicity) .......................................................................................................................................... 217
一致性(Consistency) .................................................................................................................................... 217
隔离性(Isolation) ........................................................................................................................................... 218
永久性(Durability) ......................................................................................................................................... 218
19.1.5. 存储过程 ( 特定功能的 SQL 语句集 ) ........................................................................................ 218
存储过程优化思路: .............................................................................................................................................. 218
19.1.6. 触发器 ( 一段能自动执行的程序 ) .............................................................................................. 218
19.1.7. 数据库并发策略 ........................................................................................................................ 218
19.1.7.1. 乐观锁 ................................................................................................................................................ 218
19.1.7.2. 悲观锁 ................................................................................................................................................ 219
19.1.7.3. 时间戳 ................................................................................................................................................ 219
19.1.8. 数据库锁 .................................................................................................................................... 219
19.1.8.1. 行级锁 ................................................................................................................................................ 219
19.1.8.2. 表级锁 ................................................................................................................................................ 219
19.1.8.1. 页级锁 ................................................................................................................................................ 219
19.1.9. 基于 Redis 分布式锁 ................................................................................................................ 219
19.1.10. 分区分表 ................................................................................................................................ 220
垂直切分(按照功能模块) ................................................................................................................................... 220
水平切分(按照规则划分存储) ........................................................................................................................... 220
19.1.11. 两阶段提交协议 .................................................................................................................... 220
19.1.11.1. 准备阶段 ............................................................................................................................................ 221
19.1.11.2. 提交阶段 ............................................................................................................................................ 221
19.1.11.3. 缺点 .................................................................................................................................................... 221
同步阻塞问题 ...................................................................................................................................................... 221
单点故障 .............................................................................................................................................................. 221
数据不一致(脑裂问题) .................................................................................................................................. 221
二阶段无法解决的问题(数据状态不确定) .................................................................................................. 221
19.1.12. 三阶段提交协议 .................................................................................................................... 222
19.1.12.1. CanCommit 阶段 .............................................................................................................................. 222
19.1.12.2. PreCommit 阶段 ............................................................................................................................... 222
19.1.12.3. doCommit 阶段 ................................................................................................................................. 222
19.1.13. 柔性事务 ................................................................................................................................ 222
19.1.13.1. 柔性事务 ............................................................................................................................................ 222
两阶段型 .............................................................................................................................................................. 222
补偿型 .................................................................................................................................................................. 222
异步确保型 .......................................................................................................................................................... 223
最大努力通知型(多次尝试) .......................................................................................................................... 223
19.1.14. CAP ........................................................................................................................................ 224
一致性(C): ....................................................................................................................................................... 224
可用性(A): ....................................................................................................................................................... 224
分区容忍性(P): ................................................................................................................................................ 224
20. 一致性算法 ...................................................................................................................................... 225
20.1.1. Paxos ......................................................................................................................................... 225
Paxos 三种角色:Proposer,Acceptor,Learners ........................................................................................... 225
Proposer: ......................................................................................................................................................... 225
Acceptor: .......................................................................................................................................................... 225
Learner: ............................................................................................................................................................ 225
Paxos 算法分为两个阶段。具体如下: ............................................................................................................... 225
阶段一(准 leader 确定 ): ............................................................................................................................ 225
阶段二(leader 确认): .................................................................................................................................. 225
20.1.2. Zab ............................................................................................................................................. 225
1.崩溃恢复:主要就是 Leader 选举过程 ......................................................................................................... 226
2.数据同步:Leader 服务器与其他服务器进行数据同步 .............................................................................. 226
3.消息广播:Leader 服务器将数据发送给其他服务器 .................................................................................. 226
20.1.3. Raft ............................................................................................................................................. 226
20.1.3.1. 角色 .................................................................................................................................................... 226
Leader(领导者-日志管理) ............................................................................................................................ 226
Follower(追随者-日志同步) .......................................................................................................................... 226
Candidate(候选者-负责选票) ....................................................................................................................... 226
13/04/2018 Page 15 of 283
20.1.3.2. Term(任期) ................................................................................................................................... 226
20.1.3.3. 选举(Election) .............................................................................................................................. 227
选举定时器 .......................................................................................................................................................... 227
20.1.3.4. 安全性(Safety) ............................................................................................................................. 227
20.1.3.5. raft 协议和 zab 协议区别 ................................................................................................................. 227
20.1.4. NWR ........................................................................................................................................... 228
N:在分布式存储系统中,有多少份备份数据 ................................................................................................ 228
W:代表一次成功的更新操作要求至少有 w 份数据写入成功 ...................................................................... 228
R: 代表一次成功的读数据操作要求至少有 R 份数据成功读取 .................................................................. 228
20.1.5. Gossip ........................................................................................................................................ 228
20.1.6. 一致性 Hash .............................................................................................................................. 229
20.1.6.1. 一致性 Hash 特性 ............................................................................................................................. 229
20.1.6.2. 一致性 Hash 原理 ............................................................................................................................. 229
1.建构环形 hash 空间: .................................................................................................................................... 229
2.把需要缓存的内容(对象)映射到 hash 空间 .................................................................................................. 229
3.把服务器(节点)映射到 hash 空间 ................................................................................................................. 229
4.把对象映射到服务节点 ................................................................................................................................... 229
考察 cache 的变动 ............................................................................................................................................. 230
虚拟节点 .............................................................................................................................................................. 230
21. JAVA 算法 ...................................................................................................................................... 232
21.1.1. 二分查找 .................................................................................................................................... 232
21.1.2. 冒泡排序算法 ............................................................................................................................ 232
21.1.3. 插入排序算法 ............................................................................................................................ 233
21.1.4. 快速排序算法 ............................................................................................................................ 234
21.1.1. 希尔排序算法 ............................................................................................................................ 236
21.1.2. 归并排序算法 ............................................................................................................................ 237
21.1.3. 桶排序算法 ................................................................................................................................ 240
21.1.4. 基数排序算法 ............................................................................................................................ 241
21.1.5. 剪枝算法 .................................................................................................................................... 243
21.1.6. 回溯算法 .................................................................................................................................... 243
21.1.7. 最短路径算法 ............................................................................................................................ 243
21.1.8. 最大子数组算法 ........................................................................................................................ 243
21.1.9. 最长公共子序算法 .................................................................................................................... 243
21.1.10. 最小生成树算法 .................................................................................................................... 243
22. 数据结构 .......................................................................................................................................... 245
22.1.1. 栈( stack ) ............................................................................................................................... 245
22.1.2. 队列( queue ) ......................................................................................................................... 245
22.1.3. 链表( Link ) ............................................................................................................................. 245
22.1.4. 散列表( Hash Table ) ............................................................................................................ 246
22.1.5. 排序二叉树 ................................................................................................................................ 246
22.1.5.1. 插入操作 ............................................................................................................................................ 246
22.1.5.2. 删除操作 ............................................................................................................................................ 247
22.1.5.3. 查询操作 ............................................................................................................................................ 248
22.1.6. 红黑树 ........................................................................................................................................ 248
22.1.6.1. 红黑树的特性 .................................................................................................................................... 248
22.1.6.1. 左旋 .................................................................................................................................................... 248
22.1.6.1. 右旋 .................................................................................................................................................... 249
22.1.6.1. 添加 .................................................................................................................................................... 250
22.1.6.2. 删除 .................................................................................................................................................... 251
22.1.7. B-TREE ...................................................................................................................................... 252
22.1.8. 位图 ............................................................................................................................................ 254
23. 加密算法 .......................................................................................................................................... 255
23.1.1. AES ............................................................................................................................................ 255
23.1.2. RSA ............................................................................................................................................ 255
23.1.3. CRC............................................................................................................................................ 256
23.1.4. MD5 ............................................................................................................................................ 256
13/04/2018 Page 16 of 283
24. 分布式缓存 ...................................................................................................................................... 257
24.1.1. 缓存雪崩 .................................................................................................................................... 257
24.1.2. 缓存穿透 .................................................................................................................................... 257
24.1.3. 缓存预热 .................................................................................................................................... 257
24.1.4. 缓存更新 .................................................................................................................................... 257
24.1.5. 缓存降级 .................................................................................................................................... 257
25. HADOOP ........................................................................................................................................ 259
25.1.1. 概念 ............................................................................................................................................ 259
25.1.2. HDFS ......................................................................................................................................... 259
25.1.2.1. Client .................................................................................................................................................. 259
25.1.2.2. NameNode ........................................................................................................................................ 259
25.1.2.3. Secondary NameNode ................................................................................................................. 259
25.1.2.4. DataNode......................................................................................................................................... 259
25.1.3. MapReduce ............................................................................................................................... 260
25.1.3.1. Client ................................................................................................................................................. 260
25.1.3.2. JobTracker ....................................................................................................................................... 260
25.1.3.3. TaskTracker ...................................................................................................................................... 261
25.1.3.4. Task ................................................................................................................................................... 261
25.1.3.5. Reduce Task 执行过程 ................................................................................................................... 261
25.1.4. Hadoop MapReduce 作业的生命周期 ................................................................................... 262
1.作业提交与初始化........................................................................................................................................... 262
2.任务调度与监控。........................................................................................................................................... 262
3.任务运行环境准备........................................................................................................................................... 262
4.任务执行 .......................................................................................................................................................... 262
5.作业完成。 ...................................................................................................................................................... 262
26. SPARK ............................................................................................................................................ 263
26.1.1. 概念 ............................................................................................................................................ 263
26.1.2. 核心架构 .................................................................................................................................... 263
Spark Core ......................................................................................................................................................... 263
Spark SQL .......................................................................................................................................................... 263
Spark Streaming ................................................................................................................................................ 263
Mllib ..................................................................................................................................................................... 263
GraphX ................................................................................................................................................................ 263
26.1.3. 核心组件 .................................................................................................................................... 264
Cluster Manager-制整个集群,监控 worker ................................................................................................. 264
Worker 节点-负责控制计算节点 ....................................................................................................................... 264
Driver: 运行 Application 的 main()函数......................................................................................................... 264
Executor:执行器,是为某个 Application 运行在 worker node 上的一个进程 .......................................... 264
26.1.4. SPARK 编程模型 ...................................................................................................................... 264
26.1.5. SPARK 计算模型 ...................................................................................................................... 265
26.1.6. SPARK 运行流程 ...................................................................................................................... 266
1. 构建 Spark Application 的运行环境,启动 SparkContext .................................................................... 267
2. SparkContext 向资源管理器(可以是 Standalone,Mesos,Yarn)申请运行 Executor 资源,并启
动 StandaloneExecutorbackend, .................................................................................................................. 267
3. Executor 向 SparkContext 申请 Task ..................................................................................................... 267
4. SparkContext 将应用程序分发给 Executor ............................................................................................ 267
5. SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage、将 Taskset 发送给 Task Scheduler,最
后由 Task Scheduler 将 Task 发送给 Executor 运行 ..................................................................................... 267
6. Task 在 Executor 上运行,运行完释放所有资源................................................................................... 267
26.1.7. SPARK RDD 流程 .................................................................................................................... 267
26.1.8. SPARK RDD ............................................................................................................................. 267
(1)RDD 的创建方式........................................................................................................................................... 267
(2)RDD 的两种操作算子(转换(Transformation)与行动(Action)) .............................................. 268
27. STORM ........................................................................................................................................... 269
13/04/2018 Page 17 of 283
27.1.1. 概念 ............................................................................................................................................ 269
27.1.1. 集群架构 .................................................................................................................................... 269
27.1.1.1. Nimbus(master-代码分发给 Supervisor) ................................................................................ 269
27.1.1.2. Supervisor(slave-管理 Worker 进程的启动和终止) ............................................................... 269
27.1.1.3. Worker(具体处理组件逻辑的进程) ............................................................................................ 269
27.1.1.4. Task ................................................................................................................................................... 270
27.1.1.5. ZooKeeper ........................................................................................................................................ 270
27.1.2. 编程模型(spout->tuple->bolt) ....................................................................................... 270
27.1.2.1. Topology ............................................................................................................................................ 270
27.1.2.2. Spout.................................................................................................................................................. 270
27.1.2.3. Bolt ..................................................................................................................................................... 270
27.1.2.4. Tuple .................................................................................................................................................. 270
27.1.2.5. Stream ............................................................................................................................................... 271
27.1.3. Topology 运行 ........................................................................................................................... 271
(1). Worker(进程) (2). Executor(线程) (3). Task .................................................................................. 271
27.1.3.1. Worker(1 个 worker 进程执行的是 1 个 topology 的子集) ....................................................... 271
27.1.3.2. Executor(executor 是 1 个被 worker 进程启动的单独线程) ...................................................... 271
27.1.3.3. Task(最终运行 spout 或 bolt 中代码的单元) ............................................................................... 272
27.1.4. Storm Streaming Grouping ..................................................................................................... 272
27.1.4.1. huffle Grouping ................................................................................................................................. 273
27.1.4.2. Fields Grouping ................................................................................................................................ 273
27.1.4.3. All grouping :广播 .......................................................................................................................... 273
27.1.4.4. Global grouping ................................................................................................................................ 274
27.1.4.5. None grouping :不分组 ................................................................................................................. 274
27.1.4.6. Direct grouping :直接分组 指定分组 ........................................................................................... 274
28. YARN .............................................................................................................................................. 275
28.1.1. 概念 ............................................................................................................................................ 275
28.1.2. ResourceManager ................................................................................................................... 275
28.1.3. NodeManager ........................................................................................................................... 275
28.1.4. ApplicationMaster ................................................................................................................. 276
28.1.5. YARN 运行流程 .................................................................................................................... 277
29. 机器学习 .......................................................................................................................................... 278
29.1.1. 决策树 ........................................................................................................................................ 278
29.1.2. 随机森林算法 ............................................................................................................................ 278
29.1.3. 逻辑回归 .................................................................................................................................... 278
29.1.4. SVM............................................................................................................................................ 278
29.1.5. 朴素贝叶斯 ................................................................................................................................ 278
29.1.6. K 最近邻算法 ............................................................................................................................. 278
29.1.7. K 均值算法 ................................................................................................................................. 278
29.1.8. Adaboost 算法 .......................................................................................................................... 278
29.1.9. 神经网络 .................................................................................................................................... 278
29.1.10. 马尔可夫 ................................................................................................................................ 278
30. 云计算 ............................................................................................................................................. 279
30.1.1. SaaS .......................................................................................................................................... 279
30.1.2. PaaS .......................................................................................................................................... 279
30.1.3. IaaS ............................................................................................................................................ 279
30.1.4. Docker ........................................................................................................................................ 279
30.1.4.1. 概念 .................................................................................................................................................... 279
30.1.4.2. Namespaces ..................................................................................................................................... 280
30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离)...................................................................................... 281
30.1.4.4. Libnetwork 与网络隔离 .................................................................................................................... 281
30.1.4.5. 资源隔离与 CGroups ....................................................................................................................... 282
30.1.4.6. 镜像与 UnionFS ................................................................................................................................ 282
30.1.4.7. 存储驱动 ............................................................................................................................................ 282
13/04/2018 Page 18 of 283
30.1.5. Openstack ................................................................................................................................. 283
评论