![]()
内容推荐 本书全面介绍了现代Java应用开发核心技术和很好实践,旨在帮助读者掌握企业级Java应用开发技术并能够成功地应对名企的面试和挑战。本书共19章,内容主要包括Spring框架、MyBatis与ORM、高并发处理、分布式协调服务、Dubbo框架、缓存技术、消息队列、数据库分片、分布式事务、NoSQL数据库、微服务架构、服务治理、容错机制、API网关。除每章章末提供的核心知识点和面试题外,本书还单独就面试列出一章“面试筹划”,从简历构造、面试攻略、面试心态、面试刷题、面试技巧、面试跟进以及面试总结,详尽地指导读者了解整个面试过程。 本书不仅覆盖Java应用开发的核心技术,还结合丰富的案例分析和面试指导,既适合想学习Java企业级开发的在校学生和程序员,也适合准备Java技术面试的求职者阅读。
目录 第1篇 应用框架 第1章 Spring 2 1.1 Spring概述 2 1.1.1 Spring是什么 2 1.1.2 Spring的优点是什么 3 1.2 IoC 3 1.2.1 软件设计的七大原则分别是什么 4 1.2.2 依赖倒置原则与案例分析 5 1.2.3 控制反转与案例分析 6 1.2.4 Spring IoC的配置方式有哪些 11 1.2.5 BeanFactory是什么 18 1.2.6 FactoryBean及其应用案例 23 1.2.7 BeanDefinition是什么 34 1.2.8 ApplicationContext是什么 54 1.2.9 Spring IoC的启动过程是什么 60 1.3 AOP 82 1.3.1 AOP是什么 82 1.3.2 企业开发中常用的AOP技术 83 1.3.3 JDK动态代理使用案例 84 1.3.4 JDK动态代理的工作原理 87 1.3.5 CGLib动态代理使用案例 91 1.3.6 CGLib动态代理的工作原理 93 1.3.7 Spring AOP使用案例 104 1.3.8 Spring AOP代理方式的选择 107 1.4 Spring事务管理 108 1.4.1 事务的ACID特性 108 1.4.2 事务并发执行引发的问题 109 1.4.3 事务隔离级别及案例分析 109 1.4.4 Spring事务传播行为 115 1.4.5 Spring事务使用案例 116 1.4.6 Spring Boot自动事务配置 118 1.4.7 Spring事务管理原理 128 1.5 Spring Web MVC 146 1.5.1 Spring Boot搭建MVC案例 146 1.5.2 Spring MVC的工作原理及关键代码分析 148 1.6 Spring面试押题 165 1.6.1 Spring IoC的设计思想是什么 166 1.6.2 BeanFactory和FactoryBean有什么区别 166 1.6.3 BeanFactory和ApplicationContext有什么区别 166 1.6.4 Spring Bean的生命周期包含哪些过程 167 1.6.5 Spring Bean的作用域有哪几种 167 1.6.6 Spring如何解决循环依赖 168 1.6.7 Spring的自动装配是如何实现的 168 1.6.8 Spring框架中使用到哪些常用的设计模式 168 1.6.9 Spring框架中有哪些类型的事件 169 1.6.10 什么是AOP 169 1.6.11 引入AOP能解决什么问题 169 1.6.12 项目中使用AOP的场景 170 1.6.13 AOP中有哪些比较重要的概念 170 1.6.14 什么是JDK动态代理 170 1.6.15 什么是CGLib动态代理 171 1.6.16 JDK动态代理与CGLib动态代理有什么区别 171 1.6.17 Spring AOP中有哪些Advice类型 171 1.6.18 动态代理与静态代理的区别是什么 172 1.6.19 什么是事务,为什么需要事务 172 1.6.20 事务有哪些特性 172 1.6.21 MySQL支持哪些事务隔离级别 173 1.6.22 Spring中有哪些事务传播行为 173 1.6.23 Spring事务在什么场景下会失效 174 1.6.24 Spring事务管理遇到哪些异常不会回滚 174 1.6.25 什么是Spring MVC 174 1.6.26 Spring MVC的主要组件有哪些 174 1.6.27 DispatcherServlet是什么,它有什么作用 175 1.6.28 Spring MVC中的控制器是不是线程安全的 175 1.6.29 Spring MVC的工作流程 175 1.6.30 Spring MVC与Struts2有哪些异同点 176 第2章 MyBatis 177 2.1 MyBatis概述 177 2.2 Spring Boot集成MyBatis案例 178 2.3 使用MyBatis Generator案例分析 181 2.4 MyBatis缓存分为哪几种 184 2.5 MyBatis一级缓存有哪些特性 185 2.5.1 一级缓存默认是开启的 185 2.5.2 一级缓存可以优化查询效率 185 2.5.3 一级缓存会因修改而失效 186 2.5.4 一级缓存仅在会话内共享 188 2.6 MyBatis一级缓存的原理是什么 189 2.6.1 SqlSession分析 190 2.6.2 SqlSessionFactory分析 192 2.6.3 Executor分析 192 2.6.4 Cache分析 193 2.6.5 一级缓存执行原理分析 194 2.7 MyBatis二级缓存有哪些特性 200 2.7.1 二级缓存非默认开启 200 2.7.2 在事务提交前二级缓存不生效 201 2.7.3 在事务提交后二级缓存会生效 202 2.7.4 当发生更新时二级缓存会被刷新 204 2.8 MyBatis二级缓存的原理是什么 205 2.9 如何编写MyBatis插件 211 2.9.1 实现Interceptor接口 211 2.9.2 MyBatis插件植入 212 2.9.3 MyBatis插件执行逻辑 214 2.10 简述MyBatis执行SQL的过程 215 2.10.1 MyBatis创建代理对象分析 216 2.10.2 MyBatis代理对象逻辑分析 218 2.10.3 SQL语句执行过程分析 223 2.11 MyBatis面试押题 227 2.11.1 什么是MyBatis 227 2.11.2 MyBatis有哪些优缺点 227 2.11.3 MyBatis框架的适用场景有哪些 227 2.11.4 MyBatis与Hibernate有哪些异同点 228 2.11.5 MyBatis中的#{}和${}的区别是什么 228 2.11.6 Mapper接口的工作原理是什么 229 2.11.7 MyBatis分页插件的原理是什么 230 2.11.8 简述MyBatis缓存的工作原理 231 2.11.9 为什么MyBatis是半自动ORM框架 231 2.11.10 如何提升基于MyBatis开发的应用程序的性能 231 2.11.11 MyBatis如何实现数据库的读写分离 232 第2篇 分布式高并发 第3章 高并发分流 234 3.1 分布式架构概念解释 234 3.2 企业系统架构的演进历程 235 3.2.1 单机架构 235 3.2.2 第一次演进:Web服务器与数据库独立部署 236 3.2.3 第二次演进:引入本地缓存和分布式缓存 237 3.2.4 第三次演进:引入反向代理 237 3.2.5 第四次演进:引入数据库读写分离 238 3.2.6 第五次演进:引入按业务拆分数据库 238 3.2.7 第六次演进:引入分库分表 240 3.2.8 第七次演进:引入使用LVS或F5 240 3.2.9 第八次演进:通过DNS实现机房间的负载均衡 241 3.2.10 第九次演进:引入NoSQL/NewSQL等技术 242 3.2.11 第十次演进:应用拆分 243 3.2.12 第十一次演进:引入ESB架构 244 3.2.13 第十二次演进:微服务拆分 245 3.2.14 第十三次演进:引入容器化架构 246 3.2.15 第十四次演进:引入云平台架构 247 3.3 Nginx反向代理与负载均衡 248 3.3.1 正向代理 249 3.3.2 反向代理 249 3.4 Nginx配置详解 251 3.5 OpenResty 255 3.5.1 OpenResty的安装 255 3.5.2 OpenResty限流案例 256 3.6 高并发分流面试押题 258 3.6.1 什么是分布式架构 258 3.6.2 什么是面向服务的架构 258 3.6.3 什么是微服务架构 258 3.6.4 SOA架构和微服务架构的区别和联系 259 3.6.5 什么是容器化架构 259 3.6.6 正向代理与反向代理的区别是什么 260 3.6.7 微服务拆分的依据 260 3.6.8 OpenResty和Nginx的区别与联系 261 3.6.9 如何使用Nginx实现灰度发布 261 第4章 分布式协调服务 263 4.1 ZooKeeper的基础知识 263 4.1.1 什么是ZooKeeper 263 4.1.2 什么是CAP理论 263 4.1.3 ZooKeeper对CAP的支持 265 4.1.4 ZooKeeper与其他注册中心对比 265 4.2 ZooKeeper有哪些节点类型 265 4.3 ZooKeeper节点有哪几种角色 266 4.4 什么是ZooKeeper的Watch机制 267 4.5 什么是ZooKeeper ACL权限控制 268 4.6 Paxos算法的原理是什么 269 4.6.1 分布式系统面临的挑战 269 4.6.2 分布式系统难题的转换 270 4.6.3 Paxos算法的执行过程 271 4.6.4 Paxos算法示例 273 4.7 基于Paxos的优化算法有哪些 275 4.7.1 Multi Paxos算法 275 4.7.2 Fast Paxos算法 275 4.8 ZAB协议的原理是什么 276 4.8.1 原子广播 276 4.8.2 故障恢复 278 4.8.3 ZXID生成规则 279 4.9 ZooKeeper代码分析 279 4.9.1 ZooKeeper单机模式代码分析 281 4.9.2 ZooKeeper集群模式代码分析 284 4.9.3 ZooKeeper Leader选举代码分析 288 4.10 ZooKeeper面试押题 297 4.10.1 什么是ZooKeeper 297 4.10.2 ZooKeeper的节点类型有哪些 298 4.10.3 ZooKeeper保障的是CP还是AP机制 298 4.10.4 ZooKeeper是如何实现通知机制的 298 4.10.5 ZooKeeper的节点有哪几种角色 299 4.10.6 简述Paxos算法的原理 299 4.10.7 简述ZAB协议的原理 299 4.10.8 如何利用ZooKeeper实现分布式锁 300 4.10.9 ZooKeeper在哪些中间件中被使用 300 4.10.10 ZooKeeper脑裂问题及其处理办法 301 第5章 Dubbo 302 5.1 Dubbo架构解析 302 5.1.1 Dubbo组件架构 302 5.1.2 Dubbo分层架构 303 5.2 Dubbo如何实现集群容错 304 5.2.1 Failover Cluster 304 5.2.2 Failfast Cluster 304 5.2.3 Failsafe Cluster 304 5.2.4 Failback Cluster 304 5.2.5 Forking Cluster 304 5.2.6 Broadcast Cluster 305 5.2.7 Available Cluster 305 5.2.8 Mergeable Cluster 305 5.2.9 ZoneAware Cluster 305 5.2.10 Dubbo集群容错代码分析 305 5.3 Dubbo如何实现负载均衡 308 5.3.1 加权随机策略 308 5.3.2 加权轮询策略 308 5.3.3 加权最少活跃策略 309 5.3.4 加权最短响应策略 309 5.3.5 一致性哈希策略 309 5.4 Dubbo的线程模型是什么 312 5.4.1 IO线程 313 5.4.2 业务线程 314 5.5 Dubbo跨多注册中心的能力 314 5.6 Dubbo服务分组 319 5.7 Dubbo SPI机制的原理是什么 320 5.7.1 SPI和API的区别和联系 320 5.7.2 JDK SPI机制的实现 320 5.7.3 JDK SPI机制原理分析 322 5.7.4 Dubbo SPI机制的使用方式 327 5.7.5 Dubbo SPI机制原理分析 331 5.8 Dubbo面试押题 336 5.8.1 Dubbo的核心功能有哪些 336 5.8.2 Dubbo的核心组件有哪些 337 5.8.3 简述Dubbo服务注册与发现的流程 337 5.8.4 简述主流RPC框架的异同点 338 5.8.5 Dubbo支持哪些负载均衡策略 338 5.8.6 Dubbo负载均衡在客户端还是服务端实现 338 5.8.7 Dubbo支持的通信协议 338 5.8.8 简述Dubbo SPI与Java SPI的异同点 339 5.8.9 Dubbo如何实现服务提供方失效移除 339 5.8.10 如何合理地设置Dubbo超时时间 340 第6章 Redis 341 6.1 Redis常用的数据类型 341 6.1.1 String 341 6.1.2 List 342 6.1.3 Hash 342 6.1.4 Set 343 6.1.5 Zset 343 6.2 Redis支持哪些数据结构 343 6.2.1 简单动态字符串 344 6.2.2 链表 344 6.2.3 跳跃表 345 6.2.4 压缩列表 345 6.2.5 哈希表 346 6.2.6 整数集合 348 6.3 Redis如何实现持久化 349 6.3.1 RDB 349 6.3.2 AOF 351 6.4 Redis主从部署架构的原理是什么 352 6.5 Redis哨兵部署架构 353 6.5.1 Redis哨兵架构的工作流程 353 6.5.2 主观下线 354 6.5.3 客观下线 354 6.5.4 Redis哨兵仲裁 355 6.5.5 哨兵领导者选举规约 355 6.5.6 哨兵领导者选举过程 356 6.5.7 Redis哨兵架构故障转移 356 6.6 Redis集群部署架构 357 6.6.1 Redis集群架构的工作原理 357 6.6.2 Redis集群架构数据分片 358 6.6.3 Redis集群架构搭建 358 6.6.4 Redis集群架构扩容 362 6.6.5 Redis集群架构收缩 368 6.6.6 Redis集群架构选举 369 6.7 缓存一致性解决方案有哪些 369 6.7.1 方案一:先更新数据库后更新缓存 369 6.7.2 方案二:先更新缓存后更新数据库 370 6.7.3 方案三:先删除缓存后更新数据库 370 6.7.4 方案四:先更新数据库后删除缓存 371 6.7.5 方案五:缓存延时双删解决方案 372 6.7.6 方案六:监听数据库解决方案 374 6.8 缓存预热方案有哪些 374 6.9 缓存穿透及解决方案 375 6.10 缓存击穿及解决方案 377 6.11 缓存雪崩及解决方案 377 6.12 布隆过滤器及适用场景 378 6.13 热点缓存识别及解决方案 380 6.13.1 热点缓存识别 380 6.13.2 热点缓存解决方案 380 6.14 Redis面试押题 381 6.14.1 Redis是什么 381 6.14.2 简述企业开发中使用到Redis缓存的场景 381 6.14.3 Redis与Guava Cache有哪些异同点 382 6.14.4 Redis与Memcached相比有哪些异同点 383 6.14.5 Redis为什么能实现高性能 384 6.14.6 Redis支持哪些数据类型 384 6.14.7 Redis内部的数据结构有哪些 384 6.14.8 如何使用Redis实现计数器 384 6.14.9 如何使用Redis实现消息队列的发布订阅 384 6.14.10 如何使用Redis实现分布式锁 385 6.14.11 Redis支持的持久化机制有哪些 385 6.14.12 Redis过期键的删除策略有哪些 386 6.14.13 Redis的内存淘汰策略有哪些 386 6.14.14 Redis的线程模型是什么 386 6.14.15 Redis事务有哪些优缺点 387 6.14.16 Redis的部署架构有哪些 387 6.14.17 什么是缓存穿透 387 6.14.18 什么是缓存击穿 388 6.14.19 什么是缓存雪崩 388 6.14.20 Jedis与Redisson有哪些异同点 388 第7章 RocketMQ 389 7.1 核心概念 389 7.1.1 Producer 389 7.1.2 Consumer 390 7.1.3 Broker 390 7.1.4 Topic 390 7.1.5 Message Queue 391 7.1.6 Tag 391 7.1.7 NameServer 391 7.1.8 集群消费 391 7.1.9 广播消费 391 7.1.10 分区顺序消息 391 7.1.11 全局顺序消息 391 7.1.12 RocketMQ消息模型 392 7.2 RocketMQ如何实现事务消息 393 7.3 RocketMQ如何实现顺序消息 396 7.4 RocketMQ如何实现延迟消息 400 7.5 RocketMQ如何实现消息重试 404 7.5.1 生产者消息重试 404 7.5.2 消费者消息重试 404 7.5.3 消息幂等 405 7.6 RocketMQ如何实现死信消息 405 7.7 RocketMQ如何实现消息过滤 406 7.7.1 基于tag的消息过滤 406 7.7.2 基于SQL表达式的消息过滤 408 7.7.3 基于消费者端的消息过滤 410 7.8 RocketMQ如何实现消息负载均衡 410 7.8.1 生产者端负载均衡 410 7.8.2 消费者端负载均衡 411 7.9 如何解决消息积压问题 411 7.9.1 消息积压的场景 411 7.9.2 消息积压的解决方案 412 7.10 RocketMQ面试押题 412 7.10.1 企业开发中使用MQ的场景有哪些 412 7.10.2 简述RocketMQ的架构 413 7.10.3 RocketMQ如何实现消息过滤 413 7.10.4 如何保障RocketMQ的消息不重不丢 413 7.10.5 RocketMQ如何实现事务消息 413 7.10.6 什么是RocketMQ的半消息 413 7.10.7 RocketMQ的刷盘机制是什么 414 7.10.8 RocketMQ如何实现负载均衡 414 7.10.9 什么是RocketMQ的死信队列 414 7.10.10 什么是消息幂等 414 7.10.11 什么是RocketMQ的推模式和拉模式 415 7.10.12 RocketMQ如何实现顺序消息 415 7.10.13 RocketMQ如何实现延迟消息 415 7.10.14 简述RocketMQ、RabbitMQ和Kafka之间的异同点 415 第8章 Kafka 417 8.1 Kafka的核心概念 417 8.1.1 Kafka的基本概念 417 8.1.2 Kafka的核心API 418 8.2 Kafka消息处理原理 419 8.2.1 Kafka架构原理 419 8.2.2 Kafka的存储机制 420 8.2.3 Kafka副本机制 423 8.2.4 Kafka ISR机制 423 8.2.5 Kafka HW&LEO 424 8.3 Kafka有哪些消息语义 425 8.3.1 at most once 425 8.3.2 at least once 425 8.3.3 exactly once 426 8.4 Kafka消息丢失的场景有哪些 426 8.4.1 生产者消息丢失 426 8.4.2 Broker消息丢失 426 8.4.3 消费者消息丢失 427 8.5 Kafka控制器的选举流程是什么 427 8.6 Kafka分区副本的选举策略有哪些 430 8.7 Kafka的协调器有哪些 430 8.7.1 消费者协调器 431 8.7.2 组协调器 431 8.8 Kafka的分区重平衡机制有哪些 433 8.8.1 RangeAssignor 433 8.8.2 RoundRobinAssignor 434 8.8.3 StickyAssignor 434 8.9 Kafka消费者的提交方式有哪些 434 8.10 Kafka面试押题 435 8.10.1 Kafka是什么 435 8.10.2 Kafka Replicas是如何管理的 435 8.10.3 Kafka中如何确定当前应该读取什么消息 436 8.10.4 Kafka生产者发送消息有哪些模式 437 8.10.5 Kafka如何实现负载均衡 437 8.10.6 Kafka的Topic分区数越多越好吗 438 8.10.7 如何增强Kafka消费者的消费能力 439 8.10.8 Kafka控制器是什么 439 8.10.9 Kafka为什么高性能 440 8.10.10 Kafka如何使用零拷贝 441 第9章 ShardingSphere 442 9.1 ShardingSphere的组成 442 9.1.1 ShardingSphere-JDBC 442 9.1.2 ShardingSphere-Proxy 443 9.1.3 ShardingSphere-Sidecar 443 9.2 核心概念 444 9.2.1 分库 444 9.2.2 分表 445 9.2.3 垂直分片 445 9.2.4 水平分片 445 9.2.5 表 446 9.2.6 数据节点 447 9.2.7 分片算法 447 9.3 ShardingSphere如何实现分布式主键 448 9.4 ShardingSphere支持哪些类型的事务 449 9.4.1 LOCAL事务 449 9.4.2 XA事务 450 9.4.3 BASE事务 451 9.5 ShardingSphere如何实现读写分离 451 9.5.1 主库和从库 452 9.5.2 主从同步 452 9.5.3 ShardingSphere读写分离支持 452 9.6 ShardingSphere支持哪些数据分片算法 452 9.7 ShardingSphere-JDBC的工作原理是什么 453 9.7.1 SQL解析 453 9.7.2 SQL路由 454 9.7.3 SQL改写 454 9.7.4 SQL执行 454 9.7.5 结果归并 454 9.8 ShardingSphere面试押题 455 9.8.1 ShardingSphere是什么 455 9.8.2 ShardingSphere支持哪些数据库 455 9.8.3 企业开发中哪些场景会用到ShardingSphere 456 9.8.4 ShardingSphere的核心功能有哪些 456 9.8.5 ShardingSphere支持的数据分片技术有哪些 457 9.8.6 数据分片技术有哪些优缺点 457 9.8.7 ShardingSphere与Mycat有哪些异同点 458 9.8.8 数据分片技术和分布式数据库之间如何权衡 459 9.8.9 如何优化一张大数据量表的查询速度 459 第10章 分布式事务 461 10.1 什么是强一致性事务 461 10.2 分布式架构理论基础 462 10.2.1 什么是CAP理论 462 10.2.2 什么是BASE理论 463 10.2.3 什么是2PC 463 10.2.4 什么是3PC 464 10.3 Atomikos分布式事务 465 10.3.1 TransactionsEssentials 466 10.3.2 ExtremeTransactions 467 10.4 TCC分布式事务 468 10.4.1 2PC和3PC的缺点 468 10.4.2 TCC的原理 468 10.4.3 TCC的改进 469 10.5 Saga分布式事务 469 10.5.1 Saga编排模式 470 10.5.2 Saga控制模式 471 10.6 Seata分布式事务 473 10.6.1 AT一阶段 474 10.6.2 AT二阶段 475 10.6.3 AT写隔离 475 10.6.4 AT读隔离 477 10.7 基于MQ的分布式事务 478 10.7.1 可靠的消息生产和消费 478 10.7.2 非可靠的消息生产和消费 480 10.8 分布式事务面试押题 481 10.8.1 什么是分布式事务 481 10.8.2 企业开发中产生分布式事务的场景有哪些 481 10.8.3 强一致性、弱一致性和最终一致性的异同点 482 10.8.4 什么是CAP理论 482 10.8.5 什么是BASE理论 482 10.8.6 分布式事务常见的解决方案有哪些 483 10.8.7 简述工作中遇到的分布式事务场景及挑战 483 10.8.8 简述常见的中间件及其面临的分布式事务问题 484 第11章 MongoDB 485 11.1 MongoDB支持哪些数据类型 485 11.2 MongoDB的核心概念 486 11.2.1 数据库 486 11.2.2 集合 486 11.2.3 文档 487 11.2.4 数据字段/域 487 11.2.5 索引 487 11.2.6 主键 488 11.3 MongoDB支持的索引类型 488 11.3.1 单键索引 488 11.3.2 复合索引 489 11.3.3 多键索引 489 11.3.4 地理空间索引 489 11.3.5 全文索引 489 11.3.6 哈希索引 489 11.4 MongoDB的执行计划 490 11.5 MongoDB的索引原理是什么 494 11.6 MongoDB集群搭建 495 11.6.1 主从复制架构 495 11.6.2 副本集架构 496 11.6.3 分片集群架构 497 11.7 MongoDB面试押题 498 11.7.1 什么是MongoDB 498 11.7.2 简述MongoDB与传统关系数据库的异同点 499 11.7.3 简述MongoDB与MySQL数据库中的概念对比 500 11.7.4 简述MongoDB与CouchBase的异同点 500 11.7.5 MongoDB中的分析器有什么用途 501 11.7.6 MongoDB的主节点和从节点如何实现数据同步 501 11.7.7 MongoDB的ObjectId生成规则是什么 502 11.7.8 企业开发中使用MongoDB的场景有哪些 502 11.7.9 在MongoDB中如何处理事务 502 11.7.10 MongoDB的写关注是什么 503 第12章 Elasticsearch 504 12.1 Elasticsearch的特性有哪些 504 12.2 核心概念 504 12.2.1 索引 504 12.2.2 索引别名 505 12.2.3 类型 506 12.2.4 文档 506 12.2.5 分词 506 12.2.6 分词器 507 12.2.7 keyword 514 12.2.8 text 514 12.3 什么是倒排索引 514 12.3.1 正排索引 515 12.3.2 倒排索引 515 12.3.3 单词索引 516 12.3.4 FST 517 12.4 Elasticsearch如何实现集群发现 519 12.5 分片和副本 520 12.5.1 分片 520 12.5.2 副本 520 12.5.3 索引写入流程 520 12.6 Elasticsearch的存储原理是什么 521 12.6.1 Segment 521 12.6.2 文档写入 522 12.6.3 Refresh 523 12.6.4 Translog 523 12.6.5 Segment合并 525 12.7 Elasticsearch如何实现一致性 526 12.7.1 写一致性 526 12.7.2 读一致性 526 12.8 Elasticsearch面试押题 526 12.8.1 什么是Elasticsearch 526 12.8.2 什么是倒排索引 527 12.8.3 Elasticsearch与Solr有哪些异同点 527 12.8.4 Elasticsearch支持的分词器有哪些 528 12.8.5 Elasticsearch中的keyword和text有什么区别 529 12.8.6 Elasticsearch中的query和filter有什么区别 529 12.8.7 简述Elasticsearch的数据写入流程 530 12.8.8 Elasticsearch的数据是如何存储的 531 12.8.9 Elasticsearch如何保证读写一致性 531 12.8.10 简述Elasticsearch的分布式原理 532 12.8.11 如何使用Elasticsearch解决深分页问题 533 12.8.12 什么是Elasticsearch Bulk API 534 第3篇 微服务架构 第13章 微服务架构演进 536 13.1 单体架构 536 13.2 垂直架构 537 13.3 面向服务的架构 537 13.4 微服务架构 539 13.5 微服务架构演进面试押题 540 13.5.1 什么是微服务架构 540 13.5.2 微服务架构常用的RPC框架有哪些 540 13.5.3 微服务架构常用的注册中心框架有哪些 541 13.5.4 微服务架构常用的负载均衡框架有哪些 542 13.5.5 微服务架构常用的网关框架有哪些 543 13.5.6 微服务架构常用的流量管控框架有哪些 543 13.5.7 微服务架构常用的配置中心框架有哪些 544 13.5.8 简述企业开发中的微服务架构 544 第14章 Eureka 546 14.1 Eureka的核心概念 546 14.1.1 服务提供方 546 14.1.2 服务消费方 546 14.1.3 Eureka Server 546 14.1.4 Eureka Client 546 14.2 Eureka的工作流程是什么 547 14.3 Eureka的集群原理是什么 548 14.4 Eureka面试押题 548 14.4.1 什么是Eureka 548 14.4.2 Eureka中的服务消费方如何感知服务提供方 549 14.4.3 Eureka中的服务消费方如何选择服务提供方 549 14.4.4 Eureka中的服务消费方如何感知服务提供方下线 550 14.4.5 简述Eureka、Nacos和ZooKeeper的异同点 550 14.4.6 Eureka保证了CAP中的哪几点 551 第15章 Ribbon 552 15.1 Ribbon的工作原理是什么 552 15.2 Ribbon支持哪些负载均衡策略 553 15.2.1 RoundRobinRule 553 15.2.2 WeightedResponseTimeRule 554 15.2.3 RandomRule 555 15.2.4 BestAvailableRule 556 15.2.5 RetryRule 557 15.2.6 AvailabilityFilteringRule 558 15.2.7 ZoneAvoidanceRule 559 15.3 Ribbon面试押题 560 15.3.1 什么是Ribbon 560 15.3.2 Ribbon与Nginx有哪些异同点 560 15.3.3 Ribbon支持哪些负载均衡策略 562 15.3.4 如何实现自定义的Ribbon负载均衡策略 562 第16章 OpenFeign 563 16.1 OpenFeign与Feign有哪些异同点 563 16.2 OpenFeign的架构原理 564 16.3 OpenFeign的实现原理是什么 564 16.4 OpenFeign面试押题 567 16.4.1 什么是OpenFeign 567 16.4.2 OpenFeign与Feign有哪些异同点 568 16.4.3 OpenFeign的工作原理是什么 568 16.4.4 OpenFeign与Dubbo有哪些异同点 568 16.4.5 OpenFeign与RestTemplate有什么区别 569 第17章 Hystrix 571 17.1 Hystrix的核心概念 571 17.1.1 限流 571 17.1.2 隔离 571 17.1.3 降级 572 17.1.4 熔断 572 17.1.5 缓存 572 17.1.6 合并 573 17.2 Hystrix的工作流程是什么 573 17.3 Hystrix面试押题 574 17.3.1 什么是Hystrix 574 17.3.2 Hystrix的工作流程是什么 574 17.3.3 Hystrix如何实现请求缓存 575 17.3.4 Hystrix如何实现限流 575 17.3.5 Hystrix如何实现熔断 575 17.3.6 什么场景会触发Hystrix降级 576 17.3.7 简述Hystrix、Sentinel和Resilience4j之间的异同点 576 第18章 API网关 578 18.1 API网关概述 578 18.2 多种API网关对比 579 18.2.1 Nginx 579 18.2.2 Zuul 579 18.2.3 Kong 580 18.2.4 Gateway 581 18.3 API网关面试押题 583 18.3.1 什么是API网关 583 18.3.2 对比常见的API网关 583 18.3.3 如何在网关实现用户统一鉴权 583 18.3.4 如何在网关实现灰度发布 584 第4篇 面试技巧 第19章 面试筹划 586 19.1 简历构造 586 19.1.1 个人信息 586 19.1.2 个人优势 588 19.1.3 期望职位 588 19.1.4 工作经历 589 19.1.5 项目经历 589 19.1.6 教育经历 590 19.2 面试攻略 591 19.2.1 海投简历 591 19.2.2 小试牛刀 591 19.2.3 厚积薄发 592 19.3 面试心态 593 19.3.1 候选人分析 593 19.3.2 面试官分析 595 19.4 面试刷题 597 19.4.1 机试刷题 597 19.4.2 现场面试刷题 597 19.5 面试技巧 599 19.5.1 合格性面试 599 19.5.2 合适性面试 599 19.5.3 冰山模型 600 19.5.4 面试方法 601 19.6 面试跟进 603 19.7 面试总结 604 参考文献 607 |