Android 知识点合集

348 阅读10分钟

Java基础、Kotlin基础、Android基础(重要)。

App启动流程。 Handler消息机制。 View绘制流程。 事件分发机制。 Jetpack常用组件原理。 Kotlin协程原理。 性能优化。 多线程、并发。 组件化开发。 热修复原理。 常用三方库原理。 常见的设计模式。 数据结构和算法。

GC原理,有哪几种GC方式

所谓GC就是 内存空间的释放 说起GC原理,先说几个术语. 垃圾: 需要回收的对象 根: 判断对象是否引用的起点

有哪几种基本实现方式: 1 标记清除方式 标记清除(Mark and Sweep)是最早开发出来的GC算法(1960年)。 原理: 从根部开始将可能被引用的对象进行标记,然后没有标记的对象作为垃圾进行回收. 缺点: 如果分配了大量对象,其中只有一小部分对象存活的情况下,所消耗的时间超过必要的值,这是因为在清除阶段还需要对大量死亡对象进行扫描.

2 复制收集方式 原理: 从根部将引用的对象复制到另一空间,然后再将复制的对象所引用的对象用递归的方式复制下去 优点: 复制收集方式的过程相当于只存在于标记清除方式中的标记阶段 , 由于 标记清除方式 清除阶段中需要对所有对象进行扫描,这样对存在大量对象并且有大量对象已死亡的情况下,必然会造成大量资源和性能没必要的开销而在复制收集方式中就不存在这样的开销。 缺点: 但是和标记相比,将对象复制一份的开销相对要大,因此在“存活“对象相对比例较高的情况下,反而不利。

3 引用计数法 原理: 对每个对象保存该对象的引用计数,当引用发生增减时,该计数进行增减 4 可达性分析 原理: 从根部开始,从这些节点往下分析,搜索所走过的路径为一条引用链,当一个对象没有任何链引用的时候,就证明这个对象是无用的

自定义View需要注意哪些

1、让View支持wrap_content属性 直接继承View或ViewGroup的控件,如果不在onMeasure中做处理,当控件设置wrap_content属性时无法达到预期效果。wrap_content属性会失效。 2、让View支持padding属性 直接继承View的控件,如果不处理padding属性,则padding会失效。如果继承ViewGroup的控件,还需要处理子元素的margin属性。 3、为了让控件使用更方便,尽量添加自定义属性。 4、如果View需要响应用户touch事件,需要处理好滑动冲突。 5、尽量不要在View中使用Handler,可以用post方法代替。 6、如果View中有子线程或者动画,要在onDetachedFromWindow中及时停止。 7、在onDraw方法中尽量不要创建临时对象,不要做任何耗时的操作,不要执行大数据量的循环操作。

事件分发机制 www.jianshu.com/p/38015afcd…

ViewModel原理 www.zyiz.net/tech/detail… blog.csdn.net/u012165769/…

屏幕旋转ViewModel怎么做到保存数据的 blog.csdn.net/csdn_mzq/ar…

LiveData原理 blog.csdn.net/nideyida1/a…

组件化开发 blog.csdn.net/As_thin/art…

浏览器输入一个地址,按下回车,这个过程是什么样的 blog.csdn.net/weixin_4418…

简单介绍一下TCP www.likecs.com/show-204836…

简单介绍一下Https blog.csdn.net/jjlovefj/ar…

说说对称加密和非对称加密,说说公钥 baijiahao.baidu.com/s?id=165924…

并发操作如何保证线程安全 blog.csdn.net/hyx12492738…

锁有哪些 zhuanlan.zhihu.com/p/383373017

简单介绍一下HashMap blog.csdn.net/weixin_4387…

Arraylist是线程安全的吗 blog.csdn.net/weixin_4239…

知道CAS、原子性吗 blog.csdn.net/TT_130616/a… image.png

AtomicBoolean和boolean的区别 blog.csdn.net/qq_37896194…

用过哪些设计模式 baijiahao.baidu.com/s?id=170195…

