Java社招(阿里头条快手百度美团等大厂)面经分享【纯干货】


前言:

按照惯例,我先来个自我介绍吧。楼主北邮本硕毕业,18年4月份入职小米。目前任职快手高级Java工程师,CSDN认证博客专家(访问量190W+),CSDN学院讲师,GitChat分享者。

在2020.3月,参加社招面试,拿下了阿里,头条,快手,百度以及美团的社招Offer。当然了,用于练手(失败)的公司包括陌陌,猿辅导以及滴滴。

之前发布过一篇单纯的面经,感觉对大家的参考意义有限。并且跳槽之后可以用于学习总结的时间有所缩短,所以我将以上八家公司的面试进行了一个总结来给大家分享。

本篇博文所述的重点包括如下内容:

  • 社招与校招面试的区别
  • 第一轮考察知识点与方向
  • 第二轮考察知识点与方向
  • 第三轮/第四轮考察方向
  • HRBP面试考察内容
  • 社招面试小技巧
  • 日常学习资源分享

正文

社招与校招面试的区别:

我们先来说下校招面试。校招面试主要考察的是大家对于基础知识的理解与掌握,数据结构和算法的熟练度。对于项目架构,业务逻辑方面的考察较少。这也就要求我们熟练掌握各个模块的基础知识点。

那么社招面试呢?

社招面试考察的部分包括:基础知识点的掌握,对业务逻辑(项目)的理解以及对未来的职业规划等。

社招面试中对于所做项目的考察,以及根据项目衍生出去的知识点是相当看重的,可能直接决定面试的成败。

我个人总结了下校招和社招的区别:

  • 校招面试看重基础,全方位无死角的考察各位的基础知识点,并且一般考察XXX是什么?XXX怎么实现的?
  • 社招面试对于项目的考察至少占到了一半,2面或者3面会针对项目做一个详细的沟通与了解,包括整个项目的业务架构,技术架构和技术难点和卡点等;
  • 社招面试都是这么考察的,XXX是什么?XXX是怎么实现的?XXX为什么这么实现?也就是说同一个知识点,比校招多了为什么要这么实现?
  • 校招的算法可能会比较难一点,而社招因为看重项目和技术的深度,限于时间,所以算法考察会相对简单一点。

为什么说社招面试中的XXX为什么这么实现比较难?

因为,我们在网上搜集到的资料中,绝大多数都是在介绍XXX是什么?XXX是怎么实现的?唯独没有介绍为什么这么实现,甚至于面试官会问还有没有别的实现方式?或者更好的实现方式?

这就导致同一个知识点,社招面试的难度可能会直线上升。并且我们日常也缺乏思考,喜欢背题,所以导致社招面试表现不佳。

接下来,我们按照社招面试一二三轮所考察的知识点来给大家进行一个介绍。

社招面试:第一轮(生死面)

不知道大家有没有这种感觉?面试中的第一轮才是真正的生死面,至少从我个人经验来说,确实是这样的。即使是社招面试,第一轮依然逃不脱我们前面所学的基础知识点。

如果校招面试考察的是这个知识点是什么?怎么实现的?那么社招面试在大多数情况下都会继续考察为什么要这么实现?

也就是说,我们在牛客刷面经的时候会觉得,你看这个社招面经的水平好低呀,简直就是校招水平,都是一些简单的基础知识点。我们某些同学甚至会膨胀,觉得自己对这些知识点已经熟练掌握啦。

殊不知,社招面试考察的是为什么这么实现?这个问题可不简单,好多知识点已经烂大街了,网上随便一搜,看看就懂了。但是,真正分析其为什么这么实现的深度好文少之又少。社招主要在考察我们是否对一些知识点进行过深入的思考与理解。

接下来,我们来看下一面的具体考察形式和知识点吧。

