从面试无人问津到手握小米、字节跳动等4个offer,我有一份Android面试宝典分享给你!

前言

这篇文章主要是分享今年上半年的面试心得,现已就职于某大厂有三个月了,近期有很多公司均已启动秋招,也祝大家在 2020 的下半年面试顺利,获得理想的offer!

之前找工作的那段时间感想颇多,总结一点面试经验和人生思考分享给大家。

面试题

小米共面试3次
一面,两个面试官(一个我们小组Android的leader,一个是同事),上来先当着他们的面写了一个笔试题(都是很基础的题没啥难度,算法题也就是一个list的反转,但是小米比较注重手写代码的一些细节,所以要考虑好该判空的判空,还有防止越界啥的问题),然后就开始问,90%都在问Java基础(GC的机制,GC算法,内存相关的问的比较多,多线程线程安全问题是如何发生的,HashMap的原理)
二面,主管(全程聊项目,没有问技术相关的了,然后介绍了一下这个部门的工作内容啊之类的。
三面,本来应该有三面,部门领导了解情况。
并最终收获了小米的offer!

小米offer.jpg

字节跳动面试
一面
1:插件化。启动activity的hook方式。taskAffity。
2:okhttp支持HTTP2?http2的功能有哪些?tcp方面拥塞控制?tsl的握手和具体的非对称加密算法。非对称名称
3:handler的post(Runnable)如何实现的。callback,runnable,msg的执行优先级。阻塞是怎么实现的?为什么不会阻塞主线程?
5:求二叉树中两个节点之间的最大距离。
6:206含义,未修改资源是哪个,302含义,301含义
7:多进程通信问题。binder优势。aidl生成的java类细节。多进程遇到哪些问题?
8:动态代理传入的参数都有哪些?非接口的类能实现动态代理吗?ASM的原理
9:Application和Activity在Context的继承树上有何区别?二者使用上有何不同?
10:任意一颗二叉树,求最大节点距离

二面
1:设计一个日志系统。
2:内存泄露的分类。怎么查看内存泄露的问题
3:touch事件源码问题。
4:组件化的问题。module和app之间的区别。moduler通信是如何实现的。
5:native奔溃的日志采集,怎么处理?
6:注解实现一个提示功能:如果int的值大于了3需要提示。

三面
1:介绍下flutter的启动流程
2:介绍下flutter与weex的区别
3:组件化介绍一下
4:webview中与js通信的手段有哪些?
5:介绍下flutter_boost的原理

四面
1:适配器和装饰模式各自特点和使用场景
2:视频编解码是怎么做的
3:三色球排序
也顺利获得字节跳动,月均薪资30+的offer!


字节跳动offer

面试经验

1. 面试方面的一些经验
总共大概面试了八家,基本上每一家都到了终面,4 家给了 offer, 2 家因为薪资超预算没有录用,2 家挂掉。整个面试过程与我所预想的有比较大的差异。

因为疫情原因,今年面试流程比较长,除非现场面试,否则多数要一周多才能给到最终结果。

善用脉脉、看准网等网站了解公司内部情况,某些小公司槽点比较多。有些问题不便在面试中直接问,脉脉、看准网上有不少值得参考的评论,可以帮助大家避免不少坑。然而“尽信不如不信”,有些评价还是需要大家客观看待。

频繁换工作对求职的影响远超你的想象。当你想要离职时,一定要想清楚是什么原因让你不得不离职。即使你想到无数的理由让你离职,请跳出自己的视角,站在一个 hr 的角度重新审视一遍你的离职理由,有些原因你自己觉得很有道理,但从 hr 的角度会有非常不同的理解。总结来说,对于离职原因的陈述既要坦诚又要客观、合理。

对于三年经验的Android开发,算法、基础知识、数据库已经不足以衡量候选人的能力。面试中大部分的时间是在讨论项目经验和对架构的理解。所以要好好整理和反思自己做过的项目(参考 STAR 原则),多看些技术博客。反复研究和提炼以往项目中的架构设计思路。Framework可能涉及到的知识点包括:Android 系统架构、Zygote进程启动过程、SystemServer进程启动过程、Launcher启动过程、WindowManager体系、WindowManager体系、Binder、Handler等。 从每个话题可以多角度切入到不同的领域,全面了解候选人对进程通信机制、常用组件、插件化方案的理解程度。此外高级UI、第三方框架源码理解也是必备的知识技能等。
我整理了面试遇到的一些知识点,并画成了思维导图的形式。方便大家复习。


字节跳动、小米面试总结.png

2. 对职业的一些思考
一定要对自己的职业发展有长远的规划。每次换工作,一定要考虑清楚你想要在新的岗位获得什么。薪资待遇只是次要方面。这点最重要,血的教训!希望大家吸取我的经验!
自律、自省是最重要的品质,无论你在什么公司、从事什么工作。
客观认知自己、客观认知他人。你没有自己想象中那么优秀,也没有自己想象中那么聪明。同样地,别人也未必有你想象中那么优秀和聪明。 一个人的成功是运气、实力和综合素质的结果。
关注自身不足,并切实采取行动去改进。不要懒惰、不要侥幸。每一次侥幸都会给以后的职业发展埋下一个雷。每一个逃避的问题都会在未来某个时刻重新来困扰你。
本来想再跟大家分享一些对人生和 IT 职业的看法与思考,不过改来改去都没办法合理组织自己的语言,不是过于敏感,就是有很大的争议,所以暂时不写了。

小福利:

在当下这个碎片化信息环境的时代,很多资源都可以在网络上找到,只取决于你愿不愿意找或是找的方法对不对了

很多朋友不是没有资料,大多都是有几十上百个G,但是杂乱无章,不知道怎么看从哪看起,甚至是看后就忘

如果大家觉得自己在网上找的资料非常杂乱、不成体系的话,我也分享一套给大家,比较系统,我平常自己也会经常研读。

2020大厂最新Android面试真题解析

image

各个模块学习视频:如数据结构与算法

image

只有系统,有方向的学习,才能在段时间内迅速提高自己的技术。

image
image

这份体系学习笔记,适应人群:
第一,学习知识比较碎片化,没有合理的学习路线与进阶方向。
第二,开发几年,不知道如何进阶更进一步,比较迷茫。
第三,到了合适的年纪,后续不知道该如何发展,转型管理,还是加强技术研究。如果你有需要,我这里恰好有为什么,不来领取!说不定能改变你现在的状态呢!
点赞+评论 简信关键字【666】即可获得!

或直接点击我的GitHub,就可以白嫖啦,记得给文章点个赞哦。