圆梦!顺利拿到字节、淘宝、拼多多等大厂 offer!

14 篇文章 1 订阅
7 篇文章 0 订阅

分享一位球友在今年二月份投稿的面经(社招),写的非常详细,内容很不错。他在当前这种招聘环境下依然拿了很多大厂的 offer,确实很厉害了!

下文中的我代表这位投稿的球友。

大家好,我是工作时长两年半的 Java 开发工程师,喜欢摸鱼、划水、code、开会,接下来我将介绍下我的社招求职心得和面经。

方法论和知识点我就不多介绍了,更多是想说一些我的感受和建议,分为以下两个方面:

  • 面经 :白龙马云行科技、字节、淘宝、快手、百度、拼多多等上十家拿到 offer 或者谈薪阶段主动终止的公司的完整面经。
  • 经验分享 :心态、简历、算法、技巧。

面经总结

面经部分都是拿到 offer 或者谈薪阶段主动终止的公司,其他小公司或创业公司都是为了练手,面试题没有普遍性的都没有列举出来,面试问题写的少的都是问项目、业务比较多的。算法题只在 leetcode 上找原题,没有贴出链接的就是 leetcode 上没有的。

白龙马云行科技

一面

主要按照项目职责描述一条一条问,考察设计思路:

1、项目中的难点;

2、介绍下 xxl-job 的实现原理;

3、disruptor 的使用场景;

4、生产者出现堆积的话怎么解决;

5、生产消费过程中如果服务出现异常,如何恢复;

6、介绍下 MySQL 的索引;

7、B+树的特征,为什么 MySQL 要使用 B+树;

8、如何做到监控线程池;

9、RPC 服务超时的情况如何止损;

10、如何实现异步多线程追踪;

11、Redis 超时问题,排查过程中考虑的角度,使用了哪些方法;

12、服务设计时怎么体现高可用性、易用性;

13、用户身份唯一性确认;

14、对我们公司有了解吗;

15、Integer a=200;Integer b=200,a 和 b equals 是否为 true;

16、介绍下缓存雪崩、击穿、穿透,如何避免;

17、工作中是否遇到过 CPU 过高、内存过高的情况,怎么排查问题原因的;

18、单链表和双链表的优缺点;

19、判断单链表是否有环,算法的时间复杂度;

20、ArrayList、HashMap、TreeSet 哪些属于有序的,哪些是稳定的;

21、线程池的工作原理;

22、线程池中关于时间的参数起什么作用;

23、项目中有没有用过并行流;

24、ForkJoin 线程池默认线程数;

25、新生代和老年代的特点,分别使用哪些算法;

26、软引用和弱引用的回收时机。

二面

1、离职原因;

2、现在公司的技术氛围;

3、下一份工作的偏好;

4、未来发展规划;

5、数组和链表遍历哪个更快(考虑存储);

6、Integer 为什么要有-128~127 的常量;

7、Java 已有可达性分析和 GC,为什么还要设定软引用、弱引用;

8、ThreadLocal 为什么使用弱引用;

9、Redis 清理过期数据的策略;

10、一个 G 数字文件,100M 内存,排序。

瓴岳科技

一面

1、怎样参与 CR;

2、印象深的好的代码、不好的代码;

3、ThreadLocal 不 remove 会有什么问题;

4、Redis 7.0 的新特性;

5、介绍下 Disruptor,有哪些组件使用到了;

6、Disruptor 底层实现,为什么快;

7、Java 的锁是怎么实现的;

8、AQS 中线程并发时同步队列的放入情况;

9、Netty 如何使用 http 复用;

10、项目中线程池的用法、场景;

11、算法:找到二叉树指定节点中序遍历的下一个节点(类似剑指 Offer II 053. 二叉搜索树中的中序后继[1])。

二面

1、为什么要引入生产者-消费者模式;

2、项目中 ES 的使用场景;

3、项目新老服务迁移的过程;

4、单元测试的情况;

5、工作以来最大的收获;

6、介绍下分布式事务;

7、项目中怎么保证分布式一致性;

8、介绍下 RocketMQ;

9、算法:155. 最小栈[2]

10、算法:爬楼梯,每次可走 3 步和 5 步(类似70. 爬楼梯[3],要求动态规划实现,五阶递推数列)。