因为是社招面试,一轮面试官会让我们选择一个自己认为最可以体现自己技术能力的项目进行介绍。在你介绍完项目大概的业务逻辑之后,面试官会会让我们说出该项目中的技术难点和技术卡点。(这块其实很难很难,后续介绍)这块项目的介绍与提问大概要花费15-20min左右。

然后就是基础知识点三连问,是什么?怎么实现的?为什么要这么实现?下边列出这段时间笔者遇到的高频基础知识点。(注意啦!!!注意啦!!!别眼高手低,看着简单,但是你能扛得住三连问吗???)

多线程并发编程:

  • 线程池的构造参数及其含义,如何确定线程池中线程的个数等
  • 定时线程池如何实现的?
  • synchronized,volatile关键字
  • 原子性,可见性与有序性
  • 可重入的锁ReentrantLock
  • ThreadLocal的实现原理
  • AQS底层实现,与ReentrantLock的关系

JVM知识点:

  • 内存区域划分
  • OOM介绍
  • 对象分配与回收
  • CMS和G1垃圾收集器
  • 对象可达性分析
  • 类加载机制
  • JVM调优参数
  • Full GC,Minor GC
  • 对象的栈上分配(JIT编译器)

MySQL知识点:

  • MySQL隔离级别
  • 一致性视图
  • 日志模块:undo log,redo log和binglog
  • 索引结构,回表,最左前缀原则
  • 间隙锁,幻读,MVCC
  • SQL优化实战

Java基础:

  • NIO的实现原理
  • HashMap,HashSet,LinkedHashMap以及ConcurrentHashMap
  • hashcode与equals方法的区别
  • RuntimeException Exception Error
  • 注解的使用
  • 基本数据类型
  • 五种常见的网络IO模型

Spring&MyBatis:

  • Spring IOC和AOP的原理
  • SpringBoot源码解读,启动方式,配置顺序等
  • SpringMVC和Spring父子容器的关系
  • Spring的事务实现方式
  • 如何自定义实现SpringBoot中的starter
  • MyBatis中#和$符号的区别

网络协议:

  • TCP与UDP区别
  • TCP可靠性如何保证
  • TCP网络包分片与重组
  • 三次握手与四次挥手,状态转换
  • SSL握手协议使用的加密算法,非对称加密的缺点
  • XSS和CSRF介绍

Redis&Kafka:

  • redis实现分布式锁
  • redis数据结构类型
  • redis zset实现延时队列
  • 跳表如何维护
  • redis线程模型
  • redis的数据过期方式
  • redis持久化方式
  • 缓存雪崩,缓存穿透,缓存击穿
  • Kafka主题,分区和日志文件的关系
  • Kafka日志压缩和删除
  • 消息队列基本特性

好了,一面的基础知识考察主要是上边这些。这个过程大概20min左右,其实也问不了几个问题,前提是你回答得还不错。

接下来的环节属于“手撕”算法环节,比较幸运的是,视频面试期间,各大公司基本采用了牛客的在线视频面试方式。所以,我们可以在面试间直接写入可以运行的代码。社招对于算法的考察比较基础吧,笔者在多家公司的面试中都未曾遇到特别难的算法题目,这里还是简单罗列下遇到的算法题目:

  • 找出多数元素(美团)
  • 最长公共字串 (美团)
  • 单例模式 (美团)
  • 快速排序 (阿里)
  • 查找链表中倒数第N个节点 (头条)
  • 合并k个有序的链表 (快手)
  • 蓄水池 (快手)
  • 自定义实现parseDouble方法 (快手)
  • a+b+c=0 (头条)
  • 二叉树前序遍历 (快手)
  • 二叉树按照前序遍历转换为只有右节点的树 (猿辅导)
  • 按照之字形遍历二叉树 (头条)
  • 保留有序链表中的重复元素,并且只保留一次 (阿里,这个很有意思,感兴趣的同学可以实现下)
    • 给定一个有序链表,保留链表中重复出现的元素,并且只保留一次,如给定链表1->1->1->2->3->3->4. 结果为1->3。请写出一个高效的算法
  • 使用三个线程分别打印A,B,C,按ABC CBA ABC CBA ...的顺序进行打印 (阿里)

