面经:两年半经验,面10个公司,经28轮面试,拿9个offer,涨麻了!

给大家分享一个读者的面试经历。

我看了一下我们的聊天记录,他 2020 年的时候就加了我,讨论过几次技术相关的问题。然后他也慢慢开始写文章,我看了他的文章隐隐感觉到是个工作多年的大佬。

没想到是大佬不假,但是他居然才毕业不到三年时间。

他是二本毕业,工作年限是 2 年半。

以下是他的面试分享。

面试准备

复习

你信我,真学习还得看书,看书能让你的知识体系更加健全。

当然,平时也可以看一些大佬的文章扩充一下知识库。

我看过的 Java 相关的书单如下:

  • Java:《Java 并发编程的艺术》、《Java 并发编程实战》

  • JVM:《深入理解 Java 虚拟机》第三版、《深入 Java 虚拟机:JVM G1GC 的算法与实现》、《新一代垃圾回收器 ZGC 设计与实现》、美团技术团队相关 JVM 的文章、R 大相关 JVM 文章

  • MySQL:《MySQL 技术内幕:InnoDB 存储引擎》、《高性能 MySQL》、《MySQL 实战 45 讲》、《从根儿上理解 MySQL》、《从零开始带你成为 MySQL 实战优化高手》

  • Redis:《Redis 设计与实现》、《Redis 开发与运维》、水滴与银弹Redis 系列文章

  • Kafka:半兽人博客、《Apache Kafka 实战》

  • Zookeeper:《从 Paxos 到 Zookeeper:分布式一致性原理与实践》

  • 架构:《凤凰架构》、《领域驱动设计:软件核心复杂性应对之道》

还有一个点是,看书的时候可以尝试记一下笔记,这样效率会高一些,不至于看完就忘记了。

算法

算法的话,没有那么多高超的技巧,LeetCode 前 200 道反复刷就行了,应付 招绰绰有余。

我只刷了 170 道题,面了十几个大公司,大多的算法题都是原题。

刚开始刷的时候会很痛苦,坚持几天,没有思路的就看答案,看完答案继续写代码,写不出代码继续看答案,反反复复坚持下来算法就搞定了。

简历

简历的话,从大学毕业到现在,我一直用的是超级简历,我感觉挺好用的:

至于怎么写简历,我也不是专家,不说些花里花哨的,直接给一个我的简历模板吧,仅供参考。

提一个点,你写的简历就是划了一个知识范围,然后让面试官从题库里面选题,如果你自己划的知识点你都不清楚,那你面试肯定没有把握的。

所以,一定要对你简历上面的每一字负责,要对你在简历上写的每一个技术点都熟悉。

面试过程

自我介绍

自我介绍是简历的精简,不需要说一些没意义的事情,面试官也不关注你喜不喜欢打篮球,爱不爱唱歌,你只需要把你做过的最牛逼的事情,解决过的最复杂的问题讲出来就行了。

举个例子:

面试官你好,我叫 CoderW,19 年毕业于哈佛大学。

从毕业到现在一直从事后台研发相关工作。

19 年-22 年在谷歌中间件团队,主要负责 xx 中间件的设计与开发,在这期间,完成了对 xxx 进行改造和优化,整体性能提升了 80%;

22 年去了微软电商团队,负责微软电商体系的设计,两年的时间,完成了微软电商从 0 到 1 的搭建过程。上线至今,日活量达到了 10 亿,系统平均 QPS 达到 1W。

这一次应聘的是贵公司中间件团队的资深专家岗位,在业务方向和技术栈方面,我个人认为我的匹配度还是比较高的,非常希望能够加入贵公司,一起打造 xx 系统。谢谢!

技术讨论

自我介绍完之后,一般就是技术讨论环节,这个环节一般 30 到 50 分钟,是整个面试最重要的一个环节。

1. 不卑不亢