三面

1、项目中可优化的点,对项目的思考;

2、生产者-消费者模式怎么保证消息不丢失;

3、微服务的概念;

4、设计题:设计一个消息队列;

5、算法:128. 最长连续序列[4]

字节

一面

1、服务的可用性监控;

2、服务故障的保障性;

3、MQ 出现消费积压,如何处理;

4、线程池工作的机制;

5、核心线程可能会被销毁吗;

6、核心线程数和最大线程数的区别;

7、阻塞队列的特性,底层实现;

8、ThreadLocal 数据结构和工作原理;

9、弱引用的特性;

10、为什么 ThreadLocal 的 key 使用弱引用;

11、事务 ACID 的特性;

12、事务隔离可能出现的问题;

13、介绍下 Redis 的高可用;

14、Redis 的主从、哨兵模式;

15、算法:判断一个树是平衡二叉搜索树(110. 平衡二叉树[5]、98. 验证二叉搜索树[6] 两道题的合并)。

二面

1、项目的具体模块设计;

2、RPC 中 tcp 协议和 http 协议的区别;

3、http 2.0 的优化;

4、介绍下多路复用;

5、MySQL 分表;

6、项目中用到缓存的场景;

7、Redis 的特性;

8、Redis 支持高并发的原理;

9、Redis 数据丢失后如何恢复;

10、Redis 的持久化策略;

11、执行 RDB 操作时如何对外提供服务;

12、Redis 淘汰策略;

13、算法:146. LRU 缓存[7]

三面

问题:

1、业务讨论;

2、系统的架构;

3、市面上流行的规则引擎有哪些;

4、为什么选择现在的规则引擎;

5、怎么控制规则变更过程中的风险;

6、项目可进一步优化的点;

7、算法:22. 括号生成[8]

淘宝

一面

1、==和 equals;

2、重写 equals 的场景;

3、深拷贝、浅拷贝、零拷贝;

4、介绍下 Java 中的动态代理;

5、序列化,有哪些方式,选型;

6、maven 冲突,怎么发现,如何解决;

7、Linux 大文件查看,du -sh;

8、大文件按行去重。

9、算法:2 种以上实现单例的方式;

10、算法:0~n-1 选 m 个不同的随机数;

11、算法:字符串转 long(类似8. 字符串转换整数 (atoi)[9])。

二面

1、ES 正排和倒排的区别;

2、ES 如何优化 query 查询速度;

3、ES 什么时候增加、减少节点;

4、ES 如何引入排序算法;

5、系统如何限制 TP999 时间;

6、hashmap 在多线程下可能出现的情况;

7、hash 冲突的意思;

8、cookie 和 session 的区别;

9、如果已经禁用了 cookie,还能使用 session 吗;

10、如何实现单点登录;

11、安全性的保证;

12、同步、异步、阻塞、非阻塞;

13、线上 Java 服务有问题如何排查;

14、git merge 和 rebase 的区别;

15、一个没有源码的应用,如何替换数据库地址;

16、算法:剑指 Offer 62. 圆圈中最后剩下的数字[10](约瑟夫环)。

三面

1、为什么看新的工作机会;

2、在现在公司工作经历;

3、介绍下最近的项目;

4、项目中需要优化的点;

5、项目中策略的效果评估;

6、工作期间觉得成长比较快的事情;

7、做过哪些搜索引擎相关的工作。

菜鸟

一面

1、介绍几种 NIO 模式;

2、Redis 中使用的 NIO,与其他 NIO 对比的优势;

3、缓存击穿、穿透、雪崩,解决方法;

4、Redis 能否存储 null;

5、MySQL 的性能瓶颈;

6、介绍下分库、分表,常见操作。

7、编程题:小猫抢鱼,三个线程表示三只猫,抢一堆鱼,每次抢一半的鱼,直到为 0。

二面

面了两个小时,问了很多很多技术问题,挖的比较深入:

1、大量业务相关问题(考察知识边界);

2、项目中的难点;

3、介绍下 kylin;

4、disruptor 不同等待策略;

5、为什么选择 disruptor;

6、介绍下 disruptor 的底层实现;

7、disruptor 的无锁体现在哪里;

