前言

春招正式批投递了百度Android开发岗。近期给安排了南京地区的现场面试,面试几乎是全程手撕各类问题,而且面试问题都比较发散;简单罗列一下面试涉及的问题。

一面

一面问的问题大多是开放性问题,主要是看个人思路吧。
1.手撕依赖关系树扫描算法(期间提了不重复扫描、优化时间复杂度等要求)
2.简述如何实现未知长度的数组翻转?
3.简述内存泄漏,你处理过哪些内存泄漏?
4.以100ms/张的间隔时间播放100张图片,且每张图片需要400ms进行加载,如何设计?
5.如何在无序数组中快速找到最小值(手撕二分查找算法)
6.简述Android中的ANR,以及为什么会出现ANR?
7.简述Handler消息机制(深挖内部实现原理)

二面

1.手撕一个有序数组的二分查找算法
2.列举一个你在实际项目中所进行的性能优化(深挖具体细节)。
3.简述单例模式的实现方式,且单例模式有什么优缺点?
4.简述Java的异常处理机制
5.多线程间如何进行信息通信?
6.多线程如何保证线程安全?
7.简述线程池
8.简述HashMap实现机制,如何解决HashMap的线程安全问题?
9.TCP和UDP的区别,分别有哪些应用场景?
10.简述七层网络模型
11.简述Android点击事件的分发机制
12.画一个BLE APP的功能架构图

三面

三面相当于是综面和HR面和在一起了,主要问题也是分两个模块。
业务类问题:
1.手绘Class间依赖关系图
2.聊聊如何处理并发编程
3.手撕消费者模型代码,主要线程安全、队列等情况。
4.简述Android系统的类加载机制
5.Activity的生命周期通过什么机制来通知?

HR类问题:

1.聊聊个人的职业规划
2.你最大的优点是什么?
3.你有哪些方面待改进?
4.简述你大学所做的事情
5.说说你大学里最遗憾的事情
如果你和舍友产生了矛盾,如何处理?

建议

  • 多看源码,包括Java层的代码在JVM中的实现源码:如synchronized的实现源码,Android Framework的源码更好认识Android层的实现,Android开源库源码(OKHttp,Retrofit,RxJava,EventBus,Glide,Gson…,更好的学习优秀开源库源码,做到用的熟,懂原理)
  • 多问自己为什么,比如两个技术点优缺点分别在哪,各自的使用场景(如单例模式下饿汉与懒汉的优缺点,使用场景),这样才能更契合实际应用开发,针对不同场景使用不同技术点
  • 及时复盘总结面试中遇到的问题,分为两方面,一是知道但不能深入的,这种需要继续多看多总结,另一种是没接触过的,这种可以先了解下,万一面试又遇到了,可以回答下了解到的,之后再去深入总结(毕竟时间有限,不可能面面俱到,只能不断学习总结)