基础知识

51 阅读4分钟

1.进程、线程、协程? blog.csdn.net/Mind_progra…

进程就是应用程序的启动实例。比如我们运行一个游戏,打开一个软件,就是开启了一个进程。 线程从属于进程,是程序的实际执行者。一个进程至少包含一个主线程,也可以有更多的子线程。
进程是资源分配的基本单位,线程是操作系统调度的基本单位。
协程不是被操作系统内核所管理,而完全是由程序所控制(也就是在用户态中执行) 这样带来的好处就是性能得到了很大的提升,不会像线程切换那样消耗资源。

2、 开启协程的3种方式 blog.csdn.net/ChinaDragon…

runBlocking 运行一个协程并且会阻塞当前线程,直到它完成。
Launch 启动一个新的协程,不会阻塞当前线程,并且返回一个Job,可以取消。
Async async和await是两个函数,这两个函数在我们使用过程中一般都是成对出现的。 async用于启动一个异步的协程任务,await用于去得到协程任务结束时返回的结果,结果是通过一个Deferred对象返回的。

3、 协程的4种启动模式 blog.csdn.net/ChinaDragon…

DEFAULT 协程创建后,立即开始调度,协程在调度前可以被取消。
ATOMIC 协程创建后,立即开始调度,协程执行到第一个挂起点之前不响应取消。
LAZY 协程创建后,不会被调度,只有协程被需要时,包括主动调用协程的 start()、join()、await() 等函数时才会开始调度,协程在调度前可以被取消。
UNDISPATCHED 协程创建后立即在当前函数调用栈中执行,直到遇到第一个挂起点后才会切换到协程上下文中执行。

4、 Kotlin 中的CoroutineDispatcher

  • Dispatchers.Default:内部是Java线程池

    • 默认的调度器,适合处理后台计算,是一个CPU密集型任务调度器。如果创建 Coroutine 的时候没有指定 dispatcher,则一般默认使用这个作为默认值。Default dispatcher 使用一个共享的后台线程池来运行里面的任务。注意它和IO共享线程池,只不过限制了最大并发数不同。
  • Dispatchers.IO:RxJava中也有一个这样的I/O

    • 顾名思义这是用来执行阻塞 IO 操作的,是和Default共用一个共享的线程池来执行里面的任务。根据同时运行的任务数量,在需要的时候会创建额外的线程,当任务执行完毕后会释放不需要的线程。
  • Dispatchers.Unconfined:

    • 由于Dispatchers.Unconfined未定义线程池,所以执行的时候默认在启动线程。遇到第一个挂起点,之后由调用resume的线程决定恢复协程的线程。
  • Dispatchers.Main:

    • 指定执行的线程是主线程,在Android上就是UI线程·

4、 加密算法 blog.csdn.net/gpf13202536…

MD5(Message-Digest消息摘要):不可逆,长度固定(32位),容易计算,仅一字节只差加密结果都会有很大区别,通常情况下为了让加密过程变得不可预测,我们会进行加密操作。

对称加密:DES,AES优点:算法公开、计算量小、加密速度快、加密效率高 缺点:双方都使用同样的密钥,密钥可以自己指定,并且只有一把,如果密钥泄漏数据就会被解密。

非对称加密:如RSA加密算法公钥加密只能私钥解密,私钥加密也只能公钥解密

5、 Android 常用设计模式 www.jianshu.com/p/c42ab0454…

6、 什么是内存泄漏? blog.csdn.net/tangweiguo0…

定义:内存泄漏是指程序中已动态分配的内存由于某种原因未能释放,导致系统内存的浪费,最终可能导致应用崩溃或性能下降。
在 Android 中的表现:Activity 或 Fragment 被销毁后,仍然被其他对象持有引用,导致无法被垃圾回收器回收。

7、 Android 四种引用类型 blog.csdn.net/yu540135101…

强引用(Strong Reference) 即使内存不足,JVM宁愿抛出OutOfMemory错误,也不会回收这种对象。
软引用(Soft Reference) 会在JVM内存不足时既OutOfMemory之前将这些对象列入回收范围。
弱引用(Weak Reference) 当JVM进行GC操作时,无论当前内存是否足够,都会被回收。
虚引用(Phantom Reference)

**8、什么是MVVM架构?juejin.cn/post/736875…

MVVM(Model-View-ViewModel)是一种软件架构设计模式,用于将业务逻辑、界面表示和用户交互分离。MVVM 架构包含以下三个主要组件:

  • Model:负责处理数据和业务逻辑。
  • View:负责显示 UI,并将用户操作传递给 ViewModel。
  • ViewModel:负责处理 View 的输入,并更新 Model,同时通知 View 更新。

通过将这三个组件分离,我们可以更容易地维护和扩展代码,同时保持代码整洁。