一面(2023/10/12 50min)
- Handler机制是什么?在没有message的时候为什么不会导致应用程序ANR?
- 介绍一下四大组件?
- Activity启动模式?
- 进程和线程的区别?进程是独立的执行单元,是系统资源分配的基本单元;线程是进程内执行单元,是任务调度的基本单元进程切换开销大,线程开销相对小
- 你知道Android程序的入口吗?知道ActivityThread吗?
- View的事件分发机制?View的绘制机制?
- 如果要在一个Activity里面获取一个View的宽高应该在哪一个回调方法获取?
- 知道共享内存模型吗?应该是要问JMM,然后追问volatile关键字
- 内存里面的寄存器有了解吗?指针寄存器?指令寄存器?这里应该是要问程序计数器,保存线程并发切换前的执行指令位置。
- LeakCanary原理?弱引用和软引用区别?
- 算法题,找View树的最近公共祖先,是面试官自己出的,给的数据结构是
View{
View[] childs;
View parent;
}
我有点懵,没思路,然后问面试官能不能写二叉树的最近公共祖先,面试官同意了,然后我就写二叉树的了
反问:
- 部门技术栈?Java、Kotlin、OKHttp那些
- 实习生的主要工作?和正式工都差不多,只是需求简单一些
- 您觉得我哪方面要重点加强的?首先是算法,其他说的还可以
二面(2023/10/30 48min)
- 讲一讲泛型?泛型的原理?类型擦除,擦除之后呢?如何获取类型?这里我原本以为Java没办法获取到实际类型,只有Kotlin才可以通过泛型的实化来获取,但是实际上是可以通过匿名内部类获取的
- 协变和逆变?in和out如何选择
- 高阶函数?
- Git的原理?(不知道)
- 面向对象编程和响应式编程的区别?
- Map?Map的时间复杂度,什么时候会用到链表化和树化,哈希冲突,有了解HashMap的扩容吗?如果是你会怎么做?
- 为什么要使用TCP协议?TCP协议有什么好处?TCP协议解决了什么问题
- 说一下你最熟悉理解最深的一个知识点?说了JVM的内存划分机制
- 算法题,反转链表
反问:
- 您觉得我还有什么地方需要加强的吗?因为一面的评价是基础不错,所以挖一下底层想找一下我的亮点,但是没有问到想要的,很多东西,只是知道是什么东西,而不知道为什么,写代码要多思考为什么。
隔天31号早上HR加微信通知过了
总结:原理性的东西还是了解的太少