博主大大
博主大大
Published on 2024-12-25 / 37 Visits
2
0

Java面经分享

写在前面

时光如梭,已经整整停更了3年多。对此我感到非常的自责,作为一名程序猿,我深知持续学习与分享的重要性,但这三年确实懈怠了很多。在2025年来临之际,我想重新打开这尘封已久的博客,于是给网站换了个主题,继续更新!

为什么会停更?

其实原因很简单,在21年的6月底,博主加入了一家互联网大厂。虽然工资比之前高了很多,但留给自己学习的时间是真的不多。也导致我逐渐没有精力继续更新我的博客。当然也不是什么收货也没有,这三年也明显感觉自己成长了不少,并且自己对许多架构和技术的思考与想法也与三年前成长了不少。后面有机会一定会跟大家分享!

正片开始

21年的时候面试了非常多家互联网公司,包括各个头部互联网大厂,独角兽公司等等,并且基本都拿到了offer,因此今天希望分享的就是当年的面经,希望对你能有帮助。
(什么?!你觉得21年的面经过时了? 那么我想你错了,如今我自己成为了面试官,我想说可能这几年技术革新非常快,但是就Java开发工程师这岗位的面试题真没啥变化,毕竟24年了还在问十年前的JDK8有啥新特性...)

爱奇艺

一面

  1. 介绍项目
  2. 项目中用到的设计模式
  3. 项目中如何处理高并发
  4. Redis集群
  5. Redis RDB 和 AOF原理
  6. Redis除了缓存和分布式锁还能干什么?
  7. 数据库如何优化,索引的数据结构,多表联合如何优化
  8. Redisson+AOP逻辑,Redisson的原理
  9. Spring,SpringBoot,SpringCloud原理
  10. SpringCloud各个组件介绍
  11. Zuul,Ribbon实现原理
  12. 什么是中台。业务特殊处理的功能可以放在中台吗
  13. 亿级数据如何做的存储与优化

二面

项目问的比较多

  1. 说说中台是什么?中台是一堆服务的集合嘛?
  2. 咨询中台的架构设计如何(按照DDD战略设计回答)?项目里代码架构是怎样的?
  3. Redission + AOP的逻辑
  4. 分库分表是怎么去分片的?
  5. 说一次服务内出现问题,如何排查的经历
  6. 遇到过消息丢失的情况吗?怎么处理的?消息可靠性保证
  7. 如何去做到的多端同步?

三面

  1. JOOQ和MyBatis的实现原理
  2. 谈谈多态的理解
  3. 组合,多态,继承之间各有什么好处?
  4. List和Map有什么区别
  5. 二叉查找树与红黑树有什么区别
  6. 聊聊乐观锁与悲观锁,数据库的应用,平时项目中的运用
  7. 什么是中台?谈谈你对中台的理解?
  8. 中台和前台有什么区别?
  9. 使用中台的时候遇到过什么好处和坏处

蚂蚁金服

一面

1.介绍下亮点项目(问的非常深入)

  • 消息可靠性保证

  • 这个消息可靠性保证与MQ有什么区别?

  • 收件箱项目。怎么想到使用Redis做收件箱的?

2.Redis的RDB与AOF

3.Redis的过期淘汰以及删除策略

4.分布式事务(重点问了项目里如何实现最终一致性)

5.谈谈垃圾回收,常用的垃圾回收算法

6.如何解决项目中遇见的问题?

7.Mysql如何解决慢查询?索引的数据结构?

8.Mysql中的乐观锁与悲观锁

9.并行开发多个任务时,如何安排?

10.团队中所担任的职责?主负责项目时如何安排团队协作

二面

  1. 分库分表怎么做的?
  2. 消息是怎么保存的?如何流转的时候保证会话根?
  3. 项目中如何保证的事务一致性?
  4. 最近读过什么书?
  5. 如何保证的数据一致性?在支付领域,写完直接查询,查询不到怎么办?列举一些解决方案?
  6. 实现一个特殊队列
