先说下这次面试的结果吧:
到HR面的:
阿里、美团、滴滴、金山云、每日一淘、火币、宜信、旺店通、黄包车、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小姐姐还特贴心的带我体验了一把传说中的头条餐厅,不超过半小时:
- 聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图。
- 讲项目中的难点、挑战,你是如何解决的?
- Redis 中有几种类型 & 各自底层怎么实现的 & 项目中哪个地方用了什么类型,怎么使用的?
- Redis如何实现分布式锁,zk如何实现分布式锁,两者的区别。如果service还没执行完,分布式锁在Redis中已经过期了,怎么解决这种问题?
- synchronized底层实现,加在方法上和加在同步代码块中编译后的区别、类锁、对象锁。
- 锁升级的过程。
- Java运行时区域及各个区域的作用、对GC的了解、Java内存模型及为什么要这么设计?
- 对索引的理解,组合索引,索引的最佳实践
- countDownLatch用过没有,在项目中如何使用的,对AQS的了解。
- 写生产者消费者问题,考虑高并发的情况,可以使用Java 类库,白纸写代码。
- List item
如下图所示:
12 . 设计一个发号器,考虑集群和高并发的情况,要求发号器生成的id是递增趋势,通过id可以区分出来是今天生成的id还是昨天生成的id,但是生成的id中不能直接带有日期,要具有一定的混淆功能,白纸写代码
13 . 一个二位数组,每个元素都可以往上下左右四个方向走,寻找最长递增路径。如下图所示,最长递增路径即红色字体路径。白纸写代码。
美团
电话面试(40分钟)+现场三轮技术面试(3.5小时)+HRBP面试(30分钟)
- 数据库和缓存的一致性问题。先更新数据库,再更新缓存,若更新完数据库了,还没有更新缓存,此时有请求过来了,访问到了缓存中的数据,怎么办?
- 聚簇索引/非聚簇索引,MySQL索引底层实现,为什么不用B-Tree,为什么不用hash,叶子结点存放的是数据还是指向数据的内存地址,使用索引需要注意的几个地方?
- MySQL默认的事务隔离级别,MVCC、RR怎么实现的?RC如何实现的?
- MySQL间隙锁有没有了解,死锁有没有了解,写一段会造成死锁的SQL语句,死锁发生了如何解决,MySQL有没有提供什么机制去解决死锁
- 谈下对GC的了解,何为垃圾,有哪些GC算法,有哪些垃圾回收器,cms和g1的区别,还有一个直击灵魂的问题,看过cms的源码吗?
- 有没有排查过线上OOM的问题,如何排查的?
- 有没有使用过JVM自带的工具,如何使用的?
- 假设有下图所示的一个Full GC 的图,纵向是内存使用情况,横向是时间,你如何排查这个Full GC
的问题,怎么去解决你说出来的这些问题?
9 . 说说对Java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的?
10 . 对CAS的理解,CAS带来的问题,如何解决这些问题?
11 . volatile底层、synchronized底层、锁升级的过程、MESI
12 . Ehcache支持哪些缓存?
13 . JUC有研究没有,讲一讲?
14 . 聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图。
15 . 讲项目中的难点、挑战,如何解决的,项目这一块会问的特别细。
16 . 如何保证RocketMQ 消息的顺序性,如何解决重复消费问题。
17 . 项目中如何保证接口的幂等操作。
18 . 讲一讲对Redis 的了解,项目中如何使用的,哪个地方使用的,为什么要使用?
19 . 哨兵机制、Redis 两种备份方式的区别,项目中用的哪种,为什么?
20 . 讲一讲对分布式锁的了解
21 . 项目中系统监控怎么做的?
22 . 如何理解Spring中的AOP 和 IOC,以及DI,读过Spring源码没有?
23 . 读过MyBatis源码没有?
24 . 说一个你了解最多的框架,说出你的理解。
25 . 如何理解分布式事务,为什么会出现这个问题,如何去解决,了解哪些分布式事务中间件?
26 . 聊一聊对分库分表的理解。
27 . Hystrix功能和在项目中怎么使用的?Hystrix怎么检测断路器是否要开启/关闭?Hystrix实现原理?除Hystrix之外的其他熔断限流中间件有了解没有,了解多少说多少?
28 . Dubbo有了解没有?
29 . 怎么理解Java 中和 MySQL中的乐观锁、悲观锁?
30 . 一致性hash
滴滴
现场三轮技术面试+一轮HRBP面(4小时5分钟)
- 聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图,讲数据库设计。
- 处理过线上OOM问题没有,如何处理的?
- 遇到过线上服务器CPU飙高的情况没有,如何处理的?
- 线上有没有遇到其他问题,如何处理的?
- 对线程池的理解,项目中哪个地方使用了,如何使用的,用的Excutor框架中的哪个实现类,为什么用这个
- 对CAS的理解,CAS带来的问题,如何解决这些问题
- volatile底层、synchronized底层、锁升级的过程、MESI
- 对MySQL索引的理解、对组合索引的理解、索引的最佳实践
- 分布式锁的实现、对比Redis分布式锁 & ZK分布式锁
- 唯一ID如何实现的,Snowflake实现原理,Snowflake有哪些问题,如何避免根据订单号可以推算出今天的订单量
- 如果线上一个功能是用栈结构实现的,使用过程中要注意哪些问题,为什么
- 怎么理解线程安全
- 怎么理解接口幂等,项目中如何保证的接口幂等
- 怎么理解微服务,服务如何划分,可以从哪几个方面去划分,为什么这样划分,微服务带来了哪些好处,哪些坏处,如何看待这个问题
- 如何理解网关,网关带来的好处和坏处,如何解决
- Hystrix功能 & 在项目中怎么使用的 & Hystrix怎么检测断路器是否要开启/关闭 &Hystrix实现原理
- 怎么理解命令模式和观察者模式,手写一个观察者模式或者命令模式的代码,策略模式也行
- 掌握哪些设计模式,常用哪些,项目中如何使用的,为什么用这个,不用那个,手写一个线程安全的单例模式
- 如何设计一个秒杀系统
- 如果我现在就是要实现每秒10w请求,不能熔断限流,如何去设计
- 假设现在双十一零点,大量下单请求,如何对这些订单进行分库分表,为什么
- 服务A调用服务B中一个接口,服务B调用服务C中一个接口,如何实现若服务B响应服务A成功,则服务C一定响应服务B成功,需要考虑系统性能问题
- 递归使用中有什么需要注意的地方,递归写法一般可以用什么去替换
- 有两个表,table a,table b,写SQL查询出仅在table a中的数据、仅在table b中的数据、既在table a
又在table b 中的数据
- Spring 源码有了解没有
- MyBatis源码有了解没有
- MySQL事务隔离级别、MVCC
我:既然现在很多业务线都是Go了,有没有考虑把剩余的业务线也转成Go呀?
面试官:我认为,语言只是工具,语言不应该是影响开发的一个因素吧。
面试官说的很有道理
京东
电话面试(30分钟)+现场两轮技术面试(1小时40分钟),面完12:50,说让我先回来,后续hr 电话和我联系,一周后一面的面试官问我还考虑京东吗,对不起,已经不考虑了,希望以后有机会再合作
- 一个final修饰的属性,定义的时候没有初始化,在无参构造函数中初始化,可以吗,为什么
- 说说对Java中集合类的理解,项目中用过哪些,哪个地方用的,如何使用的,为什么不用其他的集合类
- HashMap,concurrentHashMap底层实现
- List删除是怎么实现的,遍历的时候可以删除吗?为什么?
- Redis中有哪些数据结构,了解过其底层怎么实现的吗,和Java中相似的数据结构的对比
- Redis是单线程的还是多线程的,为什么这么快?
- Redis Hash中某个key过大,变为String类型的大key,怎么处理,使用中如何避免出现这种问题?
- 设计模式在项目中哪个地方用到了,怎么使用的,能不能画一个你熟悉的设计模式的UML图,手写单例模式,手写静态内部类实现的单例模式
- 讲一讲MySQL索引,实际工作中,哪些场景用了B+Tree索引,哪些场景用了hash索引
- explain 可以看到哪些信息,什么信息说明什么,explain的结果列讲一下
- Spring源码看过没有,会多少讲多少
- MyBatis源码看过没有,会多少讲多少
- cas,cas的缺点,如何解决
- AQS、countDownLatch如何实现
- 线程池如何实现,核心线程数和最大线程数设置成多少,为什么这么设置,项目中哪个地方使用了线程池,使用时需要注意什么
- MySQL事务隔离级别,幻读,脏读,项目中用什么事务隔离级别,为什么?
- volatile底层原理、synchronized实现机制
- 对XA、TCC的理解,了解哪些分布式事务框架,有什么缺点
- Feign 和 Dubbo,了解多少说多少
- Eureka 和 Zookeeper,了解多少说多少
- Hystrix 和 sentinel,了解多少说多少
- Spring Cloud Alibaba,了解多少说多少
- 对分库分表、读写分离的了解,了解多少说多少
- 画一下Java 线程几个状态及状态之间互相转换的图
- 聊项目,画项目架构图,画一个用户从发起请求到接收到响应,中间经过哪些服务,每个服务做什么事情的流程图,讲数据库设计具体到部分表中有哪些字段?
- 部门体量比较大,可能需要加班,到凌晨两三点的那种,也可能通宵,通宵是大促期间,你能接受吗?
- 也会加班到十点,这个不是大促期间,但也不是每天,非常态情况,你能接受吗,你在哪里住,过来要多久,有男朋友吗?
还有一些其他的,下回再跟大家分享!