2020 Android常见面试题
Android:
-
前台切换到后台,然后再回到前台,Activity生命周期回调方法。弹出Dialog,生命值周期回调方法。
-
Activity的生命周期和启动模式
activity启动模式 -
ANR的原因
ANR 出现的场景以及解决方案 -
四大组件
-
Activity之间的通信方式
-
ListView的优化
-
RecycleView的使用,原理,RecycleView优化
-
RecyclerView怎么实现的item缓存,跟ListView有什么区别
-
进程和线程的概念,Android里怎样实现多线程?
-
App启动崩溃异常捕捉
-
事件传递机制的介绍
-
Handler的原理和使用 Handler是怎么和线程绑定的(Looper),为什么Looper.loop()要设计成死循环
-
手写生产者/消费者模式
-
HashMap和HashTable区别,HashMap原理和实现,hash()的算法
-
Android的IPC机制(Binder)
-
什么是内存泄漏,Android里有哪些内存泄漏的场景,原因是什么
-
怎么实现LRU缓存
LRU缓存机制
- 怎么解决用户高频点击打开新Activity导致的多实例问题(Activity启动模式)
算法:
- 二叉树,给出根节点和目标节点,找出从根节点到目标节点的路径
- 一个无序,不重复数组,输出N个元素,使得N个元素的和相加为M,给出时间复杂度、空间复杂度。手写算法
- 数据结构中堆的概念,堆排序
- 如何用两个队列(FIFO)实现栈(FILO)
- 了解常见排序算法吗,手写一下快排
- 怎么判断两个无环单链表是否相交
JAVA:
-
死锁的概念,怎么避免死锁
-
ReentrantLock的内部实现
-
ReentrantLock 、synchronized和volatile
关于volatile与synchronized -
集合的接口和具体实现类,介绍
-
TreeMap具体实现
-
逻辑地址与物理地址,为什么使用逻辑地址
-
Java的几种内部类,区别是什么
-
String的hashCode()和Object的hashCode()
-
Java里泛型的实现
-
Java里加锁的方式,synchornized关键字的原理,悲观锁和乐观锁都有哪些实现
-
死锁的条件和解决方法,讲讲银行家算法
JVM
-
内存区域
-
内存模型
-
内存分配回收策略
-
Java 对象的创建、内存布局和访问定位
-
GC过程,GC的算法都有哪些
垃圾收集算法 -
编译器优化
-
方法内联
-
JVM 是如何执行方法调用的?
-
JVM 是如何实现反射的?
-
JVM 是如何实现泛型的?
-
JVM 是如何实现异常的?
-
JVM 是如何实现注解的?
-
逃逸分析
-
虚拟内存和物理内存的概念和关系,内存分页的调度算法
架构与三方库:
- 模式MVP,MVC介绍
- RxJava的功能与原理实现
- 用到的一些开源框架,介绍一个看过源码的,内部实现过程。
网络:
- TCP的三次握手四次挥手,为什么要四次挥手
- TCP的流量控制算法(滑动窗口),拥塞控制算法