开篇!如何准备面试?
前言
在笔者面试这一个月,看了不少文章,也关注了不少付费课,但真正有深度,适合4年及以上Android高工的内容少之又少
在面试准备阶段,笔者准备了两周的时间,结合相关资料及源码,完成了一系列的深度学习和输出
-
在系统源码层面,包括系统启动,应用启动,四大组件相关,插件化等;
-
在并发方面,完成了
ConcurrentHashmap
,CopyOnWriteArrayList
,CountDownLatch
等相关源码剖析,及线程协作相关内容输出 -
在插件化方面,完成了插件化整体方案的总结和输出,及
VirtualApk
核心源码分析;具体内容请查看 http://yilin.fun
面试准备技巧
如果说面试准备有什么技巧的话,笔者的经验是,深度为主,广度为辅
如何提升知识的深度?
针对高开面试来讲,哪怕是最简单的问题(比如老生常谈的Handler)也会有超乎寻常的深度问法,而所谓的深度
, 即对系统源码的理解程度。因此,对源码的研读是十分重要的
我的学习方法论是,输入 + 输出,如果没有输出,第一是会忘,第二是没有办法内化为自己的知识。可能大家都会去看技术文章,但看过两天后,你还会对那些内容印象深刻吗?大多数情况是不会
因此,不论是自己整理笔记也好,还是写文章分享也罢,输出是很必要的,跟别人交流的过程,也是不断内化和成长的过程
在高工面试中,一般会着重考察面试者对技术问题里理解的深度,我的建议是,在几个点上进行深度学习,比如系统源码,插件化等等
在编写简历时,可以将这些内容放在显眼的位置,暗示面试官这是我的强项,一定记得问我!
如何提升知识的广度?
就广度上来讲,其实主要看平时的积累,但是面试的复习也必不可少
内容上来说,包括性能优化
, 多线程并发
, JVM虚拟机相关
, 算法问题
, 设计模式
,网络相关知识
,等等;
拿性能优化来讲,从整体方案上来说,有一些比较成熟的开源库可以参考,比如腾讯的Matrix
, 滴滴的Booster
;
针对具体的优化细节,就涉及到相关的开源库及相关原理,可参考的三方库有:
- LeakCanary ,内存泄漏监测
- BlockCanary,UI卡顿监测
- Glide,对Bitmap内存的优化及防止内存泄漏
- Jetpack , 官方支持库 ,避免内存泄漏
- AspectJ , AOP切面编程
不同的岗位方向关注的侧重点也会有些不同,我们在后面的分享中也会涉及到
在大厂的面试中,也有一些面试官(尤其是一面的时候)会拿一些常见的面试题来进行考察,比如UI绘制
, 自定义view
,触摸事件分发
等高频考点也应该着重复习和掌握
因此,如果没有面试准备方向,找一份面试题集锦来进行热身复习也可以
笔者在面试期间做了一张复习表格,在此也贴出来供大家参考
准备项 | 详细内容 | 是否完成 |
---|---|---|
更新简历 | 简历项目及技术点准备 | ✅ |
常见面试题目刷题 | Java部分 | ✅ |
Android部分 | ✅ | |
系统源码专题学习 | 系统启动流程 | ✅ |
应用启动流程 | ✅ | |
Activity启动流程 | ✅ | |
Service启动/绑定流程 | ✅ | |
广播收发流程 | ✅ | |
屏幕刷新机制 | ||
hanlder消息机制 | ✅ | |
binder流程及原理 | ||
性能优化专题 | 内存优化 | bitmap加载流程 |
卡顿优化 | ||
UI卡顿及监测工具 | ✅ | |
线程安全相关 | ||
Jvm相关知识 | ||
算法练习 | 高频算法练习 | 排序算法:归排,快排 ✅ |
插件化 | 类加载 | 四大组件插件化 ✅ |
资源加载 | 资源插件化 ✅ | |
如何准备算法面试?
什么是算法面试?
算法是大厂考察的非常重要的一项
某些公司甚至会将是否正确的写出算法题目作为面试通过的最低门槛(也就是算法挂掉意味着面试挂掉,某手属于此类)
比较灵活一些的公司会对算法思想及代码细节进行考察,比如边界判断,循环终止或递归终止条件的处理,对指针/变量的维护等(某条属于此类)
因此,我们准备算法面试的目的,是要向面试官展示自己的代码编写能力和逻辑思考能力,并不一定要刷完leetcode的所有题目
如何准备算法面试?
在准备算法面试中,我基本上参考了两个付费内容,bobo老师的算法课(慕课网)及谭超老师的算法训练营(极客时间)
bobo老师强调对算法思想的理解,以及跟面试官的沟通,在面试中展示自己的算法思维;
谭超老师强调刻意练习
(这也是混沌大学所强调的),即不断的重复练习从而形成肌肉记忆;
在真正准备算法的过程中,这两种方式我也是结合来使用的:
- 针对高频算法题目进行刻意练习,培养自己写算法的手感(高频算法题链接https://www.nowcoder.com/activity/oj);
- 针对经典算法思想和解法(比如双指针,快慢指针,哨兵节点,链表穿针引线,深度优先,广度优先,递归算法等)进行整理和理解
以笔者的经验来看,刷3遍高频算法面试题足以应对一众互联网大厂,因此算法虽然很重要,但要适度
,我们需要在有限的时间内获取最大的面试收益
面试准备期多久比较合适?
先说结论,两周比较合适
按照笔者给自己制定的计划,是要在两周之内完成面试准备加简历编写,到第三周的时候开始投简历面试
另外,制定deadLine
是非常必要的,尤其针对裸辞的同学(比如我),在准备面试的过程中,尤其是分析源码的过程中,会发现其中涉及大量细节和自己曾经不了解的知识,因此这也是输出的必要性,写成文章或者笔记,初步检验自己到底掌握到的什么程度
笔者准备的所有内容,基本上都写成了文章,量化的输出内容也可以更好的检验是否完成了相关准备工作
如果超过了两周,还没有完成,我们也要进入面试阶段了,在投简历和面试阶段我们还有时间可以再继续学习
跟面试官交流的过程,就只是把文字输出转化成语言表达的过程了,哪里有不足再继续准备和学习
最后
面试准备过程中,最好能找到志同道合的小伙伴一起交流,如果你也在准备面试,不妨加入技术群一起交流吧!加 wx: YahahaLtd
,备注Interview_Android
邀请你加入专栏交流群
如果本文对你有帮助,欢迎分享给正在准备面试的朋友
我是释然,我们下期文章再见!