记住,这个环节是技术讨论环节,不是问答环节。一场好的技术讨论一定是有来有回,而不是单方面的你问我答。

在尊重面试官的前提上,可以对面试官的一些结论提出质疑和探讨,在我看来,敢于提出自己的不同看法是一个加分项。

如果遇到不尊重你,甚至侮辱你的面试官,我建议你直接把简历要回来,大家都是打工人,有什么好装的p>

2. 真诚以待

有些面试官喜欢问一些比较冷门的知识来验证候选人的技术深度,这是一个很正常的事情,你也不需要太过于紧张,真诚一点,会就是会,不会就是不会,没什么关系。

千万不要自作聪明强行去编造,真诚永远是第一要义!

3. 深入发散

如果聊到你熟悉的一个知识点,你一定要好好把握,可以尝试着深入和发散,让面试官慢慢的进入你的节奏。

举个例子,聊到 Kafka 零拷贝的时候。

  • 深入:你可以继续深入,聊一下 sendfile+DMA Scatter/Gather。

  • 发散:深入后再发散,聊一下为什么 RocketMQ 写日志用到了零拷贝,但是 Kafka 写日志的时候不用零拷贝。

深入是展现你对技术的了解程度,发散是展示你的视野宽度。

回答完一个问题之后,可以小小的总结一下,这样不至于你一个人在那里讲的云里雾里,让面试官都找不到你想要表达的重点了。

编程环节

如果你的工作年限不是太长,技术讨论环节过后一般会有一个编程环节(这个环节也有可能会放到技术讨论之前)。

编程题分为两种,一种是算法题,一种是语言技巧题。

算法题可能大家都能理解,像什么“两个线程交叉打印 A 和 B”、“手写单例模式”、“手写一个简单工厂设计模式”就属于语言技巧题。

算法题上面提过了,狂刷就行;语言技巧题也就那几个,背一下就好。

反问环节

个人认为,反问环节没啥用,根本就不能改变整个面试结果。

所以我一般就固定两个问题:

  • 我面试的这个岗位需要用到哪些技术栈p>

  • 我面试的这个岗位的最大挑战是什么

面经

面经奉上,不是很全,希望有帮忙。

顺丰

1.HashMap,扩容过程,怎么解决哈希冲突p>

2.聊了一篇之前写过的 MySQL 的一篇博客,讲讲 MySQL 慢 SQL 优化思路流程,应该从哪些方面考虑p>

3.APM,怎么监控,原理是什么va Agent 了解过吗p>

4.G1,最大的特点,标记位图,卡表卡页,SATB。

5.介绍 TiDB,什么是分布式数据库MySQL 比优缺点是什么p>

6.怎么做数据冷热分离做分库分表么要用 ESp>

7.分布式事务几种实现方式,讲讲本地消息表、尽最大努力通知、TCC。你们选用的是什么 有什么问题p>

8. 表 DSL 优化,享元模式优化过程,优化效果怎么样p>

9.单机和微服务的区别,微服务有什么问题一致性问题怎么解决问题怎么解决p>

10.现在负责的系统分为几个模块划分治理p>

11.MQ 使用场景有哪些目中具体哪些地方用到了p>

12.MQ 消息发送不在 MySQL 事务中如何保证一致性p>

13.Kafka 四个选举,Controller 选举、Partition leader 选举、GroupCoordinator 选举、消费组协调器选举。整体设计问题,使用场景,流量规划怎么做的p>

14.缓存使用的具体场景,一致性问题,缓存使用常见问题有哪些p>

15.熔断和降级的区别,具体使用场景有哪些p>

16.QPS 和 TPS 的区别是什么系统的最大 QPS 是多少S 大了会有什么问题,怎么解决p>

17.如何设计一个 RPC 框架考虑哪些点p>

18.有没有关注新技术g4j2 问题关注没有单介绍一下吗p>

总结:面试难度偏低,总监面基本是聊一下场景设计问题,面试体验很好,总监特别尊重人,强烈好评。待遇还行。

