字节跳动高工面经记,已获 Offer 入职!

## 正文 面试

最近加入了 ByteDance 某“Awesome”部门(具体保密,想猜的话就看这单词猜吧,下文简称Awe),遂一群周遭好友来讨要面经;其实本身过去在前东家也负责不少面试工做,对于这种内容猛一想仍是保密相对好些,然鹅仔细想一想涉及的东西不少是比较针对我所擅长的方向,未必和大多数人都能重合,而那些公共的基础部分也是目前市场上一个合格的Android工程师所该必备的,因此整个面经分享我仍是决定写出来,只是换个没那么直接的方式,更多当成是一篇指导性的文章吧,毕竟面试仍是靠硬实力,一篇面经若是真对你的实力有所提高那也算是我为招人企业作了点实在的贡献,何乐而不为呢?先来个指导性总纲吧:ByteDance的Android面试总体是对计算机本源思想、实战应用和我的思惟、潜力的综合性考察~打个比方就是:这里比的更可能是内力、是能打出真实伤害的武功奠定,而非某种视听上彷佛很厉害的招式(这也是不少工程师不经意间欺骗本身的点)~
这确乎是我经历过的最艰难的面试,引言我也曾提到,我自己就负责过不少面试,并且从我毕业半年后的16年末开始负责面试,实习、校招、社招大大小小近百次面试,也算是曾和一些高手过招,另外因为前公司的高要求面试难度确乎是高于BAT的,我深谙其中难度定级和目标定位,但此次面完“Awe”仍是让我感受:以前面试难度是定低了呀~固然这感受很大程度上也是基于其中二面的面试官,他自己的实力、面试风格等确乎让我鸭梨山大~好了回归正题,下面是面经分享(→后为本身的指导性意见):算法

一面

由于截至面试时,我只有1年实习+2.58年工做经验,因此这一面侧重考察基本的计算及原理和Android基础机制,以及对作过项目的我的探索和理解深度;具体涉及的方面以下(有些我感受随口就能答上的忘记了- -)吧:数据库

1.自我介绍

我具体怎么答的略过,总之注意几个点:说简历上没有的、有亮点的、跳槽缘由等,从各个点上尽力彰显本身优点、技术特长api

2.手写代码

计算View树上全部view的数量,参数ViewGroup,补全空方法返回view数量→本质就是数据结构多叉树递归层序遍历+Android View基本api调用缓存

3.Android相关

主线程Looper一直循环查消息为什么没卡主线程?RecyclerView相对ListView区别?好像还有Bitmap resize相关,就是设置option,而后decode→这里还有些我基本都是随口答对的,已然忘了😂反正都是中级(或稍偏高级)Android工程师必掌握原理机制~微信

4.项目相关

用MultiDex解决何事?其根本缘由在于?Dex如何优化?主Dex放哪些东西?主Dex和其余Dex调用、关联?Odex优化点在于啥?Dalvik和Art虚拟机区别?多渠道打包如何实现(Flavor、Dimension应用)?从母包生出渠道包实现方法?渠道标识替换原理?网络

  • Android打包哪些类型文件不能混淆?
  • Retrofit主要实现机制?
  • 动态代理静态代理区别?

→上面这坨都是从我作过的项目或用过的开源库引伸出的问题,并且挑的都是不太偏业务且技术性强一些的,这其实要求平常在把事儿作成的基础上还得再多看下原理顺带本身动手探索下,明晰人家每一步是怎么互相关联推进直至最终搞定的,而不是加个dependency或copy下别人代码就完事儿嘞~数据结构

5.架构

思惟、架构:模块化怎么作的?怎么设计的?接口发现暴露怎么作?基于什么思想?MVC、MVP、MVVM应用和彼此本质区别?架构

→由于这不是那种肯定性答案的问题,只能多实战+战后总结并深刻思考才能出真知啦,。ide

二面

真是要了我半条命,耗时近2小时……

这面上来大概介绍了下本身,而后问了点我用过的东西好比Glide缓存特色?随后:你擅长Android中哪一个方向呢?这问题我实际上是按Android UI动画方面和移动端后台交互方案制定来预想过的,然鹅说完他挑了Android UI,噩梦就开始嘞- -直接他出效果我来想方案作。

第一个问题前他说,这个问题我问过不少人没几个能答出来的,你试试?
我:呵呵🙄
他:你看我这手机上这个launcher里应用抽屉(就是不少ROM都有的把不少APP管理归类的二级菜单功能)他在这ROM前一版是有个毛玻璃效果背景的,从系统ROM角度说下怎么作吧?

→这100%是我一点没作过的,面试官八成也知道,也是不少人在面试里会遇到的状况,这时候别慌,咱们能够从知道的东西里去推,哪怕只把把思路展现出来也OK;好比这个确定是FrameWork作系通通一渲染那里要作些事,那系统渲染是谁管呢,SurfaceFlinger呀,它怎么工做的呢?它哪一步改动一下是否是可能就达到这效果了呢?这种思考过程是一个高工所要必备的,也是须要平常在面对不少问题时要培养本身去练就的思考方法~事实证实,虽然有些细节我确实没涉及过,但至少思路策略以及知识迁移解决问题能力都获得了面试官的承认~