8、disruptor 游标的技巧;

9、disruptor 如何解决 JDK 当时无法处理的伪共享;

10、CompletableFuture 和 Future 的区别;

11、CompletableFuture 提供的创新设计模式—promise 模式;

12、关注的 CPU 使用率指标具体是哪个;

13、object 的 equals 和 hashCode 方法,能不能只改 equals;

14、hashmap 的数据结构,扩容时机;

15、concurrentHashMap 和 hashmap 的区别,为什么前者的 key 和 value 都不能为 null;

16、concurrentHashMap 怎么保证的线程安全;

17、怎么启动一个线程,怎么让线程停下来;

18、怎么让变量线程安全;

19、volatile 怎么做到可见性;

20、CPU 的真实存储结构;

21、平时的学习途径;

22、对哪方面研究的比较深;

23、了解哪些设计模式;

24、使用 arthas 的场景;

25、arthas 排查线程占比过高的实现原理;

26、编程题:实现一个方法,判断两个数组是否相等,元素类型为泛型。

快手

一面

1、ConcurrentHashMap 如何实现线程安全,如何保证安全扩容;

2、synchronized 锁升级的过程;

3、Java 中有哪些乐观锁;

4、读写锁和 synchronized 有哪些区别;

5、synchronized 为什么可以做到异常自动释放锁;

6、介绍下 ReentrantLock;

7、AQS 同步队列中的线程什么情况下知道可以激活;

8、Redis String 类型底层数据结构;

9、Redis 持久化方式;区别、优缺点;根据业务判断下选择哪种方式比较好;

10、OOM 的排查;

11、JDK 版本与 GC;

12、G1 的优势;

13、算法:2. 两数相加[11]

二面

1、项目中 kylin 的使用场景;

2、项目中 CompletableFuture 的使用场景;

3、生产并发过高的问题,如何解决的;

4、Spring 中的 BeanFactory 和 FactoryBean 的区别;

5、线程池的核心参数,任务执行过程中的变化;

6、MySQL 索引的底层数据结构;

7、介绍 disruptor 框架的特点;介绍下使用场景;

8、Spring AOP 的实现原理;

9、动态代理和静态代理的区别;

10、介绍下 RPC 中调用方请求服务方接口中间的过程;

11、服务方轮询的地方,如何确定具体提供服务的 IP;

12、多个 PRC 服务如何保证一致性;

13、设计题:班级、学生、课程,设计 MySQL 表;

14、设计题:实现快手关注中心功能,发布者发布的内容能被看到,观看者能看到所有关注的人发布的内容且形成信息流列表;

15、平时的学习渠道和方法,举一些例子;

16、换工作的原因,对下一份工作的期望。

三面

1、规则引擎的选型与实现;

2、Redis 分片和复制的机制;

3、排查 Java 服务 CPU 占用率百分之百;

4、GC 识别垃圾对象的方法;

5、常用的 GC;

百度

一面

问题:

1、如何保证分布式数据一致性;

2、MQ 消息发送失败、消费失败如何恢复;

3、Redis 集群模式下数据在不同机器上的影响;

4、Redis 的 NIO 模型;

5、百度上亿的广告物料,考虑到检索效率、更新,如何设计比较好;

6、介绍下 JMM 模型,作用,场景;

7、synchronized 升级的内容,锁升级过程;

8、介绍下 RocketMQ;

9、如何解决重复写、重复读、消息丢失的问题;

10、算法:445. 两数相加 II[12]

二面

除了项目,全部都是数据库相关的问题:

1、分页查询大量数据,如何设计(避免出现页码过深,耗时很长的问题);

2、limit 为什么会出现页码越大,耗时越长的问题;

3、>、<条件会用到索引吗,处理过程;

4、那些条件会用到索引;

5、between and 会走索引吗?什么情况下不走索引;

6、between and 和 limit 的区别;

7、设计一个适用消费者模式的消费表,对外提供消费接口,分布式并行消费,保证不漏消费、不重复消费;

8、如何通过 MySQL 保证行的原子性;

9、Redis 如何解决原子性;

10、MySQL 如何做到 where 条件匹配多条但只更新一条(用 update limit);

11、MySQL 表同时收到多条更新操作,如何处理;

