基本信息
源码名称:java面试资料.pdf(共283页)
源码大小:10.45M
文件格式:.pdf
开发语言:Java
更新时间:2021-06-15
友情提示:(无需注册或充值,赞助后即可获取资源下载链接)
嘿,亲!知识可是无价之宝呢,但咱这精心整理的资料也耗费了不少心血呀。小小地破费一下,绝对物超所值哦!如有下载和支付问题,请联系我们QQ(微信同号):813200300
本次赞助数额为: 2 元×
微信扫码支付:2 元
×
请留下您的邮箱,我们将在2小时内将文件发到您的邮箱
源码介绍
面试资料整理.pdf
面试资料整理.pdf
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. 初始标记..............................................................................................................................................33 13/04/2018 Page 2 of 283 2.7.6.2. 并发标记..............................................................................................................................................34 2.7.6.3. 重新标记..............................................................................................................................................34 2.7.6.4. 并发清除..............................................................................................................................................34 2.7.7. G1 收集器....................................................................................................................................34 2.8. JAVA IO/NIO.......................................................................................................................................34 2.8.1. 阻塞 IO 模型 ................................................................................................................................34 2.8.2. 非阻塞 IO 模型 ............................................................................................................................35 2.8.3. 多路复用 IO 模型 ........................................................................................................................35 2.8.4. 信号驱动 IO 模型 ........................................................................................................................36 2.8.5. 异步 IO 模型 ................................................................................................................................36 2.8.1. JAVA IO 包..................................................................................................................................36 2.8.2. JAVA NIO....................................................................................................................................37 2.8.2.1. NIO 的缓冲区 .....................................................................................................................................38 2.8.2.2. NIO 的非阻塞 .....................................................................................................................................38 2.8.3. Channel .......................................................................................................................................40 2.8.4. Buffer............................................................................................................................................40 2.8.5. Selector........................................................................................................................................40 2.9. JVM 类加载机制 .................................................................................................................................41 2.9.1.1. 加载 ..........................................................................................................................................................41 2.9.1.2. 验证 ..........................................................................................................................................................41 2.9.1.3. 准备 ..........................................................................................................................................................41 2.9.1.4. 解析 ..........................................................................................................................................................41 2.9.1.5. 符号引用..............................................................................................................................................42 2.9.1.6. 直接引用..............................................................................................................................................42 2.9.1.7. 初始化 ......................................................................................................................................................42 2.9.1.8. 类构造器<client>..............................................................................................................................42 2.9.2. 类加载器 ......................................................................................................................................42 2.9.2.1. 启动类加载器(Bootstrap ClassLoader) .........................................................................................43 2.9.2.2. 扩展类加载器(Extension ClassLoader)..........................................................................................43 2.9.2.3. 应用程序类加载器(Application ClassLoader): ..........................................................................43 2.9.3. 双亲委派 ......................................................................................................................................43 2.9.4. OSGI(动态模型系统) ............................................................................................................44 2.9.4.1. 动态改变构造......................................................................................................................................44 2.9.4.2. 模块化编程与热插拔 ..........................................................................................................................44 3. JAVA 集合............................................................................................................................................45 3.1. 接口继承关系和实现 ..........................................................................................................................45 3.2. 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 实现 (引入了红黑树) ..............................................................................................................52 13/04/2018 Page 3 of 283 3.4.3. HashTable(线程安全) ...........................................................................................................53 3.4.4. TreeMap(可排序) ..................................................................................................................53 3.4.5. LinkHashMap(记录插入顺序)..............................................................................................53 4. JAVA 多线程并发.................................................................................................................................54 4.1.1. JAVA 并发知识库 .......................................................................................................................54 4.1.2. JAVA 线程实现/创建方式 ..........................................................................................................54 4.1.2.1. 继承 Thread 类........................................................................................................................................54 4.1.2.2. 实现 Runnable 接口。............................................................................................................................54 4.1.2.3. ExecutorService、Callable<Class>、Future 有返回值线程.............................................................55 4.1.2.4. 基于线程池的方式...................................................................................................................................56 4.1.3. 4 种线程池 ...................................................................................................................................56 4.1.3.1. newCachedThreadPool.........................................................................................................................57 4.1.3.2. newFixedThreadPool.............................................................................................................................57 4.1.3.3. newScheduledThreadPool....................................................................................................................58 4.1.3.4. newSingleThreadExecutor .................................................................................................................58 4.1.4. 线程生命周期(状态)....................................................................................................................58 4.1.4.1. 新建状态(NEW) .................................................................................................................................58 4.1.4.2. 就绪状态(RUNNABLE):.................................................................................................................59 4.1.4.3. 运行状态(RUNNING): ....................................................................................................................59 4.1.4.4. 阻塞状态(BLOCKED):....................................................................................................................59 等待阻塞(o.wait->等待对列):......................................................................................................................59 同步阻塞(lock->锁池) ..........................................................................................................................................59 其他阻塞(sleep/join) ............................................................................................................................................59 4.1.4.5. 线程死亡(DEAD)................................................................................................................................59 正常结束................................................................................................................................................................59 异常结束................................................................................................................................................................59 调用 stop...............................................................................................................................................................59 4.1.5. 终止线程 4 种方式 ......................................................................................................................60 4.1.5.1. 正常运行结束...........................................................................................................................................60 4.1.5.2. 使用退出标志退出线程...........................................................................................................................60 4.1.5.3. Interrupt 方法结束线程...........................................................................................................................60 4.1.5.4. stop 方法终止线程(线程不安全).......................................................................................................61 4.1.6. sleep 与 wait 区别.......................................................................................................................61 4.1.7. start 与 run 区别..........................................................................................................................62 4.1.8. JAVA 后台线程 ...........................................................................................................................62 4.1.9. JAVA 锁 .......................................................................................................................................63 4.1.9.1. 乐观锁 ......................................................................................................................................................63 4.1.9.2. 悲观锁 ......................................................................................................................................................63 4.1.9.3. 自旋锁 ......................................................................................................................................................63 自旋锁的优缺点....................................................................................................................................................63 自旋锁时间阈值(1.6 引入了适应性自旋锁)..................................................................................................63 自旋锁的开启........................................................................................................................................................64 4.1.9.4. Synchronized 同步锁..............................................................................................................................64 Synchronized 作用范围.......................................................................................................................................64 Synchronized 核心组件.......................................................................................................................................64 Synchronized 实现...............................................................................................................................................64 4.1.9.5. ReentrantLock.........................................................................................................................................66 Lock 接口的主要方法...........................................................................................................................................66 非公平锁................................................................................................................................................................66 公平锁....................................................................................................................................................................67 ReentrantLock 与 synchronized ........................................................................................................................67 ReentrantLock 实现.............................................................................................................................................67 Condition 类和 Object 类锁方法区别区别.........................................................................................................68 tryLock 和 lock 和 lockInterruptibly 的区别........................................................................................................68 4.1.9.6. Semaphore 信号量.................................................................................................................................68 实现互斥锁(计数器为 1).................................................................................................................................68 代码实现................................................................................................................................................................68 Semaphore 与 ReentrantLock ...........................................................................................................................69 4.1.9.7. AtomicInteger..........................................................................................................................................69 13/04/2018 Page 4 of 283 4.1.9.8. 可重入锁(递归锁)...............................................................................................................................69 4.1.9.9. 公平锁与非公平锁...................................................................................................................................70 公平锁(Fair).....................................................................................................................................................70 非公平锁(Nonfair)...........................................................................................................................................70 4.1.9.10. ReadWriteLock 读写锁......................................................................................................................70 读锁........................................................................................................................................................................70 写锁........................................................................................................................................................................70 4.1.9.11. 共享锁和独占锁 ..................................................................................................................................70 独占锁....................................................................................................................................................................70 共享锁....................................................................................................................................................................70 4.1.9.12. 重量级锁(Mutex Lock) ................................................................................................................71 4.1.9.13. 轻量级锁..............................................................................................................................................71 锁升级....................................................................................................................................................................71 4.1.9.14. 偏向锁..................................................................................................................................................71 4.1.9.15. 分段锁..................................................................................................................................................71 4.1.9.16. 锁优化..................................................................................................................................................71 减少锁持有时间....................................................................................................................................................72 减小锁粒度............................................................................................................................................................72 锁分离....................................................................................................................................................................72 锁粗化....................................................................................................................................................................72 锁消除....................................................................................................................................................................72 4.1.10. 线程基本方法 ..............................................................................................................................72 4.1.10.1. 线程等待(wait)...............................................................................................................................73 4.1.10.2. 线程睡眠(sleep).............................................................................................................................73 4.1.10.3. 线程让步(yield)..............................................................................................................................73 4.1.10.4. 线程中断(interrupt)........................................................................................................................73 4.1.10.5. Join 等待其他线程终止......................................................................................................................74 4.1.10.6. 为什么要用 join()方法? ....................................................................................................................74 4.1.10.7. 线程唤醒(notify).............................................................................................................................74 4.1.10.8. 其他方法:..........................................................................................................................................74 4.1.11. 线程上下文切换 ..........................................................................................................................75 4.1.11.1. 进程......................................................................................................................................................75 4.1.11.2. 上下文..................................................................................................................................................75 4.1.11.3. 寄存器..................................................................................................................................................75 4.1.11.4. 程序计数器..........................................................................................................................................75 4.1.11.5. PCB-“切换桢”.................................................................................................................................75 4.1.11.6. 上下文切换的活动: ..........................................................................................................................76 4.1.11.7. 引起线程上下文切换的原因 ..............................................................................................................76 4.1.12. 同步锁与死锁 ..............................................................................................................................76 4.1.12.1. 同步锁..................................................................................................................................................76 4.1.12.2. 死锁......................................................................................................................................................76 4.1.13. 线程池原理 ..................................................................................................................................76 4.1.13.1. 线程复用..............................................................................................................................................76 4.1.13.2. 线程池的组成......................................................................................................................................76 4.1.13.3. 拒绝策略..............................................................................................................................................78 4.1.13.4. Java 线程池工作过程 .........................................................................................................................78 4.1.14. JAVA 阻塞队列原理....................................................................................................................79 4.1.14.1. 阻塞队列的主要方法 ..........................................................................................................................80 插入操作:............................................................................................................................................................80 获取数据操作:....................................................................................................................................................81 4.1.14.2. Java 中的阻塞队列 .............................................................................................................................81 4.1.14.3. ArrayBlockingQueue(公平、非公平) .......................................................................................82 4.1.14.4. LinkedBlockingQueue(两个独立锁提高并发) .........................................................................82 4.1.14.5. PriorityBlockingQueue(compareTo 排序实现优先)..............................................................82 4.1.14.6. DelayQueue(缓存失效、定时任务 )..........................................................................................82 4.1.14.7. SynchronousQueue(不存储数据、可用于传递数据)..............................................................83 4.1.14.8. LinkedTransferQueue......................................................................................................................83 13/04/2018 Page 5 of 283 4.1.14.9. LinkedBlockingDeque.....................................................................................................................83 4.1.15. CyclicBarrier、CountDownLatch、Semaphore 的用法........................................................84 4.1.15.1. CountDownLatch(线程计数器 ) ................................................................................................84 4.1.15.2. CyclicBarrier(回环栅栏-等待至 barrier 状态再全部同时执行) ...............................................84 4.1.15.3. Semaphore(信号量-控制同时访问的线程个数) .......................................................................85 4.1.16. volatile 关键字的作用(变量可见性、禁止重排序) .............................................................87 变量可见性............................................................................................................................................................87 禁止重排序............................................................................................................................................................87 比 sychronized 更轻量级的同步锁.....................................................................................................................87 适用场景................................................................................................................................................................87 4.1.17. 如何在两个线程之间共享数据...................................................................................................88 将数据抽象成一个类,并将数据的操作作为这个类的方法.............................................................................88 Runnable 对象作为一个类的内部类 ..................................................................................................................89 4.1.18. ThreadLocal 作用(线程本地存储)........................................................................................90 ThreadLocalMap(线程的一个属性) ..............................................................................................................90 使用场景................................................................................................................................................................91 4.1.19. synchronized 和 ReentrantLock 的区别 ..................................................................................91 4.1.19.1. 两者的共同点: ..................................................................................................................................91 4.1.19.2. 两者的不同点: ..................................................................................................................................92 4.1.20. ConcurrentHashMap 并发.........................................................................................................92 4.1.20.1. 减小锁粒度..........................................................................................................................................92 4.1.20.2. ConcurrentHashMap 分段锁..........................................................................................................92 ConcurrentHashMap 是由 Segment 数组结构和 HashEntry 数组结构组成.................................................93 4.1.21. Java 中用到的线程调度 .............................................................................................................93 4.1.21.1. 抢占式调度:......................................................................................................................................93 4.1.21.2. 协同式调度:......................................................................................................................................93 4.1.21.3. JVM 的线程调度实现(抢占式调度) .............................................................................................94 4.1.21.4. 线程让出 cpu 的情况: .....................................................................................................................94 4.1.22. 进程调度算法 ..............................................................................................................................94 4.1.22.1. 优先调度算法......................................................................................................................................94 4.1.22.2. 高优先权优先调度算法 ......................................................................................................................95 4.1.22.3. 基于时间片的轮转调度算法 ..............................................................................................................96 4.1.23. 什么是 CAS(比较并交换-乐观锁机制-锁自旋) ..................................................................96 4.1.23.1. 概念及特性..........................................................................................................................................96 4.1.23.2. 原子包 java.util.concurrent.atomic(锁自旋) ...........................................................................97 4.1.23.3. ABA 问题.............................................................................................................................................98 4.1.24. 什么是 AQS(抽象的队列同步器).........................................................................................98 Exclusive 独占资源-ReentrantLock ...................................................................................................................99 Share 共享资源-Semaphore/CountDownLatch ...............................................................................................99 同步器的实现是 ABS 核心(state 资源状态计数).......................................................................................100 ReentrantReadWriteLock 实现独占和共享两种方式.....................................................................................100 5. JAVA 基础..........................................................................................................................................101 5.1.1. JAVA 异常分类及处理..............................................................................................................101 5.1.1.1. 概念....................................................................................................................................................101 5.1.1.2. 异常分类............................................................................................................................................101 Error.....................................................................................................................................................................101 Exception(RuntimeException、CheckedException) ...........................................................................101 5.1.1.3. 异常的处理方式 ................................................................................................................................102 遇到问题不进行具体处理,而是继续抛给调用者 (throw,throws).........................................................102 try catch 捕获异常针对性处理方式..................................................................................................................102 5.1.1.4. Throw 和 throws 的区别: ............................................................................................................102 13/04/2018 Page 6 of 283 位置不同..............................................................................................................................................................102 功能不同:..........................................................................................................................................................102 5.1.2. JAVA 反射 .................................................................................................................................103 5.1.2.1. 动态语言............................................................................................................................................103 5.1.2.2. 反射机制概念 (运行状态中知道类所有的属性和方法)............................................................103 5.1.2.3. 反射的应用场合 ................................................................................................................................103 编译时类型和运行时类型..................................................................................................................................103 的编译时类型无法获取具体方法......................................................................................................................104 5.1.2.4. Java 反射 API....................................................................................................................................104 反射 API 用来生成 JVM 中的类、接口或则对象的信息。 ............................................................................104 5.1.2.5. 反射使用步骤(获取 Class 对象、调用对象方法) .....................................................................104 5.1.2.6. 获取 Class 对象的 3 种方法 ............................................................................................................104 调用某个对象的 getClass()方法.......................................................................................................................104 调用某个类的 class 属性来获取该类对应的 Class 对象................................................................................104 使用 Class 类中的 forName()静态方法(最安全/性能最好)............................................................................104 5.1.2.7. 创建对象的两种方法 ........................................................................................................................105 Class 对象的 newInstance().............................................................................................................................105 调用 Constructor 对象的 newInstance()..........................................................................................................105 5.1.3. JAVA 注解 .................................................................................................................................106 5.1.3.1. 概念 ........................................................................................................................................................106 5.1.3.2. 4 种标准元注解......................................................................................................................................106 @Target 修饰的对象范围 .................................................................................................................................106 @Retention 定义 被保留的时间长短...............................................................................................................106 @Documented ᧿述-javadoc................................................................................................................................106 @Inherited 阐述了某个被标注的类型是被继承的 ..............................................................................................106 5.1.3.3. 注解处理器.............................................................................................................................................107 5.1.4. JAVA 内部类 .............................................................................................................................109 5.1.4.1. 静态内部类.............................................................................................................................................109 5.1.4.2. 成员内部类.............................................................................................................................................110 5.1.4.3. 局部内部类(定义在方法中的类).....................................................................................................110 5.1.4.4. 匿名内部类(要继承一个父类或者实现一个接口、直接使用 new 来生成一个对象的引用).....111 5.1.5. JAVA 泛型 .................................................................................................................................112 5.1.5.1. 泛型方法(<E>).............................................................................................................................112 5.1.5.2. 泛型类<T> .............................................................................................................................................112 5.1.5.3. 类型通配符? ..........................................................................................................................................113 5.1.5.4. 类型擦除 ................................................................................................................................................113 5.1.6. JAVA 序列化(创建可复用的 Java 对象).................................................................................113 保存(持久化)对象及其状态到内存或者磁盘....................................................................................................113 序列化对象以字节数组保持-静态成员不保存.................................................................................................113 序列化用户远程对象传输..................................................................................................................................113 Serializable 实现序列化 ....................................................................................................................................113 ObjectOutputStream 和 ObjectInputStream 对对象进行序列化及反序列化...............................................113 writeObject 和 readObject 自定义序列化策略................................................................................................113 序列化 ID.............................................................................................................................................................113 序列化并不保存静态变量..................................................................................................................................114 序列化子父类说明..............................................................................................................................................114 Transient 关键字阻止该变量被序列化到文件中............................................................................................114 5.1.7. JAVA 复制 .................................................................................................................................114 5.1.7.1. 直接赋值复制.........................................................................................................................................114 5.1.7.2. 浅复制(复制引用但不复制引用的对象).....................................................................................114 5.1.7.3. 深复制(复制对象和其应用对象).................................................................................................115 5.1.7.4. 序列化(深 clone 一中实现)........................................................................................................115 6. SPRING 原理 .....................................................................................................................................116 6.1.1. Spring 特点................................................................................................................................116 6.1.1.1. 轻量级................................................................................................................................................116 13/04/2018 Page 7 of 283 6.1.1.2. 控制反转............................................................................................................................................116 6.1.1.3. 面向切面............................................................................................................................................116 6.1.1.4. 容器....................................................................................................................................................116 6.1.1.5. 框架集合............................................................................................................................................116 6.1.2. Spring 核心组件........................................................................................................................117 6.1.3. Spring 常用模块........................................................................................................................117 6.1.4. Spring 主要包............................................................................................................................118 6.1.5. Spring 常用注解........................................................................................................................118 6.1.6. Spring 第三方结合....................................................................................................................119 6.1.7. Spring IOC 原理........................................................................................................................120 6.1.7.1. 概念 ........................................................................................................................................................120 6.1.7.2. Spring 容器高层视图 ............................................................................................................................120 6.1.7.3. IOC 容器实现.........................................................................................................................................120 BeanFactory-框架基础设施..............................................................................................................................120 1.1..1.1.1 BeanDefinitionRegistry 注册表.................................................................................................121 1.1..1.1.2 BeanFactory 顶层接口..............................................................................................................121 1.1..1.1.3 ListableBeanFactory .................................................................................................................121 1.1..1.1.4 HierarchicalBeanFactory 父子级联..........................................................................................121 1.1..1.1.5 ConfigurableBeanFactory.........................................................................................................121 1.1..1.1.6 AutowireCapableBeanFactory 自动装配 ................................................................................122 1.1..1.1.7 SingletonBeanRegistry 运行期间注册单例 Bean...................................................................122 1.1..1.1.8 依赖日志框框.............................................................................................................................122 ApplicationContext 面向开发应用....................................................................................................................122 WebApplication 体系架构 .................................................................................................................................123 6.1.7.4. Spring Bean 作用域..............................................................................................................................123 singleton:单例模式(多线程下不安全) ......................................................................................................123 prototype:原型模式每次使用时创建 ................................................................................................................124 Request:一次 request 一个实例....................................................................................................................124 session................................................................................................................................................................124 global Session....................................................................................................................................................124 6.1.7.5. Spring Bean 生命周期..........................................................................................................................124 实例化..................................................................................................................................................................124 IOC 依赖注入......................................................................................................................................................124 setBeanName 实现............................................................................................................................................124 BeanFactoryAware 实现...................................................................................................................................124 ApplicationContextAware 实现.........................................................................................................................125 postProcessBeforeInitialization 接口实现-初始化预处理..........................................................................125 init-method..........................................................................................................................................................125 postProcessAfterInitialization...........................................................................................................................125 Destroy 过期自动清理阶段 ...............................................................................................................................125 destroy-method 自配置清理 .............................................................................................................................125 6.1.7.6. Spring 依赖注入四种方式....................................................................................................................126 构造器注入..........................................................................................................................................................126 setter 方法注入...................................................................................................................................................127 静态工厂注入......................................................................................................................................................127 实例工厂..............................................................................................................................................................127 6.1.7.7. 5 种不同方式的自动装配......................................................................................................................128 6.1.8. Spring APO 原理 ......................................................................................................................129 6.1.8.1. 概念 ........................................................................................................................................................129 6.1.8.2. AOP 核心概念 .......................................................................................................................................129 6.1.8.1. AOP 两种代理方式 ...............................................................................................................................130 JDK 动态接口代理 .............................................................................................................................................130 CGLib 动态代理..................................................................................................................................................131 6.1.8.2. 实现原理 ................................................................................................................................................131 6.1.9. Spring MVC 原理......................................................................................................................132 6.1.9.1. MVC 流程...............................................................................................................................................132 Http 请求到 DispatcherServlet .......................................................................................................................133 HandlerMapping 寻找处理器............................................................................................................................133 调用处理器 Controller........................................................................................................................................133 13/04/2018 Page 8 of 283 Controller 调用业务逻辑处理后,返回 ModelAndView.................................................................................133 DispatcherServlet 查询 ModelAndView ..........................................................................................................133 ModelAndView 反馈浏览器 HTTP ...................................................................................................................133 6.1.9.1. MVC 常用注解.......................................................................................................................................133 6.1.10. Spring Boot 原理.......................................................................................................................134 1. 创建独立的 Spring 应用程序.............................................................................................................................134 2. 嵌入的 Tomcat,无需部署 WAR 文件.............................................................................................................134 3. 简化 Maven 配置................................................................................................................................................134 4. 自动配置 Spring .................................................................................................................................................134 5. ᨀ供生产就绪型功能,如指标,健康检查和外部配置...................................................................................134 6. 绝对没有代码生成和对 XML 没有要求配置 [1]...............................................................................................134 6.1.11. JPA 原理....................................................................................................................................134 6.1.11.1. 事务....................................................................................................................................................134 6.1.11.2. 本地事务............................................................................................................................................134 6.1.11.1. 分布式事务........................................................................................................................................135 6.1.11.1. 两阶段ᨀ交........................................................................................................................................136 1 准备阶段...........................................................................................................................................................136 2 ᨀ交阶段:.......................................................................................................................................................136 6.1.12. Mybatis 缓存..............................................................................................................................137 6.1.12.1. Mybatis 的一级缓存原理(sqlsession 级别)..............................................................................138 6.1.12.2. 二级缓存原理(mapper 基本).....................................................................................................138 具体使用需要配置:..........................................................................................................................................139 6.1.13. Tomcat 架构..............................................................................................................................139 7. 微服务 .................................................................................................................................................140 7.1.1. 服务注册发现 ............................................................................................................................140 7.1.1.1. 客户端注册(zookeeper)..................................................................................................................140 7.1.1.2. 第三方注册(独立的服务 Registrar)...............................................................................................140 7.1.1.3. 客户端发现.............................................................................................................................................141 7.1.1.4. 服务端发现.............................................................................................................................................142 7.1.1.5. Consul....................................................................................................................................................142 7.1.1.6. Eureka....................................................................................................................................................142 7.1.1.7. SmartStack............................................................................................................................................142 7.1.1.8. Etcd ........................................................................................................................................................142 7.1.2. API 网关.....................................................................................................................................142 7.1.2.1. 请求转发 ................................................................................................................................................143 7.1.2.2. 响应合并 ................................................................................................................................................143 7.1.2.3. 协议转换 ................................................................................................................................................143 7.1.2.4. 数据转换 ................................................................................................................................................143 7.1.2.5. 安全认证 ................................................................................................................................................144 7.1.3. 配置中心 ....................................................................................................................................144 7.1.3.1. zookeeper 配置中心.............................................................................................................................144 7.1.3.2. 配置中心数据分类.................................................................................................................................144 7.1.4. 事件调度(kafka)...................................................................................................................144 7.1.5. 服务跟踪(starter-sleuth)...................................................................................................144 7.1.6. 服务熔断(Hystrix) ................................................................................................................145 7.1.6.1. Hystrix 断路器机制................................................................................................................................146 7.1.7. API 管理.....................................................................................................................................146 8. NETTY 与 RPC ..................................................................................................................................147 8.1.1. Netty 原理..................................................................................................................................147 8.1.2. Netty 高性能..............................................................................................................................147 8.1.2.1. 多路复用通讯方式 ............................................................................................................................147 8.1.2.1. 异步通讯 NIO....................................................................................................................................148 8.1.2.2. 零拷贝(DIRECT BUFFERS 使用堆外直接内存)..........................................................................149 8.1.2.3. 内存池(基于内存池的缓冲区重用机制) .........................................................................................149 8.1.2.4. 高效的 Reactor 线程模型.....................................................................................................................149 Reactor 单线程模型...........................................................................................................................................149 Reactor 多线程模型...........................................................................................................................................150 13/04/2018 Page 9 of 283 主从 Reactor 多线程模型..................................................................................................................................150 8.1.2.5. 无锁设计、线程绑定.............................................................................................................................151 8.1.2.6. 高性能的序列化框架.............................................................................................................................151 小包封大包,防止网络阻塞..............................................................................................................................152 软中断 Hash 值和 CPU 绑定.............................................................................................................................152 8.1.3. Netty RPC 实现.........................................................................................................................152 8.1.3.1. 概念 ........................................................................................................................................................152 8.1.3.2. 关键技术 ................................................................................................................................................152 8.1.3.3. 核心流程 ................................................................................................................................................152 8.1.3.1. 消息编解码.............................................................................................................................................153 息数据结构(接口名称 方法名 参数类型和参数值 超时时间 requestID) ...........................................153 序列化..................................................................................................................................................................154 8.1.3.1. 通讯过程 ................................................................................................................................................154 核心问题(线程暂停、消息乱序) .......................................................................................................................154 通讯流程..............................................................................................................................................................154 requestID 生成-AtomicLong .............................................................................................................................154 存放回调对象 callback 到全局 ConcurrentHashMap ....................................................................................154 synchronized 获取回调对象 callback 的锁并自旋 wait..................................................................................154 监听消息的线程收到消息,找到 callback 上的锁并唤醒 ..............................................................................155 8.1.4. RMI 实现方式............................................................................................................................155 8.1.4.1. 实现步骤 ................................................................................................................................................155 8.1.5. Protoclol Buffer.........................................................................................................................156 8.1.5.1. 特点 ........................................................................................................................................................157 8.1.6. Thrift ...........................................................................................................................................157 9. 网络.....................................................................................................................................................159 9.1.1. 网络 7 层架构 ............................................................................................................................159 9.1.2. TCP/IP 原理...............................................................................................................................160 9.1.2.1. 网络访问层(Network Access Layer)...................................................................................................160 9.1.2.2. 网络层(Internet Layer) .........................................................................................................................160 9.1.2.3. 传输层(Tramsport Layer-TCP/UDP) ..................................................................................................160 9.1.2.4. 应用层(Application Layer)....................................................................................................................160 9.1.3. TCP 三次握手/四次挥手 ..........................................................................................................161 9.1.3.1. 数据包说明.............................................................................................................................................161 9.1.3.2. 三次握手 ................................................................................................................................................162 9.1.3.3. 四次挥手 ................................................................................................................................................163 9.1.4. HTTP 原理.................................................................................................................................164 9.1.4.1. 传输流程 ................................................................................................................................................164 1:地址解析 .......................................................................................................................................................164 2:封装 HTTP 请求数据包 ...............................................................................................................................165 3:封装成 TCP 包并建立连接..........................................................................................................................165 4:客户机发送请求命........................................................................................................................................165 5:服务器响应....................................................................................................................................................165 6:服务器关闭 TCP 连接..................................................................................................................................165 9.1.4.2. HTTP 状态 .............................................................................................................................................165 9.1.4.3. HTTPS ...................................................................................................................................................166 建立连接获取证书..............................................................................................................................................167 证书验证..............................................................................................................................................................167 数据加密和传输..................................................................................................................................................167 9.1.5. CDN 原理...................................................................................................................................167 9.1.5.1. 分发服务系统.........................................................................................................................................167 9.1.5.2. 负载均衡系统:.....................................................................................................................................168 9.1.5.3. 管理系统:.............................................................................................................................................168 10. 日志 .................................................................................................................................................169 10.1.1. Slf4j ............................................................................................................................................169 10.1.2. Log4j ..........................................................................................................................................169 10.1.3. LogBack.....................................................................................................................................169 10.1.3.1. Logback 优点...................................................................................................................................169 10.1.4. ELK.............................................................................................................................................170 13/04/2018 Page 10 of 283 11. ZOOKEEPER .................................................................................................................................171 11.1.1. Zookeeper 概念 ........................................................................................................................171 11.1.1. Zookeeper 角色 ........................................................................................................................171 11.1.1.1. Leader...............................................................................................................................................171 11.1.1.2. Follower............................................................................................................................................171 11.1.1.3. Observer...........................................................................................................................................171 11.1.1.1. ZAB 协议 ...........................................................................................................................................172 事务编号 Zxid(事务请求计数器 epoch) ...................................................................................................172 epoch...................................................................................................................................................................172 Zab 协议有两种模式-恢复模式(选主)、广播模式(同步)......................................................................172 ZAB 协议 4 阶段.................................................................................................................................................172 Leader election(选举阶段-选出准 Leader) ................................................................................................172 Discovery(发现阶段-接受ᨀ议、生成 epoch、接受 epoch)....................................................................173 Synchronization(同步阶段-同步 follower 副本).........................................................................................173 Broadcast(广播阶段-leader 消息广播).......................................................................................................173 ZAB 协议 JAVA 实现(FLE-发现阶段和同步合并为 Recovery Phase(恢复阶段))............................173 11.1.1.2. 投票机制............................................................................................................................................173 11.1.2. Zookeeper 工作原理(原子广播).........................................................................................174 11.1.3. Znode 有四种形式的目录节点 ................................................................................................174 12. KAFKA............................................................................................................................................175 12.1.1. Kafka 概念 .................................................................................................................................175 12.1.2. Kafka 数据存储设计 .................................................................................................................175 12.1.2.1. partition 的数据文件(offset,MessageSize,data)............................................................175 12.1.2.2. 数据文件分段 segment(顺序读写、分段命令、二分查找)....................................................176 12.1.2.3. 数据文件索引(分段索引、稀疏存储).........................................................................................176 12.1.3. 生产者设计 ................................................................................................................................176 12.1.3.1. 负载均衡(partition 会均衡分布到不同 broker 上).................................................................176 12.1.3.2. 批量发送............................................................................................................................................177 12.1.3.3. 压缩(GZIP 或 Snappy)...............................................................................................................177 12.1.1. 消费者设计 ................................................................................................................................177 12.1.1.1. Consumer Group ...........................................................................................................................178 13. RABBITMQ ....................................................................................................................................179 13.1.1. 概念 ............................................................................................................................................179 13.1.2. RabbitMQ 架构 .........................................................................................................................179 13.1.2.1. Message ...........................................................................................................................................180 13.1.2.2. Publisher ..........................................................................................................................................180 13.1.2.3. Exchange(将消息路由给队列 ) .................................................................................................180 13.1.2.4. Binding(消息队列和交换器之间的关联)..................................................................................180 13.1.2.5. Queue ...............................................................................................................................................180 13.1.2.6. Connection......................................................................................................................................180 13.1.2.7. Channel ............................................................................................................................................180 13.1.2.8. Consumer.........................................................................................................................................180 13.1.2.9. Virtual Host .....................................................................................................................................180 13.1.2.10. Broker...............................................................................................................................................181 13.1.3. Exchange 类型 .........................................................................................................................181 13.1.3.1. Direct 键(routing key)分布: ..................................................................................................181 13.1.3.2. Fanout(广播分发).......................................................................................................................181 13.1.3.3. topic 交换器(模式匹配) ...................................................................................................182 13/04/2018 Page 11 of 283 14. HBASE............................................................................................................................................183 14.1.1. 概念 ............................................................................................................................................183 14.1.2. 列式存储 ....................................................................................................................................183 14.1.3. Hbase 核心概念........................................................................................................................184 14.1.3.1. Column Family 列族.......................................................................................................................184 14.1.3.2. Rowkey(Rowkey 查询,Rowkey 范围扫描,全表扫描).......................................................184 14.1.3.3. Region 分区......................................................................................................................................184 14.1.3.4. TimeStamp 多版本..........................................................................................................................184 14.1.4. Hbase 核心架构........................................................................................................................184 14.1.4.1. Client:.............................................................................................................................................185 14.1.4.2. Zookeeper:....................................................................................................................................185 14.1.4.3. Hmaster............................................................................................................................................185 14.1.4.4. HregionServer.................................................................................................................................185 14.1.4.5. Region 寻址方式(通过 zookeeper .META)............................................................................186 14.1.4.6. HDFS .................................................................................................................................................186 14.1.5. Hbase 的写逻辑........................................................................................................................187 14.1.5.1. Hbase 的写入流程 ...........................................................................................................................187 获取 RegionServer ............................................................................................................................................187 请求写 Hlog ........................................................................................................................................................187 请求写 MemStore ..............................................................................................................................................187 14.1.5.2. MemStore 刷盘...............................................................................................................................187 全局内存控制......................................................................................................................................................188 MemStore 达到上限...........................................................................................................................................188 RegionServer 的 Hlog 数量达到上限...............................................................................................................188 手工触发..............................................................................................................................................................188 关闭 RegionServer 触发....................................................................................................................................188 Region 使用 HLOG 恢复完数据后触发............................................................................................................188 14.1.6. HBase vs Cassandra...............................................................................................................188 15. MONGODB.....................................................................................................................................190 15.1.1. 概念 ............................................................................................................................................190 15.1.2. 特点 ............................................................................................................................................190 16. CASSANDRA.................................................................................................................................192 16.1.1. 概念 ............................................................................................................................................192 16.1.2. 数据模型 ....................................................................................................................................192 Key Space(对应 SQL 数据库中的 database)................................................................................................192 Key(对应 SQL 数据库中的主键)......................................................................................................................192 column(对应 SQL 数据库中的列)....................................................................................................................192 super column(SQL 数据库不支持)..................................................................................................................192 Standard Column Family(相对应 SQL 数据库中的 table)............................................................................192 Super Column Family(SQL 数据库不支持) ...................................................................................................192 16.1.3. Cassandra 一致 Hash 和虚拟节点 .........................................................................................192 一致性 Hash(多米诺 down 机).........................................................................................................................192 虚拟节点(down 机多节点托管)........................................................................................................................193 16.1.4. Gossip 协议...............................................................................................................................193 Gossip 节点的通信方式及收敛性 .........................................................................................................................194 Gossip 两个节点(A、B)之间存在三种通信方式(push、pull、push&pull)........................................194 gossip 的协议和 seed list(防止集群分列) ..................................................................................................194 16.1.5. 数据复制 ....................................................................................................................................194 Partitioners(计算 primary key token 的 hash 函数).......................................................................................194 两种可用的复制策略: ..........................................................................................................................................194 SimpleStrategy:仅用于单数据中心,...........................................................................................................194 将第一个 replica 放在由 partitioner 确定的节点中,其余的 replicas 放在上述节点顺时针方向的后续节 点中。..................................................................................................................................................................194 13/04/2018 Page 12 of 283 NetworkTopologyStrategy:可用于较复杂的多数据中心。.........................................................................194 可以指定在每个数据中心分别存储多少份 replicas。...................................................................................194 16.1.6. 数据写请求和协调者 ................................................................................................................195 协调者(coordinator)................................................................................................................................................195 16.1.7. 数据读请求和后台修复 ............................................................................................................195 16.1.8. 数据存储(CommitLog、MemTable、SSTable)...........................................................196 SSTable 文件构成(BloomFilter、index、data、static)................................................................................196 16.1.9. 二级索引(对要索引的 value 摘要,生成 RowKey)..........................................................196 16.1.10. 数据读写 ................................................................................................................................197 数据写入和更新(数据追加) ..............................................................................................................................197 数据的写和删除效率极高..................................................................................................................................197 错误恢复简单......................................................................................................................................................197 读的复杂度高......................................................................................................................................................197 数据删除(column 的墓碑) ................................................................................................................................197 墓碑......................................................................................................................................................................198 垃圾回收 compaction ........................................................................................................................................198 数据读取(memtable SStables)................................................................................................................198 行缓存和键缓存请求流程图 ..................................................................................................................................199 Row Cache(SSTables 中频繁被访问的数据)............................................................................................199 Bloom Filter(查找数据可能对应的 SSTable).............................................................................................200 Partition Key Cache(查找数据可能对应的 Partition key) ........................................................................200 Partition Summary(内存中存储一些 partition index 的样本)...................................................................200 Partition Index(磁盘中) ................................................................................................................................200 Compression offset map(磁盘中)...............................................................................................................200 17. 设计模式..........................................................................................................................................201 17.1.1. 设计原则 ....................................................................................................................................201 17.1.2. 工厂方法模式 ............................................................................................................................201 17.1.3. 抽象工厂模式 ............................................................................................................................201 17.1.4. 单例模式 ....................................................................................................................................201 17.1.5. 建造者模式 ................................................................................................................................201 17.1.6. 原型模式 ....................................................................................................................................201 17.1.7. 适配器模式 ................................................................................................................................201 17.1.8. 装饰器模式 ................................................................................................................................201 17.1.9. 代理模式 ....................................................................................................................................201 17.1.10. 外观模式 ................................................................................................................................201 17.1.11. 桥接模式 ................................................................................................................................201 17.1.12. 组合模式 ................................................................................................................................201 17.1.13. 享元模式 ................................................................................................................................201 17.1.14. 策略模式 ................................................................................................................................201 17.1.15. 模板方法模式 ........................................................................................................................201 17.1.16. 观察者模式 ............................................................................................................................201 17.1.17. 迭代子模式 ............................................................................................................................201 17.1.18. 责任链模式 ............................................................................................................................201 17.1.19. 命令模式 ................................................................................................................................201 17.1.20. 备忘录模式 ............................................................................................................................201 17.1.21. 状态模式 ................................................................................................................................202 17.1.22. 访问者模式 ............................................................................................................................202 17.1.23. 中介者模式 ............................................................................................................................202 17.1.24. 解释器模式 ............................................................................................................................202 18. 负载均衡..........................................................................................................................................203 18.1.1. 四层负载均衡 vs 七层负载均衡 ..............................................................................................203 18.1.1.1. 四层负载均衡(目标地址和端口交换).........................................................................................203 F5:硬件负载均衡器,功能很好,但是成本很高。......................................................................................203 lvs:重量级的四层负载软件。 .........................................................................................................................203 nginx:轻量级的四层负载软件,带缓存功能,正则表达式较灵活。 .........................................................203 13/04/2018 Page 13 of 283 haproxy:模拟四层转发,较灵活。................................................................................................................203 18.1.1.2. 七层负载均衡(内容交换) ............................................................................................................203 haproxy:天生负载均衡技能,全面支持七层代理,会话保持,标记,路径转移;.................................204 nginx:只在 http 协议和 mail 协议上功能比较好,性能与 haproxy 差不多;............................................204 apache:功能较差.............................................................................................................................................204 Mysql proxy:功能尚可。.................................................................................................................................204 18.1.2. 负载均衡算法/策略 ...................................................................................................................204 18.1.2.1. 轮循均衡(Round Robin) ...........................................................................................................204 18.1.2.2. 权重轮循均衡(Weighted Round Robin)................................................................................204 18.1.2.3. 随机均衡(Random) ....................................................................................................................204 18.1.2.4. 权重随机均衡(Weighted Random).........................................................................................204 18.1.2.5. 响应速度均衡(Response Time 探测时间)...............................................................................204 18.1.2.6. 最少连接数均衡(Least Connection)........................................................................................205 18.1.2.7. 处理能力均衡(CPU、内存) ........................................................................................................205 18.1.2.8. DNS 响应均衡(Flash DNS) .......................................................................................................205 18.1.2.9. 哈希算法............................................................................................................................................205 18.1.2.10. IP 地址散列(保证客户端服务器对应关系稳定)........................................................................205 18.1.2.11. URL 散列...........................................................................................................................................205 18.1.3. LVS.............................................................................................................................................206 18.1.3.1. LVS 原理............................................................................................................................................206 IPVS ....................................................................................................................................................................206 18.1.3.1. LVS NAT 模式 ..................................................................................................................................207 18.1.3.2. LVS DR 模式(局域网改写 mac 地址)........................................................................................208 18.1.3.3. LVS TUN 模式(IP 封装、跨网段)..............................................................................................209 18.1.3.4. LVS FULLNAT 模式.........................................................................................................................210 18.1.4. Keepalive...................................................................................................................................211 18.1.5. Nginx 反向代理负载均衡 .........................................................................................................211 18.1.5.1. upstream_module 和健康检测........................................................................................................212 18.1.5.1. proxy_pass 请求转发.......................................................................................................................212 18.1.6. HAProxy ....................................................................................................................................213 19. 数据库 .............................................................................................................................................214 19.1.1. 存储引擎 ....................................................................................................................................214 19.1.1.1. 概念....................................................................................................................................................214 19.1.1.2. InnoDB(B 树) .............................................................................................................................214 19.1.1.3. TokuDB(Fractal Tree-节点带数据) ..........................................................................................215 19.1.1.4. MyIASM.............................................................................................................................................215 19.1.1.5. Memory..............................................................................................................................................215 19.1.2. 索引 ............................................................................................................................................215 19.1.2.1. 常见索引原则有 ................................................................................................................................216 1.选择唯一性索引 ..............................................................................................................................................216 2.为经常需要排序、分组和联合操作的字段建立索引: ...............................................................................216 3.为常作为查询条件的字段建立索引。........................................................................................................216 4.限制索引的数目:........................................................................................................................................216 尽量使用数据量少的索引..................................................................................................................................216 尽量使用前缀来索引..........................................................................................................................................216 7.删除不再使用或者很少使用的索引............................................................................................................216 8 . 最左前缀匹配原则,非常重要的原则。.....................................................................................................216 10 . 尽量选择区分度高的列作为索引 ..............................................................................................................216 11 .索引列不能参与计算,保持列“干净”:带函数的查询不参与索引。 ................................................216 12 .尽量的扩展索引,不要新建索引。............................................................................................................216 19.1.3. 数据库三范式 ............................................................................................................................216 19.1.3.1. 第一范式(1st NF -列都是不可再分).............................................................................................216 19.1.3.2. 第二范式(2nd NF-每个表只描述一件事情).................................................................................216 19.1.3.3. 第三范式(3rd NF- 不存在对非主键列的传递依赖).....................................................................217 19.1.4. 数据库是事务 ............................................................................................................................217 13/04/2018 Page 14 of 283 原子性(Atomicity)..........................................................................................................................................217 一致性(Consistency)....................................................................................................................................217 隔离性(Isolation)...........................................................................................................................................218 永久性(Durability) .........................................................................................................................................218 19.1.5. 存储过程(特定功能的 SQL 语句集)........................................................................................218 存储过程优化思路: ..............................................................................................................................................218 19.1.6. 触发器(一段能自动执行的程序)..............................................................................................218 19.1.7. 数据库并发策略 ........................................................................................................................218 19.1.7.1. 乐观锁................................................................................................................................................218 19.1.7.2. 悲观锁................................................................................................................................................219 19.1.7.3. 时间戳................................................................................................................................................219 19.1.8. 数据库锁 ....................................................................................................................................219 19.1.8.1. 行级锁................................................................................................................................................219 19.1.8.2. 表级锁................................................................................................................................................219 19.1.8.1. 页级锁................................................................................................................................................219 19.1.9. 基于 Redis 分布式锁 ................................................................................................................219 19.1.10. 分区分表 ................................................................................................................................220 垂直切分(按照功能模块) ...................................................................................................................................220 水平切分(按照规则划分存储) ...........................................................................................................................220 19.1.11. 两阶段ᨀ交协议 ....................................................................................................................220 19.1.11.1. 准备阶段............................................................................................................................................221 19.1.11.2. ᨀ交阶段............................................................................................................................................221 19.1.11.3. 缺点....................................................................................................................................................221 同步阻塞问题......................................................................................................................................................221 单点故障..............................................................................................................................................................221 数据不一致(脑裂问题)..................................................................................................................................221 二阶段无法解决的问题(数据状态不确定) ..................................................................................................221 19.1.12. 三阶段ᨀ交协议 ....................................................................................................................222 19.1.12.1. CanCommit 阶段 ..............................................................................................................................222 19.1.12.2. PreCommit 阶段 ...............................................................................................................................222 19.1.12.3. doCommit 阶段.................................................................................................................................222 19.1.13. 柔性事务 ................................................................................................................................222 19.1.13.1. 柔性事务............................................................................................................................................222 两阶段型..............................................................................................................................................................222 补偿型..................................................................................................................................................................222 异步确保型..........................................................................................................................................................223 最大努力通知型(多次尝试)..........................................................................................................................223 19.1.14. CAP........................................................................................................................................224 一致性(C): .......................................................................................................................................................224 可用性(A): .......................................................................................................................................................224 分区容忍性(P):................................................................................................................................................224 20. 一致性算法......................................................................................................................................225 20.1.1. Paxos .........................................................................................................................................225 Paxos 三种角色:Proposer,Acceptor,Learners ...........................................................................................225 Proposer: .........................................................................................................................................................225 Acceptor:..........................................................................................................................................................225 Learner:............................................................................................................................................................225 Paxos 算法分为两个阶段。具体如下:...............................................................................................................225 阶段一(准 leader 确定 ):............................................................................................................................225 阶段二(leader 确认):..................................................................................................................................225 20.1.2. Zab .............................................................................................................................................225 1.崩溃恢复:主要就是 Leader 选举过程.........................................................................................................226 2.数据同步:Leader 服务器与其他服务器进行数据同步..............................................................................226 3.消息广播:Leader 服务器将数据发送给其他服务器..................................................................................226 20.1.3. Raft.............................................................................................................................................226 20.1.3.1. 角色....................................................................................................................................................226 Leader(领导者-日志管理) ............................................................................................................................226 Follower(追随者-日志同步)..........................................................................................................................226 Candidate(候选者-负责选票).......................................................................................................................226 13/04/2018 Page 15 of 283 20.1.3.2. Term(任期)...................................................................................................................................226 20.1.3.3. 选举(Election)..............................................................................................................................227 选举定时器..........................................................................................................................................................227 20.1.3.4. 安全性(Safety).............................................................................................................................227 20.1.3.5. raft 协议和 zab 协议区别 .................................................................................................................227 20.1.4. NWR...........................................................................................................................................228 N:在分布式存储系统中,有多少份备份数据................................................................................................228 W:代表一次成功的更新操作要求至少有 w 份数据写入成功 ......................................................................228 R: 代表一次成功的读数据操作要求至少有 R 份数据成功读取..................................................................228 20.1.5. Gossip........................................................................................................................................228 20.1.6. 一致性 Hash..............................................................................................................................229 20.1.6.1. 一致性 Hash 特性.............................................................................................................................229 20.1.6.2. 一致性 Hash 原理.............................................................................................................................229 1.建构环形 hash 空间:....................................................................................................................................229 2.把需要缓存的内容(对象)映射到 hash 空间..................................................................................................229 3.把服务器(节点)映射到 hash 空间 .................................................................................................................229 4.把对象映射到服务节点...................................................................................................................................229 考察 cache 的变动.............................................................................................................................................230 虚拟节点..............................................................................................................................................................230 21. JAVA 算法 ......................................................................................................................................232 21.1.1. 二分查找 ....................................................................................................................................232 21.1.2. 冒泡排序算法 ............................................................................................................................232 21.1.3. 插入排序算法 ............................................................................................................................233 21.1.4. 快速排序算法 ............................................................................................................................234 21.1.1. 希尔排序算法 ............................................................................................................................236 21.1.2. 归并排序算法 ............................................................................................................................237 21.1.3. 桶排序算法 ................................................................................................................................240 21.1.4. 基数排序算法 ............................................................................................................................241 21.1.5. 剪枝算法 ....................................................................................................................................243 21.1.6. 回溯算法 ....................................................................................................................................243 21.1.7. 最短路径算法 ............................................................................................................................243 21.1.8. 最大子数组算法 ........................................................................................................................243 21.1.9. 最长公共子序算法 ....................................................................................................................243 21.1.10. 最小生成树算法 ....................................................................................................................243 22. 数据结构..........................................................................................................................................245 22.1.1. 栈(stack)...............................................................................................................................245 22.1.2. 队列(queue) .........................................................................................................................245 22.1.3. 链表(Link).............................................................................................................................245 22.1.4. 散列表(Hash Table)............................................................................................................246 22.1.5. 排序二叉树 ................................................................................................................................246 22.1.5.1. 插入操作............................................................................................................................................246 22.1.5.2. 删除操作............................................................................................................................................247 22.1.5.3. 查询操作............................................................................................................................................248 22.1.6. 红黑树 ........................................................................................................................................248 22.1.6.1. 红黑树的特性....................................................................................................................................248 22.1.6.1. 左旋....................................................................................................................................................248 22.1.6.1. 右旋....................................................................................................................................................249 22.1.6.1. 添加....................................................................................................................................................250 22.1.6.2. 删除....................................................................................................................................................251 22.1.7. B-TREE......................................................................................................................................252 22.1.8. 位图 ............................................................................................................................................254 23. 加密算法..........................................................................................................................................255 23.1.1. AES ............................................................................................................................................255 23.1.2. RSA............................................................................................................................................255 23.1.3. CRC............................................................................................................................................256 23.1.4. MD5............................................................................................................................................256 13/04/2018 Page 16 of 283 24. 分布式缓存......................................................................................................................................257 24.1.1. 缓存雪崩 ....................................................................................................................................257 24.1.2. 缓存穿透 ....................................................................................................................................257 24.1.3. 缓存预热 ....................................................................................................................................257 24.1.4. 缓存更新 ....................................................................................................................................257 24.1.5. 缓存降级 ....................................................................................................................................257 25. HADOOP ........................................................................................................................................259 25.1.1. 概念 ............................................................................................................................................259 25.1.2. HDFS .........................................................................................................................................259 25.1.2.1. Client..................................................................................................................................................259 25.1.2.2. NameNode........................................................................................................................................259 25.1.2.3. Secondary NameNode .................................................................................................................259 25.1.2.4. DataNode.........................................................................................................................................259 25.1.3. MapReduce...............................................................................................................................260 25.1.3.1. Client.................................................................................................................................................260 25.1.3.2. JobTracker .......................................................................................................................................260 25.1.3.3. TaskTracker......................................................................................................................................261 25.1.3.4. Task ...................................................................................................................................................261 25.1.3.5. Reduce Task 执行过程 ...................................................................................................................261 25.1.4. Hadoop MapReduce 作业的生命周期...................................................................................262 1.作业ᨀ交与初始化...........................................................................................................................................262 2.任务调度与监控。...........................................................................................................................................262 3.任务运行环境准备...........................................................................................................................................262 4.任务执行 ..........................................................................................................................................................262 5.作业完成。 ......................................................................................................................................................262 26. SPARK............................................................................................................................................263 26.1.1. 概念 ............................................................................................................................................263 26.1.2. 核心架构 ....................................................................................................................................263 Spark Core .........................................................................................................................................................263 Spark SQL ..........................................................................................................................................................263 Spark Streaming................................................................................................................................................263 Mllib .....................................................................................................................................................................263 GraphX................................................................................................................................................................263 26.1.3. 核心组件 ....................................................................................................................................264 Cluster Manager-制整个集群,监控 worker .................................................................................................264 Worker 节点-负责控制计算节点.......................................................................................................................264 Driver: 运行 Application 的 main()函数.........................................................................................................264 Executor:执行器,是为某个 Application 运行在 worker node 上的一个进程..........................................264 26.1.4. SPARK 编程模型......................................................................................................................264 26.1.5. SPARK 计算模型......................................................................................................................265 26.1.6. SPARK 运行流程......................................................................................................................266 1. 构建 Spark Application 的运行环境,启动 SparkContext....................................................................267 2. SparkContext 向资源管理器(可以是 Standalone,Mesos,Yarn)申请运行 Executor 资源,并启 动 StandaloneExecutorbackend,..................................................................................................................267 3. Executor 向 SparkContext 申请 Task .....................................................................................................267 4. SparkContext 将应用程序分发给 Executor............................................................................................267 5. SparkContext 构建成 DAG 图,将 DAG 图分解成 Stage、将 Taskset 发送给 Task Scheduler,最 后由 Task Scheduler 将 Task 发送给 Executor 运行.....................................................................................267 6. Task 在 Executor 上运行,运行完释放所有资源...................................................................................267 26.1.7. SPARK RDD 流程 ....................................................................................................................267 26.1.8. SPARK RDD.............................................................................................................................267 (1)RDD 的创建方式...........................................................................................................................................267 (2)RDD 的两种操作算子(转换(Transformation)与行动(Action))..............................................268 27. STORM ...........................................................................................................................................269 13/04/2018 Page 17 of 283 27.1.1. 概念 ............................................................................................................................................269 27.1.1. 集群架构 ....................................................................................................................................269 27.1.1.1. Nimbus(master-代码分发给 Supervisor) ................................................................................269 27.1.1.2. Supervisor(slave-管理 Worker 进程的启动和终止)...............................................................269 27.1.1.3. Worker(具体处理组件逻辑的进程)............................................................................................269 27.1.1.4. Task ...................................................................................................................................................270 27.1.1.5. ZooKeeper ........................................................................................................................................270 27.1.2. 编程模型(spout->tuple->bolt).......................................................................................270 27.1.2.1. Topology............................................................................................................................................270 27.1.2.2. Spout..................................................................................................................................................270 27.1.2.3. Bolt.....................................................................................................................................................270 27.1.2.4. Tuple..................................................................................................................................................270 27.1.2.5. Stream ...............................................................................................................................................271 27.1.3. Topology 运行...........................................................................................................................271 (1). Worker(进程) (2). Executor(线程) (3). Task..................................................................................271 27.1.3.1. Worker(1 个 worker 进程执行的是 1 个 topology 的子集) .......................................................271 27.1.3.2. Executor(executor 是 1 个被 worker 进程启动的单独线程)......................................................271 27.1.3.3. Task(最终运行 spout 或 bolt 中代码的单元)...............................................................................272 27.1.4. Storm Streaming Grouping.....................................................................................................272 27.1.4.1. huffle Grouping.................................................................................................................................273 27.1.4.2. Fields Grouping................................................................................................................................273 27.1.4.3. All grouping :广播..........................................................................................................................273 27.1.4.4. Global grouping................................................................................................................................274 27.1.4.5. None grouping :不分组.................................................................................................................274 27.1.4.6. Direct grouping :直接分组 指定分组 ...........................................................................................274 28. YARN ..............................................................................................................................................275 28.1.1. 概念 ............................................................................................................................................275 28.1.2. ResourceManager ...................................................................................................................275 28.1.3. NodeManager...........................................................................................................................275 28.1.4. ApplicationMaster .................................................................................................................276 28.1.5. YARN 运行流程 ....................................................................................................................277 29. 机器学习..........................................................................................................................................278 29.1.1. 决策树 ........................................................................................................................................278 29.1.2. 随机森林算法 ............................................................................................................................278 29.1.3. 逻辑回归 ....................................................................................................................................278 29.1.4. SVM............................................................................................................................................278 29.1.5. 朴素贝叶斯 ................................................................................................................................278 29.1.6. K 最近邻算法.............................................................................................................................278 29.1.7. K 均值算法.................................................................................................................................278 29.1.8. Adaboost 算法 ..........................................................................................................................278 29.1.9. 神经网络 ....................................................................................................................................278 29.1.10. 马尔可夫 ................................................................................................................................278 30. 云计算 .............................................................................................................................................279 30.1.1. SaaS ..........................................................................................................................................279 30.1.2. PaaS ..........................................................................................................................................279 30.1.3. IaaS............................................................................................................................................279 30.1.4. Docker........................................................................................................................................279 30.1.4.1. 概念....................................................................................................................................................279 30.1.4.2. Namespaces.....................................................................................................................................280 30.1.4.3. 进程(CLONE_NEWPID 实现的进程隔离)......................................................................................281 30.1.4.4. Libnetwork 与网络隔离....................................................................................................................281 30.1.4.5. 资源隔离与 CGroups .......................................................................................................................282 30.1.4.6. 镜像与 UnionFS................................................................................................................................282 30.1.4.7. 存储驱动............................................................................................................................................282 13/04/2018 Page 18 of 283 30.1.5. Openstack .................................................................................................................................283