最全的Java面试总结来了!阿里/京东/美团/快手/滴滴面经
前言
别人说金九银十都过去了!现在再看面经还有用吗?
子牙的回答是绝对有用的!一定要善于总结问题,面试题不光面试的时候翻出来看看,还能帮助你查漏补缺,认识自己的不足
!
子牙并在文章结尾为大家整理总结了金九银十的面试资料,相信一定对你有帮助
阿里面试总结
阿里一面
- 介绍下项目的大体框架
- 你负责哪几部分
- 流量 QPS 估计
- 网关里的限流、黑白名单这些功能是自带的还是自己实现的
- 有了解过 nginx 吗
- nginx 和 网关的关系是什么
- 服务发现的原理
- Eureka 的容灾
- 自我保护期间请求怎么处理
- 订单的数据一致性如何实现的
- 支付没有通知会怎么处理?
- 详细介绍一下本地消息表
- 服务是分布式多节点的,数据呢?
- 假设数据库分散在全国国内,如何处理请求分布到不同地点的数据库中
- 假设在北京下订单,但是跑到广州还款,如果就近原则的话, 连的数据库就不一样了,怎么处理?
- 能不能用一个策略,某个用户的数据指定到一个库去执行
- Java 8 CompletableFuture 的原理
- Future 的实现原理?Future 有哪些不好的地方
- 集合类型的遍历方式有哪些
- 集合 foreach 的 API用过吗
- LinkedHashMap 和 TreeMap 的区别
- TCP 为什么要四次挥手
- 假设客户端断开连接,服务器不停发数据不断开,这是允许的吗
- 客户端收到 FIN 后回的 ACK 丢了怎么办
- 为什么要等待 2 倍的 MSL 时间
- select、poll 和 epoll 的区别
- NIO 模型
- 简单描述下 Redis
- Redis 的几种常用数据结构
- 如何实现一个分布式的栈
-
算法题
:给定一个整数数组 a 和一个哈希表 b,b 指定了 a 中的位置,根据 b 调整 a 的位置,如果 b 中的数字 a 不存在,也需要插入。
阿里二面
- 项目中做的工作包括哪些
- 服务治理做的相关工作
- Eureka 服务发现的主要功能
- Eureka 服务有多少个实例
- Eureka 服务同步每次都是全量吗
- Eureka 服务发现的数据一致性
- Eureka 如何保证数据可靠性,如何确认是一致的
- Eureka 如果实例数太多,会面临同步的问题吗
- Zuul 限流是如何实现的
- 限流是这一层起作用还是下一层起作用
- 为什么要在你这一层去做呢?那如何保护自身呢?
- 限流的实现方式,有哪几种算法
- 时间窗口与令牌桶的对比
- 配置管理是如何实现的
- 应用配置的场景
- 为什么选择 zk 做配置管理
- 为什么不用 zk 做服务注册
- 怎么防止雪崩、服务过载这些
- 网络平时有遇到什么问题吗?
- 服务间调用丢包、传输速度慢,怎么去解决?
- 如何查看连接是否丢包
- 大量的连接导致短暂的瘫痪状态,怎么去解决?
- HTTP 1.0 和 HTTP 2.0 的区别
- HTTP 2.0 做了哪些优化
- 同一个域名复用一个连接是如何实现的?
- Redis 在项目中用在哪里
- Redis 常见的数据结构
- Sorted Set 是如何实现的
- 跳表如何实现 log n 的,跳表的实现原理
- 为什么选择跳表来实现 Sorted Set
- 常见的垃圾回收算法有哪些,各自算法的优缺点
-
算法题:
一个序列表示栈的压入顺序,判断第二个序列是否为该栈的弹出顺序 - follow up:输出一个序列的所有可能的弹出顺序
反问:
• 北京负责的业务?直播业务线、视频业务线、社交软件业务线
• 全球产品与国内的区别?运营形态不一样,文化宗教冲突,跨区服务器
阿里三面
- 项目介绍
- 项目中遇到的技术难题有哪些(线上问题排查)
- Spring AOP 底层实现
- Redis 如何进行容灾
- Redis 哨兵是怎样的一个机制
- 如何评估服务的能力?怎么压测你的服务?
- 出于什么考虑想找一份新工作
- 你希望的工作内容或工作方式?
-
算法题
:0-n 中缺失的数字 -
算法题
:微信红包算法 -
系统设计
:每天 100 万微博的存储系统设计 - MySQL 如何平滑扩展
京东面试总结
京东一面
-
项目中用到的技术架构
-
数据一致性是如何保证的?
-
Spring Bean 实例化有哪几种方式?
-
Spring 注解这种方式如何使用?
-
Spring 注入的方式?
-
@Autowired 和 @Resource 区别
-
Spring MVC 处理请求的过程,用到了什么设计模式
-
责任链模式和策略模式的区别
-
Integer 的缓存范围,这是什么设计模式
-
a == 1 为什么会报 NullPointerException
-
二分查找与顺序查找、树查找的比较
-
Mybatis 二级缓存原理
-
Redis 底层数据结构
-
Redis String 类型的最大容量
-
Redis 如何实现分布式锁
-
XA 事务和 TCC 的区别
-
如何解决 XA/TCC 的单点问题(数据分片)
京东二面
- 自我介绍
- 项目介绍
- 项目难点(线上问题排查)
- 消息队列的选型
- Spring AOP 原理和应用
- 链路追踪
- 最近在学什么技术
- Kafka 如何做到高性能
京东三面
-
简单介绍下 RabbitMQ
-
RabbitMQ 如何保证消息一致性的
-
开启 ACK 后的具体流程是怎样的
-
RabbitMQ 如何保证高可用的
-
RabbitMQ 集群模式下主宕机了如何选主
-
线上机器 CPU 突然增高如何处理
-
接口不定时出现高时延如何处理
-
处理过哪种线上问题
-
如何加速计算 1+2…+100
美团面试总结
美团一面
-
介绍下 JVM 堆栈模型,工作机制
-
哪些资源是线程私有/共有?
-
栈具体在做什么事情?
-
介绍java的线程池的原理和调度机制
-
介绍线程池的拒绝策略
-
如何释放线程池中的线程
-
核心线程数如何释放,可以通过线程空闲时间来控制释放吗?
-
shutdown, shutdown now 的区别?
锁
-
常用的锁有哪些?
-
synchronized 和 ReentrantLock 的区别?他们需要手动的释放吗?
-
介绍一下乐观锁,缺点是什么?如何保证原子性?
-
常用的垃圾回收算法有哪些?
-
描述新生代的回收过程,EMCC的回收过程?
-
怎么确定对象是否应该被释放?
-
描述NIO的概念
-
内核态IO的复用的机制?
-
TCP 如何保证可靠性的?
-
HashMap 是如何实现的?
-
ConcurrentHashMap 是如何实现的?
-
kafka的基本原理和架构?
-
不同的 partition 之间如何容灾备份?
-
同步时 high water
-
RabbitMQ 如何实现容灾?
-
RabbitMQ 发生脑裂怎么处理?
-
项目中遇到的难点是什么?如果解决的?
-
付款过程中的一致性怎么保证的?
美团二面
-
做服务发现时有遇到什么问题吗?
-
Eureka 损失了一致性会带来什么问题呢?
-
Eureka 有主吗?怎么实现的同步?如果遇到了不一致的问题,谁说了算?
-
如果多个节点同时尝试注册会有问题吗?
-
Eureka 内部采用的一致性算法是什么算法?
-
项目历时时间多久?
-
项目中遇到的技术难题是什么?
-
改进前使用的是什么垃圾收集器?
-
用了 CMS 之后配置了哪些参数?
-
列举常见的一致性算法?
-
介绍 Paxos 原理?缺点是什么?
-
本机宕机了怎么办?消息表会丢失的?
-
数据存在哪里?消息表存在磁盘或者内存还是远程的数据库?
-
本地消息表的缺点和优点是什么?
-
消息系统用的是什么组件?有消息重复的现象?
-
jdk1.8默认的垃圾收集器是哪个?
-
看过jdk哪方面的源码?
-
常用的container有哪些?
-
HashMap 和 HashTable的区别是什么?
-
Spring 的原理是什么?
-
介绍切面的底层实现
-
使用 zk 的时候有遇到什么问题吗?
-
研究最深入的组件是哪个?有哪些看过源码?
-
IOC 的本质是什么?
-
Mysql 的事物隔离级别有哪几种?有什么区别?
-
有看过 Mysql 的源码吗?
-
NIO 了解吗?是什么?
-
Linux 有多少种IO模型
-
常用的数据结构有哪些?
-
二叉树里了解哪些?
-
平衡树是用来做什么的?
-
B+树的特点是什么?
-
多线程并发的类有哪些?
-
信号量主要用来做什么?
-
编程题: 实现一个读写锁
快手面试总结
快手一面
-
JVM 运行时区域
-
常见的堆内存溢出情况
-
JVM 内存分配策略
-
FullGC 的触发条件有哪些
-
锁升级的过程
-
volatile 如何保证可见性的
-
分布式事务的解决方案
-
MySQL 聚簇索引与普通索引的区别
-
为什么要建前缀索引
-
B 树和 B+ 树的比较
-
联合索引
-
Redis 主从复制的过程
-
Redis 跳表的实现
-
Redis 实现分布式锁
-
Linux 打印文件第 10-20 行
-
Linux 查看当前目录大小
-
Linux 查看网络端口占用
-
算法题
:旋转有序数组的最小值(含重复元素)
快手二面
-
项目介绍
-
为什么使用消息队列?
-
消息队列选型,用 RabbitMQ 为什么不是 Kafka?(没答好)
-
什么时候出现数据不一致的情况?
-
为什么选择本地消息法做分布式事务?
-
什么是TCC,它的工作过程?
-
TCC 和 XA 的区别?
-
如果让你优化XA,你会如何优化?
-
你如何理解高可用性?
-
假设RabbitMQ宕机了,怎么保证服务仍然可用?
-
你们是如何做服务监控的?高可用级别?几个9?
-
skywalking 的监控原理
-
为什么用微服务架构?有什么优点?
-
拆分服务模块是如何考量的?
-
MySQL 的事务隔离级别?为什么选择这个隔离级别?什么是幻读?
-
MySQL 是如何实现事务的四大特性的?
-
简单说下 MVCC 的工作原理。
-
synchronized 和 ReentrantLock
-
为什么使用 ReentrantLock 而不是 synchronized?
-
synchronized 和 ReentrantLock 性能上的差别?
-
锁升级机制?轻量级锁自旋的过程?
-
CAS 还需要获取锁吗?
-
写个单例模式,选一种你觉得最合适的。(静态内部类和懒汉模式)
-
为什么用静态内部类?
-
为什么要加在实例前 volatile 关键字?
-
服务发现为什么用 Eureka?还有哪些实现方案?如何选型?
-
SpringBoot 的优势在哪?有哪些功能?
-
IOC 和 AOP 简单解释一下
-
AOP 的实现原理?动态代理是如何实现的?
滴滴面试总结
滴滴一面
-
API 是 RESTFul 风格的吗?设计的时候有哪些规则?用户 ID 和订单 ID 会在 url 中吗?
-
Hadoop、Spark、Docker 技术熟悉吗?
-
如何查看进程 ID 内有多少线程?
-
查看磁盘信息 df 命令卡住了,如何排查问题?
-
如何查看进程所使用的系统调用?
-
分布式事务,两阶段提交,TCC
-
进程、线程、协程的区别
-
虚拟地址如何转到物理地址
-
进程中的堆区和栈区
-
僵尸进程
-
HTTP Get 和 Post 的区别
-
HTTP API 如何设计幂等接口
-
如何设计 HTTP 长连接
-
http2、http3
-
快排的基本原理
-
数组和链表的区别
-
算法题:反转链表
-
算法题:求二叉树深度
-
Redis 项目中的使用
-
Redis 分布式锁
-
高并发的时候是怎么处理的?(消息队列、多线程)
-
ORM 框架的 SQL 注入是如何解决的
-
事务死锁如何排查?
-
并发更新同一条记录如何解决事务死锁?
-
MySQL 乐观锁和悲观锁
-
Java 单例模式
-
Java 原子操作
反问:
商业平台的难点:
对接存储:hadoop、对象存储 boos
大数据计算:k8s、spark,大批量数据处理
滴滴二面
-
JVM 分配内存的过程
-
TLAB 的工作机制
-
TLS
-
CMS 并发收集,如何记录未收集的表
-
算法题:合并 K 个链表
-
算法题:火车排队
-
概率题:圆上任意两个弦相交的概率
-
MySQL 平滑迁库
-
MySQL 索引
-
MySQL 如何建索引
面试资料整理
看了这么多大厂的面试题,其实发现大厂面试的重点考察对象都是:JVM,多线程,MYSQL,spring,微服务,Redis,高并发这几个知识点。
所以子牙接下来为大家准备的面试题也是针对大厂面试的这些点: