先说说我是如何展开面试复习的,主要是按照以下的四大类展开的:
1. 安卓基础知识 2.JAVA基础知识 3.算法和数据结构 4.职业发展规划相关问题
First:
1.Activity 任务栈和 4 种启动模式关联性问题
2.IPC 非常重要,想要达到中级和高级的水平就必须要读懂,跨进程几种方式必须了解 Binder肯定是必问的,当然还有 AIDL
-
3.自定义 View 的 draw measure layout 过程,事件的分发,拦截,处理,处理滑动冲突的思路,view滑动的几种方式
-
4.动画的几种实现方式
-
5.Window 在 Android 里的作用。它和 Activity 和 View 的关系
-
6.四大组件的工作过程,这个确实有难度,按自己能力钻研吧,也别陷的太深 但是,四大组件的使用方式必须会,Service 的启动和绑定,广播的使用方法,写个简单 ContentProvider 这些都是必须的
-
7.Looper,Handler,MessageQueue 的关系
-
8.主线程为什么是主线程,如何开启线程,线程池和安卓常用的四种线程池 他们的特点和使用场景
-
9.AsyncTask 原理,并发问题,缺点等
-
10.如何面对大的 bitmap,如何自己设计一个 ImageLoader
-
其实可以扩展为,如何设计一个 okhttp,如何设计一个 retrofit,eventBus 等等
-
其实就考察对开源框架的认识和使用的熟练程度
-
-
11.如何避免和处理 Crash 和 ANR
-
12.优化篇,过度绘制,OOM,内存泄漏,布局优化,MAT, Lint
以上几点主要是基于《Android开发艺术之旅》,还有几点额外多准备的:
-
有个问题很常见:你了解过哪些开源框架?
-
okhttp 或者 retrofit 必须了解一下底层原理,即使不能读好源码,也要看看别人是怎么分析的
-
-
如今热更新和插件化特别火,一定要能说出来几种,并简单说明原理
-
MVC MVP MVVM 优缺点,一点要说出自己的切身体会
-
Fragment,生命周期和使用方法
-
Rxjava 尽量也看看
-
注解机制,现在这么多使用注解的框架
Second:
1.修饰符
-
2.类 接口 抽象类 匿名内部类 回调机制
-
3.几种基本类型,长度,边界 从 Iterator 到 Collection,再到 Set List Map(必问)
-
从以下几个角度理解学习:用法,具体实现类,线程安全性,底层数据存储结构,某些场景下如何选用?比如 ArrayList 和 LinkedList 如何选用
-
-
4.线程相关(必问)
5.锁机制 synchronize 用法-
实现一个死锁
-
同步,生产者消费者模型
-
Thread 中的几个常用方法 比如问你 sleep 和 wait 区别
-
线程安全
-
-
6.JVM 了解一些,GC 了解一下,堆和栈的区别等
-
7.静态代理,动态代理 反射
-
8.设计模式 单例模式(要会写),工厂模式,抽象工厂,观察者模式等
以上几点主要是基于《Thinking in Java》这本书以及网上的博文
Third:
-
1.数组,链表,队列,栈,图
-
不会直接问你,会让你找到用处,比如Activity任务栈
-
-
2.算法
-
基本几种排序复杂度和思路
-
几种查找复杂度和思路
-
串的处理
-
算法这块,公认的两本最有效刷题的宝典: 《LeetCode》、《剑指offer》
Last:
主要是以下几个问题:
1.为什么想离职
2.当前项目的强度和自己的角色
3.希望加入个什么样的团队
4.对我们公司的了解
最好提前想一想避免面试时候紧张思路乱,说话没有逻辑。
这次大厂面试的问题:
一面:
-
1.MVP,MVC,MVVM
-
项目里有没有用,缺点是什么,如何改进
-
-
2.ClassLoader 原理
-
3.Binder原理和使用
-
4.Activity 如何显示到屏幕上
-
5.自定义 View 的注意事项
-
6.Retrofit 原理
-
7.okhttp 连接池如何维护的
-
8.MAT 如何使用,能干什么
-
9.注解如何使用,编译时和运行时注解的区别
-
10.有没有了解过热修复
-
11.Map 的实现类和数据结构
-
12.内存泄漏如何检测
-
13.如何避免过度绘制
-
14.锁机制
二面:
-
1.List 的实现类和优缺点,他们是否线程安全
-
2.如何设计一个优秀的 SDK,如何让 SDK 适应业务模式的变化。
-
3.在纸上设计一个推送 SDK 或者监控 SDK
-
4.两道算法题
-
考察大量数据排序
-
考察多线程协同意识,和核心线程的利用意识。
-
只要求写思路,伪代码即可
-
-
5.为什么要离职
-
6.是否能接受加班
三面(HR)
-
1.当前项目组结构和项目组中的角色
-
2.为什么离职
-
3.多久能到岗
-
4.当前薪水
-
5.希望薪水
最后的心态篇:
就算暂时不能面过也是对自己能力的一种提升,所以始终要抱着学习的心态来面对生活。