废话留在结尾了。以下括号内有的是细分问题,有的是关键点。(注:我简历上有写源码okhttp、Retrofit、Glide、Eventbus、Arouter。)
一、作业帮:
1面:
1、Https握手过程(CA验证、哪些是对称加密、哪些非对称加密,ssl包含哪些内容);
2、Binder机制及优势(IO在哪个线程?Client在调用线程,Server在binder线程);
3、Okhttp超时机制(Socket、读写超时、execute时开启的看门狗);
4、Launcher启动app流程(Broadcast、Service等相似过程);
5、Handler机制(包括同步屏障、epoll与select区别);
6、ListView和RecyclerView的区别(item动画、布局、diff、缓存);
7、类的初始化过程(父:静态变量>静态代码块 > 子:静态变量>静态代码块 > 父:成员变量>构造代码块>构造函数 > 子成员:成员变量>构造代码块>构造函数);
8、线程池原理、线程池参数含义及四大线程池[拒绝策略];
9、kotlin协程、by lazy的实现、扩展函数原理、let、apply、with等高阶函数;
10、代码手写题:反转链表[开发必须会的题]、观察者模式。
2面:
1、LocalBroadcast原理(map的key为action);
2、异步通信:AsyncTask、HanderThread原理、IntentService等;
3、Leakcanary原理,注意ReferenceQueue的作用;
4、有哪些东西不能混淆;
5、MultiDex机制;
6、sp原理,commit与apply的区别;
7、启动优化。
二、我爱我家及其他
1、动画(几种,区别);
2、Https 1.0/2.0区别(常用的为1.1/2.0);
3、Launch流程;
4、kotlin中异步怎么写成同步的(suspend->callback);
5、线程池参数;
6、性能优化;
7、HashMap数据结构(树化及扩容);
8、Arouter实现原理;
9、事件分发机制(责任链);
10、Retrofit原理(动态代理、annotation解析);
11、okhttp拦截器;
12、Handler机制及同步屏障。
三、滴滴
1、kotlin协程作用域【GlobalScope、CoroutineScope、SupervisorScope、runBlocking】区别及使用;
2、LiveData怎么实现生命周期绑定;
3、by lazy实现;
4、优化:启动、包体积、卡顿、网络;
5、webview白屏问题(js是否允许,dom开启、ssl错误允许,http/https混合允许),性能优化;
6、concurrentHashmap对锁的优化;
7、RecyclerView、EditText滑动冲突的解决;
8、kotlin class是final的,可以通过open继承;
9、aqs与cas,cas的缺陷及修补;
10、flutter的局部刷新(父节点边界);
11、算法题:两个栈实现一个队列。
题外话:
简历好好写,拉出几个关键点(有一点点难度的都可以)出来,切忌流水式,否则过初筛的几率都小。
性能优化方面好好准备,好几次问到都感觉没答好。因为这是一个很大的话题,中间很容易插出去。其次,也很容易被面试官或者自己带偏,导致回答不全。
个人优势备选:自定义控件、framework、音视频等(音视频有优势的就是很明显的优势了)。
个人优势最好提前准备一个,以及你遇到的问题也最好提前准备的。其实很多面试问题翻看下源码就知道原理了,但是可惜的是现在的面试都是闭卷,即使很简单也不会让你翻源码,所以该背还得背,这大概就是我辈程序员的一个悲剧吧。
有些问题其实都碰见过但是没有回答好,或者当时没有回答上来,这个只能靠自己积累了。
一定要注意一点:中高级对细节问的尤其多。
关于算法题:leetcode的剑指offer简单题必须会,中级题最好有所熟练,困难题可以直接放弃(这种基本都是不想要人的)。
最后:面试不等于技术水平,不必太过在意结果,但是一定要做好复盘,不要在重复的问题上翻船。
寄语初、中级Android Developer的一点心得:找工作千万别迁就,否则不仅进步缓慢,还会工资低(收入和付出不成正比)。创业公司和外包大部分都是坑,再怎么急也勿跳。没事备点钱,裁员随时会来,找好工作需要花更多的时间。没事的时候可以学习更多的技术,但是已经不推荐任何新手入坑Android了。中高级的炒点股吧,你会发现韭菜可能说的是人,也是中高级的一条退路,但不是最推荐的。其它废话以后有机会再说吧。