拼多多

1.介绍自己做过的最满意的一个项目

2.介绍 TiDB、RocksDb、levelDB、LSM 树、SSTable。

3.XXL-Job 二次分片怎么做的什么问题去优化的p>

4.HashMap 的位操作,HashSet 的 contains 方法复杂度是多少,红黑树简单讲一下p>

5.byte[] a = new byte[10 * 1024]内存分配过程的对象直接进入老年代什么参数配置p>

6.介绍 TLAB,PLAB,CAS 分配。

7.为什么要指针压缩,为什么能指针压缩是什么p>

8.类加载过程离了解过吗p>

9.多态和重载的底层实现原理,字节码层面的了解过吗p>

10.Springboot 自动装配,SPI 原理讲一下p>

11.拦截器和过滤器的区别场景p>

12.Spring 事务实现原理,Spring 的 ACID 如何实现的让你用 JDBC 实现事务怎么实现p>

13.MySQL 的锁,表级锁是哪一层的锁是哪一层的锁p>

14.MySQL 索引树索引每一个节点的大小 page 多大一条数据大于 16KB 怎么存xt 最多存多少数据出问题存储格式有哪些页如何管理.Redis ssd,Redis 内存空间优化的点,embstr 和 row、intset、ziplist。

16.Kafka 的服务端的物理存储架构是什么贝,mmap,sendfile、DMA gather。

17.你做的方案怎么让别人信服虑哪些点怎么做的些你觉得可以改进的地方p>

18.如果系统流量突然上升 10 倍,怎么处理0 倍呢p>

19.白板编程:单例模式,为什么要加 volatile

20.白板编程:用栈实现一个线程安全、高效的队列

21.白板编程:二叉树两个节点的距离

总结:一面难度较高,会一直追问问到你不会为止,后几轮的面试偏业务和设计,比较轻松。待遇拉满。

美团

1.多少个服务,多少台机器S,怎么做到隔离p>

2.服务之间的数据一致性怎么做上怎么保证p>

3.TCC段提交,三阶段提交p>

4.Synchronized,偏向锁聊了很久聊到了源码,升级过程,Synchronized 的 JVM 源码试官对 JVM 很感兴趣)

5.安全点,安全点的作用 JVM 源码(之前的文章写过,面试官和感兴趣)

6.垃圾回收算法;PS+PO,CMS 为什么要用标记清除算法S 的前身,R 大的文章。

7.ZGC,聊到了彭寒成的《新一代垃圾回收器 ZGC 设计与实现》和美团技术团队的文章。

8.G1,聊到了中村成洋的《深入 Java 虚拟机:JVM G1GC 的算法与实现》。

9.写屏障和读屏障的区别是什么p>

10.JMV 优化过程,效果。为什么要升级垃圾收集器p>

11.介绍一下 Spring IOC,注解和 XML 两种方式有什么区别处理器,扩展点有什么用目中有用到过吗p>

12.MySQL 的 binlog、redo log、undo log 写入过程机制和参数设置。MVCC 机制了解吗p>

13.遇到的死锁问题键冲突导致的死锁问题,MySQL 为什么要这么设计锁是什么了解吗p>

14.还了解 MySQL 的哪些锁锁、临检锁…..

15.ZK 的选举过程是怎么样的选举过程中 络故障怎么办B 和 RAFT 的最大区别是什么p>

16.Redis 用的 Gossip 协议有哪些具体消息传播,为什么要去中心化些优缺点p>

17.Redis 分布式锁和 ZK 分布式锁的比较。AP 和 CP,CAP 理论讲一下p>

18.Kafka 的优势是什么cketMQ 延迟队列怎么做的让你优化你会怎么做fka 能实现延迟队列吗p>

19.Kafka 能保证数据一条都不丢失吗么上丢数据了怎么办p>

20.白板编程:顺时针打印矩阵

