前言
前两个月有位澳洲留学生水友跟我说准备回国啦!当时向小编询问了国内目前的情况。
然后前两天该水友告诉我说拿下了阿里的offer了,所以小编连忙问下了面经,最后经过同意也可以分享给大家啦!本文将以第一人称一起感受。
背景
澳洲Top2本,科班出身,Java后端开发,无大厂实习经历,年底毕业。
看的出来,这位同学背景挺硬的
阿里一面(50分钟)
- 数据库锁隐原理。
- 1000个线程同时运行,怎么防止不卡?
- 并列的并发消费问题。
- 高并发量大的话怎么处理热点,数据等。
- 如何获取一个本地服务器上可用的端口?
- 流量控制相关问题。
- 数据库TPS是多少,是否进行测试过?
- 缓存击穿有哪些方案解决?
- Java怎么挖取回收器相关原理?
- Java的集合都有哪些,都有什么特点?
- 分布式锁,redis缓存,spring aop,系统架构图,MySQL的特性。
- 谈谈你对HashMap的理解,底层原理的基本实现,HashMap是怎么解决碰撞问题的?
- 开发中用了那些数据库?回答mysql,储存引擎有哪些?然后问了悲观锁和乐观锁问题使用场景、分布式集群实现的原理。
- springmvc和mybatis的工作原理,有没有看过底层源码?
- 熟悉IO么?与NIO的区别,阻塞与非阻塞的区别。
- 海量数据分析。
- 场景,同时给10万个人发工资,怎么样设计并发方案,能确保在1分钟内全部发完。打个比方会提出类似的场景。
阿里二面(55分钟)
- 线程安全和非线程安全。
- HTTP2.0、thrift。
- java反射应用。
- 分布式事务一致性。
- nio的底层实现。
- jvm基础是必问的,jvm GC原理,JVM怎么回收内存。
- API接口与SDI接口的区别。
- dubbo如何一条链接并发多个调用。Dubbo的原理,序列化相关问题。
- 用过哪些中间件?
- 做过工作流引擎没有?
- 以前的工作经历,自己觉得有哪些出彩的地方?
- 线程池的一些原理,锁的机制升降级。
- 从系统层面考虑,分布式从哪些纬度考虑?
- Hadoop底层怎么实现。
- threadLocal,线程池,hashMap/hashTable/coccurentHashMap等。
- 秒杀系统的设计。
- 虚拟机,IO相关知识点。
- Linux的命令。
- 一个整形数组,给定一个数,在数组中找出两个数的和等于这个数,并打印出来,我写的时间复杂度高,要求O(n)。
- n个整数,找出连续的m个数加和是最大。
阿里三面(40分钟)
- 讲讲网络分层,每一层都有哪些协议(TCP/IP五层模型)
- 浏览器从输入URL到页面显示的过程中发生了什么,越详细越好 (我回答解析URL,解析DNS(缓存未命中的情况下需要从根域名开始递归查询),建立TCP连接,http请求与答复,Render树的建立,页面的渲染)
- 讲讲http报文的格式?请求和答复有什么不同
- 现在有1T的文本数据,每行表示一个关键词,求出现次数最高的10个关键词,限定单机只有4G内存。(我回答先假定内存足够,则用HashMap加小根堆可解, 再解决内存的问题:先用hash方法把1T的文本文件散列成多个足以读入内存的小文本文件,分别对每个文件做统计,最后对每个文件的统计结果做***计)
- 你觉得你的方案有什么不足吗(我回答的数据分布可能不均匀,可对文本数据采用多次hash,直至单个数据样本足够小)
- 现在有一个包含上亿条目的表,现实中会有大量的用户在这个表上做基于uuid的查询操作,如何改良这个系统的可用性(我回答对这张表的uuid用哈希法做水平切分并建立索引,然后在用户查询时用同样的哈希算法导向到相应的表)
- 你说的是数据库层面的优化,对别的层面有什么想法吗,比如用户查询存在高峰期,如何在节约服务器资源的前提下保证对高并发的容忍度。(我回答在服务器端建立令牌池,每隔固定时间向其中发放令牌,令牌总数有限。每个查询在执行前必须先获取令牌。令牌总数即为某个时刻下服务器可承载的最大并发数,令牌发放间隔即为最大用户增速)
总结
面试体验好,面试官亲切,问问题时会做一些引导和提示,也会告诉你哪些方面存在不足,
有一个小插曲,小编之前就提到过阿里喜欢搞突击面试,你也不知道什么时候会突然来电话(一面和二面的时候水友就在睡觉)。
最后把面试资料免费分享给大家,让你也能成为下一位大佬!
爱编程,爱分享,听说点赞+关注的都进大厂了哦!!!