-
工作三年,都是小厂,小组最多没超过4个人
-
算法基础一丢丢(翻书‘马冬梅’,合书‘什么梅’)
-
英语水平半文盲
-
有一个自己常年维护的博客,GitHub所有项目加起来有200多个star
-
懂一点应用层方面的音视频编解码知识
如何准备
我是从去年8月接近中旬开始面试的,一直到9月初结束,整个面试周期满打满算有一个月的时间(我是相当于裸辞找工作的)。这次面试采用的策略是以战代练,就是边面边复习。面试的话,主要是朋友内推,Boss和拉勾。但Boss的话,初期不建议把简历可见,我就在这方面吃了苦头(别提了都是泪)。
接下来我将这一个月内我接触的知识点铺展开来,也给大家一点参考,文末也有分享完整详细的Android知识大全PDF。
书籍:《Android开发艺术探索》、《Android进阶之光》、《Android进阶解密》、《图解Http》
书是不能不看的,以上这几本,除了图解Http之外,都要大致读一遍。当然时间可能没那么充裕,所以要跟着目录,挑一些自己的弱项好好复习一下。Http这本书是因为有几家公司面试问到了网络相关的知识,所以我才去阅读的
**算法:**LeetCode,把链表、排序、树标签里所有简单类型的题目练一下手。特别是排序,冒泡、快速、二分、选择、归并一定要达到手写的水平!
**数据结构:**Java的HashMap——7和8的区别、ArrayList、LinkeList。Android的ArrayMap、SparseArray系列。还有阻塞队列ArrayBlockingQueue、LinkedBlockingQueue。HashMap的结构和细节是遇到最多,建议仔细看一下源码,一定要有自己的理解(划重点)。把HashMap如何存储、如何查找。hash碰撞,以及内存利用率这些问题理解一下
**设计模式和架构:**准备一些自己拿手的模式,在网上查一下资料。准备一些套话,关键词耦合,二次修改方便,外部不用关心内部实现
等等。MVC、MVP、MVVM三种,起码要了解两种,并且能清晰明确的说出,两种架构间的优缺点。
我本身经历过一次MVC -> MVP的过渡,所以面试的时候就只提了这两种。MVVM没接触过,就实话实说没搞过,面试官也不会再问。千万不要打肿脸充胖子,没接触过就说不会就可以了。
关键词:
UI逻辑、业务逻辑、不影响对方的前提下修改、逻辑清晰,方便定位
**简历:**这个就8用提了,面试的敲门砖。我的简历也写的不是很好,但因为会一点音视频的知识,所以还是有一点加分项的。简历要注意简洁明了,star法则;诸如:我做了A工作,将效率提高200%、我优化了xxx,把速度优化了10~20倍。1 ~ 2页最佳
最开始写简历的时候,实在不知道该如何动笔。磨磨蹭蹭憋了好几天没整出来。其实这个时候就要平心静气,把自己的思维拔高一点。站在整个项目的角度去细细查看,这个时候就会发现项目中还是有不少亮点的。
**Android基础:**这个就很重要了,当然涉及面也相当广。四大组件,生命周期这个啥都不说了,直接冲就是了,基本都会问到。Handler、View绘制流程、事件分发,这些都是老生常谈。
**Android框架基础:**AMS,Activity的启动过程。Android绘制流程(这个看个人了,因为我简历上写了熟悉Canvas哭,手动狗头)
**Java基础:**多线程、线程池、锁机制,这两个知识点问到的还挺多的。其他的包括,内存区域、内存泄漏、垃圾回收。。。(这些懂个概念即可,不深究)
面试
以上是一些复习的知识点,因为要准备的东西还是蛮多的。所以时间上的安排一定要灵活,我是早上复习Java基础,中午看Android,晚上复习算法和数据结构。有面试的话,就提前去了解一下公司的产品,去官网上冲一冲浪,下个APP玩一下。也算提前给自己一个心理准备。
以下是一些面试题,供给大家参考:
-
RecycleView复用机制
-
RecyclerView的LayoutManager如何布局
-
设计模式:观察者模式
-
APP启动优化
-
注解原理
-
java内存模型
-
内存泄漏处理;可能出现的内存泄漏问题
-
性能优化如何做——
这是一个比较泛的问题,主要从布局分析、绘制分析、内存优化几个大的方面去延伸,如何定位、如何解决,说出自己的理解和经验即可
-
链表和数组比较
-
死锁和多线程——因为自己说秃噜嘴了,提了一句死锁。就被问到了555,好惨。所以
千万别装,不会就别提
-
自定义view。要具体到在onMeasure里怎么处理,onLayout怎么处理
-
矩阵原理,因为我说了我熟悉Canvas
-
事件处理,事件分发。同学们,
这道题基本必问。敲黑板!
-
差值器原理
-
线程池原理,涉及到阻塞队列
-
Kotlin,apply和let区别
-
AS如何检查内存泄漏——考察你的工具使用熟练度
-
canvas的绘制是如何实现的——
硬绘和软绘
-
遇到的印象最深一次的内存问题
-
如何写一套图片加载库——
考验你的综合能力
-
Bitmap的缓存,软引用、Lrucache。recycle如何实现
-
view的post如何实现
-
Fragment和View的区别
-
Http的请求方式,RestFul熟悉吗——网络我基本只知道一些概念
-
linearlayou 和relativelayou性能比较
-
MessageQueue 和message 的创建
-
手写快速排序,手写二分查找
好了,以上就是遇到的一些问题。还有些问题涉及到音视频这方面,因为不具有通用性,我就不提了。
还是那句老话,面试是一个双向考察的过程,面试官考察你,同时你也要考察考察公司。要真是不喜欢的话,工作做得也不开心,当然也不会长久。工作毕竟还是占据了生活中的大部分时间,找一个自己喜欢并愿意投入的工作对自己的成长也好一点。
同时,面试也是一个考察综合能力的地方。不要以为技术上准备的很充分了就万事大吉。在面试的时候,态度、分析问题的能力、自信度、人品这些都决定了你能否拿到offer。
其他细节
面试一般的时间是在两三个小时左右,作为求职者。我们要在这段时间内,将我们的价值展现给面试官和HR。就像推销产品一样,你得站在旁观者的角度思考一下,这个人值不值得我们买入(发offer),他(她)的性格怎么样,人品值得信任吗等等。
学习福利
【Android 详细知识点思维脑图(技能树)】
其实Android开发的知识点就那么多,面试问来问去还是那么点东西。所以面试没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。
虽然 Android 没有前几年火热了,已经过去了会四大组件就能找到高薪职位的时代了。这只能说明 Android 中级以下的岗位饱和了,现在高级工程师还是比较缺少的,很多高级职位给的薪资真的特别高(钱多也不一定能找到合适的),所以努力让自己成为高级工程师才是最重要的。
这里附上上述的面试题相关的几十套字节跳动,京东,小米,腾讯、头条、阿里、美团等公司19年的面试题。把技术点整理成了视频和PDF(实际上比预期多花了不少精力),包含知识脉络 + 诸多细节。
由于篇幅有限,这里以图片的形式给大家展示一小部分。
网上学习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!
习 Android的资料一大堆,但如果学到的知识不成体系,遇到问题时只是浅尝辄止,不再深入研究,那么很难做到真正的技术提升。希望这份系统化的技术体系对大家有一个方向参考。
《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》,点击传送门,即可获取!