关于程序员面试
如果说求职是人生的一座山,那面试就是最难跨越的一道沟。有时候好不容易被通知去面试,结果被面试官虐得体无完肤,还有很多技术精湛、经验丰富的求职者屡次在面试环节被拒,一直没能拿到心仪的大厂高薪offer。
说实话,面试中 7 分靠能力,3 分靠技能。那如何巧妙地回答面试官的问题?如何回答技术性的问题?如何解决求职中的时间冲突问题?如何应对自己不会回答的问题?
最主要的是如何去准备面试,在面试中展示自己的优势。
现在多数朋友都存在这样一个问题:缺乏对自身面试能力的正确认知,现实中的面试得不到反馈,幸运的求职者靠多场面试摸索出了规律,但绝大多数的人依旧对面试很迷糊,浪费了不少时间和成本。
为解决这些难题,给大家分享一份大厂Android面试锦囊!
下面先给大家分享一些我工作几年以来面试过后整理的一些面试已经Android进阶路上的重难点:
Android 进阶/面试 重难点
记得我大二时“不务正业”地自学Android并跟了老师做项目,到大三开始在目前的公司实习,至今毕业4年有多,学习Android已经有6年多了!但总感觉知识点很零散,并且不够深入,遇到瓶颈,所以有了这些整理。
接下来是我对自身的Android编程技能的总结、思考和反省,意在系统地、深入地学习Android的重难点,使自己的能力上一个台阶。
下面我将会罗列Android知识体系中比较高频、重要或难懂的知识点,并未来会基于此文章列出的知识点一个一个学习研究,并写成一系列的文章,当做自己的学习总结笔记,也希望童鞋们和我一起学习和交流~
说明:本文不是面试经验谈,而是自我总结。我也不打算像网上很多文章那样只列出点,说出结果,而没说原因,然后死记硬背,知其所以然而不知其然。而我是打算对下面的知识点深入学习,并对每个知识点从源码或举例来写成文章,从而即知其然又知其所以然。我也不知能否做到,但我会坚持努力,当作立个flag吧~
Java
- 集合:使用场景、源码阅读
- 高手不得不知的Java集合List的细节
- GC机制
- 虚拟机
- 对象内存分配
要学好Android,必须要有扎实的Java基础(当然,现在还有Kotlin)。这里只列出了四点,但Java的体系非常庞大,重难点当然不只这些,列出来的是在实际项目和面试中常用或常见的。
Android常用/重要类
- Activity
- Handler
- HandlerThread
- AsyncTask
- Binder
Android这几个类在编程时是比较高频使用的,所以我打算细读下这几个类的源码。而这几个类也是面试经常被问到的,如Activity启动流程、Binder通信原理等等,所以非常有阅读价值!
Android基础技术和高频面试知识点
- View事件传递
- View绘制流程
- SurfaceView的使用
- IntentService替换Service的场景
- Service保活
- Android序列化方式和区别
这些知识点算是比较基础的,但也很重要!可惜在实际项目中很少用到,所以经常会忘了这些知识。所以打算把其写成文章,加深自己印象。
NDK和JNI
说起这个我就头疼,相信很多人跟我一样,如果只是调用C层接口还好,如果要写C的代码,就很尴尬了。但我们不能总是逃避困难,而是迎难而上!所以我下定决心来跨过心里的这道坎了!
算法与数据结构
- 队列、栈、链表、有向图
- 排序
- 查找
- 红黑树
在家的几本算法书都满是灰了… 罗列的点不难,算是需要基本掌握的吧,但我总是看了忘了,忘了又看,还是记不得… 所以也打算写文章增强记忆。另外,如果做应用级别的开发,掌握这几个知识点基本是够用的了,毕竟Java的集合也提供了排序接口。但还是需要掌握下,毕竟不同算法使用到不同场景。
插件化/热修复
作为Android进阶必掌握的技能,这个不会都不好意思说自己的Android开发的。之前看了一个月RePlugin的源码,感觉道行还不够。很多代码的处理或适配看得似懂非懂,如Binder的机制等。所以这个需要大量的知识作为支撑才能完成看懂,未来再战!
第三方优秀开源库
- RxJava
- Glide
- OKHttp
“RTFSC (Read The F**king Source Code )”。每个人都有自己的编程风格,如果不借鉴、不参考下别人的代码,眼界永远这么小,难以进一步提升编程境界。所以阅读他人优秀的代码是非常有必要的!
Android常见的架构模式
- MVC
- MVP
- MVVM
解耦!解耦!Android的架构模式的使用重中之重无非就是解耦了。开发代码不难,维护代码才是最难的。如果代码都很多的解耦,把维护成本降低,工作效率自然提高。
Gradle和Groovy
相信现在大多数人都用Android Studio开发了,Gradle作为构建工具真是非常强大,个人觉得它完成可以取代Java的编译期注解,有过之而无不及。因为连文件也能在编译期作修改,非常强大,所以也非常值得学习。
通用技能
- TCP/HTTP
- SQL
- 自动化测试
- 抓包
除了Android的知识点意外,还需要掌握一些通用的技能。毕竟懂多点才有底气跟后端怼嘛哈哈。
面试基本思路
我总结了面试的几个基本思路:
- 打好基础,技术不好啥都白搭
- 调整心态,面试其实很看运气,即使你再牛,也很难说百分百能面过某家公司
- 步步为营,先易后难,把小公司、不那么想去的公司放到前面练手 拿 offer 用来抬薪
- 及时复盘,总结经验,多多投递
1、打好基础
首先我自己的战线其实很长,我的技术远远谈不上精湛,多数只是用,对原理不了解,但是这次准备的相对比较充分。
把市面上常见的面经、题纲都了解了下,然后逐一学习。
2、调整心态
心态非常重要。我自己的心理承受能力其实很差,而且很容易紧张,但是基本的道理心里还是想清楚了。
首先面试就是在短短的几个小时里判断一个人的技术能力和基本素质,所以其实并没有太准确,很看运气。有时候就算你技术很好,面试官就是跟你不一个频道,也是白搭。所以心里一定要记住这一点,不要计较。
其次不要把目标定的太狭窄,比如非哪里不去。东方不亮西方亮,有时候一个公司不行,不一定是自己的问题,总结总结经验下一场就有可能碰到聊得来的面试官。
不过话又说回来,其实大公司内部也有众多部门,就算你非常想去某个公司,一个部门没面上也有机会面别的部门,我就见过一个老哥面了四次字节跳动,前三次都挂了,然后又被捞起来三次,最终如愿以偿。
所以机会非常多,一次成败不要放在心上,好好准备就行了。
3、步步为营
关于投哪里,我是这么做的:先根据自己的能力,定一个大概的上限,然后根据自己的接受程度,定一个下限,分开层次,从低到高依次投递。前面的过不过的无所谓,反正过了也不去,就当练手了。等手里有几个 offer,并且状态正好,面试也不怕了,掌握不太精确的技术点也补上了,就开始投最终的几个理想公司。以我个人为例,这次是打定主意去互联网公司了,所以就把市面上的大厂按照规模、认可度等等把想去的公司列了个表分了个级别。
另外还投了几个不知名互联网公司练手。随着面试次数增加,面试越来越熟练,技术上也查缺补漏,所以总的来说是越来越顺利的。
4、总结经验继续努力
一两次的失败并不可怕,我之前在最开始的时候面试几个投递的小公司也不太理想,确实打击了一点自己的自信心。但是也有好的方面,我知道了自己薄弱的环节,之前工作用的比较少,没想到面试问得很频繁,于是我赶紧补充这些知识,不说多深入,至少能应对一些简单问题免得面试尴尬。
就这么一路面试下来,自己不会的知识点也会越来越少,熟悉的东西越来越多,跟面试官就能愈加流畅的沟通,面试评价也越来越好。
面试锦囊
面对这么多的公司,每个公司的考察重点都不一样,我们在面试一定要做好充分准备,只有充分地准备好了面试,才可以更有自信地吊打面试官。
Android面试会涉及到很多杂而乱的知识点,所以想要进入大厂,你不仅需要有十分扎实的基本功,还需要有完整的解答逻辑!
这份锦囊里还包含了百度、阿里、腾讯、京东等众多大厂的Android面试真题,详细介绍了各企业的面试重点、解决方案,帮助大家做好面试准备,斩获大厂高薪 offer!
通过这份锦囊,你能收获:
- 了解大厂的面试考核标准,有的放矢地准备面试;
- 掌握一手最新Android面试真题,有针对性地刷题;
- 为自己心仪的公司提前做好准备,面试更有信心。
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
Android学习路线图
首先,对于没有学习方向,知识不体系的人,我把我工作几年整理的学习路线分享给大家,做一个借鉴作用,还不知道怎么学习的人可以直接照着我这个学习路线一个个的去学习,知识不体系的人可以参考下我整理路线的方式,总之希望能够帮到你们!
除了上面的学习路线,还可以额外的配合以下方式学习,效果翻倍~
①看视频进行系统学习
前几年的Crud经历,让我明白自己真的算是菜鸡中的战斗机,也正因为Crud,导致自己技术比较零散,也不够深入不够系统,所以重新进行学习是很有必要的。我差的是系统知识,差的结构框架和思路,所以通过视频来学习,效果更好,也更全面。关于视频学习,个人可以推荐去B站进行学习,B站上有很多学习视频,唯一的缺点就是免费的容易过时。
另外,我自己也珍藏了好几套视频,有需要的我也可以分享给你。
②读源码,看实战笔记,学习大神思路
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
③面试前夕,刷题冲刺
面试的前一周时间内,就可以开始刷题冲刺了。请记住,刷题的时候,技术的优先,算法的看些基本的,比如排序等即可,而智力题,除非是校招,否则一般不怎么会问。
④2020大厂面试高频知识点
- 图片
- 网络和安全机制
- 数据库
- 插件化、模块化、组件化、热修复、增量更新、Gradle
- 架构设计和设计模式
- 性能优化
- Android Framework
- Android优秀三方库源码