Android 面试复盘:高频考点与准备思路
面试这件事,先别把自己讲成受害者
这篇整理不是'如何一次上岸',更像一份踩过坑后的备忘录。面试会卡人,卡在技术,也卡在表达和节奏。真正拉开差距的,往往不是某一题会不会,而是你能不能把基础、项目和临场状态放在一条线上。
我把这次准备里反复碰到的点拆开记一下,后面复习时会省很多时间。
面试流程回顾
按时间看,投递和结果大致是这样:
- 最右:二面挂
- 猿辅导:一面挂
- 伴鱼:Offer(两轮技术 + 一轮 HR)
- 顺丰:二面挂
- 百度:二面挂
- 微博:一面挂(薪资问题导致后续无果)
- 老虎证券:Offer(两轮技术 + 一轮 HR)
- 滴滴:一面挂
- 快手:简历挂
- 字节:Offer(三轮技术 + 一轮 HR)
- 美团:HR 面通过(三轮技术)
- 腾讯:HR 面通过(三轮技术)
最后选了腾讯的 Offer。面试这条线跑下来,我的感受很直接:别把一次挂掉看得太重。很多时候不是'你不行',而是岗位匹配、表达方式、面试轮次的侧重点都不一样。换一家继续投,远比原地怀疑自己有用。
非技术准备,别小看
离职原因
这个问题很容易答崩。最稳妥的方向是讲个人发展,而不是吐槽原公司。尤其是跳槽频繁,或者第一份工作还没满两年的人,回答时更要克制一点。说得太情绪化,面试官基本会顺手画一个风险标记。
简历投递顺序
如果对自己没把握,先投几家体量小一点的公司热身是有用的。这样能快速知道自己差在哪:是 Java 基础不稳,还是项目讲不清,还是回答问题时太散。先拿几轮面试把问题暴露出来,再冲目标大厂,效率通常更高。
心态建设
面试里被追问、被质疑都正常。别急着把它理解成否定。面试本来就是双向选择,你能选公司,公司也在选你。状态一乱,平时会的题也会说得很糟,先把节奏稳住,比临场硬撑更重要。
技术准备,核心还是这些
Java 基础
字符串字符统计
String.length() 返回的是 UTF-16 code unit 的数量,不是 Unicode 码点。遇到代理对字符,比如部分 Emoji,长度会和直觉不一致。要算真实字符数,还是得看 codePointCount()。
异常机制
Java 把异常分成受检异常和非受检异常。受检异常要求你显式处理,适合把调用方也拉进错误处理流程里;非受检异常更多是程序逻辑问题。这个设计不算优雅,但它确实把'该不该处理'这件事分得很清楚。
HashMap
HashMap 的几个点基本绕不开:
- 冲突处理:链表 + 红黑树,JDK 1.8 之后更明显
- 版本差异:JDK 1.7 用头插法,JDK 1.8 改成尾插法,避免扩容时的死循环风险
- 扩容:默认 2 倍扩容,重新定位元素
- 并发问题:它不是线程安全的,多线程下可能出现覆盖、数据错乱,严重时直接出问题
面试里如果问到高并发场景,我一般会直接切到 ConcurrentHashMap,这比解释 HashMap 为什么'不适合硬扛并发'更省时间。
集合类与线程安全
ArrayList 在多线程下同样不安全,常见问题是 ConcurrentModificationException 或数据不一致。要么加锁,要么换成更合适的容器,比如 CopyOnWriteArrayList。