queue.offer("key1",”value1");
queue.offer("key2",”value2");
queue.offer("key3",”value3");

queue.take();  key1-->key2-->key3
queue.take("value2) ;   key2-->null

// 写是单线程,读是多线程 

三面

  1. 高扩展的咨询框架是如何开发的?怎么做到搞扩展?举个栗子呢?
  2. 消息服务是怎么做消息收发的?为什么使用HTTP而不使用MQ?使用HTTP带来的好处是什么?弊端是什么?如何去解决?
  3. 遇到的严重线上事故是怎样的?多少人几天解决的?从中学到了什么东西?
  4. 你觉得在上家公司获得的最大技术提升是什么?如何使用ddd使得代码模型与业务模型相同?举个例子?(举了病历的例子)病历有哪些属性与行为?如果病历数量达到10万,需要额外去考虑一些什么问题?
  5. 两次跳槽的原因是什么?不怕被人说跳槽频繁嘛?
  6. 你最佩服的人是谁?为什么?
  7. 你觉得你写的代码怎么样?为什么?
  8. codeReview的时候,别人如何评价你写的代码?你觉得别人的代码最大的问题是什么?
  9. 你们的团队多大?你的绩效如何?你觉得为什么你可以获得这样的绩效?

得物

一面

  1. SQL优化是怎么做的?
  2. 保持的代码规范是怎样的
  3. 怎么看SQL使用了哪个索引
  4. Mysql隐式转换了解过没?
  5. ConcurrentHashMap原理,为什么要转换为红黑树,为什么到8时进行转换?
  6. JVM垃圾回收机制,GC算法,GC回收器
  7. volitile关键字如何保证可见性,MESI协议

二面

  1. Mysql 如何做优化
  2. 什么是脏读?什么是可重复读?什么是幻读?
  3. Mysql如何解决脏读,可重复读,幻读?
  4. Mysql的Redo Log,Undo Log,Bin Log的执行先后顺序是怎样的?写Bin Log时异常了怎么办?
  5. 了解过索引下推嘛?
  6. Explain会展示什么?type里面有哪些字段?分别什么含义?
  7. 一条请求在Mysql中的执行流程?
  8. Redis的常用数据结构,常用对象有什么?
  9. Redis的哈希数据结构是怎么扩容的?底层是否会有线程在后台执行扩容?
  10. Redis跳表的层级是如何生成的?
  11. Redis集群的原理?集群之间是如何通信的?增加节点会如何操作?主从如何切换?
  12. 了解过Paxos协议嘛?
  13. 同步,异步,阻塞,非阻塞分别指什么?
  14. 同步非阻塞的实现有什么?IO多路复用
  15. TCP和Ping命令有什么区别?
  16. 如何判断网络问题?是交换机出问题?还是网卡问题?还是DNS问题?
  17. 什么是动态规划?
  18. 不考虑空间复杂度,什么排序速度最快?(统计排序)
  19. 有没有复杂度为O(logn)的排序算法?为什么没有?

哈啰出行

一面

  1. 讲讲项目
  2. 如何使用的策略模式+工厂方法+模板,类结构是怎样的
  3. 项目的结构是如何的,Controller和Service的关系
  4. 如何使用DDD开发的消息服务
  5. 领域模型是怎样的,领域模型和Controller如何关联,领域模型的事件驱动
  6. 谈谈如何使用DDD划分电商领域功能,为什么搜索商品要单独划分一个领域?如何设计搜索领域的领域模型
  7. Spring IOC的理解,Spring对象使用的线程安全问题(单例,多例)
  8. 线程安全问题解决,Synchronized,ReentrantLock区别
  9. volitile原理,JMM和MESI协议
  10. 线程池核心线程数怎么进行配置?
  11. Redis缓存与数据库数据如何保证一致性
  12. 谈谈RPC协议,与HTTP调用有什么不同
  13. Innodb数据是如何存储的?谈谈聚簇索引。
  14. 数据页的数据是有序的吗?如何保存的?
  15. 一张表有课程,学生,分数,如何查询每门课的学生平均分?如何查询选修课程大于10人的平均分?

二面

  1. 谈谈亮点项目
  2. Redisson+AOP是咋实现的?Redisson的原理。为什么不使用Spring的@Cached?
  3. 算法:股票买卖问题
  4. 针对算法,如何写单元测试?

携程

一面

  1. 谈谈项目
  2. 一条消息的流程
  3. 设计模式的理解,如何使用责任链模式
  4. 谈谈Collections和Map的下属分支,HashSet的value为何定义了一个空对象而不用null
  5. HashMap为何链表长度到8之后转换成红黑树?
  6. 线程池的参数如何去配置?
  7. Mysql索引的数据结构
  8. 如何做SQL优化

二面

  1. 为什么要做分库分表?分库分表效率提高了多少?
  2. 说一下消息的流程
  3. 项目的QPS多少?是否有做监控?
  4. 如何做的SQL优化?有用过分区表嘛?
  5. 是否有大数据开发经验?

美团

一面

  1. 分库分表使用了什么分片算法?如果历史消息特别多怎么办?
  2. Spring如何解决循环依赖?
  3. Volitile原理
  4. Synchronized原理,Synchronized锁升级
  5. 线程池的原理?
  6. CAP原理是什么?Redis是CP还是AP?
  7. Redis怎么保证的AP
  8. Redis为什么吞吐量那么高?
  9. Redis的数据结构为什么很巧妙?字典对象的底层数据结构
  10. Java8有什么新特性?stream的原理是什么?
  11. Mysql索引是一个怎样的数据结构?
  12. 聚簇索引和非聚簇索引有什么区别?
  13. Mysql 的事务隔离级别?默认隔离级别?如何解决幻读?MVCC机制?
  14. Mysql drop,truncate的区别
  15. 线上实例是怎么配置的?内存和大小是多少?
  16. 实例可以创建多少个线程?一个线程约占多少大小?
  17. 算法:反转后半部分链表

一面(换了个部门面)

  1. 消息服务如何保证消息可靠性的?
  2. 谈谈什么是中台?为什么要使用中台?如何保证中台的高拓展与通用性
  3. 如何参与的服务设计?主要在咨询中台负责什么?
  4. 分库分表如何调研?
  5. JVM分成哪些区域?这些区域会因为什么问题出现OOM?
  6. 项目中使用到的JVM参数有哪些?
  7. 服务中哪些地方用到了Volatile,Volatile的原理?Volatile加锁了吗?什么是事件总线锁?
  8. 什么是死锁?
  9. 谈谈G1收集器的原理,JDK11还新增了哪些垃圾收集器?
  10. 介绍下线程的状态有哪些?
  11. 服务中哪些地方使用了多线程?线程池的参数是怎么配置的,为什么?
  12. 线程池如何进行监控?如何动态的配置线程池
  13. Redis有哪些集群模式?哨兵模式和主从模式的区别,哨兵模式的缺点在哪?
  14. Redis是如何进行主从复制的
  15. Mysql是怎么进行主从复制的?主从瞬时不一致问题是如何产生的?
  16. Mysql的buffer pool了解过嘛?为什么要有buffer pool。
  17. 项目里是如何搭建的一个高可用系统的?
  18. 题目:写一个死锁

二面

  1. 项目流程,非常细。会话的状态有哪些,会话超时,托管中这种状态是不是不应该算在状态机中?患者一段时间不回复关闭会话是怎么做的?如果这种会话数据量非常大怎么办?线程池怎么配置?主线程如何阻塞住?
  2. 算法: 二叉树的最近公共祖先
  3. HashMap和LinkedHashMap的区别
  4. Synchornized的实现原理,cxq队列是保存在哪里?monitor对象有哪些属性?是如何锁住的
  5. Redis有哪些数据结构?为什么Zset要用跳表而不用红黑树?Redis使用什么协议与客户端进行通信的?

三面

  1. 算法:链表内指定区间反转
  2. 谈谈做的项目
  3. 消息服务使用HTTP与MQ之间的优劣有哪些
  4. 收件箱的实现,如果数据量非常大的时候如何处理?

字节跳动

一面

  1. HashMap的原理?为什么线程不安全?
  2. Mysql的四种隔离级别..做题..

image.png
3. 可串行化隔离级别在Mysql中是如何实现的?
4. MVCC机制
5. 做题:求乱序数组中第K大的数,不能排序
6. Redis的字符串是怎么去实现的?SDS有哪些好处? String如何保证的二进制安全?
7. Redis原生分布式锁有哪些问题?释放锁的时候会怎样,如何保证原子性?
8. Redssion如何续租?
9. Redis集群脑裂问题?
10. 跨域问题是什么?如何解决?
11. 有哪些IO模型?
12. 什么是 同步,异步,阻塞,非阻塞
13. 进程和线程有什么区别?句柄是线程还是进程?(没答好,问题都没听懂= =)
14. DDD的好处有哪些?有做过事件风暴嘛?

二面

  1. 做题:文件夹管理系统(支持新增、删除、移动、重命名文件或者文件夹,支持罗列某个文件夹下的子文件或者子文件夹并按创建时间排序)给出Mysql表结构,索引来实现此需求
  2. B+Tree的查找复杂度是多少,log的底数是多少?为什么呢?能不能从BTree查找的底层来解释?
  3. Mysql的当前读与快照读区别是什么?会加锁嘛?
  4. Mysql如何处理慢查询?
  5. 讲一下你知道的Mysql所有的锁
  6. 如何排查网关502问题?502与504状态码有什么区别?
  7. 有哪些推送消息的方式?HTTP,WebSocket还有嘛?
  8. HTTPS是对header加密还是body加密?使用了哪些加密算法?
  9. 项目中如何拆分微服务
  10. 算法:大数加法,求大数加法,输入两个字符串(大数),输出两个字符串的和
  11. HTTP3.0有什么新特性?

三面

  1. 说说你的亮点项目
  2. 项目中如何去保证系统高可用的,项目中如何做分层?
  3. 算法:一个随机函数能等概率生成'a'—>'d'的字母,要求使用该函数等概率生成'a'—>'f'的字母
  4. 数据库题:1)查询每个学生分数最高的记录(如果重复一起查出来)2)查出每个学生分数第二高的记录(如果重复一起查出来)
  5. 算法:前序遍历数组,中序遍历数组求出后续遍历数组

四面

  1. 谈谈项目中出彩的地方
  2. Spring IOC是什么?实现原理?Spring中还有什么细节?
  3. 算法:跳格子的游戏,每个格子上有一个数,从第一个格子出发目标是到达最后一个格子,所在的格子上的数字,决定了下一步能够跳跃的最大距离。找出最少的跳数,无法到达返回-1,尽量低的时间复杂度。 int getMinSteps(int[] arr) 3 5 0 7 1 。。。 3 2 0 0
  4. Redis RDB,AOF实现原理
  5. DDD项目中的应用,DDD优势是啥?
  6. 浏览器输入网址后发生了什么?
  7. HTTP有哪些组成?Header,Body里面有什么?还有嘛?
  8. HTTPS的流程

Comment