如果你连原理都没掌握好,那这个技术点最好不要写到简历上。
所以,现在做面试准备,对于一些技术点,可以按照以下方式对自己进行考察:
**1.**该库的常见API使用;
**2.**该库在API层级的扩展,比如okhttp可以通过添加拦截器做一些事情;
**3.**该库的原理,可以考虑分哪些模块,每个模块具体行为;
**4.**该库的原理层级的优化,这方面很多优化都是根据特定场景的,从大的面上肯定该库做的已经够好了;
**5.**该库的原理层级扩展,比如修改某个模块替换实现;比如cache模块修改为DiskLruCache等。
一般最少能完成到第三点,最好能够完成第四点。
什么样的程序员是公司所需要的技术人才?就我之前的工作经验来说,一个具有如下特征的Android程序员是公司所需要的:
-
具有本科及以上学历(名校更好)
-
具有2年及以上的工作经验(名企更好)
-
技术扎实,有技术追求和工作激情
-
良好的沟通和协作
在上面的四条中,其中第3条是最为重要的,即技术,技术是决定能否通过面试的最重要最直接的原因。一般来说,越是大公司,其对技术的要求就越高,尽管部分岗位并不需要那么好的技术,但是为了对候选者做出区分,其面试过程仍然会面试一些稍微深入的话题,相信大家都有所体会。
这里做下总结,理想的候选者应该是这样的:
-
扎实的技术功底,有技术追求
-
态度、沟通和为人都很好
-
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的区别
《Android学习笔记总结+最新移动架构视频+大厂安卓面试真题+项目实战源码讲义》
【docs.qq.com/doc/DSkNLaERkbnFoS0ZF】 完整资料开源分享
-
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的学习过程以及面试经验,在面试中遇到的问题是不是都是包含在上面的5个分类之中呢?对于1和5相信所有人都没有问题,但是对比2、3、4中的内容,大家是不是都能很好地Cover呢?换句话说,如果2、3、4中的内容大家都能很好地掌握,面试中的问题还能难倒我们吗?在前面的分析中提到,技术是觉得面试是否成功的关键因素,那么在面试前要做的就是把技术搞好,同时注意沟通和态度,这样的话通过面试岂不是很简单的事?
最后看一下学习需要的所有知识点的思维导图。在刚刚那份学习笔记里包含了下面知识点所有内容!文章里已经展示了部分!如果你正愁这块不知道如何学习或者想提升学习这块知识的学习效率,那么这份学习笔记绝对是你的秘密武器!
[外链图片转存中…(img-8ErSSGQ3-1640329783617)]
本文已被CODING开源项目:《Android学习笔记总结+移动架构视频+大厂面试真题+项目实战源码》收录



