【Java面试】:第三章:P6级面试
互联网 Java 工程师知识扫盲
个人介绍
我是廖志伟,一名java开发工程师,CSDN博客专家,多年一线研发经验,曾就职多家互联网公司,任Java开发工程师职位,参与多个千万级并发互联网产品研发,对大型分布式,高并发及微服务架构有非常深入研究。
项目说明
本项目内容来自廖志伟整理与编写,内容涵盖Java基础、框架、设计模式、缓存、多线程、分布式事务、数据库、JVM、锁、高并发、分布式、高可用、微服务、海量数据处理等领域知识。我对这部分知识做了一个系统的整理,方便学习查阅。下面的内容可在我的gitee仓库进行查看:远程仓库地址:https://gitee.com/java_wxid/Java-knowledge-system-induction
内容模块
- Java基础
- 框架
- 设计模式
- 缓存
- 多线程
- 分布式事务
- 数据库
- JVM
- 锁
- 消息中间件
- 搜索引擎
- 海量数据处理
- 解决问题的能力
- 网络
- Netty
- 功能模块设计
Java基础
HashMap
- HashMap底层原理?
- HashMap扩容机制?
- HashMap加载因子为什么是0.75?
- HashMap为什么会发生并发修改异常?并发修改异常解决方案?
- 为什么jdk8以后HashMap会使用红黑树优化?
- ConcurrentHashMap底层实现?
- CAS,ABA,volatile这些是什么?
框架
Spring
Mybatis
Dubbo
- 说一下 Dubbo 的工作原理?注册中心挂了可以继续通信吗?
- Dubbo 支持哪些序列化协议?说一下 Hessian 的数据结构?PB 知道吗?为什么 PB 的效率是最高的?
- Dubbo 负载均衡策略和集群容错策略都有哪些?动态代理策略呢?
- 为什么需要服务治理?如何基于 Dubbo 进行服务治理、服务降级、失败重试以及超时重试?
- 分布式服务接口的幂等性如何设计(比如不能重复扣款)?
- 分布式服务接口请求的顺序性如何保证?
- 如何自己设计一个类似 Dubbo 的 RPC 框架?
- Dubbo特性?
- Dubbo SPI 和 Java SPI 区别?
- Dubbo 用到哪些设计模式?
- 为什么要进行系统拆分?如何进行系统拆分?拆分后不用 Dubbo 可以吗?
Zookeeper
SpringCould
- 什么是微服务?
- 常用组件底层实现?
- 服务发现组件 Eureka 的主要调用过程?Eureka 和 Zookeeper 都可以提供服务注册与发现的功能,它们有什么区别?
- 什么是熔断?什么是服务降级?
- 熔断框架如何做技术选型?选用 Sentinel 还是 Hystrix?
- 如何限流?在工作中是怎么做的?说一下具体的实现?
- Spring Boot 和 Spring Cloud,谈谈你对它们的理解?
- Spring Cloud 和 Dubbo 有哪些区别?
设计模式
设计模式
缓存
Redis
- 单线程模型?
- Redis 的持久化有哪几种方式?不同的持久化机制都有什么优缺点?持久化机制具体底层是如何实现的?
- Redis 集群模式的工作原理能说一下么?在集群模式下,Redis 的 key 是如何寻址的?分布式寻址都有哪些算法?了解一致性 hash 算法吗?如何动态增加和删除一个节点?
- Redis 的并发竞争问题是什么?如何解决这个问题?了解 Redis 事务的 CAS 方案吗?
- 生产环境中的 Redis 是怎么部署的?
- 数据类型的应用场景?
- 数据类型的底层数据结构sds?
- 一致性hash?
- 布隆过滤器?
- 数据同步问题(双删策略)?
- 击穿、穿透、雪崩、数据一致性?
- 高并发下的redis分布式锁?
- 热点数据缓存问题?
- 哨兵机制,集群架构?
- 生产环境性能优化?
- Redis 的过期策略都有哪些?手写一下 LRU 代码实现?
- 如何保证 Redis 高并发、高可用?Redis 的主从复制原理能介绍一下么?Redis 的哨兵原理能介绍一下么?
- Redis 主从架构是怎样的?
多线程
多线程
分布式事务
分布式事务
- CAP理论?
- BASE理论?
- 两阶段提交(2PC)?
- 三阶段提交(3PC)?
- 补偿事务(TCC)?
- 本地消息表(异步确保)?
- MQ 事务消息?
- 最大努力通知?
- TCC 如果出现网络连不通怎么办?XA 的一致性如何保证?
分布式会话
数据库
数据库
读写分离
分库分表
- 为什么要分库分表(设计高并发系统的时候,数据库层面该如何设计)?用过哪些分库分表中间件?不同的分库分表中间件都有什么优点和缺点?你们具体是如何对数据库如何进行垂直拆分或水平拆分的?
- 现在有一个未分库分表的系统,未来要分库分表,如何设计才可以让系统从未分库分表动态切换到分库分表上?
- 如何设计可以动态扩容缩容的分库分表方案?
- 分库分表之后,id 主键如何处理?
JVM
JVM
- JVM算法?
- 垃圾收集器?
- 垃圾回收机制?
- JMM和JVM内存模型?
- JVM调优?
- 双亲委派机制?
- 堆溢出,栈溢出,方法区溢出?
- 你都有哪些手段用来排查内存溢出??
- 常见的JVM调优方法有哪些?可以具体到调整哪个参数,调成什么值??
- 各种oom的种类?
锁
锁
消息中间件
消息中间件
- 为什么使用消息队列?消息队列有什么优点和缺点?Kafka、ActiveMQ、RabbitMQ、RocketMQ 都有什么优点和缺点?
- 如何保证消息队列的高可用?消息丢失?
- 如何保证消息不被重复消费?(如何保证消息消费的幂等性)
- 如何保证消息的可靠性传输?(如何处理消息丢失的问题)
- 如何保证消息的顺序性?
- 如何解决消息队列的延时以及过期失效问题?消息队列满了以后该怎么处理?有几百万消息持续积压几小时,说说怎么解决?
- 如果让你写一个消息队列,该如何进行架构设计啊?说一下你的思路。
搜索引擎
搜索引擎
- ES 的分布式架构原理能说一下么(ES 是如何实现分布式的啊)?
- ES 写入数据的工作原理是什么啊?ES 查询数据的工作原理是什么啊?底层的 Lucene 介绍一下呗?倒排索引了解吗?
- ES 在数据量很大的情况下(数十亿级别)如何提高查询效率啊?
- ES 生产集群的部署架构是什么?每个索引的数据量大概有多少?每个索引大概有多少个分片?
海量数据处理
海量数据处理
- 如何从大量的 URL 中找出相同的URL?
- 如何从大量数据中找出高频词?
- 如何找出某一天访问百度网站最多的IP?
- 如何在大量的数据中找出不重复的整数?
- 如何在大量的数据中判断一个数是否存在?
- 如何查询最热门的查询串?
- 如何统计不同电话号码的个数?
- 如何从 5 亿个数中找出中位数?
- 如何按照 query 的频度排序?
- 如何找出排名前 500 的数?