1. 简历打磨
首先不要急着去投递简历,这时候要做的就是知识体系的建立,以及简历的打磨。
简历的技能点一定要是自己能够hold住的,且能够向外延伸的。项目的技术一定要有亮点及可说性的。
上面的xmind记录了简历和面试中需要注意的一些点,这里我强调一点,如果遇到实在没接触到的,你可以和面试官说,这块涉及到我不知道的点了,可以换个话题嘛,或者比如引导到类似话题。比如问你ArrayMap,你可以说面试官我对他的底层不是很了解,但是我能给你介绍下HashMap嘛?相信一般好的面试官都不会拒绝。
再比如如果出算法题,你可以和面试官商量,我算法题还没来得及刷,能否改成排序或者多线程相关的。如果你前面面试还可以的话,这些可能都会被答应。(但是像快手、字节等公司以算法面试著称的,那么你还是乖乖刷算法。由于时间比较紧迫,我刷的算法不多,所以这两个公司不在我前期考虑的范围内。)
2. 知识体系的建立
简历打磨好后,接下来就是知识体系的建立了。这里其实就是把以往的零散知识点汇总起来,比如:
2.1 Java、Kotlin语言(Kotlin语言高级特性、协程及其原理,当你说出协程原理及其相关内容的时候,可能你就高出其他人一部分了)、多线程与并发、同步;
2.2 数据结构比如HashMap、HashTable、集合、SparseArray、ArrayMap、ConcurrentHashMap等等;
2.3 Android中的四大组件、Handler消息机制、虚拟机原理、类加载机制、事件分发机制、View的绘制流程、Binder原理等等;
2.4 架构技术中的Jetpack相关及其原理(这里尤其要注意Lifecycle、LifeData、ViewModel原理)、架构模式(MVC、MVP、MVVM、MVI)、设计模式、工程架构(模块化、组件化、插件化、容器化)、IOC架构;
2.5 性能优化诸如启动速度优化、加载耗时优化、流畅度FPS优化、内存优化、网络优化、包大小瘦身等等(性能优化很多大公司比较看重,可以多看一些相关的实践一下,最好能够有说头的);
2.6 混合架构技术(动态化容器)中的Flutter、RN、小程序、快应用等等,以及手淘目前在用的xml动态下发解析等框架;
2.7 Gradle相关,这块不常被问,但是可以准备一些,比如初始化阶段、配置阶段、执行阶段等;
2.8 最后就是一些三方框架原理了,比如LeakCanary、BlockCanary、ARouter、OKHttp、Retrofit、Glide等
我们在准备这些的时候,可以用xmind来记录这些,一个文件把相关的都放进去,不同类型的通过下方的画布来分割。比如我这里的HashMap就作为一个画布存在:
这样整理之后,我们对此也有个很清晰的了解,并且后续翻阅也比较容易,利于后续记忆。
知识体系建立的后期,很多东西都是能够打通的,比如SparseArray的出现是为了什么?其实是为了解决HashMap空间换时间的一种不利于在手机中使用的数据结构而产生的;比如ArrayMap的出现是为了什么,其实是为了解决SparseArray key只能为int值的弊端。那我们这么一说,是不是面试官包括你都会眼前一亮(哟,小伙子可以啊,就你了。ps:哈哈哈哈)
3. 面试投递
如果时间着急的话,我们可以在第二步知识体系建立的中期去做简历投递。这样我们可以在面试中不断成长与反思,更有利于我们知识体系的建立。
一开始投递公司的时候,不要着急去投递大厂及好的公司。这时候可以来者不拒,因为此时我们开始面试的时候,面试经验或者说体系还没健全,这时候面试大公司基本会GG,所以可以先小公司试试水。我当时是什么公司都会去面,甚至外包、讲师等都会去面。我们可以通过面试这些公司达到面试经验的积攒,再次我们需要看一下外面是什么样的技术以及面试官会注重考察哪些。
4. 面试技巧
4.1 知识延伸
面试官问一个问题的时候,你可以适当往外延伸,这时候你就有别于其他候选人了。比如问你插件化原理的时候,你说完原理以及自己怎么做的后,你可以谈下对插件化未来的思考:插件化需要针对不同版本去做对应的适配工作,这其实是不太友好的,而且谷歌一定会在高版本上做各种各样的限制操作,其实目前很多插件化框架都不再维护了,也正是因为这些原因;接着可以说一下比如像手淘已经开始用xml动态下发解析来取代插件化了,还有谷歌的Andrdoid APP Bundles目前只适用于资源按需下载,未来可能会放开限制来做动态加载这块。整个这样一说,是不是连你都心悦诚服,何况面试官呢?(面试官心想,老子面试这么多人,累的要死,没一个合适的,就你了。哈哈哈)
4.2 知识体系的串联
比如说到内存泄漏的原理啊,然后介绍排查工具Memory Profile,MAT等,最后你可以提一下LeakCanary,然后顺带说一下这个原理;最后你再提一嘴,通过activityLifecycleCallback这种方式其实在Lifecycle中也是这么用的,很多框架内部也是互相借鉴的,这也正是我们学习框架原理的关键。
4.3 优势及项目亮点
这一点针对二面三面尤为重要,尤其三面。优势及项目亮点一定要提前准备好,像我的话,项目亮点我说到了模块化重构,这里一定要想好后续可能会被问到的,比如会遇到什么问题以及解决方案,最好能够加上未来的方向等等。
喜欢本篇博客的简友们,就请来一波点赞,您的每一次关注,将成为我前进的动力,谢谢!