还行,对于有准备的各位来说,这些算法都不太困难。待会在资源分享段落,楼主将会分享自己私藏多年的算法学习节奏,助你备战面试!!!

一面总结:

社招一面(生死面)容易挂的第一个点,就是刚开始的项目讲解的一般,没有亮点。项目中的技术难点和技术卡点无法表述出来,很容易给面试官一种“这人不行”的感觉。至于基础知识还是得靠我们平时多想想是什么?怎么实现?为什么这么实现?

简单总结一句:讲解一个优秀得项目,面试就通过了一半

社招面试:第二轮

一轮面试如果通过得话,恭喜你,你的面试其实已经通过了一半。因为一面面试官已经在基础知识方面对你进行肯定,二面面试官得提问方向就相对比较多了。二面面试官得重头戏还是你对项目的理解。

本轮面试会让你继续讲解一个或者多个项目,因为没有了基础知识点的考察“压力”。面试官会对项目进行深入了解,包括其业务架构,技术架构与技术原理等。大概包括如下的技术点:

  • 项目业务架构,针对项目中各个知识点进行扩展与提问
  • 项目技术架构,技术架构中比如说Thrift的实现原理,nginx相关知识点等
  • 项目中学到了哪些技术?或者之前学到的技术哪些在项目中可以体现?
  • 服务的QPS如何?如何保证服务高可用性?
  • 如何限流,熔断和降级服务?
  • 服务的部署方式,各个集群数据库的同步方式
  • MySQL单表数据量多大?索引结构如何?
  • 上线新服务如何进行压测?
  • 内存泄露的排查方式?
  • 线上接口响应超时的排查思路

当然了,在这些比较开放的问题之外,部分面试官依然会考察一些基础知识点,这个看各个面试官的风格了。但是,二轮面试看重的还是项目技术架构以及你所做的贡献有哪些。(PS.手撕算法我们都统一在前面介绍了,二轮面试也是需要手撕算法哦)

二面总结:

二轮面试考察的不仅仅是基础知识点的掌握,更重要的是实际的业务逻辑能力。如果你可以在回答中表现出自己良好的解决实际线上故障的能力与水平,并且在实际的工作中对一些方向有进行过深入的了解,那么你的面试之路将会顺利许多。

社招面试:第三轮/第四轮

为什么将第三轮/第四轮面试放一起呢?是因为有的公司只有三轮技术面试,而个别公司会有四轮技术面试,大同小异吧,我们这里统一进行介绍说明。进行了最后一轮技术面试,意味着前面面试官对你基础知识的肯定,你的业务逻辑与处理问题的能力也得到了肯定。

本轮面试基本上就是业务部门老大在面试,主要考察的方向也比较固定吧。主要考察的方向包括:

  • 为什么出来看机会?
  • 原公司团队的一些基本情况
  • 项目的简单介绍
  • 开放性的系统设计题目:
    • 排队系统
    • 点餐系统
    • 停车场系统
  • 未来的职业规划
  • 有什么兴趣爱好
  • 你还有什么想要了解的呢?

怎么样呢?是不是感觉比较轻松?所以说,不要害怕Boss面,大老板一般都是很随和的,不会刻意去为难大家的,尤其是在前面轮次已经进行了详细的考察之后。能走到最后,你的各种能力基本得到了肯定,大Boss喜欢你还来不及呢,怎么会为难你的?当然了,一些面向对象的系统设计,包括各个模块的划分,数据库表结构的设计我们还是得全面考虑,设计出来才行哦,关键得是思路与设计能力。

社招面试:HRBP轮次