12、update 时,行级锁是在什么时间点加上的。

三面

三面技术文的较少,闲聊偏多:

1、最近在看哪方面的知识;

2、介绍下对 Java 并发编程的理解;

3、单线程一定会比多线程慢吗?分别适用于什么场景;

4、实际工作中使用多线程的场景;

5、业务模式讨论;

6、觉得自己项目中做的比较出彩的点;

7、介绍下熟悉的设计模式;

8、下一份工作的目标。

拼多多

一面

1、描述下对 Spring IOC 的理解,与传统 new 的方式相比优势有哪些;

2、SpringBoot 如何实现每次 Autowired 都创建新的实例;

3、Mybatis 的 Transactional 注解实现事务的原理;

4、动态代理原理实现的注解有哪些注意事项;

5、MySQL 的几种 log 的作用;

6、聚簇索引和二级索引的区别;

7、varchar 和 text 类型的字段存储形式有什么区别;

8、text 类型的字段可以创建索引吗;

9、介绍下 Redis 管道通信;

10、算法:150. 逆波兰表达式求值[13]

11、算法:计算四个数字数组和为 0 的组数,O(n²)时间复杂度。

二面

1、ES 的优化方式;

2、Redis 的哨兵机制;

3、分库分表;

4、MySQL 的事务隔离级别;

5、介绍下 InnoDB 的 mvcc;

6、算法:剑指 Offer 29. 顺时针打印矩阵[14]

三面

主要是一些闲聊,问到了加班问题:

1、为什么不考虑读研;

2、校招时为什么要选择现在的公司;

3、在每个阶段的工作人员组成情况;

4、目前的状态,为什么想出来看机会;

5、对于工作地点是怎样的考虑。

6、对于拼多多的工作时间接受吗;

搜狐媒体

一面

1、git merge 原理;

2、jvm GC,垃圾回收器,为什么不用 G1;

3、SpringBoot 启动 装载 starter 过程;

4、concurrentHashMap 扩容过程;

5、slfj 选择 log 的机制;

6、clone()方法,为什么没人用;

7、hashcode,生成方式;

8、算法:判断整数奇偶;

9、算法:合并 map,求平均值,带嵌套;

10、算法:链表相加,实现 this.add(ListNode b)。

二面

1、几乎全部为业务、项目相关问题;

2、任务中断如何处理;

3、项目中用到的设计模式,解决的问题;

4、未来的规划;

5、对下一份工作的期望。

三面

现场面试:

1、项目流程,架构画图;

2、项目可优化的点;

3、项目效果;

4、算法:判断一个数是否能被每一位上的数整除(美丽数);

5、算法:56. 合并区间[15]

小红书

一面

1、介绍下项目;

2、介绍下 hashmap 的原理;

3、为什么引入红黑树;

4、如果不用树,引入其他数据结构解决链表过长查询效率低;

5、CompletableFuture 的使用场景;

6、线程池的执行流程;

7、为什么线程池执行的机制设计成这样;

8、并发包下的工具类;

9、RPC 服务,A B C D 四个调用,A B C 之间没有依赖关系,D 需要等到 A B C 执行完之后再执行,有哪些实现方式;

10、MySQL 中(a,b,c)建立了联合索引,几种可以命中索引的场景;

11、如何减少回表;

12、select * 为什么会导致回表;

13、服务中使用的 GC;

14、meta space 中存储的数据;

15、服务启动后,mate space 的空间不断增加的原因;

16、查看 mate space 的存储情况;

17、SpringBoot 动态代理的实现方式;默认使用方式的变化;

18、动态代理方式的性能区别;

19、Redis 查询突然变慢的原因;

20、项目中出现 Redis 连接超时的原因;

21、消息队列,rocketMQ 的实现原理;

22、disruptor 的使用,实现原理;

23、设计题:直播间大红包分发,10 亿红包,10 万观众,每个红包额度 1-100 元;

14、算法:剑指 Offer II 069. 山峰数组的顶部[16]

二面

1、大量业务、项目问题,根据简历上的职责描述一条一条的问;

2、项目中解决问题;

3、介绍下 MySQL 分库分表,垂直、水平、服务端、客户端分表;

4、实现的方式有哪些;

5、ES 如何实现深度分页;

