前言
经历多次面试并与多家公司交流后,本文对过往经验进行回顾与总结,旨在为求职者提供参考。
一、简历
- 简洁明了:保持简历简洁专业,技术面试官更关注项目经验和技能。
- 突出技能:列出精通技能并深入描述,新技术简要提及但需确保理解。
- 项目经验:详细描述项目,重点突出技术、设计模式、性能优化。从发现问题、解决问题、效果对比三方面描述。
例如:在 UI 优化项目中,'发现 UI 卡顿,通过开发者工具定位 GPU 过度绘制层级问题,使用 TraceView 分析 CPU,采取降低层级和自定义 View 绘图策略,性能显著提升。'
- 量化结果:尽量用数字描述成果,如'优化后应用启动速度提高 30%'。
- 参考和链接:提供开源项目或个人网站链接证明技术实力。
- 不断更新:定期更新简历,确保时效性。
二、技能储备
(一)Java
-
HashMap 和 Hashtable 区别:
- HashMap 支持 null Key 和 null Value;Hashtable 不允许。
- HashMap 非线程安全,可通过
Collections.synchronizedMap实现线程安全;Hashtable 是线程安全的。 - HashMap 默认长度 16,扩容 2 倍;Hashtable 默认长度 11,扩容 2n+1。
- HashMap 继承 AbstractMap;Hashtable 继承 Dictionary。
- 扩展:HashMap 对比 ConcurrentHashMap,HashMap 对比 SparseArray,LinkedList 对比 ArrayList,ArrayList 对比 Vector。
-
Java 垃圾回收机制: 理解 JVM 内存划分(方法区、堆、虚拟机栈、本地方法栈、程序计数器)及回收算法(标记清除、可达性分析、标记 - 整理、复制、分代)。
-
类加载机制:结合热修复深入理解。
-
线程和线程池:了解并发、锁,思考如何自己实现线程池。
-
HandlerThread、IntentService 理解。
-
弱引用、软引用区别。
-
int、Integer 区别:主要考值传递和引用传递问题。
-
手写生产者/消费者模式。
(二)Android
-
Android 启动模式:
- Standard:默认,启动一个多一个实例。
- SingleTop:栈顶复用,若处于栈顶则调用
onNewIntent()。 - SingleTask:栈内复用,存在则出栈其他 Activity。
- SingleInstance:单独栈,仅包含该 Activity。
- Intent Flags:
FLAG_ACTIVITY_SINGLE_TOP,FLAG_ACTIVITY_NEW_TASK,FLAG_ACTIVITY_CLEAR_TOP。
-
View 的绘制流程: ViewRoot -> performTraversal() -> performMeasure() -> performLayout() -> performDraw() -> measure() -> layout() -> draw()。 注意 invalidate 方法参数区别,requestLayout 触发局部重新测量。


