算法题
https://github.com/afatcoder/LeetcodeTop
https://codetop.cc/#/home
26、两个用单链表表示的大数相加,求他们的和。单链表元素的值为0~9。
15、求单链表的倒数第n个结点,时间复杂度为O(1)的解法。bad case是哪种?
16、遍历目录及其子目录,使用非递归的方式。
数据结构
1.SparseArray和ArrayMap。具体实现原理和特性,ArrayMap和SparseArray的区别。
https://blog.csdn.net/xiaxl/article/details/77267201
https://www.jianshu.com/p/1739363c0e50
2.HashMap讲一下,数据结构、hash过程、扩容、加载因子为何是0.75等。
https://www.cnblogs.com/lwh1019/p/13385060.html
3.current hashmap在所有情况下都是线程安全的吗?hashtable呢?
4.hashmap。hash冲突时给链表插入数据,1.7头插法,1.8尾插法。
https://blog.csdn.net/ho528528/article/details/103903998
5.HashMap:数据结构(数组加链表(或者红黑树)),为何这么设计;数组和链表的特性;元素添加的过程;扩容过程中为何不整体复制;链表为什么要转红黑树?讲下hashmap;链表转红黑树的限制为何是8;红黑树的时间复杂度;红黑树转链表的限制为何是6;
https://blog.csdn.net/v123411739/article/details/78996181
https://joonwhee.blog.csdn.net/article/details/106324537
6.讲下arraylist、hashmap、linkedlist、linkedhashmap的实现。linkedhashmap为何会有这样的特性(lru)?它有个参数,表示命中率和使用次数。lru是通过linkedhashmap实现的么?LRU如何实现的?LinkedHashMap如何实现的?LinkedHashMap是否线程安全?如何实现线程安全?有序还是无序?你如何自己实现一个LRUCache?Android里面的LRUCache是如何实现的?
https://blog.csdn.net/zlfprogram/article/details/88708508 (JDK1.6)
https://segmentfault.com/a/1190000012964859 (JDK1.8)
https://www.jianshu.com/p/b49a111147ee (LRUCache很多文章是错误的多看下面评论,会LinkedHashMap就可以)
9、数据结构:
①二叉树用的多么?哪里用过?
②二叉搜索树、AVL树,红黑树
③二叉树的使用举例。
④链表和二叉树的区别,优劣势
webview:
1、Android与js交互方式;JsBridge原理,它是如何解决安全性问题的?
https://iluhcm.com/2017/12/10/design-an-elegant-and-powerful-android-webview-part-one/
https://iluhcm.com/2018/02/27/design-an-elegant-and-powerful-android-webview-part-two/
https://www.jianshu.com/p/5e7075f4875f
UI相关:
1、View绘制流程。onMeasure、onLayout、onDraw。MeasureSpec讲一下。MeasureSpec,关键方法。2、讲下onMeasure方法:①如何测量 ②测量模式 ③入参为什么是int类型?④为什么会多次调用onMeasure和onLayout方法?自定义View,测量模式的匹配。
https://www.cnblogs.com/andy-songwei/p/10955062.html
2、View绘制流程;requestLayout和invalidate区别;invalidate每次都会触发onDraw么?View#onLayout每次会触发么?requestLayout调用后,都会调用哪些方法?
https://wanandroid.com/wenda/show/16190
https://www.jianshu.com/p/4f0f0b64381d
https://blog.csdn.net/litefish/article/details/52859300
3、自定义View的几种方式。onMeasure、onLayout、onDraw方法都何时需要重写。自定义属性的作用。讲下你的自定义View,为何如此设计?自定义View的关键步骤,注意事项,你的理解
https://www.cnblogs.com/andy-songwei/p/10979161.html
4、动画
5、讲下View绘制流程。canvas可以画Bitmap么?画布要做旋转、缩放、平移等操作该如何实现?
https://hencoder.com/ui-1-5/
https://hencoder.com/ui-1-4/
6、项目中有哪些亮点?自定义View1、直播弹幕如何实现?竖向的TextView如何实现。TextView文字描边效果如何实现。①获取TextView的行数时,StaticLayout原理,自定义View:支持换行的尾部标签的实现。
https://hencoder.com/ui-1-3/
https://github.com/liufsd/TextViewVertical
https://jaeger.itscoder.com/android/2016/08/05/staticlayout-source-analyse.html
7、RecyclerView的特点和缓存、RecyclerView的缓存,局部刷新用过么?
1、封装的Adapter讲解。
8、ListView的滑动卡顿如何优化
②MotionEvent#offsetLocation事件转发。
②onMeasure、onLayout、onDraw这三个方法中,哪个最耗时?onMeasure和onLayout呢?
⑧View#draw()方法细节
9、Choreography的作用。它的上游和下游各自是哪个。Choreography发布了订阅消息,同类型的Callback还有哪些?这些Callback之间的优先级如何?vsync机制。
https://www.jianshu.com/p/86d00bbdaf60
https://juejin.cn/post/6863756420380196877
10、Surface对象了解么?作用,何时初始化,怎么使用的。Surface和Window的关系。绘制的数据是如何提交到远端的SurfaceFlinger
main_surfaceflinger.cpp surfaceflinger.cpp(init(),)
11、GPU和surfaceFlinger之间的设计思想是什么?surfaceFlinger具体作用是什么?它对数据做了哪些操作?
SurfaceFlinger
Choreographer
Surface
https://blog.csdn.net/jiejingguo/article/details/102828820
Android的UI显示原理之Surface的创建
Android的UI显示原理之Surface的渲染
https://www.cnblogs.com/dasusu/p/8311324.html
12、硬件加速了解么?GPU如何高效绘制?
13、SurfaceView的实现
⑤一个Button的点击事件中,调用requestLayout,接下来哪些方法会被调用?
19、Activity中的Window的初始化和显示过程
⑥Window和Activity的对应关系。除了Activity还有别的方式显示Window出来么?
3、Activity#setContentView中的xml文件是如何转化成View并显示到Activity中的。
①PhoneWindow是在哪里初始化的?
②LayoutInflater是如何把xml布局文件转换成View对象的(反射)?View树如何生成的?怎么优化?
③为什么会有R文件这个映射表?直接使用资源的路径不好么?
https://www.jianshu.com/p/8766babc40e0
https://blog.csdn.net/yanbober/article/details/45970721
20、Application中可以显示Dialog么?为什么?
https://juejin.cn/post/6873669458742525960
1、悬浮窗如何实现
https://juejin.cn/post/6844904073586556935
https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650235949&idx=1&sn=0f7eded67f834d38b02f8872768cb68a&scene=38#wechat_redirect
https://mp.weixin.qq.com/s/Q9HeT39w0LXGoR_ifyd9bg
https://juejin.cn/post/6844904073586556935
https://www.jianshu.com/p/95c2fadd9aa4
事件分发:
3、事件分发。冲突解决。
12、事件分发,多点触碰处理,是在onTouchEvent方法里面。
1、滑动冲突如何解决?有几种方式?具体从哪个事件开始拦截?在哪里拦截?比如双层ViewPager嵌套的滑动冲突如何解决。
2、事件分发的具体流程。
3、讲下事件传递:
①总体流程
②DOWN事件拦截后,后续事件如何处理?
③dispatchTouchEvent方法返回true后事件如何处理?
11、讲下事件分发。如果onInterceptTouchEvent返回true,但是onTouchEvent返回了false,是什么效果?如果还想让其他View接收事件,该怎么做?
15、事件分发,如何处理滑动冲突
10、事件分发
https://juejin.cn/post/6922300686638153736
网络:
1、http消息体讲一下。消息首行的方法有哪几种?如何上传数据?请求头关键字段和请求体格式
2、http post请求上传大文件,如何实现?分块上传呢?用到的关键Header有哪些?
3、上传的重试机制
4、网络分层架构,https的连接过程,tcp和udp的区别。
5、TCP和UDP区别,TCP为何是三次握手,为何是四次挥手
6、http和https:
①它们的区别:https多了tls层。对称加密和非对称加密。
②具体验证的过程是怎样的?
https://www.jianshu.com/p/116ebf3034d9
7、okhttp源码。网络优化:
OkHttp,Retrofit,Rxjava:
7、Rxjava的map和flatmap区别,flatmap为何要生成多个Observable?Rxjava的线程种类,线程切换如何实现的?
9、rxjava源码。用过哪些操作符?map和flatmap区别。
16、滑动窗口的最大值。
https://mp.weixin.qq.com/s/UiGEzXoCn3F66NRz_T9crA
Bindler,Handler
1、Handler讲一下。Message#what的不同值,会影响Message在MessageQueue中的顺序么?
2、Handler机制。MessageQueue中的Message是如何排列的?Msg的runnable对象可以外部设置么,比如说不用Handler#post系列方法(反射可以实现)
3、Handler。Looper.loop( )为何不会阻塞进程。
https://www.jianshu.com/p/70d5785ee4c3
https://mp.weixin.qq.com/s/ClTE15s9qUaNsInIIwX57w
4、IdleHandler调用时机
https://juejin.cn/post/6844904150140977165
5、ThreadLocal
https://juejin.cn/post/6844904150140977165
https://mp.weixin.qq.com/s?__biz=MzA5MzI3NjE2MA==&mid=2650243742&idx=1&sn=27de324a1685ebbb112a239777eb7f52&chksm=886373f1bf14fae7c7515c76d65707dc6f026996c7cbfe3df16a52d86ced2904e154941f744f&scene=38#wechat_redirect
https://mp.weixin.qq.com/s/F9c9q0IO4FvnXVvCntL0Iw
7、linux中进程间通信的方式,Android为何会自己搞一个?
6、binderService方法中的回调具体运行在哪个线程?binder线程池最大线程数是多少?自定义的Callback远程调用,运行在哪个线程?为何不是主线程,如果运行在主线程会有哪些问题?
7、binder线程池的最大线程个数;binder线程池中如果满了,对待新来的任务,会如何处理?此时client端会是什么效果?
https://blog.csdn.net/qq_39037047/article/details/88066589
9、linux下常见的进程间通信方式,Android为何自己搞一个Binder,有何优势?binder安全原理、讲下aidl内容。8、binder的mmap
5、Android为何会使用binder来进行进程间通信。
10、binder是cs架构,Server端的binder都是运行在同一个线程里面么?
http://gityuan.com/android/
https://mp.weixin.qq.com/s/Ef2Qy_xFeI6WU3Q0wf5czA
https://mp.weixin.qq.com/s/IbIhw71iiK6eFihgTYB6gw
https://mp.weixin.qq.com/s/GRkrbJ5LrRwmJxuidGB3rQ
https://mp.weixin.qq.com/s/gHtZ9pjMJ-jXA12rvXA4cg
https://mp.weixin.qq.com/s/LH_JR5Rwh1JL4B6qQkEv9Q
https://mp.weixin.qq.com/s/1d_LHbzfp4l8qQEu7tfKZg
https://mp.weixin.qq.com/s/wD3Io-ikS1VCljNkxEb6tQ
https://juejin.cn/post/6867139592739356686
多线程
1、线程、进程的区别
多进程⽅式确实可以实现并发,但使⽤多线程,有以下⼏个好处:
进程间的通信⽐较复杂,⽽线程间的通信⽐较简单,通常情况下,我们需要使 ⽤共享资源,这些资源在线程间的通信⽐较容易。 进程是重量级的,⽽线程是轻量级的,故多线程⽅式的系统开销更⼩。
进程和线程的区别
进程是⼀个独⽴的运⾏环境,⽽线程是在进程中执⾏的⼀个任务。他们两个本质的 区别是是否单独占有内存地址空间及其它系统资源(⽐如I/O):
进程单独占有⼀定的内存地址空间,所以进程间存在内存隔离,数据是分开 的,数据共享复杂但是同步简单,各个进程之间互不⼲扰;⽽线程共享所属进 程占有的内存地址空间和资源,数据共享简单,但是同步复杂。
进程单独占有⼀定的内存地址空间,⼀个进程出现问题不会影响其他进程,不 影响主程序的稳定性,可靠性⾼;⼀个线程崩溃可能影响整个程序的稳定性, 可靠性较低。
进程单独占有⼀定的内存地址空间,进程的创建和销毁不仅需要保存寄存器和 栈信息,还需要资源的分配回收以及⻚调度,开销较⼤;线程只需要保存寄存 器和栈信息,开销较⼩。
另外⼀个重要区别是,进程是操作系统进⾏资源分配的基本单位,⽽线程是操作系 统进⾏调度的基本单位,即CPU分配时间的单位 。
2、多线程如何实现?有哪些方式?
3、多线程为何不安全,Java为何会有线程安全问题?如何解决?
1.内存可见性,数据竞争,JMM没有这样的保证⽐如,在当前线程把写过的数据缓存在本地内存中,在没有刷新到主内存之前,这个写操作仅对当前线程可⻅;
从其他线程的⻆度来观察,这个写操作根本没有被当前线程所执⾏。只有当前线程把本地内存中写过的数据刷新到主内存之后,这个写操作才对其他线程可⻅
2.同步,正确的happen-before,如果操作A happens-before操作B,那么操作A在内存上所做的操作对操作
B都是可⻅的,不管它们在不在⼀个线程。
4、ThreadLocal干嘛的?用法和原理。
https://baijiahao.baidu.com/s?id=1666270412047190730&wfr=spider&for=pc
https://www.jianshu.com/p/1e4eaedbac19
5、synchronized和volatile的区别?为何不用volatile替代synchronized?synchronized的同步原语?Java的线程同步方式;synchronized和Lock的实现及区别?讲一下锁,synchronized和Lock?CAS原理。读写锁和ReentrantLock,synchronized和读写锁的区别?
volatile和synchronized的区别:
volatile关键字可以保证多线程操作共享变量的可⻅性以及禁⽌指令重排序(内存屏障保证)
synchronized关键字不仅保证可⻅性,同时也保证了原⼦性(互斥性)
volatile和锁的区别:
volatile仅仅保证对单个volatile变量的读/写具有原⼦性,⽽锁可以保证整个临界区代码的执⾏具有原⼦性。
所以在功能上,锁⽐volatile更强⼤;在性能上,volatile更有优势
volatile语义:指的是当⼀个线程对 volatile 修饰的变量进⾏写操作(⽐如step 2)时,JMM会⽴即把该线程对应的本地内存中的共享变量的值刷新到主内存;
当⼀个线程对 volatile 修饰的变量进⾏读操作(⽐如step 3)时,JMM会把⽴即该线程对应的本地内存置为⽆效,从主内存中读取共享变量的值。
synchronized原语:synchronized又被称为内置锁,线程进入同步代码块时会获得该锁,退出代码块自动释放锁,锁可以让线程在临界区互斥执行,呈现串行语义。
所以synchronized可以解决任何并发情况下线程安全的问题,包含原子性,可见性,有序性。
java中每一个对象都可以作为锁,根据synchronized修饰的目标不同锁定的对象有如下3中情况:
1、修饰普通方法,锁当前对象
2、修饰静态方法,锁当前类的class对象
3、修饰代码块,锁括号中的对象
CAS原理
CAS的全称是:⽐较并交换(Compare And Swap)。在CAS中,有这样三个值:
V:要更新的变量(var)
E:预期值(expected)
N:新值(new)
⽐较并交换的过程如下:
判断V是否等于E,如果等于,将V的值设置为N;如果不等,说明已经有其它线程
更新了V,则当前线程放弃更新,什么都不做。
所以这⾥的预期值E本质上指的是“旧值”。
CAS是⼀种原⼦操作,它是⼀种系统原语,是⼀条CPU的原⼦指令,从CPU层⾯保证它的原⼦性
当多个线程同时使⽤CAS操作⼀个变量时,只有⼀个会胜出,并成功更新,其余均会失败,但失败的线程并不会被挂起,仅是被告知失败,并且允许再次尝试,
当然也允许失败的线程放弃操作。
ABA问题
所谓ABA问题,就是⼀个值原来是A,变成了B,⼜变回了A。这个时候使⽤CAS是检查不出变化的,但实际上却被更新了两次。
ABA问题的解决思路是在变量前⾯追加上版本号或者时间戳。从JDK 1.5开始,JDK的atomic包⾥提供了⼀个类 AtomicStampedReference 类来解决ABA问题。
synchronized 有什么不⾜之处。
如果临界区是只读操作,其实可以多线程⼀起执⾏,但使⽤synchronized的话,同⼀时间只能有⼀个线程执⾏。
synchronized⽆法知道线程有没有成功获取到锁
使⽤synchronized,如果临界区因为IO或者sleep⽅法等原因阻塞了,⽽当前线程⼜没有释放锁,就会导致所有线程等待。
可重⼊锁和⾮可重⼊锁
ReentrantLock,synchronized 都是可重入的。
公平锁与⾮公平锁
ReentrantLock⽀持⾮公平锁和公平锁两种
读写锁和排它锁
synchronized⽤的锁和ReentrantLock,其实都是“排它锁”。也就是说,这些锁在同⼀时刻只允许⼀个线程进⾏访问
读写锁可以再同⼀时刻允许多个读线程访问。Java提供了ReentrantReadWriteLock类作为读写锁的默认实现,内部维护了两个锁:⼀个读锁,⼀个写锁。
通过分离读锁和写锁,使得在“读多写少”的环境下,⼤⼤地提⾼了性能。
https://tech.meituan.com/2018/11/15/java-lock.html
类锁和对象锁互斥么?非静态方法A和B在同一个类中,方法A用synchronized修饰,当A方法因为多线程请求有线程阻塞在对象锁上的时候,B方法的访问受不受影响?
https://blog.csdn.net/u011402896/article/details/79363165
https://blog.csdn.net/abc1234z0/article/details/103654083
https://blog.csdn.net/github_37130188/article/details/97638651
synchronized实现?
https://www.cnblogs.com/aspirant/p/11470858.html
6、锁的几种状态
无锁,偏向锁,轻量级,重量级
https://tech.meituan.com/2018/11/15/java-lock.html
7、线程的使用。讲下线程池的类型,线程池对象的参数,线程池最大线程数和核心线程数的关系,task的优先级如何实现?(优先级队列),线程池的参数,线程池如何配置,核心线程数你一般给多少
https://tech.meituan.com/2020/04/02/java-pooling-pratice-in-meituan.html
8、线程状态
t1、t2、t3三个线程,如何让三个线程按照顺序依次打印1-100。手写。
8、Lock的实现,以及与synchronized的区别
优化类
1、讲下OOM原理,OOM和内存泄漏,内存泄漏检测及优化,讲下leakCanary原理,为什么不用虚引用?引用队列里面存的是什么?
https://www.jianshu.com/p/2d6e2506d246
2、图片内存优化;大图加载优化,原理。图片加载优化,不要讲公式,就讲你怎么做的。glide源码。大图加载;Bitmap内存复用,图片内存的计算。Bitmap内存计算规则,Bitmap内存大小,注意事项,如何优化
①在不影响图片质量的前提下,如何减少内存?
②图片显示不全、变形怎么处理?
xhdpi的图片放到xxhdp的手机上,内存会如何变化;
https://juejin.cn/post/6844904166138069005(bitmap缓存,bitmap复用Options.inBitmap,修改Config.RGB_565,修改采样率Options.insampleSize,Options.inJustDecodeBound,图片xxhdpi文件夹中位置)
https://juejin.cn/post/6854573209635782664(Glide)
3、包体积优化
https://juejin.cn/post/6844904103131234311
https://juejin.cn/post/6872920643797680136
https://mp.weixin.qq.com/s/BVQxgM-dpwoPJJ8P_c6u4w
https://tech.meituan.com/2017/04/07/android-shrink-overall-solution.html
4、启动速度优化,启动速度优化,IdleHandler用法,冷启动热启动优化
https://juejin.cn/post/6844903919580086280
4、在同一个手机上,如果把drawable-xxhdpi下的图片移动到drawable-xhdpi下,图片内存是如何变的,解释原理。如果在drawable-hdpi、drawable-xxhdpi下放置了图片,但是手机是xhdpi的,会优先加载哪个,加载优先级是怎样的?如果是400 * 800,1080 * 1920这种呢,会如何查找?xhdpi和400*800同时存在时,会如何查找?布局文件呢?8、drawable下所以的格式都能转成webp么?哪些不能转?
7、hdpi和xxhdpi的手机,分别加载xhdpi下的图片,会缩放图片么?如果会缩放,是如何缩放的,像素点是如何补全或者减少的?图片在内存中的大小会如何变化?
6、讲下ANR
https://blog.csdn.net/chewbee/article/details/72670603
https://mp.weixin.qq.com/s/4w202K0WnNrazmEHd6grQA
https://juejin.cn/post/6844903715313303565
15、卡顿优化
11、代码质量如何控制?
12、app质量如何控制?
13、网络优化,网络监控。
13、讲下你做过的首页优化。
9、布局优化
13、使用Application#onTrimMemory优化
14、使用ActivityLifecycleCallbacks做了哪些事情?
16、绘制优化。
2、View绘制优化
3、性能优化:UI优化、内存泄漏
5、网络优化,数据库优化
https://blog.csdn.net/yanbober/article/details/48394201
https://zhuanlan.zhihu.com/p/30691789
JVM,热修复,插件化:
1、Java内存模型(JMM),jvm的运行时数据结构。栈帧中会有什么异常?方法区里面存放的是什么数据?
类加载过程;
https://segmentfault.com/a/1190000020206676?utm_source=tag-newest
https://www.jianshu.com/p/6e2bc593f31c
https://www.jianshu.com/p/3ca14ec823d7
https://blog.csdn.net/xlh1191860939/article/details/105894767
2、成员变量和局部变量的区别。为何成员变量需要jvm在对象初始话过程中赋默认值?Java中进程间共享的数据是放在JVM那个分区的?Java中主进程和子进程间的通信,通过哪块内存区域?
https://blog.csdn.net/liufangbaishi2014/article/details/86213846
https://www.cnblogs.com/yanl55555/p/12614141.html
3、讲下Java的双亲委派
https://www.jianshu.com/p/8743d8062bb6
4、讲下GC root的类型。GCRoot,垃圾回收算法。GCRoot,举例说明。比如说Activity和它的匿名内部类Handler,分析下引用链,对应的gcroot是哪个?
https://www.cnblogs.com/KeleLLXin/p/14061269.html
https://www.jianshu.com/p/108ddab3ad3f
https://www.jianshu.com/p/0269237a229d
https://blog.csdn.net/weixin_40334045/article/details/106762338
18、Aop、AspectJ、ASM了解么
5、Android热修复原理,tinker的patch文件如何生成,patch文件是全部加载dex文件首部么?热修复用的什么方案?dex,so,资源的合并
https://blog.csdn.net/lmj623565791/article/details/54882693
https://blog.csdn.net/lmj623565791/article/details/60874334
https://blog.csdn.net/lmj623565791/article/details/72667669
https://www.jianshu.com/p/af8c47fabb12
https://juejin.cn/post/6844903902152769544
6、插件化原理
https://juejin.cn/post/6844903885476233229
https://juejin.cn/post/6844903894271705095
VirtualAPK
https://blog.csdn.net/dehang0/article/details/107131217/
https://blog.csdn.net/qq_35559358/article/details/78979439
https://blog.csdn.net/lmj623565791/article/details/75000580
操作系统
①讲一下用户态和内核态
②为何会有用户态和内核态划分
kotlin,泛型
1、说一下kotlin的优缺点。let和with的区别
https://www.jianshu.com/p/298f77dc389e
2、函数式编程如何理解?
3.、kotlin的协程,构造函数。
https://blog.csdn.net/xlh1191860939/article/details/79412319
https://mp.weixin.qq.com/s/84fSUYQt3T_Fa5B5s5ihvA
4.、kotlin的扩展,属性是否可以扩展,是否可以扩展跟现有方法签名相同的方法
https://blog.csdn.net/xlh1191860939/article/details/79625234
3、kotlin的lateinit和by lazy的区别
5、kotlin泛型:out和in。kotlin真泛型的实现
4、泛型:为何会有协变和逆变,PECS规则。泛型中T和?的区别,List<?>和List有什么区别;泛型里的super和extends区别;
https://blog.csdn.net/m0_37796683/article/details/108584499
6、既然泛型有编译期类型擦除,那么运行时无法获取到具体类型;而反射能在运行时获取到Class的类型;它们一个获取不到,一个可以获取到,这不就是矛盾么?请解释下细节。
https://blog.csdn.net/briblue/article/details/76736356
7、泛型和泛型擦除;泛型为何会有擦除;擦除的时机;泛型的编译器类型检查。
21、泛型擦除,为何会有擦除?擦除的时机。通配符。
Gradle
1、Gradle的实现,gradle中task的生命周期。
https://www.bilibili.com/video/av55941638/
2、gradle生命周期,task,插件
https://www.cnblogs.com/davenkin/p/gradle-learning-1.html
https://juejin.cn/post/6844903870091493384
项目打包上线相关
1、混淆的步骤和原理
https://www.jianshu.com/p/d768f6d1d93b
https://mp.weixin.qq.com/s?__biz=MzA3NTYzODYzMg==&mid=214472913&idx=1&sn=92b54b5fcd9bbab6513e46d92095a07f&scene=1&srcid=0427eTI2x0dnk2EsFnysnjZI#rd
2、module间的资源文件merge后,生成过多的R文件,处理过么?如何处理?
https://yuweiguocn.github.io/android-r-inline/
https://juejin.cn/post/6916431393648017421
https://www.wanandroid.com/wenda/show/8735
https://www.wanandroid.com/wenda/show/9067
https://www.wanandroid.com/wenda/show/9088
https://wanandroid.com/wenda/show/9974
3、Android项目中都包含哪些资源?apk打包流程。apk解压后都包含哪些资源?R文件打包后生成的文件是哪种?
4、dex文件结构了解过么?为何会有65535的限制?mutildex技术了解么?这项技术的目的是什么?
Activity等四大组件,Application,进程保活等Android相关问题
1、application中持有静态的用户信息,有何缺点?如何改进?
http://zmywly8866.github.io/2014/12/26/android-do-not-store-data-in-the-application-object.html
2、Application启动流程
https://www.jianshu.com/p/03ec8203919e
3、讲一下Activity的TaskRecord,也就是四种启动模式。activity启动模式:standard、singleTop、singleTask、singleInstance。taskAffinity,allowTaskReparting,常见应用场景。
https://www.jianshu.com/p/94816e52cd77
https://www.jianshu.com/p/3b9519f64db1
4、启动模式及其用法。A应用的A1页面启动B应用的B1页面,A1和B2都是standard模式,B1启动后B1在那个任务栈,按下back键后显示那个页面,再按一次back键呢? A1,退出A应用。
5、Activity的onSaveInstance方法何时调用?它跟onPause、onStop的调用顺序如何?
https://wanandroid.com/wenda/show/13906
6、Activity A启动Activity B,调用顺序。最后Activity A的onStop一定会调用么?
https://www.jianshu.com/p/b1ff03a7bb1f
7、ActivityA启动了ActivityB后,两个Activity的生命周期是怎样的?
8、activity生命周期。A启动B,生命周期;B回到A,生命周期
9、Activity生命周期,按Home按键后的生命周期?
10、Activity实现了一个Lifecycle接口,有了解么?
https://blog.csdn.net/liuhe688/article/details/6733407
https://blog.csdn.net/weixin_43589682/article/details/97030740
11、startActivity方法是异步的么?同步的。
12、Activity启动流程:AMS、zygote、ApplicationThread之间交互;oneway特性(server端不阻塞和client端串行化),非oneway的情况有哪些?oneway和非oneway了解么?举例说明
https://www.jianshu.com/p/0b22194b131c
https://mp.weixin.qq.com/s/Jc2mrxeMVTJXudoPx5K4-w
13、Activity和Fragment的生命周期;Fragment#onHiddenChanged是生命周期方法么?如何触发?
https://mp.weixin.qq.com/s/WWNIkhptHnXYZUlKaQO_Yg
12、Activity和Fragment的通信方式;系统为何会设计Fragment#setArgument方法。
5、Android里面进程间通信方式,ContentProvider可以用file实现么?
5、ContentProvider具体实现。ContentProvider启动流程
https://www.jianshu.com/p/3c81df444034
https://mp.weixin.qq.com/s/jhVzFa6DatRNK9anuDoSUA
https://www.jianshu.com/p/7a6b786ba728
2、通知的类别
3、为何需要进程保活?如何做?进程优先级
https://www.jianshu.com/p/53c4d8303e19
https://www.jianshu.com/p/e43d52507ac7
https://www.jianshu.com/p/2e01569f8ba8
7、本地广播为何效率高?LocalBroadcastReceiver实现
https://www.jianshu.com/p/a842432a4fc2
https://www.jianshu.com/p/9a1741afc2e0
③postDelay(1s)是如何保证1s时间执行的?
12、SharedPreference的apply和commit区别;apply会不会导致ANR;SharedPreference的替代方案
https://www.jianshu.com/p/4025d02a8380
8、Parcelable和Serializable本质区别,不要说用法,说原理。
https://www.wanandroid.com/wenda/show/9002
Flutter
2、flutter的生命周期管理?讲讲做过的flutter项目。flutter的路由管理方式。除了默认的两种路由方式,有没有考虑过记录路由状态?
JetPack
Native
程序员的自我修养 c程序在内存中的状态
Android C++ 高级编程-使用NDK JNI
安卓NDK API
安卓源码
反射hook技术,aspectJ技术,动态代理技术,ASM
ASM使用
https://blog.csdn.net/lingjianglin/article/details/105614948
https://blog.csdn.net/qq_23992393/article/details/103677719
https://www.jianshu.com/p/a2d7565945d8
ARouter
https://juejin.cn/post/6895710601079685133
https://juejin.cn/post/6895712042917838861
优化建议
https://juejin.cn/post/6847902225239539720
https://juejin.cn/post/6844904182982377480
OKHttp
面试题
https://mp.weixin.qq.com/s/Q6bDLQdEBzaRUUe7oYAXkg
加固
https://juejin.cn/post/6844904176070164488