6、在团队中的角色;

7、离职的原因,未来的规划;

8、有了解竞品产品吗,了解到什么程度;

9、过往绩效情况。

三面

基本都是项目相关的问题 :

1、项目中规则引擎的实现;

2、本地缓存存在的问题;

3、介绍下 disruptor;

4、学习途径,看过哪些书;

5、对下一份工作的期待。

滴滴

一面

1、针对项目不断延展,给的压力很大;

2、列举项目中的三个难点;

3、SQL 中为什么 in 比 between and 慢;

4、工作中觉得做的不足的地方;

5、如何提升业务理解能力;

6、设计题:设计广告索引引擎,几百万的广告数据,如何做到几十毫秒左右检索、返回广告;

7、离职的原因;

8、对下一份工作的预期;

9、算法:53. 最大子数组和[17]

10、算法:字符串相减(415. 字符串相加[18] 入参相同)。

二面

倾向于方法论相关的问题:

1、工作期间的成长;

2、服务可用性的监控有哪些,监控体系是怎么考虑的;

3、负责的服务在整个工程中的角色,重要性如何体现;

4、针对服务出问题的情况,值班机制是什么样的;

5、系统哪部分查的问题最多,解决方案是什么;

6、出现问题多的原因是什么;

7、未来的职业规划;

8、沟通能力的体现;

9、算法:54. 螺旋矩阵[19]

经验分享

心态

求职过程中最重要的就是心态,包括准备阶段和面试过程。我在去年三月份的时候被字节 hr 热情约面,于是想着多投几家试试水,结果发现最多到二面就结束了,很多问题都不会。现在想想很正常,因为当时很多面试题和面试指南都没有看完,但是当时觉得很郁闷,总有自己太菜的想法冒出来。知道要学哪些知识,但是知识太多了,加上看到别人的面经,投的公司一样,人家都拿到 offer 了,就觉得差距太大了,导致心态总是很崩溃。当时的化解方法是先去旅游放松了一下,然后制订了近三个月的学习计划,中间穿插着看放松心态的书,看书加上实际的学习,让心态真的平静下来。

然后是求职过程中的心态,我都是使用 BOSS 直聘投递简历的,和中小公司 hr 沟通的过程中,想到最多的一句话就是“夏虫不可语冰”,主要体现在问期望薪资,他们要么说太高了、要么说现在的行情不可能给到这么高,还有说我现在薪资就挺高的,建议多待一段时间 。后面遇到大厂的 hr、猎头、主管,都是直言期望薪资正常,所以在和 hr 沟通的过程中也要稳住心态,坚信自己的想法。

最后是面试过程中,中小厂的一些面试官喜欢让你简短介绍项目,等你介绍完了,又不断的暗示或明说你的项目简单,这个时候也不要觉得自己项目真的很差,因为只是一些复杂的细节你没有介绍出来,或者面试官故意制造的压力测试,再或者就是面试官的素质、水平原因,因为我确实没有遇到大厂面试官说过这种话。

最关键的如果面试没有通过,千万不要气馁,总结下面试经验,接着投下一家就好了,只要坚持找,一定能找到工作。

简历

不管校招还是社招,简历都是很重要的敲门砖,像我在试水阶段就被面试官说过看我的简历不知道我是什么岗位。后面我看了很多简历指导课,跟着视频优化简历,根据反馈再修改。最后,都是 hr 主动要简历,并且没有简历筛选不过的。

技巧

一是拿小公司练手,太久没有面试,表达能力和描述项目可以通过真实面试过程来精进,这时就可以拿中小公司或者没有意愿的公司来面试练手。

二是面试录音,所有面试全程录音,下来复盘问题,听听自己的回答是否流程、重点有没有说出,以及不会的问题再学习寻找答案。我觉得面试就像是戴着耳机唱歌,只有唱完听录音才自己唱的怎么样。

·············· END ··············

欢迎准备 Java 面试以及学习 Java 的同学可以私信我回复【888】即可免费领取,干货很多!虽然是免费,但星球里的内容或许比你参加上万的培训班质量还要高。

如果本文对你有帮助的话,欢迎 点赞&在看&分享 ,这对我继续分享&创作优质文章非常重要。非常感谢!

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值