广州本科毕业,学渣一枚,21年有幸参加了小米的招聘会,在7月的时候投递了简历,8月收到了面试通知,感觉华为的面试对我们应届生还是很宽容的,虽然过程中气氛很严肃,但问的东西自己也都答了一些,基本上面试官考察一下你的掌握程度,达到他们要求的线就ok了,目前已经收到了小米的录用意向书,分享一下自己的面经,以供大家参考,希望大家都能够进入自己心仪的公司。
如果你准备面试,建议看完这份大厂Android面试解析指南,点击查看Github地址
面试流程
发送简历——通知一面——一面结束(告知一周内有二面)——二面结束——收到邮件,面试通过,反馈官网注册的简历编号——收到性格测评邮件——流程在官网更新——官网流程更新为录用排序中——收到offer。(从发送简历到拿到offer历时28天)
一面:
- 算法题:123 -> 321 超出Integer最大值范围,正负数怎么处理
- hashmap put()底层原理,发生冲突时,如何去添加(顺着链表去遍历,挨个比较key值是否一致,如果一致,就覆盖替换,不一致遍历结束后,插入该位置)
- Handler内存泄漏与Looper
- Message为什么没有被回收
- 手写单例模式,volatile作用 ,为什么要双重判空,作用是什么,一句话概括
- 为什么要泛型擦除,写一个泛型方法和一个泛型类
- 一张图片加载到内存,如何计算图片占用内存的大小,ARGB8888与ARGB565有什么区别
- APK打包流程
- 四种引用方式,他们之间的区别,什么时候用到弱引用
二面:
- 线程池线程是如何保持线程不被回收的?在for循环里一直循环,循环体内会有take方法阻塞?
- 线程可以多次调用start吗? 会出现什么问题? 为什么不能多次调用start?
- RecyclerView是怎么优化的
- MVP是如何实现的,他们之间的关系和职责
- MVVM是如何实现的? ViewModel的底层原理
- 热修复框架底层的原理,Tinker,美团的
- pid与uid的区别
- 你们的项目架构是怎样的?
- 线程IO密集型和CPU密集型区别及线程数的设置
三面:
- 简单自我介绍
- 项目结构,用到了哪些技术?
- 过往经历
- 为什么想换工作?
- 最近看的项目,用的什么技术?
面试总结
能拿到小米offer,肯定是非常高兴的,现在已经入职小米了,希望能够与小米携手,共同进步!最后想告诉大家,做技术这一块,一定要有自己的一个学习计划和学习方法,要学会不断提升自己,才能够走到更大的舞台上!
同时面试也没有其他的诀窍,只看你对这些知识点准备的充分程度。so,出去面试时先看看自己复习到了哪个阶段就好。之前我是看的Github上的一个Android进阶知识笔记,很全面,如果你也有需要可以去查看,点击查看Github地址!