介绍一下观察者模式 blog.csdn.net/shulianghan…

用过哪些排序算法 blog.csdn.net/HappySundlu…

介绍一下贪心算法 blog.csdn.net/qq_45954420…

介绍一下快排原理 blog.csdn.net/JohnGene/ar… 算法,给定一个有序不重复数组,使用时间复杂度小于N方的方法,找到所有两两相加等于target值的组合:

int[] a={1,2,3,4,5,6,7,8} int target=7

Java对象生命周期

www.baidu.com/link?url=w5…

  1. 通过aapt打包res资源文件,生成R.java、resources.arsc和res文件(二进制&非二进制如res/raw和pic保持原样)。resources.arsc保存的是一个资源索引表,可以理解为一个map映射表,map的key是R.java中的资源ID,而value就是其对应的资源所在路径;R.java定义了各个资源ID常量,这两者结合就可以在代码中找到对应的资源引用。
  2. 处理.aidl文件,生成对应的Java接口文件
  3. 通过Java Compiler编译R.java、Java接口文件、Java源文件,生成.class文件
  4. 通过dex工具,将.class文件和第三方库中的.class文件处理生成classes.dex
  5. 通过apkbuilder工具,将aapt生成的resources.arsc和res文件、assets文件、动态库.so文件、AndroidManifest.xml 清单文件和classes.dex一起打包生成apk
  6. 通过jarsigner对上面的apk进行debug或者release签名
  7. 通过zipalign工具,将签名后的apk进行对齐处理

blog.csdn.net/androiddevs…

www.jb51.net/article/260…

Jetpack用了哪些组件。 blog.csdn.net/Androidxiao…

ViewModel如何数据共享。 www.baidu.com/link?url=Xg…

ViewModel在Activity旋转时如何保存数据的。 blog.csdn.net/csdn_mzq/ar…

ViewModel怎么创建的,存在哪。 cloud.tencent.com/developer/a… www.baidu.com/link?url=cu… www.jianshu.com/p/7266abb79…

使用ViewModel过程中有没有遇到什么问题。 www.baidu.com/link?url=yr… www.baidu.com/link?url=yr… www.baidu.com/link?url=d0…

Jetpack学习 www.jianshu.com/p/4f87e68c7…

LiveData原理,怎么派发数据的。 blog.csdn.net/qq_21349039… 将一个Observer注册到LiveData会经历了什么? 首先会将Observer与其宿主包装成一个WrapObserver,继承自LifecycleObserver 宿主将WrapObserver注册到Lifecycle监听自身状态,此时会触发Lifecycle的事件回调 判断监听的宿主当前状态,是否已经销毁,如果是的话则进行反注册 如果不是,则进行至少一次的状态对齐,如果当前监听的宿主是活跃的则继而触发事件分发逻辑 如果版本号不一致,则进行触发监听器,同步数据源(粘性事件)

postValue是怎么执行的。

使用LiveData的过程中有没有遇到什么问题。 blog.csdn.net/meijing11/a…

自定义View有哪些注意事项。 1、让View支持wrap_content属性 直接继承View或ViewGroup的控件,如果不在onMeasure中做处理,当控件设置wrap_content属性时无法达到预期效果。wrap_content属性会失效。 2、让View支持padding属性 直接继承View的控件,如果不处理padding属性,则padding会失效。如果继承ViewGroup的控件,还需要处理子元素的margin属性。 3、为了让控件使用更方便,尽量添加自定义属性。 4、如果View需要响应用户touch事件,需要处理好滑动冲突。 5、尽量不要在View中使用Handler,可以用post方法代替。 6、如果View中有子线程或者动画,要在onDetachedFromWindow中及时停止。 7、在onDraw方法中尽量不要创建临时对象,不要做任何耗时的操作,不要执行大数据量的循环操作。

简单介绍一下协程。 www.jianshu.com/p/2d86f8c58…

多个协程怎么保证数据安全的。

www.baidu.com/link?url=3E…

Java有哪些数据结构。

www.baidu.com/link?url=o6…

