Home
Xin's Blog
Cancel

Android 面试题 - 系统篇

1. Handler 如何实现线程切换 2. Android View 的绘制步骤? 3. 系统层面 Android View 的绘制原理 4. Android 应用中点击事件是如何在 View 之间传递的? 5. 为什么 Android 组件需要在 AndroidManifest.xml 文件中声明? 6. Android 开发中有哪些线程安全的数据结构? 7...

Android 面试题 - 音频篇

1. 请解释 Android Framework 中的音频架构。它由哪些组件组成,每个组件的作用是什么? 2. 什么是采样和采样率? 3. 什么是采样位数/位宽? 4. 什么是声道? 5. 什么是音轨? 6. Android 中的音频功能由哪些类和接口提供支持?请列举一些关键的类和接口,并解释它们的作用。 7. 什么是音频焦点(Audio Focus)?它在 A...

Android 面试题 - 性能篇

1. 从哪些方面进行 Android 应用启动速度优化? 2. 从哪些方面优化 Android 应用的内存占用? 3. Android darvik 虚拟机内存回收机制? 4. Android ART 虚拟机内存回收机制? 5. 为什么传统 xml 布局中嵌套层数会影响性能? 6. Jetpack Compose 中多层嵌套为什么不会影响性能? 7. 从 lin...

设计模式

1. 创建型模型(Creational Patterns) 1.1. 工厂模式(Factory Pattern) 1.1.1. 工厂模式的好处是什么? 1.1.2. 什么场景下会使用工厂模式? 1.2. 抽象工厂模式(Abstract Factory Patter...

Android 面试题 - 架构篇

1. Replugin 插件化框架基本原理 1. Replugin 插件化框架基本原理 如何 Hook ClassLoader? 在 Application 的 attachBaseContext 方法中调用 PatchClassLoaderUtils.patch(application) 方法。 // 获取 mBase.mPackageInfo // 1. Appl...

Android 面试题 - 网络篇

1. TCP 三次握手 1. TCP 三次握手 第一次握手(SYN):客户端向服务器发送一个带有 SYN(同步)标志的 TCP 报文段。这表示客户端请求建立连接,并发送自己的初始序列号(Sequence Number)。 第二次握手(SYN-ACK):服务器接收到客户端的请求后,会发送一个带有 SYN 和 ACK(确认)标志的 TCP 报文段作...

Kotlin

1. 什么是协程? 2. kotlin 协程中 suspend 关键字的作用? 3. 如何创建一个 kotlin 协程?这些创建的方式的区别是什么? 4. Kotlin 协程如何切换主线程和子线程? 5. Kotlin 协程中挂起是什么意思? 6. Kotlin 相比 Java 的优点有哪些? 1. 什么是协程? 协程是一种计算机程序组件,用于支持并发执行和协作...

Java

1. 什么是闭包? 1. 什么是闭包? 在 Java 中,闭包(Closure)是指一种函数对象,它可以捕获并绑定在其作用域之外定义的非局部变量。换句话说,闭包可以引用并操作其定义时所在的环境。 在传统的 Java 中,匿名内部类可以用作闭包的实现。通过定义一个匿名内部类并在其中引用外部变量,就可以创建一个具有访问外部变量能力的闭包。 以下是一个使用匿名内部类实现闭包的示例:...

如何衡量和改进 Android 应用启动时间

让我们探索衡量和改进应用启动时间的不同方法,从这篇文章中,你可以发现还存在大量优化的机会,可以确定将你的优化工作集中在何处,并且可以看到优化后改进了多少。 启动时间的定义 Time To Initial Display (TTID) TTID 指标用于测量应用生成第一帧所用的时间,包括进程初始化(如果是冷启动)、activity 创建(如果是冷启动/温启动)以及显示第一帧。 ...

APK 大小优化之资源优化

原文链接 作者 Jake Wharton 写作时间 01/09/2020 布局文件会在 Android APK 文件中出现多少次?我们可以用一个布局文件构建一个最小的 APK 来计算发生的次数。 用 Gradle 构建一个 Android 应用程序只需要一件事:一个带有AndroidManifest.xml文件的包。我们可以添加一个虚拟的页面布局,内容只是<me...