最近几个月一直在找工作,今年找工作是真的难。下面的是我这段时间找工作面试过程中被问到的一些问题,希望能对你有所帮助。
Java
基础
- 什么是面向对象?面向对象的三大特征是什么?
- String、StringBuilder、StringBuffer 的区别?String 为什么是不可变的?
- Java 中的 String 常量池相关的问题。
- Integer 缓存的相关问题。
- 什么是浅拷贝、什么是深拷贝,深拷贝有哪些实现方式。
- 二进制的运算必须要掌握。
进阶
JVM
- JVM 内存分区有哪些?
- 堆和栈的区别是什么?
- 垃圾回收器算法有哪些?
- Java 中如何判断一个对象是否需要被回收?
- Java 中的垃圾收集器有哪些?
- 一个 Object 在内存中占多少字节?
- 什么是 OutofMemoryError,什么情况下会发生 OOM。
- JVM 的类加载的双亲委派是什么?
集合
- ArrayList 和 LinkedList 有什么区别?
- ArrayList 扩容相关的问题。
- HashMap 的实现原理是什么?(这里可能会被问到数据结构与算法中解决 hash 冲突有哪些方式。)
- HashMap 扩容相关。(被问过 HashMap 的默认的负载因子是多少)HashMap 的容量为什么要是 。
- 为什么重新 equals 方法时要重写 hashCode 方法。
并发
- 保证线程安全的方式有哪些?
- synchronized 和 voliate 是什么?实现原理是什么?
- synchronized 和 ReentraintLook 的实现原理有什么不同?这两种锁有什么区别?
- 乐观锁和悲观锁是什么?
- CAS 是什么?Java 中 CAS 是如何解决 ABA 的问题的。
- 线程池是什么?线程池有什么优点?线程池的实现原理是什么?
- 你知道 JUC 下提供了哪些用于并发的工具类。
- AtomicInteger 的实现原理。
- ConcurrentHashMap 是如何保证线程安全的。
- Java 中有什么并发安全的集合?
- CountDownLatch、CyclicBarrier 和 Semaphore 必须要会使用,原理也不复杂,最好能掌握。
- 一些并发相关的手撕题。比如生产者、消费者;比如两个线程,必须一前一后执行。
Kotlin
- Kotlin internal 关键字的作用是什么?
- Kotlin 中内联函数的实现原理是什么?
- Kotlin 中扩展函数的实现原理是什么?
- Kotlin 中 lateinit 关键字的作用是什么?
- Kotlin 中协程是什么?实现原理是什么?(扩展到线程和进程)
- Kotlin 相比 Java 有什么优缺点。
- Kotlin 的委托机制。
- Kotlin 中的 Map 和 java 中的 Map 有什么区别?
Kotlin 面试时问的问题还是相对偏少。
操作系统
- 进程、线程、协程是什么?有什么区别?
- 什么是死锁?死锁有什么检测或者解决的办法吗?死锁的四个必要条件是什么?能写一段代码来演示一下死锁吗?
- 僵尸进程和孤儿进程是什么?
- 进程间通信的机制有哪些?
计算机网络
-
什么是 HTTP 协议?
- HTTP 协议常见的响应状态码有哪些?
- HTTP 各版本不同的版本之间有什么区别(或者说新加了哪些功能)?
-
HTTPS 和 HTTP 有什么区别?HTTPS 中的 S 代表什么?
- HTTPS 握手的过程。
- 这里补充一个常见的加解密算法有哪些?
- 证书链,证书的验证过程。
抓包的原理是什么?Charles 抓包的原理是什么?
什么是 TCP 协议?TCP 协议是如何保证传输的可靠性的?
TCP 和 UDP 的区别是什么?
什么是 DNS 协议?获取 DNS 的过程是什么?
设计模式
- 你用过哪些设计模式?
- 单例设计模式。什么是双重检测?双重检测的单例中为什么要使用 volatile。
- 观察者模式。
- 六大设计原则。
- 工厂模式。
- 代理模式。
- 适配器模式。
- 装饰模式。
- ...
Android
基础
-
能说说 Android 中的 Handler 机制吗?(最好能深入 native 层)
- Handler 中什么是同步屏障、什么是异步消息?
- IdleHandler 是什么?有什么作用?
- HandlerThread 是什么?
- Handler 中为什么要使用 epoll?
Binder 是什么?AIDL 是什么?
View 的绘制流程是什么?(最好能回答的全面一些)invalidate 和 requestLayout 的区别是什么?
自定义 View 流程有哪些?
能讲讲触摸事件的分发流程吗?(有可能会问 framework 层)这里可能会出一些场景,让你说一下事件是怎么分发的。
Activity 的四种启动模式是什么?分别有哪些使用场景?
Activity 的生命周期有哪些?屏幕旋转后的生命周期变化是什么?
能讲讲从 Launcher 启动 Activity 的流程吗?
Broadcast 是什么?广播有哪些分类?广播注册方式有几种?为什么要有本地广播?本地广播的实现原理是什么?
Service 是什么?Service 有哪几种模式?IntentService 是什么?
ContentProvider 是什么?
Android 创建线程有哪几种方式?多线程应用和单线程应用的 Application 有什么区别?
MVC、MVP、MVVM、MVI 的区别是什么?
ANR 是什么?ANR 的场景有哪些?在这些场景下多少秒无响应会 ANR?
Android 中有哪几种动画,原理分别是什么?
Activity 的 Context 和 Aplication 的 Context 有什么区别?
App 的打包流程是什么?
什么是内存泄露?内存泄露的场景有哪些?内存泄露要怎么解决?怎么检测内测泄露?
组件化相关的一些问题,这个会结合项目问。
Bitmap 加载一个图片,内存占用的大小和哪些因素有关?
Jetpack
- 你使用过哪些 Jetpack 的组件?
- Lifecycle 实现原理是什么?
- ViewModel 实现原理是什么?
- LiveData 的实现原理是什么?LiveData 中的版本号的作用是什么?LiveData 有什么不足以及如何解决?Google 为什么现在推荐使用 Flow?
- 为什么屏障方向切换后,ViewModel 中的数据还在?
框架
- Retrofit 的实现原理。
- OKHTTP 原理。
- Fresco 和 Glide 的优缺点。
设计题
- 启动任务的框架设计。
- 下拉刷新要怎么设计实现。
- ...
设计题千奇百怪,面试官可能会根据一些实际情况来出题。