一、 前言
现在是2021年的7月,现在很多程序员朋友们都在为面试做准备;相信大部分程序员们都以进入大厂的目标,因为这样可以实现财务自由,追逐自己的职业理想。
- 如果是已经拿到心仪offer的朋友可以把此篇作为收藏,下次跳槽面试时可以拿出来看看;
- 如果是还在准备面试或者是面试被挂,没有拿到心仪offer的朋友们,我建议你们要好好看看这篇;
这篇文章主要介绍了我的同事兼朋友刘哥三月份的腾讯面经(已拿offer),(一次性查缺补漏个够),如果对你们的面试有所帮助的话,请一键三连!(感谢刘哥的内容提供)
二、 背景以及面试前的准备
今年是刘哥工作的第五年,因为在工作中明显感觉到了瓶颈期。具体来说,感觉用过很多框架、做过一些技术设计、也有过一些产出,但是从技术深度上感觉不足,到后期时做事也没有明显挑战,完全适应了公司节奏,说句不好听的就是成了老油条的那种模式。
因为觉得这对于个人成长不利,长此以往可能面临大龄失业。所以刘哥觉得需要痛下决心改变一下现状。刘哥定的目标就是进大厂,因为刘哥觉得小厂做到目前的程度已经很难有很多的提升了。
当刘哥明确大厂的目标以后,他做出的第一步就是改简历
改简历
简历这一步其实非常关键。先说结论,刘哥的简历前前后后改了好几个月,在投简历的时候,大部分大厂都会给刘哥面试机会,并且对刘哥的经历非常感兴趣。所以在后面的腾讯面试中面试官基本也是按照刘哥的简历来问的。
简历写好之后,就要准备面试了,那该如何做?
核心思想:充分发挥你技术上的优势,制定适合你自己的准备方案,做120分的准备,争取100分的结果。这里我只从我自己的经验出发,希望能给大家一些启发。
当时自我剖析,我的优势是什么,不足是什么?我有深耕底层技术的经验,项目经历丰富,做过核心系统,使用过很多流行的框架(比如jetpack+MVVM),做过一些自认为还可以的设计。不足很明显,缺乏深度,浮于表面,做过的项目的一些设计较为幼稚,不能很好地应对更大的业务挑战。
当时花了几个月充分准备,十六个字,增加深度、扩展广度、覆盖死角、挖掘项目。介绍下当时具体的准备。
- 花了近2个月时间,研究底层原理和源码,手画核心流程不少于3遍,面试前做到能熟练讲述Activit的启动流程并做分析。
- 两周时间,重新梳理一遍Android基础,包括Java基础,Android组件、view的绘制流程等等...
- 花了很长的时间深入的学习framework和Rxjava,尤其是Framework这块,从不同角度深入理解底层原理。最终进腾讯这块起了很大作用。对AMS/PMS有深入认识,阅读Frameworl源码不下10遍,对其中的大部分细节了然于胸,绘制了流程图,让自己的Android知识架构由点成面。当然,大家可以参考看看。
之后就是覆盖死角,主要从核心面试题出发,我当时找到一份《Android高级面试快速进阶指南》,是一份Github总结的比较精炼的题库,查缺补漏,做到各类知识都能有所涉猎,不至于冷门问题一句话也说不上来**。如果你也有需要PDF高清版的话可以【点击此处即可免费获取】。
三、腾讯面经分享以及面试过程
岗位:Android开发岗位
行程:广州=深圳,单程1个小时,南山车站=腾讯大厦,单程1个小时
吃饭:可以去腾讯食堂,免费吃,只要人进去,到吃饭时间点就可以蹭饭
面试:一面+二面+三面+HR
面经分享
腾讯音乐一面
- 项目介绍,深挖
- TCP三次握手,以及在此过程中有哪些不安全性?针对这些不安全性的攻击手段?以及防御手段?
- View Group自定义绘制的流程
- 长连接建立连接的过程
- Android应用的启动流程
- Handler机制
- 如何处理一张比较大的Bitmap
- 如何压缩Bitmap
- 算法题“{}【】()”优先级,字符串是否合法
腾讯音乐二面
- 如何判断一个链表是否有环
- LiveData是如何实现的,优缺点
- 进程与线程的区别
- 线程锁,可重入锁
- synchronized Look 区别
- 虚拟构函数
- Handler Looper Message联系与区别
- Message为啥用链表,不用数组
- 死锁的原因,避免死锁的方法
- 如何减少哈希冲突
- hashmap的链表叫什么?拉链法
- 野指针
- Gc垃圾回收算法有哪些,分别是什么?它的实现原理
- Gc Roots
- avitivity的启动流程
- memcpy strcpy效率对比
- 多态的实现原理
腾讯音乐三面
- RecyclerView缓存原理、和ListView的对比、Adapter如何适配多种layout
- LRUCache原理
- 图片加载原理
- Glide源码解析,三级缓存
- Retrofit动态代理 & 注解解析
- GPU调试绘制 和 GPU呈现模式分析
- MVC MVP MVVM原理和区别、优劣势、以及在项目中是如何应用的?
- 手写一个简易的EventBus,并说出EventBus的实现原理
- Binder机制及底层实现
总结
上面就是刘哥在腾讯面试的整个过程了,最后还给大家提几个小建议:
- 对简历上的内容一定要有把握,不要给自己挖坑;
- 面试遇到不熟的内容,简单介绍下自己的认识,承认了解有限,不要硬着头皮瞎说;
- 尽量通过亮点项目和准备充分的问题体现自己的价值,也可以通过这些内容引导面试官问自己擅长的领域;
- 常见非技术问题有所准备,不至于当场抓瞎;
- 算法数据结构要有准备,大厂面试基本上要手写code。
最后,需要文章中所分享的《Android高级面试快速进阶指南》以及一些面试常备PDF的朋友可以“【点击此处即可免费获取】”。