java核心面试知识点整理

 

下载地址

1. 目录

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.

初始标记..............................................................................................................................................3313/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.

类构造器..............................................................................................................................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. LIST.......................................................................................................................................................47

3.2.1.

ArrayList(数组).......................................................................................................................47

3.2.2.

Vector(数组实现、线程同步)...............................................................................................47

3.2.3.

LinkList(链表).........................................................................................................................47

3.3. SET .......................................................................................................................................................48

3.3.1.1. HashSet(Hash 表).............................................................................................................................48

3.3.1.2. TreeSet(二叉树) ................................................................................................................................49

3.3.1.3. LinkHashSet(HashSet+LinkedHashMap)...................................................................................49

3.4. MAP.......................................................................................................................................................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 实现 (引入了红黑树) ..............................................................................................................5213/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、Future 有返回值线程.............................................................55

4.1.2.4. 基于线程池的方式...................................................................................................................................56

4.1.3.

种线程池 ...................................................................................................................................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.

终止线程 种方式 ......................................................................................................................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..........................................................................................................................................6913/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......................................................................................................................8313/04/2018

Page 5 of 283

4.1.14.9.

LinkedBlockingDeque.....................................................................................................................83

4.1.15. CyclicBarrierCountDownLatchSemaphore 的用法........................................................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 的区别: ............................................................................................................10213/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.

泛型方法().............................................................................................................................112

5.1.5.2. 泛型类 .............................................................................................................................................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.

轻量级................................................................................................................................................11613/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........................................................................................................................................13313/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 多线程模型...........................................................................................................................................15013/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.

网络 层架构 ............................................................................................................................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.............................................................................................................................................17013/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 交换器(模式匹配) ...................................................................................................18213/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 放在上述节点顺时针方向的后续节

点中。..................................................................................................................................................................19413/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:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。 .........................................................20313/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. 数据库是事务 ............................................................................................................................21713/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(候选者-负责选票).......................................................................................................................22613/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............................................................................................................................................25613/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 ...........................................................................................................................................26913/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.

存储驱动............................................................................................................................................28213/04/2018

Page 18 of 283

30.1.5. Openstack .................................................................................................................................28313/04/2018

Page 19 of 283

你可能感兴趣的:(java,java)