恭喜你,如果你已经进入HRBP轮次得面试,那么你离正式通过面试就差一小步啦!HRBP面试主要考察候选人得价值观和上进心吧。主要涉及问题如下:

  • 在原公司得哪一段时间是比较享受的?(注意,这里要说自己的成长!)
  • 为什么现在出来看机会呢?看什么类型的机会?(提升自己,挑战自己等)
  • 同事或者朋友之间如何评价你?(说自己的优点,乐于助人等,热心)
  • 平时如何学习呢?有没有什么技巧?(看书,官网,做项目)
  • 你对我们的业务方向有了解吗?(通过前面面试反问环节,有所了解,大概说下)
  • 你的职业规划是什么? (深度和广度,钻研某个放心,沉淀自己,寻找感兴趣的技术点等)
  • 你的一些优点有哪些?(哈哈.jpg)
  • 目前还在看哪些机会呢?手里还有别的Offer吗?(实话实说,多了去了^_^)

对,你没有看错,大概就是这些问题,只要我们稍加准备即可应对HRBP面试。笔者这边是没有遇到HRBP面试淘汰候选人的现象。如果真的遇到了这种情况,那可能是大家前面的技术面试表现不够出色,勉强达到了可要可不要的分数。这个时候,如果出现了更加优秀的候选人,那么即使HRBP面试完成,依然会进行淘汰。所以,我们重点还是要提高技术能力。

社招面试技巧:

那么社招面试都有哪些技巧呢?我认为技巧始终应该建立在实力的基础上。那么如何拥有实力呢?分模块进行梳理总结知识点,在日常的学习工作中,对各个知识点进行不断的丰富与补充。

什么?你没有时间进行总结?没关系,待会我会有干货资源分享,大家只需要在此基础上进行差缺补漏即可。

在拥有了一定的实力之后,我们该如何真正应对面试?这里说几个小技巧(建议)吧。

(1)在面试之前,你需要系统的复习准备相关基础知识点(毕竟一轮面试才是生死面)。
(2)在面试之前,你还需要准备一套自我介绍说辞,深度挖掘项目中的技术难点和卡点。
(3)面试过程中,如果之前没有接触或者研究过,可以直接说,“抱歉,我没有研究这块”,切忌不懂装懂,胡说八道,影响面试表现。
(4)每轮面试的反问环节,我们可以让面试官对该部门的业务逻辑进行介绍。
(5)面试结束后,及时写下面经,尤其是面试中回答错误或者一些知识盲点。查缺补漏,每一轮面试都会有所收获。

PS.再说一个特别特别重要的地方!!!做一份高质量的简历。容我说句脏话吧,有些同学呀,本身学历背景就差,还特么的做了一份垃圾简历,你觉得大厂会给你面试机会吗?大厂也是有尊严的好不好???简历都做不好,你还面啥试?请不要浪费内推人和HR小姐姐的时间了好不好???

这里再说个点,在反问环节中,如果面试官很有耐心的给你介绍部门情况和业务逻辑方向,恭喜你,这轮面试大概率是通过啦,好好准备下一轮次面试吧。反之,一句话介绍业务情况,那么你大概率是凉凉了,好好复盘面试,准备其他公司面试吧。


日常学习资源分享

好像到了大家最期待的分享干货时间了。分享点啥呢?挨个在说吧。(一家之言,仅供参考)

学习方法:

如何学习?学习一门新的技术,我们首先需要在查询一些入门级别的博客教程来学习,有了初步的了解之后。买一本相关的技术图书(实体书!!!),看的差不多了,我们再去找一些面试题目去查缺补漏(顺便可以知道重点内容),如果时间来不及或者总结能力稍差的同学,可以买一些专刊来学习,比如说牛客专刊。

算法怎么准备?

在学生时代,楼主没好好学习,算法学的呀说一塌糊涂。这次社招跳槽,楼主在年前用了两个月时间,重新学习准备了常见的高频算法题目。首先力推几个博客:


说到了算法题目,怎么能不说说知名的LeetCode网站呢?是的,必须在上边刷算法!!但是真的有必要对着题库使用题海战术吗?

