前言
上次去面试字节跳动的时候,在大门居然碰到了张一鸣,问了前台才知道他要在这里举行演讲,注定只是插肩而过了。我最近加入了 ByteDance 某“Awesome”部门(具体保密,想猜的话就看这单词猜吧,下文简称Awe),遂一群周遭好友来讨要面经;其实自己过去在前东家也负责很多面试工作,对于这种内容猛一想还是保密相对好些,然鹅仔细想想涉及的东西很多是比较针对我所擅长的方向,未必和大多数人都能重合,而那些公共的基础部分也是目前市场上一个合格的Android工程师所该必备的,所以整个面经分享我还是决定写出来,只是换个没那么直接的方式,更多当成是一篇指导性的文章吧,毕竟面试还是靠硬实力,一篇面经如果真对你的实力有所提升那也算是我为招人企业做了点实在的贡献,何乐而不为呢?先来个指导性总纲吧:ByteDance的Android面试整体是对计算机本源思想、实战应用和个人思维、潜力的综合性考查打个比方就是:这里比的更多是内力、是能打出真实伤害的武功祭奠,而非某种视听上似乎很厉害的招式(这也是很多工程师不经意间欺骗自己的点)
这确乎是我经历过的最艰难的面试,引言我也曾提到,我本身就负责过很多面试,而且从我毕业半年后的16年底开始负责面试,实习、校招、社招大大小小近百次面试,也算是曾和一些高手过招,另外由于前公司的高要求面试难度确乎是高于BAT的,我深谙其中难度定级和目标定位,但这次面完“Awe”还是让我感觉:之前面试难度是定低了呀当然这感觉很大程度上也是基于其中二面的面试官,他本身的实力、面试风格等确乎让我鸭梨山大好了回归正题,下面是面经分享(→后为自己的指导性意见):
一面 46min
- 简单介绍项目
- 了解哪些数据结构
- 了解哪些排序算法
- 手撕代码:堆排序
- Java集合类:a)LinkedList与ArrayList;b)HashMap扩容 ConcurrentHashMap
- TCP与UDP,区别及运用场景
- http是用的TCP还是UDP
- http与https的区别
- JVM内存模型(Static方法在哪个区)
- Activity生命周期,Activity启动模式,Handler源码
- 代码题:旋转数组
(一面面试官很nice,答的时候卡壳还会给引导,问的问题、撕的代码都不难)
下午面完当天晚上就接到约二面的通知了
二面 55min(部分问题有重叠的不再列出)
- final、finally、finalize的区别
- 抽象类的成员变量与成员方法的继承
- socket是否了解,简单聊聊
- 经典问题:在浏览器输入网址敲回车后经历了什么(这题我感觉我至少说了10分钟[捂脸]) a)三次握手;b)https的加密流程;c)对称加密与非对称加密原理(RSA、AES)
- 数据库有哪几种隔离机制
- union与union all的区别
- MySQL的索引怎么实现的
- B+树查找的时间复杂度,数据结构讲一下
- 设计模式:a) 手撕DCL单例;b) 还了解什么设计模式(讲了观察者模式、策略模式)
- JVM的垃圾回收机制,GC Roots有哪些,说说了解的垃圾回收器
- View的事件分发机制
- 代码题:两数相加(链表,要求原地实现,空间复杂度O(1),这个犯蠢撕了好久结果还是靠强行打印发现的问题)
面完后二面面试官希望直接进行三面,可惜似乎三面面试官在开会,所以另约在了两天后
三面 70min (部分问题有重叠的不再列出)
- 线程与进程
- 死锁条件,如何排查、解决
- 虚拟内存、分页机制,讲一讲LRU
- 创建对象的方式有哪几种(new 反射 clone 序列化)
- 序列化与反序列化
- 反射中的class.forname()与class.getclass()二者有什么区别
- String.equals(),StringBuffer
- 类加载的过程讲一下
- Java锁的种类
- volatile关键字的作用、原理
- handler.post(Runable()),聊一聊这个
- ANR,OOM了解吗?
- 代码题:a) 螺旋遍历矩阵;b)(变种)原地旋转图像
- 聊人生聊理想聊爱好
经验和教训:
最后的最后,再献上我个人面试别人经验以及这次被面试经历的一点要领总结吧:
对于社招,面试技术方向的,除了人工智能、算法那些其他真的不太看重学历,很多时候大家所认为的学历敲门砖本质上是企业为了节省面试成本所额外加入的坎,社招更多还是看工作经历和你的成长,这行业有句老话叫:从不看你起点在哪儿,而是看你能跑多块,那些还在为这点担心的更多是你自己还跑得不够快或跑错了方向,这是前提;
然后是方法,技术开发无论哪个方向都避不开的是计算机本源原理,有些很简单的情形就是本源原理的缩影,网络的分层,计算机体系结构上的分功用部件,你可能想过其中的联系?
ByteDance相对于BAT使更多高手的聚集地,他们对于这一点和从这点上发散出来的能力的考察只会比BAT有多无少,所以无论是何方向,内力的修炼永远排在第一位,具体的方向指示以一种具体招式将内力转化为伤害输出出来,很多人认为基础便是内力,其实也不全是,基础很多时候是那些死的知识,这些只是修炼内力的原料,要练成得把他们活用起来转化自己认识其他内容的基础、形成适用于自己修炼、探寻、思考的方法论,以一种独有的方式把这套知识体系灌输于自身,才能算是真正的内力,待你练成这点,哪怕真的遇见功力更深厚的高手依旧能应对自如,正如我二面遇到的面试官,HR和我介绍说他在Android领域的深度和广度在北京能排上前几名,现在他是我的leader?
【大厂面经整理】
大部分是中高级的学习资料,初级者可以进阶学习,高级者可以查漏补缺,希望对你们之后的秋招,金九银十能有帮助。
-
2020 阿里钉钉、美团、今日头条、腾讯、Android面试真题解析
-
2017-2020字节跳动真题解析
-
2020最新Android大厂高频面试题解析大全
其他
RxJava,Kotlin,Dagger 2,Flutter,Hybrid 混合开发,OpenGL
-
学习视频
给大家一个学习路线吧,哪里不会看哪里就好,也有一个系统的学习路线,这个是我手写的思维导图(仅供参考),建议收藏哦!
-
学习书籍
以上就是我的收录,感兴趣的可以点击【程序员学习进阶】备注需要那块的资料,我发给你!
网友评论