计划更新博客,结果到现在因为一直在找工作,一篇没写(懒),不过因为这次机会确实太难得了,不得不记录一下
面试机会是在 boss 直聘上,有个头条小哥哥勾搭我投简历,我当时精虫上脑,就投了,所以稀里糊涂就有这次的面试了,因为我在大连,所以两轮面试都是视频面试,答案我就写个思路(大雾) ps.技术问题顺序可能不太准,我记不太住了
一面:
1. 介绍下自己
思路: 面试官好,我是开发经验两年半的靓坤,喜欢唱,跳,rap 和 篮球。
3. 描述下当前项目,然后根据你的描述问一些项目上的实现方法。
思路:我当时说了下现在做的视频播放模块,他就问了视频编解码等问题
4. 描述下 handler 机制
思路:四大类 :Message,MessageQueue,Looper,Handler,流程讲清楚就好
5. ThreadLocal 原理是什么?
思路:老生常谈的问题,ThreadLocalMap
6. volatile 关键字
思路:当时回答了下 volatile 保证可见性,顺序性,不保证原子性,讲了下原理
7. 网络访问的流程,比如给你一个 url ,怎么就访问到了服务器?
思路:刚开始没明白面试官啥意思,后来明白了,他想听网络传输的流程,比如先 DNS 解析出 ip,然后 TCP 三次握手之类的,这个没整上来,***,极客时间课算是白买了
8. 详细说下 TCP 三次握手和四次挥手
思路:这个详细的意思就是具体到流程,比如 SYN,ACK 的传递啊,客户端服务器状态的改变啊之类的,不过老子不会
9. 用过什么网络框架?
思路:我说的 okHttp 和 Retrofit,我就知道你给我挖坑呢
10. 介绍下 Retrofit 原理
思路:动态代理就完了
11. OkHttp 的流程能说下吗?
思路:责任链,几个重要的拦截器作用瞎白话呗,我都不知道自己说的啥
12. OkHttp 的拦截器可以自定义吗?有哪些种类和区别?
思路:addInterceptor() 和 addNetInterceptor()
13. 在 OkHttp 中,如果我连续添加了多个拦截器,那么拦截请求的时候,谁会先被调用?拦截响应呢?
思路:就是说连续 add 了两个拦截器,A,B,具体如下:
public class AInterceptor implements Interceptor {
@Override
public Response intercept(Chain chain) throws IOException {
Log.d("lpy","A 拦截请求");
Response response = chain.proceed(chain.request());
Log.d("lpy","A 拦截响应");
return response;
}
}
public class BInterceptor implements Interceptor {
@NonNull
@Override
public Response intercept(@NonNull Chain chain) throws IOException {
Log.d("lpy","B 拦截请求");
Response response = chain.proceed(chain.request());
Log.d("lpy","B 拦截响应");
return response;
}
}
log 应该是 :
A 拦截请求
B 拦截请求
B 拦截响应
A 拦截响应
14. 事件分发机制大概讲一下,onTouch 和 onTouchEvent 关系?子 View 能否控制父 View 的事件分发
思路:这个也算基础了,多看看技术探索
15. 如果 ViewGroup 的 Down 事件不拦截,子 View 也成功消费了,那么 MOVE 事件来的时候被 ViewGroup 拦截了,此时子 View 还会收到 MOVE 事件和 UP事件吗?
思路:这块有坑,当时没整上来,事后按照题目的意思试了下,会触发 CANCEL 事件,具体 log 如下:
[父] dispatchTouchEvent 0
[父] onInterceptTouchEvent 0
[子] dispatchTouchEvent 0
[子] onTouchEvent 0 return true
[父] dispatchTouchEvent 2
[父] onInterceptTouchEvent 2
[父] 拦截!!!
[子] dispatchTouchEvent 3
[子] onTouchEvent 3 return true
[父] dispatchTouchEvent 2
[父] onTouchEvent 2 return true
[父] dispatchTouchEvent 2
[父] onTouchEvent 2 return true
[父] dispatchTouchEvent 1
[父] onTouchEvent 1 return true
16. 线程池的原理?核心线程和非核心线程都是干啥的?ThreadPoolExecutor,Executors,ExecutorService 这三者的区别能说一下吗?
思路:艺术探索看一遍
17. 算法题,有个圆桌,坐着 n 个人,用 1 ~ n 表示,第一个人开始报数,数到 3 的人离开圆桌,然后第 4 个人接着从 1 开始报数,重复上述规则,要求写算法求出离开圆桌的人的顺序
eg. 输入 7,输出 3 6 2 7 5
思路:我因为不会啊,所以我就跟他说我的思路争取一下,我说我想用一个循环链表模拟圆桌,开一个循环,每到 3 踢出去一个人,然后面试官寻思这孩子太 tm 菜了,就让我写一个链表删除某一节点的代码…wocao这也没复习啊,还好写出来了…口吐芬芳…
等了 10 分钟…
STAND BY COMMANDER
二面:
我是一面完事马上就二面的,二面难度感觉就比一面高一些
1. 说一下 fragment 和 view 的区别?能不能用 fragment 替代 view?
思路:我上来就被整蒙了,没寻思过这俩玩意还能给我下绊
2. 那么 fragment 和 activity 有什么区别?能否用 fragment 取代 activity?为什么在有了 activity 的情况下还要有 fragment?fragment 有什么优势吗?
思路:…咱能不说 fragment 了么
3. 说一下安卓有哪几种动画?转场动画了解过吗?怎么用?原理是什么?
思路:专场动画原理?不会也不想看
4. 打包的时候怎么操作的?有没有尝试过编写一些脚本辅助打包?
思路:大神我真不会
5. apk 文件包含什么?他的目录结构是怎么样的?每个文件或文件夹有什么作用?
思路:到这为止我一个会的都没有…我只能靠印象回答你了
6. 聊一聊 HashMap,它的原理?扩容是怎么扩的,原先的数据怎么放在扩容以后的数组上?为什么扩容要乘以 2 ?或者说保持长度是 2 的幂有什么好处?除了 HashMap 处理 hash 冲突的方式外,还有其他的方式吗?
思路:大厂必备面试技能
7. java 有哪几种锁?synchronized 修饰静态方法和普通方法有什么区别?
思路:我说了很多,什么重量级锁轻量级锁自旋锁悲观锁乐观锁… synchronized 就是考察类锁和对象锁区别
8. 有一种场景实现以下:Thread 1 和 Thread 2,要求 Thread 1 和 Thread 2 同时执行,在他俩都执行完后,执行 Thread 3,请写出代码。
思路:这个我先回答了 join 方法,他说 join 会阻塞主线程,我又说 wait notify,他说这个也会阻塞还有没有别的?我就真不会了…
9. 刚才提到了 wait notify,那 wait 和 sleep 有啥区别?
思路:java 并发这块,真的是高频考点
10. 手写一个生产者消费者(问我这个是因为第 8 题没答上来吧…)
思路:哈哈哈我 tm 竟然写上来了!!!
11. java 泛型了解过吧,他是咋实现的?引入泛型有什么优点?不用泛型不行吗?
思路:O__O "…满脑袋就想起来谁跟我说过泛型擦除,别的啥也不知道
12. 平时接触过性能优化吗?说说怎么弄的?
思路:我说布局优化,内存优化啥的行么,他就让我细说一下
13. 热修复插件化了解过吗
思路:我是谁我在哪我在干什么为什么问我这种问题我还是个孩子
14. final 关键字修饰变量,方法,类分别有什么作用?
思路:这个就没什么意思了,我妈妈胎教就教我了
15. 静态内部类 和 非静态内部类有什么区别?在其他类中怎么调用两个内部类的方法?
思路:这种问题也拿来问我?有能耐别整这三岁的,给我整个四岁滴
16. OOM 处理过吧?咋处理的?都有哪些常见引发 OOM 的情景?
思路:一般交给领导处理
17. ANR 遇到过把,怎么处理?除了 trace 文件,还有其他的方法吗?
思路:???我发明了斧子去砍树,你说不用斧子怎么砍树,我说你手撕就行
18. 写个算法吧,有一个长度为 n 的数组,其中随意充满了正数和负数,问:如果有某个连续片段相加和最大,那么输出此最大值。例如 { 1, -4, 9, -1, -2, 7},因为 { 9, -1, -2, 7 } 相加和最大,所以输出 13
思路:小题儿…
到这儿就没了,不管怎么滴,能过二面已经是我人生巅峰了,我一个外包选手, 3 年不到经验,进公司才学安卓的纯素馅大饼子(为啥是素馅的?因为菜)连蔡徐坤都比我强,能发挥出来已经很满意啦,知足常乐,不管结果怎么样,好好生活就好了。
不要问我为啥不写答案,因为如果你看了题不会,那我写答案你也理解不了,不如踏实去看书去翻博客,如果你会,自己心里就有答案了,我又何必多此一举(其实是我太累了不想写)