前言
应女友要求分享一波自己总结的大厂面经,花了不少时间整理,在整理过程中也重新复习了一遍,每一题都是精心挑选的!话也不多说,直接开始正文吧!
结尾有惊喜哦!
字节一面(80分钟)
面试官开始就坦言和我说不要有太多压力,我这边就是会问到你不会为止,太狠了。
SVN
和Git的区别,fetch和pull的区别- 有冲突的时候需要怎么解决
- 介绍一下Docker,Docker和操作系统映射的关系
- 什么数据用
MySQL
数据库,什么数据放在Redis
中,项目中实际遇到的举例- 项目中最经常用到的
Redis
数据类型- 为什么
rua
脚本能保证原子性Nginx
动静分离的介绍,了解CDN
吗- 缓存击穿,缓存一致性
Redis
中数据的脏读问题,如两个不同的线程先后往数据库中写数据,再往Redis
中写数据,但是第二个线程先往Redis
中写了,第一个线程又去修改了Redis
中的数据,造成了MySQL
和Redis
中的数据不一致,如何解决?不使用锁如何解决?- 读不需要变化,写数据情况下,每次删除
Redis
中的数据- 分布式事务在项目中用什么实现的
- 解释一下令牌保证接口幂等性(面试官以为令牌是实现了多点登录功能,用于认证中心)
- 令牌生成的逻辑
- 在秒杀系统中使用信号量的原因
- 消息队列在业务中使用场景
- 项目中
JVM
调优介绍JVM
中的垃圾回收器介绍,了解Jstack
不- 计算机网络分层以及对应的协议,为什么分层
- 为什么TCP需要四次挥手
- 看你笔试用了
StringBuffer
,谈谈它和Cache
的区别(计算机组成中的Cache概念)- Java学习路线
JVM
中的垃圾回收算法,为什么不同代用不同算法- 新生代标记的是什么对象,老年代标记的是什么对象
- 学习使用的数据库版本,学了哪些知识
MySQL5.7
在快照和next-key保证下能避免幻读问题MySQL
索引,InnoDB
用的是什么索引,为什么B+树能提高查询性能- 磁盘读取的顺序啥的(操作系统还是计算机组成的知识?)顺序读的问题
Redis
容灾备份,持久化的实现- 设计方法保证
Redis
宕机时刚要存的数据也能持久化,不搭建集群主从复制MySQL
的同步(持久化)如何实现AOF
恢复和RDB
恢复数据有什么区别,优劣- 锁的优化,升级,
AQS
- 读写锁在
AQS
中和其他锁最大的区别- 反问了解下字节的考核制度(面试官说字节基于对伙伴充分的信任,分配任务之后不会限定deadline,考核也有成熟的制度体系)
字节跳动二面(70分钟)
- 面试时间约70分钟
- Spring中为什么默认是单例
- 说说单例和原型各自的优缺点
- 手写三个线程安全的懒汉型单例模式
- 写的过程中让解释了static、锁、锁的粒度一些知识
- 让介绍synchronized和reentrantlock各自适用的场景
- 手写一个对外提供put、get、remove的hashmap,用数组和链表实现,不需要写hash算法
全程除了一开始问Spring中为什么默认单例的问题之外,基本就是一边写代码一边问问题,不难发现一面考察主要是技术面的宽度,二面主要考察技术的深度。
美团一面(40分钟)
- 项目介绍,反问了项目中的难点在什么地方(回答了数据库IO的瓶颈,引入Redis技术,面试官就问数据库IO的IPS是多少)
- Redis和数据库并发一致性问题
- Redis加分布式锁解决缓存雪崩的问题时存在的问题
- 如何保证Redis加锁和解锁都具有原子性
- 聊数据库三范式
- 索引、聚簇索引、辅助索引、覆盖索引
- 解释一下丢失修改、脏读、不可重复读、幻读具体什么并发竞争下发生的问题
- 上述并发一致性如何解决
- 回到Java的问题上,说一下Java的基础数据类型
- String为什么是不可变的
- 如果对一个String对象频繁的修改,会有什么问题,如何改进
- 除了转成StringBuffer、StringBuilder还有其他好办法吗
- hashmap线程不安全的场景介绍一下
- 如果让你设计一个线程安全的hashmap你会从哪些角度考虑
- 线程的生命周期
- 多线程还问了一些其他题,有点会议不起来了,想到了再更新补上
- 手撕一个SQL,从一个表中选出所有成绩都大于80分的学生的姓名
- 任选一个排序算法手撕,直接在网页里写并要求运行,写了个快排
第一个问题那因为单机没做过压测,面试官有点质疑项目的真实性,追问每次IO的数据量有多大(最后面试官也直接说没必要刻意说为了解决数据库IO存在的问题引入Redis,你提了数据库瓶颈那你得了解具体的瓶颈,不然就是减分项了)
美团二面(50分钟)
- 询问了一下意向城市、手头的offer和岗位投递情况
- 实习项目的业务了解,在我描述自己做的工作的时候会提问为什么不用另外的做法,然后会和面试官解释原因,重点介绍自己遇到的一些难点,解决的方法
- 个人项目中某个技术的询问
反问环节面试官耐心地就部门业务和新人培养制度给我介绍了十多分钟,真的是很nice了。
有赞一面
耍了点小心机,特意提了下很欣赏有赞提倡的氛围,面试官问是特意了解过有赞吗,就顺水推舟夸了一波。
- TCP三次握手及各个状态名称
- 四次挥手的各个状态名称和流程描述
- POST和GET的区别
- POST的body的大小
- Java的类加载器介绍
- 写过自定义类加载器吗
- 双亲委派机制
- 线程的生命周期,各个状态的转换调用什么方法
- wait和sleep的区别
- 实现线程的四种方式
- 实际使用线程池的场景
- 线程池的核心参数
- 让你手写线程池参数需要考虑什么因素
- volatile的作用及实现原理
- ThreadLocal作用、原理、应用场景、存在的内存泄漏问题及解决
- Redis持久化方式AOF和RDB的介绍
- Redis的事务
- 索引的存储结构
- 聚簇索引和非聚簇索引区别、优劣
- 联合索引、覆盖索引
- 什么时候适合建索引
- 什么时候建立了索引但是没有走到,针对单列索引(查了下就是索引参与函数计算、转型、模糊查询等会索引失效,进行全表扫描)
- 数据库隔离级别以及分别解决的是什么问题
总结
准备面试的日子压力很大,每天晚上都会看追两集剧再睡,也很枯燥,每天单调地重复笔试、面试、准备面试、练习笔试,但是只要有心,生活就有值得开心的地方,希望各位都能有满意的offer,共勉,此致。
更多JAVA面试题:戳这里免费领取,暗号:CSDN,还有更多大厂面试专题资料和视频哦!