第一次面大厂就拿到了腾讯的 offer ,同事笑着骂我是搞 Android 的“狗托”......(含面经总结)

一、 前言

现在是2021年的4月,现在很多程序员朋友们都在为面试做准备;相信大部分程序员们都以进入大厂的目标,因为这样可以实现财务自由,追逐自己的职业理想。

  • 如果是已经拿到心仪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机制及底层实现

总结

上面就是刘哥在腾讯面试的整个过程了,最后还给大家提几个小建议:

  1. 对简历上的内容一定要有把握,不要给自己挖坑;
  2. 面试遇到不熟的内容,简单介绍下自己的认识,承认了解有限,不要硬着头皮瞎说;
  3. 尽量通过亮点项目和准备充分的问题体现自己的价值,也可以通过这些内容引导面试官问自己擅长的领域;
  4. 常见非技术问题有所准备,不至于当场抓瞎;
  5. 算法数据结构要有准备,大厂面试基本上要手写code。

最后,需要文章中所分享的《Android高级面试快速进阶指南》以及一些面试常备PDF的朋友可以点击此处即可免费获取

推荐阅读更多精彩内容