小米Android面经,了解一下
13号杭州面的Android,hr面当场给offer了。现在发一波面经回馈一下。
一面:
一面差不多问了四五十分钟。下面是面经。
Android:
- activity之类,生命周期等。举例子讲
- 项目讲一下,项目方面的东西问了挺久。
- linux dump,还有一个文件什么忘了
- 网络分层模型,tcp、udp讲一讲。
- MVP讲一下
- 看过哪些开源库源码,我说看过eventbus和glide。
- 说说安卓分四大组件这种模块的原因。
- 手写读者写者问题
算法:
- 二叉树高度
- 加一个字符之后判断字符串是否回文
二面:
二面很多问题都会深入问你,直到你不会。但面试官人超级nice,不会的东西给我讲了好久。所以二面面了1.5h,以下面经。
Java基础
- 抽象类、接口区别
- 由数组实现的集合有哪些,跟链表实现的有什么区别?差异
- hashmap,hashtable,concurrenthashmap区别。之后深入到concurrenthashmap分段锁详解,没答出来。他直接打开源码给我分析。问到table和concurrent的get方法区别。
- 多线程,wait和sleep区别。
- 两个线程分别打印log
- class对象什么时候加载,这个问了很多。涉及到精确去控制类中某个块的加载。自己不会,面试官跟我讲了好多。
- 问到双亲委派机制,但是是举例子问的。如果自己写了个跟java提供的一模一样的类。(包名类名都一样)为什么虚拟机可以正确加载系统提供的。
- 什么样的对象会被gc回收,举例子说了很多
- 内部类,持有外部引用。为什么内部类访问外部变量时,外部变量要设置成final
- 让我讲讲设计模式,我说讲单例,他说可以。写了dcl之后问dcl失效的问题,什么情况会失效。然后说有没有更好的方式,我说静态内部类方式,但我自己没怎么写过。说到静态内部类方式的时候,发现跟第四个问题有关联。
Android
- 生命周期,两个activity启动的回调。然后问如果把一个应用进程直接kill掉,生命周期会怎么走。
- 启动模式没问,说这个过了算了
- 进程通信机制有哪些,ipc问的不是很深。问我在什么情况下用aidl。我说没用过。
- 线程通信,handler机制,讲完流程后问当messagequeue空的时候,怎么进行阻塞的(面试官跟我讲涉及到native方法)。postdelay详细讲一下,跟前面一个问题有关联。
- asynctask内部机制讲一讲,onpost回调执行的线程
- 内存泄漏检测方案,常见内存泄漏有哪些。我自己举了举个例子,面试官又补充了好多。
- view的60ms刷新机制了解,怎么检测view卡顿。
- anr定位,监控。
- 事件分发,讲完流程之后问的比较深入。如何让事件进行双向传递,比如子view已经消费了的事件怎么传回到vg去。
算法
- 判断交叉链表并找出相交节点