总结:美团的面试官很喜欢问并发编程和 JVM,一面一直在聊这些东西,后几轮的面试偏业务和场景问题,比较轻松。

面试官很尊重人,还加了面试官的微信,后来面试官还给我打电话要我去美团,因为有其他选择了就拒掉了,祝好!

字节

总结:算法难度拉满,一轮一道算法,因为面的是 GO 岗位,对基础要求比较高,没有问太多 Java 的知识点。待遇不错。

58 集团

1.MySQL 迁移到 TiDB 做了哪些工作,自增主键,数据量多大p>

2.TiDB 的性能问题,做了哪些调研90、TP95 是多少。

3.TiDB 上线步骤是怎么样做到数据不丢失保证可靠性p>

4.XXL-Job 怎么封装的跑失败了怎么办p>

5.DAG 是如何实现的分片怎么做的p>

6.Redis 使用场景、缓存什么数据保证数据一致性p>

7.还了解 Redis 哪些知识、Redis 的优势、CP 还是 APP 理论。

8.Redis 存储数据需要注意哪些问题key 问题、大 key 问题怎么处理p>

9.Redis 分布式锁、红锁。红锁有什么问题p>

10.介绍 SpringBean 创建过程、AOP 实现原理p>

11.BeanFactory 和 FactoryBean 的区别p>

12.Spring 是怎么解决循环依赖的ring 解决构造方法注入的循环依赖了吗多例下的循环依赖了吗p>

13.动态代理,JDK 动态代理和 CGlib 动态代理的区别ring 是如何选用的配置p>

14.如何做降级的做限流p>

15.负载均衡算法有哪些应负载均衡怎么做的么问题优化的p>

16.Java 的集合都有哪些,都有什么特点p>

17.HashMap、ConcurrentHashMap 的区别过程是怎么样的p>

18.介绍 AQS、CountDownLatch、Semaphore、volatile、synchronized

19.线程池、自定义线程池、自定义拒绝策略有了解过吗场景用p>

总结:面的是风控部门,老牌公司了,面试难度较低,钱也给的少。

滴滴

1.进程和线程的区别是什么之间怎么通信的之间呢p>

2.HTTPS 和 HTTP 对比;CA 数字证书;对称加密非对称加密过程p>

3.常见的加密算法有哪些p>

4.MySQL 测试,TiDB 测试,如何做到平滑迁移保证数据不丢失p>

5.任务调用中心怎么做的均衡收集执行器的 CPU 和内存使用情况分片是怎么做的p>

6.任务幂等性改造 怎么部署的,几台机器,挂了一台怎么办p>

7.ZAB 协议,ZK 选举过程,ZXID 的结构是怎么样的ID 有什么用p>

8.Redis 的 String 底层结构,hash 底层结构,rehash 过程是怎么样的p>

9.Redis 的 AOF 和 RDB 区别,能配合使用吗key 问题和大 key 问题怎么解决p>

10.Kafka 的 log,index,稀疏索引。零拷贝,mmap,sendfile、DMA gather

11.Kafka rebalance 策略,具体过程。GroupCoordinator 选举、消费组协调器选举过程fka 默认 topic 干什么用的p>

12.Spring 的循环依赖怎么解决的,为什么需要加个三级缓存,二级不行么p>

13.Springboot 有什么特点,了解 springboot 的自动装配原理么p>

14.写了一道 LeetCode 原题,交换链表节点。

总结:面的是 约车部门,主要语言是 GO,面试体验不错,面试官比较尊重人,钱给的还行。

欧科云链

1.QUIC/HTTP3 了解吗p>

2.用笔画 MySQL 一条记录的入库过程,写日志过程,日志两阶段提交p>

3.JVM 调优过程发现 JVM 的问题的做预警处理p>

4.Minor GC 与 Full GC 的触发机制是什么p>

5.Eden 和 Survivor 比例可以调整么,参数是什么到了哪些参数p>