后面还有的UI相关的依旧是相似这种的两个大问题:实时的水面倒影效果怎么作?这里面实时更新的UI性能如何保证?→我所处情形和思路同上

再到后面是偏UI基础的考察:Measure、Layout、draw大流程、绘制顺序,基于这些说下TagLayout(FlowLayout)怎么写?

接着是算法题:俩线程分别持续打印奇数和偶数,实现俩线程的交替打印(从小到大)→计算机操做系统线程相关基本题目,你要以为难只能说明基础瘸腿,赶忙补吧;操做系统+编译原理也是我面试别人过程当中发现的大多数人的弱项

最后也是模块化、工程架构思想相关更细致的盘问,确实有些我以前没意识的问题被问及不过仍是老方案:能想出来的就给方案,不能的就给思考过程。

三面

整个Android端负责人面,多是二面太太要命了,这面相比之下感受在休息…..
上来仍是互相介绍,而后有个算法题解决个实际问题,由于我很快用知识迁移的思想把生产者消费者问题的解法用过来,讲的也很透彻,手写代码就省了,随后仍是问问偏思想性的东西工程架构、以前提到的接口暴露又老生常谈,不过以前答的不太好我忽然仍是用知识迁移想了个好办法解决,对方也听后看似比较满意;

再而后仍是擅长方向,由于二面真是被虐惨了,另外考虑到三面负责人的身份更关注一我的思想性、系统性的东西,因此绝不犹豫说了定移动端架构解决方案、先后台接口涉及那套,这个应该是不多有面试者会说的一点,我发现我说完面试官眼前放光😜

随即问题就是设计个IM客户端以及数据库架构吧,相似微信,偏上层业务部分的会话、联系人、通知、公众号如何存、分几张表,架构每一层都是啥,互相怎么交互工做?

还有是提个公司旗下产品作的很差的点,吐槽一下(有理由根听说服对方便可,最好是人难以意识到的点)。最终基本就是了解公司状况嘞,全聊完他都没商量就直接告知hr来跟我谈了,到这里基本能够知道就是稳了,国内公司hr不多有挂掉人的,尤为对于ByteDance这种缺人的地方,移动端又是稀缺中的稀缺~

HR面

这面就是偏闲聊了,问问跳槽缘由、我的爱好、我的职业规划、目前薪酬、跳槽薪酬要求,福利同步一下;这面稍微注意一个点吧,就是你首先要真诚,而后基于此尽可能展现给对方的是你有活力、有上进心、对本身有想法也有期待、对于你来面试的地方也有兴趣;你给她的好感会帮助你在定薪过程当中让她为你多多美言,固然主要还得看技术面,但这些小技巧也是有助力的,最终验证也是符合这点的,总的算起来个人薪资涨幅超过60%,二期要求最高直到40%,另外我还被赋予了选组的权力和期权,我感受这里面或多或少都和我展现给hr以及前几轮面试官的个人精神面貌有关,有些承认是在面试过程当中不少小细节(身体姿式、不经意的点头、微笑、手势、话语声调突变等)能看出来的~
!!!备注下,由于隔得时间略久,有些面试内容和考察点已然忘记的也就没往上写,总体的面试题量仍是大过上述这些的!!!

最后的最后,再献上我我的面试别人经验以及此次被面试经历的一点要领总结吧:

对于社招,面试技术方向的,除了人工智能、算法那些其余真的不太看重学历,不少时候你们所认为的学历敲门砖本质上是企业为了节省面试成本所额外加入的坎,社招更多仍是看工做经历和你的成长,这行业有句老话叫:从不看你起点在哪儿,而是看你能跑多块,那些还在为这点担忧的更可能是你本身还跑得不够快或跑错了方向,这是前提;

而后是方法,技术开发不管哪一个方向都避不开的是计算机本源原理,有些很简单的情形就是本源原理的缩影,网络的分层,计算机体系结构上的分功用部件,你可能想过其中的联系?

ByteDance相对于BAT是更多高手的汇集地,他们对于这一点和从这点上发散出来的能力的考察只会比BAT有多无少,因此不管是何方向,内力的修炼永远排在第一位,具体的方向指示以一种具体招式将内力转化为伤害输出出来,不少人认为基础即是内力,其实也不全是,基础不少时候是那些死的知识,这些只是修炼内力的原料,要练成得把他们活用起来转化本身认识其余内容的基础、造成适用于本身修炼、探寻、思考的方法论,以一种独有的方式把这套知识体系灌输于自身,才能算是真正的内力,待你练成这点,哪怕真的碰见功力更深厚的高手依旧能应对自如,正如我二面遇到的面试官,HR和我介绍说他在Android领域的深度和广度在北京能排上前几名,如今他是个人leader😝