1. Android
1.1 View相关
1.1.1 基础
- Q:SurfaceView和View的区别?
- Q:自定义View/ViewGroup需要注意什么?
1.1.2 系统View组件
-
ListView(详解见Android面试—ListView原理及fling分析)
- Q:
ListView
为什么可以加载1000个条目不崩? - Q:什么是
RecycleBin
,它是怎么和ListView
回收和复用的? - Q:你知道
notifyDataSetChanged
方法干了啥吗?调用之后为啥ListView
就刷新了? - Q:你知道
ListView
的跟手滑动和fling
是怎么实现的吗?
- Q:
-
ScrollView
- Q:
ScrollView
的测量过程,滑动过程以及fling
的实现?
- Q:
-
FrameLayout
- Q:
FrameLayout
的布局过程?
- Q:
-
LinearLayout
- Q:
LinearLayout
的布局过程?
- Q:
-
RecyclerView
-
CoordinatorLayout(协同布局)
-
ConstraintLayout(约束布局)
1.1.3 测量
- Q:View的三次measure,两次layout和一次draw
- Q:onMeasure里面的MeasureSpec哪里来的?它的数据结构怎么样?怎么用?
- Q:LinearLayout和RelativeLayout选择哪个更好?为什么RelativeLayout需要测量2次
- Q:requestLayout()的原理,什么是责任链模式?
1.1.4 绘制相关
- Q:什么是
SurfaceFlinger
FrameBuffer
Surface
? - Q:为什么我们说主线程的操作不要操作16ms?
- Q:什么是VSYNC(垂直同步)、格栅化?
- Q:什么是掉帧jank,怎么处理?(双缓冲和三缓存机制)
- Q:invalidate()和postInvalidate()的区别?
1.1.5 事件传递
- Q:谈一谈View的事件分发机制?
- Q:MotionEvent是什么?包含几种事件?什么条件下会产生?
- Q:如何解决View的滑动冲突(方向相同、方向不同)?
- Q:onTouch()、onTouchEvent()和onClick()关系?
- Q:
InputManageService
的事件是怎么传递到Activity的? - Q:主线程和InputManageService的通信建立?(
WindowState
、WindowSession
) - Q:InputReader、InputDispatcher线程是干嘛的?运行在哪个进程?
1.1.6 滑动
- Q:Scroller中最重要的两个方法是什么?主要目的是?
- Q:scrollTo()和scrollBy()的区别?
- Q:fling方法的实现?
2. 图片相关
- Q:什么是LRU,什么是LinkedHashMshap?
- Q:本地、内存2级缓存怎么设计?
- Q:怎么加载一张大图又防止OOM?
- Q:了解哪些Drawable?适用场景?
3 系统组件
3.1 Activity
- Q:Activity的启动过程?
- Q:说下Activity的生命周期?
- Q:onStart()和onResume()/onPause()和onStop()的区别?
- Q:Activity A启动另一个Activity B会回调哪些方法?如果Activity B是完全透明呢?如果启动的是一个Dialog呢