百度安卓开发
一面(技术面试):
包括自我介绍,项目经验讨论,以及对Android基础知识的考察,如四大组件、生命周期等。
- 手撕依赖关系树扫描算法,要求包括不重复扫描和优化时间复杂度。
- 讨论如何实现未知长度数组的翻转。
- 描述内存泄漏的处理经验,以及ANR的原因和解决方案。
- 设计播放间隔和加载时间的图片展示机制。
- 手撕二分查找算法以快速找到无序数组中的最小值。
- 深入探讨Handler消息机制和Java异常处理机制。
- 讨论单例模式的实现和优缺点,多线程间通信和线程安全,以及线程池的简述。
二面:
包括更深入的技术问题和项目细节,如性能优化的具体细节,以及TCP和UDP的区别和应用场景。
三面: 综合面试,包括业务类问题和HR问题,如Class间依赖关系图的绘制,Android系统的类加载机制,以及个人职业规划和优点缺点的讨论。
腾讯安卓开发面试
面试重点: 自定义View的绘制流程,Android系统源码的理解,如事件拦截和分发机制,进程间通信方式,以及应用的创建启动流程。
技术细节: 对Handler导致内存泄露的原因进行探讨,以及第三方库如Glide、OkHttp和Retrofit的源码分析。
数据结构和算法: 询问Java常用集合的实现原理,缓存淘汰策略,以及红黑树和二叉树等算法问题。
小米安卓开发
一面: 项目经验分享,Volley框架的实现机制,蓝牙使用流程,设计模式,Binder机制,View事件分发机制,性能优化策略,以及eventBus框架的使用。
二面: 自我介绍,项目选择讨论,蓝牙技术细节,第三方库替换策略,多线程知识,asyncTask内存泄露问题,以及网页代码编写任务。
现场面试: 自我介绍,项目熟悉度讨论,手写代码任务,intentService的理解,以及activity生命周期变化等。
总结
面试过程中,基础知识的扎实性、技术深度、项目经验的深度和广度是面试官重点考察的内容。此外,需要准备好对简历上所列技能的深入理解和实际应用案例的描述。对于大型互联网公司,算法和数据结构、多线程、性能优化、系统源码的理解是必备技能。同时,应具备良好的问题解决能力和沟通技巧。
完整版见公主号:Android老皮