头条安卓面试总结 (2019 / 04)

计划更新博客,结果到现在因为一直在找工作,一篇没写(懒),不过因为这次机会确实太难得了,不得不记录一下

面试机会是在 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 年不到经验,进公司才学安卓的纯素馅大饼子(为啥是素馅的?因为菜)连蔡徐坤都比我强,能发挥出来已经很满意啦,知足常乐,不管结果怎么样,好好生活就好了。

不要问我为啥不写答案,因为如果你看了题不会,那我写答案你也理解不了,不如踏实去看书去翻博客,如果你会,自己心里就有答案了,我又何必多此一举(其实是我太累了不想写)

  • 4
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一杯刘

我 风暴降生 打钱

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值