霸榜 GitHub!银四匠心之作:拼多多 / 蚂蚁 / 百度面经分享
文章有点长,请耐心看完,绝对有收获!不想听我 BB 直接进入面试分享:
准备过程
拼多多面试分享
蚂蚁金服面试分享
字节跳动面试分享
总结
资料分享
准备过程
我 2016 先在蚂蚁实习了将近三个月,然后去了我现在的老东家,2.5 年工作经验,可以说毕业后就就一直老老实实在老东家打怪升级,,虽说有蚂蚁的实习经历,但是因为时间太短,还是有点虚的。
准备过程其实很早开始了,而且工作之余常常会去额外研究自己感兴趣的技术以及工作用到的技术,力求把原理搞明白,并且会自己实践一把。什么操作系统、数据结构与算法、MySQL、JDK 之类的源码,基本都好好温习了,我深知基础就像“木桶效应”的短板,决定了能装多少水。
剩下的准备就是找平台和内推了,除了蚂蚁,头条和拼多多都是找人内推的,感谢蚂蚁面试官对我的欣赏,以后说不定会去蚂蚁咯
平台:脉脉、GitHub、v2
拼多多面试
一面
Java 中的 HashMap、TreeMap 解释下?(TreeMap 红⿊树,有序,HashMap⽆序,数组+链表)
TreeMap 查询写⼊的时间复杂度多少?
HashMap 多线程有什么问题?
CAS 和 synchronize 有什么区别?
在多核 CPU 下,可⻅性怎么保证?(思考了⼀会,总线嗅探技术)
聊项⽬,系统之间是怎么交互的?
系统并发多少,怎么优化?
给我一张纸,画了一个九方格,都填了数字,给一个 MN 矩阵,从 1 开始逆时针打印这 MN 个数,要求时间复杂度尽可能低(内⼼OS:之前貌似碰到过这题,最优解是怎么实现来着)思考中。。。
可以先说下你的思路(想起来了,说了什么时候要变换⽅向的条件,向右、向下、向左、向上,依此循环)
有什么想问我的?
二面
自我介绍下
手上还有其他 offer 么?(拿了蚂蚁的 offer)
部⻔组织结构是怎样的?(这轮不是技术⾯么,不过还是老老实实说了)
系统有哪些模块,每个模块⽤了哪些技术,数据怎么流转的?
链路追踪的信息是怎么传递的?
SpanId 怎么保证唯一性?(UUID,说了下内部的定制改动)
RpcContext 是在什么维度传递的?(线程)
Dubbo 的远程调用怎么实现的?(讲了读取配置、拼装 url、创建 Invoker、服务导出、服务注册以及消费者通过动态代理、filter、获取 Invoker 列表、负载均衡等过程
Spring 的单例是怎么实现的?(单例注册表)
为什么要单独实现一个服务治理框架?(说了下内部刚搞微服务不久,主要对服务进⾏⼀些监控和性能优化)
谁主导的?内部还在使用么?
逆向有想过怎么做成通用么?
有什么想问的么?
三面
二面老大面完后就直接 HR 面了,主要问了些职业发展、是否有其他 offer、以及⼊职意向等问题,顺便说了下公司的福利待遇等,都比较常规啦。不过要说的是手上有其他 offer 或者大厂经历会有一定加分。
蚂蚁金服面试
一面
一面就做了⼀道算法题,要求两⼩时内完成,给了长度为 N 的有重复元素的数组,要求输出第 10 大的数。典型的 TopK 问题,快排算法搞定。
二面
自我介绍下呗
开源项目贡献过代码么?(Dubbo 提过⼀个打印 accesslog 的 bug 算么)
⽬前在部门做什么,业务简单介绍下,内部有哪些系统,作用和交互过程说下 Dubbo 踩过哪些坑,分别是怎么解决的?
开始进入正题,说下你对线程安全的理解
事务有哪些特性?(ACID)
怎么理解原子性?
乐观锁和悲观锁的区别?
HashMap 为什么不是线程安全的?
jdk1.8 对 ConcurrentHashMap 做了哪些优化?
redis 主从机制了解么?怎么实现的?
有过 GC 调优的经历么?(有点虚,答得不是很好)
有什么想问的么?
三面
简单自我介绍下
监控系统怎么做的,分为哪些模块,模块之间怎么交互的?⽤的什么数据库?(MySQL)
使⽤什么存储引擎,为什么使⽤InnnoDB?(支持事务、聚簇索引、MVCC)
订单表有做拆分么,怎么拆的?(垂直拆分和水平拆分)
水平拆分后查询过程描述下
如果落到某个分⽚的数据很⼤怎么办?
哈希取模会有什么问题么?
分库分表后怎么解决读写压⼒?(一主多从、多主多从)
拆分后主键怎么保证惟⼀?(UUID、Snowflake 算法)
放了主键 ID,查询的时候需要做⼀次回表查询)⼀定要回表查询么?(不一定,当查询的字段
刚好是索引的字段或者索引的⼀部分,就可以不用回表,这也是索引覆盖的原理)
你们系统目前的瓶颈在哪⾥?
你打算怎么优化?简要说下你的优化思路
有什么想问我么?
四面
介绍下自己
为什么要做逆向?
怎么理解微服务?
服务治理怎么实现的?
这个不是中间件做的事么,为什么你们部门做?
说说 Spring 的⽣命周期吧
说说 GC 的过程
CMS GC 有什么问题?(并发清除算法,浮动垃圾,短暂停顿)
回收过程是怎么样的?
你提到的 Remember Set 底层是怎么实现的?
有什么想问的么?
字节跳动(百度)面试
一面
先自我介绍下
聊项目,逆向系统是什么意思
聊项目,逆向系统⽤了哪些技术
线程池的线程数怎么确定?
如果是 IO 操作为主怎么确定?
如果计算型操作⼜怎么确定?
Redis 熟悉么,了解哪些数据结构?
红⿊树了解么,时间复杂度?(说了是 N 叉平衡树,O(logN))
那我们做⼀道题吧,数组 A,2*n 个元素,n 个奇数、n 个偶数,设计⼀个算法,使得数组奇数
下标位置放置的都是奇数,偶数下标位置放置的都是偶数
时间差不多了,先到这吧。你有什么想问我的?
二面
⾯试官和蔼很多,你先介绍下自⼰吧
你对服务治理怎么理解的?
项⽬中的限流怎么实现的?(Guava ratelimiter,令牌桶算法)
具体怎么实现的?(要点是固定速率且令牌数有限)
如果突然很多线程同时请求令牌,有什么问题?(导致很多请求积压,线程阻塞)
如果不⽤消息队列怎么解决?(说了 RateLimiter 预消费的策略)
分布式追踪的上下文是怎么存储和传递的?
Dubbo 的 RpcContext 是怎么传递的?
那你说下 SpringMVC 不同⽤户登录的信息怎么保证线程安全的?
什么时候需要⾃定义类加载器?
我们做⼀道题吧,手写一个对象池?
有什么想问我的么?(感觉我很多点都没答好,是不是挂了(结果真的是)
⼩结
头条的面试确实很专业,每次⾯试官会提前给你发一个视频链接,然后准点开始面试,而且考察的点都比较全
总结
从年前开始面试到头条面完⼤概⼀个多⽉的时间,真的有点身心俱疲的感觉。最后拿到了拼多多、蚂蚁的 offer,还是蛮幸运的。头条的面试对我帮助很⼤,再次感谢面试官对我的诚恳建议,以及拼多多的 HR 对我的啰嗦的问题详细解答。
专业技能如何学习?
计算机网络、数据结构、算法、操作系统等课内基础知识:掌握.
Java 基础知识:掌握
JVM 虚拟机(Java 内存区域、虚拟机垃圾算法、虚拟垃圾收集器、JVM 内存管理)∶掌握
高并发、高可用、高性能系统开发︰掌握
Struts2、Spring、Hibernate、Ajax、Mybatis、JQuery :掌握.
SSH 整合、SSM 整合、SOA 架构:掌握
Dubbo:掌握
Zookeeper:掌握
常见消息队列:掌握.
Hadoop 生态相关技术中的 HDFS、Storm、MapReduce、Hive、Hbase :了解. Python 基础、一些常见第三方库比如 OpenCV、wxpy、wordcloud、matplotlib:熟悉
如果还不清楚自己如何准备面试,我自己用 xmind 手绘了一份:Java 面试梳理,这样更加直观形象⼀点,细化到某个知识点,要把每一个知识点都搞得很熟悉,还要分清主次。
资料分享
见下图添加上小助手即可免费获取到了
面试突击手册
这份面试突击手册涵盖了备战面试,Java 基础+集合+多线程+JVM,计算机,数据库,常用框架,系统设计常用面试题,整体分为当季最新系列、大厂面试真题系列、技术系统分类系列三部分。(纯文字文本占内存 46.97MB)
Java 基础+集合+多线程+JVM
Java 基础
Java 集合
多线程
JVM
三、计算机基础
四、数据库面试题总结
五、常用框架面试题总结
六、系统设计
算法这一块,可以刷看这本《leetcode 刷题笔记》,此 pdf 书籍:主要关注经典的算法,但同时会为读者理解基本算法问题和解决问题打下很好的基础。分别介绍了字符串,栈和队列,树,排序,查找,暴力枚举法,广度优先搜索,动态规划,图等内容。且每一章结束的时候均有练习题和参考资料,这为读者的自我检查以及进一步学习提供了较多的便利。
大厂面试:
Java 核心知识笔记整理:
点到为止,今天的分享就到这里结束,篇幅已太长,而要分享的东西也实在是太多了,小编就不在一一列举了~
评论