-
态度、沟通和为人都很好
-
2年左右工作经验
-
名校、名企、高学历(加分项)
**由此可见,技术是面试结果的决定因素。**那么到底技术掌握到什么程度才能比较轻松地通过面试呢?说了那么多,好像和Android没有一点关系,下面就开始以Android为例来分析下面试过程所需的技术。
Android面试过程所需要掌握的技术
一场面试都有一个流程,拿Android面试来说,面试内容不可能全是Android问题,里面应该会有编程基础相关的问题。我对Android面试中的问题做了下分类,如下所示:
-
数据结构和算法
-
Java
-
Android
-
设计模式和架构
一般来说,一个Android应用开发岗位是不需要太强的数据结构和算法的,但是这并不意味着候选者可以完全不懂数据结构和算法,所以数据结构和算法大家还是要稍微了解下,由于它不是必须的,所以就算面试过程中回答的不好也没关系,只要后面的Java、Android相关的问题能够完美回答就好。
**接下来主要描述下面试过程中对Android技术的要求。**在我对Android的理解这篇文章中,我对Android的技术类别做了一下划分,如下所示:
对于大部分面试者来说,大家的目标岗位应该是中高级,
中级岗位(T4)需要掌握的知识点是:基本知识点、深入知识点;
高级岗位(T5)需要掌握的知识点是:基本知识点、深入知识点、基本知识点的细节和系统核心机制。
Android面试需要准备内容的大致划分:(括号内为重要程度,最多5颗星)
-
Android相关知识、Java相关知识、设计模式(5)
-
算法、数据结构(5)
-
如何写简历、如何面试(4)
-
项目、比赛获奖(4)
-
操作系统、网络、数据库(3)
细分:
以下细分内容,网络等计算机基础方面还不是很全面,持续更新中。
我会逐步更新各个知识点相关博客或资源,如果需要,建议关注。
Android
-
Context的理解
-
Activity生命周期、启动模式、IntentFilter匹配规则
-
IPC:Serialzable、Parcelable、Binder、Socket
-
View事件体系
-
View绘制流程
-
RemoteViews(不重要)
-
Drawable(不重要)
-
动画、绘图
-
window、wm、wms
-
四大组件启动、工作流程(Activity至少看一下,AMS)
-
消息机制:looper、handler、MQ
-
线程、线程池、多线程
-
bitmap加载、缓存:LRUCache、DiskLruCache、LinkHashMap
-
CrashHandler(一般)
-
multidex(一般)
-
Fragment、Service、SQLite、Webview
-
Android内存泄漏场景及解决方法
-
ANR的原因、解决方法
-
开源库(一般要求看过源码,知道原理):Retrofit、RxAndroid、EventBus、Picasso(优点)、OKhttp3
-
持续集成Jenkins(不重要)
-
单元测试、测试用例(一般)
-
插件化:Atlas、OSGI(一般)
Java
-
Java基础:比如接口和抽象类的区别等
-
Java内存管理:工作内存和主内存等
-
垃圾回收:回收算法、如何判断对象可以回收、新生代老年代等
-
并发
锁:sychronized、lock(CAS);volatile;并发集合:CopyOnWriteArrayList、ConcurrentHashMap、RemoteCallbackList(Android的IPC用到)、LinkedHashMap;
- 集合
Map、Set、List
Queue、Stack
HashMap、HashTable、ConcurrentHashMap:实现原理,区别等
LinkedHashMap
设计模式(六大原则:SOLID + 迪米特)
-
单例模式:获取各种service
-
工厂方法:activity、service(onStart)
-
责任链:Android事件分发
-
builder:dialog、Picasso
-
观察者:listview更新、EventBus
-
适配器:listview adapter
算法、数据结构
排序
-
冒泡排序
-
选择排序
-
归并
-
堆排序
-
插入排序
-
快速排序
-
希尔排序
-
桶排序
-
基数排序
字符匹配:KMP算法
二分查找
二叉树遍历、翻转、重构;二叉查找树
红黑树
AVL树、哈夫曼树、B树(一般)
网络
基本是围绕OSI七层模型展开,首先是各层的功能、每层有哪些协议。
深入主要考察应用层和传输层:
应用层:
-
HTTP报文格式、头部有哪些字段
-
HTTP状态码
-
HTTP和HTTPS的区别
-
HTTPS中SSL/TLS加密的握手过程
-
HTTP一次连接的具体过程
-
GET、POST的区别
-
DNS解析过程
-
Cookie、Session原理
传输层:
-
TCP/IP四层模型(和OSI的层次对应关系)
-
TCP三次握手、四次握手的过程,状态变化和原因
-
TCP、UDP区别
-
TCP拥控、流控原理
-
Socket原理
操作系统、数据库
线程状态及其切换
线程、进程区别
(数据库重要程度相对低一些,正在整理中,后续会更新)
大家结合自己对Android的学习过程以及面试经验,在面试中遇到的问题是不是都是包含在上面的5个分类之中呢?对于1和5相信所有人都没有问题,但是对比2、3、4中的内容,大家是不是都能很好地Cover呢?换句话说,如果2、3、4中的内容大家都能很好地掌握,面试中的问题还能难倒我们吗?在前面的分析中提到,技术是觉得面试是否成功的关键因素,那么在面试前要做的就是把技术搞好,同时注意沟通和态度,这样的话通过面试岂不是很简单的事?
如何逐个突破Android面试中所需的技术
这里主要是指上面2、3和4这三个类别中的技术,说实话,这并不是一件很简单的事。
那么到底如何学习呢?
可以自己去网上找一些博客、书籍,进行各个知识点的突破,要有耐心,找到一个心仪的工作非一日之功。
首先要阅读源码,因为面试中的很多问题需要从源码中找答案。
其次要主动学习平时工作中遇不到的一些技术,由于项目的原因,我们不可能通过公司的项目来解除到Android中所有的重要技术,尤其是一些规模不大的项目来说,这个时候要主动去学习。也许有人要问:”我怎么知道哪些东西是需要主动学习的呢?“这的确是个问题,但是我在前面的分类中做了一些举例,大家可以先尝试学习下那些技术,它们都是很重要且时常在面试中出现的技术问题。
另外学习的过程中要注意积累,比如写博客、记笔记都是可以的,同时在Github上做开源也是不错的选择。
另外,为了更好更快地学习Android面试中所需的技术,大家可以先去阅读一下《Android开发艺术探索》,书中对前面的2、3和4类别中的技术细节做了详细深入的讲解,通过这本书可以达到立竿见影的效果。(而且这本书的内容也很适合面试)
下面我先提出几点重点,是面试官基本必问的问题,请一定要去了解!
-
基础知识 – 四大组件(生命周期,使用场景,如何启动)
-
java基础 – 数据结构,线程,mvc框架
-
通信 – 网络连接(HttpClient,HttpUrlConnetion),Socket
-
数据持久化 – SQLite,SharedPreferences,ContentProvider
-
性能优化 – 布局优化,内存优化,电量优化
-
安全 – 数据加密,代码混淆,WebView/Js调用,https
UI– 动画
- 其他 – JNI,AIDL,Handler,Intent等
开源框架 – Volley,Gilde,RxJava等(简历上写你会的,用过的)
- 拓展 – Android6.0/7.0/8.0特性,kotlin语言,I/O大会
知识系统化
系统化其实就是当你把一整个相关的知识都看过看懂之后,进行总结和建立各模块之间关系的过程。
每个人大脑“操作系统”是由概念和概念之间的联系的过程。系统化一方面可以加深知识的记忆,另一方面提供了另一个角度去理解这些概念,加大了概念的深入程度。
建议多做记录、总结,多在各模块、各学科之间建立联系,抽取统一适用的知识和智慧。
一点建议:
-
别老问寒冬不寒冬?你先问自己技术到位不到位?
-
面试一家公司之前,尽可能的准备充分,上面所有的这些总结都会反馈给猎头,而恰恰同一个猎头推荐的候选人会在同一个问题上翻车!所以,如果是猎头推荐,多问下其他面试者的反馈,相信猎头们不会吝啬的。
-
简历上的除非真精通,不然不要写精通,你写个了解熟悉,然后深入谈下去发现你好像特别熟悉,好感度会提高很多。
-
简历上不会的千万不要写,除非你觉得你今天人品爆表,面试官这个一定不会问!
-
简历上越熟悉越擅长的写在越前面。ok,面试官一般会从一个问题入手,衍生其他问题,越前面越有机会进入你自己熟悉的话题。(至少我是这样)!
-
带上自己得意的作品!带上自己吃饭的家伙,自己项目的代码,你已经赢了一半了。(至少我之前面试就这么干,你要看什么功能?你要实现什么?有什么问题?我当你面解决这个问题。什么?你觉得我说得不对?来来来,咱们直接看源码,主动权在自己手里!)
-
该有的礼貌要有,该低调还是要低调。这个是对极少数人的建议,你技术再好,一副老子天下第一的样子,那不好意思,请另谋高就。
-
做好有自己的积累,github,博客文章,不仅仅能提升自己的写作能力,积累经验,也是面试过程中别人了解你的绝佳途径。
最后平时学习不知道怎么建立体系的,可以参考下我下面提供的面试复习路线:
面试系统复习路线参考
其实,对于学历普通也没有耀眼光环的人来说,进大厂就靠一条,那就是:技术实力。但是很多人在小厂待习惯了,总是用小厂的标准来衡量大厂的要求,屡次面试受挫,于是得出了一个结论:面试造飞机,入职拧螺丝钉。
接下来分享的系统学习资源以详解各大互联网公司的 Android 常见面试题为主线,从面试的角度带你介绍必备知识点,以及该知识点在项目中的实际应用。