OFFER来了:JAVA面试核心知识点精讲 框架篇
作者:王磊
出版时间: 2020年版
内容简介
本书是对Java程序员面试中常见的微服务、网络编程、分布式存储和分布式计算等必备知识点的总结,包括Spring原理及应用、Spring Cloud原理及应用、Netty网络编程原理及应用、ZooKeeper原理及应用、Kafka原理及应用、Hadoop原理及应用、HBase原理及应用、Cassandra原理及应用、ElasticSearch原理及应用、Spark原理及应用、Flink原理及应用。 本书共11章,第1章讲解Spring原理及应用,涉及Spring IoC原理、Spring AOP原理、Spring MVC原理、事务、MyBatis缓存等内容;第2章讲解Spring Cloud原理及应用,涉及Spring Boot、Spring Cloud Config、Eureka、Consul、Hystrix、Zuul和Spring Cloud链路监控等内容;第3章讲解Netty网络编程原理及应用;第4章讲解ZooKeeper原理及应用,涉及ZooKeeper选举机制、ZooKeeper数据模型和ZooKeeper应用场景等内容;第5章讲解Kafka原理及应用,涉及Kafka组成、Kafka数据存储设计、Kafka生产者并发设计、Kafka消费者并发设计,以及Kafka安装和应用等内容;第6章讲解Hadoop原理及应用,涉及HDFS、MapReduce、YARN等内容;第7章讲解HBase原理及应用,涉及HBase列式存储数据模型、HBase架构组成和HBase数据读写流程等内容;第8章讲解Cassandra原理及应用,涉及Cassandra数据模型、Gossip协议、NWR理论、一致性Hash、Cassandra数据副本策略和读写机制等内容;第9章讲解ElasticSearch原理及应用,涉及ElasticSearch数据模型、ElasticSearch分布式架构、ElasticSearch数据读写原理和段合并等内容;第10章讲解Spark原理及应用,涉及Spark特点、Spark模块组成、Spark运行机制,以及Spark RDD、Spark Streaming、Spark SQL、DataFrame、DataSet、Spark Structured Streaming的原理和使用等内容;第11章讲解Flink原理及应用,涉及Flink核心概念、Flink架构、Flink事件驱动模型、Flink数据分析应用和Flink基于状态的内存计算等内容。 本书可作为Java程序员的技术面试参考用书,也可作为Java程序员、大数据开发人员、技术经理和架构师的日常技术参考用书。
目录
第1章 Spring原理及应用 1
1.1 Spring的特性 1
1.1.1 轻量 2
1.1.2 控制反转 2
1.1.3 面向容器 2
1.1.4 面向切面 2
1.1.5 框架灵活 3
1.2 Spring的模块 3
1.2.1 核心容器层 3
1.Spring-Beans 4
2.Spring-Core 4
3.Spring-Context 4
4.SpEL 4
1.2.2 数据访问层 4
1.JDBC 5
2.ORM 5
3.OXM 5
4.JMS 5
5.事务处理 5
1.2.3 Web应用层 6
1.Web 6
2.Web-MVC 6
3.Web-Socket 6
4.Web-Portlet 6
1.2.4 其他重要模块 6
1.AOP 6
2.Aspects 7
3.Instrumentation 7
4.Messaging 7
5.Test 7
1.3 Spring的核心JAR包 7
1.4 Spring的注解 8
1.4.1 Spring注解的使用 9
1.导入命名空间及规范 9
2.配置扫描包 9
3.使用注解 10
1.4.2 Spring的常用注解 10
1.5 Spring IoC的原理 12
1.5.1 Spring IoC简介 12
1.5.2 Spring Bean的装配流程 12
1.5.3 Spring Bean的作用域 13
1.Singleton 13
2.Prototype 13
3.Request 14
4.Session 14
5.Global Session 14
1.5.4 Spring Bean的生命周期 14
1.5.5 Spring 的4种依赖注入 16
1.构造器注入 16
2.set方法注入 16
3.静态工厂注入 17
4.实例工厂注入 18
1.5.6 自动装配的5种方式 18
1.6 Spring AOP的原理 19
1.6.1 Spring AOP简介 19
1.6.2 AOP的核心概念 20
1.6.3 AOP的2种代理方式 20
1.6.4 AOP的5种通知类型 21
1.6.5 AOP的代码实现 22
1.7 Spring MVC的原理 22
1.8 事务 23
1.8.1 本地事务 24
1.8.2 分布式事务 25
1.8.3 两阶段提交协议 26
1.准备阶段 26
2.提交阶段 26
1.9 MyBatis的缓存 27
1.9.1 MyBatis的一级缓存原理 28
1.9.2 MyBatis的二级缓存原理 28
1.10 Spring的生态 28
1.10.1 Spring Data 29
1.Spring Data的特性 29
2.Spring Data的主项目 29
3.Spring Data的社区项目 30
1.10.2 Spring的其他服务 31
第2章 Spring Cloud原理及应用 33
2.1 Spring Boot 35
2.1.1 Spring Boot的使用 35
2.1.2 Spring Boot Application Starters 38
2.1.3 Spring Boot的常用组件及其使用 40
1.Spring Boot使用MySQL 40
2.Spring Boot使用Redis 41
3.Spring Boot使用MongoDB 42
4.Spring Boot使用Neo4j 43
5.Spring Boot使用Solr 43
6.Spring Boot使用ElasticSearch 44
7.Spring Boot使用Cassandra 44
8.Spring Boot使用RabbitMQ 45
9.Spring Boot使用Kafka 46
2.2 Spring Cloud Config 47
2.2.1 Spring Cloud Config的原理 48
2.2.2 Config Server的定义和使用 48
2.2.3 Config Client 51
2.3 Spring Cloud Eureka 52
2.3.1 Spring Cloud Eureka的原理 52
1.服务注册 53
2.服务同步 53
3.服务续约 54
4.服务启动 54
5.服务下线 54
6.服务发现 54
7.失效剔除 54
2.3.2 Spring Cloud Eureka的使用 55
1.注册中心的定义 55
2.服务提供者的定义 57
3.服务消费者的定义 59
2.4 Spring Cloud Consul 62
2.4.1 Spring Cloud Consul的原理 62
1.Consul的特性 62
2.Consul的角色 63
3.Consul的服务注册与发现流程 64
2.4.2 Spring Cloud Consul的使用 65
1.Consul的服务启动 65
2.Consul服务提供者的定义 68
3.Consul服务消费者的定义 70
2.5 Spring Cloud Feign 71
2.5.1 Feign的应用 72
2.5.2 Feign的常用注解 74
2.6 Spring Cloud Hystrix 74
2.6.1 Hystrix的特性 75
1.服务熔断 75
2.服务降级 75
3.依赖隔离 76
4.请求缓存 76
5.请求合并 76
2.6.2 Hystrix的服务降级流程 77
2.6.3 Hystrix的使用 78
2.6.4 异步请求 80
1.Future 80
2.Callable 82
2.6.5 Hystrix的常用配置 85
1.熔断的配置参数 85
2.执行的配置参数 85
2.6.7 Hystrix Dashboard 87
2.7 Spring Cloud Zuul 87
2.7.1 Zuul的概念和特点 87
2.7.2 Zuul的原理 88
2.7.3 Zuul的使用 89
2.7.3 PreRequestFilter的定义和注入 91
2.7.4 Fallback Provider的服务容错 92
2.8 Spring Cloud的链路监控 94
2.8.1 Sleuth+Zipkin 94
1.Sleuth的介绍 94
2.Sleuth+Zipkin实现分布式链路追踪 95
2.8.2 Pinpoint 101
1.Pinpoint的介绍 101
2.Pinpoint的组件 104
3.Pinpoint的数据结构 104
4.Pinpoint的字节码增强技术 104
5.Pinpoint的使用 105
第3章 Netty网络编程原理及应用 107
3.1 Reactor线程模型 107
3.1.1 Java NIO 107
1.Channel 108
2.Buffer 108
3.Selector 108
3.1.2 Reactor单线程模型 109
3.1.3 Reactor多线程模型 110
3.1.4 Reactor主从多线程模型 110
3.2 Netty的架构 111
3.2.1 Netty简介 111
3.2.2 Netty的架构设计 111
1.Transport Services 112
2.Protocol Support 112
3.Core 114
3.2.3 Netty的核心组件 114
3.2.4 Netty的原理 115
1.Netty Server的初始化步骤 115
2.BossGroup的职责 116
3.WorkerGroup的职责 117
3.3 Netty的特性 118
3.3.1 I/O多路复用模型 118
3.3.2 数据零拷贝 118
3.3.3 内存重用机制 119
3.3.4 无锁化设计 120
3.3.5 高性能的序列化框架 120
3.4 Netty的使用 121
第4章 ZooKeeper原理及应用 128
4.1 ZooKeeper的原理 128
4.1.1 ZooKeeper的角色 128
1.Leader 129
2.Follower 129
3.Observer 129
4.1.2 ZAB协议 129
1.ZAB协议的4个阶段 130
2.ZAB协议的Java实现 131
4.1.3 ZooKeeper的选举机制和流程 131
4.2 ZooKeeper的应用 133
4.2.1 ZooKeeper的数据模型 133
1.Znode的数据模型 133
2.Znode的控制访问 134
3.Znode的节点类型 134
4.Znode的节点Watch 134
4.2.2 ZooKeeper的安装 134
4.2.3 ZooKeeper的应用场景 136
1.统一命名服务 136
2.配置管理 136
3.集群管理 136
4.分布式通知协调 136
5.分布式锁 137
4.2.4 ZooKeeper节点的操作 137
第5章 Kafka原理及应用 143
5.1 Kafka的原理 143
5.1.1 Kafka的组成 143
5.1.2 Kafka的数据存储设计 145
1.Partition数据文件 145
2.Segment数据文件 146
3.数据文件索引 146
5.1.3 生产者并发设计 147
1.多个Producer并发生产消息 147
2.批量发送消息 148
3.压缩消息 148
5.1.4 消费者并发设计 148
1.多个Consumer并发消费消息 148
2.Consumer Group的概念和特性 149
5.2 Kafka的应用 150
5.2.1 Kafka的安装 150
5.2.2 基于Spring Boot的Kafka应用 152
第6章 Hadoop原理及应用 156
6.1 HDFS 156
6.1.1 Client 156
6.1.2 NameNode 157
6.1.3 Secondary NameNode 157
6.1.4 DataNode 157
1.HDFS文件的写入流程 157
2.HDFS文件的读取流程 158
3.HDFS数据副本 159
6.2 MapReduce 159
6.2.1 Job Client 160
6.2.2 JobTracker 160
6.2.3 TaskTracker 160
6.2.4 Task 161
6.2.5 Reduce Task的执行过程 161
6.2.6 Hadoop MapReduce的作业生命周期 162
6.3 YARN 163
6.3.1 ResourceManager 164
6.3.2 NodeManager 164
6.3.3 ApplicationMaster 165
6.3.4 Container 165
6.3.5 YARN的任务提交和运行流程 165
6.4 Hadoop的安装和应用 167
6.4.1 Hadoop的安装 167
6.4.2 Hadoop的应用 172
1.MapReduce应用程序概述 172
2.MapReduce应用程序的输入与输出模型 173
3.在IDEA下运行MapReduce WordCount程序 173
第7章 HBase原理及应用 177
7.1 HBase的原理 177
7.1.1 HBase的概念 177
7.1.2 行式存储和列式存储 178
1.行式存储的原理和特点 178
2.列式存储的原理和特点 179
7.1.3 HBase列式存储的数据模型 180
1.Column Family 180
2.RowKey 180
3.Region 180
4.TimeStamp 181
7.1.4 HBase的架构组成 181
1.HBase Client 182
2.ZooKeeper 182
3.HMaster 182
4.Region Server 182
7.1.5 HBase的数据读写流程 184
1.HBase的数据写入流程 184
2.HBase MemStore的刷盘逻辑 185
3.HBase的数据读取流程 186
4.HBase的数据删除 186
5.HBase的数据更新 187
7.2 HBase的使用 187
7.2.1 HBase的安装 187
7.2.2 基于Spring Boot的HBase应用 190
第8章 Cassandra原理及应用 197
8.1 Cassandra的原理 197
8.1.1 Cassandra的特点 197
8.1.2 Cassandra的数据模型 198
1.Key Space 198
2.Key 199
3.Column 199
4.Super Column 199
5.Column Family 199
6.Standard Column Family 200
7.Super Column Family 200
8.1.3 Gossip协议 201
1.Gossip节点的通信方式 201
2.Gossip协议的收敛性 202
3.Cassandra中的Gossip协议 202
8.1.4 NWR理论 203
8.1.5 一致性Hash 204
1.一致性Hash的原理 204
2.一致性Hash的节点变动 206
3.虚拟节点 208
4.Cassandra虚拟节点设计 208
5.一致性Hash的特点 210
8.1.6 Cassandra的数据副本策略 210
1.SimpleStrategy 210
2.NetworkTopologyStrategy 211
8.1.7 Cassandra数据存储 211
1.Storage Model 211
2.MemTable的刷盘策略 212
3.SSTable的数据结构 212
4.Commit Log 213
5.Compaction 213
8.1.8 Cassandra的数据写入 214
1.Cassandra的数据写入机制:LogStructured 214
2.Cassandra的数据写入流程 214
8.1.9 Cassandra的数据读取 216
1.数据读取和后台修复 216
2.数据读取流程 217
8.1.10 Cassandra的数据删除机制 220
8.1.11 Cassandra和HBase的核心差别 220
8.2 Cassandra的应用 221
8.2.1 Cassandra的安装 221
8.2.2 基于Spring Boot的Cassandra应用 223
第9章 ElasticSearch原理及应用 228
9.1 ElasticSearch的概念和原理 228
9.1.1 Lucene的介绍 228
1.Lucene简介 228
2.倒排索引 228
3.Lucene的架构 229
4.Lucene的全文检索流程 229
5.Lucene的使用 232
9.1.2 ElasticSearch的特点 236
9.1.3 ElasticSearch的应用场景 237
9.1.4 ElasticSearch的数据模型 237
1.Index 238
2.Type 238
3.Document 239
4.Field 239
5.Mapping 239
6.Shard 239
9.1.5 ElasticSearch分布式架构 240
1.集群节点角色 240
2.集群选举原理 242
3.集群状态 243
4.数据路由规则 243
5.文档分片和副本策略 244
9.1.6 ElasticSearch的写操作流程 245
1.ElasticSearch的写操作 245
2.数据写入一致性:Consistency 246
9.1.7 ElasticSearch的读操作流程 247
9.1.8 ElasticSearch中的Translog 248
1.ElasticSearch Translog的介绍 248
2.ElasticSearch的数据更新和Translog操作流程 248
9.1.9 ElasticSearch段合并 249
1.段合并的介绍 249
2.段合并的流程 250
9.1.10 ElasticSearch的集群扩容 251
9.2 ElasticSearch的应用 252
9.2.1 ElasticSearch的安装 252
9.2.2 ElasticSearch的配置和性能调优 254
1.JVM性能调优 254
2.操作系统的性能调优 254
9.2.3 ElasticSearch API的使用 255
第10章 Spark原理及应用 263
10.1 Spark的原理 263
10.1.1 Spark的特点 264
1.计算速度快 264
2.易于使用 264
3.通用大数据框架 264
4.支持多种资源管理器 264
5.Spark生态圈丰富 264
10.1.2 Spark的模块 265
1.Spark Core 265
2.Spark SQL 266
3.Spark Streaming 266
4.GraphX 267
5.Spark MLlib 267
6.SparkR 267
10.1.3 Spark的运行原理 267
1.Spark的运行模式 267
2.Spark的集群架构 268
3.Spark的运行流程 269
10.2 Spark的使用 270
10.2.1 Spark的安装 270
10.2.2 Spark RDD的使用 274
1.RDD的介绍 274
2.RDD的核心结构及概念 275
3.创建一个RDD应用 277
4.利用外部数据集生成RDD 279
5.RDD的转换和操作 280
6.RDD持久化的概念、级别和原则 281
7.Spark函数的定义 283
8.键值对RDD的概念和使用 284
9.RDD的常用转换 285
10.RDD的常用操作 285
11.Spark广播变量的概念和使用 286
10.2.3 Spark Streaming的使用 287
1.Spark Streaming的介绍 287
2.创建一个Spark Streaming应用 288
3.DStream和RDD的关系 291
4.Spark Streaming的数据源 292
5.DStream的操作 293
6.DStream的数据持久化 295
7.Spark Streaming的性能优化 296
10.2.4 Spark SQL、DataFrame、DataSet的使用 297
1.Spark SQL简介 297
2.Spark SQL查询语句 297
3.DataFrame 297
4.DataSet 297
5.创建一个Spark SQL应用 298
6.Spark SQL的视图操作 300
7.创建DataSet 301
8.DataSet与RDD相互转换 302
9.DataFrame数据的加载 304
10.DataFrame数据的保存 305
10.2.5 Spark Structured Streaming的使用 305
1.Spark Structured Streaming简介 305
2.Spark Structured Streaming的数据模型 306
3.创建一个Spark Structured Streaming应用 307
第11章 Flink原理及应用 311
11.1 Flink的原理 311
11.1.1 Flink的特点 312
11.1.2 Flink的核心概念 314
1.Flink Cluster 314
2.Flink Master 314
3.Flink Job Manager 314
4.Flink Task Manager 314
5.Job 314
6.Flink Graph 314
7.Flink Operator和Operator Chain 315
8.Flink Task和SubTask 315
9.Event 315
10.Function 315
11.Flink Record 315
12.Flink State Backend 315
11.1.3 Flink架构介绍 316
1.Job Manager的职责 316
2.Task Manager的职责 316
3.客户端 316
4.Flink应用程序的运行流程 317
5.Flink Task Slot资源分配 318
6.Flink任务和算子 319
7.Flink状态存储 319
8.Flink运行模式 321
11.1.4 Flink的事件驱动模型 321
1.什么是事件驱动模型 321
2.事件驱动模型的特点 322
3.Flink的事件驱动模型的特点 322
11.1.5 Flink的数据分析应用 322
1.批量数据分析 323
2.流式数据分析 323
3.Flink中的流式数据分析 324
11.1.6 Flink的数据清洗和数据管道 324
1.数据清洗:定时处理 324
2.数据管道:实时处理 325
3.数据管道优势:实时性高 325
4.Flink数据管道 325
11.1.7 Flink数据流处理基本概念 326
1.数据流 326
2.状态 326
3.时间 327
11.1.8 API分类 328
1.Process Function 329
2.DataStream API 330
3.SQL和Table API 331
11.1.9 Flink基于状态的内存计算 331
11.1.10 Flink的编程模型 332
1.数据流 332
2.并行度 333
11.1.11 Flink窗口计算 334
1.翻滚窗口 334
2.滑动窗口 335
3.会话窗口 335
4.全局窗口 336
11.1.12 Flink故障恢复 337
1.重启策略 337
2.故障恢复策略 339
11.2 Flink的应用 339
11.2.1 Flink的安装 339
1.Flink的独立集群模式安装 340
2.Flink的高可用模式安装 343
11.2.2 Flink实战案例 345
1.构建一个基于Java的Flink应用 345
2.Flink DataStream API 350
3.Flink DataSet API 367
4.Flink Table API和SQL 370