Arraylist是线程安全的吗。

String,StringBuilde,StringBuffer的区别。

Java中的锁介绍一下,同步锁举例。

四大引用区别,场景举例。

Activity生命周期。

Fragment生命周期。

Fragment销毁生命周期执行顺序。

自定义流程,举例。

自定义View刷新方式有哪些,执行流程。

事件分发原理,举例,延伸。

滑动冲突怎么解决。

怎么自己实现一个长按事件。

Service是哪个线程,怎么通信。

Handler消息机制。

Handler发送消息是一定立即执行的吗。

Handler运行在哪个线程。

子线程可以创建Handler吗,写法有哪些区别。

Kotlin定义变量的方式有哪些。

lateinit怎么确保使用时已经初始化。

let,run,apply介绍,区别。

inline原理。

简单介绍下协程。

协程并发怎么处理。

协程底层是怎么实现的。

内存泄露原理,举例场景。

启动优化。

做的最有成就感的项目是哪个。

印象最深刻的项目是哪个。

LiveData底层实现原理。

启动优化。

包体积优化。

自定义View流程。

View异步加载。

有用过哪些设计模式。

介绍一下单例,饿汉式,懒汉式,双重锁。

代理模式和装饰模式的区别。

策略模式和状态模式的区别。

说说观察者模式。

有看过哪些三方库的源码。

Glide四层缓存机制。

AMS了解多少。

简单介绍一下HashMap。

HashMap调用put的执行流程。

Activity启动流程。

Binder机制。

Handler消息机制。

Handler是怎么实现主线程和子线程的通信的。

Looper卡死为什么不会造成主线程的阻塞。

了解过内存泄露吗。

是怎么发现内存泄露的,怎么处理的。

线上的内存泄露是怎么监控的。

LeakCanary实现原理。

软引用和弱引用的区别。

了解过ANR吗。

什么原因会造成ANR。

Activity的响应时间为什么是5s。

事件分发机制。

怎么解决滑动冲突的。

录音功能是怎么做的。

编码解码相关。

包体积优化做了哪些工作。

挑一个项目详细说一下,以及相关技术栈。

介绍一下协程机制。

说一下Dispatchers,withContext,Scope他们的作用。

说一下你理解的MVP,MVVM。

Flutter相关。

性能优化做了哪些工作。

编译速度怎么提升的。

内存泄露。

LeakCanary检测原理。

热修复,Sophix原理,ClassLoader。

Apk打包流程。

多线程并发,如何保证线程安全。

synchronized修饰方法和修饰代码块有什么区别。

技术调研你是怎么做的,会考虑哪些因素。

说一下MVVM。

用过Jetpack中的哪些组件。

LiveData是怎么做数据派发的。

ViewModel屏幕旋转的时候怎么做到不丢失数据的。

使用MVVM的过程中有遇到什么问题吗。

性能优化做了哪些工作。

内存泄露有哪些场景。

LeakCanary检测原理。

如果让你做一个自动化的工具去检测图片过大并自动压缩你会怎么做。

自定义View画板是怎么做的。

怎么检测页面的FPS。

Handler在onCreate中发送大量数据会导致主线程卡顿吗。

LayoutInflater.inflate有几个参数,分别是什么意思。

Android中的Context了解多少。

Application里面可以弹窗吗。

Activity、Window、View三者的关系。

OkHttp中有哪些设计模式。

Retrofit中有哪些设计模式。

Retrofit.create做了哪些工作。

自定义一个圆角View。

协程launch有哪些参数。

说说by关键字。

代理和委托的区别。

双亲委托模式。

有几种获取view宽高的方式。

view.post为什么可以获取到。

getWidth和getMesureWidth的区别。

手写遍历二叉树。

手写双重锁单例。

手写插入排序。

手写双数组去重并排序。

如何判断链表有环。

还有一些公司的没有记,比如蔚来、中欧基金、阿里等,如果上面这些你能掌握大部分,自然也不在话下。

Kotlin和Java混编有哪些需要注意的。