6.介绍 TiDB 和 MySQL 的迁移过程了些什么问题解决的p>

7.了解 RocksDb 吗velDB、LSM 树、SSTablep>

8.Paxos 算法了解吗 RAFT 和 ZAB,以及它们之间的区别脑裂问题吗么p>

9.Kafka 消息的写入过程简单介绍一下,Kafka 为什么这么快p>

10.Kafka 几种选举过程简单介绍一下p>

11.Kafka 高水位了解过吗么 Kafka 需要 Leader Epochp>

12.Netty 用到过吗 reactor。Netty 的空轮询 bug 有了解吗p>

13.讲讲 BIO、NIO、AIO 的区别p>

14.Dubbo 的服务发现是怎么做的p>

15.Redis 的几种数据结构,底层分别是怎么做的Redis 缓存什么数据更新数据淘汰数据p>

16.缓存和数据库一致性问题怎么解决么要删缓存而不是更新缓存存删失败了怎么办p>

17.有一个包含 100 亿个 URL 的大文件,假设每个 URL 占用 64B,请找出其中所有重复的 URL。

18.给了一张纸,上面有一段并发的代码,问执行结果是什么,考的是 volatile。

总结:面的是数字货币交易系统,去现场面的试,画了很多架构图。面试体验很好,还加了面试官的微信。待遇不错,而且可以居家办公。

京东

1.介绍一下你做的项目p>

总结:这个面试官放了我两次鸽子,后面突然打电话过来,我匆匆忙忙接电话,介绍完项目之后,他随便问了几个问题就结束了,整个过程不超过 10 分钟。可能是因为我不是东哥的兄弟p>

结果

说一下结果吧,除了京东,其余的都拿到了口头 offer。

至于为什么没有面阿里和腾讯,因为那个时候阿里和腾讯在进行财年清算,锁 HC 了,也就没有面了。

至于为什么字节的面试题没写,懂得都懂…

最后,祝大家都能成为 offer 收割机!

下面这个环节叫做[荒腔走板],技术文章后面我偶尔会记录、分享点生活相关的事情,和技术毫无关系。我知道看起来很突兀,但是我喜欢,因为这是一个普通博主的生活气息。

你要不喜欢,退出之前记得文末点个“在看”哦。

荒腔走板

上周的一个晚上,我去食堂吃晚饭,本来只是想简简单单的吃碗面,卖面的地方一般都会有煎蛋卖。

我并没有吃煎蛋的打算,但是刷卡的时候,看到在众多煎蛋里面看到一个爱心形状的煎蛋,想着:买个煎蛋吧,万一工作人员就从这么多煎蛋里面给我夹了这个呢,就说明我今天运气好呀。

然后我刷了卡,说:给我加个煎蛋吧。

我看到他拿着夹子先夹了一个其它的煎蛋,但是他似乎也看到了这个“爱心”形状的煎蛋,放弃了已经夹好的,重新给我夹了“心”形的这个。

看到他这个举动,我也是突然一下就笑了出来。

他抬头看了我一眼,看到我在笑。他虽然戴着口罩,但是我也感觉到了他也在笑。他给我说:来,我给你整个好看的。

有的时候,快乐很简单,一个煎蛋,就足够让两个人笑的很开心。

对了,多说一嘴。这周我在做一个 PPT,其中有一页就是谈写作之后的收获,我在里面专门提到了“荒腔走板”环节,我保留这个环节两年有余的时间,它会让我更加仔细的观察并记录生活。

平淡如水里面,一丝丝涟漪都弥足珍贵,这就是荒腔走板。

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

文章知识点与官方知识档案匹配,可进一步学习相关知识Java技能树首页概览92925 人正在系统学习中

声明:本站部分文章及图片源自用户投稿,如本站任何资料有侵权请您尽早请联系jinwei@zod.com.cn进行处理,非常感谢!

上一篇 2022年5月22日
下一篇 2022年5月22日

相关推荐