NO,不需要,至少社招面试肯定是不需要的。校招面试也建议将题海战术放在第二优先级!!第一优先级是这里:

  • https://leetcode-cn.com/explore/ 题库边上的探索频道里边!!!这里才是分类总结的最高频最常见最重要的经典面试题目,并且官方已经帮你总结好了,刷刷刷的干起来就完事!!

图片说明

最后,楼主在牛客网上也将剑指Offer上边的常见算法题目重新过了一遍!妥,这时候的水平,参加个社招面试已经很稳妥了,常见的算法题目都可以掰扯掰扯,因为我们已经有了算法思想了。再次推荐:


日常私藏的资源

哈哈,容许我自恋下,我猜下边会有人问:“楼主,你这么厉害,平时都咋学习的?”咋学习?抄作业呗,这里分享下我珍藏多年的干货博客网站吧。


好了,不接着推荐了,再多就学不动啦~

牛客网上的资源:

牛客网上边资源很多,这里简单给大家推荐下:


总结:

这次的社招面试,笔者也算身经百战,真正拥有了社招面试经历,并且取得了不错的战果,以此可以给大家进行更好的分享,这篇文章大概就说完了,不知道大家有没有一点收获呢?好了,话不多说,让我们一起学习起来吧。希望与大家建立亦师亦友的关系,共同学习,交流与进步。

PS.大家有什么问题可以在下边评论出来哦?楼主看到会和大家一起交流的哈~
欢迎大家关注我的博客:https://yangwenqiang.blog.csdn.net/

快手内推

对了,说了这么多。怎么能忘记内推呢?快手内推!!!

#面经汇总##社招##阿里巴巴##字节跳动##美团##Java工程师##面经#
全部评论
1 回复 分享
发布于 2020-05-15 00:10
最怕项目介绍, 大部分项目的技术都一般,也没有什么出彩的地方
点赞 回复 分享
发布于 2020-05-10 13:55
可以,博客已经关注,我要白瞟到我的个人网站了www.upheart.top,哈哈
点赞 回复 分享
发布于 2020-05-10 14:36
关于简历项目介绍楼主能给点意见吗?没有技术难度,只是展示端业务逻辑处理感觉不知道怎么介绍
点赞 回复 分享
发布于 2020-05-10 17:16
赞同!虽然只有半年经验的我,面试被问的也基本都是这些。🤣
点赞 回复 分享
发布于 2020-05-11 09:01
xm
点赞 回复 分享
发布于 2020-05-11 09:24
经验少,怎么才能更好的提升呢?
点赞 回复 分享
发布于 2020-05-11 09:35
点赞 回复 分享
发布于 2020-05-11 10:44
#社招面经# #Java面经# #阿里巴巴Java面经# #快手Java面经# #字节跳动Java面经# #美团点评Java面经# 👈点击话题查看更多同类面经干货!每日面经精选,为你发掘牛客干货!
点赞 回复 分享
发布于 2020-05-11 11:18
点赞 回复 分享
发布于 2020-05-20 00:49
感谢分享哈,mark好好学习
点赞 回复 分享
发布于 2020-05-20 01:32
mobai
点赞 回复 分享
发布于 2020-06-17 15:25
谢谢大佬
点赞 回复 分享
发布于 2020-09-12 23:58
支持  日常支持大佬
点赞 回复 分享
发布于 2020-10-29 15:10
感谢分享,干货十足
点赞 回复 分享
发布于 2020-11-24 18:16
校招的时候买了楼主的课,受益匪浅,想问一下社招的时候算法题会规定要用Java来写嘛,校招的时候喜欢用C++来写,最近又开始刷题了,不知道要不要改用Java来刷😣
点赞 回复 分享
发布于 2021-04-16 11:26
学的太好了
点赞 回复 分享
发布于 2021-09-27 13:04

相关推荐

感性的干饭人在线蹲牛友:🐮 应该是在嘉定这边叭,禾赛大楼挺好看的
点赞 评论 收藏
分享
评论
100
835
分享
牛客网
牛客企业服务