2021 最新分享快手 / 百度 / 蚂蚁 / 字节面经总结
个人近期面试情况
今年二月以来,我的面试除了一个用友的,基本其他都被毙了,可以说是非常残酷的。其中有很多自己觉得还面的不错的岗位,比如百度、跟谁学、好未来等公司。说实话,打击比较大。
情况基本上是从这个月开始好起来的,这个时间点,国家开启了接近 40 万亿的基础建设计划,在这个时间段,面试的几个代表性的公司,包括腾讯、饿了么、宝宝树、旷世 科技等等,基本都成了。
最终,就在前段时间,蚂蚁金服给我确认了 p7 的职位。也算自己到了另一个奋斗的阶段了。对自己的经历,做一个面试总结。
我的面试准备
面试其实我是属于一边面试,一边准备的过程,但是无论如何,一定要做到基础扎实、比较好的自我介绍,以及描述自己的职业故事。
面试经历
快手 -- 视频面试 30 分钟
谈一下项目
谈一下对 IOC 和 AOP 的理解
Memchached 和 Redis 的区别
Redis 的持久化实现
Redis 的淘汰策略
定期删除和惰性删除的区别、优缺点
IOC 的原理是什么
Hashmap 的底层实现和原理
手写一个,实现 map 的 put 方法
百度 -- 视频面试 20 分钟
说下 spring 事务,@Transition 这个注解在哪些情况下不会生效
Synchronized 基本原理
Synchronized 和 ReentrantLock 都是可重入锁,他们俩是怎么实现可重入的
线程池的工作原理和 7 个参数
Volatile 的用处
JVM 在什么情况下会发生 YoungGC 和 FullGC
Redis 的淘汰机制
类加载机制说一下
快速排序的基本实现
Mysql 优化是怎么优化的,索引失效的情况都有哪些
实现一个抢红包的算法,怎么实现
让你实现一个 LRU 算法,怎么实现
搜狐一面 -- 视频面试 50 分钟
JVM 垃圾回收机制
怎么判断当前对象能否被回收
对象首次创建的话创建在哪个区(新生代还是老年代,新生代哪个区)
解释一下 stop the world
Stop the world 过程中,如果有新的垃圾产生怎么办
我说我们项目用的是 JDK1.6,面试官就问,1.8 和 1.6 都有哪些区别
有了解过 1.8 的 stream 流吗
HashMap1.8 和 1.8 之前的区别,以及底层实现
HashMap 为什么不是线程安全的
HashMap 还会造成什么问题(1.8 之前头插法会导致死循环)
实现 HashMap 线程安全的有哪些(我答了三种)
CurrentHashMap 的底层原理,以及 1.8 和之前的区别
详细讲讲 CAS 的工作原理
CAS 的 ABA 问题怎么解决的
你常用的线程池有哪些
线程池的 7 个参数
SingleThreadExecutor 和 CachedThreadPool 为什么不推荐使用,会出现哪些问题
写一个冒泡排序
写一个算法,快乐数(LeetCode 原题),我一开始用递归写,会出现死循环的状态,面试官超好提醒我,然后花了很长时间修改算法,通过
Mybatis 有了解它的插件吗
MybatisTemplate 有了解吗
Redis 的五个参数
Redis 的事务,我 Muliti 事务开始,然后写了五个 key,其中有一个失败了,Redis 怎么处理的,会回滚吗
Redis 事务和 Mybatis 事务有什么区别
Redis 主从复制了解吗
Redis 主服务器是怎么给从服务器写入数据的
看你还了解 Docker,(简单说了一下玩过一点点)
蚂蚁金服(支付宝)一面 -- 视频面试 50 分钟
聊了十多分钟做的项目
你们公司自研的 Spring 和市面上流行的 Spring 有什么不一样
Redis 主要用来干嘛的
Redis 的持久化方式
Redis 的事务有了解吗(我说了使用的基本命令和 mybatis、mysql 的区别)
你对你们经常使用的集合底层有了解吗
HashMap 的底层原理,1.8 以及之前的,线程安全实现方式
Sychonized 和 ReentrantLock 的区别
Volatile 的作用是什么
对 JVM 垃圾回收器有了解吗
CMS 垃圾回收器说一下工作原理
堆和栈的区别
JVM 的调优
try{}catch{}finally{}中,如果 finally{}中的返回值+1,返回的是多少,会改变返回结果吗
线程池有了解吗,它的工作原理
固定长度的线程池有什么缺点
Mysql 和 Oracle 你用的最大的区别是什么(我说了两者的事务隔离级别,以及 mysql 中的 Explain 和 oracle 当中的 Explain plan for 的区别)
Mysql 的聚簇索引和非聚簇索引有了解吗
看你做过 Sql 优化,讲讲你做了哪些优化
Mysql 回表知道是什么吗
SpringMVC 的工作流程是什么
一道简单的算法题,反转链表,我说这题我前段时间专门 leetcode 上练过,我算法不好,这段时间主要是复习基础了,面试官夸我基础很扎实,应该二面稳了,面试体检极佳
蚂蚁金服(支付宝)二面 -- 视频面试 40 分钟
是个小姐姐程序员,聊了聊项目
问了下我们公司现在项目用到的技术栈
和一面一样问了下我们公司自研的 Spring 有哪些不一样
同样讲了讲 oracle 和 mysql 的区别
讲讲不可重复读是什么
Jdk1.8 有了解过 CompletableFuture 吗(我没有了解过,流下来没技术的眼泪)
那你知道 Future 吗(好像是 Callable 的时候返回值会用到它,又流下了没技术的眼泪)
写一个算法题吧,牛客网的 密码合格校验,写了十多分钟,全是靠 if else 解决的
小姐姐也说,这个写的没问题,但是需要更多的考虑更好的办法,比如借助 java 自带的工具类等等。
说一些和技术无关的,你对你自己的技术发展有什么想法(我就说,平时会多看看技术公众号,看 B 站学习技术,会关注很多新技术然后跟着学习,想去更大的平台通过实际场景的应用丰富自己的阅历)
美团(美团打车)一面 -- 视频面试 40 分钟
String,StringBuild,StringBuff 的区别
StringBuff 为什么是线程安全的
ArrayList 和 LinkedList 的区别是什么
以上二位是线程安全的吗,怎么实现线程安全
Vector 实现线程安全的原理是什么
多线程编程中你知道哪些都是保证线程安全的
Volatile 的底层实现是什么
线程池了解吗,说说工作原理
内存溢出说一下
栈溢出说一下
要实现一个 OOM 和栈溢出,怎么实现
说一下你常用的垃圾回收器
Stop the world 解释一下
CMS 的工作流程是什么
Spring 中 bean 的作用域
Spring 中 bean 的生命周期说一下
说一下你在项目中遇到的印象深刻的问题是什么,有什么收获
Redis 的持久化怎么实现的
写一道编程题,leetcode 第一道经典题目--两数之和
对美团打车有什么想了解的吗(问了下美团打车和滴滴高德打车的区别)
字节跳动 视频面试 -- 30 分钟
简单介绍了一下项目
HashMap 介绍一下
为什么要用红黑树的结构
红黑树一般都会用在哪些场景中
Oracle 的索引了解吗
Mysql 的索引底层实现是什么
B+树的实现原理了解吗
Mysql 事务特性了解吗,具体说一说
Mysql 的事务隔离级别了解吗
Mysql 的事务隔离级别是怎么实现的
算法题:[(5,7),(1,6),(15,50),(60,90),(35,37)] 合并二元数组 输出[(1,7),(15,50),(60,90)]
算法题:分层打印二叉树
算法题:反转链表起网络
一般技术面到后面,面试官都是 leader 或者是部门老大,他们其实很关心你的职业规划、对待工作的态度、团队合作的能力、自我价值实现方面的思考,当然还有项目实现的能力,过往项目经验和深度。所以最好自己先想想怎么用简短的话表述清楚。注意围绕关键词去说。
写给看到最后码友的话
这些算是我作为过来人对于应届毕业生和刚工作不久的同学的一些小小建议吧。
(1)一定要紧跟技术前进的脚步,尤其是大数据相关的技术,在技术更迭的时候一定要学习熟悉新技术,看源码,哪怕自己在工作中用不到也一定要学。因为这是你下一份工作的敲门砖。
我作为一个老兵,在上一家公司工作 4 年,我没有逼迫自己学习新技术。
结果现在面试碰壁,其实大部分原因就是人家用的都是主流技术,你不会你就被淘汰。
(2)不要给自己设置舒适区,这个就是说,一个公司待久了不要懒惰,不能荒废自己,始终要保持清醒的头脑和进取心,不断学习,不断完善自己的技术,架构设计能力,项目管理能力,交付能力等。
一定要及时从项目中总结经验和不足,最好落实到日记本中,最后通过不断思考,形成自己的做事方法论。
(3)对自己的职业生涯要有一个规划,以后要做哪一块一定要有自己的想法,确定了就要从这个方向完善自己,多学多练。
目前大数据这一块,有数据中台架构的公司不是很多,除了算法岗外,大多数人在团队中都是 1 专多能的角色,今天干干 ETL,明天搞数仓,后天又给 BI 出数据,可能又搞调度系统、报表系统、标签系统、反作弊平台等平台。
没有人会专一做某一块,但是自己一定要想好哪一块是自己以后要走的方向,那么这一个方向确定了就要深入的学习这一块的知识,多看源码,多做练习,如果接触到具体项目,要在项目中沉淀自己,最后形成自己的知识体系。
(4)做事情要有担当,不要根据 OKR 给自己设置界限,有能力有空闲多做一定要多做,这也是别人认可你的最佳途径之一。互联网圈子很小,大家认可你,以后去大厂,换个好工作,也许就更容易。
最后
在这我也分享一份大佬自己收录整理的 Java 学习 PDF+架构视频+面试文档+源码笔记,还有高级架构技术进阶脑图、Java 开发面试专题资料,高级进阶架构资料这些都是我闲暇还会反复翻阅的精品资料(主要是我把其他杂乱的不成体系的都删了~)
1.我的总结
MySQL 进阶面试突击(数据库理论+MySQL 使用+MySQL 底层实现)
算法与数据结构突击手册
Java 核心技术笔记
Java 架构成长笔记
Redis 核心技术笔记(学习总结)
Spring 全家桶学习笔记(SpringBoot+SpringMVC+SpringCloud+源码等)
其他
2.学习方法
我个人的学习方法很简单,利用碎片时间进行系统性的学习。关于学习方法,我个人喜欢阅读书籍文档结合视频的方式,对于这些我自己个人也有一些整理。
阅读书籍文档:
看视频学习:
总之也是在这里帮助大家学习提升进阶,也节省大家在网上搜索资料的时间来学习,也可以分享给身边好友一起学习
如果你有需要的话,可以点赞+评论,关注我,添加小助理 vx:mxzFAFAFA 即可!!
版权声明: 本文为 InfoQ 作者【比伯】的原创文章。
原文链接:【http://xie.infoq.cn/article/8358ff331404ec6e6e4f5d4a2】。文章转载请联系作者。
评论