美团系统交易面试资料整理


    1 目录
    1 目录 1
    2 JVM 19
    21 线程 20
    22 JVM 存区域 21
    221 程序计数器(线程私) 22
    222 虚拟机栈(线程私) 22
    223 方法区(线程私) 23
    224 堆(Heap线程享)运行时数区 23
    225 方法区永久代(线程享) 23
    23 JVM 运行时存 24
    231 新生代 24
    2311 Eden 区 24
    2312 ServivorFrom 24
    2313 ServivorTo 24
    2314 MinorGC 程(复制>清空>互换) 24
    1:edenservicorFrom 复制 ServicorTo年龄+1 25
    2:清空 edenservicorFrom 25
    3:ServicorTo ServicorFrom 互换 25
    232 老年代 25
    233 永久代 25
    2331 JAVA8 元数 25
    24 垃圾回收算法 26
    241 确定垃圾 26
    2411 引计数法 26
    2412 达性分析 26
    242 标记清算法(MarkSweep) 27
    243 复制算法(copying) 27
    244 标记整理算法(MarkCompact) 28
    245 分代收集算法 29
    2451 新生代复制算法 29
    2452 老年代标记复制算法 29
    25 JAVA 四中引类型 30
    251 强引 30
    252 软引 30
    253 弱引 30
    254 虚引 30
    26 GC 分代收集算法 VS 分区收集算法 30
    261 分代收集算法 30
    2611 新生代复制算法 30
    2612 老年代标记整理算法 30
    262 分区收集算法 31
    27 GC 垃圾收集器 31
    271 Serial 垃圾收集器(单线程复制算法) 31
    272 ParNew 垃圾收集器(Serial+线程) 31
    273 Parallel Scavenge 收集器(线程复制算法高效) 32
    274 Serial Old 收集器(单线程标记整理算法 ) 32
    275 Parallel Old 收集器(线程标记整理算法) 33
    276 CMS 收集器(线程标记清算法) 33
    2761 初始标记 33 13042018 Page 2 of 283

    2762 发标记 34
    2763 重新标记 34
    2764 发清 34
    277 G1 收集器 34
    28 JAVA IONIO 34
    281 阻塞 IO 模型 34
    282 非阻塞 IO 模型 35
    283 路复 IO 模型 35
    284 信号驱动 IO 模型 36
    285 异步 IO 模型 36
    281 JAVA IO 包 36
    282 JAVA NIO 37
    2821 NIO 缓区 38
    2822 NIO 非阻塞 38
    283 Channel 40
    284 Buffer 40
    285 Selector 40
    29 JVM 类加载机制 41
    2911 加载 41
    2912 验证 41
    2913 准备 41
    2914 解析 41
    2915 符号引 42
    2916 直接引 42
    2917 初始化 42
    2918 类构造器 42
    292 类加载器 42
    2921 启动类加载器(Bootstrap ClassLoader) 43
    2922 扩展类加载器(Extension ClassLoader) 43
    2923 应程序类加载器(Application ClassLoader): 43
    293 双亲委派 43
    294 OSGI(动态模型系统) 44
    2941 动态改变构造 44
    2942 模块化编程热插拔 44
    3 JAVA 集合 45
    31 接口继承关系实现 45
    32 LIST 47
    321 ArrayList(数组) 47
    322 Vector(数组实现线程步) 47
    323 LinkList(链表) 47
    33 SET 48
    3311 HashSet(Hash 表) 48
    3312 TreeSet(二叉树) 49
    3313 LinkHashSet(HashSet+LinkedHashMap) 49
    34 MAP 50
    341 HashMap(数组+链表+红黑树) 50
    3411 JAVA7 实现 50
    3412 JAVA8 实现 51
    342 ConcurrentHashMap 51
    3421 Segment 段 51
    3422 线程安全(Segment 继承 ReentrantLock 加锁) 51
    3423 行度(默认 16) 52
    3424 Java8 实现 (引入红黑树) 52 13042018 Page 3 of 283

    343 HashTable(线程安全) 53
    344 TreeMap(排序) 53
    345 LinkHashMap(记录插入序) 53
    4 JAVA 线程发 54
    411 JAVA 发知识库 54
    412 JAVA 线程实现创建方式 54
    4121 继承 Thread 类 54
    4122 实现 Runnable 接口 54
    4123 ExecutorServiceCallableFuture 返回值线程 55
    4124 基线程池方式 56
    413 4 种线程池 56
    4131 newCachedThreadPool 57
    4132 newFixedThreadPool 57
    4133 newScheduledThreadPool 58
    4134 newSingleThreadExecutor 58
    414 线程生命周期(状态) 58
    4141 新建状态(NEW) 58
    4142 绪状态(RUNNABLE): 59
    4143 运行状态(RUNNING): 59
    4144 阻塞状态(BLOCKED): 59
    等阻塞(owait>等列): 59
    步阻塞(lock>锁池) 59
    阻塞(sleepjoin) 59
    4145 线程死亡(DEAD) 59
    正常结束 59
    异常结束 59
    调 stop 59
    415 终止线程 4 种方式 60
    4151 正常运行结束 60
    4152 退出标志退出线程 60
    4153 Interrupt 方法结束线程 60
    4154 stop 方法终止线程(线程安全) 61
    416 sleep wait 区 61
    417 start run 区 62
    418 JAVA 台线程 62
    419 JAVA 锁 63
    4191 乐观锁 63
    4192 悲观锁 63
    4193 旋锁 63
    旋锁优缺点 63
    旋锁时间阈值(16 引入适应性旋锁) 63
    旋锁开启 64
    4194 Synchronized 步锁 64
    Synchronized 作范围 64
    Synchronized 核心组件 64
    Synchronized 实现 64
    4195 ReentrantLock 66
    Lock 接口方法 66
    非公锁 66
    公锁 67
    ReentrantLock synchronized 67
    ReentrantLock 实现 67
    Condition 类 Object 类锁方法区区 68
    tryLock lock lockInterruptibly 区 68
    4196 Semaphore 信号量 68
    实现互斥锁(计数器 1) 68
    代码实现 68
    Semaphore ReentrantLock 69
    4197 AtomicInteger 69 13042018 Page 4 of 283

    4198 重入锁(递锁) 69
    4199 公锁非公锁 70
    公锁(Fair) 70
    非公锁(Nonfair) 70
    41910 ReadWriteLock 读写锁 70
    读锁 70
    写锁 70
    41911 享锁独占锁 70
    独占锁 70
    享锁 70
    41912 重量级锁(Mutex Lock) 71
    41913 轻量级锁 71
    锁升级 71
    41914 偏锁 71
    41915 分段锁 71
    41916 锁优化 71
    减少锁持时间 72
    减锁粒度 72
    锁分离 72
    锁粗化 72
    锁消 72
    4110 线程基方法 72
    41101 线程等(wait) 73
    41102 线程睡眠(sleep) 73
    41103 线程步(yield) 73
    41104 线程中断(interrupt) 73
    41105 Join 等线程终止 74
    41106 什 join()方法? 74
    41107 线程唤醒(notify) 74
    41108 方法: 74
    4111 线程文切换 75
    41111 进程 75
    41112 文 75
    41113 寄存器 75
    41114 程序计数器 75
    41115 PCB切换桢 75
    41116 文切换活动: 76
    41117 引起线程文切换原 76
    4112 步锁死锁 76
    41121 步锁 76
    41122 死锁 76
    4113 线程池原理 76
    41131 线程复 76
    41132 线程池组成 76
    41133 拒绝策略 78
    41134 Java 线程池工作程 78
    4114 JAVA 阻塞队列原理 79
    41141 阻塞队列方法 80
    插入操作: 80
    获取数操作: 81
    41142 Java 中阻塞队列 81
    41143 ArrayBlockingQueue(公非公) 82
    41144 LinkedBlockingQueue(两独立锁提高发) 82
    41145 PriorityBlockingQueue(compareTo 排序实现优先) 82
    41146 DelayQueue(缓存失效定时务 ) 82
    41147 SynchronousQueue(存储数传递数) 83
    41148 LinkedTransferQueue 83 13042018 Page 5 of 283

    41149 LinkedBlockingDeque 83
    4115 CyclicBarrierCountDownLatchSemaphore 法 84
    41151 CountDownLatch(线程计数器 ) 84
    41152 CyclicBarrier(回环栅栏等 barrier 状态全部时执行) 84
    41153 Semaphore(信号量控制时访问线程数) 85
    4116 volatile 关键字作(变量见性禁止重排序) 87
    变量见性 87
    禁止重排序 87
    sychronized 更轻量级步锁 87
    适场景 87
    4117 两线程间享数 88
    数抽象成类数操作作类方法 88
    Runnable 象作类部类 89
    4118 ThreadLocal 作(线程存储) 90
    ThreadLocalMap(线程属性) 90
    场景 91
    4119 synchronized ReentrantLock 区 91
    41191 两者点: 91
    41192 两者点: 92
    4120 ConcurrentHashMap 发 92
    41201 减锁粒度 92
    41202 ConcurrentHashMap 分段锁 92
    ConcurrentHashMap Segment 数组结构 HashEntry 数组结构组成 93
    4121 Java 中线程调度 93
    41211 抢占式调度: 93
    41212 协式调度: 93
    41213 JVM 线程调度实现(抢占式调度) 94
    41214 线程出 cpu 情况: 94
    4122 进程调度算法 94
    41221 优先调度算法 94
    41222 高优先权优先调度算法 95
    41223 基时间片轮转调度算法 96
    4123 什 CAS(较交换乐观锁机制锁旋) 96
    41231 概念特性 96
    41232 原子包 javautilconcurrentatomic(锁旋) 97
    41233 ABA 问题 98
    4124 什 AQS(抽象队列步器) 98
    Exclusive 独占资源ReentrantLock 99
    Share 享资源SemaphoreCountDownLatch 99
    步器实现 ABS 核心(state 资源状态计数) 100
    ReentrantReadWriteLock 实现独占享两种方式 100
    5 JAVA 基础 101
    511 JAVA 异常分类处理 101
    5111 概念 101
    5112 异常分类 101
    Error 101
    Exception(RuntimeExceptionCheckedException) 101
    5113 异常处理方式 102
    遇问题进行具体处理继续抛调者 (throwthrows) 102
    try catch 捕获异常针性处理方式 102
    5114 Throw throws 区: 102 13042018 Page 6 of 283

    位置 102
    功: 102
    512 JAVA 反射 103
    5121 动态语言 103
    5122 反射机制概念 (运行状态中知道类属性方法) 103
    5123 反射应场合 103
    编译时类型运行时类型 103
    编译时类型法获取具体方法 104
    5124 Java 反射 API 104
    反射 API 生成 JVM 中类接口象信息 104
    5125 反射步骤(获取 Class 象调象方法) 104
    5126 获取 Class 象 3 种方法 104
    调某象 getClass()方法 104
    调某类 class 属性获取该类应 Class 象 104
    Class 类中 forName()静态方法(安全性) 104
    5127 创建象两种方法 105
    Class 象 newInstance() 105
    调 Constructor 象 newInstance() 105
    513 JAVA 注解 106
    5131 概念 106
    5132 4 种标准元注解 106
    @Target 修饰象范围 106
    @Retention 定义 保留时间长短 106
    @Documented 描述javadoc 106
    @Inherited 阐述某标注类型继承 106
    5133 注解处理器 107
    514 JAVA 部类 109
    5141 静态部类 109
    5142 成员部类 110
    5143 局部部类(定义方法中类) 110
    5144 匿名部类(继承父类者实现接口直接 new 生成象引) 111
    515 JAVA 泛型 112
    5151 泛型方法() 112
    5152 泛型类 112
    5153 类型通配符 113
    5154 类型擦 113
    516 JAVA 序列化(创建复 Java 象) 113
    保存(持久化)象状态存者磁盘 113
    序列化象字节数组保持静态成员保存 113
    序列化户远程象传输 113
    Serializable 实现序列化 113
    ObjectOutputStream ObjectInputStream 象进行序列化反序列化 113
    writeObject readObject 定义序列化策略 113
    序列化 ID 113
    序列化保存静态变量 114
    序列化子父类说明 114
    Transient 关键字阻止该变量序列化文件中 114
    517 JAVA 复制 114
    5171 直接赋值复制 114
    5172 浅复制(复制引复制引象) 114
    5173 深复制(复制象应象) 115
    5174 序列化(深 clone 中实现) 115
    6 SPRING 原理 116
    611 Spring 特点 116
    6111 轻量级 116 13042018 Page 7 of 283

    6112 控制反转 116
    6113 面切面 116
    6114 容器 116
    6115 框架集合 116
    612 Spring 核心组件 117
    613 Spring 常模块 117
    614 Spring 包 118
    615 Spring 常注解 118
    616 Spring 第三方结合 119
    617 Spring IOC 原理 120
    6171 概念 120
    6172 Spring 容器高层视图 120
    6173 IOC 容器实现 120
    BeanFactory框架基础设施 120
    11111 BeanDefinitionRegistry 注册表 121
    11112 BeanFactory 顶层接口 121
    11113 ListableBeanFactory 121
    11114 HierarchicalBeanFactory 父子级联 121
    11115 ConfigurableBeanFactory 121
    11116 AutowireCapableBeanFactory 动装配 122
    11117 SingletonBeanRegistry 运行期间注册单例 Bean 122
    11118 赖日志框框 122
    ApplicationContext 面开发应 122
    WebApplication 体系架构 123
    6174 Spring Bean 作域 123
    singleton:单例模式(线程安全) 123
    prototype原型模式次时创建 124
    Request:次 request 实例 124
    session 124
    global Session 124
    6175 Spring Bean 生命周期 124
    实例化 124
    IOC 赖注入 124
    setBeanName 实现 124
    BeanFactoryAware 实现 124
    ApplicationContextAware 实现 125
    postProcessBeforeInitialization 接口实现初始化预处理 125
    initmethod 125
    postProcessAfterInitialization 125
    Destroy 期动清理阶段 125
    destroymethod 配置清理 125
    6176 Spring 赖注入四种方式 126
    构造器注入 126
    setter 方法注入 127
    静态工厂注入 127
    实例工厂 127
    6177 5 种方式动装配 128
    618 Spring APO 原理 129
    6181 概念 129
    6182 AOP 核心概念 129
    6181 AOP 两种代理方式 130
    JDK 动态接口代理 130
    CGLib 动态代理 131
    6182 实现原理 131
    619 Spring MVC 原理 132
    6191 MVC 流程 132
    Http 请求 DispatcherServlet 133
    HandlerMapping 寻找处理器 133
    调处理器 Controller 133 13042018 Page 8 of 283

    Controller 调业务逻辑处理返回 ModelAndView 133
    DispatcherServlet 查询 ModelAndView 133
    ModelAndView 反馈浏览器 HTTP 133
    6191 MVC 常注解 133
    6110 Spring Boot 原理 134
    1 创建独立 Spring 应程序 134
    2 嵌入 Tomcat需部署 WAR 文件 134
    3 简化 Maven 配置 134
    4 动配置 Spring 134
    5 提供生产绪型功指标健康检查外部配置 134
    6 绝没代码生成 XML 没求配置 [1] 134
    6111 JPA 原理 134
    61111 事务 134
    61112 事务 134
    61111 分布式事务 135
    61111 两阶段提交 136
    1 准备阶段 136
    2 提交阶段: 136
    6112 Mybatis 缓存 137
    61121 Mybatis 级缓存原理(sqlsession 级) 138
    61122 二级缓存原理(mapper 基) 138
    具体需配置: 139
    6113 Tomcat 架构 139
    7 微服务 140
    711 服务注册发现 140
    7111 客户端注册(zookeeper) 140
    7112 第三方注册(独立服务 Registrar) 140
    7113 客户端发现 141
    7114 服务端发现 142
    7115 Consul 142
    7116 Eureka 142
    7117 SmartStack 142
    7118 Etcd 142
    712 API 网关 142
    7121 请求转发 143
    7122 响应合 143
    7123 协议转换 143
    7124 数转换 143
    7125 安全认证 144
    713 配置中心 144
    7131 zookeeper 配置中心 144
    7132 配置中心数分类 144
    714 事件调度(kafka) 144
    715 服务踪(startersleuth) 144
    716 服务熔断(Hystrix) 145
    7161 Hystrix 断路器机制 146
    717 API 理 146
    8 NETTY RPC 147
    811 Netty 原理 147
    812 Netty 高性 147
    8121 路复通讯方式 147
    8121 异步通讯 NIO 148
    8122 零拷贝(DIRECT BUFFERS 堆外直接存) 149
    8123 存池(基存池缓区重机制) 149
    8124 高效 Reactor 线程模型 149
    Reactor 单线程模型 149
    Reactor 线程模型 150 13042018 Page 9 of 283

    Reactor 线程模型 150
    8125 锁设计线程绑定 151
    8126 高性序列化框架 151
    包封包防止网络阻塞 152
    软中断 Hash 值 CPU 绑定 152
    813 Netty RPC 实现 152
    8131 概念 152
    8132 关键技术 152
    8133 核心流程 152
    8131 消息编解码 153
    息数结构(接口名称+方法名+参数类型参数值+超时时间+ requestID) 153
    序列化 154
    8131 通讯程 154
    核心问题(线程暂停消息乱序) 154
    通讯流程 154
    requestID 生成AtomicLong 154
    存放回调象 callback 全局 ConcurrentHashMap 154
    synchronized 获取回调象 callback 锁旋 wait 154
    监听消息线程收消息找 callback 锁唤醒 155
    814 RMI 实现方式 155
    8141 实现步骤 155
    815 Protoclol Buffer 156
    8151 特点 157
    816 Thrift 157
    9 网络 159
    911 网络 7 层架构 159
    912 TCPIP 原理 160
    9121 网络访问层(Network Access Layer) 160
    9122 网络层(Internet Layer) 160
    9123 传输层(Tramsport LayerTCPUDP) 160
    9124 应层(Application Layer) 160
    913 TCP 三次握手四次挥手 161
    9131 数包说明 161
    9132 三次握手 162
    9133 四次挥手 163
    914 HTTP 原理 164
    9141 传输流程 164
    1:址解析 164
    2:封装 HTTP 请求数包 165
    3:封装成 TCP 包建立连接 165
    4:客户机发送请求命 165
    5:服务器响应 165
    6:服务器关闭 TCP 连接 165
    9142 HTTP 状态 165
    9143 HTTPS 166
    建立连接获取证书 167
    证书验证 167
    数加密传输 167
    915 CDN 原理 167
    9151 分发服务系统 167
    9152 负载均衡系统: 168
    9153 理系统: 168
    10 日志 169
    1011 Slf4j 169
    1012 Log4j 169
    1013 LogBack 169
    10131 Logback 优点 169
    1014 ELK 170 13042018 Page 10 of 283

    11 ZOOKEEPER 171
    1111 Zookeeper 概念 171
    1111 Zookeeper 角色 171
    11111 Leader 171
    11112 Follower 171
    11113 Observer 171
    11111 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
    11112 投票机制 173
    1112 Zookeeper 工作原理(原子广播) 174
    1113 Znode 四种形式目录节点 174
    12 KAFKA 175
    1211 Kafka 概念 175
    1212 Kafka 数存储设计 175
    12121 partition 数文件(offsetMessageSizedata) 175
    12122 数文件分段 segment(序读写分段命令二分查找) 176
    12123 数文件索引(分段索引稀疏存储) 176
    1213 生产者设计 176
    12131 负载均衡(partition 会均衡分布 broker ) 176
    12132 批量发送 177
    12133 压缩(GZIP Snappy) 177
    1211 消费者设计 177
    12111 Consumer Group 178
    13 RABBITMQ 179
    1311 概念 179
    1312 RabbitMQ 架构 179
    13121 Message 180
    13122 Publisher 180
    13123 Exchange(消息路队列 ) 180
    13124 Binding(消息队列交换器间关联) 180
    13125 Queue 180
    13126 Connection 180
    13127 Channel 180
    13128 Consumer 180
    13129 Virtual Host 180
    131210 Broker 181
    1313 Exchange 类型 181
    13131 Direct 键(routing key)分布: 181
    13132 Fanout(广播分发) 181
    13133 topic 交换器(模式匹配) 182 13042018 Page 11 of 283

    14 HBASE 183
    1411 概念 183
    1412 列式存储 183
    1413 Hbase 核心概念 184
    14131 Column Family 列族 184
    14132 Rowkey(Rowkey 查询Rowkey 范围扫描全表扫描) 184
    14133 Region 分区 184
    14134 TimeStamp 版 184
    1414 Hbase 核心架构 184
    14141 Client: 185
    14142 Zookeeper: 185
    14143 Hmaster 185
    14144 HregionServer 185
    14145 Region 寻址方式(通 zookeeper META) 186
    14146 HDFS 186
    1415 Hbase 写逻辑 187
    14151 Hbase 写入流程 187
    获取 RegionServer 187
    请求写 Hlog 187
    请求写 MemStore 187
    14152 MemStore 刷盘 187
    全局存控制 188
    MemStore 达限 188
    RegionServer Hlog 数量达限 188
    手工触发 188
    关闭 RegionServer 触发 188
    Region HLOG 恢复完数触发 188
    1416 HBase vs Cassandra 188
    15 MONGODB 190
    1511 概念 190
    1512 特点 190
    16 CASSANDRA 192
    1611 概念 192
    1612 数模型 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
    1613 Cassandra 致 Hash 虚拟节点 192
    致性 Hash(米诺 down 机) 192
    虚拟节点(down 机节点托) 193
    1614 Gossip 协议 193
    Gossip 节点通信方式收敛性 194
    Gossip 两节点(AB)间存三种通信方式(pushpullpush&pull) 194
    gossip 协议 seed list(防止集群分列) 194
    1615 数复制 194
    Partitioners(计算 primary key token hash 函数) 194
    两种复制策略: 194
    SimpleStrategy:仅单数中心 194
    第 replica 放 partitioner 确定节点中余 replicas 放述节点时针方续节
    点中 194 13042018 Page 12 of 283

    NetworkTopologyStrategy:较复杂数中心 194
    指定数中心分存储少份 replicas 194
    1616 数写请求协调者 195
    协调者(coordinator) 195
    1617 数读请求台修复 195
    1618 数存储(CommitLogMemTableSSTable) 196
    SSTable 文件构成(BloomFilterindexdatastatic) 196
    1619 二级索引(索引 value 摘生成 RowKey) 196
    16110 数读写 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
    1711 设计原 201
    1712 工厂方法模式 201
    1713 抽象工厂模式 201
    1714 单例模式 201
    1715 建造者模式 201
    1716 原型模式 201
    1717 适配器模式 201
    1718 装饰器模式 201
    1719 代理模式 201
    17110 外观模式 201
    17111 桥接模式 201
    17112 组合模式 201
    17113 享元模式 201
    17114 策略模式 201
    17115 模板方法模式 201
    17116 观察者模式 201
    17117 迭代子模式 201
    17118 责链模式 201
    17119 命令模式 201
    17120 备忘录模式 201
    17121 状态模式 202
    17122 访问者模式 202
    17123 中介者模式 202
    17124 解释器模式 202
    18 负载均衡 203
    1811 四层负载均衡 vs 七层负载均衡 203
    18111 四层负载均衡(目标址端口交换) 203
    F5:硬件负载均衡器功成高 203
    lvs:重量级四层负载软件 203
    nginx:轻量级四层负载软件带缓存功正表达式较灵活 203 13042018 Page 13 of 283

    haproxy:模拟四层转发较灵活 203
    18112 七层负载均衡(容交换) 203
    haproxy:天生负载均衡技全面支持七层代理会话保持标记路径转移 204
    nginx: http 协议 mail 协议功较性 haproxy 差 204
    apache:功较差 204
    Mysql proxy:功尚 204
    1812 负载均衡算法策略 204
    18121 轮循均衡(Round Robin) 204
    18122 权重轮循均衡(Weighted Round Robin) 204
    18123 机均衡(Random) 204
    18124 权重机均衡(Weighted Random) 204
    18125 响应速度均衡(Response Time 探测时间) 204
    18126 少连接数均衡(Least Connection) 205
    18127 处理力均衡(CPU存) 205
    18128 DNS 响应均衡(Flash DNS) 205
    18129 哈希算法 205
    181210 IP 址散列(保证客户端服务器应关系稳定) 205
    181211 URL 散列 205
    1813 LVS 206
    18131 LVS 原理 206
    IPVS 206
    18131 LVS NAT 模式 207
    18132 LVS DR 模式(局域网改写 mac 址) 208
    18133 LVS TUN 模式(IP 封装跨网段) 209
    18134 LVS FULLNAT 模式 210
    1814 Keepalive 211
    1815 Nginx 反代理负载均衡 211
    18151 upstream_module 健康检测 212
    18151 proxy_pass 请求转发 212
    1816 HAProxy 213
    19 数库 214
    1911 存储引擎 214
    19111 概念 214
    19112 InnoDB(B+树) 214
    19113 TokuDB(Fractal Tree节点带数) 215
    19114 MyIASM 215
    19115 Memory 215
    1912 索引 215
    19121 常见索引原 216
    1选择唯性索引 216
    2常需排序分组联合操作字段建立索引: 216
    3.常作查询条件字段建立索引 216
    4.限制索引数目: 216
    量数量少索引 216
    量前缀索引 216
    7.删者少索引 216
    8 左前缀匹配原非常重原 216
    10 量选择区分度高列作索引 216
    11 索引列参计算保持列干净:带函数查询参索引 216
    12 量扩展索引新建索引 216
    1913 数库三范式 216
    19131 第范式(1st NF -列分) 216
    19132 第二范式(2nd NF-表描述件事情) 216
    19133 第三范式(3rd NF- 存非键列传递赖) 217
    1914 数库事务 217 13042018 Page 14 of 283

    原子性(Atomicity) 217
    致性(Consistency) 217
    隔离性(Isolation) 218
    永久性(Durability) 218
    1915 存储程(特定功 SQL 语句集) 218
    存储程优化思路: 218
    1916 触发器(段动执行程序) 218
    1917 数库发策略 218
    19171 乐观锁 218
    19172 悲观锁 219
    19173 时间戳 219
    1918 数库锁 219
    19181 行级锁 219
    19182 表级锁 219
    19181 页级锁 219
    1919 基 Redis 分布式锁 219
    19110 分区分表 220
    垂直切分(功模块) 220
    水切分(规划分存储) 220
    19111 两阶段提交协议 220
    191111 准备阶段 221
    191112 提交阶段 221
    191113 缺点 221
    步阻塞问题 221
    单点障 221
    数致(脑裂问题) 221
    二阶段法解决问题(数状态确定) 221
    19112 三阶段提交协议 222
    191121 CanCommit 阶段 222
    191122 PreCommit 阶段 222
    191123 doCommit 阶段 222
    19113 柔性事务 222
    191131 柔性事务 222
    两阶段型 222
    补偿型 222
    异步确保型 223
    努力通知型(次尝试) 223
    19114 CAP 224
    致性(C): 224
    性(A): 224
    分区容忍性(P): 224
    20 致性算法 225
    2011 Paxos 225
    Paxos 三种角色:ProposerAcceptorLearners 225
    Proposer: 225
    Acceptor: 225
    Learner: 225
    Paxos 算法分两阶段具体: 225
    阶段(准 leader 确定 ): 225
    阶段二(leader 确认): 225
    2012 Zab 225
    1崩溃恢复: Leader 选举程 226
    2数步:Leader 服务器服务器进行数步 226
    3消息广播:Leader 服务器数发送服务器 226
    2013 Raft 226
    20131 角色 226
    Leader(领导者日志理) 226
    Follower(追者日志步) 226
    Candidate(候选者负责选票) 226 13042018 Page 15 of 283

    20132 Term(期) 226
    20133 选举(Election) 227
    选举定时器 227
    20134 安全性(Safety) 227
    20135 raft 协议 zab 协议区 227
    2014 NWR 228
    N:分布式存储系统中少份备份数 228
    W:代表次成功更新操作求少 w 份数写入成功 228
    R: 代表次成功读数操作求少 R 份数成功读取 228
    2015 Gossip 228
    2016 致性 Hash 229
    20161 致性 Hash 特性 229
    20162 致性 Hash 原理 229
    1建构环形 hash 空间: 229
    2需缓存容(象)映射 hash 空间 229
    3服务器(节点)映射 hash 空间 229
    4象映射服务节点 229
    考察 cache 变动 230
    虚拟节点 230
    21 JAVA 算法 232
    2111 二分查找 232
    2112 泡排序算法 232
    2113 插入排序算法 233
    2114 快速排序算法 234
    2111 希尔排序算法 236
    2112 排序算法 237
    2113 桶排序算法 240
    2114 基数排序算法 241
    2115 剪枝算法 243
    2116 回溯算法 243
    2117 短路径算法 243
    2118 子数组算法 243
    2119 长公子序算法 243
    21110 生成树算法 243
    22 数结构 245
    2211 栈(stack) 245
    2212 队列(queue) 245
    2213 链表(Link) 245
    2214 散列表(Hash Table) 246
    2215 排序二叉树 246
    22151 插入操作 246
    22152 删操作 247
    22153 查询操作 248
    2216 红黑树 248
    22161 红黑树特性 248
    22161 左旋 248
    22161 右旋 249
    22161 添加 250
    22162 删 251
    2217 BTREE 252
    2218 位图 254
    23 加密算法 255
    2311 AES 255
    2312 RSA 255
    2313 CRC 256
    2314 MD5 256 13042018 Page 16 of 283

    24 分布式缓存 257
    2411 缓存雪崩 257
    2412 缓存穿透 257
    2413 缓存预热 257
    2414 缓存更新 257
    2415 缓存降级 257
    25 HADOOP 259
    2511 概念 259
    2512 HDFS 259
    25121 Client 259
    25122 NameNode 259
    25123 Secondary NameNode 259
    25124 DataNode 259
    2513 MapReduce 260
    25131 Client 260
    25132 JobTracker 260
    25133 TaskTracker 261
    25134 Task 261
    25135 Reduce Task 执行程 261
    2514 Hadoop MapReduce 作业生命周期 262
    1作业提交初始化 262
    2务调度监控 262
    3务运行环境准备 262
    4务执行 262
    5作业完成 262
    26 SPARK 263
    2611 概念 263
    2612 核心架构 263
    Spark Core 263
    Spark SQL 263
    Spark Streaming 263
    Mllib 263
    GraphX 263
    2613 核心组件 264
    Cluster Manager制整集群监控 worker 264
    Worker 节点负责控制计算节点 264
    Driver: 运行 Application main()函数 264
    Executor:执行器某 Application 运行 worker node 进程 264
    2614 SPARK 编程模型 264
    2615 SPARK 计算模型 265
    2616 SPARK 运行流程 266
    1 构建 Spark Application 运行环境启动 SparkContext 267
    2 SparkContext 资源理器( StandaloneMesosYarn)申请运行 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
    2617 SPARK RDD 流程 267
    2618 SPARK RDD 267
    (1)RDD 创建方式 267
    (2)RDD 两种操作算子(转换(Transformation)行动(Action)) 268
    27 STORM 269 13042018 Page 17 of 283

    2711 概念 269
    2711 集群架构 269
    27111 Nimbus(master代码分发 Supervisor) 269
    27112 Supervisor(slave理 Worker 进程启动终止) 269
    27113 Worker(具体处理组件逻辑进程) 269
    27114 Task 270
    27115 ZooKeeper 270
    2712 编程模型(spout>tuple>bolt) 270
    27121 Topology 270
    27122 Spout 270
    27123 Bolt 270
    27124 Tuple 270
    27125 Stream 271
    2713 Topology 运行 271
    (1) Worker(进程) (2) Executor(线程) (3) Task 271
    27131 Worker(1 worker 进程执行 1 topology 子集) 271
    27132 Executor(executor 1 worker 进程启动单独线程) 271
    27133 Task(终运行 spout bolt 中代码单元) 272
    2714 Storm Streaming Grouping 272
    27141 huffle Grouping 273
    27142 Fields Grouping 273
    27143 All grouping :广播 273
    27144 Global grouping 274
    27145 None grouping :分组 274
    27146 Direct grouping :直接分组 指定分组 274
    28 YARN 275
    2811 概念 275
    2812 ResourceManager 275
    2813 NodeManager 275
    2814 ApplicationMaster 276
    2815 YARN 运行流程 277
    29 机器学 278
    2911 决策树 278
    2912 机森林算法 278
    2913 逻辑回 278
    2914 SVM 278
    2915 朴素贝叶斯 278
    2916 K 邻算法 278
    2917 K 均值算法 278
    2918 Adaboost 算法 278
    2919 神网络 278
    29110 马尔夫 278
    30 云计算 279
    3011 SaaS 279
    3012 PaaS 279
    3013 IaaS 279
    3014 Docker 279
    30141 概念 279
    30142 Namespaces 280
    30143 进程(CLONE_NEWPID 实现进程隔离) 281
    30144 Libnetwork 网络隔离 281
    30145 资源隔离 CGroups 282
    30146 镜 UnionFS 282
    30147 存储驱动 282 13042018 Page 18 of 283

    3015 Openstack 283
    13042018 Page 19 of 283

    2 JVM
    (1) 基概念:
    JVM 运行 Java 代码假想计算机 包括套字节码指令集组寄存器栈
    垃圾回收堆 存储方法域JVM 运行操作系统硬件没直接
    交互

    (2) 运行程: 13042018 Page 20 of 283

    知道 Java 源文件通编译器够生产相应Class 文件字节码文件
    字节码文件通 Java 虚拟机中解释器编译成特定机器机器码

    ① Java 源文件—>编译器—>字节码文件
    ② 字节码文件—>JVM—>机器码
    种台解释器实现虚拟机相 Java 什够
    跨台原 程序开始运行时虚拟机开始实例化程序启动会
    存虚拟机实例程序退出者关闭虚拟机实例消亡虚拟机实例间数



    21 线程
    里说线程指程序执行程中线程实体JVM 允许应发执行线程
    Hotspot JVM 中 Java 线程原生操作系统线程直接映射关系线程存储缓
    区分配步象栈程序计数器等准备会创建操作系统原生线程
    Java 线程结束原生线程回收操作系统负责调度线程分配
    CPU 原生线程初始化完毕会调 Java 线程 run() 方法线程结束时13042018 Page 21 of 283

    会释放原生线程 Java 线程资源
    Hotspot JVM 台运行系统线程面:
    虚拟机线程
    (VM thread)
    线程等 JVM 达安全点操作出现操作必须独立线程里执行
    堆修改法进行时线程需 JVM 位安全点操作类型:stopthe
    world 垃圾回收线程栈 dump线程暂停线程偏锁(biased locking)解
    周期性务线程 线程负责定时器事件(中断)调度周期性操作执行
    GC 线程 线程支持 JVM 中垃圾回收活动
    编译器线程 线程运行时字节码动态编译成台相关机器码
    信号分发线程 线程接收发送 JVM 信号调适 JVM 方法处理

    22 JVM 存区域

    JVM 存区域分线程私区域程序计数器虚拟机栈方法区线程享区
    域JAVA 堆方法区直接存
    线程私数区域生命周期线程相 赖户线程启动结束 创建销毁( Hotspot
    VM 线程操作系统线程直接映射 部分存区域存否线程
    生死应) 13042018 Page 22 of 283

    线程享区域虚拟机启动关闭创建销毁
    直接存 JVM 运行时数区部分 会频繁 JDK 14 引入 NIO 提
    供基 Channel Buffer IO 方式 Native 函数库直接分配堆外存 然
    DirectByteBuffer 象作块存引进行操作(详见 Java IO 扩展) 样避免 Java
    堆 Native 堆中回复制数 场景中显著提高性


    221 程序计数器(线程私)
    块较存空间 前线程执行字节码行号指示器条线程独立
    程序计数器类存称线程私存
    正执行 java 方法话计数器记录虚拟机字节码指令址(前指令址)
    果 Native 方法空
    存区域唯虚拟机中没规定 OutOfMemoryError 情况区域
    222 虚拟机栈(线程私)
    描述 java 方法执行存模型方法执行时会创建栈帧(Stack Frame)
    存储局部变量表操作数栈动态链接方法出口等信息方法调直执行完成
    程应着栈帧虚拟机栈中入栈出栈程
    栈帧( Frame)存储数部分程结果数结构时处理动态链接
    (Dynamic Linking) 方法返回值异常分派( Dispatch Exception)栈帧着方法调创13042018 Page 23 of 283

    建着方法结束销毁——方法正常完成异常完成(抛出方法未捕获异
    常)算作方法结束


    223 方法区(线程私)
    方法区 Java Stack 作类似 区虚拟机栈执行 Java 方法服务 方法栈
    Native 方法服务 果 VM 实现 Clinkage 模型支持 Native 调 该栈会
    C 栈 HotSpot VM 直接方法栈虚拟机栈合二
    224 堆(Heap线程享)运行时数区
    线程享块存区域创建象数组保存 Java 堆存中垃圾收集器进行
    垃圾收集重存区域现代 VM 采分代收集算法 Java 堆 GC 角度
    细分 新生代(Eden 区From Survivor 区 To Survivor 区)老年代
    225 方法区永久代(线程享)
    常说永久代(Permanent Generation) 存储 JVM 加载类信息常量静
    态变量时编译器编译代码等数 HotSpot VMGC分代收集扩展方法区 Java
    堆永久代实现方法区 样 HotSpot 垃圾收集器理 Java 堆样理部分存
    必方法区开发专门存理器(永久带存回收目标针常量池回收类型
    卸载 收益般)
    运行时常量池(Runtime Constant Pool)方法区部分Class 文件中类版
    字段方法接口等描述等信息外项信息常量池 13042018 Page 24 of 283

    (Constant Pool Table)存放编译期生成种字面量符号引部分容类加
    载存放方法区运行时常量池中 Java 虚拟机 Class 文件部分(然包括常量
    池)格式严格规定字节存储种数必须符合规范求样会
    虚拟机认装载执行
    23 JVM 运行时存
    Java 堆 GC 角度细分 新生代(Eden 区From Survivor 区 To Survivor 区)老年


    231 新生代
    存放新生象般占堆 13 空间频繁创建象新生代会频繁触发
    MinorGC 进行垃圾回收新生代分 Eden 区ServivorFromServivorTo 三区
    2311 Eden 区
    Java 新象出生(果新创建象占存直接分配老
    年代) Eden 区存够时候会触发 MinorGC新生代区进行
    次垃圾回收
    2312 ServivorFrom
    次 GC 幸存者作次 GC 扫描者
    2313 ServivorTo
    保留次 MinorGC 程中幸存者
    2314 MinorGC 程(复制>清空>互换)
    MinorGC 采复制算法 13042018 Page 25 of 283

    1:edenservicorFrom 复制 ServicorTo年龄+1
    首先 Eden ServivorFrom 区域中存活象复制 ServicorTo 区域(果象年
    龄达老年标准赋值老年代区)时象年龄+1(果 ServicorTo
    够位置放老年区)
    2:清空 edenservicorFrom
    然清空 Eden ServicorFrom 中象
    3:ServicorTo ServicorFrom 互换
    ServicorTo ServicorFrom 互换原 ServicorTo 成次 GC 时 ServicorFrom

    232 老年代
    存放应程序中生命周期长存象
    老年代象较稳定 MajorGC 会频繁执行进行 MajorGC 前般先进行
    次 MinorGC新生代象晋身入老年代导致空间够时触发法找足
    够连续空间分配新创建较象时会提前触发次 MajorGC 进行垃圾回收腾出空间
    MajorGC 采标记清算法:首先扫描次老年代标记出存活象然回收没
    标记象MajorGC 耗时较长扫描回收MajorGC 会产生存碎片减
    少存损耗般需进行合者标记出方便次直接分配老年代满装
    时候会抛出 OOM(Out of Memory)异常
    233 永久代
    指存永久保存区域存放 Class Meta(元数)信息Class 加载时候
    放入永久区域存放实例区域GC 会程序运行期永久区域进行清理
    导致永久代区域会着加载 Class 增胀满终抛出 OOM 异常
    2331 JAVA8 元数
    Java8 中永久代已移称元数区(元空间)区域取代元空间
    质永久代类似元空间永久代间区:元空间虚拟机中
    存默认情况元空间仅受存限制类元数放入 native
    memory 字符串池类静态变量放入 java 堆中样加载少类元数
    MaxPermSize 控制 系统实际空间控制
    13042018 Page 26 of 283

    24 垃圾回收算法

    241 确定垃圾
    2411 引计数法
    Java 中引象关联果操作象必须引进行显然简单
    办法通引计数判断象否回收简单说象果没关
    联引引计数 0说明象太象回收

    2412 达性分析
    解决引计数法循环引问题Java 达性分析方法通系列GC roots
    象作起点搜索果GC roots象间没达路径称该象达13042018 Page 27 of 283

    注意达象等价回收象达象变回收象少两次标记
    程两次标记然回收象面回收
    242 标记清算法(MarkSweep)
    基础垃圾回收算法分两阶段标注清标记阶段标记出需回收象清
    阶段回收标记象占空间图

    图中发现该算法问题存碎片化严重续发生象找
    利空间问题

    243 复制算法(copying)
    解决 MarkSweep 算法存碎片化缺陷提出算法存容量存划分等
    两块次中块块存满尚存活象复制块已
    存清掉图: 13042018 Page 28 of 283


    种算法然实现简单存效率高易产生碎片问题存压缩原
    半存活象增话Copying 算法效率会降低

    244 标记整理算法(MarkCompact)
    结合两算法避免缺陷提出标记阶段 MarkSweep 算法相标记清
    理象存活象移存端然清端边界外象图:
    13042018 Page 29 of 283

    245 分代收集算法
    分代收集法目前部分 JVM 采方法核心思想根象存活生命周期存
    划分域般情况 GC 堆划分老生代(TenuredOld Generation)新生代(Young
    Generation)老生代特点次垃圾回收时少量象需回收新生代特点次垃
    圾回收时量垃圾需回收根区域选择算法
    2451 新生代复制算法
    目前部分 JVM GC 新生代采取 Copying 算法新生代中次垃圾回收
    回收部分象复制操作较少通常 1:1 划分新生代般新生代
    划分块较 Eden 空间两较 Survivor 空间(From Space To Space)次
    Eden 空间中块 Survivor 空间进行回收时该两块空间中存活象复制
    块 Survivor 空间中

    2452 老年代标记复制算法
    老年代次回收少量象采 MarkCompact 算法
    1 JAVA 虚拟机提处方法区永生代(Permanet Generation)存储 class 类
    常量方法描述等永生代回收包括废弃常量类
    2 象存分配新生代 Eden Space Survivor Space From Space(Survivor 目
    前存放象块)少数情况会直接分配老生代
    3 新生代 Eden Space From Space 空间足时会发生次 GC进行 GC Eden
    Space From Space 区存活象会挪 To Space然 Eden Space From
    Space 进行清理
    4 果 To Space 法足够存储某象象存储老生代
    5 进行 GC 便 Eden Space To Space 反复循环
    6 象 Survivor 区躲次 GC 年龄会+1默认情况年龄达 15 象会
    移老生代中 13042018 Page 30 of 283

    25 JAVA 四中引类型
    251 强引
    Java 中常见强引象赋引变量引变量强引
    象强引变量引时处达状态垃圾回收机制回收
    该象永远会 JVM 会回收强引造成 Java 存泄漏原

    252 软引
    软引需 SoftReference 类实现软引象说系统存足够时
    会回收系统存空间足时会回收软引通常存敏感程序中
    253 弱引
    弱引需 WeakReference 类实现软引生存期更短弱引象
    说垃圾回收机制运行 JVM 存空间否足够总会回收该象占存
    254 虚引
    虚引需 PhantomReference 类实现单独必须引队列联合虚
    引作踪象垃圾回收状态
    26 GC 分代收集算法 VS 分区收集算法
    261 分代收集算法
    前流 VM 垃圾收集采分代收集(Generational Collection)算法 种算法会根
    象存活周期存划分块 JVM 中 新生代老年代永久代样根
    年代特点分采适 GC 算法
    2611 新生代复制算法
    次垃圾收集发现批象已死 少量存活 选复制算法 需付出少量
    存活象复制成完成收集
    2612 老年代标记整理算法
    象存活率高没额外空间进行分配担保 必须采标记—清理标
    记—整理算法进行回收 必进行存复制 直接腾出空闲存 13042018 Page 31 of 283

    262 分区收集算法
    分区算法整堆空间划分连续区间 区间独立 独立回收 样做
    处控制次回收少区间 根目标停顿时间 次合理回收干区间(
    整堆) 减少次 GC 产生停顿
    27 GC 垃圾收集器
    Java 堆存划分新生代年老代两部分新生代复制标记清垃圾回收算法
    年老代标记整理垃圾回收算法 java 虚拟中针新生代年老代分提供种
    垃圾收集器JDK16 中 Sun HotSpot 虚拟机垃圾收集器:

    271 Serial 垃圾收集器(单线程复制算法)
    Serial(英文连续)基垃圾收集器复制算法 JDK131 前新生代唯垃圾
    收集器Serial 单线程收集器会 CPU 条线程完成垃圾收集工
    作进行垃圾收集时必须暂停工作线程直垃圾收集结束
    Serial 垃圾收集器然收集垃圾程中需暂停工作线程简单高效限
    定单 CPU 环境说没线程交互开销获高单线程垃圾收集效率 Serial
    垃圾收集器然 java 虚拟机运行 Client 模式默认新生代垃圾收集器
    272 ParNew 垃圾收集器(Serial+线程)
    ParNew 垃圾收集器实 Serial 收集器线程版复制算法线程进行垃
    圾收集外余行 Serial 收集器完全样ParNew 垃圾收集器垃圾收集程中样
    暂停工作线程 13042018 Page 32 of 283

    ParNew 收集器默认开启 CPU 数目相线程数通XXParallelGCThreads 参数限
    制垃圾收集器线程数Parallel:行
    ParNew 然线程外 Serial 收集器完全样 ParNew 垃圾收集器 java
    虚拟机运行 Server 模式新生代默认垃圾收集器

    273 Parallel Scavenge 收集器(线程复制算法高效)
    Parallel Scavenge 收集器新生代垃圾收集器样复制算法线程垃
    圾收集器重点关注程序达控制吞吐量(ThoughputCPU 运行户代码
    时间CPU 总消耗时间吞吐量运行户代码时间(运行户代码时间+垃圾收集时间))
    高吞吐量高效率利 CPU 时间快完成程序运算务适台运算
    需太交互务适应调节策略 ParallelScavenge 收集器 ParNew 收集器
    重区
    274 Serial Old 收集器(单线程标记整理算法 )
    Serial Old Serial 垃圾收集器年老代版样单线程收集器标记整理算法
    收集器运行 Client 默认 java 虚拟机默认年老代垃圾收集器
    Server 模式两途:
    1 JDK15 前版中新生代 Parallel Scavenge 收集器搭配
    2 作年老代中 CMS 收集器备垃圾收集方案
    新生代 Serial 年老代 Serial Old 搭配垃圾收集程图:

    新生代 Parallel Scavenge 收集器 ParNew 收集器工作原理类似线程收集器
    复制算法垃圾收集程中需暂停工作线程新生代 Parallel
    ScavengeParNew 年老代 Serial Old 搭配垃圾收集程图:
    13042018 Page 33 of 283


    275 Parallel Old 收集器(线程标记整理算法)
    Parallel Old 收集器 Parallel Scavenge 年老代版线程标记整理算法 JDK16
    开始提供
    JDK16 前新生代 ParallelScavenge 收集器搭配年老代 Serial Old 收集器
    保证新生代吞吐量优先法保证整体吞吐量Parallel Old 正年老代样提供吞
    吐量优先垃圾收集器果系统吞吐量求较高优先考虑新生代 Parallel Scavenge
    年老代 Parallel Old 收集器搭配策略
    新生代 Parallel Scavenge 年老代 Parallel Old 收集器搭配运行程图:

    276 CMS 收集器(线程标记清算法)
    Concurrent mark sweep(CMS)收集器种年老代垃圾收集器目标获取短垃圾
    回收停顿时间年老代标记整理算法线程标记清算法
    短垃圾收集停顿时间交互较高程序提高户体验
    CMS 工作机制相垃圾收集器说更复杂整程分 4 阶段:
    2761 初始标记
    标记 GC Roots 直接关联象速度快然需暂停工作线程 13042018 Page 34 of 283

    2762 发标记
    进行 GC Roots 踪程户线程起工作需暂停工作线程
    2763 重新标记
    修正发标记期间户程序继续运行导致标记产生变动部分象标记
    记录然需暂停工作线程
    2764 发清
    清 GC Roots 达象户线程起工作需暂停工作线程耗时长
    发标记发清程中垃圾收集线程户现起发工作总体
    CMS 收集器存回收户线程起发执行
    CMS 收集器工作程:


    277 G1 收集器
    Garbage first 垃圾收集器目前垃圾收集器理发展前成果相 CMS 收集器G1 收
    集器两突出改进:
    1 基标记整理算法产生存碎片
    2 非常精确控制停顿时间牺牲吞吐量前提实现低停顿垃圾回收
    G1 收集器避免全区域垃圾收集堆存划分固定独立区域踪区域
    垃圾收集进度时台维护优先级列表次根允许收集时间优先回收垃圾
    区域区域划分优先级区域回收机制确保 G1 收集器限时间获高垃圾收
    集效率
    28 JAVA IONIO
    281 阻塞 IO 模型
    传统种 IO 模型读写数程中会发生阻塞现象户线程发出 IO 请求
    核会查数否绪果没绪会等数绪户线程会处阻塞状态
    户线程交出 CPU数绪核会数拷贝户线程返回结果户线程13042018 Page 35 of 283

    户线程解 block 状态典型阻塞 IO 模型例子:data socketread()果数没
    绪会直阻塞 read 方法
    282 非阻塞 IO 模型
    户线程发起 read 操作需等马结果果结果
    error 时知道数没准备次发送 read 操作旦核中数准备
    次收户线程请求马数拷贝户线程然返回
    事实非阻塞 IO 模型中户线程需断询问核数否绪说非阻塞 IO
    会交出 CPU会直占 CPU典型非阻塞 IO 模型般:
    while(true){
    data socketread()
    if(data error){
    处理数
    break
    }
    }
    非阻塞 IO 非常严重问题 while 循环中需断询问核数否
    绪样会导致 CPU 占率非常高般情况少 while 循环种方式读取数
    283 路复 IO 模型
    路复 IO 模型目前较模型Java NIO 实际路复 IO路复 IO
    模型中会线程断轮询 socket 状态 socket 真正读写事件时真
    正调实际 IO 读写操作路复 IO 模型中需线程理
    socket系统需建立新进程者线程必维护线程进程真正
    socket 读写事件进行时会 IO 资源减少资源占 Java NIO 中通
    selectorselect()查询通道否达事件果没事件直阻塞里
    种方式会导致户线程阻塞路复 IO 模式通线程理 socket
    socket 真正读写事件发生会占资源进行实际读写操作路复 IO 较适合连
    接数较情况
    外路复 IO 非阻塞 IO 模型效率高非阻塞 IO 中断询问 socket 状态
    时通户线程进行路复 IO 中轮询 socket 状态核进行效
    率户线程高
    注意路复 IO 模型通轮询方式检测否事件达达事件
    逐进行响应路复 IO 模型说旦事件响应体会导致续事件
    迟迟处理会影响新事件轮询 13042018 Page 36 of 283

    284 信号驱动 IO 模型
    信号驱动 IO 模型中户线程发起 IO 请求操作会应 socket 注册信号函
    数然户线程会继续执行核数绪时会发送信号户线程户线程接收
    信号便信号函数中调 IO 读写操作进行实际 IO 请求操作
    285 异步 IO 模型
    异步 IO 模型理想 IO 模型异步 IO 模型中户线程发起 read 操作立刻
    开始做事方面核角度受 asynchronous read
    会立刻返回说明 read 请求已成功发起会户线程产生 block然
    核会等数准备完成然数拷贝户线程切完成核会户线程
    发送信号告诉 read 操作完成说户线程完全需实际整 IO 操作
    进行需先发起请求接收核返回成功信号时表示 IO 操作已完成直接

    说异步 IO 模型中IO 操作两阶段会阻塞户线程两阶段核动完
    成然发送信号告知户线程操作已完成户线程中需次调 IO 函数进行具体
    读写点信号驱动模型信号驱动模型中户线程接收信号表示数
    已绪然需户线程调 IO 函数进行实际读写操作异步 IO 模型中收信号
    表示 IO 操作已完成需户线程中调 IO 函数进行实际读写操作

    注意异步 IO 需操作系统底层支持 Java 7 中提供 Asynchronous IO
    更参考: httpwwwimportnewcom19816html

    281 JAVA IO 包
    13042018 Page 37 of 283


    282 JAVA NIO
    NIO 三核心部分:Channel(通道)Buffer(缓区) Selector传统 IO 基字节流字
    符流进行操作 NIO 基 Channel Buffer(缓区)进行操作数总通道读取缓区
    中者缓区写入通道中Selector(选择区)监听通道事件(:连接开
    数达)单线程监听数通道 13042018 Page 38 of 283


    NIO 传统 IO 间第区IO 面流NIO 面缓区
    2821 NIO 缓区
    Java IO 面流意味着次流中读字节直读取字节没缓存
    方外前移动流中数果需前移动流中读取数需先缓
    存缓区NIO 缓导方法数读取稍处理缓区需时
    缓区中前移动增加处理程中灵活性需检查否该缓区中包含
    您需处理数需确保更数读入缓区时覆盖缓区里尚未处理

    2822 NIO 非阻塞
    IO 种流阻塞意味着线程调 read() write()时该线程阻塞直
    数读取数完全写入该线程期间干事情 NIO 非阻塞模式
    线程某通道发送请求读取数仅目前数果目前没数
    时什会获取保持线程阻塞直数变读取前该线程
    继续做事情 非阻塞写线程请求写入数某通道需等
    完全写入线程时做事情 线程通常非阻塞 IO 空闲时间通道
    执行 IO 操作单独线程现理输入输出通道(channel)
    13042018 Page 39 of 283
    13042018 Page 40 of 283

    283 Channel
    首先说 Channel国翻译成通道Channel IO 中 Stream(流)差
    等级 Stream 单譬:InputStream OutputStream Channel 双
    进行读操作进行写操作
    NIO 中 Channel 实现:
    1 FileChannel
    2 DatagramChannel
    3 SocketChannel
    4 ServerSocketChannel
    里名字猜出然:分应文件 IOUDP TCP(Server Client)
    面演示案例基围绕 4 类型 Channel 进行陈述
    284 Buffer
    Buffer名思意缓区实际容器连续数组Channel 提供文件
    网络读取数渠道读取写入数必须 Buffer

    面图描述客户端服务端发送数然服务端接收数程客户端发送
    数时必须先数存入 Buffer 中然 Buffer 中容写入通道服务端边接收数必
    须通 Channel 数读入 Buffer 中然 Buffer 中取出数处理
    NIO 中Buffer 顶层父类抽象类常 Buffer 子类:
    ByteBufferIntBuffer CharBuffer LongBuffer DoubleBufferFloatBuffer
    ShortBuffer
    285 Selector
    Selector 类 NIO 核心类Selector 够检测注册通道否事件发生果事
    件发生便获取事件然针事件进行相应响应处理样单线程
    理通道理连接样连接真正读写事件发生时会调
    函数进行读写减少系统开销必连接创建线程维护
    线程避免线程间文切换导致开销 13042018 Page 41 of 283

    29 JVM 类加载机制
    JVM 类加载机制分五部分:加载验证准备解析初始化面分
    五程

    2911 加载
    加载类加载程中阶段阶段会存中生成代表类 javalangClass
    象作方法区类种数入口注意里定非 Class 文件获取里
    ZIP 包中读取( jar 包 war 包中读取)运行时计算生成(动态代理)
    文件生成( JSP 文件转换成应 Class 类)
    2912 验证
    阶段目确保 Class 文件字节流中包含信息否符合前虚拟机求
    会危害虚拟机身安全
    2913 准备
    准备阶段正式类变量分配存设置类变量初始值阶段方法区中分配变量
    存空间注意里说初始值概念类变量定义:
    public static int v 8080
    实际变量 v 准备阶段初始值 0 8080 v 赋值 8080 put static 指令
    程序编译存放类构造器方法中
    注意果声明:
    public static final int v 8080
    编译阶段会 v 生成 ConstantValue 属性准备阶段虚拟机会根 ConstantValue 属性 v
    赋值 8080
    2914 解析
    解析阶段指虚拟机常量池中符号引换直接引程符号引 class 文件中
    : 13042018 Page 42 of 283

    1 CONSTANT_Class_info
    2 CONSTANT_Field_info
    3 CONSTANT_Method_info
    等类型常量
    2915 符号引
    符号引虚拟机实现布局关引目标定已加载存中种虚拟
    机实现存布局相接受符号引必须致符号引
    字面量形式明确定义 Java 虚拟机规范 Class 文件格式中
    2916 直接引
    直接引指目标指针相偏移量间接定位目标句柄果
    直接引引目标必定已存中存
    2917 初始化
    初始化阶段类加载阶段前面类加载阶段加载阶段定义类加载
    器外操作 JVM 导初始阶段开始真正执行类中定义 Java 程序代码
    2918 类构造器
    初始化阶段执行类构造器方法程方法编译器动收集类中类变
    量赋值操作静态语句块中语句合成虚拟机会保证子方法执行前父类
    方法已执行完毕果类中没静态变量赋值没静态语句块编译
    器类生成()方法
    注意种情况会执行类初始化:
    1 通子类引父类静态字段会触发父类初始化会触发子类初始化
    2 定义象数组会触发该类初始化
    3 常量编译期间会存入调类常量池中质没直接引定义常量类会触
    发定义常量类
    4 通类名获取 Class 象会触发类初始化
    5 通 ClassforName 加载指定类时果指定参数 initialize false 时会触发类初
    始化实参数告诉虚拟机否类进行初始化
    6 通 ClassLoader 默认 loadClass 方法会触发初始化动作
    292 类加载器
    虚拟机设计团队加载动作放 JVM 外部实现便应程序决定获取需类JVM 提
    供 3 种类加载器: 13042018 Page 43 of 283

    2921 启动类加载器(Bootstrap ClassLoader)
    1 负责加载 JAVA_HOME\lib 目录中通Xbootclasspath 参数指定路径中
    虚拟机认(文件名识 rtjar)类
    2922 扩展类加载器(Extension ClassLoader)
    2 负责加载 JAVA_HOME\lib\ext 目录中通 javaextdirs 系统变量指定路径中类

    2923 应程序类加载器(Application ClassLoader):
    3 负责加载户路径(classpath)类库
    JVM 通双亲委派模型进行类加载然通继承 javalangClassLoader
    实现定义类加载器

    293 双亲委派
    类收类加载请求首先会尝试加载类请求委派父
    类完成层次类加载器加载请求应该传送启动类加载中
    父类加载器反馈法完成请求时候(加载路径没找需加载
    Class)子类加载器会尝试加载
    采双亲委派处加载位 rtjar 包中类 javalangObject加载
    器加载类终委托顶层启动类加载器进行加载样保证类加载
    器终样 Object 象 13042018 Page 44 of 283


    294 OSGI(动态模型系统)
    OSGi(Open Service Gateway Initiative)面 Java 动态模型系统 Java 动态化模块化系
    统系列规范
    2941 动态改变构造
    OSGi 服务台提供种网络设备需重启动态改变构造功化耦合度促
    耦合度理OSGi 技术提供种面服务架构组件动态发现方
    2942 模块化编程热插拔
    OSGi 旨实现 Java 程序模块化编程提供基础条件基 OSGi 程序实现模块级
    热插拔功程序升级更新时停重新安装然启动程序中部分企
    业级程序开发说非常具诱惑力特性
    OSGi 描绘美模块化开发目标定义实现目标需服务架构时
    成熟框架进行实现支持非应适合采 OSGi 作基础架构提供强
    功时引入额外复杂度遵守类加载双亲委托模型 13042018 Page 45 of 283

    3 JAVA 集合

    31 接口继承关系实现
    集合类存放 Javautil 包中 3 种:set(集)list(列表包含 Queue) map(映射)
    1 Collection:Collection 集合 ListSetQueue 基接口
    2 Iterator:迭代器通迭代器遍历集合中数
    3 Map:映射表基础接口

    13042018 Page 46 of 283





    13042018 Page 47 of 283

    32 List
    Java List 非常常数类型List 序 CollectionJava List 三实现类:
    分 ArrayListVector LinkedList

    321 ArrayList(数组)
    ArrayList 常 List 实现类部通数组实现允许元素进行快速机访问数
    组缺点元素间间隔数组满足时需增加存储力已数
    组数复制新存储空间中 ArrayList 中间位置插入者删元素时需数组进
    行复制移动代价较高适合机查找遍历适合插入删
    322 Vector(数组实现线程步)
    Vector ArrayList 样通数组实现支持线程步某时刻
    线程够写 Vector避免线程时写引起致性实现步需高花费
    访问访问 ArrayList 慢
    323 LinkList(链表)
    LinkedList 链表结构存储数适合数动态插入删机访问遍历速度较
    慢外提供 List 接口中没定义方法专门操作表头表尾元素作堆
    栈队列双队列 13042018 Page 48 of 283


    33 Set
    Set 注重独二性质该体系集合存储序(存入取出序定相)元素值重
    复象相等性质象 hashCode 值(java 象存址计算出序号)判断
    果想两象视相等必须覆盖 Object hashCode 方法 equals 方


    3311 HashSet(Hash 表)
    哈希表边存放哈希值HashSet 存储元素序存入时序( List 显然
    ) 哈希值存取数哈希值取元素哈希值通元素
    hashcode 方法获取 HashSet 首先判断两元素哈希值果哈希值样接着会较
    equals 方法 果 equls 结果 true HashSet 视元素果 equals false
    元素
    哈希值相 equals false 元素存储呢样哈希值延(认哈希值相
    元素放哈希桶中)哈希样存列图 1 表示 hashCode 值相情
    况图 2 表示 hashCode 值相 equals 相情况
    13042018 Page 49 of 283


    HashSet 通 hashCode 值确定元素存中位置 hashCode 位置存放元

    3312 TreeSet(二叉树)
    1 TreeSet()二叉树原理新 add()象指定序排序(升序降序)增
    加象会进行排序象插入二叉树指定位置
    2 Integer String 象进行默认 TreeSet 排序定义类象
    定义类必须实现 Comparable 接口覆写相应 compareTo()函数正常

    3 覆写 compare()函数时返回相应值 TreeSet 定规排序
    4 较象指定象序果该象等指定象分返回负整
    数零正整数
    3313 LinkHashSet(HashSet+LinkedHashMap)
    LinkedHashSet 言继承 HashSet 基 LinkedHashMap 实现
    LinkedHashSet 底层 LinkedHashMap 保存元素继承 HashSet方法
    操作 HashSet 相 LinkedHashSet 实现非常简单提供四构造方法
    通传递标识参数调父类构造器底层构造 LinkedHashMap 实现相关操
    作父类 HashSet 操作相直接调父类 HashSet 方法 13042018 Page 50 of 283

    34 Map

    341 HashMap(数组+链表+红黑树)
    HashMap 根键 hashCode 值存储数数情况直接定位值具快
    访问速度遍历序确定 HashMap 允许条记录键 null允许条记
    录值 nullHashMap 非线程安全时刻线程时写 HashMap会导
    致数致果需满足线程安全 Collections synchronizedMap 方法
    HashMap 具线程安全力者 ConcurrentHashMap面张图介绍
    HashMap 结构
    3411 JAVA7 实现

    方HashMap 里面数组然数组中元素单链表图中绿色
    实体嵌套类 Entry 实例Entry 包含四属性:key value hash 值单链表 next
    1 capacity:前数组容量始终保持 2^n扩容扩容数组前 2 倍
    2 loadFactor:负载子默认 075 13042018 Page 51 of 283

    3 threshold:扩容阈值等 capacity * loadFactor
    3412 JAVA8 实现

    Java8 HashMap 进行修改利红黑树 数组+链表+红黑
    树 组成
    根 Java7 HashMap 介绍知道查找时候根 hash 值够快速定位数组
    具体标话需着链表较找需时间复杂度取决
    链表长度 O(n)降低部分开销 Java8 中链表中元素超 8
    会链表转换红黑树位置进行查找时候降低时间复杂度 O(logN)


    342 ConcurrentHashMap
    3421 Segment 段
    ConcurrentHashMap HashMap 思路差支持发操作复杂
    整 ConcurrentHashMap Segment 组成Segment 代表部分段
    意思方会描述分段锁注意行文中方槽代表
    segment
    3422 线程安全(Segment 继承 ReentrantLock 加锁)
    简单理解ConcurrentHashMap Segment 数组Segment 通继承
    ReentrantLock 进行加锁次需加锁操作锁住 segment样保证
    Segment 线程安全实现全局线程安全 13042018 Page 52 of 283


    3423 行度(默认 16)
    concurrencyLevel:行级发数Segment 数翻译重理解默认 16
    说 ConcurrentHashMap 16 Segments理时候时支
    持 16 线程发写操作分分布 Segment 值初始化时
    候设置值旦初始化扩容具体 Segment 部实
    Segment 前介绍 HashMap保证线程安全处理起麻烦
    3424 Java8 实现 (引入红黑树)
    Java8 ConcurrentHashMap 进行较改动Java8 引入红黑树
    13042018 Page 53 of 283


    343 HashTable(线程安全)
    Hashtable 遗留类映射常功 HashMap 类似承 Dictionary 类
    线程安全时间线程写 Hashtable发性 ConcurrentHashMap
    ConcurrentHashMap 引入分段锁Hashtable 建议新代码中需线程安全
    场合 HashMap 换需线程安全场合 ConcurrentHashMap 换
    344 TreeMap(排序)

    TreeMap 实现 SortedMap 接口够保存记录根键排序默认键值升序排序
    指定排序较器 Iterator 遍历 TreeMap 时记录排序
    果排序映射建议 TreeMap
    TreeMap 时key 必须实现 Comparable 接口者构造 TreeMap 传入定义
    Comparator否会运行时抛出 javalangClassCastException 类型异常
    参考:httpswwwibmcomdeveloperworkscnjavajlotreeindexhtml

    345 LinkHashMap(记录插入序)
    LinkedHashMap HashMap 子类保存记录插入序 Iterator 遍历
    LinkedHashMap 时先记录肯定先插入构造时带参数访问次序排序
    参考 1:httpwwwimportnewcom28263html
    参考 2:httpwwwimportnewcom20386html#comment648123
    13042018 Page 54 of 283

    4 JAVA 线程发
    411 JAVA 发知识库

    412 JAVA 线程实现创建方式
    4121 继承 Thread 类
    Thread 类质实现 Runnable 接口实例代表线程实例启动线程唯方
    法通 Thread 类 start()实例方法start()方法 native 方法启动新线
    程执行 run()方法
    public class MyThread extends Thread {
    public void run() {
    Systemoutprintln(MyThreadrun())
    }
    }
    MyThread myThread1 new MyThread()
    myThread1start()

    4122 实现 Runnable 接口
    果类已 extends 类法直接 extends Thread时实现
    Runnable 接口
    public class MyThread extends OtherClass implements Runnable {
    public void run() {
    Systemoutprintln(MyThreadrun())
    }
    } 13042018 Page 55 of 283

    启动 MyThread需首先实例化 Thread传入 MyThread 实例:
    MyThread myThread new MyThread()
    Thread thread new Thread(myThread)
    threadstart()
    事实传入 Runnable target 参数 Thread Thread run()方法会调
    targetrun()
    public void run() {
    if (target null) {
    targetrun()
    }
    }

    4123 ExecutorServiceCallableFuture 返回值线程

    返回值务必须实现 Callable 接口类似返回值务必须 Runnable 接口执行
    Callable 务获取 Future 象该象调 get 获取 Callable 务
    返回 Object 结合线程池接口 ExecutorService 实现传说中返回结果线程


    创建线程池
    ExecutorService pool ExecutorsnewFixedThreadPool(taskSize)
    创建返回值务
    List list new ArrayList()
    for (int i 0 i < taskSize i++) {
    Callable c new MyCallable(i + )
    执行务获取 Future 象
    Future f poolsubmit(c)
    listadd(f)
    }
    关闭线程池
    poolshutdown()
    获取发务运行结果
    for (Future f list) {
    Future 象获取务返回值输出控制台
    Systemoutprintln(res: + fget()toString())
    }

    13042018 Page 56 of 283

    4124 基线程池方式

    线程数库连接资源非常宝贵资源次需时候创建需时候销
    毁非常浪费资源缓存策略线程池
    创建线程池
    ExecutorService threadPool ExecutorsnewFixedThreadPool(10)
    while(true) {
    threadPoolexecute(new Runnable() { 提交线程务执行
    @Override
    public void run() {
    Systemoutprintln(ThreadcurrentThread()getName() + is running )
    try {
    Threadsleep(3000)
    } catch (InterruptedException e) {
    eprintStackTrace()
    }
    }
    })
    }
    }
    413 4 种线程池
    Java 里面线程池顶级接口 Executor严格意义讲 Executor 线程池
    执行线程工具真正线程池接口 ExecutorService 13042018 Page 57 of 283



    4131 newCachedThreadPool
    创建根需创建新线程线程池前构造线程时重执行
    短期异步务程序言线程池通常提高程序性调 execute 重前构造
    线程(果线程)果现线程没创建新线程添加池中终止
    缓存中移已 60 秒钟未线程长时间保持空闲线程池会资

    4132 newFixedThreadPool
    创建重固定线程数线程池享界队列方式运行线程意点
    数 nThreads 线程会处处理务活动状态果线程处活动状态时提交附加务
    线程前附加务队列中等果关闭前执行期间失败导致
    线程终止新线程代执行续务(果需)某线程显式关闭
    前池中线程直存 13042018 Page 58 of 283


    4133 newScheduledThreadPool
    创建线程池安排定延迟运行命令者定期执行
    ScheduledExecutorService scheduledThreadPool ExecutorsnewScheduledThreadPool(3)
    scheduledThreadPoolschedule(newRunnable(){
    @Override
    public void run() {
    Systemoutprintln(延迟三秒)
    }
    } 3 TimeUnitSECONDS)
    scheduledThreadPoolscheduleAtFixedRate(newRunnable(){
    @Override
    public void run() {
    Systemoutprintln(延迟 1 秒三秒执行次)
    }
    }13TimeUnitSECONDS)

    4134 newSingleThreadExecutor
    ExecutorsnewSingleThreadExecutor()返回线程池(线程池线程)线程
    池线程死(发生异常时)重新启动线程代原线程继续执行

    414 线程生命周期(状态)
    线程创建启动启动进入执行状态直处执行状态
    线程生命周期中新建(New)绪(Runnable)运行(Running)阻塞
    (Blocked)死亡(Dead)5 种状态尤线程启动直霸占着 CPU 独
    运行 CPU 需条线程间切换线程状态会次运行阻塞间切换
    4141 新建状态(NEW)
    程序 new 关键字创建线程该线程处新建状态时仅 JVM 分配
    存初始化成员变量值 13042018 Page 59 of 283

    4142 绪状态(RUNNABLE):
    线程象调 start()方法该线程处绪状态Java 虚拟机会创建方法调栈
    程序计数器等调度运行
    4143 运行状态(RUNNING):
    果处绪状态线程获 CPU开始执行 run()方法线程执行体该线程处运行状

    4144 阻塞状态(BLOCKED):
    阻塞状态指线程某种原放弃 cpu 权出 cpu timeslice暂时停止运行
    直线程进入运行(runnable)状态机会次获 cpu timeslice 转运行(running)状
    态阻塞情况分三种:
    等阻塞(owait>等列):
    运行(running)线程执行 owait()方法JVM 会该线程放入等队列(waitting queue)

    步阻塞(lock>锁池)
    运行(running)线程获取象步锁时该步锁线程占 JVM 会该线
    程放入锁池(lock pool)中
    阻塞(sleepjoin)
    运行(running)线程执行 Threadsleep(long ms) tjoin()方法者发出 IO 请求时
    JVM 会该线程置阻塞状态 sleep()状态超时join()等线程终止者超时者 IO
    处理完毕时线程重新转入运行(runnable)状态

    4145 线程死亡(DEAD)
    线程会面三种方式结束结束死亡状态
    正常结束
    1 run() call()方法执行完成线程正常结束
    异常结束
    2 线程抛出未捕获 Exception Error
    调 stop
    3 直接调该线程 stop()方法结束该线程—该方法通常容易导致死锁推荐

    13042018 Page 60 of 283


    415 终止线程 4 种方式
    4151 正常运行结束
    程序运行结束线程动结束
    4152 退出标志退出线程
    般 run()方法执行完线程会正常结束然常常线程伺服线程需长时间
    运行外部某条件满足情况关闭线程变量控制循环例:
    直接方法设 boolean 类型标志通设置标志 true false 控制 while
    循环否退出代码示例:
    public class ThreadSafe extends Thread {
    public volatile boolean exit false
    public void run() {
    while (exit){
    do something
    }
    }
    }
    定义退出标志 exit exit true 时while 循环退出exit 默认值 false定义 exit
    时 Java 关键字 volatile关键字目 exit 步说时刻
    线程修改 exit 值

    4153 Interrupt 方法结束线程
    interrupt()方法中断线程两种情况: 13042018 Page 61 of 283

    1 线程处阻塞状态: sleep步锁 waitsocket 中 receiveraccept 等方法时
    会线程处阻塞状态调线程 interrupt()方法时会抛出 InterruptException 异常
    阻塞中方法抛出异常通代码捕获该异常然 break 跳出循环状态
    机会结束线程执行通常认调 interrupt 方法线程会结束实
    际错 定先捕获 InterruptedException 异常通 break 跳出循环正
    常结束 run 方法
    2 线程未处阻塞状态: isInterrupted()判断线程中断标志退出循环
    interrupt()方法时中断标志会置 true定义标志控制循环样道理
    public class ThreadSafe extends Thread {
    public void run() {
    while (isInterrupted()){ 非阻塞程中通判断中断标志退出
    try{
    Threadsleep(5*1000)阻塞程捕获中断异常退出
    }catch(InterruptedException e){
    eprintStackTrace()
    break捕获异常执行 break 跳出循环
    }
    }
    }
    }

    4154 stop 方法终止线程(线程安全)
    程序中直接 threadstop()强行终止线程 stop 方法危险象突然关
    闭计算机电源正常程序关机样会产生预料结果安全:
    threadstop()调创建子线程线程会抛出 ThreadDeatherror 错误会释放子
    线程持锁般进行加锁代码块保护数致性果调
    threadstop()导致该线程持锁突然释放(控制)保护数呈
    现致性线程破坏数时导致奇怪应程序错误
    推荐 stop 方法终止线程

    416 sleep wait 区
    1 sleep()方法首先知道该方法属 Thread 类中 wait()方法属
    Object 类中 13042018 Page 62 of 283

    2 sleep()方法导致程序暂停执行指定时间出 cpu 该线程监控状态然
    保持者指定时间会动恢复运行状态
    3 调 sleep()方法程中线程会释放象锁
    4 调 wait()方法时候线程会放弃象锁进入等象等锁定池针
    象调 notify()方法线程进入象锁定池准备获取象锁进入运行状态

    417 start run 区
    1 start()方法启动线程真正实现线程运行时需等 run 方法体代码执行完毕
    直接继续执行面代码
    2 通调 Thread 类 start()方法启动线程 时线程处绪状态 没运

    3 方法 run()称线程体包含执行线程容线程进入运行状态开始运
    行 run 函数中代码 Run 方法运行结束 线程终止然 CPU 调度线程
    418 JAVA 台线程
    1 定义:守护线程称服务线程台线程特性户线程 提供 公
    服务没户线程服务时会动离开
    2 优先级:守护线程优先级较低系统中象线程提供服务
    3 设置:通 setDaemon(true)设置线程守护线程户线程设置守护线程
    方式 线程象创建 前 线程象 setDaemon 方法
    4 Daemon 线程中产生新线程 Daemon
    5 线程 JVM 级 Tomcat 例果 Web 应中启动线程线程
    生命周期会 Web 应程序保持步说停止 Web 应线程
    旧活跃
    6 example 垃圾回收线程典守护线程程序中运行 Thread
    程序会产生垃圾垃圾回收器事做垃圾回收线程 JVM 仅剩线
    程时垃圾回收线程会动离开始终低级状态中运行实时监控理系统
    中回收资源
    7 生命周期:守护进程(Daemon)运行台种特殊进程独立控制终端周
    期性执行某种务等处理某发生事件说守护线程赖终端
    赖系统系统生死 JVM 中线程守护线程时候JVM 退
    出果非守护线程 JVM 会退出
    13042018 Page 63 of 283

    419 JAVA 锁
    4191 乐观锁
    乐观锁种乐观思想认读写少遇发写性低次数时候认
    会修改会锁更新时候会判断期间没更新数
    采取写时先读出前版号然加锁操作(较次版号果样更新)
    果失败重复读较写操作
    java 中乐观锁基通 CAS 操作实现CAS 种更新原子操作较前值传入
    值否样样更新否失败
    4192 悲观锁
    悲观锁悲观思想认写遇发写性高次数时候认
    会修改次读写数时候会锁样想读写数会 block 直锁
    java中悲观锁 SynchronizedAQS 框架锁先尝试 cas 乐观锁获取锁获取
    会转换悲观锁 RetreenLock
    4193 旋锁
    旋锁原理非常简单果持锁线程短时间释放锁资源等竞争锁
    线程需做核态户态间切换进入阻塞挂起状态需等等(旋)
    等持锁线程释放锁立获取锁样避免户线程核切换消耗
    线程旋需消耗 cup 说白 cup 做功果直获取锁线程
    直占 cup 旋做功需设定旋等时间
    果持锁线程执行时间超旋等时间扔没释放锁会导致争锁
    线程等时间获取锁时争线程会停止旋进入阻塞状态
    旋锁优缺点
    旋锁减少线程阻塞锁竞争激烈占锁时间非常短代码块
    说性幅度提升旋消耗会线程阻塞挂起唤醒操作消耗操作会
    导致线程发生两次文切换
    果锁竞争激烈者持锁线程需长时间占锁执行步块时候适合
    旋锁旋锁获取锁前直占 cpu 做功占着 XX XX时量
    线程竞争锁会导致获取锁时间长线程旋消耗线程阻塞挂起操作消耗
    需 cup 线程获取 cpu造成 cpu 浪费种情况关闭旋锁
    旋锁时间阈值(16 引入适应性旋锁)
    旋锁目占着 CPU 资源释放等获取锁立进行处理选择
    旋执行时间呢?果旋执行时间太长会量线程处旋状态占 CPU 资源进
    会影响整体系统性旋周期选额外重 13042018 Page 64 of 283

    JVM 旋周期选择jdk15 限度定写死 16 引入适应性旋锁适应
    性旋锁意味着旋时间固定前次锁旋时间锁拥
    者状态决定基认线程文切换时间佳时间时 JVM 针
    前 CPU 负荷情况做较优化果均负载 CPUs 直旋果超(CPUs2)
    线程正旋线程直接阻塞果正旋线程发现 Owner 发生变化延迟旋
    时间(旋计数)进入阻塞果 CPU 处节电模式停止旋旋时间坏情况 CPU
    存储延迟(CPU A 存储数 CPU B 知数直接时间差)旋时会适放
    弃线程优先级间差异
    旋锁开启
    JDK16 中XX+UseSpinning 开启
    XXPreBlockSpin10 旋次数
    JDK17 掉参数 jvm 控制
    4194 Synchronized 步锁
    synchronized 意非 NULL 象作锁属独占式悲观锁时属重
    入锁
    Synchronized 作范围
    1 作方法时锁住象实例(this)
    2 作静态方法时锁住Class 实例Class 相关数存储永久带PermGen
    (jdk18 metaspace)永久带全局享静态方法锁相类全局锁
    会锁调该方法线程
    3 synchronized 作象实例时锁住该象锁代码块队列
    线程起访问某象监视器时候象监视器会线程存储容器中
    Synchronized 核心组件
    1) Wait Set:调 wait 方法阻塞线程放置里
    2) Contention List:竞争队列请求锁线程首先放竞争队列中
    3) Entry List:Contention List 中资格成候选资源线程移动 Entry List 中
    4) OnDeck:意时刻线程正竞争锁资源该线程成 OnDeck
    5) Owner:前已获取资源线程称 Owner
    6) Owner:前释放锁线程
    Synchronized 实现
    13042018 Page 65 of 283


    1 JVM 次队列尾部取出数锁竞争候选者(OnDeck)发情况
    ContentionList 会量发线程进行 CAS 访问降低尾部元素竞争JVM 会
    部分线程移动 EntryList 中作候选竞争线程
    2 Owner 线程会 unlock 时 ContentionList 中部分线程迁移 EntryList 中指定
    EntryList 中某线程 OnDeck 线程(般先进线程)
    3 Owner 线程直接锁传递 OnDeck 线程锁竞争权利交 OnDeck
    OnDeck 需重新竞争锁样然牺牲公性极提升系统吞吐量
    JVM 中种选择行称竞争切换
    4 OnDeck 线程获取锁资源会变 Owner 线程没锁资源然停留 EntryList
    中果 Owner 线程 wait 方法阻塞转移 WaitSet 队列中直某时刻通 notify
    者 notifyAll 唤醒会重新进 EntryList 中
    5 处 ContentionListEntryListWaitSet 中线程处阻塞状态该阻塞操作系统
    完成(Linux 核采 pthread_mutex_lock 核函数实现)
    6 Synchronized 非公锁 Synchronized 线程进入 ContentionList 时等线程会先
    尝试旋获取锁果获取进入 ContentionList明显已进入队列线程
    公公事情旋获取锁线程直接抢占 OnDeck 线程锁
    资源
    参考:httpsblogcsdnnetzqz_zqzarticledetails70233767
    7 象 monitor 象加锁竞争 monitor 象代码块加锁前分加
    monitorenter monitorexit 指令实现方法加锁通标记位判断
    8 synchronized 重量级操作需调操作系统相关接口性低效线
    程加锁消耗时间操作消耗时间更
    9 Java16synchronized 进行优化适应旋锁消锁粗化轻量级锁偏
    锁等效率质提高推出 Java17 18 中均该关键字实现机理做
    优化引入偏锁轻量级锁象头中标记位需操作系统加锁
    10 锁偏锁升级轻量级锁升级重量级锁种升级程做锁膨胀
    11 JDK 16 中默认开启偏锁轻量级锁通XXUseBiasedLocking 禁偏锁
    13042018 Page 66 of 283

    4195 ReentrantLock
    ReentantLock 继承接口 Lock 实现接口中定义方法种重入锁完
    成 synchronized 完成工作外提供诸响应中断锁轮询锁请求定时锁等
    避免线程死锁方法
    Lock 接口方法
    1 void lock() 执行方法时 果锁处空闲状态 前线程获取锁 相反 果锁已
    线程持 禁前线程 直前线程获取锁
    2 boolean tryLock():果锁 获取锁 立返回 true 否返回 false 该方法
    lock()区 tryLock()试图获取锁 果锁 会导致前线程禁
    前线程然继续执行代码 lock()方法定获取锁 果锁
    直等 未获锁前前线程继续执行
    3 void unlock():执行方法时 前线程释放持锁 锁持者释放 果线程
    持锁 执行该方法 导致异常发生
    4 Condition newCondition():条件象获取等通知组件该组件前锁绑定
    前线程获取锁调该组件 await()方法调前线程缩放锁
    5 getHoldCount() :查询前线程保持锁次数执行线程执行 lock 方法次

    6 getQueueLength():返回正等获取锁线程估计数启动 10 线程1
    线程获锁时返回 9
    7 getWaitQueueLength:(Condition condition)返回等锁相关定条件线
    程估计数 10 线程 condition 象时 10 线程执行
    condition 象 await 方法时执行方法返回 10
    8 hasWaiters(Condition condition) : 查询否线程等锁关定条件
    (condition)指定 contidion 象少线程执行 conditionawait 方法
    9 hasQueuedThread(Thread thread):查询定线程否等获取锁
    10 hasQueuedThreads():否线程等锁
    11 isFair():该锁否公锁
    12 isHeldByCurrentThread(): 前线程否保持锁锁定线程执行 lock 方法前分
    false true
    13 isLock():锁否意线程占
    14 lockInterruptibly():果前线程未中断获取锁
    15 tryLock():尝试获锁仅调时锁未线程占获锁
    16 tryLock(long timeout TimeUnit unit):果锁定等时间没线程保持
    获取该锁
    非公锁
    JVM 机原分配锁机制称公锁ReentrantLock 构造函数中提供
    否公锁初始化方式默认非公锁非公锁实际执行效率远远超出公锁非
    程序特殊需否常非公锁分配机制 13042018 Page 67 of 283

    公锁
    公锁指锁分配机制公通常先锁提出获取请求线程会先分配锁
    ReentrantLock 构造函数中提供否公锁初始化方式定义公锁
    ReentrantLock synchronized
    1 ReentrantLock 通方法 lock() unlock()进行加锁解锁操作 synchronized 会
    JVM 动解锁机制ReentrantLock 加锁需手动进行解锁避免程序出
    现异常法正常解锁情况 ReentrantLock 必须 finally 控制块中进行解锁操

    2 ReentrantLock 相 synchronized 优势中断公锁锁种情况需
    ReentrantLock
    ReentrantLock 实现
    public class MyService {
    private Lock lock new ReentrantLock()
    Lock locknew ReentrantLock(true)公锁
    Lock locknew ReentrantLock(false)非公锁
    private Condition conditionlocknewCondition()创建 Condition
    public void testMethod() {
    try {
    locklock()lock 加锁
    1:wait 方法等:
    Systemoutprintln(开始 wait)
    conditionawait()
    通创建 Condition 象线程 wait必须先执行 locklock 方法获锁
    2:signal 方法唤醒
    conditionsignal()condition 象 signal 方法唤醒 wait 线程
    for (int i 0 i < 5 i++) {
    Systemoutprintln(ThreadName + ThreadcurrentThread()getName()+ ( + (i + 1)))
    }
    } catch (InterruptedException e) {
    eprintStackTrace()
    }
    finally 13042018 Page 68 of 283

    {
    lockunlock()
    }
    }
    }
    Condition 类 Object 类锁方法区区
    1 Condition 类 awiat 方法 Object 类 wait 方法等效
    2 Condition 类 signal 方法 Object 类 notify 方法等效
    3 Condition 类 signalAll 方法 Object 类 notifyAll 方法等效
    4 ReentrantLock 类唤醒指定条件线程 object 唤醒机
    tryLock lock lockInterruptibly 区
    1 tryLock 获锁返回 true立返回 falsetryLock(long timeoutTimeUnit
    unit)增加时间限制果超该时间段没获锁返回 false
    2 lock 获锁返回 true话直等获锁
    3 lock lockInterruptibly果两线程分执行两方法时中断两线程
    lock 会抛出异常 lockInterruptibly 会抛出异常
    4196 Semaphore 信号量
    Semaphore 种基计数信号量设定阈值基线程竞争获取许信
    号做完申请超阈值线程申请许信号会阻塞Semaphore
    构建象池资源池类数库连接池
    实现互斥锁(计数器 1)
    创建计数 1 Semaphore作种类似互斥锁机制二元信号量
    表示两种互斥状态
    代码实现
    法:
    创建计数阈值 5 信号量象
    5 线程时访问
    Semaphore semp new Semaphore(5)
    try { 申请许
    sempacquire()
    try {
    业务逻辑 13042018 Page 69 of 283

    } catch (Exception e) {
    } finally {
    释放许
    semprelease()
    }
    } catch (InterruptedException e) {
    }
    Semaphore ReentrantLock
    Semaphore 基完成 ReentrantLock 工作方法类似通 acquire()
    release()方法获释放界资源实测Semaphoneacquire()方法默认响应中断锁
    ReentrantLocklockInterruptibly()作效果致说等界资源程中
    Threadinterrupt()方法中断
    外Semaphore 实现轮询锁请求定时锁功方法名 tryAcquire tryLock
    方法 ReentrantLock 致Semaphore 提供公非公锁机制
    构造函数中进行设定
    Semaphore 锁释放操作手动进行 ReentrantLock 样避免线程抛出异常
    法正常释放锁情况发生释放锁操作必须 finally 代码块中完成
    4197 AtomicInteger
    首先说明处 AtomicInteger 提供原子操作 Integer 类常见
    AtomicBooleanAtomicIntegerAtomicLongAtomicReference 等实现原理相
    区运算象类型令兴奋通 AtomicReference
    操作转化成原子操作
    知道线程程序中诸++i i++等运算具原子性安全线程操作
    通常会 synchronized 该操作变成原子操作 JVM 类操作特意提供
    步类更方便程序运行效率变更高通相关资料显示通常AtomicInteger
    性 ReentantLock 倍

    4198 重入锁(递锁)
    文里面讲广义重入锁单指 JAVA ReentrantLock重入锁
    做递锁指线程 外层函数获锁 层递函数然获取该锁代码受
    影响 JAVA 环境 ReentrantLock synchronized 重入锁
    13042018 Page 70 of 283

    4199 公锁非公锁
    公锁(Fair)
    加锁前检查否排队等线程优先排队等线程先先
    非公锁(Nonfair)
    加锁时考虑排队等问题直接尝试获取锁获取动队尾等
    1 非公锁性公锁高 5~10 倍公锁需核情况维护队列
    2 Java 中 synchronized 非公锁ReentrantLock 默认 lock()方法采非公锁
    41910 ReadWriteLock 读写锁
    提高性Java 提供读写锁读方读锁写方写锁灵活控制
    果没写锁情况读阻塞定程度提高程序执行效率读写锁分读锁写
    锁读锁互斥读锁写锁互斥 jvm 控制相应锁
    读锁
    果代码读数时读时写读锁
    写锁
    果代码修改数写时读取写锁总读时候
    读锁写时候写锁
    Java 中读写锁接口 javautilconcurrentlocksReadWriteLock 具体实现
    ReentrantReadWriteLock
    41911 享锁独占锁
    java 发包提供加锁模式分独占锁享锁
    独占锁
    独占锁模式次线程持锁ReentrantLock 独占方式实现互斥锁
    独占锁种悲观保守加锁策略避免读读突果某读线程获取锁读线
    程等种情况限制必发性读操作会影响数致性
    享锁
    享锁允许线程时获取锁发访问 享资源:ReadWriteLock享锁种
    乐观锁放宽加锁策略允许执行读操作线程时访问享资源
    1 AQS 部类 Node 定义两常量 SHARED EXCLUSIVE分标识 AQS 队列中等
    线程锁获取模式
    2 java 发包中提供 ReadWriteLock读写锁允许资源读操作访问
    者 写操作访问两者时进行 13042018 Page 71 of 283

    41912 重量级锁(Mutex Lock)
    Synchronized 通象部做监视器锁(monitor)实现监视器锁质
    赖底层操作系统 Mutex Lock 实现操作系统实现线程间切换需
    户态转换核心态成非常高状态间转换需相较长时间什
    Synchronized 效率低原种赖操作系统 Mutex Lock 实现锁称
    重量级锁JDK 中 Synchronized 做种种优化核心减少种重量级锁
    JDK16 减少获锁释放锁带性消耗提高性引入轻量级锁
    偏锁
    41913 轻量级锁
    锁状态总四种:锁状态偏锁轻量级锁重量级锁
    锁升级
    着锁竞争锁偏锁升级轻量级锁升级重量级锁(锁升级单
    说低高升级会出现锁降级)
    轻量级相操作系统互斥量实现传统锁言首先需强调点
    轻量级锁代重量级锁意没线程竞争前提减少传统重量
    级锁产生性消耗解释轻量级锁执行程前先明白点轻量级锁适应场
    景线程交执行步块情况果存时间访问锁情况会导致轻量级锁膨胀
    重量级锁
    41914 偏锁

    Hotspot 作者研究发现数情况锁仅存线程竞争总线
    程次获偏锁目某线程获锁消线程锁重入(CAS)开销起
    线程偏护引入偏锁线程竞争情况量减少必轻量级
    锁执行路径轻量级锁获取释放赖次 CAS 原子指令偏锁需置换
    ThreadID 时候赖次 CAS 原子指令(旦出现线程竞争情况必须撤销偏锁
    偏锁撤销操作性损耗必须节省 CAS 原子指令性消耗)面说轻
    量级锁线程交执行步块时提高性偏锁线程执行步块时进
    步提高性
    41915 分段锁
    分段锁非种实际锁种思想 ConcurrentHashMap 学分段锁实践
    41916 锁优化
    13042018 Page 72 of 283

    减少锁持时间
    线程安全求程序加锁
    减锁粒度
    象(象会线程访问)拆成象增加行度降低锁竞争
    降低锁竞争偏锁轻量级锁成功率会提高典型减锁粒度案例
    ConcurrentHashMap
    锁分离
    常见锁分离读写锁 ReadWriteLock根功进行分离成读锁写锁样读读互
    斥读写互斥写写互斥保证线程安全提高性具体请查[高发 Java 五]
    JDK 发包 1读写分离思想延伸操作互影响锁分离
    LinkedBlockingQueue 头部取出尾部放数
    锁粗化
    通常情况保证线程间效发会求线程持锁时间量短完
    公资源应该立释放锁事度果锁停进行请求步
    释放身会消耗系统宝贵资源反利性优化
    锁消
    锁消编译器级事情时编译器时果发现享象消
    象锁操作数程序员编码规范引起
    参考:httpswwwjianshucomp39628e1180a9

    4110 线程基方法
    线程相关基方法 waitnotifynotifyAllsleepjoinyield 等 13042018 Page 73 of 283


    41101 线程等(wait)
    调该方法线程进入 WAITING 状态等外线程通知中断会返回需注意
    调 wait()方法会释放象锁wait 方法般步方法步代码块中
    41102 线程睡眠(sleep)
    sleep 导致前线程休眠 wait 方法 sleep 会释放前占锁sleep(long)会导致
    线程进入 TIMEDWATING 状态 wait()方法会导致前线程进入 WATING 状态
    41103 线程步(yield)
    yield 会前线程出 CPU 执行时间片线程起重新竞争 CPU 时间片般情况
    优先级高线程更性成功竞争 CPU 时间片绝操作系统
    线程优先级敏感
    41104 线程中断(interrupt)
    中断线程意线程通知信号会影响线程部中断标识位
    线程身会改变状态(阻塞终止等)
    1 调 interrupt()方法会中断正运行线程说处 Running 状态线
    程会中断终止仅仅改变部维护中断标识位已
    2 调 sleep()线程处 TIMEDWATING 状态时调 interrupt()方法会抛出
    InterruptedException线程提前结束 TIMEDWATING 状态 13042018 Page 74 of 283

    3 许声明抛出 InterruptedException 方法( Threadsleep(long mills 方法))抛出异
    常前会清中断标识位抛出异常调 isInterrupted()方法会返回 false
    4 中断状态线程固标识位通标识位安全终止线程想终止
    线程 thread 时候调 threadinterrupt()方法线程 run 方法部
    根 threadisInterrupted()值优雅终止线程
    41105 Join 等线程终止
    join() 方法等线程终止前线程中调线程 join() 方法前线程转阻塞
    状态回线程结束前线程阻塞状态变绪状态等 cpu 宠幸
    41106 什 join()方法?
    情况线程生成启动子线程需子线程返回结果需线程需
    子线程结束结束时候 join() 方法
    Systemoutprintln(ThreadcurrentThread()getName() + 线程运行开始)
    Thread6 thread1 new Thread6()
    thread1setName(线程 B)
    thread1join()
    Systemoutprintln(时 thread1 执行完毕执行线程)
    41107 线程唤醒(notify)
    Object 类中 notify() 方法唤醒象监视器等单线程果线程象
    等会选择唤醒中线程选择意实现做出决定时发生线程通调
    中 wait() 方法象监视器等直前线程放弃象锁定继
    续执行唤醒线程唤醒线程常规方式该象动步线程进行竞
    争类似方法 notifyAll() 唤醒次监视器等线程
    41108 方法:
    1 sleep():强迫线程睡眠N毫秒
    2 isAlive(): 判断线程否存活
    3 join(): 等线程终止
    4 activeCount(): 程序中活跃线程数
    5 enumerate(): 枚举程序中线程
    6 currentThread(): 前线程
    7 isDaemon(): 线程否守护线程
    8 setDaemon(): 设置线程守护线程(户线程守护线程区否等线
    程赖线程结束结束)
    9 setName(): 线程设置名称
    10 wait(): 强迫线程等 13042018 Page 75 of 283

    11 notify(): 通知线程继续运行
    12 setPriority(): 设置线程优先级
    13 getPriority():获线程优先级
    4111 线程文切换
    巧妙利时间片轮转方式 CPU 务服务定时间然前务状态保存
    加载务状态继续服务务务状态保存加载 段程做
    文切换时间片轮转方式务颗 CPU 执行变成

    41111 进程
    (时候称做务)指程序运行实例 Linux 系统中线程行运行
    父进程(创建进程)享址空间(段存区域)资源轻量
    级进程
    41112 文
    指某时间点 CPU 寄存器程序计数器容
    41113 寄存器
    CPU 部数量较少速度快存(应 CPU 外部相较慢 RAM
    存)寄存器通常值(通常运算中间值)快速访问提高计算机程序运行速

    41114 程序计数器
    专寄存器表明指令序列中 CPU 正执行位置存值正执行指令
    位置者执行指令位置具体赖特定系统
    41115 PCB切换桢
    文切换认核(操作系统核心) CPU 进程(包括线程)进行切换
    文切换程中信息保存进程控制块(PCB process control block)中PCB 常称
    作切换桢(switchframe)信息会直保存 CPU 存中直次 13042018 Page 76 of 283

    41116 文切换活动:
    1 挂起进程进程 CPU 中状态(文)存储存中某处
    2 存中检索进程文 CPU 寄存器中恢复
    3 跳转程序计数器指位置(跳转进程中断时代码行)恢复该进程程序

    41117 引起线程文切换原
    1 前执行务时间片完系统 CPU 正常调度务
    2 前执行务碰 IO 阻塞调度器务挂起继续务
    3 务抢占锁资源前务没抢锁资源调度器挂起继续务
    4 户代码挂起前务出 CPU 时间
    5 硬件中断
    4112 步锁死锁
    41121 步锁
    线程时访问数时容易出现问题避免种情况出现保证线程
    步互斥指发执行线程时间允许线程访问享数 Java 中
    synchronized 关键字取象步锁
    41122 死锁
    死锁线程时阻塞中者全部等某资源释放
    4113 线程池原理
    线程池做工作控制运行线程数量处理程中务放入队列然线程创建
    启动务果线程数量超数量超出数量线程排队等候等线程执行完毕
    队列中取出务执行特点:线程复控制发数理线程
    41131 线程复
    Thread 类 start 方法 调 start 启动线程时 Java 虚拟机会调该类 run
    方法 该类 run() 方法中调 Runnable 象 run() 方法 继承重写
    Thread 类 start 方法中添加断循环调传递 Runnable 象 线程池实
    现原理循环方法中断获取 Runnable Queue 实现获取 Runnable 前
    阻塞
    41132 线程池组成
    般线程池分 4 组成部分: 13042018 Page 77 of 283

    1 线程池理器:创建理线程池
    2 工作线程:线程池中线程
    3 务接口:务必须实现接口工作线程调度运行
    4 务队列:存放处理务提供种缓机制
    Java 中线程池通 Executor 框架实现该框架中 ExecutorExecutors
    ExecutorServiceThreadPoolExecutor Callable FutureFutureTask 类

    ThreadPoolExecutor 构造方法:
    public ThreadPoolExecutor(int corePoolSizeint maximumPoolSize long keepAliveTime
    TimeUnit unit BlockingQueue workQueue) {
    this(corePoolSize maximumPoolSize keepAliveTime unit workQueue
    ExecutorsdefaultThreadFactory() defaultHandler)
    }

    1 corePoolSize:指定线程池中线程数量
    2 maximumPoolSize:指定线程池中线程数量
    3 keepAliveTime:前线程池数量超 corePoolSize 时余空闲线程存活时间
    次时间会销毁
    4 unit:keepAliveTime 单位
    5 workQueue:务队列提交尚未执行务
    6 threadFactory:线程工厂创建线程般默认
    7 handler:拒绝策略务太处理拒绝务 13042018 Page 78 of 283

    41133 拒绝策略
    线程池中线程已完法继续新务服务时等队列已排满
    塞新务时候需拒绝策略机制合理处理问题
    JDK 置拒绝策略:
    1 AbortPolicy : 直接抛出异常阻止系统正常运行
    2 CallerRunsPolicy : 线程池未关闭该策略直接调者线程中运行前丢弃
    务显然样做会真丢弃务务提交线程性极会急剧降
    3 DiscardOldestPolicy : 丢弃老请求执行务尝试
    次提交前务
    4 DiscardPolicy : 该策略默默丢弃法处理务予处理果允许务丢
    失种方案
    置拒绝策略均实现 RejectedExecutionHandler 接口策略法满足实际
    需完全扩展 RejectedExecutionHandler 接口
    41134 Java 线程池工作程

    1 线程池刚创建时里面没线程务队列作参数传进算队列里面
    务线程池会马执行
    2 调 execute() 方法添加务时线程池会做判断:
    a) 果正运行线程数量 corePoolSize马创建线程运行务
    b) 果正运行线程数量等 corePoolSize务放入队列
    c) 果时候队列满正运行线程数量 maximumPoolSize
    创建非核心线程立刻运行务
    d) 果队列满正运行线程数量等 maximumPoolSize线程池
    会抛出异常 RejectExecutionException
    3 线程完成务时会队列中取务执行
    4 线程事做超定时间(keepAliveTime)时线程池会判断果前运
    行线程数 corePoolSize线程停掉线程池务完成
    终会收缩 corePoolSize 13042018 Page 79 of 283


    4114 JAVA 阻塞队列原理
    阻塞队列关键字阻塞先理解阻塞含义阻塞队列中线程阻塞样两种情况:
    1 队列中没数情况消费者端线程会动阻塞(挂起)直数放
    入队列

    2 队列中填满数情况生产者端线程会动阻塞(挂起)直队列中
    空位置线程动唤醒

    13042018 Page 80 of 283


    41141 阻塞队列方法

    抛出异常:抛出异常
    特殊值:返回特殊值(null false视情况定)
    塞:成功操作前直阻塞线程
    超时:放弃前时间阻塞

    插入操作:
    1:public abstract boolean add(E paramE):指定元素插入队列中(果立行
    会违反容量限制)成功时返回 true果前没空间抛
    出 IllegalStateException果该元素 NULL会抛出 NullPointerException 异常
    2:public abstract boolean offer(E paramE):指定元素插入队列中(果立行
    会违反容量限制)成功时返回 true果前没空间返回 false
    3:public abstract void put(E paramE) throws InterruptedException: 指定元素插
    入队列中等空间(果必)
    public void put(E paramE) throws InterruptedException {
    checkNotNull(paramE)
    ReentrantLock localReentrantLock thislock
    localReentrantLocklockInterruptibly()
    try {
    while (thiscount thisitemslength)
    thisnotFullawait()果队列满线程阻塞等
    enqueue(paramE) 13042018 Page 81 of 283

    localReentrantLockunlock()
    } finally {
    localReentrantLockunlock()
    }
    }
    4:offer(E o long timeout TimeUnit unit):设定等时间果指定时间
    队列中加入 BlockingQueue返回失败
    获取数操作:
    1:poll(time)取走 BlockingQueue 里排首位象立取出等 time 参数
    规定时间取时返回 null
    2:poll(long timeout TimeUnit unit): BlockingQueue 取出队首象果
    指定时间队列旦数取立返回队列中数否直时间超时没数
    取返回失败
    3:take()取走 BlockingQueue 里排首位象 BlockingQueue 空阻断进入等状
    态直 BlockingQueue 新数加入
    4drainTo()次性 BlockingQueue 获取数象(指定获取数
    数)通该方法提升获取数效率需次分批加锁释放锁
    41142 Java 中阻塞队列

    1 ArrayBlockingQueue :数组结构组成界阻塞队列
    2 LinkedBlockingQueue :链表结构组成界阻塞队列
    3 PriorityBlockingQueue :支持优先级排序界阻塞队列
    4 DelayQueue:优先级队列实现界阻塞队列
    5 SynchronousQueue:存储元素阻塞队列
    6 LinkedTransferQueue:链表结构组成界阻塞队列
    7 LinkedBlockingDeque:链表结构组成双阻塞队列 13042018 Page 82 of 283




    41143 ArrayBlockingQueue(公非公)
    数组实现界阻塞队列队列先进先出(FIFO)原元素进行排序默认情况
    保证访问者公访问队列谓公访问队列指阻塞生产者线程消费者线程
    队列时阻塞先序访问队列先阻塞生产者线程先队列里插入
    元素先阻塞消费者线程先队列里获取元素通常情况保证公性会降低吞吐
    量代码创建公阻塞队列:
    ArrayBlockingQueue fairQueue new ArrayBlockingQueue(1000true)
    41144 LinkedBlockingQueue(两独立锁提高发)
    基链表阻塞队列 ArrayListBlockingQueue 类似队列先进先出(FIFO)原
    元素进行排序 LinkedBlockingQueue 够高效处理发数生产者
    端消费者端分采独立锁控制数步意味着高发情况生产者消费
    者行操作队列中数提高整队列发性
    LinkedBlockingQueue 会默认类似限容量(IntegerMAX_VALUE)
    41145 PriorityBlockingQueue(compareTo 排序实现优先)
    支持优先级界队列默认情况元素采取然序升序排列定义实现
    compareTo()方法指定元素进行排序规者初始化 PriorityBlockingQueue 时指定构造
    参数 Comparator 元素进行排序需注意保证优先级元素序
    41146 DelayQueue(缓存失效定时务 )
    支持延时获取元素界阻塞队列队列 PriorityQueue 实现队列中元素必须实
    现 Delayed 接口创建元素时指定久队列中获取前元素延迟期满时
    队列中提取元素 DelayQueue 运应场景:
    1 缓存系统设计: DelayQueue 保存缓存元素效期线程循环查询
    DelayQueue旦 DelayQueue 中获取元素时表示缓存效期 13042018 Page 83 of 283

    2 定时务调度: DelayQueue 保存天会执行务执行时间旦
    DelayQueue 中获取务开始执行 TimerQueue DelayQueue 实现
    41147 SynchronousQueue(存储数传递数)
    存储元素阻塞队列 put 操作必须等 take 操作否继续添加元素
    SynchronousQueue 成传球手负责生产者线程处理数直接传递消费者线
    程队列身存储元素非常适合传递性场景线程中数传递
    外线程SynchronousQueue 吞吐量高 LinkedBlockingQueue
    ArrayBlockingQueue
    41148 LinkedTransferQueue
    链表结构组成界阻塞 TransferQueue 队列相阻塞队列
    LinkedTransferQueue tryTransfer transfer 方法
    1 transfer 方法:果前消费者正等接收元素(消费者 take()方法带时间限制
    poll()方法时)transfer 方法生产者传入元素立刻 transfer(传输)消费者
    果没消费者等接收元素transfer 方法会元素存放队列 tail 节点等该元素
    消费者消费返回
    2 tryTransfer 方法试探生产者传入元素否直接传消费者果没消费
    者等接收元素返回 false transfer 方法区 tryTransfer 方法消费者否
    接收方法立返回 transfer 方法必须等消费者消费返回
    带时间限制 tryTransfer(E e long timeout TimeUnit unit)方法试图生产者传
    入元素直接传消费者果没消费者消费该元素等指定时间返回果超时
    没消费元素返回 false果超时时间消费元素返回 true
    41149 LinkedBlockingDeque
    链表结构组成双阻塞队列谓双队列指队列两端插入移出元素
    双端队列操作队列入口线程时入队时减少半竞争相
    阻塞队列LinkedBlockingDeque addFirst addLast offerFirst offerLast
    peekFirstpeekLast 等方法 First 单词结尾方法表示插入获取(peek)移双端队
    列第元素 Last 单词结尾方法表示插入获取移双端队列元素
    外插入方法 add 等 addLast移方法 remove 等效 removeFirst take 方法等
    takeFirst知道 Jdk bug时带 First Last 缀方法更清楚
    初始化 LinkedBlockingDeque 时设置容量防止渡膨胀外双阻塞队列运
    工作窃取模式中 13042018 Page 84 of 283

    4115 CyclicBarrierCountDownLatchSemaphore 法
    41151 CountDownLatch(线程计数器 )
    CountDownLatch 类位 javautilconcurrent 包利实现类似计数器功
    务 A等 4 务执行完毕执行时利 CountDownLatch
    实现种功
    final CountDownLatch latch new CountDownLatch(2)
    new Thread(){public void run() {
    Systemoutprintln(子线程+ThreadcurrentThread()getName()+正执行)
    Threadsleep(3000)
    Systemoutprintln(子线程+ThreadcurrentThread()getName()+执行完毕)
    latchcountDown()
    }}start()
    new Thread(){ public void run() {
    Systemoutprintln(子线程+ThreadcurrentThread()getName()+正执行)
    Threadsleep(3000)
    Systemoutprintln(子线程+ThreadcurrentThread()getName()+执行完毕)
    latchcountDown()
    }}start()
    Systemoutprintln(等 2 子线程执行完毕)
    latchawait()
    Systemoutprintln(2 子线程已执行完毕)
    Systemoutprintln(继续执行线程)
    }
    41152 CyclicBarrier(回环栅栏等 barrier 状态全部时执行)
    字面意思回环栅栏通实现组线程等某状态全部时执行做回环
    等线程释放CyclicBarrier 重暂状态做
    barrier调 await()方法线程处 barrier
    CyclicBarrier 中重方法 await 方法 2 重载版:
    1 public int await():挂起前线程直线程达 barrier 状态时执行续

    2 public int await(long timeout TimeUnit unit):线程等定时间果
    线程没达 barrier 状态直接达 barrier 线程执行续务 13042018 Page 85 of 283

    具体外 CyclicBarrier 重
    public static void main(String[] args) {
    int N 4
    CyclicBarrier barrier new CyclicBarrier(N)
    for(int i0i new Writer(barrier)start()
    }
    static class Writer extends Thread{
    private CyclicBarrier cyclicBarrier
    public Writer(CyclicBarrier cyclicBarrier) {
    thiscyclicBarrier cyclicBarrier
    }
    @Override
    public void run() {
    try {
    Threadsleep(5000) 睡眠模拟线程需预定写入数操作
    Systemoutprintln( 线程+ThreadcurrentThread()getName()+ 写入数完
    毕等线程写入完毕)
    cyclicBarrierawait()
    } catch (InterruptedException e) {
    eprintStackTrace()
    }catch(BrokenBarrierException e){
    eprintStackTrace()
    }
    Systemoutprintln(线程写入完毕继续处理务数操作)
    }
    }
    41153 Semaphore(信号量控制时访问线程数)
    Semaphore 翻译成字面意思 信号量Semaphore 控制时访问线程数通
    acquire() 获取许果没等 release() 释放许
    Semaphore 类中较重方法:
    1 public void acquire() 获取许许够获会直等直获许

    2 public void acquire(int permits)获取 permits 许
    3 public void release() { } 释放许注意释放许前必须先获获许
    4 public void release(int permits) { }释放 permits 许
    面 4 方法会阻塞果想立执行结果面方法 13042018 Page 86 of 283

    1 public boolean tryAcquire()尝试获取许获取成功立返回 true获取失
    败立返回 false
    2 public boolean tryAcquire(long timeout TimeUnit unit)尝试获取许指定
    时间获取成功立返回 true否立返回 false
    3 public boolean tryAcquire(int permits)尝试获取 permits 许获取成功立返
    回 true获取失败立返回 false
    4 public boolean tryAcquire(int permits long timeout TimeUnit unit) 尝试获取 permits
    许指定时间获取成功立返回 true否立返回 false
    5 通 availablePermits()方法许数目
    例子:工厂 5 台机器 8 工台机器时工完
    工继续通 Semaphore 实现:
    int N 8 工数
    Semaphore semaphore new Semaphore(5) 机器数目
    for(int i0i new Worker(isemaphore)start()
    }
    static class Worker extends Thread{
    private int num
    private Semaphore semaphore
    public Worker(int numSemaphore semaphore){
    thisnum num
    thissemaphore semaphore
    }

    @Override
    public void run() {
    try {
    semaphoreacquire()
    Systemoutprintln(工+thisnum+占机器生产)
    Threadsleep(2000)
    Systemoutprintln(工+thisnum+释放出机器)
    semaphorerelease()
    } catch (InterruptedException e) {
    eprintStackTrace()
    }
    }
    CountDownLatch CyclicBarrier 够实现线程间等侧重点
    CountDownLatch 般某线程 A 等干线程执行完务13042018 Page 87 of 283

    执行 CyclicBarrier 般组线程互相等某状态然组线程时
    执行外CountDownLatch 够重 CyclicBarrier 重
    Semaphore 实锁点类似般控制某组资源访问权限
    4116 volatile 关键字作(变量见性禁止重排序)
    Java 语言提供种稍弱步机制 volatile 变量确保变量更新操作通知
    线程volatile 变量具备两种特性volatile 变量会缓存寄存器者处理器见
    方读取 volatile 类型变量时总会返回新写入值
    变量见性
    保证该变量线程见里见性指线程修改变量值新
    值线程立获取
    禁止重排序
    volatile 禁止指令重排
    sychronized 更轻量级步锁
    访问 volatile 变量时会执行加锁操作会执行线程阻塞 volatile 变量
    种 sychronized 关键字更轻量级步机制volatile 适合种场景:变量线程
    享线程直接变量赋值

    非 volatile 变量进行读写时候线程先存拷贝变量 CPU 缓存中果计算机
    CPU线程 CPU 处理意味着线程拷贝 CPU
    cache 中声明变量 volatile JVM 保证次读变量存中读跳 CPU cache

    适场景
    值说明 volatile 变量单次读写操作保证原子性 long double 类型变量
    保证 i++种操作原子性质 i++读写两次操作某场景
    代 Synchronizedvolatile 完全取代 Synchronized 位置特殊场13042018 Page 88 of 283

    景适 volatile总说必须时满足面两条件保证发环境线程安
    全:
    (1)变量写操作赖前值( i++)者说单纯变量赋值(boolean
    flag true)
    (2)该变量没包含具变量变式中说 volatile 变量间
    互相赖状态真正独立程序容时 volatile



    4117 两线程间享数
    Java 里面进行线程通信方式享存方式享存关注点两:见
    性序性原子性Java 存模型(JMM)解决见性序性问题锁解决原子性
    问题理想情况希做步互斥常规实现方法:
    数抽象成类数操作作类方法
    1 数抽象成类数操作作类方法设计容易做
    步方法加synchronized
    public class MyData {
    private int j0
    public synchronized void add(){
    j++
    Systemoutprintln(线程+ThreadcurrentThread()getName()+j :+j)
    }
    public synchronized void dec(){
    j
    Systemoutprintln(线程+ThreadcurrentThread()getName()+j :+j)
    }
    public int getData(){
    return j
    }
    }
    public class AddRunnable implements Runnable{
    MyData data
    public AddRunnable(MyData data){
    thisdata data
    } 13042018 Page 89 of 283

    public void run() {
    dataadd()
    }
    }
    public class DecRunnable implements Runnable {
    MyData data
    public DecRunnable(MyData data){
    thisdata data
    }
    public void run() {
    datadec()
    }
    }
    public static void main(String[] args) {
    MyData data new MyData()
    Runnable add new AddRunnable(data)
    Runnable dec new DecRunnable(data)
    for(int i0i<2i++){
    new Thread(add)start()
    new Thread(dec)start()
    }
    Runnable 象作类部类
    2 Runnable 象作类部类享数作类成员变量线程享数
    操作方法封装外部类便实现数操作步互斥作部类
    Runnable 象调外部类方法
    public class MyData {
    private int j0
    public synchronized void add(){
    j++
    Systemoutprintln(线程+ThreadcurrentThread()getName()+j :+j)
    }
    public synchronized void dec(){
    j
    Systemoutprintln(线程+ThreadcurrentThread()getName()+j :+j)
    }
    public int getData(){
    return j 13042018 Page 90 of 283

    }
    }
    public class TestThread {
    public static void main(String[] args) {
    final MyData data new MyData()
    for(int i0i<2i++){
    new Thread(new Runnable(){
    public void run() {
    dataadd()
    }
    })start()
    new Thread(new Runnable(){
    public void run() {
    datadec()
    }
    })start()
    }
    }
    }

    4118 ThreadLocal 作(线程存储)
    ThreadLocal方做线程变量方做线程存储ThreadLocal 作
    提供线程局部变量种变量线程生命周期起作减少线程函数
    者组件间公变量传递复杂度
    ThreadLocalMap(线程属性)
    1 线程中 ThreadLocalMap 类象线程象保持中
    线程正确访问象
    2 ThreadLocal 静态实例作 key象引保存线程
    ThreadLocalMap 中然线程执行处通静态 ThreadLocal 实例 get()方法取
    线程保存象避免象作参数传递麻烦
    3 ThreadLocalMap 实线程里面属性 Thread 类中定义
    ThreadLocalThreadLocalMap threadLocals null 13042018 Page 91 of 283


    场景
    常见 ThreadLocal 场景 解决 数库连接Session 理等
    private static final ThreadLocal threadSession new ThreadLocal()
    public static Session getSession() throws InfrastructureException {
    Session s (Session) threadSessionget()
    try {
    if (s null) {
    s getSessionFactory()openSession()
    threadSessionset(s)
    }
    } catch (HibernateException ex) {
    throw new InfrastructureException(ex)
    }
    return s
    }

    4119 synchronized ReentrantLock 区
    41191 两者点:
    1 协调线程享象变量访问
    2 重入锁线程次获锁
    3 保证见性互斥性 13042018 Page 92 of 283

    41192 两者点:
    1 ReentrantLock 显示获释放锁synchronized 隐式获释放锁
    2 ReentrantLock 响应中断轮回synchronized 响应中断处理锁
    性提供更高灵活性
    3 ReentrantLock API 级synchronized JVM 级
    4 ReentrantLock 实现公锁
    5 ReentrantLock 通 Condition 绑定条件
    6 底层实现样 synchronized 步阻塞悲观发策略lock 步非阻
    塞采乐观发策略
    7 Lock 接口 synchronized Java 中关键字synchronized 置语言
    实现
    8 synchronized 发生异常时会动释放线程占锁会导致死锁现象发生
    Lock 发生异常时果没动通 unLock()释放锁造成死锁现象
    Lock 时需 finally 块中释放锁
    9 Lock 等锁线程响应中断 synchronized 行 synchronized 时
    等线程会直等够响应中断
    10 通 Lock 知道没成功获取锁 synchronized 法办
    11 Lock 提高线程进行读操作效率实现读写锁等

    4120 ConcurrentHashMap 发
    41201 减锁粒度

    减锁粒度指缩锁定象范围减锁突性提高系统发力减
    锁粒度种削弱线程锁竞争效手段种技术典型应 ConcurrentHashMap(高
    性 HashMap)类实现 HashMap 言重两方法 get set 方法果
    整 HashMap 加锁线程安全象加锁粒度太Segment
    称 ConcurrentHashMap 发度
    41202 ConcurrentHashMap 分段锁

    ConcurrentHashMap部细分干 HashMap称段(Segment)默认情况
    ConcurrentHashMap 进步细分 16 段锁发度
    果需 ConcurrentHashMap 中添加新表项整 HashMap 加锁首
    先根 hashcode 该表项应该存放段中然该段加锁完成 put 操作线程
    环境中果线程时进行 put 操作加入表项存放段中线程间
    做真正行 13042018 Page 93 of 283

    ConcurrentHashMap Segment 数组结构 HashEntry 数组结构组成
    ConcurrentHashMap Segment 数组结构 HashEntry 数组结构组成Segment 种
    重入锁 ReentrantLock ConcurrentHashMap 里扮演锁角色HashEntry 存储键值
    数 ConcurrentHashMap 里包含 Segment 数组Segment 结构 HashMap
    类似种数组链表结构 Segment 里包含 HashEntry 数组 HashEntry
    链表结构元素 Segment 守护 HashEntry 数组里元素 HashEntry 数组
    数进行修改时必须首先获应 Segment 锁

    4121 Java 中线程调度
    41211 抢占式调度:
    抢占式调度指条线程执行时间线程切换系统控制系统控制指系统某种
    运行机制条线程分样执行时间片某线程执行时间片较长甚
    某线程执行时间片种机制线程堵塞会导致整进程堵塞
    41212 协式调度:
    协式调度指某线程执行完动通知系统切换线程执行种模式接力赛样
    跑完路程接力棒交接继续跑线程执行时间线程
    身控制线程切换预知存线程步问题致命弱点:果线程编
    写问题运行半直堵塞导致整系统崩溃 13042018 Page 94 of 283


    41213 JVM 线程调度实现(抢占式调度)

    java 线程调抢占式调度Java 中线程会优先级分配 CPU 时间片运行优先级越高
    越优先执行优先级高代表独占执行时间片优先级高越执行时间
    片反优先级低分执行时间少会分配执行时间
    41214 线程出 cpu 情况:
    1 前运行线程动放弃 CPUJVM 暂时放弃 CPU 操作(基时间片轮转调度 JVM 操作系
    统会线程永久放弃 CPU者说放弃次时间片执行权)例调 yield()方法
    2 前运行线程某原进入阻塞状态例阻塞 IO
    3 前运行线程结束运行完 run()方法里面务
    4122 进程调度算法
    41221 优先调度算法

    1 先先服务调度算法(FCFS)
    作业调度中采该算法时次调度备作业队列中选择先进入该队
    列作业调入存分配资源创建进程然放入绪队列进程调度中采
    FCFS 算法时次调度绪队列中选择先进入该队列进程分配处理机13042018 Page 95 of 283

    投入运行该进程直运行完成发生某事件阻塞放弃处理机特点:算法较
    简单实现基公
    2 短作业(进程)优先调度算法
    短作业优先(SJF)调度算法备队列中选择干估计运行时间短作业
    调入存运行短进程优先(SPF)调度算法绪队列中选出估计运行时间短进程
    处理机分配立执行直执行完成发生某事件阻塞放弃处理机时重
    新调度该算法未顾紧迫型作业
    41222 高优先权优先调度算法
    顾紧迫型作业进入系统便获优先处理引入高优先权优先(FPF)调度
    算法该算法作业调度时系统备队列中选择干优先权高作业装入存
    进程调度时该算法处理机分配绪队列中优先权高进程
    1 非抢占式优先权算法
    种方式系统旦处理机分配绪队列中优先权高进程该进程便直执行
    直完成发生某事件该进程放弃处理机时种调度算法批处理系统中
    某实时性求严实时系统中
    2 抢占式优先权调度算法
    种方式系统样处理机分配优先权高进程执行执行期间
    出现优先权更高进程进程调度程序立停止前进程(原优先权高进程)
    执行重新处理机分配新优先权高进程显然种抢占式优先权调度算法
    更满足紧迫作业求常求较严格实时系统中性求较高批
    处理分时系统中
    2.高响应优先调度算法
    批处理系统中短作业优先算法种较算法足处长作业运行
    保证果作业引入前面述动态优先权作业优先级着等时
    间增加速率 a 提高长作业等定时间必然机会分配处理机该优先权
    变化规律描述:

    (1) 果作业等时间相求服务时间愈短优先权愈高该算法利
    短作业
    (2) 求服务时间相时作业优先权决定等时间等时间愈长优先权
    愈高实现先先服务 13042018 Page 96 of 283

    (3) 长作业作业优先级等时间增加提高等时间足够长时
    优先级便升高获处理机简言该算法顾短作业考虑作业
    达先次序会长作业长期服务该算法实现种较折衷然
    利该算法时进行调度前须先做响应计算会增加系统开销
    41223 基时间片轮转调度算法
    1 时间片轮转法
    早期时间片轮转法中系统绪进程先先服务原排成队列次调度
    时 CPU 分配队首进程令执行时间片时间片 ms 百 ms执行
    时间片完时计时器发出时钟中断请求调度程序便信号停止该进程执行
    送绪队列末尾然处理机分配绪队列中新队首进程时执
    行时间片样保证绪队列中进程定时间均获时间片处
    理机执行时间
    2 级反馈队列调度算法
    (1) 应设置绪队列队列赋予优先级第队列优先级高第二
    队列次余队列优先权逐降低该算法赋予队列中进程执行时间片
    相优先权愈高队列中进程规定执行时间片愈例第二队列
    时间片第队列时间片长倍……第 i+1 队列时间片第 i 队列时间片长

    (2) 新进程进入存首先放入第队列末尾 FCFS 原排队等调度
    轮该进程执行时该时间片完成便准备撤离系统果时间片结束时
    尚未完成调度程序便该进程转入第二队列末尾样 FCFS 原等调度执行果
    第二队列中运行时间片未完成次放入第三队列……
    长作业(进程)第队列次降第 n 队列第 n 队列便采取时间片轮转方式运行
    (3) 仅第队列空闲时调度程序调度第二队列中进程运行仅第 1~(i1)队列均空时
    会调度第 i 队列中进程运行果处理机正第 i 队列中某进程服务时新进程进入优
    先权较高队列(第 1~(i1)中队列)时新进程抢占正运行进程处理机
    调度程序正运行进程放回第 i 队列末尾处理机分配新高优先权进程
    级反馈队列调度算法中果规定第队列时间片略数机交互需处理时间
    时便够较满足种类型户需
    4123 什 CAS(较交换乐观锁机制锁旋)
    41231 概念特性
    CAS(Compare And SwapSet)较交换CAS 算法程样:包含 3 参数
    CAS(VEN)V 表示更新变量(存值)E 表示预期值(旧)N 表示新值仅 V 值等13042018 Page 97 of 283

    E 值时会 V 值设 N果 V 值 E 值说明已线程做更新
    前线程什做CAS 返回前 V 真实值
    CAS 操作抱着乐观态度进行(乐观锁)总认成功完成操作线程时
    CAS 操作变量时会胜出成功更新余均会失败失败线程会挂
    起仅告知失败允许次尝试然允许失败线程放弃操作基样原理
    CAS 操作没锁发现线程前线程干扰进行恰处理
    41232 原子包 javautilconcurrentatomic(锁旋)
    JDK15 原子包:javautilconcurrentatomic 包里面提供组原子类基特性
    线程环境线程时执行类实例包含方法时具排性某
    线程进入方法执行中指令时会线程断线程旋锁样直等
    该方法执行完成 JVM 等队列中选择线程进入种逻辑理解
    相 synchronized 种阻塞算法CAS 非阻塞算法种常见实现般 CPU 切
    换时间 CPU 指令集操作更加长 JUC 性提升代码:
    public class AtomicInteger extends Number implements javaioSerializable {
    private volatile int value
    public final int get() {
    return value
    }
    public final int getAndIncrement() {
    for () { CAS 旋直尝试直达成功
    int current get()
    int next current + 1
    if (compareAndSet(current next))
    return current
    }
    }
    public final boolean compareAndSet(int expect int update) {
    return unsafecompareAndSwapInt(this valueOffset expect update)
    }
    } 13042018 Page 98 of 283

    getAndIncrement 采 CAS 操作次存中读取数然数+1 结果进行
    CAS 操作果成功返回结果否重试直成功止 compareAndSet 利 JNI 完成
    CPU 指令操作

    41233 ABA 问题
    CAS 会导致ABA 问题CAS 算法实现重前提需取出存中某时刻数时
    刻较换时间差类会导致数变化
    说线程 one 存位置 V 中取出 A时候线程 two 存中取出 A
    two 进行操作变成 B然 two V 位置数变成 A时候线程 one 进行 CAS 操
    作发现存中然 A然 one 操作成功线程 one CAS 操作成功代表
    程没问题
    部分乐观锁实现通版号(version)方式解决 ABA 问题乐观锁次执行数修
    改操作时会带版号旦版号数版号致执行修改操作版
    号执行+1 操作否执行失败次操作版号会增加会出现 ABA 问
    题版号会增加会减少
    4124 什 AQS(抽象队列步器)
    AbstractQueuedSynchronizer 类名抽象队列式步器AQS 定义套线程访问
    享资源步器框架许步类实现赖常
    ReentrantLockSemaphoreCountDownLatch 13042018 Page 99 of 283


    维护 volatile int state(代表享资源) FIFO 线程等队列(线程争资源
    阻塞时会进入队列)里 volatile 核心关键词具体 volatile 语义述state
    访问方式三种
    getState()
    setState()
    compareAndSetState()
    AQS 定义两种资源享方式
    Exclusive 独占资源ReentrantLock
    Exclusive(独占线程执行 ReentrantLock)
    Share 享资源SemaphoreCountDownLatch
    Share(享线程时执行 SemaphoreCountDownLatch)
    AQS 框架具体资源获取释放方式交定义步器实现AQS 里定义
    接口具体资源获取交定义步器实现(通 state getsetCAS)没定义成
    abstract 独占模式实现 tryAcquiretryRelease 享模式实现
    tryAcquireSharedtryReleaseShared果定义成 abstract模式实现模
    式接口定义步器争享资源方式定义步器实现时需实
    现享资源 state 获取释放方式具体线程等队列维护(获取资源失败入队
    唤醒出队等)AQS 已顶层实现定义步器实现时实现种方法:
    1. isHeldExclusively():该线程否正独占资源 condition 需实现
    2. tryAcquire(int):独占方式尝试获取资源成功返回 true失败返回 false
    3. tryRelease(int):独占方式尝试释放资源成功返回 true失败返回 false
    4. tryAcquireShared(int):享方式尝试获取资源负数表示失败0 表示成功没剩余
    资源正数表示成功剩余资源
    5. tryReleaseShared(int):享方式尝试释放资源果释放允许唤醒续等结点返回
    true否返回 false 13042018 Page 100 of 283

    步器实现 ABS 核心(state 资源状态计数)
    步器实现 ABS 核心 ReentrantLock 例state 初始化 0表示未锁定状态A 线程
    lock()时会调 tryAcquire()独占该锁 state+1线程 tryAcquire()时会失
    败直 A 线程 unlock() state0(释放锁)止线程机会获取该锁然释放
    锁前A 线程重复获取锁(state 会累加)重入概念注意
    获取少次释放次样保证 state 回零态
    CountDownLatch 例务分 N 子线程执行state 初始化 N(注意 N
    线程数致) N 子线程行执行子线程执行完 countDown()次state
    会 CAS 减 1等子线程执行完( state0)会 unpark()调线程然调线程
    会 await()函数返回继续余动作
    ReentrantReadWriteLock 实现独占享两种方式
    般说定义步器独占方法享方式需实现 tryAcquire
    tryReleasetryAcquireSharedtryReleaseShared 中种 AQS 支持定义步器
    时实现独占享两种方式 ReentrantReadWriteLock
    13042018 Page 101 of 283

    5 JAVA 基础
    511 JAVA 异常分类处理
    5111 概念
    果某方法正常途径完成务通种路径退出方法种情况
    会抛出封装错误信息象时方法会立刻退出时返回值外调
    方法代码法继续执行异常处理机制会代码执行交异常处理器

    5112 异常分类
    Throwable Java 语言中错误异常超类层分 Error Exception
    Error
    1 Error 类指 java 运行时系统部错误资源耗错误应程序会抛出该类象果
    出现样错误告知户剩力程序安全终止
    Exception(RuntimeExceptionCheckedException)
    2 Exception 两分支运行时异常 RuntimeException
    CheckedException
    RuntimeException :NullPointerException ClassCastException 检查异常
    CheckedException IO 错误导致 IOExceptionSQLException RuntimeException
    Java 虚拟机正常运行期间抛出异常超类 果出现 RuntimeException
    定程序员错误 13042018 Page 102 of 283

    检查异常 CheckedException:般外部错误种异常发生编译阶段Java 编译器会强
    制程序捕获类异常会出现求段出现异常程序进行 try catch该类异常
    般包括方面:
    1 试图文件尾部读取数
    2 试图开错误格式 URL
    3 试图根定字符串查找 class 象字符串表示类存
    5113 异常处理方式
    遇问题进行具体处理继续抛调者 (throwthrows)
    抛出异常三种形式 throw throws种系统动抛异常
    public static void main(String[] args) {
    String s abc
    if(sequals(abc)) {
    throw new NumberFormatException()
    } else {
    Systemoutprintln(s)
    }
    }
    int div(int aint b) throws Exception{
    return ab}
    try catch 捕获异常针性处理方式
    5114 Throw throws 区:
    位置
    1 throws 函数面异常类 throw 函数面
    异常象
    功:
    2 throws 声明异常调者知道该功出现问题出预先处理方
    式throw 抛出具体问题象执行 throw功已结束跳转调者
    具体问题象抛调者说 throw 语句独立存时面定义语
    句执行
    3 throws 表示出现异常种性定会发生异常throw 抛出异常
    执行 throw 定抛出某种异常象 13042018 Page 103 of 283

    4 两者消极处理异常方式抛出者抛出异常会函数处理异
    常真正处理异常函数层调处理



    512 JAVA 反射
    5121 动态语言
    动态语言指程序运行时改变结构:新函数引进已函数删等结
    构变化常见 JavaScript 动态语言外 RubyPython 等属动态语言
    CC++属动态语言反射角度说 JAVA 属半动态语言
    5122 反射机制概念 (运行状态中知道类属性方法)

    Java 中反射机制指运行状态中意类够知道类属性方法
    意象够调意方法种动态获取信息动态调象方
    法功成 Java 语言反射机制
    5123 反射应场合
    编译时类型运行时类型
    Java 程序中许象运行会出现两种类型:编译时类型运行时类型 编译时类型
    声明象时实类型决定运行时类型实际赋值象类型决定 :
    Person pnew Student()
    中编译时类型 Person运行时类型 Student 13042018 Page 104 of 283

    编译时类型法获取具体方法
    程序运行时接收外部传入象该象编译时类型 Object程序需调
    该象运行时类型方法解决问题程序需运行时发现象类真实信息
    然果编译时根法预知该象类属类程序运行时信息发现该象
    类真实信息时必须反射
    5124 Java 反射 API
    反射 API 生成 JVM 中类接口象信息
    1 Class 类:反射核心类获取类属性方法等信息
    2 Field 类:Javalangreflec 包中类表示类成员变量获取设置类中属性

    3 Method 类: Javalangreflec 包中类表示类方法获取类中方法信息
    者执行方法
    4 Constructor 类: Javalangreflec 包中类表示类构造方法
    5125 反射步骤(获取 Class 象调象方法)
    1 获取想操作类 Class 象反射核心通 Class 象意调类方

    2 调 Class 类中方法反射阶段
    3 反射 API 操作信息
    5126 获取 Class 象 3 种方法

    调某象 getClass()方法
    Person pnew Person()
    Class clazzpgetClass()
    调某类 class 属性获取该类应 Class 象
    Class clazzPersonclass
    Class 类中 forName()静态方法(安全性)
    Class clazzClassforName(类全路径) (常)
    获想操作类 Class 象通 Class 类中方法获取查该类中方法
    属性
    获取 Person 类 Class 象
    Class clazzClassforName(reflectionPerson) 13042018 Page 105 of 283

    获取 Person 类方法信息
    Method[] methodclazzgetDeclaredMethods()
    for(Method mmethod){
    Systemoutprintln(mtoString())
    }
    获取 Person 类成员属性信息
    Field[] fieldclazzgetDeclaredFields()
    for(Field ffield){
    Systemoutprintln(ftoString())
    }
    获取 Person 类构造方法信息
    Constructor[] constructorclazzgetDeclaredConstructors()
    for(Constructor cconstructor){
    Systemoutprintln(ctoString())
    }

    5127 创建象两种方法
    Class 象 newInstance()
    1 Class 象 newInstance()方法创建该 Class 象应类实例种方法求
    该 Class 象应类默认空构造器
    调 Constructor 象 newInstance()
    2 先 Class 象获取指定 Constructor 象调 Constructor 象 newInstance()
    方法创建 Class 象应类实例通种方法选定构造方法创建实例
    获取 Person 类 Class 象
    Class clazzClassforName(reflectionPerson)
    newInstane 方法创建象
    Person p(Person) clazznewInstance()
    获取构造方法创建象
    Constructor cclazzgetDeclaredConstructor(StringclassStringclassintclass)
    创建象设置属性 13042018 Page 106 of 283

    Person p1(Person) cnewInstance(李四男20)

    513 JAVA 注解
    5131 概念
    Annotation(注解) Java 提供种元程序中元素关联信息元数(metadata)途径
    方法Annatation(注解)接口程序通反射获取指定程序中元素 Annotation
    象然通该 Annotation 象获取注解中元数信息
    5132 4 种标准元注解
    元注解作负责注解注解 Java50 定义 4 标准 metaannotation 类型
    提供 annotation 类型作说明
    @Target 修饰象范围
    @Target说明Annotation修饰象范围: Annotation packagestypes(类
    接口枚举Annotation 类型)类型成员(方法构造方法成员变量枚举值)方法参数
    变量(循环变量catch 参数) Annotation 类型声明中 target 更加明晰
    修饰目标
    @Retention 定义 保留时间长短
    Retention 定义该 Annotation 保留时间长短:表示需什级保存注解信息描
    述注解生命周期(:描述注解什范围效)取值(RetentionPoicy):
    SOURCE源文件中效(源文件保留)
    CLASS class 文件中效( class 保留)
    RUNTIME运行时效(运行时保留)
    @Documented 描述javadoc
    @ Documented 描述类型 annotation 应该作标注程序成员公 API
    例 javadoc 类工具文档化
    @Inherited 阐述某标注类型继承
    @Inherited 元注解标记注解@Inherited 阐述某标注类型继承果
    @Inherited 修饰 annotation 类型 class annotation 该
    class 子类 13042018 Page 107 of 283


    5133 注解处理器
    果没读取注解方法工作注解会注释更处注解程中
    重部分创建注解处理器Java SE5 扩展反射机制 API帮助程序员快速
    构造定义注解处理器面实现注解处理器
    1:*** 定义注解*
    @Target(ElementTypeFIELD)
    @Retention(RetentionPolicyRUNTIME)
    @Documented
    public @interface FruitProvider {
    **供应商编号*
    public int id() default 1
    *** 供应商名称*
    public String name() default 13042018 Page 108 of 283

    ** * 供应商址*
    public String address() default
    }
    2:注解
    public class Apple {
    @FruitProvider(id 1 name 陕西红富士集团 address 陕西省西安市延安路)
    private String appleProvider
    public void setAppleProvider(String appleProvider) {
    thisappleProvider appleProvider
    }
    public String getAppleProvider() {
    return appleProvider
    }
    }
    3:*********** 注解处理器 ***************
    public class FruitInfoUtil {
    public static void getFruitInfo(Class<> clazz) {
    String strFruitProvicer 供应商信息:
    Field[] fields clazzgetDeclaredFields()通反射获取处理注解
    for (Field field fields) {
    if (fieldisAnnotationPresent(FruitProviderclass)) {
    FruitProvider fruitProvider (FruitProvider) fieldgetAnnotation(FruitProviderclass)
    注解信息处理方
    strFruitProvicer 供应商编号: + fruitProviderid() + 供应商名称:
    + fruitProvidername() + 供应商址:+ fruitProvideraddress()
    Systemoutprintln(strFruitProvicer)
    }
    }
    }
    } 13042018 Page 109 of 283

    public class FruitRun {
    public static void main(String[] args) {
    FruitInfoUtilgetFruitInfo(Appleclass)
    ***********输出结果***************
    供应商编号:1 供应商名称:陕西红富士集团 供应商址:陕西省西安市延
    }
    }

    514 JAVA 部类
    Java 类中仅定义变量方法定义类样定义类部类称部类根
    定义方式部类分静态部类成员部类局部部类匿名部类四种
    5141 静态部类
    定义类部静态类静态部类
    public class Out {
    private static int a
    private int b
    public static class Inner {
    public void print() {
    Systemoutprintln(a)
    }
    }
    }
    1 静态部类访问外部类静态变量方法 private 样
    2 静态部类般类致定义静态变量方法构造方法等
    3 类静态部类需外部类静态部类方式示:OutInner inner
    new OutInner()innerprint()
    4 Java集合类HashMap部静态部类EntryEntryHashMap存放元素抽象
    HashMap 部维护 Entry 数组存放元素 Entry 者透明种外部
    类关系密切赖外部类实例静态部类 13042018 Page 110 of 283

    5142 成员部类

    定义类部非静态类成员部类成员部类定义静态方法变量(final 修饰
    外)成员部类非静态类初始化时候先初始化静态成员果允许成员
    部类定义静态变量成员部类静态变量初始化序歧义

    public class Out {
    private static int a
    private int b
    public class Inner {
    public void print() {
    Systemoutprintln(a)
    Systemoutprintln(b)
    }
    }
    }
    5143 局部部类(定义方法中类)
    定义方法中类局部类果类某方法中考虑局部类
    public class Out {
    private static int a
    private int b
    public void test(final int c) {
    final int d 1
    class Inner {
    public void print() {
    Systemoutprintln(c)
    }
    }
    }
    } 13042018 Page 111 of 283

    5144 匿名部类(继承父类者实现接口直接
    new 生成象引)
    匿名部类必须继承父类者实现接口然仅继承父类者实现
    接口时没 class 关键字匿名部类直接 new 生成象引

    public abstract class Bird {
    private String name
    public String getName() {
    return name
    }
    public void setName(String name) {
    thisname name
    }
    public abstract int fly()
    }
    public class Test {
    public void test(Bird bird){
    Systemoutprintln(birdgetName() + 够飞 + birdfly() + 米)
    }
    public static void main(String[] args) {
    Test test new Test()
    testtest(new Bird() {
    public int fly() {
    return 10000
    }
    public String getName() {
    return 雁
    }
    })
    }
    } 13042018 Page 112 of 283


    515 JAVA 泛型
    泛型提供编译时类型安全检测机制该机制允许程序员编译时检测非法类型泛型
    质参数化类型说操作数类型指定参数写排序方法
    够整型数组字符串数组甚类型数组进行排序 Java 泛型
    5151 泛型方法(
    写泛型方法该方法调时接收类型参数根传递泛型方法参数
    类型编译器适处理方法调
    泛型方法 printArray
    public static < E > void printArray( E[] inputArray )
    {
    for ( E element inputArray ){
    Systemoutprintf( s element )
    }
    }
    1 < extends T>表示该通配符代表类型 T 类型子类
    2 < super T>表示该通配符代表类型 T 类型父类
    5152 泛型类
    泛型类声明非泛型类声明类似类名面添加类型参数声明部分泛型方法
    样泛型类类型参数声明部分包含类型参数参数间逗号隔开泛型参数
    称类型变量指定泛型类型名称标识符接受参数
    类称参数化类参数化类型
    public class Box {
    private T t
    public void add(T t) {
    thist t
    }
    public T get() {
    return t
    } 13042018 Page 113 of 283

    5153 类型通配符
    类型通配符般 代具体类型参数例 List<> 逻辑
    ListList 等 List<具体类型实参>父类
    5154 类型擦
    Java 中泛型基编译器层次实现生成 Java 字节代码中包含泛
    型中类型信息泛型时候加类型参数会编译器编译时候掉
    程称类型擦代码中定义 List List等类型编译
    会变成 ListJVM List泛型附加类型信息 JVM 说见
    类型擦基程较简单首先找换类型参数具体类具体类般
    Object果指定类型参数界话界代码中类型参数换
    成具体类
    516 JAVA 序列化(创建复 Java 象)
    保存(持久化)象状态存者磁盘
    Java 台允许存中创建复 Java 象般情况 JVM 处运行时
    象存象生命周期会 JVM 生命周期更长现实应中
    求JVM停止运行够保存(持久化)指定象重新读取保存象
    Java 象序列化够帮助实现该功
    序列化象字节数组保持静态成员保存
    Java 象序列化保存象时会状态保存组字节未字节组装
    成象必须注意象序列化保存象状态成员变量知
    象序列化会关注类中静态变量
    序列化户远程象传输
    持久化象时会象序列化外 RMI(远程方法调)网络中传递象时
    会象序列化Java 序列化API处理象序列化提供标准机制该API简单易
    Serializable 实现序列化
    Java 中类实现 javaioSerializable 接口序列化
    ObjectOutputStream ObjectInputStream 象进行序列化反序列化
    通 ObjectOutputStream ObjectInputStream 象进行序列化反序列化
    writeObject readObject 定义序列化策略
    类中增加 writeObject readObject 方法实现定义序列化策略
    序列化 ID
    虚拟机否允许反序列化仅取决类路径功代码否致非常重点两
    类序列化 ID 否致( private static final long serialVersionUID) 13042018 Page 114 of 283

    序列化保存静态变量
    序列化子父类说明
    想父类象序列化需父类实现 Serializable 接口
    Transient 关键字阻止该变量序列化文件中
    1 变量声明前加 Transient 关键字阻止该变量序列化文件中反序列
    化transient 变量值设初始值 int 型 0象型 null
    2 服务器端客户端发送序列化象数象中数敏感密码字符串
    等希该密码字段序列化时进行加密客户端果拥解密密钥
    客户端进行反序列化时密码进行读取样定程度保证序列化象
    数安全
    517 JAVA 复制
    象引复制外象三种方式第种方式直接赋值第二种方式
    浅拷贝第三种深拷贝家知道哈三种概念实际拷贝象
    5171 直接赋值复制
    直接赋值 Java 中A a1 a2需理解实际复制引
    说 a1 a2 指象 a1 变化时候a2 里面成员变量会
    着变化
    5172 浅复制(复制引复制引象)
    创建新象然前象非静态字段复制该新象果字段值类型
    该字段执行复制果该字段引类型话复制引复制引象
    原始象副引象
    class Resume implements Cloneable{
    public Object clone() {
    try {
    return (Resume)superclone()
    } catch (Exception e) {
    eprintStackTrace()
    return null
    }
    }
    } 13042018 Page 115 of 283

    5173 深复制(复制象应象)
    深拷贝仅复制象身复制象包含引指象
    class Student implements Cloneable {
    String name
    int age
    Professor p
    Student(String name int age Professor p) {
    thisname name
    thisage age
    thisp p
    }
    public Object clone() {
    Student o null
    try {
    o (Student) superclone()
    } catch (CloneNotSupportedException e) {
    Systemoutprintln(etoString())
    }
    op (Professor) pclone()
    return o
    }
    }
    5174 序列化(深 clone 中实现)
    Java 语言里深复制象常常先象实现 Serializable 接口然
    象(实际象拷贝)写流里流里读出便重建象 13042018 Page 116 of 283

    6 Spring 原理
    全面企业应开发站式解决方案贯穿表现层业务层持久层 Spring
    然框架缝整合
    611 Spring 特点
    6111 轻量级
    6112 控制反转
    6113 面切面
    6114 容器
    6115 框架集合
    13042018 Page 117 of 283

    612 Spring 核心组件

    613 Spring 常模块
    13042018 Page 118 of 283

    614 Spring 包


    615 Spring 常注解
    bean 注入装配方式种通 xmlget set 方式构造函数者注解等简单易
    方式 Spring 注解Spring 提供量注解方式 13042018 Page 119 of 283


    616 Spring 第三方结合
    13042018 Page 120 of 283

    617 Spring IOC 原理
    6171 概念
    Spring 通配置文件描述 Bean Bean 间赖关系利 Java 语言反射功实例化
    Bean 建立 Bean 间赖关系 Spring IoC 容器完成底层工作基础提供
    Bean 实例缓存生命周期理 Bean 实例代理事件发布资源装载等高级服务
    6172 Spring 容器高层视图
    Spring 启动时读取应程序提供 Bean 配置信息 Spring 容器中生成份相应 Bean 配
    置注册表然根张注册表实例化 Bean装配 Bean 间赖关系层应提供准
    备绪运行环境中 Bean 缓存池 HashMap 实现


    6173 IOC 容器实现
    BeanFactory框架基础设施
    BeanFactory Spring 框架基础设施面 Spring 身ApplicationContext 面
    Spring 框架开发者应场合直接 ApplicationContext 非底层
    BeanFactory 13042018 Page 121 of 283



    11111 BeanDefinitionRegistry 注册表
    1 Spring 配置文件中节点元素 Spring 容器里通 BeanDefinition 象表示
    描述 Bean 配置信息 BeanDefinitionRegistry 接口提供容器手工注册
    BeanDefinition 象方法
    11112 BeanFactory 顶层接口
    2 位类结构树顶端 方法 getBean(String beanName)该方法容器中
    返回特定名称 BeanBeanFactory 功通接口断扩展:
    11113 ListableBeanFactory
    3 该接口定义访问容器中 Bean 基信息干方法查 Bean 数获取某类型
    Bean 配置名查容器中否包括某 Bean 等方法
    11114 HierarchicalBeanFactory 父子级联
    4 父子级联 IoC 容器接口子容器通接口方法访问父容器 通
    HierarchicalBeanFactory 接口 Spring IoC 容器建立父子层级关联容器体系子
    容器访问父容器中 Bean父容器访问子容器 BeanSpring 父子容器实
    现功 Spring MVC 中展现层 Bean 位子容器中业务层持久
    层 Bean 位父容器中样展现层 Bean 引业务层持久层 Bean业务
    层持久层 Bean 展现层 Bean
    11115 ConfigurableBeanFactory
    5 重接口增强 IoC 容器定制性定义设置类装载器属性编辑器容
    器初始化置处理器等方法 13042018 Page 122 of 283

    11116 AutowireCapableBeanFactory 动装配
    6 定义容器中 Bean 某种规(名字匹配类型匹配等)进行动装配方法
    11117 SingletonBeanRegistry 运行期间注册单例 Bean
    7 定义允许运行期间容器注册单实例 Bean 方法单实例( singleton) Bean
    说BeanFactory 会缓存 Bean 实例第二次 getBean() 获取 Bean 时直接
    IoC 容器缓存中获取 Bean 实例Spring DefaultSingletonBeanRegistry 类中提供
    缓存单实例 Bean 缓存器 HashMap 实现缓存器单实例 Bean
    beanName 键保存 HashMap 中
    11118 赖日志框框
    8 初始化 BeanFactory 时必须提供种日志框架 Log4J 类路径提
    供 Log4J 配置文件样启动 Spring 容器会报错
    ApplicationContext 面开发应
    ApplicationContext BeanFactory 派生提供更面实际应功
    ApplicationContext 继承 HierarchicalBeanFactory ListableBeanFactory 接口基础
    通接口扩展 BeanFactory 功:

    1 ClassPathXmlApplicationContext:默认类路径加载配置文件 13042018 Page 123 of 283

    2 FileSystemXmlApplicationContext:默认文件系统中装载配置文件
    3 ApplicationEventPublisher:容器拥发布应文事件功包括容器启动事
    件关闭事件等
    4 MessageSource:应提供 i18n 国际化消息访问功
    5 ResourcePatternResolver : ApplicationContext 实现类实现类似
    PathMatchingResourcePatternResolver 功通带前缀 Ant 风格资源文
    件路径装载 Spring 配置文件
    6 LifeCycle:该接口 Spring 20 加入该接口提供 start() stop()两方法
    控制异步处理程具体时该接口时 ApplicationContext 实现具体
    Bean 实现 ApplicationContext 会 startstop 信息传递容器中实现该接
    口 Bean达理控制 JMX务调度等目
    7 ConfigurableApplicationContext 扩展 ApplicationContext新增加两
    方法: refresh() close() ApplicationContext 具启动刷新关闭应
    文力应文关闭情况调 refresh()启动应文已启动
    状态调 refresh()清缓存重新装载配置信息调 close()关闭应

    WebApplication 体系架构
    WebApplicationContext 专门 Web 应准备允许相 Web 根目录
    路径中装载配置文件完成初始化工作 WebApplicationContext 中获
    ServletContext 引整 Web 应文象作属性放置 ServletContext
    中便 Web 应环境访问 Spring 应文

    6174 Spring Bean 作域
    Spring 3 中 Bean 定义 5 中作域分 singleton(单例)prototype(原型)
    requestsession global session5 种作域说明:
    singleton:单例模式(线程安全)
    1 singleton:单例模式Spring IoC 容器中会存享 Bean 实例少
    Bean 引始终指象该模式线程安全Singleton 作域
    Spring 中缺省作域显示 Bean 定义 singleton 模式配置:
    13042018 Page 124 of 283

    prototype原型模式次时创建
    2 prototype原型模式次通 Spring 容器获取 prototype 定义 bean 时容器创建
    新 Bean 实例 Bean 实例属性状态 singleton 全局
    象根验状态bean prototype作域状态beansingleton
    作域
    Request:次 request 实例
    3 request:次 Http 请求中容器会返回该 Bean 实例 Http 请求会
    产生新 Bean该 bean 仅前 Http Request 效前 Http 请求结束该 bean
    实例会销毁

    session
    4 session:次 Http Session 中容器会返回该 Bean 实例 Session 请
    求会创建新实例该 bean 实例仅前 Session 效 Http 请求相次
    session 请求创建新实例实例间享属性实例仅 session 请求
    效请求结束实例销毁

    global Session
    5 global Session:全局 Http Session 中容器会返回该 Bean 实例仅
    portlet context 时效
    6175 Spring Bean 生命周期
    实例化
    1 实例化 Bean常说 new
    IOC 赖注入
    2 Spring 文实例化 Bean 进行配置 IOC 注入
    setBeanName 实现
    3 果 Bean 已实现 BeanNameAware 接口会调实现 setBeanName(String)
    方法处传递 Spring 配置文件中 Bean id 值
    BeanFactoryAware 实现
    4 果 Bean 已实现 BeanFactoryAware 接口会调实现 setBeanFactory
    setBeanFactory(BeanFactory)传递 Spring 工厂身(方式获取 Bean
    需 Spring 配置文件中配置普通 Bean ) 13042018 Page 125 of 283

    ApplicationContextAware 实现
    5 果 Bean 已实现 ApplicationContextAware 接口会调
    setApplicationContext(ApplicationContext)方法传入 Spring 文(样方式
    实现步骤 4 容 4 更 ApplicationContext BeanFactory 子接
    口更实现方法)
    postProcessBeforeInitialization 接口实现初始化预处理
    6 果 Bean 关联 BeanPostProcessor 接口会调
    postProcessBeforeInitialization(Object obj String s)方法BeanPostProcessor 常
    作 Bean 容更改 Bean 初始化结束时调方法应
    存缓存技术
    initmethod
    7 果 Bean Spring 配置文件中配置 initmethod 属性会动调配置初始化方法
    postProcessAfterInitialization
    8 果 Bean 关联 BeanPostProcessor 接口会调
    postProcessAfterInitialization(Object obj String s)方法
    注:工作完成应 Bean Bean Singleton
    般情况调 id Bean 会容址相实例然 Spring 配置文件中
    配置非 Singleton
    Destroy 期动清理阶段
    9 Bean 需时会清理阶段果 Bean 实现 DisposableBean 接口会调
    实现 destroy()方法
    destroymethod 配置清理
    10 果 Bean Spring 配置中配置 destroymethod 属性会动调配置
    销毁方法 13042018 Page 126 of 283


    11 bean 标签两重属性(initmethod destroymethod)定制
    初始化注销方法相应注解(@PostConstruct @PreDestroy)

    6176 Spring 赖注入四种方式
    构造器注入

    *带参数方便利构造器进行注入*
    public CatDaoImpl(String message){
    this message message
    }


    13042018 Page 127 of 283

    setter 方法注入
    public class Id {
    private int id
    public int getId() { return id }
    public void setId(int id) { thisid id }
    }

    静态工厂注入
    静态工厂顾名思义通调静态工厂方法获取需象 spring 理
    象直接通工程类静态方法()获取象然通 spring 注入形式获
    取:
    public class DaoFactory { 静态工厂
    public static final FactoryDao getStaticFactoryDaoImpl(){
    return new StaticFacotryDaoImpl()
    }
    }
    public class SpringAction {
    private FactoryDao staticFactoryDao 注入象
    注入象 set 方法
    public void setStaticFactoryDao(FactoryDao staticFactoryDao) {
    thisstaticFactoryDao staticFactoryDao
    }
    }
    factorymethodgetStaticFactoryDaoImpl指定调工厂方法

    <静态工厂方法注入象应面配置文件>


    <处获取象方式工厂类中获取静态方法>
    factorymethodgetStaticFactoryDaoImpl>

    实例工厂
    实例工厂意思获取象实例方法静态需首先 new 工厂类调普通
    实例方法:
    public class DaoFactory { 实例工厂
    public FactoryDao getFactoryDaoImpl(){
    return new FactoryDaoImpl() 13042018 Page 128 of 283

    }
    }
    public class SpringAction {
    private FactoryDao factoryDao 注入象
    public void setFactoryDao(FactoryDao factoryDao) {
    thisfactoryDao factoryDao
    }
    }

    <实例工厂方法注入象应面配置文件>


    <处获取象方式工厂类中获取实例方法>

    factorymethodgetFactoryDaoImpl>

    6177 5 种方式动装配
    Spring 装配包括手动装配动装配手动装配基 xml 装配构造方法setter 方法等
    动装配五种动装配方式指导 Spring 容器动装配方式进行赖注入
    1 no:默认方式进行动装配通显式设置 ref 属性进行装配
    2 byName:通参数名 动装配Spring 容器配置文件中发现 bean autowire 属性设
    置成 byname容器试图匹配装配该 bean 属性具相名字 bean
    3 byType:通参数类型动装配Spring 容器配置文件中发现 bean autowire 属性
    设置成 byType容器试图匹配装配该 bean 属性具相类型 bean果
    bean 符合条件抛出错误
    4 constructor:方式类似 byType 提供构造器参数果没确定带参数
    构造器参数类型会抛出异常
    5 autodetect:首先尝试 constructor 动装配果法工作 byType 方式 13042018 Page 129 of 283

    618 Spring APO 原理
    6181 概念
    横切技术剖解开封装象部影响类公行封装重模块
    命名Aspect切面谓切面简单说业务关业务模块
    调逻辑责封装起便减少系统重复代码降低模块间耦合度利未
    操作性维护性
    横切技术AOP 软件系统分两部分:核心关注点横切关注点业务处理流
    程核心关注点关系部分横切关注点横切关注点特点常发生
    核心关注点处处基相似权限认证日志事物AOP 作分离系统
    中种关注点核心关注点横切关注点分离开
    AOP 应场景:
    1 Authentication 权限
    2 Caching 缓存
    3 Context passing 容传递
    4 Error handling 错误处理
    5 Lazy loading 懒加载
    6 Debugging 调试
    7 logging tracing profiling and monitoring 记录踪 优化 校准
    8 Performance optimization 性优化
    9 Persistence 持久化
    10 Resource pooling 资源池
    11 Synchronization 步
    12 Transactions 事务
    6182 AOP 核心概念
    1切面(aspect):类物体特征抽象切面横切关注点抽象
    2横切关注点:方法进行拦截拦截处理关注点称横切关注点
    3连接点(joinpoint):拦截点 Spring 支持方法类型连接点 Spring
    中连接点指拦截方法实际连接点字段者构造器
    4切入点(pointcut):连接点进行拦截定义
    5通知(advice):谓通知指指拦截连接点执行代码通知分前置置
    异常终环绕通知五类
    6目标象:代理目标象
    7织入(weave):切面应目标象导致代理象创建程 13042018 Page 130 of 283

    8引入(introduction):修改代码前提引入运行期类动态添加方法
    字段
    参考:httpssegmentfaultcoma1190000007469968

    6181 AOP 两种代理方式
    Spring 提供两种方式生成代理象 JDKProxy Cglib具体种方式生成
    AopProxyFactory 根 AdvisedSupport 象配置决定默认策略果目标类接口
    JDK 动态代理技术否 Cglib 生成代理
    JDK 动态接口代理
    1 JDK 动态代理涉 javalangreflect 包中两类:Proxy InvocationHandler
    InvocationHandler 接口通实现该接口定义横切逻辑通反射机制调目标类
    代码动态横切逻辑业务逻辑编制起Proxy 利 InvocationHandler 动态创建
    符合某接口实例生成目标类代理象 13042018 Page 131 of 283

    CGLib 动态代理
    2 :CGLib 全称 Code Generation Library强高性高质量代码生成类库
    运行期扩展 Java 类实现 Java 接口CGLib 封装 asm运行期动态生成新
    class JDK 动态代理相较:JDK 创建代理限制接口创建代理实例
    没通接口定义业务方法类通 CGLib 创建动态代理
    6182 实现原理
    @Aspect
    public class TransactionDemo {
    @Pointcut(valueexecution(* comyangxincoreservice***()))
    public void point(){
    }
    @Before(valuepoint())
    public void before(){
    Systemoutprintln(transaction begin)
    }
    @AfterReturning(value point())
    public void after(){
    Systemoutprintln(transaction commit)
    }
    @Around(point())
    public void around(ProceedingJoinPoint joinPoint) throws Throwable{
    Systemoutprintln(transaction begin)
    joinPointproceed()
    Systemoutprintln(transaction commit)
    }
    } 13042018 Page 132 of 283


    619 Spring MVC 原理
    Spring 模型视图控制器(MVC)框架围绕 DispatcherServlet 设计 Servlet
    会请求分发处理器支持配置处理器映射视图渲染化时区题渲染
    等甚支持文件传
    6191 MVC 流程
    13042018 Page 133 of 283

    Http 请求 DispatcherServlet
    (1) 客户端请求提交 DispatcherServlet
    HandlerMapping 寻找处理器
    (2) DispatcherServlet 控制器查询 HandlerMapping找处理请求
    Controller
    调处理器 Controller
    (3) DispatcherServlet 请求提交 Controller
    Controller 调业务逻辑处理返回 ModelAndView
    (4)(5)调业务处理返回结果:Controller 调业务逻辑处理返回 ModelAndView
    DispatcherServlet 查询 ModelAndView
    (6)(7)处理视图映射返回模型: DispatcherServlet 查询 ViewResoler 视图解析器
    找 ModelAndView 指定视图
    ModelAndView 反馈浏览器 HTTP
    (8) Http 响应:视图负责结果显示客户端
    6191 MVC 常注解
    13042018 Page 134 of 283

    6110 Spring Boot 原理
    Spring Boot Pivotal 团队提供全新框架设计目简化新 Spring 应初始搭
    建开发程该框架特定方式进行配置开发员需定义样板化
    配置通种方式Spring Boot 致力蓬勃发展快速应开发领域(rapid application
    development)成领导者特点:
    1 创建独立 Spring 应程序
    2 嵌入 Tomcat需部署 WAR 文件
    3 简化 Maven 配置
    4 动配置 Spring
    5 提供生产绪型功指标健康检查外部配置
    6 绝没代码生成 XML 没求配置 [1]
    6111 JPA 原理
    61111 事务
    事务计算机应中缺组件模型保证户操作原子性 ( Atomicity )致性
    ( Consistency )隔离性 ( Isolation ) 持久性 ( Durabilily )
    61112 事务
    紧密赖底层资源理器(例数库连接 )事务处理局限前事务资源种事务处理
    方式存应服务器赖部署灵活法支持数源分布式事务数库连
    接中事务示例:
    public void transferAccount() {
    Connection conn null
    Statement stmt null
    try{
    conn getDataSource()getConnection()
    动提交设置 false设置 true 数库会次数更新认定事务动提交
    connsetAutoCommit(false)
    stmt conncreateStatement()
    A 账户中金额减少 500
    stmtexecute(update t_account set amount amount 500 where account_id 'A') 13042018 Page 135 of 283

    B 账户中金额增加 500
    stmtexecute(update t_account set amount amount + 500 where account_id 'B')
    提交事务
    conncommit()
    事务提交:转账两步操作时成功
    } catch(SQLException sqle){
    发生异常回滚事务中操做
    connrollback()
    事务回滚:转账两步操作完全撤销
    stmtclose()
    connclose()
    }
    }
    61111 分布式事务

    Java 事务编程接口(JTA:Java Transaction API) Java 事务服务 (JTSJava Transaction
    Service) J2EE 台提供分布式事务服务分布式事务(Distributed Transaction)包括事务
    理器(Transaction Manager)支持 XA 协议资源理器 ( Resource
    Manager )资源理器做意类型持久化数存储事务理器承担着事务
    参单元协调控制
    public void transferAccount() {
    UserTransaction userTx null
    Connection connA null Statement stmtA null
    Connection connB null Statement stmtB null
    try{
    获 Transaction 理象
    userTx (UserTransaction)getContext()lookup(javacompUserTransaction)
    connA getDataSourceA()getConnection() 数库 A 中取数库连接
    connB getDataSourceB()getConnection() 数库 B 中取数库连接
    userTxbegin() 启动事务
    stmtA connAcreateStatement() A 账户中金额减少 500
    stmtAexecute(update t_account set amount amount 500 where account_id 'A')
    B 账户中金额增加 500
    stmtB connBcreateStatement() 13042018 Page 136 of 283

    stmtBexecute(update t_account set amount amount + 500 where account_id 'B')
    userTxcommit() 提交事务
    事务提交:转账两步操作时成功(数库 A 数库 B 中数时更新)
    } catch(SQLException sqle){
    发生异常回滚事务中操
    userTxrollback() 事务回滚:数库 A 数库 B 中数更新时撤销
    } catch(Exception ne){ }
    }
    61111 两阶段提交
    两阶段提交保证分布式事务原子性:结点全做全做谓两阶段
    指:第阶段:准备阶段第二阶段:提交阶段

    1 准备阶段
    事务协调者(事务理器)参者(资源理器)发送 Prepare 消息参者直接返回
    失败(权限验证失败)执行事务写 redo undo 日志提交达
    种万事俱备欠东风状态
    2 提交阶段:
    果协调者收参者失败消息者超时直接参者发送回滚(Rollback)消息否
    发送提交(Commit)消息参者根协调者指令执行提交者回滚操作释放事务处理
    程中锁资源(注意必须阶段释放锁资源) 13042018 Page 137 of 283

    提交分成两阶段进行目明确晚提交事务事务提交前完成
    完成工作







    6112 Mybatis 缓存
    Mybatis 中级缓存二级缓存默认情况级缓存开启关闭级缓存
    指 SqlSession 级缓存 SqlSession 中进行相 SQL 语句查询时第二次
    查询会数库查询直接缓存中获取级缓存缓存 1024 条 SQL二级缓存
    指跨 SqlSession 缓存 mapper 级缓存 mapper 级缓存
    sqlsession 享 13042018 Page 138 of 283


    61121 Mybatis 级缓存原理(sqlsession 级)
    第次发出查询 sqlsql 查询结果写入 sqlsession 级缓存中缓存数结构
    map
    key:MapperID+offset+limit+Sql+入参
    value:户信息
    sqlsession 次发出相 sql缓存中取出数果两次中间出现 commit 操作
    (修改添加删) sqlsession 中级缓存区域全部清空次缓存中查询
    数库查询数库查询写入缓存
    61122 二级缓存原理(mapper 基)
    二级缓存范围 mapper 级(mapper 命名空间)mapper 命名空间单位创建缓
    存数结构结构 mapmybatis 二级缓存通 CacheExecutor 实现CacheExecutor13042018 Page 139 of 283

    实 Executor 代理象查询操作 CacheExecutor 中会先匹配缓存中否存
    存查询数库
    key:MapperID+offset+limit+Sql+入参
    具体需配置:
    1 Mybatis 全局配置中启二级缓存配置
    2 应 Mapperxml 中配置 cache 节点
    3 应 select 查询节点中添加 useCachetrue

    6113 Tomcat 架构
    httpwwwimportnewcom21112html
    13042018 Page 140 of 283

    7 微服务
    711 服务注册发现
    服务注册维护登记簿理系统服务址新服务启动会登记
    簿交址信息服务赖方直接登记簿 Service Provider 址行服
    务注册工具非常 ZooKeeperConsulEtcd Netflix 家 eureka 等服务注册两种
    形式:客户端注册第三方注册
    7111 客户端注册(zookeeper)
    客户端注册服务身负责注册注销工作服务启动注册中心注册身服务
    线时注销期间需注册中心保持心跳心跳定客户端做注册中心
    负责(程探活)种方式缺点注册工作服务耦合起语言实现
    套注册逻辑

    7112 第三方注册(独立服务 Registrar)
    第三方注册独立服务Registrar负责注册注销服务启动某种方式通知Registrar
    然 Registrar 负责注册中心发起注册工作时注册中心维护服务间心跳服务
    时注册中心注销服务种方式缺点 Registrar 必须高系统否注册
    工作没法进展 13042018 Page 141 of 283


    7113 客户端发现
    客户端发现指客户端负责查询服务址负载均衡工作种方式方便直接
    方便做负载均衡者旦发现某服务立换外非常直接缺点
    语言时重复工作语言实现相逻辑
    13042018 Page 142 of 283

    7114 服务端发现
    服务端发现需额外 Router 服务请求先 Router然 Router 负责查询服务负载均衡
    种方式然没客户端发现缺点缺点保证 Router 高

    7115 Consul
    7116 Eureka
    7117 SmartStack
    7118 Etcd


    712 API 网关
    API Gateway 服务器说进入系统唯节点面象设计模式中
    Facade 模式API Gateway 封装部系统架构提供 API 客户端
    功授权监控负载均衡缓存请求分片理静态响应处理等图展示
    适应前架构 API Gateway 13042018 Page 143 of 283


    API Gateway 负责请求转发合成协议转换客户端请求先 API Gateway
    然路请求应微服务API Gateway 常通调微服务处理请求
    聚合服务结果 web 协议部非 Web 友型协议间进行转换
    HTTP 协议WebSocket 协议
    7121 请求转发
    服务转发客户端请求安装微服务负载转发服务
    7122 响应合
    业务需调服务接口完成工作合成次调外统提供服务
    7123 协议转换
    重点支持 SOAPJMSRest 间协议转换

    7124 数转换
    重点支持 XML Json 间报文格式转换力(选) 13042018 Page 144 of 283

    7125 安全认证
    1 基 Token 客户端访问控制安全策略
    2 传输数报文加密服务端解密需客户端独立 SDK 代理包
    3 基 Https 传输加密客户端服务端数字证书支持
    4 基 OAuth20 服务安全认证(授权码客户端密码模式等)
    713 配置中心
    配置中心般作系统参数配置需满足求:高效获取实时感知分布式访

    7131 zookeeper 配置中心
    实现架构图示采取数加载存方式解决高效获取问题助 zookeeper 节点
    监听机制实现实时感知

    7132 配置中心数分类


    714 事件调度(kafka)
    消息服务事件统调度常 kafka activemq 等
    715 服务踪(startersleuth)
    着微服务数量断增长需踪请求微服务微服务传播程 Spring
    Cloud Sleuth 正解决问题日志中引入唯 ID保证微服务调间致性
    样踪某请求微服务传递 13042018 Page 145 of 283


    1 实现请求踪请求发送分布式系统入口端点时需服务踪框架该请求
    创建唯踪标识时分布式系统部流转时候框架始终保持传递该唯标
    识直返回请求方止唯标识前文中提 Trace ID通 Trace ID 记
    录请求程日志关联起
    2 统计处理单元时间延迟请求达服务组件时处理逻辑达某状态
    时通唯标识标记开始具体程结束该标识前文中提
    Span ID Span 说必须开始结束两节点通记录开始 Span 结
    束 Span 时间戳统计出该 Span 时间延迟时间戳记录外包含
    元数:事件名称请求信息等
    3 快速入门示例中轻松实现日志级踪信息接入完全功springcloud
    startersleuth 组件实现 Spring Boot 应中通工程中引入 springcloud
    startersleuth 赖 会动前应构建起通信通道踪机制:
    通诸 RabbitMQKafka(者 Spring Cloud Stream 绑定器实现消息
    中间件)传递请求
    通 Zuul 代理传递请求
    通 RestTemplate 发起请求
    716 服务熔断(Hystrix)
    微服务架构中通常会服务层调基础服务障会导致级联障进造成整
    系统情况种现象称服务雪崩效应服务雪崩效应种服务提供者
    导致服务消费者逐渐放程
    熔断器原理简单电力载保护器实现快速失败果段时间侦测
    许类似错误会强迫调快速失败访问远程服务器防止应程序
    断尝试执行会失败操作应程序继续执行等修正错误者浪费 CPU
    时间等长时间超时产生熔断器应程序够诊断错误否已修正果已
    修正应程序会次尝试调操作
    13042018 Page 146 of 283

    7161 Hystrix 断路器机制
    断路器理解 Hystrix Command 请求端服务失败数量超定例(默认 50) 断路器会
    切换开路状态(Open) 时请求会直接失败会发送端服务 断路器保持开路状态
    段时间(默认 5 秒) 动切换半开路状态(HALFOPEN) 时会判断次请求返回情况
    果请求成功 断路器切回闭路状态(CLOSED) 否重新切换开路状态(OPEN) Hystrix 断路器
    家庭电路中保险丝 旦端服务 断路器会直接切断请求链 避免发送量效
    请求影响系统吞吐量 断路器检测恢复力
    717 API 理
    SwaggerAPI 理工具



    13042018 Page 147 of 283

    8 Netty RPC
    811 Netty 原理
    Netty 高性异步事件驱动 NIO 框架基 JAVA NIO 提供 API 实现提供
    TCPUDP 文件传输支持作异步 NIO 框架Netty IO 操作异步非阻塞
    通 FutureListener 机制户方便动获取者通通知机制获 IO 操作结果

    812 Netty 高性
    IO 编程程中需时处理客户端接入请求时利线程者 IO 路复技术
    进行处理IO 路复技术通 IO 阻塞复 select 阻塞系统
    单线程情况时处理客户端请求传统线程进程模型IO 路复
    优势系统开销系统需创建新额外进程者线程需维护进程线程
    运行降低系统维护工作量节省系统资源
    Socket 类 ServerSocket 类相应NIO 提供 SocketChannel ServerSocketChannel
    两种套接字通道实现
    8121 路复通讯方式
    Netty 架构 Reactor 模式设计实现服务端通信序列图:

    客户端通信序列图: 13042018 Page 148 of 283



    Netty IO 线程 NioEventLoop 聚合路复器 Selector时发处理成百千
    客户端 Channel读写操作非阻塞充分提升 IO 线程运行效率避免
    频繁 IO 阻塞导致线程挂起
    8121 异步通讯 NIO
    Netty 采异步通信模式 IO 线程发处理 N 客户端连接读写操作根
    解决传统步阻塞 IO 连接线程模型架构性弹性伸缩力性极
    提升 13042018 Page 149 of 283

    8122 零拷贝(DIRECT BUFFERS 堆外直接存)
    1 Netty 接收发送 ByteBuffer 采 DIRECT BUFFERS堆外直接存进行 Socket 读写
    需进行字节缓区二次拷贝果传统堆存(HEAP BUFFERS)进行 Socket 读写
    JVM 会堆存 Buffer 拷贝份直接存中然写入 Socket 中相堆外直接存
    消息发送程中次缓区存拷贝
    2 Netty 提供组合 Buffer 象聚合 ByteBuffer 象户操作 Buffer 样
    方便组合 Buffer 进行操作避免传统通存拷贝方式 Buffer 合成
    Buffer
    3 Netty 文件传输采transferTo 方法直接文件缓区数发送目标 Channel
    避免传统通循环 write 方式导致存拷贝问题
    8123 存池(基存池缓区重机制)
    着 JVM 虚拟机 JIT 时编译技术发展象分配回收非常轻量级工作缓
    区 Buffer情况稍特堆外直接存分配回收件耗时操作
    量重缓区Netty 提供基存池缓区重机制
    8124 高效 Reactor 线程模型
    常 Reactor 线程模型三种Reactor 单线程模型 Reactor 线程模型 Reactor 线程模

    Reactor 单线程模型
    Reactor 单线程模型指 IO 操作 NIO 线程面完成NIO 线程职责:
    1) 作 NIO 服务端接收客户端 TCP 连接
    2) 作 NIO 客户端服务端发起 TCP 连接
    3) 读取通信端请求者应答消息
    4) 通信端发送消息请求者应答消息
    13042018 Page 150 of 283

    Reactor 模式异步非阻塞 IO IO 操作会导致阻塞理线程独
    立处理 IO 相关操作架构层面 NIO 线程确实完成承担职责例通
    Acceptor 接收客户端 TCP 连接请求消息链路建立成功通 Dispatch 应 ByteBuffer
    派发指定 Handler 进行消息解码户 Handler 通 NIO 线程消息发送客户端
    Reactor 线程模型
    Rector 线程模型单线程模型区组 NIO 线程处理 IO 操作 专门
    NIO 线程Acceptor 线程监听服务端接收客户端 TCP 连接请求 网络 IO 操作读写
    等 NIO 线程池负责线程池采标准 JDK 线程池实现包含务队列 N
    线程 NIO 线程负责消息读取解码编码发送

    Reactor 线程模型
    服务端接收客户端连接 1 单独 NIO 线程独立 NIO 线程池
    Acceptor 接收客户端 TCP 连接请求处理完成(包含接入认证等)新创建
    SocketChannel 注册 IO 线程池(sub reactor 线程池)某 IO 线程负责
    SocketChannel 读写编解码工作Acceptor 线程池仅仅客户端登陆握手安全
    认证旦链路建立成功链路注册端 subReactor 线程池 IO 线程 IO 线程负
    责续 IO 操作 13042018 Page 151 of 283


    8125 锁设计线程绑定
    Netty 采串行锁化设计 IO 线程部进行串行操作避免线程竞争导致性降
    表面串行化设计似 CPU 利率高发程度够通调整 NIO 线程池线程
    参数时启动串行化线程行运行种局部锁化串行线程设计相队列
    工作线程模型性更优

    Netty NioEventLoop 读取消息直接调 ChannelPipeline
    fireChannelRead(Object msg)户动切换线程直会 NioEventLoop 调
    户 Handler期间进行线程切换种串行化处理方式避免线程操作导致锁
    竞争性角度优
    8126 高性序列化框架
    Netty 默认提供 Google Protobuf 支持通扩展 Netty 编解码接口户实现
    高性序列化框架例 Thrift 压缩二进制编解码框架
    1 SO_RCVBUF SO_SNDBUF:通常建议值 128K 者 256K 13042018 Page 152 of 283

    包封包防止网络阻塞
    2 SO_TCPNODELAY:NAGLE 算法通缓区封包动相连组成较封包阻止量
    封包发送阻塞网络提高网络应效率时延敏感应场景需关闭该优化算

    软中断 Hash 值 CPU 绑定
    3 软中断:开启 RPS 实现软中断提升网络吞吐量RPS 根数包源址目址
    目源端口计算出 hash 值然根 hash 值选择软中断运行 cpu层
    说连接 cpu 绑定通 hash 值均衡软中断 cpu 提升
    网络行处理性
    813 Netty RPC 实现
    8131 概念
    RPC Remote Procedure Call(远程程调)调远程计算机服务调服务
    样RPC 解耦系统 WebService 种基 Http 协议 RPC RPC 整体框架


    8132 关键技术

    1 服务发布订阅:服务端 Zookeeper 注册服务址客户端 Zookeeper 获取服务

    2 通信: Netty 作通信框架
    3 Spring: Spring 配置服务加载 Bean扫描注解
    4 动态代理:客户端代理模式透明化服务调
    5 消息编解码: Protostuff 序列化反序列化消息
    8133 核心流程

    1 服务消费方(client)调调方式调服务 13042018 Page 153 of 283

    2 client stub 接收调负责方法参数等组装成够进行网络传输消息体
    3 client stub 找服务址消息发送服务端
    4 server stub 收消息进行解码
    5 server stub 根解码结果调服务
    6 服务执行结果返回 server stub
    7 server stub 返回结果包成消息发送消费方
    8 client stub 接收消息进行解码
    9 服务消费方终结果
    RPC 目标 2~8 步骤封装起户细节透明JAVA 般动态代
    理方式实现远程调

    8131 消息编解码
    息数结构(接口名称+方法名+参数类型参数值+超时时间+ requestID)
    客户端请求消息结构般需包括容:
    1 接口名称:例子里接口名HelloWorldService果传服务端知道调
    接口
    2 方法名:接口方法果传方法名服务端知道调方法
    3 参数类型参数值:参数类型 boolintlongdoublestringmaplist
    甚 struct(class)相应参数值
    4 超时时间:
    5 requestID标识唯请求 id面节会详细描述 requestID 处
    6 服务端返回消息 : 般包括容返回值+状态 code+requestID 13042018 Page 154 of 283

    序列化
    目前互联网公司广泛 ProtobufThriftAvro 等成熟序列化解决方案搭建 RPC 框架
    久考验解决方案
    8131 通讯程
    核心问题(线程暂停消息乱序)
    果 netty 话般会 channelwriteAndFlush()方法发送消息二进制串方
    法调整远程调(发出请求接收结果)说异步前线程说
    请求发送出线程执行服务端结果服务端处理完成消息
    形式发送客户端里出现两问题:
    1 前线程暂停等结果回执行?
    2 果线程时进行远程方法调时建立 client server 间 socket 连接
    会双方发送消息传递前序机server 处理完结果结
    果消息发送 clientclient 收消息知道消息结果原先线程调
    ?图示线程 A 线程 B 时 client socket 发送请求 requestA requestB
    socket 先 requestB requestA 发送 server server responseB 先返
    回 requestB 请求达时间更晚需种机制保证 responseA 丢
    ThreadAresponseB 丢 ThreadB

    通讯流程
    requestID 生成AtomicLong
    1 client 线程次通 socket 调次远程接口前生成唯 ID requestID
    (requestID 必需保证 Socket 连接里面唯)般常常 AtomicLong
    0 开始累计数字生成唯 ID
    存放回调象 callback 全局 ConcurrentHashMap
    2 处理结果回调象 callback 存放全局 ConcurrentHashMap 里面
    put(requestID callback)
    synchronized 获取回调象 callback 锁旋 wait
    3 线程调 channelwriteAndFlush()发送消息紧接着执行 callback get()方法试
    图获取远程返回结果 get()部 synchronized 获取回调象 callback
    锁先检测否已获取结果果没然调 callback wait()方法释放
    callback 锁前线程处等状态 13042018 Page 155 of 283

    监听消息线程收消息找 callback 锁唤醒
    4 服务端接收请求处理 response 结果(结果中包含前面 requestID)发
    送客户端客户端 socket 连接专门监听消息线程收消息分析结果取
    requestID 前面 ConcurrentHashMap 里面 get(requestID) 找
    callback 象 synchronized 获取 callback 锁方法调结果设置
    callback 象里调 callbacknotifyAll()唤醒前面处等状态线程

    public Object get() {
    synchronized (this) { 旋锁
    while (true) { 否结果
    If (isDone){
    wait() 没结果释放锁前线程处等状态
    }else{获取数处理
    }
    }
    }
    }
    private void setDone(Response res) {
    thisres res
    isDone true
    synchronized (this) { 获取锁前面 wait()已释放 callback 锁
    notifyAll() 唤醒处等线程
    }
    }

    814 RMI 实现方式
    Java 远程方法调 Java RMI(Java Remote Method Invocation) Java 编程语言里种
    实现远程程调应程序编程接口客户机运行程序调远程服务器象远
    程方法调特性 Java 编程员够网络环境中分布操作RMI 全部宗旨简化远程接
    口象

    8141 实现步骤
    1 编写远程服务接口该接口必须继承 javarmiRemote 接口方法必须抛出
    javarmiRemoteException 异常
    2 编写远程接口实现类该实现类必须继承 javarmiserverUnicastRemoteObject 类
    3 运行 RMI 编译器(rmic)创建客户端 stub 类服务端 skeleton 类
    4 启动 RMI 注册表便驻留服务 13042018 Page 156 of 283

    5 RMI 注册表中注册服务
    6 客户端查找远程象调远程方法
    1:创建远程接口继承 javarmiRemote 接口
    public interface GreetService extends javarmiRemote {
    String sayHello(String name) throws RemoteException
    }
    2:实现远程接口继承 javarmiserverUnicastRemoteObject 类
    public class GreetServiceImpl extends javarmiserverUnicastRemoteObject
    implements GreetService {
    private static final long serialVersionUID 3434060152387200042L
    public GreetServiceImpl() throws RemoteException {
    super()
    }
    @Override
    public String sayHello(String name) throws RemoteException {
    return Hello + name
    }
    }
    3:生成 Stub Skeleton
    4:执行 rmiregistry 命令注册服务
    5:启动服务
    LocateRegistrycreateRegistry(1098)
    Namingbind(rmi1010811381098GreetService new GreetServiceImpl())
    6客户端调
    GreetService greetService (GreetService)
    Naminglookup(rmi1010811381098GreetService)
    Systemoutprintln(greetServicesayHello(Jobs))

    815 Protoclol Buffer
    protocol buffer google 开源项目结构化数串行化灵活高效动方法
    例 XML xml 更更快更简单定义数结构然代码生成器
    生成代码读写数结构甚需重新部署程序情况更新数结构 13042018 Page 157 of 283

    8151 特点

    Protocol Buffer 序列化 & 反序列化简单 & 速度快原:
    1 编码 解码 方式简单(需简单数学运算 位移等等)
    2 采 Protocol Buffer 身框架代码 编译器 完成
    Protocol Buffer 数压缩效果(序列化数量体积)原:
    1 a 采独特编码方式 VarintZigzag 编码方式等等
    2 b 采 T L V 数存储方式:减少分隔符 & 数存储紧凑
    816 Thrift

    Apache Thrift Facebook 实现种高效支持种编程语言远程服务调框架文
    Java 开发员角度详细介绍 Apache Thrift 架构开发部署针传输协议服务类
    型出相应 Java 实例时详细介绍 Thrift 异步客户端实现提出 Thrift 需注意事

    目前流行服务调方式种例基 SOAP 消息格式 Web Service基 JSON 消息格式
    RESTful 服务等中数传输方式包括 XMLJSON 等然 XML 相体积太传输
    效率低JSON 体积较新颖够完善文介绍 Facebook 开发远程服务调框架
    Apache Thrift采接口描述语言定义创建服务支持扩展跨语言服务开发包含代码
    生成引擎种语言中 C++ Java Python PHP Ruby Erlang Perl Haskell C# Cocoa
    Smalltalk 等创建高效缝服务传输数采二进制格式相 XML JSON 体积更
    高发数量语言环境更优势文详细介绍 Thrift 提供丰富实例
    代码加解释说明帮助者快速构建服务
    什 Thrift:
    1语言开发需 2性问题 13042018 Page 158 of 283




    13042018 Page 159 of 283

    9 网络
    911 网络 7 层架构
    7 层模型包括:
    1 物理层:定义物理设备标准网线接口类型光纤接口类型种传输介质传输速率
    等作传输特流( 10 转化电流强弱进行传输达目转化
    10常说模数转换数模转换)层数做特
    2 数链路层:物理层接收数进行 MAC 址(网卡址)封装解封装常
    层数做帧层工作设备交换机数通交换机传输
    3 网络层:层接收数进行 IP 址(例 19216801)封装解封装层工
    作设备路器常层数做数包
    4 传输层:定义传输数协议端口号(WWW 端口 80 等):TCP(传输控制协议
    传输效率低性强传输性求高数量数)UDP(户数报协议
    TCP 特性恰恰相反传输性求高数量数 QQ 聊天数通
    种方式传输) 层接收数进行分段进行传输达目址进行重组
    常常层数做段
    5 会话层:通传输层(端口号:传输端口接收端口)建立数传输通路系统间
    发起会话者接受会话请求(设备间需互相认识 IP MAC 者机名)
    6 表示层:进行接收数进行解释加密解密压缩解压缩等(计算机够
    识东西转换成够识东西(图片声音等))
    7 应层 终端应说 FTP(种文件载)WEB(IE 浏览)QQ类(
    理解成电脑屏幕东西. 终端应)
    13042018 Page 160 of 283

    912 TCPIP 原理
    TCPIP 协议 TCP IP 两协议合称指特网整 TCPIP 协议族协议分层
    模型方面讲TCPIP 四层次组成:网络接口层网络层传输层应层

    9121 网络访问层(Network Access Layer)
    1 网络访问层(Network Access Layer) TCPIP 参考模型中没详细描述指出机
    必须某种协议网络相连
    9122 网络层(Internet Layer)
    2 网络层(Internet Layer)整体系结构关键部分功机分组发网
    络分组独立传目标分组网络达序发送序
    高层果需序收发必须行处理分组排序互联网层特
    网协议(IPInternet Protocol)
    9123 传输层(Tramsport LayerTCPUDP)
    3 传输层(Tramsport Layer)源端目端机器等实体进行会话层定义
    两端端协议:传输控制协议(TCPTransmission Control Protocol)户数报协
    议(UDPUser Datagram Protocol)TCP 面连接协议提供报文传输
    层应连接服务基数传输外性保证流量控制路
    复优先权安全性控制等功UDP 面连接传输协议需
    TCP 排序流量控制等功应程序
    9124 应层(Application Layer)
    4 应层(Application Layer)包含高层协议包括:虚拟终端协议(TELNET
    TELecommunications NETwork)文件传输协议(FTPFile Transfer Protocol)电子邮件
    传输协议(SMTPSimple Mail Transfer Protocol)域名服务(DNSDomain Name 13042018 Page 161 of 283

    Service)网新闻传输协议(NNTPNet News Transfer Protocol)超文传送协议
    (HTTPHyperText Transfer Protocol)等
    913 TCP 三次握手四次挥手
    TCP 传输前会进行三次沟通般称三次握手传完数断开时候进行四次沟通般
    称四次挥手
    9131 数包说明
    1 源端口号( 16 位):(连源机 IP 址)标识源机应进程
    2 目端口号( 16 位):(连目机 IP 址)标识目机应进程两值
    加 IP 报头中源机 IP 址目机 IP 址唯确定 TCP 连接
    3 序号 seq( 32 位):标识 TCP 源端 TCP 目端发送数字节流表示
    报文段中第数字节序号果字节流作两应程序间单流动
    TCP 序号字节进行计数序号 32bit 符号数序号达 2 32 次方 - 1
    0 开始建立新连接时 SYN 标志变 1 序号字段包含机选择该
    连接初始序号 ISN ( Initial Sequence Number )
    4 确认号 ack( 32 位):包含发送确认端期收序号确认序号应
    次已成功收数字节序号加 1 ACK 标志 1 时确认序号字段效 TCP
    应层提供全双工服务意味数两方独立进行传输连接端必
    须保持方传输数序号
    5 TCP 报头长度( 4 位):出报头中 32bit 字数目实际指明数里开始需
    值选字段长度变字段占 4bit TCP 60 字节首部然
    没选字段正常长度 20 字节
    6 保留位( 6 位):保留目前必须置 0
    7 控制位( control flags 6 位): TCP 报头中 6 标志特中时设
    置 1 次:
    URG : 1 表示紧急指针效 0 忽略紧急指针值
    ACK : 1 表示确认号效 0 表示报文中包含确认信息忽略确认号字段
    PSH : 1 表示带 PUSH 标志数指示接收方应该快报文段交应层
    等缓区装满
    RST :复位机崩溃原出现错误连接拒绝非法报
    文段拒绝连接请求般情况果收 RST 1 报文定发生某
    问题
    SYN :步序号 1 表示连接请求建立连接序号步( synchronize )
    FIN :释放连接 1 表示发送方已没数发送关闭方数流
    8 窗口( 16 位):数字节数表示确认号开始报文源方接收字节数源
    方接收窗口窗口 16bit 字段窗口 65535 字节
    9 校验( 16 位):校验整 TCP 报文段包括 TCP 头部 TCP 数 16 位字
    进行计算强制性字段定发送端计算存储接收端进行验证
    10 紧急指针( 16 位): URG 标志置 1 时紧急指针效TCP 紧急方式发送端
    端发送紧急数种方式 13042018 Page 162 of 283

    11 选项:常见选字段长报文称 MSS(Maximum Segment Size) 连
    接方通常通信第报文段(建立连接设置 SYN 标志段)中指明选项
    指明端接收长度报文段选项长度定 32 位字整数倍加填充
    位报头长度成整字数
    12 数: TCP 报文段中数部分选连接建立连接终止时双方交换报
    文段仅 TCP 首部果方没数发送没数首部确认收数
    处理超时许情况中会发送带数报文段

    9132 三次握手
    第次握手:机 A 发送位码 syn=1机产生 seq number1234567 数包服务器机 B
    SYN1 知道A 求建立联机
    第二次握手:机 B 收请求确认联机信息 A 发送 ack number( 机 A
    seq+1)syn1ack1机产生 seq7654321 包
    第三次握手:机 A 收检查 ack number 否正确第次发送 seq number+1位码
    ack 否 1正确机 A 会发送 ack number(机 B seq+1)ack1机 B 收确认13042018 Page 163 of 283

    seq 值 ack1 连接建立成功

    9133 四次挥手
    TCP 建立连接进行三次握手断开连接进行四次 TCP 半关闭造成 TCP 连
    接全双工(数两方时传递)进行关闭时方单独进行关闭单
    方关闭半关闭方完成数发送务发送 FIN 方通告终止
    方连接
    1) 关闭客户端服务器连接:首先客户端 A 发送 FIN关闭客户服务器数传送
    然等服务器确认中终止标志位 FIN1序列号 sequ
    2) 服务器收 FIN发回 ACK确认号 ack 收序号加 1
    3) 关闭服务器客户端连接:发送 FIN 客户端
    4) 客户段收 FIN 发回 ACK 报文确认确认序号 seq 设置收序号加 1
    首先进行关闭方执行动关闭方执行动关闭 13042018 Page 164 of 283


    机 A 发送 FIN 进入终止等状态 服务器 B 收机 A 连接释放报文段立
    机 A 发送确认然服务器 B 进入 closewait 状态时 TCP 服务器进程通知高
    层应进程 A B 连接释放时半关闭状态 A 发送
    B B 发送 A时 B 没数报发送 A 应进程通知 TCP 释
    放连接然发送 A 连接释放报文段等确认A 发送确认进入 timewait注
    意时 TCP 连接没释放掉然时间等计时器设置 2MSL A 进入
    close 状态
    914 HTTP 原理
    HTTP 状态协议状态指客户机(Web 浏览器)服务器间需建立持久连接
    意味着客户端服务器端发出请求然服务器返回响应(response)连接关闭服
    务器端保留连接关信息HTTP 遵循请求(Request)应答(Response)模型客户机(浏览器)
    服务器发送请求服务器处理请求返回适应答 HTTP 连接构造成套请求应答
    9141 传输流程
    1:址解析
    客户端浏览器请求页面:httplocalhostcom8080indexhtm 中分解出协议名机名
    端口象路径等部分址解析结果:
    协议名:http
    机名:localhostcom
    端口:8080
    象路径:indexhtm 13042018 Page 165 of 283

    步需域名系统 DNS 解析域名 localhostcom机 IP 址
    2:封装 HTTP 请求数包
    部分结合机信息封装成 HTTP 请求数包
    3:封装成 TCP 包建立连接
    封装成 TCP 包建立 TCP 连接(TCP 三次握手)
    4:客户机发送请求命
    4)客户机发送请求命令:建立连接客户机发送请求服务器请求方式格式:统资
    源标识符(URL)协议版号边 MIME 信息包括请求修饰符客户机信息容
    5:服务器响应
    服务器接请求予相应响应信息格式状态行包括信息协议版号成功
    错误代码边 MIME 信息包括服务器信息实体信息容
    6:服务器关闭 TCP 连接
    服务器关闭 TCP 连接:般情况旦 Web 服务器浏览器发送请求数关闭 TCP 连
    接然果浏览器者服务器头信息加入行代码 ConnectionkeepaliveTCP 连接发送
    然保持开状态浏览器继续通相连接发送请求保持连接节省请求
    建立新连接需时间节约网络带宽

    9142 HTTP 状态
    状态码 原短语
    消息响应
    100 Continue(继续)
    101 Switching Protocol(切换协议) 13042018 Page 166 of 283

    成功响应
    200 OK(成功)
    201 Created(已创建)
    202 Accepted(已创建)
    203 NonAuthoritative Information(未授权信息)
    204 No Content(容)
    205 Reset Content(重置容)
    206 Partial Content(部分容)
    重定
    300 Multiple Choice(种选择)
    301 Moved Permanently(永久移动)
    302 Found(时移动)
    303 See Other(查位置)
    304 Not Modified(未修改)
    305 Use Proxy(代理)
    306 unused(未)
    307 Temporary Redirect(时重定)
    308 Permanent Redirect(永久重定)
    客户端错误
    400 Bad Request(错误请求)
    401 Unauthorized(未授权)
    402 Payment Required(需付款)
    403 Forbidden(禁止访问)
    404 Not Found(未找)
    405 Method Not Allowed(允许该方法)
    406 Not Acceptable(法接受)
    407 Proxy Authentication Required(求代理身份验证)
    408 Request Timeout(请求超时)
    409 Conflict(突)
    410 Gone(已失效)
    411 Length Required(需容长度头)
    412 Precondition Failed(预处理失败)
    413 Request Entity Too Large(请求实体长)
    414 RequestURI Too Long(请求网址长)
    415 Unsupported Media Type(媒体类型支持)
    416 Requested Range Not Satisfiable(请求范围合求)
    417 Expectation Failed(预期结果失败)
    服务器端错误
    500 Internal Server Error(部服务器错误)
    501 Implemented(未实现)
    502 Bad Gateway(网关错误)
    503 Service Unavailable(服务)
    504 Gateway Timeout (网关超时)
    505 HTTP Version Not Supported(HTTP 版受支持)


    9143 HTTPS
    HTTPS(全称:Hypertext Transfer Protocol over Secure Socket Layer)安全目标
    HTTP 通道简单讲 HTTP 安全版 HTTP 加入 SSL 层HTTPS 安全基础 SSL
    端口号 443 程致: 13042018 Page 167 of 283

    建立连接获取证书
    1) SSL 客户端通 TCP 服务器建立连接(443 端口)般 tcp 连接协商(握
    手)程中请求证书客户端发出消息服务器消息里面包含实现算
    法列表需消息SSL 服务器端会回应数包里面确定次通信
    需算法然服务器客户端返回证书(证书里面包含服务器信息:域名申请证书
    公司公秘钥)
    证书验证
    2) Client 收服务器返回证书判断签发证书公签发机构机构公
    秘钥确认签名否效客户端会确保证书中列出域名正连接域名
    数加密传输
    3) 果确认证书效生成称秘钥服务器公秘钥进行加密然发送服务
    器服务器私钥进行解密样两台计算机开始进行称加密进行通信



    915 CDN 原理
    CND 般包含分发服务系统负载均衡系统理系统
    9151 分发服务系统
    基工作单元 Cache 服务器负责直接响应户请求容快速分发户时
    负责容更新保证源站容步 13042018 Page 168 of 283

    根容类型服务种类分发服务系统分子服务系统:网页加速服务流媒体加速
    服务应加速服务等子服务系统分布式服务集群功类似域接分布部
    署 Cache 集群组成
    承担容步更新响应户请求外分发服务系统需层理调度系统反馈
    Cache 设备健康状况响应情况容缓存状况等便理调度系统够根设定策略决定
    Cache 设备响应户请求
    9152 负载均衡系统:

    负载均衡系统整 CDN 系统中枢负责户请求进行调度确定提供户终访问

    分级实现基两极调度体系包括全局负载均衡(GSLB)负载均衡(SLB)
    GSLB 根户址户请求容根性原确定户服务节点般通 DNS
    解析者应层重定(Http 3XX 重定)方式实现
    SLB 负责节点部负载均衡户请求 GSLB 调度 SLB 时SLB 会根节点
    Cache 设备工作状况容分布情况等户请求重定SLB 实现四层调度(LVS)七层调
    度(Nginx)链路负载调度等
    9153 理系统:
    分运营理网络理子系统
    网络理系统实现 CDN 系统设备理拓扑理链路监控障理理员提供全网资
    源视化集中理通常 web 方式实现
    运营理 CDN 系统业务理负责处理业务层面外界系统交互必须收集整理
    交付工作包括户理产品理计费理统计分析等
    13042018 Page 169 of 283

    10 日志
    1011 Slf4j
    slf4j 全称 Simple Loging Facade For Java仅仅 Java 程序提供日志输出统接
    口具体日志实现方案 JDBC 样种规已单独 slf4j
    工作必须搭配具体日志实现方案 apache orgapachelog4jLoggerjdk 带
    javautilloggingLogger 等
    1012 Log4j
    Log4j Apache 开源项目通 Log4j控制日志信息输送目控制台
    文件GUI 组件甚套接口服务器NT 事件记录器UNIX Syslog 守护进程等控
    制条日志输出格式通定义条日志信息级够更加细致控制日志生成程
    Log4j 三重组成构成:日志记录器(Loggers)输出端(Appenders)日志格式化器(Layout)
    1Logger:控制启禁日志记录语句日志信息进行级限制
    2Appenders 指定日志印控制台文件中
    3Layout 控制日志信息显示格式
    Log4j 中输出 Log 信息定义 5 种级次 DEBUGINFOWARNERROR FATAL
    输出时级高配置中规定 级信息真正输出样方便配置情况
    输出容需更改代码
    1013 LogBack
    简单说Logback Java 领域日志框架认 Log4J 继承
    Logback 三模块组成:logbackcorelogbackclassiclogbackaccess
    logbackcore 模块基础设施模块基构建显然logbackcore 提供关键
    通机制
    logbackclassic 位作等 Log4J认 Log4J 改进版实现简单
    日志门面 SLF4J
    logbackaccess 作 Servlet 容器交互模块说 tomcat 者 jetty提供
    HTTP 访问相关功
    10131 Logback 优点
    样代码路径Logback 执行更快
    更充分测试
    原生实现 SLF4J API(Log4J 需中间转换层)
    容更丰富文档
    支持 XML 者 Groovy 方式配置
    配置文件动热加载 13042018 Page 170 of 283

    IO 错误中优雅恢复
    动删日志档
    动压缩日志成档文件
    支持 Prudent 模式 JVM 进程记录日志文件
    支持配置文件中加入条件判断适应环境
    更强滤器
    支持 SiftingAppender(筛选 Appender)
    异常栈信息带包信息
    1014 ELK
    ELK 软件集合 ElasticsearchLogstashKibana 简称三软件相关组件
    造规模日志实时处理系统
    Elasticsearch 基 Lucene 支持全文索引分布式存储索引引擎负责
    日志索引存储起方便业务方检索查询
    Logstash 日志收集滤转发中间件负责条业务线类日志统收
    集滤转发 Elasticsearch 进行步处理
    Kibana 视化工具负责查询 Elasticsearch 数视化方式展现业
    务方类饼图直方图区域图等


    13042018 Page 171 of 283

    11 Zookeeper
    1111 Zookeeper 概念
    Zookeeper 分布式协调服务服务发现分布式锁分布式领导选举配置理等
    Zookeeper 提供类似 Linux 文件系统树形结构(认轻量级存文件系统
    适合存少量信息完全适合存储量文件者文件)时提供节点监控
    通知机制
    1111 Zookeeper 角色
    Zookeeper 集群基复制高集群服务器承担三种角色中种
    11111 Leader
    1 Zookeeper 集群时间会实际工作 Leader会发起维护 Follwer
    Observer 间心跳
    2 写操作必须通 Leader 完成 Leader 写操作广播服务器超
    半数节点(包括 observeer 节点)写入成功该写请求会提交(类 2PC 协议)
    11112 Follower
    1 Zookeeper 集群时存 Follower会响应 Leader 心跳
    2 Follower 直接处理返回客户端读请求时会写请求转发 Leader 处理
    3 负责 Leader 处理写请求时请求进行投票
    11113 Observer
    角色 Follower 类似投票权Zookeeper 需保证高强致性支持更客
    户端需增加更 ServerServer 增投票阶段延迟增影响性引入 Observer
    Observer 参投票 Observers 接受客户端连接写请求转发 leader 节点 加入更
    Observer 节点提高伸缩性时影响吞吐率 13042018 Page 172 of 283


    11111 ZAB 协议
    事务编号 Zxid(事务请求计数器+ epoch)
    ZAB ( ZooKeeper Atomic Broadcast ZooKeeper 原子消息广播协议) 协议事务编号 Zxid
    设计中Zxid 64 位数字中低 32 位简单单调递增计数器针客户端
    事务请求计数器加 1高 32 位代表 Leader 周期 epoch 编号选产生新
    Leader 服务器会 Leader 服务器取出日志中事务 ZXID中读取
    epoch 值然加 1作新 epoch低 32 位 0 开始计数
    Zxid(Transaction id)类似 RDBMS 中事务 ID标识次更新操作 Proposal(提议)
    ID保证序性该 zkid 必须单调递增
    epoch
    epoch:理解前集群处年代者周期 leader 皇帝年号
    次改换代leader 变更会前年代基础加 1样算旧 leader 崩溃
    恢复没听 follower 听前年代 leader 命令
    Zab 协议两种模式恢复模式(选)广播模式(步)
    Zab 协议两种模式分恢复模式(选)广播模式(步)服务启动者领导
    者崩溃Zab 进入恢复模式领导者选举出数 Server 完成 leader 状
    态步恢复模式结束状态步保证 leader Server 具相系统状态
    ZAB 协议 4 阶段
    Leader election(选举阶段选出准 Leader)
    1 Leader election(选举阶段):节点开始处选举阶段节点超半数
    节点票数选准 leader达 广播阶段(broadcast) 准 leader 会成
    真正 leader阶段目选出准 leader然进入阶段 13042018 Page 173 of 283

    Discovery(发现阶段接受提议生成 epoch接受 epoch)
    2 Discovery(发现阶段):阶段followers 准 leader 进行通信步 followers
    接收事务提议阶段目发现前数节点接收新提议
    准 leader 生成新 epoch followers 接受更新 accepted Epoch
    follower 会连接 leader果节点 f 认 follower p leaderf
    尝试连接 p 时会拒绝f 拒绝会进入重新选举阶段
    Synchronization(步阶段步 follower 副)
    3 Synchronization(步阶段):步阶段利 leader 前阶段获新提议历史
    步集群中副 数节点步完成准 leader 会成真正 leader
    follower 会接收 zxid lastZxid 提议
    Broadcast(广播阶段leader 消息广播)
    4 Broadcast(广播阶段):阶段Zookeeper 集群正式外提供事务服务
    leader 进行消息广播时果新节点加入需新节点进行步
    ZAB 提交事务 2PC 样需全部 follower ACK需超半数节点 ACK

    ZAB 协议 JAVA 实现(FLE发现阶段步合 Recovery Phase(恢复阶段))
    协议 Java 版实现面定义选举阶段 Fast Leader Election(FLE)
    包含 选举发现职责 FLE 会选举拥新提议历史节点作 leader样省
    发现新提议步骤实际实现 发现阶段 步合 Recovery Phase(恢复阶段)
    ZAB 实现三阶段:Fast Leader ElectionRecovery PhaseBroadcast Phase
    11112 投票机制
    sever 首先投票然选票 sever 选票权重胜出权
    重较更新身选票箱具体选举程:
    1 Server 启动询问 Server 投票谁 server 询问
    server 次根状态回复推荐 leader id 次处理事务 zxid(系
    统启动时 server 会推荐)
    2 收 Server 回复计算出 zxid Server Server 相关信
    息设置成次投票 Server
    3 计算程中获票数 sever 获胜者果获胜者票数超半数改
    server 选 leader否继续程直 leader 选举出
    4 leader 会开始等 server 连接
    5 Follower 连接 leader zxid 发送 leader
    6 Leader 根 follower zxid 确定步点选举阶段完成
    7 选举阶段完成 Leader 步通知 follower 已成 uptodate 状态
    8 Follower 收 uptodate 消息重新接受 client 请求进行服务 13042018 Page 174 of 283

    目前 5 台服务器台服务器均没数编号分 12345编号次启动
    选择举程:
    1 服务器 1 启动投票然发投票信息机器没启动收反
    馈信息服务器 1 状态直属 Looking
    2 服务器 2 启动投票时前启动服务器 1 交换结果服务器 2 编号
    服务器 2 胜出时投票数没半数两服务器状态然
    LOOKING
    3 服务器 3 启动投票时前启动服务器 12 交换信息服务器 3 编
    号服务器 3 胜出时投票数正半数服务器 3 成领导者服务器
    12 成弟
    4 服务器 4 启动投票时前启动服务器 123 交换信息服务器 4
    编号前服务器 3 已胜出服务器 4 成弟
    5 服务器 5 启动面逻辑服务器 4 成弟
    1112 Zookeeper 工作原理(原子广播)
    1 Zookeeper 核心原子广播机制保证 server 间步实现机制
    协议做 Zab 协议Zab 协议两种模式分恢复模式广播模式
    2 服务启动者领导者崩溃Zab 进入恢复模式领导者选举出
    数 server 完成 leader 状态步恢复模式结束
    3 状态步保证 leader server 具相系统状态
    4 旦 leader 已数 follower 进行状态步开始广播消息进
    入广播状态时候 server 加入 zookeeper 服务中会恢复模式启动发
    现 leader leader 进行状态步步结束参消息广播Zookeeper
    服务直维持 Broadcast 状态直 leader 崩溃者 leader 失部分
    followers 支持
    5 广播模式需保证 proposal 序处理 zk 采递增事务 id 号(zxid)保
    证提议(proposal)提出时候加 zxid
    6 实现中 zxid 64 数字高 32 位 epoch 标识 leader 关系否改变
    次 leader 选出会新 epoch低 32 位递增计数
    7 leader 崩溃者 leader 失数 follower时候 zk 进入恢复模式恢复模式
    需重新选举出新 leader server 恢复正确状态
    1113 Znode 四种形式目录节点
    1 PERSISTENT:持久节点
    2 EPHEMERAL:暂时节点
    3 PERSISTENT_SEQUENTIAL:持久化序编号目录节点
    4 EPHEMERAL_SEQUENTIAL:暂时化序编号目录节点 13042018 Page 175 of 283

    12 Kafka
    1211 Kafka 概念
    Kafka 种高吞吐量分布式基发布订阅消息系统初 LinkedIn 公司开发
    Scala 语言编写目前 Apache 开源项目
    1 broker:Kafka 服务器负责消息存储转发
    2 topic:消息类Kafka topic 分类消息
    3 partition:topic 分区 topic 包含 partitiontopic 消息保存
    partition
    4 offset:消息日志中位置理解消息 partition 偏移量代表该消息
    唯序号
    5 Producer:消息生产者
    6 Consumer:消息消费者
    7 Consumer Group:消费者分组 Consumer 必须属 group
    8 Zookeeper:保存着集群 brokertopicpartition 等 meta 数外负责 broker
    障发现partition leader 选举负载均衡等功

    1212 Kafka 数存储设计
    12121 partition 数文件(offsetMessageSizedata)
    partition 中条 Message 包含三属性:offsetMessageSizedata中 offset 表
    示 Message partition 中偏移量offset 该 Message partition 数文件中实13042018 Page 176 of 283

    际存储位置逻辑值唯确定 partition 中条 Message认 offset
    partition 中 Message idMessageSize 表示消息容 data data Message 具
    体容
    12122 数文件分段 segment(序读写分段命令二分查找)
    partition 物理 segment 文件组成 segment 相等序读写 segment
    数文件该段中 offset 命名文件扩展名log样查找指定 offset Message
    时候二分查找定位该 Message segment 数文件中
    12123 数文件索引(分段索引稀疏存储)
    Kafka 分段数文件建立索引文件文件名数文件名字样文件扩
    展名indexindex 文件中没数文件中条 Message 建立索引采稀疏存
    储方式隔定字节数建立条索引样避免索引文件占空间
    索引文件保留存中

    1213 生产者设计
    12131 负载均衡(partition 会均衡分布 broker )
    消息 topic partition 组成 partition 会均衡分布 broker
    效利 broker 集群性提高消息吞吐量producer 通机者 hash 等方式消
    息均发送 partition 实现负载均衡 13042018 Page 177 of 283


    12132 批量发送
    提高消息吞吐量重方式Producer 端存中合条消息次请求方式发
    送批量消息 broker减少 broker 存储消息 IO 操作次数定程度影响
    消息实时性相时延代价换取更吞吐量
    12133 压缩(GZIP Snappy)
    Producer 端通 GZIP Snappy 格式消息集合进行压缩Producer 端进行压缩
    Consumer 端需进行解压压缩处减少传输数量减轻网络传输压力
    数处理瓶颈体现网络 CPU(压缩解压会耗掉部分 CPU 资源)
    1211 消费者设计
    13042018 Page 178 of 283

    12111 Consumer Group
    Consumer Group 中 Consumer 实例时消费 partition等效队列模
    式partition 消息序Consumer 通 pull 方式消费消息Kafka 删已消费消息
    partition序读写磁盘数时间复杂度 O(1)方式提供消息持久化力 13042018 Page 179 of 283

    13 RabbitMQ
    1311 概念
    RabbitMQ Erlang 语言开发 AMQP 开源实现
    AMQP :Advanced Message Queue高级消息队列协议应层协议开放标准
    面消息中间件设计基协议客户端消息中间件传递消息受产品开发语言
    等条件限制
    RabbitMQ 初起源金融系统分布式系统中存储转发消息易性扩展性高
    性等方面表现俗具体特点包括:
    1 性(Reliability):RabbitMQ 机制保证性持久化传输确认发布
    确认
    2 灵活路(Flexible Routing):消息进入队列前通 Exchange 路消息
    典型路功RabbitMQ 已提供置 Exchange 实现针更复杂路
    功 Exchange 绑定起通插件机制实现 Exchange
    3 消息集群(Clustering): RabbitMQ 服务器组成集群形成逻辑 Broker
    4 高(Highly Available Queues):队列集群中机器进行镜部分节
    点出问题情况队列然
    5 种协议(Multiprotocol):RabbitMQ 支持种消息队列协议 STOMPMQTT
    等等
    6 语言客户端(Many Clients):RabbitMQ 支持常语言 JavaNET
    Ruby 等等
    7 理界面(Management UI)RabbitMQ 提供易户界面户监控
    理消息 Broker 许方面
    8 踪机制(Tracing)果消息异常RabbitMQ 提供消息踪机制者找出发生

    9 插件机制(Plugin System)RabbitMQ 提供许插件方面进行扩展编
    写插件
    1312 RabbitMQ 架构
    13042018 Page 180 of 283

    13121 Message
    消息消息具名消息头消息体组成消息体透明消息头系
    列选属性组成属性包括 routingkey(路键)priority(相消息优
    先权)deliverymode(指出该消息需持久性存储)等
    13122 Publisher
    1 消息生产者交换器发布消息客户端应程序
    13123 Exchange(消息路队列 )
    2 交换器接收生产者发送消息消息路服务器中队列
    13124 Binding(消息队列交换器间关联)
    3 绑定消息队列交换器间关联绑定基路键交换器消息队列连
    接起路规交换器理解成绑定构成路表
    13125 Queue
    4 消息队列保存消息直发送消费者消息容器消息终点消息
    投入队列消息直队列里面等消费者连接队列取走
    13126 Connection
    5 网络连接 TCP 连接
    13127 Channel
    6 信道路复连接中条独立双数流通道信道建立真实 TCP 连接虚
    拟连接AMQP 命令通信道发出发布消息订阅队列接收消息
    动作通信道完成操作系统说建立销毁 TCP 非常昂贵开销
    引入信道概念复条 TCP 连接
    13128 Consumer
    7 消息消费者表示消息队列中取消息客户端应程序
    13129 Virtual Host
    8 虚拟机表示批交换器消息队列相关象虚拟机享相身份认证加密
    环境独立服务器域 13042018 Page 181 of 283

    131210 Broker
    9 表示消息队列服务器实体

    1313 Exchange 类型
    Exchange 分发消息时根类型分发策略区目前四种类型:directfanout
    topicheaders headers 匹配 AMQP 消息 header 路键外 headers 交换器
    direct 交换器完全致性差目前直接外三种类型:
    13131 Direct 键(routing key)分布:
    1 Direct:消息中路键(routing key)果 Binding 中 binding key 致
    交换器消息发应队列中完全匹配单播模式

    13132 Fanout(广播分发)
    2 Fanout:发 fanout 类型交换器消息会分绑定队列子
    网广播台子网机获份复制消息fanout 类型转发消息快
    13042018 Page 182 of 283


    13133 topic 交换器(模式匹配)
    3 topic 交换器:topic 交换器通模式匹配分配消息路键属性路键某模
    式进行匹配时队列需绑定模式路键绑定键字符串切分成
    单词单词间点隔开样会识两通配符:符号#符号
    #匹配 0 单词匹配少单词



    13042018 Page 183 of 283

    14 Hbase
    1411 概念
    base 分布式面列开源数库(实准确说面列族)HDFS Hbase 提供
    底层数存储服务MapReduce Hbase 提供高性计算力Zookeeper Hbase 提供
    稳定服务 Failover 机制说 Hbase 通量廉价机器解决海量数高速存
    储读取分布式数库解决方案
    1412 列式存储
    列方式带重处查询中选择规通列定义整数库
    动索引化


    里列式存储实说列族存储Hbase 根列族存储数列族面非常
    列列族创建表时候必须指定加深 Hbase 列族理解面简单关系
    型数库表 Hbase 数库表:
    13042018 Page 184 of 283

    1413 Hbase 核心概念

    14131 Column Family 列族
    Column Family 列族Hbase 通列族划分数存储列族面包含意列实
    现灵活数存取Hbase 表创建时候必须指定列族关系型数库创建时候必须
    指定具体列样Hbase 列族越越官方推荐列族者等 3
    场景般 1 列族
    14132 Rowkey(Rowkey 查询Rowkey 范围扫描全表扫描)
    Rowkey 概念 mysql 中键完全样Hbase Rowkey 唯区分某行数
    Hbase 支持 3 中查询方式:基 Rowkey 单行查询基 Rowkey 范围扫描全表扫

    14133 Region 分区
    Region:Region 概念关系型数库分区者分片差Hbase 会表数
    基 Rowkey 范围分配通 Region 中 Region 负责定范围数访问
    存储样张巨表切割通 region访问起时延低
    14134 TimeStamp 版
    TimeStamp 实现 Hbase 版关键 Hbase 中 timestame 标识相
    rowkey 行应通版数写入数时候果户没指定应
    timestampHbase 会动添加 timestamptimestamp 服务器时间保持致
    Hbase 中相 rowkey 数 timestamp 倒序排列默认查询新版户
    指定 timestamp 值读取旧版数
    1414 Hbase 核心架构
    Hbase ClientZookeeperMasterHRegionServerHDFS 等组建组成 13042018 Page 185 of 283


    14141 Client:
    Client 包含访问 Hbase 接口外 Client 维护应 cache 加速 Hbase
    访问 cache META元数信息
    14142 Zookeeper:
    Hbase 通 Zookeeper 做 master 高RegionServer 监控元数入口
    集群配置维护等工作具体工作:
    1 通 Zoopkeeper 保证集群中 1 master 运行果 master 异
    常会通竞争机制产生新 master 提供服务
    2 通 Zoopkeeper 监控 RegionServer 状态 RegionSevrer 异常
    时候通回调形式通知 Master RegionServer 限信息
    3 通 Zoopkeeper 存储元数统入口址
    14143 Hmaster
    master 节点职责:
    1 RegionServer 分配 Region
    2 维护整集群负载均衡
    3 维护集群元数信息发现失效 Region失效 Region 分配正常
    RegionServer RegionSever 失效时候协调应 Hlog 拆分
    14144 HregionServer
    HregionServer 直接接户读写请求真正干活节点功概括

    1 理 master 分配 Region 13042018 Page 186 of 283

    2 处理客户端读写请求
    3 负责底层 HDFS 交互存储数 HDFS
    4 负责 Region 变拆分
    5 负责 Storefile 合工作
    14145 Region 寻址方式(通 zookeeper META)
    第 1 步:Client 请求 ZK 获取META RegionServer 址
    第 2 步:Client 请求META RegionServer 获取访问数 RegionServer
    址client 会META相关信息 cache 便次快速访问
    第 3 步:Client 请求数 RegionServer获取需数


    14146 HDFS
    HDFS Hbase 提供终底层数存储服务时 Hbase 提供高(Hlog 存储
    HDFS)支持 13042018 Page 187 of 283

    1415 Hbase 写逻辑
    14151 Hbase 写入流程

    图出氛围 3 步骤:
    获取 RegionServer
    第 1 步:Client 获取数写入 Region RegionServer
    请求写 Hlog
    第 2 步:请求写 Hlog Hlog 存储 HDFS RegionServer 出现异常需 Hlog
    恢复数
    请求写 MemStore
    第 3 步:请求写 MemStore写 Hlog 写 MemStore 成功算请求写入完成
    MemStore 续会逐渐刷 HDFS 中
    14152 MemStore 刷盘
    提高 Hbase 写入性写请求写入 MemStore 会立刷盘会等
    定时候进行刷盘操作具体场景会触发刷盘操作呢?总结成场景: 13042018 Page 188 of 283

    全局存控制
    1 全局参数控制存整体情况 memstore 占整 heap
    例时候会触发刷盘操作参数
    hbaseregionserverglobalmemstoreupperLimit默认整 heap 存 40
    意味着全局存触发刷盘操作会 MemStore 进行输盘通
    外参数 hbaseregionserverglobalmemstorelowerLimit 控制默认整
    heap 存 35 flush memstore 占整 heap 存率 35时
    候停止刷盘做减少刷盘业务带影响实现滑系统负载

    MemStore 达限
    2 MemStore 达 hbasehregionmemstoreflushsize 时候会触发刷
    盘默认 128M
    RegionServer Hlog 数量达限
    3 前面说 Hlog 保证 Hbase 数致性果 Hlog 太话会导致障
    恢复时间太长 Hbase 会 Hlog 数做限制达 Hlog 数
    时候会强制刷盘参数 haseregionservermaxlogs默认 32
    手工触发
    4 通 hbase shell 者 java api 手工触发 flush 操作
    关闭 RegionServer 触发
    5 正常关闭 RegionServer 会触发刷盘操作全部数刷盘需 Hlog 恢
    复数
    Region HLOG 恢复完数触发
    6 : RegionServer 出现障时候面 Region 会迁移正常
    RegionServer 恢复完 Region 数会触发刷盘刷盘完成会提供
    业务访问
    1416 HBase vs Cassandra

    HBase Cassandra
    语言 Java Java
    出发点 BigTable BigTable and Dynamo
    License Apache Apache
    Protocol HTTPREST (also Thrift) Custom binary (Thrift)
    数分布 表划分 region 存 region
    server
    改进致性哈希(虚拟节点)
    存储目标 文件 文件
    致性 强致性 终致性Quorum NRW 策略
    架构 masterslave p2p
    高性 NameNode HDFS 单点障点 P2P 中心化设计会出现单点障
    伸缩性 Region Server 扩容通身发布
    MasterMaster 均匀分布 Region
    扩容需 Hash Ring 节点间调整数分布 13042018 Page 189 of 283

    读写性 数读写定位通 6 次网
    络 RPC性较低
    数读写定位非常快
    数突处理 乐观发控制(optimistic concurrency
    control)
    量时钟
    时障处理 Region Server 宕机重做 HLog 数回传机制:某节点宕机hash 该节点新数
    动路节点做 hinted handoff源节点恢复推
    送回源节点
    永久障恢复 Region Server 恢复master 重新
    分配 region
    Merkle 哈希树通 Gossip 协议步 Merkle Tree维
    护集群节点间数致性
    成员通信错误检测 Zookeeper 基 Gossip
    CAP 1强致性0 数丢失2性
    低3扩容方便
    1弱致性数丢失2性高3扩容方
    便
    13042018 Page 190 of 283

    15 MongoDB
    1511 概念
    MongoDB C++语言编写基分布式文件存储开源数库系统高负载情
    况添加更节点保证服务器性MongoDB 旨 WEB 应提供扩展高性
    数存储解决方案
    MongoDB 数存储文档数结构键值(key>value)组成MongoDB 文档类似
    JSON 象字段值包含文档数组文档数组

    1512 特点

    MongoDB 面文档存储数库操作起较简单容易
    MongoDB 记录中设置属性索引 (:FirstNameSameerAddress8 Ga
    ndhi Road)实现更快排序
    通者网络创建数镜 MongoDB 更强扩展性
    果负载增加(需更存储空间更强处理力) 分布计算机网络中
    节点谓分片
    Mongo 支持丰富查询表达式查询指令 JSON 形式标记轻易查询文档中嵌
    象数组
    MongoDb update()命令实现换完成文档(数)者指定数字段
    Mongodb 中 Mapreduce 数进行批量处理聚合操作
    Map ReduceMap 函数调 emit(keyvalue)遍历集合中记录 key value 传
    Reduce 函数进行处理
    Map 函数 Reduce 函数 Javascript 编写通 dbrunCommand mapre
    duce 命令执行 MapReduce 操作 13042018 Page 191 of 283

    GridFS MongoDB 中置功存放量文件
    MongoDB 允许服务端执行脚 Javascript 编写某函数直接服务端执行
    函数定义存储服务端次直接调
    13042018 Page 192 of 283

    16 Cassandra
    1611 概念
    Apache Cassandra 高度扩展高性分布式 NoSQL 数库 Cassandra 旨处理许
    商品服务器量数提供高性需担心单点障
    Cassandra 具够处理量数分布式架构 数放置具复制子机器
    获高性需担心单点障
    1612 数模型
    Key Space(应 SQL 数库中 database)
    1 Key Space 中包含干 CF SQL 数库中 database 包含 table
    Key(应 SQL 数库中键)
    2 Cassandra 中行数记录 keyvalue 形式存储中 key 唯标识
    column(应 SQL 数库中列)
    3 Cassandra 中 keyvalue 中 value 称 column三元组:name
    value timestamp中 name 需唯
    super column(SQL 数库支持)
    4 cassandra 允许 keyvalue 中 value map(keyvalue_list)某 column
    子列
    Standard Column Family(相应 SQL 数库中 table)
    5 CF 系列 row 组成 row 包含 key 应干 column
    Super Column Family(SQL 数库支持)
    6 SCF 系列 row 组成 row 包含 key 应干 super column
    1613 Cassandra 致 Hash 虚拟节点
    致性 Hash(米诺 down 机)
    节点分配 token根 token 值决定节点集群中位置节点存储
    数范围 13042018 Page 193 of 283

    虚拟节点(down 机节点托)
    种方式会造成数分布均问题 Cassandra12 采虚拟节点思想:需
    节点分配 token圆环分成更部分节点负责部分数样节点移
    负责 token 会托节点处理种思想解决数分布均问题

    图示面部分标准致性哈希节点负责圆环中连续段果 Node2 突然
    down 掉Node2 负责数托 Node1 Node1 负责 EFAB 四段果 Node1 里面
    热点户产生数导致 Node1 已点撑住恰巧 B 热点户产生数样
    Node1 会接着 down 机Node1down 机Node6 hold 住?
    面部分虚拟节点实现节点负责连续部分圆环分更部分果 Node2
    突然 down 掉Node2 负责数全托 Node1托节点保持
    致性哈希特点
    1614 Gossip 协议
    Gossip 算法名灵感办公室八卦八卦限时间
    会知道该八卦信息种方式病毒传播类似 Gossip 众名闲话算法
    疫情传播算法病毒感染算法谣言传播算法 Gossip 特点:界网络中
    节点机节点通信番杂乱章通信终节点状态会达成
    致 Gossip 求节点知道节点具中心化特点节点间完全等
    需中心节点实际 Gossip 众接受终致性领域:失败检测
    路步PubSub动态负载均衡 13042018 Page 194 of 283

    Gossip 节点通信方式收敛性
    Gossip 两节点(AB)间存三种通信方式(pushpullpush&pull)
    1 push A 节点数(keyvalueversion)应版号推送 B 节点B 节点更新 A 中
    新数
    2 pull:A 仅数 keyversion 推送 BB A 新数(Keyvalueversion)推送
    AA 更新
    3 pushpull: pull 类似步A B 新数推送 BB 更新
    果两节点数步次定义周期周期push 需通信 1 次pull 需 2 次
    pushpull 需 3 次效果讲pushpull 理周期两节点完全
    致直观感觉pushpull 收敛速度快
    gossip 协议 seed list(防止集群分列)
    cassandra 称 gossip 协议发现加入 C 集群中节点位置状态信息gossip 进
    程秒进行三节点交换状态信息节点交换知道信息
    节点快学整集群中节点信息gossip 信息相关版号
    次 gossip 信息交换中旧信息会新信息覆盖重写阻止分区进行 gossip 交流
    集群中节点中相 seed list种子节点指定启动起 gossip 进程外没
    目种子节点单点障集群操作中没特殊目引导节
    点外
    1615 数复制
    Partitioners(计算 primary key token hash 函数)
    Cassandra 中table 行唯 primarykey 标识partitioner 实际 hash 函数
    计算 primary key tokenCassandra token 值集群中放置应行
    两种复制策略:
    SimpleStrategy:仅单数中心
    第 replica 放 partitioner 确定节点中余 replicas 放述节点时针方
    续节点中
    NetworkTopologyStrategy:较复杂数中心
    指定数中心分存储少份 replicas
    复制策略创建 keyspace 时指定
    CREATE KEYSPACE Excelsior WITH REPLICATION { 'class'
    'SimpleStrategy''replication_factor' 3 }
    CREATE KEYSPACE Excalibur WITH REPLICATION {'class' 'NetworkTopologyStrategy'
    'dc1' 3 'dc2' 2} 13042018 Page 195 of 283

    1616 数写请求协调者
    协调者(coordinator)
    协调者(coordinator) write 请求发送拥应 row replica 节点节点便获取
    执行写请求写致性级(write consistency level)确定少 replica 节点必须返回成功
    确认信息成功意味着数正确写入 commit log memtable



    中 dc1dc2 数中心名称 snitch 中配置名称致面拓扑策略表示 dc1 配置
    3 副 dc2 配置 2 副
    1617 数读请求台修复
    1 协调者首先致性级确定 replica 联系联系节点返回请求数
    2 节点联系 replica row 会存中作较致协调者含
    新数 replica client 返回结果较操作程中需传递时间戳
    较副数新
    3 协调者台联系较余拥应 row replica 数致会时
    replica 发写请求新数进行更新 read repair 13042018 Page 196 of 283


    1618 数存储(CommitLogMemTableSSTable)
    写请求分 CommitLog MemTable MemTable 数会刷写磁盘 SSTable
    写数索引会保存磁盘
    先数写磁盘中 commitlog时追加中存中数结构 memtable 时候会
    返回客户端状态 memtable 容超出指定容量会放进刷入磁盘队列
    (memtable_flush_queue_size 配置队列长度)刷入磁盘数超出队列长度存
    数刷进磁盘中 SSTable commit log 清空
    SSTable 文件构成(BloomFilterindexdatastatic)
    SSTable 文件 fileer(判断数 key 否存里 BloomFilter 提高效率)index(寻
    找应 column 值 data 文件位置)文件data(存储真实数)文件static(存储统计
    column row )文件
    1619 二级索引(索引 value 摘生成 RowKey)
    Cassandra 中数 Keyvalue 形式保存
    13042018 Page 197 of 283

    KeysIndex 创建二级索引保存张 ColumnFamily 中插入数时需进行索
    引 value 进行摘生成独二 key作 RowKey 保存索引 ColumnFamily 中
    时 RowKey 添加 Column插入数 RowKey 作 name 域值value 域赋
    空值timestamp 域赋插入数时间戳
    果相 value 索引会索引 ColumnFamily 中相 RowKey 添加新
    Column果新 value 索引会索引 ColumnFamily 中添加新 RowKey 应
    新 Column
    value 进行查询时需计算该 value RowKey索引 ColumnFamily 中查找该
    RowKey Columns 进行遍历该 value 数 RowKey
    16110 数读写
    数写入更新(数追加)
    Cassandra 设计思路系统 insert remove 操作已数
    面进行追加修改已数种设计称 Log structured 存储顾名思义系统中
    数日志形式存会新数追加已数面Log structured 存储
    系统两优点:
    数写删效率极高
    传统存储系统需更新元信息数磁盘磁头需反复移动较耗时
    操作 Log structured 系统序写充分利文件系统 cache效率

    错误恢复简单
    数身日志形式保存老数会覆盖设计 journal 时候需
    考虑 undo简化错误恢复
    读复杂度高
    Log structured 存储系统引入重问题:读复杂度性理
    说读操作需前扫描数找某记录新版相传统存储系统
    较耗时
    参考:httpsblogcsdnnetfs1360472174articledetails55005335
    数删(column 墓碑)
    果次删操作节点失败(总 3 节点副 3 RF3)整删操作然
    认成功(两节点应答成功 CLQUORUM 致性)接果读发生该节
    点会变明确结果返回空返回数没办法确定种正确13042018 Page 198 of 283

    Cassandra 总认返回数会发生删数出现事情数
    僵尸表现预见
    墓碑
    删 column 实插入关 column 墓碑(tombstone)直接删原
    column该墓碑作该 CF 次修改记录 Memtable SSTable 中墓碑容
    删请求执行时间该时间接受客户端请求存储节点执行该请求时时间
    (local delete time)称删时间需注意区分删时间时间戳 CF 修改
    记录时间戳时间戳理解该 column 修改时间客户端定
    垃圾回收 compaction
    删 column 会立磁盘中删系统占磁盘空间会越越
    需种垃圾回收机制定期删标记墓碑 column垃圾回收 compaction
    程中完成
    数读取(memtable+SStables)
    满足读 cassandra 读取数 memtable 中数 SStables 中数合结果读取
    SSTables 中数查找具体 SSTables 数 SSTables 中偏移量
    (SSTables 键排序数块)首先果 row cache enable 话会检测缓存缓存命中
    直接返回数没查找 Bloom filter查找 SSTable然层 Partition key cache
    找 partition key 位置果根找 partition 压缩偏移量映射表找具体数块果
    缓存没 Partition summaryPartition index 找 partition key然压缩偏移
    量映射表找具体数块
    1 检查 memtable
    2 果 enabled 检查 row cache
    3 检查 Bloom filter
    4 果 enable 检查 partition key 缓存
    5 果 partition key 缓存中找 partition key直接 compression offset 命中果没
    检查 partition summary
    6 根 compression offset map 找数位置
    7 磁盘 SSTable 中取出数 13042018 Page 199 of 283


    行缓存键缓存请求流程图


    MemTable:果 memtable 目标分区数数会读出 SSTables 中读出
    数进行合SSTable 数访问面示步骤
    Row Cache(SSTables 中频繁访问数)
    Cassandra22+存储堆外存全新实现避免造成垃圾回收 JVM 造成压力
    存 row cache 子集数特定段时间配置定存row cache
    LRU(leastrecentlyuserd)进行回收申请存存储 row cache 中数 SSTables 中频繁
    访问数存储row cache 中数续查询访问row cache 写更新
    果写某行行缓存会失效会继续缓存直行读类似果
    partition 更新整partition cache会移目标数row cache 中找
    会检查 Bloom filter 13042018 Page 200 of 283

    Bloom Filter(查找数应 SSTable)
    首先Cassandra 检查 Bloom filter 发现 SSTables 中请求分区数Bloom
    filter 存储堆外存 SSTable 关联 Bloom filter Bloom filter 建
    立 SSTable 没包含特定分区数样找分区数存 SSTable 中性
    加速查找 partition key 查找程然 Bloom filter 概率函数
    会错误结果 SSTables Bloom filter 识出否数果
    Bloom filter 够查找 SSTableCassandra 会检查 partition key cacheBloom filter
    增长适宜 10 亿数 1~2GB极端情况分区行轻松数十
    亿 entries 存储单机器Bloom filter 调节果愿意存换取性
    Partition Key Cache(查找数应 Partition key)
    partition key 缓存果开启 partition index 存储堆外存key cache 块配
    置存读程中hit保存检索果 key cache 中找 partition
    key直接 compression offset map 中招应块partition key cache 热启动工作更
    相较冷启动性提升果节点存非常受限制话需限
    制保存 key cache 中 partition key 数目果 key cache 中没找 partition key
    会partition summary 中找partition key cache 配置意义存储key
    cache 中 partition keys 数目
    Partition Summary(存中存储 partition index 样)
    partition summary 存储堆外存结构存储 partition index 样果
    partition index 包含 partition keys鉴 partition summary X keys 中取
    样然 X key map index 文件中例果 partition summary 设置 20keys
    进行取样会存储 SSTable file 开始 key20th key类推知道
    partition key 具体位置partition summary 缩短找 partition 数位置找
    partition key 值范围会找 partition index通配置取样频率存
    换取性 partition summary 包含数越存越通表定义 index
    interval 属性改变样频率固定存通 index_summary_capacity_in_mb 属性
    设置默认堆 5
    Partition Index(磁盘中)
    partition index 驻扎磁盘中索引 partition keys 偏移量映射果 partition
    summary 已查 partition keys 范围现检索根范围值检索目标 partition
    key需进行单次检索序读根找信息然 compression offset map 中找磁
    盘中数块果 partition index 必须检索需检索两次磁盘找目标数
    Compression offset map(磁盘中)
    compression offset map 存储磁盘数准确位置指针存储堆外存 partition key
    cache 者 partition index 访问旦 compression offset map 识出磁盘中数位置
    会正确 SStable(s)中取出数查询会收结果集
    13042018 Page 201 of 283

    17 设计模式
    1711 设计原
    1712 工厂方法模式
    1713 抽象工厂模式
    1714 单例模式
    1715 建造者模式
    1716 原型模式
    1717 适配器模式
    1718 装饰器模式
    1719 代理模式
    17110 外观模式
    17111 桥接模式
    17112 组合模式
    17113 享元模式
    17114 策略模式
    17115 模板方法模式
    17116 观察者模式
    17117 迭代子模式
    17118 责链模式
    17119 命令模式
    17120 备忘录模式 13042018 Page 202 of 283

    17121 状态模式
    17122 访问者模式
    17123 中介者模式
    17124 解释器模式












    13042018 Page 203 of 283

    18 负载均衡
    负载均衡 建立现网络结构提供种廉价效透明方法扩展网络设备服务器带
    宽增加吞吐量加强网络数处理力提高网络灵活性性
    1811 四层负载均衡 vs 七层负载均衡

    18111 四层负载均衡(目标址端口交换)
    通报文中目标址端口加负载均衡设备设置服务器选择方式决定终选择
    部服务器
    常见 TCP 例负载均衡设备接收第客户端 SYN 请求时通述方式选
    择佳服务器报文中目标 IP 址进行修改(改端服务器 IP)直接转发该服务
    器TCP 连接建立三次握手客户端服务器直接建立负载均衡设备起类
    似路器转发动作某部署情况保证服务器回包正确返回负载均衡设备
    转发报文时会报文原源址进行修改实现四层负载均衡软件:
    F5:硬件负载均衡器功成高
    lvs:重量级四层负载软件
    nginx:轻量级四层负载软件带缓存功正表达式较灵活
    haproxy:模拟四层转发较灵活
    18112 七层负载均衡(容交换)
    谓七层负载均衡称容交换通报文中真正意义应层容
    加负载均衡设备设置服务器选择方式决定终选择部服务器 13042018 Page 204 of 283

    七层应负载处整网络更智化例访问网站户流量通七层
    方式图片类请求转发特定图片服务器缓存技术文字类请求
    转发特定文字服务器压缩技术实现七层负载均衡软件:
    haproxy:天生负载均衡技全面支持七层代理会话保持标记路径转移
    nginx: http 协议 mail 协议功较性 haproxy 差
    apache:功较差
    Mysql proxy:功尚
    1812 负载均衡算法策略
    18121 轮循均衡(Round Robin)
    次网络请求轮流分配部中服务器 1 N 然重新开始种均衡算法适合
    服务器组中服务器相软硬件配置均服务请求相均衡情况
    18122 权重轮循均衡(Weighted Round Robin)
    根服务器处理力服务器分配权值够接受相应权值数服务请
    求例:服务器 A 权值设计成 1B 权值 3C 权值 6服务器 ABC 分
    接受 1030%60%服务请求种均衡算法确保高性服务器更
    率避免低性服务器负载重
    18123 机均衡(Random)
    网络请求机分配部中服务器
    18124 权重机均衡(Weighted Random)
    种均衡算法类似权重轮循算法处理请求分担时机选择程
    18125 响应速度均衡(Response Time 探测时间)
    负载均衡设备部服务器发出探测请求(例 Ping)然根部中服务器探测
    请求快响应时间决定台服务器响应客户端服务请求种均衡算法较反映
    服务器前运行状态快响应时间仅仅指负载均衡设备服务器间快响应时
    间客户端服务器间快响应时间 13042018 Page 205 of 283

    18126 少连接数均衡(Least Connection)
    少连接数均衡算法部中需负载台服务器数记录记录前该服务器正
    处理连接数量新服务连接请求时前请求分配连接数少服务器均衡
    更加符合实际情况负载更加均衡种均衡算法适合长时处理请求服务 FTP
    18127 处理力均衡(CPU存)
    种均衡算法服务请求分配部中处理负荷(根服务器 CPU 型号CPU 数量存
    前连接数等换算成)轻服务器考虑部服务器处理力前网络运行
    状况种均衡算法相说更加精确尤适合运第七层(应层)负载均衡情况

    18128 DNS 响应均衡(Flash DNS)
    均衡算法分处理位置负载均衡设备收客户端域名解析请求
    时间域名解析成相应服务器 IP 址返回客户端客户端先收
    域名解析 IP 址继续请求服务忽略 IP 址响应种均衡策略适合应全局负
    载均衡情况负载均衡没意义
    18129 哈希算法
    致性哈希致性 Hash相参数请求总发提供者某台提供者挂时原发
    该提供者请求基虚拟节点摊提供者会引起剧烈变动
    181210 IP 址散列(保证客户端服务器应关系稳定)
    通理发送方 IP 目 IP 址散列发送方分组(发送目分
    组)统转发相服务器算法客户端系列业务需处理必须服务器反复通信
    时该算法够流(会话)单位保证相客户端通信够直服务器中进行处

    181211 URL 散列
    通理客户端请求 URL 信息散列发送相 URL 请求转发服务器算法 13042018 Page 206 of 283

    1813 LVS
    18131 LVS 原理
    IPVS
    LVS IP 负载均衡技术通 IPVS 模块实现IPVS LVS 集群系统核心软件
    作:安装 Director Server 时 Director Server 虚拟出 IP 址户必须通
    虚拟 IP 址访问服务器虚拟 IP 般称 LVS VIP Virtual IP访问请求
    首先 VIP 达负载调度器然负载调度器 Real Server 列表中选取服务节点响应
    户请求 户请求达负载调度器调度器请求发送提供服务 Real Server 节
    点 Real Server 节点返回数户 IPVS 实现重点技术
    ipvs : 工作核空间户定义策略生效
    ipvsadm 工作户空间户定义理集群服务工具

    ipvs 工作核空间 INPUT 链收户请求某集群服务时 PREROUTING 链
    检查机路表送 INPUT 链进入 netfilter INPUT 链时ipvs 强行请求报文通
    ipvsadm 定义集群服务策略路径改 FORWORD 链报文转发端真实提供服务机 13042018 Page 207 of 283

    18131 LVS NAT 模式

    ①客户端请求发前端负载均衡器请求报文源址 CIP(客户端 IP)面统称 CIP)目
    标址 VIP(负载均衡器前端址面统称 VIP)
    ②负载均衡器收报文发现请求规里面存址客户端请求报文目
    标址改端服务器 RIP 址报文根算法发送出
    ③报文送 Real Server 报文目标址会响应该请求响应报文返
    LVS
    ④然 lvs 报文源址修改机发送客户端
    注意: NAT 模式中Real Server 网关必须指 LVS否报文法送达客户端
    特点:
    1NAT 技术请求报文响应报文需通 LB 进行址改写网站访问量较
    时候 LB 负载均衡调度器较瓶颈般求 1020 台节点
    2需 LB 配置公网 IP 址
    3台部 realserver 服务器网关址必须调度器 LB 网址
    4NAT 模式支持 IP 址端口进行转换户请求端口真实服务器端口致
    优点:

    集群中物理服务器支持 TCPIP 操作系统负载均衡器需合法 IP

    缺点: 13042018 Page 208 of 283

    扩展性限服务器节点(普通 PC 服务器)增长时负载均衡器成整系统瓶颈
    请求包应答包流负载均衡器服务器节点时量数包交汇
    负载均衡器速度会变慢
    18132 LVS DR 模式(局域网改写 mac 址)

    ①客户端请求发前端负载均衡器请求报文源址 CIP目标址 VIP
    ②负载均衡器收报文发现请求规里面存址客户端请求报文源
    MAC 址改 DIP MAC 址目标 MAC 改 RIP MAC 址包发送 RS
    ③RS 发现请求报文中目 MAC 会次报文接收处理完请求报文响应
    报文通 lo 接口送 eth0 网卡直接发送客户端
    注意:需设置 lo 接口 VIP 响应网络 arp 请求
    总结:
    1通调度器 LB 修改数包目 MAC 址实现转发注意源址然 CIP目址
    然 VIP 址
    2请求报文调度器 RS 响应处理报文需调度器 LB发访问量时
    效率高( NAT 模式)
    3 DR 模式通 MAC 址改写机制实现转发 RS 节点调度器 LB
    局域网里面
    4RS 机需绑定 VIP 址 LO 接口(掩码 32 位)需配置 ARP 抑制
    5RS 节点默认网关需配置成 LB直接配置级路网关 RS 直接出网
    13042018 Page 209 of 283

    6 DR 模式调度器仅做 MAC 址改写调度器 LB 改写目标端口 RS
    服务器 VIP 相端口提供服务
    7直接外业务 WEB 等RS IP 公网 IP外服务数库等
    网 IP
    优点:
    TUN(隧道模式)样负载均衡器分发请求应答包通单独路方法返回客户
    端 VSTUN 相VSDR 种实现方式需隧道结构数操作系统做
    物理服务器
    DR 模式效率高配置稍微复杂点访问量特公司
    haproxynginx 取代日10002000W PV者发请求1 万考虑haproxynginx
    缺点:
    RS 节点调度器 LB 局域网里面
    18133 LVS TUN 模式(IP 封装跨网段)

    ①客户端请求发前端负载均衡器请求报文源址 CIP目标址 VIP
    ②负载均衡器收报文发现请求规里面存址客户端请求报文
    首部封装层 IP 报文源址改 DIP目标址改 RIP包发送 RS
    ③RS 收请求报文会首先拆开第层封装然发现里面层 IP 首部目标址
    lo 接口 VIP会处理次请求报文响应报文通 lo 接口送 eth0 网卡直接发送客
    户端
    注意:需设置 lo 接口 VIP 网出现
    13042018 Page 210 of 283

    总结:
    1TUNNEL 模式必须 realserver 机器面绑定 VIP IP 址
    2TUNNEL 模式 vip >realserver 包通信通 TUNNEL 模式网外网通
    信需 lvs vip realserver 网段
    3TUNNEL 模式 realserver 会 packet 直接发 client 会 lvs
    4TUNNEL 模式走隧道模式运维起较难般
    优点:
    负载均衡器负责请求包分发端节点服务器 RS 应答包直接发户减少
    负载均衡器量数流动负载均衡器系统瓶颈处理巨请求量种方
    式台负载均衡器够 RS 进行分发跑公网进行域分发
    缺点:
    隧道模式 RS 节点需合法 IP种方式需服务器支持IP Tunneling(IP
    Encapsulation)协议服务器局限部分 Linux 系统


    18134 LVS FULLNAT 模式
    DR NAT 模式避免问题:LVS RS 必须 VLAN 否
    LVS 法作 RS 网关引发两问题:
    1 VLAN 限制导致运维方便跨 VLAN RS 法接入
    2LVS 水扩展受制约 RS 水扩容时总天单点 LVS 会成瓶颈
    FullNAT 生解决 LVS RS 跨 VLAN 问题跨 VLAN 问题解决LVS RS
    存 VLAN 属关系做 LVS 应 RS解决水扩容问题
    FullNAT 相 NAT 改进 SNATDNAT 基础加种转换转换程: 13042018 Page 211 of 283


    1 包 LVS 转 RS 程中源址客户端 IP 换成 LVS 网 IP网 IP 间
    通交换机跨 VLAN 通信目标址 VIP 修改 RS IP
    2 RS 处理完接受包处理完成返回时目标址修改 LVS ip原址修改 RS
    IP终包返回 LVS 网 IP步受限 VLAN
    3 LVS 收包 NAT 模式修改源址基础 RS 发包中目标址 LVS
    网 IP 改客户端 IP原址修改 VIP
    FullNAT 思想网关机器通信改普通网络通信解决跨 VLAN
    问题采种方式LVS RS 部署 VLAN 限制提高运维部署
    便利性

    总结
    1 FULL NAT 模式需 LBIP realserver ip 网段
    2 full nat 更新 sorce ip 性正常 nat 模式降 10
    1814 Keepalive
    keepalive 起初 LVS 设计专门监控 lvs 服务节点状态加入 vrrp 功
    lvs作服务(nginxhaproxy)高软件VRRP virtual
    router redundancy protocal(虚拟路器冗余协议)缩写VRRP 出现解决静态路
    出现单点障够保证网络间断稳定运行 keepalive 方面具 LVS
    cluster node healthcheck 功方面具 LVS director failover
    1815 Nginx 反代理负载均衡
    普通负载均衡软件 LVS实现功请求数包转发传递负载均衡节
    点服务器接收请求访问负载均衡器客户端真实户反代理13042018 Page 212 of 283

    样反代理服务器接收访问户请求会代理户 重新发起请求代理节点服务器
    数返回客户端户节点服务器访问节点服务器客户端户反代
    理服务器非真实网站访问户
    18151 upstream_module 健康检测
    ngx_http_upstream_module 负载均衡模块实现网站负载均衡功节点健康检
    查upstream 模块允许 Nginx 定义组组节点服务器组时通 proxy_pass 代理方
    式网站请求发送事先定义应 Upstream 组 名字
    upstream 模块
    参数
    参数说明
    weight 服务器权重
    max_fails Nginx 尝试连接端机失败时值配合 proxy_next_upstream
    fastcgi_next_upstream memcached_next_upstream 三参数 Nginx
    接收端服务器返回三参数定义状态码时会请求转发正常工作端服
    务器 404503503max_files1
    fail_timeout max_fails fail_timeout 般会关联果某台 server fail_timeout 时间出现
    max_fails 次连接失败 Nginx 会认已挂掉 fail_timeout 时间
    请求fail_timeout 默认 10smax_fails 默认 1默认情况发生错误认
    服务器挂果 max_fails 设置 0表示取消项检查
    backup 表示前 server 备服务器非 backup 端服务器挂掉忙会分配请

    down 标志服务器永远配合 ip_hash

    upstream lvsServer{
    server 191168111 weight5
    server 19116812282
    server examplecom8080 max_fails2 fail_timeout10s backup
    #域名话需解析哦网记 hosts
    }


    18151 proxy_pass 请求转发
    proxy_pass 指令属 ngx_http_proxy_module 模块模块请求转发台服务器
    实际反代理工作中会通 location 功匹配指定 URI然接收服务匹配 URI
    请求通 proyx_pass 抛定义 upstream 节点池
    location download {
    proxy_pass httpdownloadvedio
    }
    #前端代理节点设置 13042018 Page 213 of 283

    #交端 upstream download 节点
    proxy 模块参数 说明
    proxy_next_upstream 什情况请求传递 upstream
    proxy_limite_rate 限制端服务器读取响应速率
    proyx_set_header 设置 http 请求 header 传端服务器节点:实现代
    理端服务器节点获取访问客户端 ip
    client_body_buffer_size 客户端请求体缓区
    proxy_connect_timeout 代理端节点服务器连接超时时间
    proxy_send_timeout 端节点数回传超时时间
    proxy_read_timeout 设置 Nginx 代理端服务器获取信息时间表示连接成
    功建立Nginx 等端服务器响应时间
    proxy_buffer_size 设置缓区
    proxy_buffers 设置缓区数量
    proyx_busy_buffers_size 设置系统忙时 proxy_buffers 推荐
    proxy_buffers*2
    proxy_temp_file_write_size 指定 proxy 缓存时文件
    1816 HAProxy


    13042018 Page 214 of 283

    19 数库
    1911 存储引擎
    19111 概念
    数库存储引擎数库底层软件组织数库理系统(DBMS)数引擎进行创建查询
    更新删数存储引擎提供存储机制索引技巧锁定水等功
    存储引擎 获特定功现许数库理系统支持种数引
    擎存储引擎: 1 MyIsam 2 InnoDB 3 Memory 4 Archive 5 Federated
    19112 InnoDB(B+树)
    InnoDB 底层存储结构B+树 B树节点应innodbpagepage固定
    般设 16k中非叶子节点键值叶子节点包含完成数

    适场景:
    1)常更新表适合处理重发更新请求
    2)支持事务
    3)灾难中恢复(通 binlog 日志等)
    4)外键约束支持外键
    5)支持动增加列属性 auto_increment 13042018 Page 215 of 283

    19113 TokuDB(Fractal Tree节点带数)
    TokuDB 底层存储结构 Fractal TreeFractal Tree 结构 B+树类似 Fractal Tree
    中 child 指针需指 child 节点外会带 Message Buffer
    Message Buffer FIFO 队列缓存更新操作
    例次插入操作需落某节点 Message Buffer 马返回需搜索叶
    子节点缓存更新会查询时台异步合应应节点中

    TokuDB 线添加索引影响读写操作 非常快写入性 Fractaltree 事务实现优
    势 适访问频率高数历史数档
    19114 MyIASM
    MyIASM MySQL 默认引擎没提供数库事务支持支持行级锁外键
    INSERT(插入) UPDATE(更新)数时写操作需锁定整表效率便会低
    ISAM 执行读取操作速度快占量存存储资源设计初预想数组织
    成固定长度记录序存储ISAM 种静态索引结构
    缺点 支持事务处理
    19115 Memory
    Memory( HEAP)堆存:存存中容创建表 MEMORY 表实际应
    磁盘文件MEMORY 类型表访问非常快数放存中默认
    HASH 索引旦服务关闭表中数会丢失掉 Memory 时支持散列索引 B 树索
    引B树索引部分查询通配查询<>>等操作符方便数挖掘散列索
    引相等较快范围较慢
    1912 索引
    索引(Index)帮助 MySQL 高效获取数数结构常见查询算法序查找二分查找二
    叉排序树查找哈希散列法分块查找衡路搜索树 B 树(Btree) 13042018 Page 216 of 283

    19121 常见索引原
    1选择唯性索引
    1. 唯性索引值唯更快速通该索引确定某条记录
    2常需排序分组联合操作字段建立索引:
    3.常作查询条件字段建立索引
    4.限制索引数目:
    越索引会更新表变浪费时间
    量数量少索引
    6. 果索引值长查询速度会受影响
    量前缀索引
    7. 果索引字段值长值前缀索引
    7.删者少索引
    8 左前缀匹配原非常重原
    10 量选择区分度高列作索引
    区分度公式表示字段重复例
    11 索引列参计算保持列干净:带函数查询参索引
    12 量扩展索引新建索引
    1913 数库三范式
    范式具冗余表结构3 范式具体:
    19131 第范式(1st NF -列分)
    第范式目标确保列原子性果列分数单元(称原子
    单元)满足第范式(1NF)


    19132 第二范式(2nd NF-表描述件事情)
    13042018 Page 217 of 283

    首先满足第范式表中非键列存键部分赖 第二范式求表描述
    件事情

    19133 第三范式(3rd NF- 存非键列传递赖)
    第三范式定义满足第二范式表中列存非键列传递赖键订单编
    号外顾客姓名赖非键顾客编号

    1914 数库事务
    事务(TRANSACTION)作单逻辑工作单元执行系列操作操作作整体起
    系统提交执行执行 事务分割工作逻辑单元
    事务必须具备四属性简称 ACID 属性:
    原子性(Atomicity)
    1 事务完整操作事务步操作分(原子)执行执

    致性(Consistency)
    2 事务完成时数必须处致状态 13042018 Page 218 of 283

    隔离性(Isolation)
    3 数进行修改发事务彼隔离表明事务必须独立应方
    式赖影响事务
    永久性(Durability)
    4 事务完成数库修改永久保持事务日志够保持事务永久性

    1915 存储程(特定功 SQL 语句集)
    组完成特定功 SQL 语句集存储数库中第次编译次调需次
    编译户通指定存储程名字出参数(果该存储程带参数)执行存储
    程数库中重象
    存储程优化思路:
    1 量利 sql 语句代循环例聚合函数求均函数等
    2 中间结果存放时表加索引
    3 少游标sql 集合语言集合运算具较高性 cursors 程运算
    100 万行数进行查询游标需读表 100 万次游标需少量次
    读取
    4 事务越短越sqlserver 支持发操作果事务长者隔离级高会造成
    发操作阻塞死锁导致查询极慢cpu 占率极
    5 trycatch 处理错误异常
    6 查找语句量放循环
    1916 触发器(段动执行程序)
    触发器段动执行程序种特殊存储程触发器普通存储程区:
    触发器某表进行操作时触发诸:updateinsertdelete 操作时候系统
    会动调执行该表应触发器SQL Server 2005 中触发器分两类:DML 触发器
    DDL 触发器中 DDL 触发器会影响种数定义语言语句激发语句 create
    alterdrop 语句
    1917 数库发策略
    发控制般采三种方法分乐观锁悲观锁时间戳
    19171 乐观锁
    乐观锁认户读数时候会写读数悲观锁刚相反觉
    读数库时候刚写刚读数实持种较保守态度时间
    戳加锁通时间戳控制发出现问题 13042018 Page 219 of 283

    19172 悲观锁
    悲观锁读取数时候修改读取数会先读取数加
    锁数读完允许修改部分数者反说修改某条数
    时候允许读取该数等整事务提交释放加锁允
    许户访问部分数
    19173 时间戳
    时间戳数库表中单独加列时间戳TimeStamp次读出时候该字
    段读出写回时候该字段加 1提交前 数库该字段较次果数
    库值话允许保存否允许保存种处理方法然数库系统提供锁
    机制种方法提高数库处理发量
    悲观锁说加锁实分种锁分:排锁(写锁)享锁(读锁)

    1918 数库锁
    19181 行级锁
    行级锁种排锁防止事务修改行语句时Oracle 会动应行级锁:
    1 INSERTUPDATEDELETESELECT … FOR UPDATE [OF columns] [WAIT n | NOWAIT]
    2 SELECT … FOR UPDATE 语句允许户次锁定条记录进行更新
    3 COMMIT ROLLBACK 语句释放锁
    19182 表级锁
    表示前操作整张表加锁实现简单资源消耗较少部分 MySQL 引擎支持常
    MYISAM INNODB 支持表级锁定表级锁定分表享读锁(享锁)表独占写锁
    (排锁)
    19181 页级锁
    页级锁 MySQL 中锁定粒度介行级锁表级锁中间种锁表级锁速度快突行级
    突少速度慢取折衷页级次锁定相邻组记录BDB 支持页级锁
    1919 基 Redis 分布式锁
    1 获取锁时候 setnx(SETNX key val:仅 key 存时set key
    val 字符串返回 1 key 存什做返回 0)加锁锁 value
    值机生成 UUID释放锁时候进行判断 expire 命令锁添
    加超时时间超该时间动释放锁 13042018 Page 220 of 283

    2 获取锁时候调 setnx果返回 0该锁正返回 1 成功获取
    锁 设置获取超时时间超时间放弃获取锁
    3 释放锁时候通 UUID 判断该锁该锁执行 delete 进行锁释放
    19110 分区分表
    分库分表垂直切分水切分两种
    垂直切分(功模块)
    表功模块关系密切程度划分出部署库例会建立定义数
    库 workDB商品数库 payDB户数库 userDB日志数库 logDB 等分
    存储项目数定义表商品定义表户数表日志数表等

    水切分(规划分存储)
    表中数量时该表数某种规例 userID 散列进行
    划分然存储结构相表库


    19111 两阶段提交协议
    分布式事务指会涉操作数库事务分布式系统中节点间物理相互独
    立通网络进行沟通协调 13042018 Page 221 of 283

    XA XOpen DTP 定义交易中间件数库间接口规范(接口函数)交易中间件
    通知数库事务开始结束提交回滚等 XA 接口函数数库厂商提供
    二阶段提交(TwophaseCommit)指计算机网络数库领域基分布式系统
    架构节点进行事务提交时保持致性设计种算法(Algorithm)通常二阶段提
    交称种协议(Protocol))分布式系统中节点然知晓操作时成功
    者失败法知道节点操作成功失败事务跨越节点时保持事
    务 ACID 特性需引入作协调者组件统掌控节点(称作参者)操作结果
    终指示节点否操作结果进行真正提交(更新数写入磁盘等等)
    二阶段提交算法思路概括:参者操作成败通知协调者协调者根参者
    反馈情报决定参者否提交操作中止操作
    191111 准备阶段
    事务协调者(事务理器)参者(资源理器)发送 Prepare 消息参者直接返回
    失败(权限验证失败)执行事务写 redo undo 日志提交达
    种万事俱备欠东风状态
    191112 提交阶段
    果协调者收参者失败消息者超时直接参者发送回滚(Rollback)消息否
    发送提交(Commit)消息参者根协调者指令执行提交者回滚操作释放事务处理
    程中锁资源(注意必须阶段释放锁资源)
    191113 缺点
    步阻塞问题
    1 执行程中参节点事务阻塞型
    单点障
    2 协调者重性旦协调者发生障参者会直阻塞
    数致(脑裂问题)
    3 二阶段提交阶段二中协调者参者发送 commit 请求发生局部网络异
    常者发送 commit 请求程中协调者发生障导致部分参者接受
    commit 请求整分布式系统便出现数部致性现象(脑裂现象)
    二阶段法解决问题(数状态确定)
    4 协调者发出 commit 消息宕机唯接收条消息参者时宕机
    协调者通选举协议产生新协调者条事务状态确定没知道
    事务否已提交 13042018 Page 222 of 283

    19112 三阶段提交协议
    三阶段提交(Threephase commit )三阶段提交协议(Threephase commit
    protocol)二阶段提交(2PC)改进版
    两阶段提交三阶段提交两改动点
    1引入超时机制时协调者参者中引入超时机制
    2第阶段第二阶段中插入准备阶段保证提交阶段前参节点状态
    致说引入超时机制外3PC 2PC 准备阶段次分二样三阶段
    提交 CanCommitPreCommitDoCommit 三阶段
    191121 CanCommit 阶段
    协调者参者发送 commit 请求参者果提交返回 Yes 响应否返回 No 响应
    191122 PreCommit 阶段
    协调者根参者反应情况决定否继续进行两种假协调者
    参者获反馈 Yes 响应会执行事务预执行假参者协调者发送
    No 响应者等超时协调者没接参者响应执行事务中断
    191123 doCommit 阶段
    该阶段进行真正事务提交包含 1协调发送提交请求 2参者提交事务 3参者响应反
    馈( 事务提交完协调者发送 Ack 响应)4协调者确定完成事务
    19113 柔性事务
    191131 柔性事务
    电商领域等互联网场景传统事务数库性处理力暴露出瓶颈分布式
    领域基 CAP 理 BASE 理提出 柔性事务 概念CAP(致性性分
    区容忍性)理家理解次里叙述说 BASE 理 CAP 理基
    础延伸包括 基(Basically Available)柔性状态(Soft State)终致性
    (Eventual Consistency)
    通常说柔性事务分:两阶段型补偿型异步确保型努力通知型种
    两阶段型
    1 分布式事务两阶段提交应技术 XAJTAJTS分布式环境事务处理
    典型模式
    补偿型
    2 TCC 型事务(TryConfirmCancel)补偿型 13042018 Page 223 of 283

    WSBusinessActivity 提供种基补偿 longrunning 事务处理模型服务器 A 发起事务
    服务器 B 参事务服务器 A 事务果执行利事务 A 先行提交果事务 B 执行
    利事务 B 提交整事务算完成果事务 B 执行失败事务 B 身回滚时
    事务 A 已提交需执行补偿操作已提交事务 A 执行操作作反操作恢
    复未执行前事务 A 状态样 SAGA 事务模型牺牲定隔离性致性
    提高 longrunning 事务性

    异步确保型
    3 通系列步事务操作变基消息执行异步操作 避免分布式事务中步
    阻塞操作影响

    努力通知型(次尝试)
    4 分布式事务中求低种 通消息中间件实现 前面异步确保型操作
    点 消息 MQ Server 投递消费者 允许达重试次数正常
    结束事务 13042018 Page 224 of 283

    19114 CAP
    CAP 原称 CAP 定理指分布式系统中 Consistency(致性) Availability
    (性)Partition tolerance(分区容错性)三者兼
    致性(C):
    1 分布式系统中数备份时刻否样值(等节点访问份
    新数副)
    性(A):
    2 集群中部分节点障集群整体否响应客户端读写请求(数更新具备
    高性)
    分区容忍性(P):
    3 实际效果言分区相通信时限求系统果时限达成数致性
    意味着发生分区情况必须前操作 C A 间做出选择


    13042018 Page 225 of 283

    20 致性算法
    2011 Paxos
    Paxos 算法解决问题分布式系统某值(决议)达成致典型场景
    分布式数库系统中果节点初始状态致节点执行相操作序列
    致状态保证节点执行相命令序列需条指令执
    行致性算法保证节点指令致zookeeper zab 算法该算法
    实现 Paxos 算法中三种角色:ProposerAcceptorLearners
    Paxos 三种角色:ProposerAcceptorLearners
    Proposer:
    Proposer 发提案半数 Acceptor 接受Proposer 认该提案里 value 选定

    Acceptor:
    Acceptor 接受某提案Acceptor 认该提案里 value 选定
    Learner:
    Acceptor 告诉 Learner value 选定Learner 认 value 选定
    Paxos 算法分两阶段具体:
    阶段(准 leader 确定 ):
    (a) Proposer 选择提案编号 N然半数 Acceptor 发送编号 N Prepare 请求
    (b) 果 Acceptor 收编号 N Prepare 请求 N 该 Acceptor 已响应
    Prepare 请求编号会已接受编号提案(果话)作响
    应反馈 Proposer时该 Acceptor 承诺接受编号 N 提案
    阶段二(leader 确认):
    (a) 果 Proposer 收半数 Acceptor 发出编号 N Prepare 请求响应
    会发送针[NV]提案 Accept 请求半数 Acceptor注意:V 收响应中
    编号提案 value果响应中包含提案 V Proposer 决定
    (b) 果 Acceptor 收针编号 N 提案 Accept 请求该 Acceptor 没编号
    N Prepare 请求做出响应接受该提案
    2012 Zab

    ZAB( ZooKeeper Atomic Broadcast ZooKeeper 原子消息广播协议)协议包括两种基模
    式:崩溃恢复消息广播 13042018 Page 226 of 283

    1 整服务框架启动程中 Leader 服务器出现网络中断崩溃退出重启等异常情
    况时ZAB 会进入恢复模式选举产生新 Leader 服务器
    2 选举产生新 Leader 服务器时集群中已半机器该 Leader 服务器完成
    状态步ZAB 协议会退出崩溃恢复模式进入消息广播模式
    3 新服务器加入集群中果时集群中已存 Leader 服务器负责进行消
    息广播新加入服务器会动进入数恢复模式找 Leader 服务器进行数
    步然起参消息广播流程中
    实致历三步骤:
    1崩溃恢复: Leader 选举程
    2数步:Leader 服务器服务器进行数步
    3消息广播:Leader 服务器数发送服务器
    说明:zookeeper 章节该协议详细描述
    2013 Raft
    Paxos Raft 强调易懂(Understandability)Raft Paxos 样保证 n2+1 节
    点正常够提供服务raft 算法流程分三子问题:选举(Leader election)日志复制
    (Log replication)安全性(Safety)三子问题
    20131 角色
    Raft 集群中节点分三种状态:Leader Follower Candidate理然种状态负
    责务样Raft 运行时提供服务时候存 Leader Follower 两种状态
    Leader(领导者日志理)
    负责日志步理处理客户端请求 Follower 保持 heartBeat 联系
    Follower(追者日志步)
    刚启动时节点Follower状态响应Leader日志步请求响应Candidate请求
    请求 Follower 事务转发 Leader
    Candidate(候选者负责选票)
    负责选举投票Raft 刚启动时节点 Follower 转 Candidate 发起选举选举出
    Leader Candidate 转 Leader 状态
    20132 Term(期)
    Raft 中理解周期(第届期)概念 Term 作周期
    Term 连续递增编号轮选举 Term 周期 Term 中产生
    Leader某节点收请求中 Term 前 Term 时拒绝该请求 13042018 Page 227 of 283

    20133 选举(Election)
    选举定时器
    Raft 选举定时器触发节点选举定时器时间样开始时状态
    Follower 某节点定时器触发选举 Term 递增状态 Follower 转 Candidate节点
    发起 RequestVote RPC 请求时候三种情况发生:
    1:该 RequestVote 请求接收 n2+1(半数)节点投票 Candidate 转 Leader
    节点发送 heartBeat 保持 Leader 正常运转
    2:期间果收节点发送 AppendEntries RPC 请求该节点 Term
    前节点转 Follower否保持 Candidate 拒绝该请求
    3:Election timeout 发生 Term 递增重新发起选举
    Term 期间节点投票次 Candidate 存时会出现
    Candidate 发起选举存接收投票数半问题时 Candidate Term
    递增重启定时器重新发起选举节点中定时器时间机会次
    存 Candidate 时发起投票问题
    Raft 中接收客户端日志(事务请求)先该日志追加 Log 中然通
    heartbeat 该 Entry 步 FollowerFollower 接收日志记录日志然 Leader 发送
    ACK Leader 收数(n2+1)Follower ACK 信息该日志设置已提交追加
    磁盘中通知客户端 heartbeat 中 Leader 通知 Follower 该日志存储
    磁盘中
    20134 安全性(Safety)
    安全性保证节点执行相序列安全机制某 Follower 前 Leader commit
    Log 时变稍该 Follower 会倍选举 Leader时新 Leader 会新
    Log 覆盖先前已 committed Log导致节点执行序列Safety 保证选举出
    Leader 定包含先前 commited Log 机制
    选举安全性(Election Safety): Term 选举出 Leader
    Leader 完整性(Leader Completeness):里说完整性指 Leader 日志完整性
    Raft 选举阶段 Term 判断保证完整性:请求投票该 Candidate Term 较
    Term 相 Index 更投票该节点容易变成 leader
    20135 raft 协议 zab 协议区
    相点
    采 quorum 确定整系统致性 quorum 般实现集群中半数服务器
    zookeeper 里提供带权重 quorum 实现
    leader 发起写操作
    采心跳检测存活性 13042018 Page 228 of 283

    leader election 采先先投票方式

    zab epoch count 组合唯表示值 raft term index
    zab follower 投票 leader 前必须 leader 日志达成致 raft follower
    简单说谁 term 高投票谁
    raft 协议心跳 leader follower zab 协议相反
    raft 协议数单 leader follower(成 leader 条件拥新 log)
    zab 协议 discovery 阶段 prospective leader 需 log 更新 quorum 里面
    新 log然 synchronization 阶段 quorum 里机器 log 步致
    2014 NWR
    N:分布式存储系统中少份备份数
    W:代表次成功更新操作求少 w 份数写入成功
    R: 代表次成功读数操作求少 R 份数成功读取
    NWR 值组合会产生致性效果 W+R>N 时候整系统客户端讲保
    证强致性果 R+WN3表示象必须三副(Replica)W2 表示数修改操作
    (Write)需 3 Replica 中 2 面完成返回R2 表示三象中读取 2
    数象返回


    2015 Gossip
    Gossip 算法称反熵(AntiEntropy)熵物理学概念代表杂乱章反熵
    杂乱章中寻求致充分说明 Gossip 特点:界网络中节点机13042018 Page 229 of 283

    节点通信番杂乱章通信终节点状态会达成致节点
    知道节点仅知道邻居节点节通网络连通终
    状态致然疫情传播特点
    2016 致性 Hash
    致性哈希算法(Consistent Hashing Algorithm)种分布式算法常负载均衡
    Memcached client 选择种算法解决 keyvalue 均匀分配众 Memcached server
    问题取代传统取模操作解决取模操作法应增删 Memcached Server 问题
    (增删 server 会导致 key get 操作时分配数真正存储 server命中率会急剧
    降)
    20161 致性 Hash 特性
    衡性(Balance):衡性指哈希结果够分布缓中样
    缓空间利
    单调性(Monotonicity):单调性指果已容通哈希分派相应缓中
    新缓加入系统中哈希结果应够保证原已分配容映射新缓
    中会映射旧缓集合中缓区容易面简单求余算法
    hash(object)N 难满足单调性求
    滑性(Smoothness):滑性指缓存服务器数目滑改变缓存象滑改变致

    20162 致性 Hash 原理
    1建构环形 hash 空间:
    1 考虑通常 hash 算法 value 映射 32 key 值 0~2^321 次方
    数值空间空间想象成首( 0 )尾( 2^321 )相接圆环
    2需缓存容(象)映射 hash 空间
    2 接考虑 4 象 object1~object4 通 hash 函数计算出 hash 值 key 环分

    3服务器(节点)映射 hash 空间
    3 Consistent hashing 基思想象 cache 映射 hash 数值空间中
    相 hash 算法般方法 服务器(节点) 机器 IP 址者机器名作
    hash 输入
    4象映射服务节点
    4 现服务节点象已通 hash 算法映射 hash 数值空间中首先确定象
    hash 值环位置位置环时针行走第台遇服务器应该定位
    服务器 13042018 Page 230 of 283


    考察 cache 变动
    5 通 hash 然求余方法带问题满足单调性 cache 变动时
    cache 会失效
    51 移 cache:考虑假设 cache B 挂掉根面讲映射方法时受影响仅
    cache B 逆时针遍历直 cache ( cache C )间象
    52 添加 cache:考虑添加台新 cache D 情况时受影响仅 cache
    D 逆时针遍历直 cache 间象象重新映射 cache D
    虚拟节点
    hash 算法保证绝衡果 cache 较少话象均匀映射 cache
    解决种情况 consistent hashing 引入虚拟节点概念定义:
    虚拟节点( virtual node )实际节点 hash 空间复制品( replica )实际节点应
    干虚拟节点应数成复制数虚拟节点 hash 空间中 hash
    值排列
    仅部署 cache A cache C 情况例现引入虚拟节点设置复制数 2
    意味着会存 4 虚拟节点 cache A1 cache A2 代表 cache A cache C1
    cache C2 代表 cache C 时象虚拟节点映射关系:
    objec1>cache A2 objec2>cache A1 objec3>cache C1 objec4>cache C2
    象 object1 object2 映射 cache A object3 object4 映射 cache
    C 衡性提高
    引入虚拟节点映射关系 { 象 > 节点 } 转换 { 象 > 虚拟节点 } 查询物体
    cache 时映射关系图 示 13042018 Page 231 of 283






    13042018 Page 232 of 283

    21 JAVA 算法
    2111 二分查找
    折半查找求查找序列序次取中间位置值查关键字较果中间位置
    值查关键字前半部分循环查找程果中间位置值查关键字
    半部分循环查找程直查找止否序列中没查关键字
    public static int biSearch(int []arrayint a){
    int lo0
    int hiarraylength1
    int mid
    while(lo mid(lo+hi)2中间位置
    if(array[mid]a){
    return mid+1
    }else if(array[mid] lomid+1
    }else{ 左查找
    himid1
    }
    }
    return 1
    }

    2112 泡排序算法
    (1)较前相邻二数果前面数面数二数交换
    (2)样数组第 0 数 N1 数进行次遍历数沉数组第
    N1 位置
    (3)NN1果 N 0 重复前面二步否排序完成
    public static void bubbleSort1(int [] a int n){
    int i j 13042018 Page 233 of 283

    for(i0 i for(j1 j if(a[j1] > a[j]){前面数字面数字交换
    交换 a[j1] a[j]
    int temp
    temp a[j1]
    a[j1] a[j]
    a[j]temp
    }
    }
    }
    }

    2113 插入排序算法
    通构建序序列未排序数已排序序列中前扫描找相应位置插入
    插入排序非常类似整扑克牌开始摸牌时左手空牌面放桌接着次
    桌摸起张牌插入左手牌中正确位置找张牌正确位置
    手中已牌右左进行较什时候左手中牌排序
    果输入数组已排序话插入排序出现佳情况运行时间输入规模线性函
    数果输入数组逆序排列出现坏情况均情况坏情况样时间代价(n2)




    public void sort(int arr[]) 13042018 Page 234 of 283

    {
    for(int i 1 i {
    插入数
    int insertVal arr[i]
    插入位置(准备前数较)
    int index i1
    果插入数插入数
    while(index>0&&insertVal {
    arr[index] 移动
    arr[index+1]arr[index]
    index 前移动
    index
    }
    插入数放入合适位置
    arr[index+1]insertVal
    }
    }
    2114 快速排序算法
    快速排序原理:选择关键值作基准值基准值左边序列(般序)
    基准值右边(般序)般选择序列第元素
    次循环:前较基准值值较果基准值交换位置果没
    继续较直找第基准值值交换找值前开始
    较果基准值交换位置果没继续较直找第基准值
    值交换直前较索引>前较索引结束第次循环时基准值
    说左右两边序
    public void sort(int[] aint lowint high){
    int start low
    int end high 13042018 Page 235 of 283

    int key a[low]
    while(end>start){
    前较
    while(end>start&&a[end]>key)
    果没关键值较直关键值交换位置然前较
    end
    if(a[end] int temp a[end]
    a[end] a[start]
    a[start] temp
    }
    前较
    while(end>start&&a[start]果没关键值较直关键值交换位置
    start++
    if(a[start]>key){
    int temp a[start]
    a[start] a[end]
    a[end] temp
    }
    时第次循环较结束关键值位置已确定左边值关键值右边
    值关键值两边序样进行面递调
    }

    if(start>low) sort(alowstart1)左边序列第索引位置关键值索引1
    if(end }
    }

    13042018 Page 236 of 283



    2111 希尔排序算法
    基思想:先整排序记录序列分割成干子序列分进行直接插入排序整序列
    中记录基序时全体记录进行次直接插入排序
    1 操作方法:
    选择增量序列 t1t2…tk中 ti>tjtk1
    2 增量序列数 k序列进行 k 趟排序
    3 趟排序根应增量 ti排序列分割成干长度 m 子序列分子表进
    行直接插入排序仅增量子 1 时整序列作表处理表长度整序列长

    13042018 Page 237 of 283


    private void shellSort(int[] a) {
    int dk alength2
    while( dk > 1 ){
    ShellInsertSort(a dk)
    dk dk2
    }
    }
    private void ShellInsertSort(int[] a int dk) {
    类似插入排序插入排序增量 1里增量 dk 1 换成 dk
    for(int idki if(a[i] int j
    int xa[i]x 插入元素
    a[i]a[idk]
    for(jidk j>0 && x通循环逐移位找插入位置
    a[j+dk]a[j]
    }
    a[j+dk]x插入
    }
    }
    }

    2112 排序算法
    (Merge)排序法两(两)序表合成新序表排序序列
    分干子序列子序列序然序子序列合整体序序列 13042018 Page 238 of 283


    public class MergeSortTest {
    public static void main(String[] args) {
    int[] data new int[] { 5 3 6 2 1 9 4 8 7 }
    print(data)
    mergeSort(data)
    Systemoutprintln(排序数组:)
    print(data)
    }
    public static void mergeSort(int[] data) {
    sort(data 0 datalength 1)
    }
    public static void sort(int[] data int left int right) {
    if (left > right)
    return
    找出中间索引
    int center (left + right) 2
    左边数组进行递
    sort(data left center)
    右边数组进行递
    sort(data center + 1 right)

    merge(data left center right)
    print(data)
    }
    **
    * 两数组进行前面 2 数组已序然序 13042018 Page 239 of 283

    *
    * @param data
    * 数组象
    * @param left
    * 左数组第元素索引
    * @param center
    * 左数组元素索引center+1 右数组第元素索引
    * @param right
    * 右数组元素索引
    *
    public static void merge(int[] data int left int center int right) {
    时数组
    int[] tmpArr new int[datalength]
    右数组第元素索引
    int mid center + 1
    third 记录时数组索引
    int third left
    缓存左数组第元素索引
    int tmp left
    while (left < center && mid < right) {
    两数组中取出放入时数组
    if (data[left] < data[mid]) {
    tmpArr[third++] data[left++]
    } else {
    tmpArr[third++] data[mid++]
    }
    }
    剩余部分次放入时数组(实际两 while 会执行中)
    while (mid < right) {
    tmpArr[third++] data[mid++] 13042018 Page 240 of 283

    }
    while (left < center) {
    tmpArr[third++] data[left++]
    }
    时数组中容拷贝回原数组中
    (原 leftright 范围容复制回原数组)
    while (tmp < right) {
    data[tmp] tmpArr[tmp++]
    }
    }
    public static void print(int[] data) {
    for (int i 0 i < datalength i++) {
    Systemoutprint(data[i] + \t)
    }
    Systemoutprintln()
    }
    }

    2113 桶排序算法
    桶排序基思想: 数组 arr 划分 n 相子区间(桶)子区间排序
    合 计数排序桶排序种特殊情况计数排序成桶里元素情况
    1找出排序数组中值 max值 min
    2 动态数组 ArrayList 作桶桶里放元素 ArrayList 存储桶数量(max
    min)arrlength+1
    3遍历数组 arr计算元素 arr[i] 放桶
    4桶排序
    public static void bucketSort(int[] arr){

    int max IntegerMIN_VALUE
    int min IntegerMAX_VALUE
    for(int i 0 i < arrlength i++){ 13042018 Page 241 of 283

    max Mathmax(max arr[i])
    min Mathmin(min arr[i])
    }
    创建桶
    int bucketNum (max min) arrlength + 1
    ArrayList> bucketArr new ArrayList<>(bucketNum)
    for(int i 0 i < bucketNum i++){
    bucketArradd(new ArrayList())
    }
    元素放入桶
    for(int i 0 i < arrlength i++){
    int num (arr[i] min) (arrlength)
    bucketArrget(num)add(arr[i])
    }
    桶进行排序
    for(int i 0 i < bucketArrsize() i++){
    Collectionssort(bucketArrget(i))
    }
    }

    2114 基数排序算法
    较数值(正整数)统样数位长度数位较短数前面补零然低位
    开始次进行次排序样低位排序直高位排序完成数列变成序序

    public class radixSort {
    inta[]{4938659776132749783412645462999854101561718233415352
    55351}
    public radixSort(){
    sort(a)
    for(inti0i Systemoutprintln(a[i])
    }
    }
    public void sort(int[] array){
    首先确定排序趟数
    int maxarray[0]
    for(inti1i if(array[i]>max){ 13042018 Page 242 of 283

    maxarray[i]
    }
    }
    int time0
    判断位数
    while(max>0){
    max10
    time++
    }
    建立 10 队列
    List queuenewArrayList()
    for(int i0i<10i++){
    ArrayListqueue1new ArrayList()
    queueadd(queue1)
    }
    进行 time 次分配收集
    for(int i0i 分配数组元素
    for(intj0j 数字第 time+1 位数
    int xarray[j](int)Mathpow(10i+1)(int)Mathpow(10 i)
    ArrayListqueue2queueget(x)
    queue2add(array[j])
    queueset(x queue2)
    }
    int count0元素计数器
    收集队列元素
    for(int k0k<10k++){
    while(queueget(k)size()>0){
    ArrayListqueue3queueget(k)
    array[count]queue3get(0)
    queue3remove(0)
    count++
    }
    }
    }
    }
    }
    13042018 Page 243 of 283

    2115 剪枝算法
    搜索算法中优化中剪枝通某种判断避免必遍历程形象说
    剪搜索树中某枝条称剪枝应剪枝优化核心问题设计剪枝判断方法
    确定枝条应舍弃枝条应保留方法

    2116 回溯算法
    回溯算法实际类似枚举搜索尝试程搜索尝试程中寻找问题解发现
    已满足求解条件时回溯返回尝试路径
    2117 短路径算法
    某顶点出发图边达顶点路径中边权值条路径做
    短路径解决短路问题算法Dijkstra 算法BellmanFord 算法Floyd 算法 SPFA
    算法等
    2118 子数组算法

    2119 长公子序算法
    21110 生成树算法
    现假设实际问题: n 城市中建立通信网络连通 n 城市需
    布置 n1 条通信线路时候需考虑成低情况建立通信网?
    引入连通图解决遇问题n 城市图 n 顶点然边表示
    两城市通信线路条边权重搭建条线路需成现 n
    顶点连通网建立生成树颗生成树作通信网构造连
    通网花成时搭建该连通网生成树称生成树 13042018 Page 244 of 283

    构造生成树算法利生成树种性质:MST 性质(假设
    N(V{E})连通网U 顶点集 V 非空子集果(uv)条具权值边
    中 u 属 Uv 属 VU必定存颗包含边(uv)生成树)面介绍两种
    MST 性质生成生成树算法:普里姆算法克鲁斯卡尔算法


    13042018 Page 245 of 283

    22 数结构
    2211 栈(stack)
    栈(stack)限制插入删位置进行表该位置表末端做栈顶
    (top)进先出(LIFO)栈基操作 push(进栈) pop(出栈)两种
    前者相插入者相删元素

    2212 队列(queue)
    队列种特殊线性表特殊处允许表前端(front)进行删操作表
    端(rear)进行插入操作栈样队列种操作受限制线性表进行插入操作端称
    队尾进行删操作端称队头

    2213 链表(Link)
    链表种数结构数组级Java 中 ArrayList实现原理数组
    LinkedList 实现原理链表链表进行循环遍历时效率高插入删时优势明显 13042018 Page 246 of 283


    2214 散列表(Hash Table)
    散列表(Hash table哈希表)种查找算法链表树等算法散列表算法
    查找时需进行系列关键字(关键字数元素中某数项值标识数
    元素)较操作
    散列表算法希量做较通次存取查找数元素必
    须数元素存储位置关键字( key 表示)间建立确定应关系
    关键字散列表中唯存储位置相应查找时根应关系找定
    关键字散列表中位置种应关系称散列函数( h(key)表示)
    构造散列函数方法:
    (1)直接定址法: 取关键字关键字某线性函数值散列址
    :h(key) key h(key) a * key + b中 a b 常数

    (2)数字分析法
    (3)方取值法: 取关键字方中间位散列址
    (4)折叠法:关键字分割成位数相部分然取部分叠加作散列址
    (5)留余数法:取关键字某散列表表长 m 数 p 余数散列址
    :h(key) key MOD p p ≤ m
    (6)机数法:选择机函数取关键字机函数值散列址
    :h(key) random(key)
    2215 排序二叉树
    首先果普通二叉树节点满足:左子树节点值根节点值右子树节点值
    根节点值样二叉树排序二叉树
    22151 插入操作
    首先根节点开始找插入位置(新节点父节点)具体流程:新节点
    前节点较果相表示已存重复插入果前节点左子树中13042018 Page 247 of 283

    寻找果左子树空前节点找父节点新节点插入前节点左子树果
    前节点右子树中寻找果右子树空前节点找父节点新节点插入
    前节点右子树

    22152 删操作
    删操作分三种情况删节点子节点删节点子节点删
    节点两子节点
    1 删节点子节点直接删父节点该子节点置空
    2 删节点子节点换删节点子节点
    3 删节点两子节点首先找该节点换节点(右子树中节点)
    接着换删节点换节点然删换节点 13042018 Page 248 of 283


    22153 查询操作
    查找操作流程:先根节点较果相返回果根节点左子树中
    递查找果根节点右子树中递查找排序二叉树中容易获取
    (右深子节点)(左深子节点)值

    2216 红黑树
    RB Tree全称 RedBlack Tree称红黑树种特殊二叉查找树红黑树
    节点存储位表示节点颜色红(Red)黑(Black)
    22161 红黑树特性
    (1)节点者黑色者红色
    (2)根节点黑色
    (3)叶子节点(NIL)黑色 [注意:里叶子节点指空(NIL NULL)叶子节点]
    (4)果节点红色子节点必须黑色
    (5)节点该节点子孙节点路径包含相数目黑节点
    22161 左旋
    x 进行左旋意味着x 右孩子设x 父亲节点 x 变成左节点(x
    成 z 左孩子) 左旋中左意味着旋转节点变成左节点 13042018 Page 249 of 283



    LEFTROTATE(T x)
    y ← right[x] 前提:里假设 x 右孩子 y面开始正式操作
    right[x] ← left[y] y 左孩子 设 x 右孩子 β设 x 右孩子
    p[left[y]] ← x x 设 y 左孩子父亲 β父亲设 x
    p[y] ← p[x] x 父亲 设 y 父亲
    if p[x] nil[T]
    then root[T] ← y 情况 1:果 x 父亲 空节点 y 设根节点
    else if x left[p[x]]
    then left[p[x]] ← y 情况 2:果 x 父节点左孩子 y 设x 父节点
    左孩子
    else right[p[x]] ← y 情况 3:(x 父节点右孩子) y 设x 父节点右孩

    left[y] ← x x 设 y 左孩子
    p[x] ← y x 父节点 设 y


    22161 右旋
    x 进行右旋意味着x 左孩子设x 父亲节点 x 变成右节点(x
    成 y 右孩子) 右旋中右意味着旋转节点变成右节点 13042018 Page 250 of 283


    RIGHTROTATE(T y)
    x ← left[y] 前提:里假设 y 左孩子 x面开始正式操作
    left[y] ← right[x] x 右孩子 设 y 左孩子 β设 y 左孩子
    p[right[x]] ← y y 设 x 右孩子父亲 β父亲设 y
    p[x] ← p[y] y 父亲 设 x 父亲
    if p[y] nil[T]
    then root[T] ← x 情况 1:果 y 父亲 空节点 x 设根节点
    else if y right[p[y]]
    then right[p[y]] ← x 情况 2:果 y 父节点右孩子 x 设y 父节
    点左孩子
    else left[p[y]] ← x 情况 3:(y 父节点左孩子) x 设y 父节点左孩

    right[x] ← y y 设 x 右孩子
    p[y] ← x y 父节点 设 x
    22161 添加
    第步 红黑树作颗二叉查找树节点插入
    第二步:插入节点着色红色
    根插入节点父节点情况节点 z 着色红色节点插入二叉树划分三
    种情况处理
    ① 情况说明:插入节点根节点
    处理方法:直接节点涂黑色
    ② 情况说明:插入节点父节点黑色
    处理方法:什需做节点插入然红黑树 13042018 Page 251 of 283

    ③ 情况说明:插入节点父节点红色种情况插入节点定存非空祖父节点
    进步讲插入节点定存叔叔节点(叔叔节点空视存空节
    点身黑色节点)理解点叔叔节点情况种情况进步划分 3
    种情况(Case)

    第三步 通系列旋转着色等操作重新成颗红黑树
    22162 删
    第步:红黑树作颗二叉查找树节点删
    删常规二叉查找树中删节点方法样分 3 种情况:
    ① 删节点没子叶节点直接该节点删 OK
    ② 删节点子直接删该节点该节点唯子节点顶位置
    ③ 删节点两子先找出继节点然继节点容复制
    该节点容删继节点
    第二步:通旋转重新着色等系列修正该树重新成棵红黑树
    第步中删节点会违背红黑树特性需通旋转重新着色修正
    该树重新成棵红黑树
    选择重着色 3 种情况
    ① 情况说明:x 红+黑节点
    处理方法:直接 x 设黑色结束时红黑树性质全部恢复
    ② 情况说明:x 黑+黑节点 x 根
    处理方法:什做结束时红黑树性质全部恢复
    ③ 情况说明:x 黑+黑节点 x 根
    处理方法:种情况划分 4 种子情况 4 种子情况表示: 13042018 Page 252 of 283


    参考:httpswwwjianshucomp038585421b73
    代码实现:httpswwwcnblogscomskywang12345p3624343html


    2217 BTREE
    Btree 衡路查找树棵 m 阶 Btree (m 叉树)特性(中 ceil(x)取限
    函数):
    1 树中结点 m 孩子
    2 根结点叶子结点外结点少 ceil(m 2)孩子
    3 根结点叶子结点少 2 孩子(特殊情况:没孩子根结点根结点叶子
    结点整棵树根节点)
    4 叶子结点出现层叶子结点包含关键字信息(做外部结点查询
    失败结点实际结点存指结点指针 null)
    5 非终端结点中包含 n 关键字信息: (nP0K1P1K2P2KnPn)
    中:
    a) Ki (i1n)关键字关键字序排序 K(i1)< Ki
    b) Pi 指子树根接点指针 P(i1)指子树种结点关键字均 Ki K(i
    1)
    c) 关键字数 n 必须满足: ceil(m 2)1 < n < m1
    13042018 Page 253 of 283


    棵 m 阶 B+tree m 阶 Btree 差异:
    1 n 棵子树结点中含 n 关键字 (Btree n 棵子树 n1 关键字)
    2叶子结点中包含全部关键字信息指含关键字记录指针叶子结点
    身关键字序链接 (Btree 叶子节点没包括全部需查找信息)
    3非终端结点成索引部分结点中仅含子树根结点中()关键字
    (Btree 非终节点包含需查找效信息)

    参考:httpswwwjianshucomp1ed61b4cca12
    13042018 Page 254 of 283

    2218 位图
    位图原理 bit 标识数字否存采 bit 存储数样
    节省空间 bitmap 常数结构 Bloom Filter 中重复整数
    排序等等bitmap 通常基数组实现数组中元素成系列二进制数元素
    组成更二进制集合
    httpswwwcnblogscompolly333p4760275html



    13042018 Page 255 of 283

    23 加密算法
    2311 AES
    高级加密标准(AESAdvanced Encryption Standard)常见称加密算法(微信程序加密传
    输加密算法)称加密算法加密解密相密钥具体加密流程
    图:

    2312 RSA
    RSA 加密算法种典型非称加密算法基数式分解数学难题应广
    泛非称加密算法
    非称加密通两密钥(公钥私钥)实现数加密解密公钥加密私钥
    解密

    13042018 Page 256 of 283


    2313 CRC
    循环冗余校验(Cyclic Redundancy Check CRC)种根网络数包电脑文件等数产生简
    短固定位数校验码种散列函数检测校验数传输者保存出现错误
    利法余数原理作错误侦测
    2314 MD5
    MD5 常常作文件签名出现载文件时候常常会文件页面附带扩展
    名MD5 文者行字符行字符整文件作原数通 MD5 计算值
    载文件检查文件 MD5 信息软件载文件进行次计算两次结果
    确保载文件准确性 种常见途网站敏感信息加密户名密码
    支付签名等等着 https 技术普现网站广泛采前台明文传输台MD5 加密
    (偏移量)方式保护敏感数保护站点数安全

    13042018 Page 257 of 283

    24 分布式缓存
    2411 缓存雪崩
    缓存雪崩简单理解:原缓存失效新缓存未期间原应该访问缓存请求
    查询数库数库 CPU 存造成巨压力严重会造成数库宕机形成系列
    连锁反应造成整系统崩溃般三种处理办法:
    1 般发量特时候解决方案加锁排队
    2 缓存数增加相应缓存标记记录缓存否失效果缓存标记失效更新数缓

    3 key 设置缓存失效时间
    2412 缓存穿透
    缓存穿透指户查询数数库没然缓存中会样导致户查询时候
    缓存中找次数库查询遍然返回空(相进行两次查询)样请
    求绕缓存直接查数库常提缓存命中率问题
    种方法效解决缓存穿透问题常见采布隆滤器存数哈
    希足够 bitmap 中定存数会 bitmap 拦截掉避免底层存
    储系统查询压力外更简单粗暴方法果查询返回数空(数
    存系统障)然空结果进行缓存期时间会短长超五分钟
    通直接设置默认值存放缓存样第二次缓中获取值会继续访问数库
    2413 缓存预热
    缓存预热系统线相关缓存数直接加载缓存系统样避免户请求时候
    先查询数库然数缓存问题户直接查询事先预热缓存数
    2414 缓存更新
    缓存更新缓存服务器带缓存失效策略外(Redis 默认 6 中策略供选择)
    根具体业务需求进行定义缓存淘汰常见策略两种:
    (1)定时清理期缓存
    (2)户请求时判断请求缓存否期期话底层系统新数
    更新缓存
    2415 缓存降级
    访问量剧增服务出现问题(响应时间慢响应)非核心服务影响核心流程性时然
    需保证服务损服务系统根关键数进行动降级配置开
    关实现工降级降级终目保证核心服务损服务法降级
    (加入购物车结算)
    13042018 Page 258 of 283





    13042018 Page 259 of 283

    25 Hadoop
    2511 概念
    数解决方案提供套分布式系统基础架构 核心容包含 hdfs
    mapreducehadoop20 引入 yarn
    hdfs 提供数存储mapreduce 方便数计算
    1 hdfs 应 namenode datanode namenode 负责保存元数基信息
    datanode 直接存放数身
    2 mapreduce 应 jobtracker tasktracker jobtracker 负责分发务tasktracker 负
    责执行具体务
    3 应 masterslave 架构namenode jobtracker 应该应 master datanode
    tasktracker 应该应 slave
    2512 HDFS
    25121 Client
    Client(代表 户) 通 NameNode DataNode 交互访问 HDFS 中 文件 Client 提供
    类似 POSIX 文件系统接口供户调
    25122 NameNode
    整 Hadoop 集群中 NameNode 整系统 总 负责理 HDFS 目
    录树相关文件元数信息 信息 fsimage( HDFS 元数镜文件)
    editlog(HDFS 文件改动日志)两文件形式存放磁盘 HDFS 重启时重新构造出
    外 NameNode 负责监控 DataNode 健康状态 旦发现某 DataNode 宕
    掉该 DataNode 移出 HDFS 重新备份面数
    25123 Secondary NameNode
    Secondary NameNode 重务 NameNode 元数进行热备份 定期合
    fsimage edits 日志 传输 NameNode 里需注意减 NameNode 压
    力 NameNode 会合 fsimage edits 文件存储磁盘 交
    Secondary NameNode 完成
    25124 DataNode
    般言 Slave 节点安装 DataNode 负责实际数存储 数信息定期
    汇报 NameNode DataNode 固定 block 基单位组织文件容 默认情况
    block 64MB 户传文件 HDFS 时 该文件会切分成干 block
    分存储 DataNode 时保证数 会 block 流水线方式写13042018 Page 260 of 283

    干(默认 3该参数配置) DataNode 种文件切割存储程户
    透明
    2513 MapReduce
    HDFS 样Hadoop MapReduce 采 MasterSlave(MS)架构具体图示
    组件组成:ClientJobTrackerTaskTracker Task 面分组件
    进行介绍

    25131 Client
    户编写 MapReduce 程序通 Client 提交 JobTracker 端 时 户通 Client 提
    供接口查作业运行状态 Hadoop 部作业(Job) 表示 MapReduce 程序
    MapReduce 程序应干作业作业会分解成干 MapReduce 务
    (Task)
    25132 JobTracker
    JobTracker 负责资源监控作业调度JobTracker 监控 TaskTracker 作业健康状况
    旦发现失败情况会相应务转移节点时 JobTracker 会踪务执行进
    度资源量等信息信息告诉务调度器调度器会资源出现空闲时选择合
    适务资源 Hadoop 中务调度器插拔模块户根
    需设计相应调度器 13042018 Page 261 of 283

    25133 TaskTracker
    TaskTracker 会周期性通 Heartbeat 节点资源情况务运行进度汇报
    JobTracker 时接收 JobTracker 发送命令执行相应操作(启动新务 杀死
    务等)TaskTracker slot 等量划分节点资源量slot 代表计算资源(CPU
    存等) Task 获取 slot 机会运行 Hadoop 调度器作
    TaskTracker 空闲 slot 分配 Task slot 分 Map slot Reduce slot 两种分供
    MapTask Reduce Task TaskTracker 通 slot 数目(配置参数)限定 Task 发

    25134 Task
    Task 分 Map Task Reduce Task 两种 均 TaskTracker 启动 HDFS 固定 block
    基单位存储数 MapReduce 言 处理单位 splitsplit block 应关
    系图示 split 逻辑概念 包含元数信息 数起始位置数长度
    数节点等划分方法完全户决定 需注意split 少决定 Map
    Task 数目 split 会交 Map Task 处理
    Map Task 执行程图示 该图知Map Task 先应 split 迭代解析成
    keyvalue 次调户定义 map() 函数进行处理终时结果存放磁盘
    中时数分成干 partition partition Reduce Task 处理

    25135 Reduce Task 执行程
    该程分三阶段
    1 远程节点读取 MapTask 中间结果(称Shuffle 阶段)
    2 key keyvalue 进行排序(称 Sort 阶段)
    3 次读取调户定义 reduce() 函数处理终结果存 HDFS
    (称 Reduce 阶段)
    13042018 Page 262 of 283

    2514 Hadoop MapReduce 作业生命周期
    1作业提交初始化
    1 户提交作业 首先 JobClient 实例作业相关信息 程序 jar 包作业配置文
    件 分片元信息文件等传分布式文件系统( 般 HDFS)中分片元信息文件
    记录输入分片逻辑位置信息 然 JobClient 通 RPC 通知 JobTracker
    JobTracker 收新作业提交请求 作业调度模块作业进行初始化:作业创建
    JobInProgress 象踪作业运行状况 JobInProgress 会 Task 创建
    TaskInProgress 象踪务运行状态 TaskInProgress 需理
    Task 运行尝试( 称 Task Attempt)
    2务调度监控
    2 前面提务调度监控功均 JobTracker 完成TaskTracker 周期性通
    Heartbeat JobTracker 汇报节点资源 情况 旦出 现空闲资源 JobTracker
    会定策略选择合适务该空闲资源 务调度器完成 务调度器
    插拔独立模块 双层架构 首先选择作业 然该作业中选择务
    中选择务时需重点考虑数性 外JobTracker 踪作业整运行程
    作业成功运行提供全方位保障 首先 TaskTracker 者 Task 失败时 转移计算
    务 次 某 Task 执行进度远落作业 Task 时启动相
    Task 选取计算快 Task 结果作终结果
    3务运行环境准备
    3 运行环境准备包括 JVM 启动资源隔 离 均 TaskTracker 实现 TaskTracker
    Task 启动独立 JVM 避免 Task 运行程中相互影响 时TaskTracker
    操作系统进程实现资源隔离防止 Task 滥资源
    4务执行
    4 TaskTracker Task 准备运行环境 便会启动 Task 运行程中 Task
    新进度首先 Task 通 RPC 汇报 TaskTracker TaskTracker 汇报 JobTracker
    5作业完成
    5 Task 执行完毕 整作业执行成功
    13042018 Page 263 of 283

    26 Spark
    2611 概念
    Spark 提供全面统框架理种着性质(文数图表数等)数
    集数源(批量数实时流数)数处理需求
    2612 核心架构

    Spark Core
    包含 Spark 基功尤定义 RDD API操作两者动作 Spark 库
    构建 RDD Spark Core
    Spark SQL
    提供通 Apache Hive SQL 变体 Hive 查询语言(HiveQL) Spark 进行交互 API
    数库表做 RDDSpark SQL 查询转换 Spark 操作
    Spark Streaming
    实时数流进行处理控制Spark Streaming 允许程序够普通 RDD 样处理实时数
    Mllib
    常机器学算法库算法实现 RDD Spark 操作库包含扩展学算法
    分类回等需量数集进行迭代操作
    GraphX
    控制图行图操作计算组算法工具集合GraphX 扩展 RDD API包含控制图
    创建子图访问路径顶点操作 13042018 Page 264 of 283

    2613 核心组件

    Cluster Manager制整集群监控 worker
    standalone 模式中 Master 节点控制整集群监控 worker YARN 模式中资
    源理器
    Worker 节点负责控制计算节点
    节点负责控制计算节点启动 Executor 者 Driver
    Driver: 运行 Application main()函数
    Executor:执行器某 Application 运行 worker node 进程
    2614 SPARK 编程模型

    Spark 应程序编写提交执行输出整程图示图中描述步骤: 13042018 Page 265 of 283

    1 户 SparkContext 提供 API(常 textFilesequenceFilerunJobstop 等)
    编写 Driver application 程序外 SQLContextHiveContext StreamingContext
    SparkContext 进行封装提供 SQLHive 流式计算相关 API

    2 SparkContext提交户应程序首先会BlockManagerBroadcastManager
    务 Hadoop 配置进行广播然 DAGScheduler 务转换 RDD 组织成 DAG
    DAG 划分 Stage TaskScheduler 助 ActorSystem 务提交
    集群理器(Cluster Manager)
    3 集群理器(ClusterManager)务分配资源具体务分配WorkerWorker
    创建 Executor 处理务运行StandaloneYARNMesosEC2 等作 Spark
    集群理器

    2615 SPARK 计算模型
    RDD 做种数计算模型统抽象Spark 计算程 RDD 迭代计算
    程RDD 迭代计算程非常类似道分区数量取决 partition 数量设定分区数
    会 Task 中计算分区机器节点 Executor 行执行
    13042018 Page 266 of 283

    2616 SPARK 运行流程
    13042018 Page 267 of 283

    1 构建 Spark Application 运行环境启动 SparkContext
    2 SparkContext 资源理器( StandaloneMesosYarn)申请运行 Executor 资源
    启动 StandaloneExecutorbackend
    3 Executor SparkContext 申请 Task
    4 SparkContext 应程序分发 Executor
    5 SparkContext 构建成 DAG 图 DAG 图分解成 Stage Taskset 发送 Task Scheduler
    Task Scheduler Task 发送 Executor 运行
    6 Task Executor 运行运行完释放资源
    2617 SPARK RDD 流程

    1 创建 RDD 象
    2 DAGScheduler 模块介入运算计算 RDD 间赖关系RDD 间赖关系形成
    DAG
    3 Job 分 Stage划分 Stage 前计算子输入否确
    定果分 Stage避免 Stage 间消息传递开销


    2618 SPARK RDD
    (1)RDD 创建方式
    1) Hadoop 文件系统( Hadoop 兼容持久化存储系统 HiveCassandra
    HBase)输入(例 HDFS)创建
    2)父 RDD 转换新 RDD 13042018 Page 268 of 283

    3)通 parallelize makeRDD 单机数创建分布式 RDD

    (2)RDD 两种操作算子(转换(Transformation)行动(Action))
    RDD 两种操作算子:转换(Transformation)行动(Action)
    1) 转换(Transformation):Transformation操作延迟计算说RDD转
    换生成 RDD 转换操作马执行需等 Action 操作时候会真正触
    发运算

    2)行动(Action):Action 算子会触发 Spark 提交作业(Job)数输出 Spark 系统




    13042018 Page 269 of 283

    27 Storm
    2711 概念
    Storm 免费开源分布式实时计算系统利 Storm 容易做处理限
    数流 Hadoop 批量处理数样Storm 实时处理数
    2711 集群架构

    27111 Nimbus(master代码分发 Supervisor)
    Storm 集群 Master 节点负责分发户代码指派具体 Supervisor 节点 Worker 节
    点运行 Topology 应组件(SpoutBolt) Task
    27112 Supervisor(slave理 Worker 进程启动终止)
    Storm 集群节点负责理运行 Supervisor 节点 Worker 进程启动终止
    通 Storm 配置文件中 supervisorslotsports 配置项指定 Supervisor
    允许少 Slot Slot 通端口号唯标识端口号应 Worker 进程(果该
    Worker 进程启动)
    27113 Worker(具体处理组件逻辑进程)
    运行具体处理组件逻辑进程Worker 运行务类型两种种 Spout 务种
    Bolt 务 13042018 Page 270 of 283

    27114 Task
    worker 中spoutbolt 线程称 task storm08 task 物理线程应
    spoutbolt task 会享物理线程该线程称 executor
    27115 ZooKeeper
    协调 Nimbus Supervisor果 Supervisor 障出现问题法运行 Topology
    Nimbus 会第时间感知重新分配 Topology Supervisor 运行

    2712 编程模型(spout>tuple>bolt)
    strom 运行中分 spout bolt 两组件中数源 spout 开始数 tuple 方
    式发送 bolt bolt 串连起 bolt 接入 spotbolt运行时原理图:

    27121 Topology
    Storm 中运行实时应程序名称 Spout Bolt 整合起拓扑图定义 Spout
    Bolt 结合关系发数量配置等等
    27122 Spout
    topology 中获取源数流组件通常情况 spout 会外部数源中读取数然转
    换 topology 部源数
    27123 Bolt
    接受数然执行处理组件户中执行想操作
    27124 Tuple
    次消息传递基单元理解组消息 Tuple 13042018 Page 271 of 283

    27125 Stream
    Tuple 集合表示数流
    2713 Topology 运行
    Storm 中实时应计算务包作 Topology 发布 Hadoop MapReduce
    务相似点 Hadoop 中MapReduce 务终会执行完成结束
    Storm 中Topology 务旦提交永远会结束非显示停止务计算务
    Topology Spouts Bolts通数流(Stream)连接起图。 Storm 集
    群运行 Topology 时通 3 实体完成 Topology 执行工作:

    (1) Worker(进程)
    (2) Executor(线程)
    (3) Task

    27131 Worker(1 worker 进程执行 1 topology 子集)
    1 worker 进程执行 1 topology 子集(注:会出现 1 worker topology
    服务)1 worker 进程会启动 1 executor 线程执行 1 topology
    component(spout bolt)1 运行中 topology 集群中台物理机
    worker 进程组成
    27132 Executor(executor 1 worker 进程启动单独线程)
    executor 1 worker 进程启动单独线程 executor 会运行 1 topology 1
    component(spout bolt) task(注:task 1 storm 默认 1
    component 生成 1 taskexecutor 线程里会次循环里序调 task 实例)
    13042018 Page 272 of 283

    27133 Task(终运行 spout bolt 中代码单元)
    终运行 spout bolt 中代码单元(注:1 task spout bolt 1 实例
    executor 线程执行期间会调该 task nextTuple execute 方法)topology 启动1
    component(spout bolt) task 数目固定变该 component executor 线
    程数动态调整(例:1 executor 线程执行该 component 1 task 实
    例)意味着 1 component 存样条件:#threads<#tasks(:线程数
    等 task 数目)默认情况 task 数目等 executor 线程数目 1 executor 线程运
    行 1 task


    2714 Storm Streaming Grouping
    Storm 中重抽象应该 Stream grouping 够控制 SpotBolt 应 Task
    什样方式分发 Tuple Tuple 发射目 SpotBolt 应 Task 13042018 Page 273 of 283


    目前Storm Streaming Grouping 支持种类型:
    27141 huffle Grouping
    机分组量均匀分布游 Bolt 中流分组定义混排种混排分组意味着 Spout
    输入混排机分发 Bolt 中务shuffle grouping task tuple 分配
    较均匀
    27142 Fields Grouping
    字段分组数中 field 值进行分组相 field 值 Tuple 发送相 Task 种
    grouping 机制保证相 field 值 tuple 会 task
    27143 All grouping :广播
    广播发送 tuple 会复制 bolt 中处理 13042018 Page 274 of 283

    27144 Global grouping
    全局分组Tuple 分配 Bolt 中 Task实现事务性 TopologyStream 中
    tuple 会发送 bolt 务处理 tuple 会发送拥 task_id bolt
    务处理
    27145 None grouping :分组
    关注行处理负载均衡策略时该方式目前等 shuffle grouping外 storm 会
    bolt 务游提供数务安排线程
    27146 Direct grouping :直接分组 指定分组
    tuple 发射单元直接决定 tuple 发射 bolt般情况接收 tuple bolt 决定
    接收 bolt 发射 Tuple种较特分组方法种分组意味着消息发送者指
    定消息接收者 task 处理消息 声明 Direct Stream 消息流声明种
    分组方法种消息 tuple 必须 emitDirect 方法发射消息处理者通
    TopologyContext 获取处理消息 taskid (OutputCollectoremit 方法会返回
    taskid)

    13042018 Page 275 of 283

    28 YARN
    2811 概念
    YARN 资源理务调度框架包含三模块:ResourceManager(RM)
    NodeManager(NM)ApplicationMaster(AM)中ResourceManager 负责资
    源监控分配理ApplicationMaster 负责具体应程序调度协调
    NodeManager 负责节点维护 applicationsRM 拥绝控制权资
    源分配权 AM 会 RM 协商资源时 NodeManager 通信执行监控 task
    模块间关系图示

    2812 ResourceManager
    1 ResourceManager 负责整集群资源理分配全局资源理系统
    2 NodeManager 心跳方式 ResourceManager 汇报资源情况(目前 CPU
    存情况)RM 接受 NM 资源回报信息具体资源处理交 NM
    处理
    3 YARN Scheduler 根 application 请求分配资源负责 application job 监控
    追踪运行状态反馈启动等工作
    2813 NodeManager
    1 NodeManager 节点资源务理器理台机器代理负责该节点
    程序运行该节点资源理监控YARN集群节点运行NodeManager 13042018 Page 276 of 283

    2 NodeManager 定时 ResourceManager 汇报节点资源(CPU存)情况
    Container 运行状态 ResourceManager 宕机时 NodeManager 动连接 RM 备节

    3 NodeManager 接收处理 ApplicationMaster Container 启动停止等种请求
    2814 ApplicationMaster
    户提交应程序均包含 ApplicationMaster运行 ResourceManager 外
    机器
    1 负责 RM 调度器协商获取资源( Container 表示)
    2 务进步分配部务(资源二次分配)
    3 NM 通信启动停止务
    4 监控务运行状态务运行失败时重新务申请资源重启务
    5 前 YARN 带两 ApplicationMaster 实现演示 AM 编写方法实例程序
    DistributedShell申请定数目 Container 行运行 Shell 命令者 Shell
    脚运行 MapReduce 应程序 AM—MRAppMaster
    注:RM 负责监控 AM AM 运行失败时候启动RM 负责 AM 部务容错务
    容错 AM 完成 13042018 Page 277 of 283

    2815 YARN 运行流程

    1 client RM 提交应程序中包括启动该应 ApplicationMaster 必须信息例
    ApplicationMaster 程序启动 ApplicationMaster 命令户程序等
    2 ResourceManager 启动 container 运行 ApplicationMaster
    3 启动中ApplicationMaster ResourceManager注册启动成功RM 保持心跳
    4 ApplicationMaster ResourceManager 发送请求申请相应数目 container
    5 ResourceManager 返回 ApplicationMaster 申请 containers 信息申请成功
    container ApplicationMaster 进行初始化container 启动信息初始化AM
    应 NodeManager 通信求 NM 启动 containerAM NM 保持心跳 NM
    运行务进行监控理
    6 container 运行期间ApplicationMaster container 进行监控container 通 RPC 协议
    应 AM 汇报进度状态等信息
    7 应运行期间client 直接 AM 通信获取应状态进度更新等信息
    8 应运行结束ApplicationMaster ResourceManager 注销允许属
    container 收回 13042018 Page 278 of 283

    29 机器学
    2911 决策树
    2912 机森林算法
    2913 逻辑回
    2914 SVM
    2915 朴素贝叶斯
    2916 K 邻算法
    2917 K 均值算法
    2918 Adaboost 算法
    2919 神网络
    29110 马尔夫
    参考:httpwwwcyzonecna20170422310196html
    13042018 Page 279 of 283

    30 云计算
    3011 SaaS
    SaaS SoftwareasaService(软件服务)
    3012 PaaS
    PaaS PlatformasaService 缩写意思台服务 服务器台作种服务提供
    商业模式通网络进行程序提供服务称 SaaS(Software as a Service)云计算时代相
    应服务器台者开发环境作服务进行提供成 PaaS(Platform as a Service)
    3013 IaaS
    IaaS(Infrastructure as a Service)基础设施服务提供消费者服务设施
    利包括处理存储网络基计算资源户够部署运行意软件包括操作
    系统应程序

    3014 Docker
    30141 概念
    Docker 镜
    (Images)
    Docker 镜创建 Docker 容器模板 13042018 Page 280 of 283

    Docker 出现定目前端开发运维阶段确实需种虚拟化技术解决开发环境
    生产环境环境致问题通 Docker 程序运行环境纳入版控制中排
    环境造成运行结果述需求然推动虚拟化技术产生果没合
    适底层技术支撑然完美产品文剩容会介绍种 Docker
    核心技术果解方法原理清楚 Docker 实现原理Docker
    客户端服务器 (CS) 架构模式远程 API 理创建 Docker 容器Docker 容器通
    Docker 镜创建

    30142 Namespaces
    命名空间(namespaces) Linux 提供分离进程树网络接口挂载点进程间
    通信等资源方法日常 Linux 者 macOS 时没运行完全分离服务器
    需果服务器启动服务服务实会相互影响服务
    服务进程访问宿机器意文件时候愿意
    更希运行台机器服务做完全隔离运行台机器样
    Docker 容器
    (Container)
    容器独立运行组应
    Docker 客户端
    (Client)
    Docker 客户端通命令行者工具 Docker API Docker 守护进程通信
    Docker 机
    (Host)
    物理者虚拟机器执行 Docker 守护进程容器
    Docker 仓库
    (Registry)
    Docker 仓库保存镜理解代码控制中代码仓库
    Docker Hub 提供庞镜集合供
    Docker
    Machine
    Docker Machine 简化 Docker 安装命令行工具通简单命令行相
    应台安装 Docker VirtualBox Digital OceanMicrosoft Azure 13042018 Page 281 of 283

    Linux 命名空间机制提供七种命名空间包括 CLONE_NEWCGROUP
    CLONE_NEWIPCCLONE_NEWNETCLONE_NEWNSCLONE_NEWPID
    CLONE_NEWUSER CLONE_NEWUTS通七选项创建新进程时设置新进程
    应该资源宿机器进行隔离
    30143 进程(CLONE_NEWPID 实现进程隔离)
    docker 创建新进程时传入 CLONE_NEWPID 实现进程隔离 Linux 命名空间实现
    进程隔离Docker 容器部意进程宿机器进程知次运行
    docker run 者 docker start 时会创建设置进程间隔离 Spec时会设置进
    程相关命名空间会设置户网络IPC UTS 相关命名空间命名空间相关
    设置 Spec 会作 Create 函数入参创建新容器时进行设置

    30144 Libnetwork 网络隔离
    果 Docker 容器通 Linux 命名空间完成宿机进程网络隔离没办法通宿
    机网络整互联网相连会产生限制 Docker 然通命名空间创建隔离
    网络环境 Docker 中服务然需外界相连发挥作
    Docker 整网络部分功通 Docker 拆分出 libnetwork 实现提供连接
    容器实现时够应出够提供致编程接口网络层抽象容器网络模型
    libnetwork 中重概念容器网络模型组件组成分 Sandbox
    Endpoint Network容器网络模型中容器部包含 Sandbox中存储着前
    容器网络栈配置包括容器接口路表 DNS 设置Linux 网络命名空间实现
    Sandbox Sandbox 中会 Endpoint Linux 虚拟网卡
    vethSandbox 通 Endpoint 加入应网络中里网络面提 Linux
    网桥者 VLAN
    docker run 启动容器实具单独网络命名空间Docker 提供四种
    网络模式HostContainerNone Bridge 模式

    部分介绍 Docker 默认网络设置模式:网桥模式种模式分配隔离网
    络命名空间外Docker 会容器设置 IP 址 Docker 服务器机启动会创建
    新虚拟网桥 docker0该机启动全部服务默认情况该网桥相连默认情况13042018 Page 282 of 283

    容器创建时会创建虚拟网卡两虚拟网卡组成数通道中会放创建
    容器中会加入名 docker0 网桥中


    30145 资源隔离 CGroups
    Control Groups(简称 CGroups)够隔离宿机器物理资源例 CPU存磁盘 IO 网
    络带宽 CGroup 组相标准参数限制进程 CGroup 间层级关
    系说间父类继承限制资源标准参数
    30146 镜 UnionFS
    Linux 命名空间控制组分解决资源隔离问题前者解决进程网络文件系统
    隔离者实现 CPU存等资源隔离 Docker 中非常重问题需
    解决 镜
    Docker 镜实质压缩包命令 Docker 镜中文件导出
    镜中目录结构 Linux 操作系统根目录中容没太区说
    Docker 镜文件

    30147 存储驱动
    Docker 系列存储驱动理镜文件系统运行容器存储驱动
    Docker 卷(volume)存储引擎理着够容器间享存储
    镜 docker run 命令创建时会镜层添加写层容器层
    运行时容器修改实容器读写层修改 13042018 Page 283 of 283

    容器镜区镜读容器实等镜加读写
    层镜应容器
    UnionFS 实种 Linux 操作系统设计文件系统『联合』挂载点文
    件系统服务 AUFS Advanced UnionFS 实 UnionFS 升级版够提供更优秀
    性效率
    AUFS Docker 存储驱动种 AUFS 外Docker 支持存储驱动
    包括 aufsdevicemapperoverlay2zfs vfs 等等新 Docker 中overlay2 取代
    aufs 成推荐存储驱动没 overlay2 驱动机器然会 aufs 作 Docker
    默认驱动


    3015 Openstack




    《香当网》用户分享的内容,不代表《香当网》观点或立场,请自行判断内容的真实性和可靠性!
    该内容是文档的文本内容,更好的格式请下载文档

    下载pdf到电脑,查找使用更方便

    pdf的实际排版效果,会与网站的显示效果略有不同!!

    需要 3 香币 [ 分享pdf获得香币 ]

    下载pdf

    相关文档

    面试资料

     【例题】近日,“中国式过马路”成为一个新的网络词汇迅速流行,引出来了全社会对“中国式过马路”问题的关注。请谈谈你对“中国式过马路”现象的看法? 答题要点: 破题表态: (1)指出“中国...

    9年前   
    7143    0

    竣工资料整理目录

    单位〔子单位〕工程竣工验收文件和资料目录工程名称: 建设单位: 施工单位: ...

    5个月前   
    233    0

    浅谈资料的整理

    浅谈资料的整理浅谈资料的整理   资料整理工作越来越得到各方面的重视。        为做好资料管理工作,把对资料的研究引向深入,使之能充分发挥作用,为我所用,笔者结合自身体会对其进行分析研究...

    9年前   
    916    0

    浅谈资料的整理

    浅谈资料的整理  资料整理工作越来越得到各方面的重视。为做好资料管理工作,把对资料的研究引向深入,使之能充分发挥作用,为我所用,笔者结合自身体会对其进行分析研究,并取得了一些初步认识。  一、...

    9年前   
    431    0

    面试整理合集

    小女子是上海一本非211类院校,从九月初开始找工作到今天,掐指一算已有五个多月了,今天,总算收到满意的offer,算是为这段旅程划上了一个句号,一路的辛酸与坎坷,唯有经历过的人才能体会。想把我...

    2年前   
    401    0

    !嵌入式系统复习题资料整理

    1. 什么是嵌入式系统?其特点有些什么?答: 嵌入式系统是“以应用为中心、以计算机技术为基础、软件硬件可裁剪、功能、可靠性、成本、体积、功耗严格要求的专用计算机系统。” 特点:1)是专用的...

    3年前   
    567    0

    公务员面试资料

    要辩证的看待这个问题,有利有弊。好处是能够吸引顾客的眼球,能够吸引购房者参与的兴趣,能扩大影响;不足之处是反映了庸俗的拜金主义思想,制造噱头,十八届三中全会强调市场在资源配置中起决定性作用,这种...

    6年前   
    1556    0

    职场资料:面试取胜法宝

    要得到一份称心如意的工作,绝非易事。或许你刚刚从象牙之塔中展翅欲飞,是个Freshman;或许你不喜欢现在的工作,想换个环境,换个心情,当你在四处出击求职的时候,请注意应聘技巧。  如何在各种...

    2年前   
    366    0

    2021薪酬管理整理资料

    薪酬治理整理资料企业薪酬:企业薪酬是指企业内所有员工,即治理人员和普通员工的货币性和非货币性劳动收进的总和,具体包括薪金、工资、奖金、佣金、红利及福利待遇等各种报酬形式。企业薪酬的职能:依据现...

    3年前   
    493    0

    2015年市政资料整理

    P1 ※二、城镇道路分级 我国现行《城市道路工程设计规范》CJJ 37-2012 在充分考虑道路在城市道路网中的地位、交通功能及对沿线服务功能的基础上,将城镇道路分为快速路、主干路、次干路与...

    5年前   
    957    0

    操作系统知识整理

    操作系统是位于硬件层之上,所有其他系统软件层之下的一个系统软件,使得管理系统中的各种软件和硬件资源得以充分利用,方便用户使用计算机系统。

    5年前   
    1678    0

    面试时自我介绍整理

    应聘面试自我介绍范文尊敬的领导:    您好!    我是×××,毕业于××学校××专业,获得的是××学位     在学校期间,主修的专业课有×××〔此处添加技术类专业课,尤其是和应聘工作相关...

    2年前   
    503    0

    整理文员求职面试自我介绍

    文员求职面试自我介绍 求职面试  【 求职面试】   本人从小培养了吃苦耐劳、诚信守则、积极进取的精神,通过四年的实践工作,使本人增添了工作中的耐心,善于发现并解决问题。利用工作期间的空...

    5年前   
    1543    0

    面试系统打分标准

    面试系统打分标准评分标准考察项目54321组织能力成为小组中自然形成的领导,善于消除紧张气氛,调解争议并能够充分引发小组成员发表意见,具有很强的概括和归纳总结不同意见的能力可以经常组织小组成员...

    7个月前   
    140    0

    金科-天湖美镇销讲资料

    金科•天湖美镇销讲资料 目录 一、金科集团公司简介 二、金科天湖美镇地理位置 三、政府总体规划 四、项目概况 五、小镇开发10大标准 六、天湖美镇产品设计综述 七、卖点提炼...

    14年前   
    30838    0

    毕马威公司面试招聘资料——面试问题

    [zz]KPMG面试全攻略[zz]KPMG面试全攻略面试分两轮:kpmg一面:面了40多分钟,提问主要是自我介绍、实习经历、为什么要申kpmg之类的常规性问题。;我的面试官是一个local m...

    11年前   
    509    0

    毕马威公司面试招聘资料——毕马威面试经验

    毕马威面试经验(仅供参考) KPMG做事很利索,开始招聘的就必其他几家晚,所以后来从笔试到一面以至于final都很快KPMG笔试感觉很一般,numerial倒是相当easy,但是Verbal我...

    9年前   
    683    0

    空调系统设计资料总结

    中央空调主要参考以下的规范及标准:

    5年前   
    1858    0

    另类交易系统证券交易的风险特征

    另类交易系统证券交易的风险特征 (1)另类交易系统证券交易的风险发生速度快 快速发展的网络技术为另类交易系统证券交易提供了强大的技术支持,但同时也加快了证券交易交割清算风险的发生速度。在证...

    5年前   
    1139    0

    面试技巧培训资料

    Case Questions Case questions are most commonly used in consulting interviews, but they can b...

    15年前   
    7928    0