经过5年岁月磨练的 Android 开发跳往字节(已OC)

353 阅读5分钟

背景

唠叨一下:先讲一下我的职业生涯哈,不想看的可以直接到最后一段。我是普通二本出身,一直飘在北京,先是做web网站开发,后转到了Android移动端,也没有什么好运气,就靠一点小机智,得过且过混到16年初,靠着移动互联网大浪把我推到了一家二线互联网企业,在这里才算真正重构了自己,感谢当时遇到的同事,以及有可以和公司一起成长的机会,先后经历了完整的插件化和RN重度封装,知道了虚拟机和Android源码的重要,并开始积累。

18年初,由于公司内部重大调整,动荡不安,再加上自觉jvm和framework很溜了,于是开始看机会,寒冬初期也还算是顺利吧,进了一家普通的一线,可是没想到真正的大厂弯弯绕这么多,激烈,效率如此之低,不是嫡系,你不仅少有升职加薪的机会,连好的项目都拿不到,这个时候迷茫了,大厂也算进来了,结果却如此令人失望。

还得多写一些博主们的文章对我进行引导,这时才明白了一点,知识特别是你本专业的知识,才是安身立命之本,是你最好最快的赚钱方法,读了多少年的书中自有黄金屋,这刻才算真正领悟吧,于是用三个月逐渐修补自己最后的短板:开源库和算法,过程中,逐渐拿各细分行业的小独角兽练手,最后一次就搞定了字节,很顺利。以上就是我的唠叨和感慨,进入字节对于很多985研究生毕业的人来说,是件不太难的事情,可是对于普通人来说,还是个梦想,所以我稍微记录一下心路历程,给别人以参考。

字节面经过程

一面(40min):

  • a. 线程池的底层原理
  • b. 四种引用类型
  • c. JAVA GC
  • d. Sychornized关键字
  • e. 静态同步函数
  • f. 可不可以调用Abstrut 父类的super方法
  • g. HTTP协议中POST,GET 的区别
  • h. TCP/IP协议栈 i. TCP和UDP的区别
  • j. 三次握手是什么?可以两次握手么
  • k. 进程和线程的区别
  • l. 手写ViewGroup树结构遍历

第一次面试稍微有些紧张,但总体来说发挥还是OK的

二面(1h):

  • a. ArrayList / LinkedList的区别
  • b. HashMap的底层实现原理
  • c. 两个线程分别调用同一个类的实例函数和类函数
  • d. 什么是可见性?举例场景
  • e. volatile关键字的意义
  • f.Class对象
  • g. 线程结束的方法:Interrupt之后需要做什么
  • h. Android Activity切换生命周期
  • i. Activity保存状态的函数
  • j. 子线程对UI的操作方法
  • k. 如何在应用程序远程调用中表明用户身份
  • l. 单例模式、建造者模式、中介模式
  • m. 手写中位数查找算法

中规中矩,就是Activity回答的不是很好

三面(50min):

  • a. 聊聊项目
  • b. Handler和Looper的底层结构
  • c. postRunnable方法的底层实现
  • d. Thread Run和Start的底层调用区别(是否中断陷入)
  • e. BroadCast的使用方法
  • f. Intent的使用方法
  • g. Intent-Filter
  • h. 手写外部排序

由于之前还有做过一些项目,这关单纯就是我的加分项目了

上面就是我大致的一个面试过程,能记得的面试内容就这些了,其实面试中问道的还是有很多,问的都比较全面,主要都是从自己简历上填写的项目经历问过去的,顺着还延伸的问了一些。我知道面试官主要是想要考考我的技术水平,还好面试前自己有进行知识点梳理,中间只是出现了一点点小失误,是自己对那些知识点掌握的不够,但没有对我的面试结果收到太多的影响,最后还是把Offer拿到了手。

所以大家在面试前先要对自己的简历进谨慎的填写,并且要对自己填写的项目经历有较深的了解,这样面试官通过你的项目经历进行提问时,你可以顺利的答出。还有就是你在面试前可以去网上去收集一些往年常见面试题进行刷,也是防止面试过问些常见问题,这如果你没答上来就有点可惜了。因为常见面试问题一般在网上都是有参考答案,所以通过这些参考答案进行自我优化理解,等到做答时能够更好的顺口答出。

最后

我在面试前期做了一些面试准备,通过在网上收集和自己多年经验整理了一些 Android 开发相关的学习文档、面试题、Android 核心笔记等进行了复习,这次面试中被问到的一些题,有部分我都有在这些学习文档中刷到,所以特此份享给大家参考学习,希望能帮助到大家学习提升,我已全部记录在了我 GitHub欢迎大家去star~