JAVA
容器(HashMap、HashSet、LinkedList、ArrayList、数组等)
需要了解其实现原理,还要灵活运⽤,如:⾃⼰实现
LinkedList
、两个栈实现
⼀个队列,数组实现栈,队列实现栈等。
HashMap
、
HashTable
和
CurrentHashMap
的核⼼区别(并发),其次内部
数据结构的实现、扩容、存取操作,再深⼀点 哈希碰撞,哈希计算,哈希映
射,为什么是头插法,扩容为什么是
2
的幂次等。
参考
●
JAVA
容器
-
⾃问⾃答学
HashMap
https://www.jianshu.com/p/32f67f9e71b5
●
什么是
HashMap
?
https://juejin.im/post/5a215783f265da431d3c7bba
●
从源码⻆度认识
ArrayList
,
LinkedList
与
HashMap
https://www.jianshu.com/p/f174d49b391c
内存模型
参考
理解
Java
内存模型
https://juejin.im/post/5bf2977751882505d840321d
你了解
Java
内存模型么(
Java7
、
8
、
9
内存模型的区别)
https://blog.csdn.net/laomo_bible/article/details/83067810
垃圾回收算法(JVM)
JVM
类加载机制、垃圾回收算法对⽐、
Java
虚拟机结构
当你讲到分代回收算法的时候,不免会被追问到新⽣对象是怎么从年轻代到⽼
年代的,以及可以作为
root
结点的对象有哪些两个问题。
1
、谈谈对
JVM
的理解
?
2
、
JVM
内存区域,开线程影响哪块区域内存?
3
、对
Dalvik
、
ART
虚拟机有什么了解?对⽐?
ART
的机制与
Dalvik
不同。
在
Dalvik
下,应⽤每次运⾏的时候,字节码都需要通过即时编译器(
just in
time
,
JIT
)转换为机器码,这会拖慢应⽤的运⾏效率。
⽽在
ART
环境中,应⽤在第⼀次安装的时候,字节码就会预先编译成机器
码,极⼤的提⾼了程序的运⾏效率,同时减少了⼿机的耗电量,使其成为真正
的本地应⽤。这个过程叫做预编译(
AOT,Ahead-Of-Time
)。这样的话,应
⽤的启动
(
⾸次
)
和执⾏都会变得更加快速。
优点:
●
系统性能的显著提升。
●
应⽤启动更快、运⾏更快、体验更流畅、触感反馈更及时。
●
更⻓的电池续航能⼒。
●
⽀持更低的硬件。
缺点:
●
机器码占⽤的存储空间更⼤,字节码变为机器码之后,可能会增加
10%-20%
(不过在应⽤包中,可执⾏的代码常常只是⼀部分。⽐如最新
的
Google+ APK
是
28.3 MB
,但是代码只有
6.9 MB
。)
●
应⽤的安装时间会变⻓。
4
、垃圾回收机制和调⽤
System.gc()
的区别?
参考
Java
虚拟机(
JVM
)你只要看这⼀篇就够了!
https://blog.csdn.net/qq_41701956/article/details/81664921
类加载过程(需要多看看,重在理解,对于热修复和插件化⽐较重要)
反射
多线程和线程池线程有哪些状态,哪些锁,各种锁的区别
并发编程:
●
synchronized
和
volatile
、
ReentrantLock
、
CAS
的区别
●
synchronized
修饰实例⽅法和修饰静态⽅法有啥不⼀样。
●
sleep
、
wait
、
yield
的区别,
wait
的线程如何唤醒它。
HTTP、HTTPS、TCP/IP、Socket通信、三次握⼿四次挥⼿过程
计算机⽹络部分:
1. TCP
有哪些状态
2.
三次握⼿、四次挥⼿。为啥不是三次不是两次
3. HTTPS
和
HTTP
的区别,
HTTPS 2.0 3.0
?
4.
浏览器输⼊⼀个
URL
按下回⻋⽹络传输的流程?
5.
问的深⼀点的可能涉及到⽹络架构,每层有什么协议,
FTP
相关原理,
例:
TCP
建⽴连接后,发包频率是怎么样的?
设计模式(六⼤基本原则、项⽬中常⽤的设计模式、⼿写单例等)
●
⽣产者模式和消费者模式的区别?
●
单例模式双重加锁,为什么这样做?
●
知道的设计模式有哪些?
●
项⽬中常⽤的设计模式有哪些?
●
⼿写⽣产者、消费者模式。
●
⼿写观察者模式代码。
●
适配器模式、装饰者模式、外观模式的异同?
●
谈谈对
java
状态机的理解。
●
谈谈应⽤更新(灰度、强制更新、分区更新?)
断点续传
Java 四⼤引⽤
●
强引⽤、软引⽤、弱引⽤、虚引⽤的区别以及使⽤场景。
●
强引⽤置为
null
,会不会被回收?
●
稍微问的深⼀些的⾯试官会和内存泄漏检测原理以及垃圾回收糅杂在⼀
起。
Java 的泛型, 和 的区别
问到泛型、泛型擦除、通配符相关的东⻄
final、finally、finalize 的区别13. 接⼝、抽象类的区别
Android
⾃定义 View
1. ViewGroup
绘制顺序 (例:⾃定义
ViewGroup
如何实现
FlowLayout
?
如何实现
FlowLayout
调换顺序)
2.
⾃定义
View
如何实现打桌球效果;
3.
⾃定义
View
如何实现拉⼸效果,⻉瑟尔曲线原理实现?
事件拦截分发
事件分发已经不是直接让你讲了,会给你具体的场景,⽐如
A
嵌套
B
,
B
嵌
套
C
,从
C
中⼼按下,⼀下滑出到
A
,事件分发的过程,这⾥⾯肯定会有
ACTION_CANCEL
的相关调⽤时机。
解决过的⼀些性能问题,在项⽬中的实际运⽤。
性能优化⼯具
(TraceView
、
Systrace
、调试
GPU
过度绘制
& GPU
呈现模式分析、
Hierarchy Viewer
、
MAT
、
Memory Monitor & Heap Viewer & Allocation
Tracker
等)
性能优化 (讲讲你⾃⼰项⽬中做过的性能优化)
1.
⽹络:
API
优化、流量优化、弱⽹优化
2.
内存:
OOM
处理、内存泄漏、内存检测、分析、
Bitmap
优
化
,LeakCanary
原理,什么检测内存泄漏需要两次?
3.
绘制
4.
电量:
WeakLock
机制、
JobScheduler
机制
5. APK
瘦身 (
APK
瘦身是怎么做的,只⽤
armabi-v7a
没有什么问题么?
APK
瘦身这个基本是
100%
被⾯试问到,可能是我简历上提到的原
因。)
6.
内存抖动
7.
内存泄漏
8.
卡顿
{
如何检测卡顿,卡顿原理是什么,怎么判断⻚⾯响应卡顿还是逻辑
8.
处理造成的卡顿
}
,
BlockCanary
的原理
9.
布局优化、过度渲染处理、
ANR
处理、监控、埋点、
Crash
上传。
10.
启动优化
Http[s]请求慢的解决办法(DNS、携带数据、直接访问 IP)
缓存⾃⼰如何实现(LRUCache 原理)
SurfaceView、TextureView、GLSurfaceView 区别及使⽤场景
动画、差值器、估值器
(
Android
中的
View
动画和属性动画
-
简书、 Android 动画 介绍与使⽤)
属性动画、补间动画、帧动画的区别和使⽤场景
MVC、MVP、MVVM
相互间的区别和各种使⽤场景,如何选择适合⾃⼰的开发架构。
Handler、ThreadLocal、AsyncTask、IntentService 原理及应⽤
Handler
机制原理,
IdleHandler
什么时候调⽤。
Gradle(Groovy 语法、Gradle 插件开发基础)
热修复、插件化
1.
谈谈对
ClassLoader
的理解
2.
双亲委托机制的好处
3.
⾃定义
ClassLoader
4.
插件化为什么会出现,如何代码加载,资源加载,代理
Hook
)
组件化架构思路
1.
如何从⼀个⽼项⽬⼀步步实现组件化,主要问思路,考察架构能⼒和思考
能⼒。(需要考虑很多,每⼀步做什么,顺序很重要)
2.
组件化和模块化的理解与区别?
系统打包流程
Android 有哪些存储数据的⽅式。
SharedPrefrence 源码和问题点;
sqlite 相关
1. sqlite
升级,增加字段的语句
2.
数据库框架对⽐和源码分析
3.
数据库优化及数据迁移问题
4. getWritableDatabase
和
getReadableDatabase
的区别
如何判断⼀个 APP 在前台还是后台?
混合开发
1. Hybrid
做过吗? 例:
Android
通过
WebView
调⽤
JS
代码 例:
JS
通过
WebView
调⽤
Android
代码;
2. Hybrid
通信原理是什么,有做研究吗?
3.
说说你⽤过的混合开发技术有哪些?各有什么优缺点?
Android Framework
AMS 、PMS
Activity 启动流程,App 启动流程
Binder 机制(IPC、AIDL 的使⽤)
讲讲
Linux
上的
IPC
通信,
Binder
有什么优势,
Android
上有哪些多进程通
信机制
?
1.
项⽬中遇⻅了什么多进程场景?
2. AIDL
是什么?解决了什么问题?
3.
谈谈对进程共享和线程安全的认知?
为什么使⽤ Parcelable,好处是什么?
Android 图像显示相关流程,Vsync 信号等
三⽅源码
Glide :加载、缓存、LRU 算法
(
如何⾃⼰设计⼀个⼤图加载框架
)
(
LRUCache
原理)
EventBus
LeakCanary
ARouter
重点:
Router
原理,如何实现组件间的通信,组件化平级调⽤数据的⽅式。
插件化(不同插件化机制原理与流派,优缺点。局限性)
热修复
RXJava
(
RxJava
的线程切换原理)
Retrofit
(
Retrofit
在
OkHttp
上做了哪些封装?动态代理和静态代理的区别,是怎么
实现的)
OkHttp
1
、
OkHttp
源码,⽹络缓存
2
、如果从⽹络加载⼀个
10M
的图⽚,说下注意事项
算法与数据结构
单链表:反转、插⼊、删除
双链表:插⼊、删除
⼿写常⻅排序、归并排序、堆排序
⼆叉树前序、中序、后序遍历
最⼤ K 问题
⼴度、深度优先搜索算法
String 转 int。
核⼼算法就三⾏代码,不过临界条件很多,除了判空,还需要注意负数、
Integer
的最⼤最⼩值边界等;