作者 | Bella
本文经授权转载自 Bella的技术轮子(ID:gh_3d93ae4cda02)
这次面试的公司有一点点多,主要是因为毕业后前两份工作找的都很草率,这次换工作就想着,emm,毕业三年了,该找个工作好好沉淀几年了。
阿里、美团、滴滴、金山云、每日一淘、火币、宜信、旺店通、黄包车、linkedMe
•
小米:
四轮技术面,大概 4 个小时的样子,大数据部门,不知道是不是四面的负责人嫌弃我木有大数据的经验,我确实木有。
•
京东:
电话面试一轮+现场两轮,面试完快中午一点了,说是让我先回家,后面让 HR 电话联系我,一周后一面的面试官问我还考虑京东不,如果考虑的话,就进行后续,对不起,我已经不考虑了,希望以后有机会再合作,所以没有后续了。
•
头条:
二面完 gg,我的算法确实菜哈,然后 LeetCode 又只刷过 10 道题,去面头条,确实有些作死的节奏,实在是对不起帮我内推的石冲大佬。
•
爱奇艺:
电话面试一轮+现场两轮,到技术终面了,这个怪我,面试官也一直很忙,然后我俩就互相一直改面试时间,最后定的那个面试时间我还迟到了一个小时,还是时间到了才给 HR 打电话说一个小时后才能到,虽然我知道这样做非常不好,但是当时情况比较复杂,自己根本忙不过来,一直在面试,也没有办法中途给HR打电话说一下。
一天面两家,两家离的还比较远的小伙伴吸取一下教训。我本来是想约第二天下午的,HR 就想当天,结果就晚上 7:40 开始二面了,面到 9 点,然后木有然后了。
•
有赞:
电话面试一轮+现场两轮,到技术终面了,面试官“base 考虑杭州吗”,我“啊,你们北京不是也需要人吗,最好北京哈,杭州暂时不考虑”,然后木有然后了,哈哈。
后面面阿里的时候我就自己打脸了,面试官“base 杭州考虑吗”,我“面过阿里我就去杭州,面不过我就在北京”。爱,就要大胆的说出来。
这次面试基本都是三~四轮技术面,很多都是每一轮都有至少一道算法题,所以准备换工作的小伙伴,算法可以搞起来了哈,LeetCode easy 和 medium 难度的就 ok 了,当然如果你也要刷 hard 难度的题,是更好的哈。
我作为一名只刷过 10 道 LeetCode 的渣渣,表示以后要好好刷 LeetCode 了,拯救一下自己的智商。准备面头条的小伙伴,那就 medium 和 hard 难度的搞起来吧。你们加油,我就不想了。
群里有很多小伙伴怀疑我是 985、211 或者研究生毕业,都不是的哈,渣本
(但是我还是很爱我的母校的)
,16年毕业,我一个妹子都可以做到的,你们更可以做到,所以相信自己,去努力就好了。
这篇文章主要是记录一下自己的面试经历,分享一些群里小伙伴们都很关注的面试题,我个人感觉不错的,可以提升技术的,当然面试中也会对你有特别大的帮助。
阿里的面试题不会分享哈,这次主要分享 TMDJ、以及其他公司的一些面试题,把我分享的这些面试题都掌握了,对想去面阿里的小伙伴的帮助也是非常非常大的。当然,面试题只是起一个查漏补缺的作用,并不是让你直接去整理答案,去背答案的哈。
一个合格的面试官,是会针对你的简历去问的,即每个人的面试题都是不一样的。
二轮技术面,17:00~20:25,晚饭时间 HR 小姐姐还特贴心的带我体验了一把传说中的头条餐厅,不超过半小时:
1、聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图。
3、
Redis 中有几种类型 & 各自底层怎么实现的 & 项目中哪个地方用了什么类型,怎么使用的?
4、Redis 如何实现分布式锁,zk 如何实现分布式锁,两者的区别。
如果 service 还没执行完,分布式锁在 Redis 中已经过期了,怎么解决这种问题?
5、synchronized 底层实现,加在方法上和加在同步代码块中编译后的区别、类锁、对象锁。
7、Java 运行时区域及各个区域的作用、对 GC 的了解、Java 内存模型及为什么要这么设计?
9、countDownLatch 用过没有,在项目中如何使用的,对 AQS 的了解。
10、写生产者消费者问题,考虑高并发的情况,可以使用 Java 类库,白纸写代码。
12、设计一个发号器,考虑集群和高并发的情况,要求发号器生成的id是递增趋势,通过id可以区分出来是今天生成的 id 还是昨天生成的 id,但是生成的 id 中不能直接带有日期,要具有一定的混淆功能,白纸写代码
13、一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。
如下图所示,最长递增路径即红色字体路径。
白纸写代码。
电话面试(40分钟)+ 现场三轮技术面试(3.5小时)+ HRBP 面试(30分钟)
1、数据库和缓存的一致性问题。先更新数据库,再更新缓存,若更新完数据库了,还没有更新缓存,此时有请求过来了,访问到了缓存中的数据,怎么办?
2、聚簇索引/非聚簇索引,MySQL 索引底层实现,为什么不用 B-Tree,为什么不用 hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方?
3、MySQL 默认的事务隔离级别,MVCC、RR 怎么实现的?RC 如何实现的?
4、MySQL 间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的 SQL 语句,死锁发生了如何解决,MySQL 有没有提供什么机制去解决死锁
5、谈下对 GC 的了解,何为垃圾,有哪些 GC 算法,有哪些垃圾回收器,cms 和 g1 的区别,还有一个直击灵魂的问题,看过 cms 的源码吗?
6、有没有排查过线上 OOM 的问题,如何排查的?
7、有没有使用过 JVM 自带的工具,如何使用的?
8、假设有下图所示的一个 Full GC 的图,纵向是内存使用情况,横向是时间,你如何排查这个 Full GC 的问题,怎么去解决你说出来的这些问题?
9、说说对 Java 中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的?
10、对 CAS 的理解,CAS 带来的问题,如何解决这些问题?
11、volatile 底层、synchronized 底层、锁升级的过程、MESI?
14、
聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图。
15、讲项目中的难点、挑战,如何解决的,项目这一块会问的特别细。
16、如何保证 RocketMQ 消息的顺序性,如何解决重复消费问题。
18、讲一讲对 Redis 的了解,项目中如何使用的,哪个地方使用的,为什么要使用?
19、哨兵机制、Redis 两种备份方式的区别,项目中用的哪种,为什么?
22、如何理解 Spring 中的 AOP 和 IOC,以及 DI,读过 Spring 源码没有?
25、如何理解分布式事务,为什么会出现这个问题,如何去解决,了解哪些分布式事务中间件?
27、Hystrix 功能和在项目中怎么使用的?Hystrix 怎么检测断路器是否要开启/关闭?Hystrix 实现原理?除 Hystrix 之外的其他熔断限流中间件有了解没有,了解多少说多少?
29、怎么理解 Java 中和 MySQL 中的乐观锁、悲观锁?
现场三轮技术面试 + 一轮 HRBP 面(4 小时 5 分钟)
1、聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图,讲数据库设计。
3、遇到过线上服务器 CPU 飙高的情况没有,如何处理的?
5、对线程池的理解,项目中哪个地方使用了,如何使用的,用的 Excutor 框架中的哪个实现类,为什么用这个
6、对 CAS 的理解,CAS 带来的问题,如何解决这些问题?
7、volatile 底层、synchronized 底层、锁升级的过程、MESI
8、对 MySQL 索引的理解、对组合索引的理解、索引的最佳实践
9、分布式锁的实现、对比 Redis 分布式锁 & ZK 分布式锁
10、唯一 ID 如何实现的,Snowflake 实现原理,Snowflake 有哪些问题,如何避免根据订单号可以推算出今天的订单量
11、如果线上一个功能是用栈结构实现的,使用过程中要注意哪些问题,为什么?
13、怎么理解接口幂等?项目中如何保证的接口幂等?
14、怎么理解微服务,服务如何划分,可以从哪几个方面去划分,为什么这样划分,微服务带来了哪些好处,哪些坏处,如何看待这个问题?
15、如何理解网关,网关带来的好处和坏处,如何解决
16、Hystrix 功能 & 在项目中怎么使用的 & Hystrix 怎么检测断路器是否要开启/关闭 &Hystrix 实现原理
17、怎么理解命令模式和观察者模式,手写一个观察者模式或者命令模式的代码,策略模式也行
18、掌握哪些设计模式,常用哪些,项目中如何使用的,为什么用这个,不用那个?
手写一个线程安全的单例模式
20、如果我现在就是要实现每秒 10w 请求,不能熔断限流,如何去设计?
21、假设现在双十一零点,大量下单请求,如何对这些订单进行分库分表,为什么?
22、服务 A 调用服务 B 中一个接口,服务 B 调用服务 C 中一个接口,如何实现若服务B响应服务 A 成功,则服务 C 一定响应服务 B 成功,需要考虑系统性能问题?
23、递归使用中有什么需要注意的地方,递归写法一般可以用什么去替换?
24、有两个表,table a,table b,写 SQL 查询出仅在 table a 中的数据、仅在 table b 中的数据、既在 table a 又在 table b 中的数据?
我:既然现在很多业务线都是 Go 了,有没有考虑把剩余的业务线也转成 Go呀?
面试官:我认为,语言只是工具,语言不应该是影响开发的一个因素吧。
电话面试(30分钟)+ 现场两轮技术面试(1小时40分钟),面完 12:50,说让我先回来,后续 hr 电话和我联系,一周后一面的面试官问我还考虑京东吗,对不起,已经不考虑了,希望以后有机会再合作
1、一个 final 修饰的属性,定义的时候没有初始化,在无参构造函数中初始化,可以吗,为什么
2、说说对 Java 中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的,为什么不用其他的集合类
3、HashMap,concurrentHashMap 底层实现
4、List 删除是怎么实现的,遍历的时候可以删除吗?为什么?
5、Redis 中有哪些数据结构,了解过其底层怎么实现的吗,和 Java 中相似的数据结构的对比?
6、Redis 是单线程的还是多线程的,为什么这么快?
7、Redis Hash 中某个 key 过大,变为 String 类型的大 key,怎么处理,使用中如何避免出现这种问题?
8、设计模式在项目中哪个地方用到了,怎么使用的,能不能画一个你熟悉的设计
模式的 UML 图,手写单例模式,手写静态内部类实现的单例模式。
9、讲一讲 MySQL 索引,实际工作中,哪些场景用了 B+Tree 索引,哪些场景用了 hash 索引?
10、explain 可以看到哪些信息,什么信息说明什么,explain 的结果列讲一下
12、MyBatis 源码看过没有,会多少讲多少?
14、AQS、countDownLatch 如何实现?
15、线程池如何实现,核心线程数和最大线程数设置成多少,为什么这么设置,项目中哪个地方使用了线程池,使用时需要注意什么
16、MySQL 事务隔离级别,幻读,脏读,项目中用什么事务隔离级别,为什么?
17、volatile 底层原理、synchronized 实现机制
18、对 XA、TCC 的理解,了解哪些分布式事务框架,有什么缺点?
19、Feign 和 Dubbo,了解多少说多少?
20、Eureka 和 Zookeeper,了解多少说多少?
21、Hystrix 和 sentinel,了解多少说多少?
22、Spring Cloud Alibaba,了解多少说多少?
23、对分库分表、读写分离的了解,了解多少说多少?
24、画一下 Java 线程几个状态及状态之间互相转换的图?
25、聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图,讲数据库设计具体到部分表中有哪些字段?
26、部门体量比较大,可能需要加班,到凌晨两三点的那种,也可能通宵,通宵是大促期间,你能接受吗?
27、也会加班到十点,这个不是大促期间,但也不是每天,非常态情况,你能接受
吗,你在哪里住,过来要多久,有男朋友吗?
下面是面试 TMDJ 之外的公司中遇到的一些问题哈,TMDJ 中已经被问到的就不再重复写了,只写一下个别公司中我还记得的面试题。
四轮技术面试 + 一轮 HR 面试
(4小时)
,后来 HR 小姐姐和我说,她们正常是两轮技术面试,因为技术面试完面试官一直没有找到她,然后就又来了一轮技术面试,又来了一轮技术面试。
1、Kafka 如何保证消息顺序消费、在 consumer group 中新增一个 consumer 会提高消费消息的速度吗、那如果我想提高消息消费的速度,我要怎么办?
2、Redis 几种数据结构及底层,项目中如何使用的 Redis?
3、哨兵机制、选举算法
4、一致性 hash
5、Redis 是单线程的还是多线程的,为什么速度这么快?
6、多路复用的几种方式以及区别?
7、对线程池的理解,在项目中如何使用的,多个线程之间如何共享数据,多个进程之间如何共享数据?
8、HashMap、concurrentHashMap 的区别及底层实现、HashMap 和 HashTable 的区别?
9、什么是红黑树,什么是 B-Tree,为什么 HashMap 中用红黑树不用其他树?
10、对 MySQL 索引的理解,为什么 MySQL 索引中用 B+Tree,不用 B-Tree 或者其他树,为什么不用 hash 索引?
11、数据库和缓存的双写一致性问题?
三轮技术面试 + 一轮 HRBP 面
2、Java 如何实现序列化的,Serialization 底层如何实现的
3、countDownLatch 如何实现的
4、项目中监控报警机制如何做的,说说你的了解
5、线上服务器 CPU 飙高,如何处理这个问题
6、服务 A 调用服务 B,用户请求服务 A,发现返回较慢,如何定位这个问题