个人背景
三非本科学渣一枚,2018年6月某空港学校毕业。从事Android开发已经3年,开发过机顶盒应用,做过手机app,22年年后终于拿到头条蘑菇街百度小米合合信息的offer。
学习路线
学习路线的话我经过这么多弯路以及思考大致总结了一下,不只是学习路线,也是面试准备的思路:
1.首先Java基础很重要,需要花时间对Java中数据结构,Java并发,JVM虚拟机等有比较深入的认知。
2.然后就是Android方面的知识,从四大组件到消息机制,到事件分发等等等。
3.多做项目,前提就是前面两个搞差不多,不然就是照抄代码,根本不理解。
4.Android的一些开源框架原理,学习这些原理可以提高自己对整个架构的理解,对设计模式的理解。
5.操作系统,计算机网络。Android岗位来说这部分内容其实是比较少的,应对面试的话0基础一周也能学会。当然这里是针对应届生校招哈,之后要进阶的话可能还要对Linux有一定的了解。开发设计网络框架的话也要对网络很熟悉。
6.每天做一道算法题,首先剑指offer全文背诵理解,然后再搞其他的。这个东西主要是保持手感,说实话感觉对算法题的理解要是不到一种境界,面试手撕代码都是运气占比比较大,面试官问一个你见过的,10秒思路就想起来了,没见过的五分钟不见得有思路。
学习大致路线就是这六点,关于第二点补充几本书,按顺序看即可,期间根据能力做项目拓宽眼界。《第一行代码》+入门级项目熟练掌握基础组件+《Android开发权威指南》+接触Handler,IPC的项目+《开发艺术探索》《Andriod群英传》+自学RecyclerView(需要很全面,因为很重要),MVVM、MVP架构思想,视频以及Camera等;虽然还是会有些跳跃,最后我也会尽量详细地放在简书上,供大家参考。
说来Andriod的学习并不容易,因为总体来说相较于其他的各个方向,Android的学习资源是比较散的,成体系的书比较少,每一本书之间都有较大的跨度,所以学习Android需要花费的工夫是比较大的,大家坚持就是胜利啊!
面经真题
接下来就到了大家最喜欢的面经环节,因为面试公司太多了我就不按公司分类了,直接按照我的笔记顺序从基础到进阶地给大家过一遍。
还是先说一下面试技巧,首先,下面的这些问题都搞明白,搞得清清楚楚,最好每个问题都有逐字稿。
然后就是心态要好,不管面试回答得怎么样,保持happy,不会的话也不要慌张,就当是一场梦,醒了很久还是很感动就完事儿了。说不定你今天很阳光,没说上也很阳光保持求知,给面试官留下好印象,另一个大兄弟没说上但是慌慌张张的,整个后半场都发挥不好了,你不就过了嘛。
其实大家都是人,招人也不是只看技术的,技术过关然后性格好对胃口,有一种可以以后做朋友的感觉,哪怕你技术没那么全面但是很开朗阳光,和一个极度内向或者傲气的大牛比较的话我觉得都有很大机会。
好了话不多说开始查漏补缺:
首先,Java方面的话一定要全面,各种数据结构,语言特性,并发操作都要熟悉,而且不仅要会用,还要看看关键源码理解原理。JVM也要理解,因为Android的虚拟机其实和JVM很相似,所以开发中很多技术比如热更新之类的都和JVM中的一些原理很相似。因为Java相关的面试问题实在太多太广了我就不一一写出来了。后续会上传相关所有的内容。
Android相关:
- 四大组件,背的滚瓜烂熟先,然后注意启动模式以及场景,四大组件需要非常全面的理解。
- 消息机制:必问!handler原理以及里面的各种小细节,这个点可以说问的问题太多了,你想象不到的问题
- 事件分发机制,各种情况下的传递和返回。
- 滑动冲突
- 各种Layout差别,性能差别,特性差别
- RecyclerView 这玩意儿太重要了铁子们,关于这个东西的缓存机制,分段加载,等等问的非常多,直接就能看出来你的实战经验丰不丰富
- AsyncTask
- HandlerThread,IntentService
- LruCache:这里就可以引入LinkedHashMap
- Activity、Window、DecorView、ViewRootImpl、AMS ...这些个东西之间的关系,一定要捋清楚。
- View的Measure,Layout,Draw。这部分内容概念很简单,但是面试不会问你简单的概念,都是通过场景来问你怎么处理,所以结合一定的实践需要深刻理解。
- IPC通信方法以及Binder机制 重中之重 基本必问,内容很多,大家自行选择学习方法。
- Bitmap压缩
- 动画 动画这部分也是看你有没有实战过的常问问题,被问了几次都不是常规的概念问题。
- dp sp px
- sharePreferences
Android进阶相关:
- Android多线程端点续传
- 全局异常捕获过吗,怎么搞的
- MVC,MVP,MVVM
- Binder原理,架构
- Activity启动流程
- 内存泄漏优化,布局优化
- 组件化,热修复热更新原理
- 权限机制
- RequestLayout/Invalidate区别
- LayoutInflater
- 框架原理:okhttp,Retrofit,Glide,Arouter
计算机网络以及操作系统:
- 网络分层
- tcp、udp 重点 常问
- http、https 重点 常问
- DNS 常问 以及各层的常用协议
- 线程进程 重点,包括区别,通信等等
- 内存管理
- 死锁,异步同步等概念
常见的问题就这么多,主要针对今年要参加秋招和明年春招的想要从事Android开发的学弟学妹们参考,其他就是平常对一些三方库的使用和原理的理解以及三方库中整个架构的设计和使用的设计模式以及思想,需要多多积累。
大家也都知道最近大环境不好,找工作属实不易,要求也越来越高,但是干这行就得时刻保持学习的状态,既然选了就尽量奥力给。
那么就说这么多,各位加油,江湖见!祝大家都能拿到自己心仪的offer~
面试前的复习路线
多余的话就不讲了,接下来将分享面试的一个复习路线,如果你也在准备面试但是不知道怎么高效复习,可以参考一下我的复习路线,有任何问题也欢迎一起互相交流,加油吧!
接下来给大家提供一个方向,进行体系化的学习:
总共分为6个部分:
- Java 基础(★★)
- Java 高级(★★)
- Android 基础(★★★)
- Android 高级(★★★)
- Android 项目(★★★)
- 项目面试常见问题(★★★)
一、Java 基础(★★)
- 面向对象思想
- 多态
- 异常处理
- 数据类型
- Java 的 IO
- 集合
- Java 多线程
Java 高级(★★)
- Java 中的反射
- Java 中的动态代理
- Java 中的设计模式&回收机制
- Java 的类加载器
Android 基础(★★★)
- Android 基本常识
- Activity
- Service
- BroadCastReceiver
- ContentProvider&数据库
- Android 中的布局
- ListView
- JNI & NDK
- Android 中的网络访问
- Intent
- Fragment
Android 高级(★★★)
- Android 性能优化
- Android 屏幕适配
- AIDL
- 自定义控件
- Android 中的事件处理
- Android 签名
- Android 中的动画
- 网络协议
- 其他
项目面试常见问题(★★★)
- 开发周期
- 项目中遇到的难题
- 项目中最大的收获
- 项目是如何上线的
- 项目是如何盈利的
- 绘制项目架构图
- 项目开发流程
- 你在项目中的角色
- 你负责项目中的哪些模块
- 讲讲你负责模块的具体实现
- 项目中都用到了哪些第三发框架
- 有没有自己写过框架
- 业余时间你是如何提高自己(学习)的
- 有没有自己的技术 blog
- 你的职业规划
- 为什么离职
- 为什么选择我们公司
- 说说你们项目的亮点和不足
- 你们的项目是如何保持风格一致的
- 项目架构是如何搭建的
- 屏幕适配是如何解决的
- 都看过哪些源码
- 项目版本是如何升级的
- 用的什么版本控制工具
- 你能独立开发吗
- App 跟服务器是如何交互的
- 需求文档写过吗
- 接口文档写过吗
- 云服务器都用过哪些
- 第三方平台都用过哪些
简历+社招解答+经典HR面试解析
以上是整理总结的Android中高级面试遇到的真题解析,希望对大家有帮助;同时很多人经常也会遇到很多关于简历制作,职业困惑、HR经典面试问题回答等有关面试的问题。同样我也搜集整理了全套简历制作、金三银四社招困惑、HR面试等问题解析,有疑问,可以提供专业的解答。
Android源码解析
“编程语言是程序员的表达的方式,而架构是程序员对世界的认知”。所以,程序员要想快速认知并学习架构,读源码是必不可少的。阅读源码,是解决问题 + 理解事物,更重要的:看到源码背后的想法;程序员说:读万行源码,行万种实践。
主要内含微信 MMKV 源码、AsyncTask 源码、Volley 源码、Retrofit源码、OkHttp 源码等等。
对于Android开发的朋友来说应该是最全面最完整的面试资料,为了更好地整理每个模块,我参考了很多网上的优质博文和项目,力求不漏掉每一个知识点。很多朋友靠着这些内容进行复习,拿到了BATJ等大厂的offer,这个资料也已经帮助了很多的安卓开发者,希望也能帮助到你。
以上内容均免费分享给大家,需要完整版的朋友,点这里可以看到全部内容