准备技巧
拿到心仪的 offer 后,分享一些面试准备经验。
- 不要盲目复习和看面经中涉及到的基础知识,重点去准备项目中涉及到的基础知识。
- Java 很重要,不要以为 Android 基础最重要,面试多家都是 Java 的比重最大。
- 简历上的个人技能突出你几个你最熟悉的关键点,不要只写熟悉 Android,熟悉 Java。比如熟悉网络请求库 OkHttp 或 Retrofit,或者熟悉 View、IPC 等等,这样面试官才会有针对性的去考察你。
- 项目不好没关系,但是要熟悉,建议自己以博客的形式记录下项目的整体流程和一些关键技术的使用。
面经(1-2 面技术问题汇总)
可能还有些问题记不住了,这里只是简单写个问题的方向,具体面试的时候会继续深入问,所以看着问题少但面试时间反而很长。
Java 问题
- 以下两种创建 String 方式的区别,
==与equals的区别,以及 Object 类中equals的原理,new 一个对象所经历的步骤(判断是否加载,内存分配等等),以及 str 在栈中与内存中的存储。
String str = new String("hello");
String str2 = "hello";
- Java 中 Exception 的结构(exception class 结构关系父类子类等等)。
- Java IO 的结构与区别。
- Java 中创建线程的方式。
- Java 中可以保证多线程安全的方式(包括:字段,多种锁,保证线程安全的数据结构与实现)。
- 虚拟机中的内存分配。
- ThreadLocal 的内部原理,以及 Thread 中有什么属性和方法。
- ArrayList 与 LinkedList 的区别,以及数组扩容。
- 乐观锁与悲观锁。
代码
- 手写冒泡排序。
- 手写翻转二叉树。
- 手写两个单例模式,DCL 和静态内部类(同时问了 final 关键字与静态内部类为什么能满足单例模式)。
计算机基础
- TCP/IP 的四层结构。
- TCP 三次握手与四次挥手。
- TCP 的报文。
- HTTP 的报文。
- PUT 与 GET 的区别。
- PUT 与 POST 的区别。
Android
- Android 中解决滑动冲突的方式:考察的不是内部拦截与外部拦截,其实考察的是 NestedScrollParent 与 NestedScrollChild。
- Activity 的生命周期与四种启动模式。(除普通的那些还有 onRestoreInstanceState 与 onSaveInstanceState 与 onNewIntent 以及他们的使用场景与区别)。注意调用 onNewIntent 不会再调用 onCreate 方法了,会直接调用 onStart 与 onResume。如果是已经不可见的 Activity(调用了 onStop 的,则会先调用 onRestart 之后在调用 onStart 方法)。
- View 的绘制过程(非常详细地说),具体还有些仔细的小问题。
- View 的事件分发(非常详细地说),具体还有些仔细的小问题。
- 多个具体的场景讲述 Activity 生命周期调用的过程。诸如一个 Activity 打开另一个 Activity,他们之间的生命周期调用。


