Android问题整理
文章目录
- 画出Android的大体架构图
- 描述请点击 Android Studio 的 build 按钮后发生了什么,大体说清一个应用程序安装到手机上时发生了什么;
- 对 Dalvik、ART 虚拟机有基本的了解;
- Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
- App 是如何沙箱化,为什么要这么做;
- 权限管理系统(底层的权限是如何进行 grant 的)
- 进程和 Application 的生命周期;
- 链表反转
- 动态权限适配方案,权限组的概念
- 网络请求缓存处理,okhttp如何处理网络缓存的
- mvp的图解
- LRUCache 原理
- 图片加载原理
- 模块化实现(好处,原因)
- 视频加密传输
- 统计启动时长,标准
- 如何保持应用的稳定性
- ThreadLocal 原理
- 谈谈 classloader
- 动态布局
- 热修复、插件化
- HashMap 源码, SpareArray 原理
- 性能优化,怎么保证应用启动不卡顿
- SP 是进程同步的吗?有什么方法做到同步
- 介绍下 SurfView
- HashMap 实现原理,ConcurrentHashMap 的实现原理
- BroadcastReceiver,LocalBroadcastReceiver 区别
- Bundle 机制
- Handler 机制
- android 事件传递机制
- 线程间 操作 List
- App启动流程,从点击桌面开始
- OSGI
- Https 请求慢的解决办法,DNS,携带数据,直接访问 IP
- GC 回收策略
- 大体说清一个应用程序安装到手机上时发生了什么;
- 对 Dalvik、ART 虚拟机有基本的了解;
- 进程和 Application 的生命周期;
- 系统启动流程 Zygote 进程 –> SystemServer 进程 –> 各种系统服务 –> 应用进程
- 线程挂起,休眠,释放资源相关,唤醒,线程同步,数据传递,问了很多线程的问题,问了 20 分钟大概
- static synchronized 方法的多线程访问和作用,同一个类里面两个 synchronized 方法,两个线程同时访问的问题
- 内部类和静态内部类和匿名内部类,以及项目中的应用
- 泛型是什么以及在项目中的应用
- handler 发消息给子线程,looper 怎么启动
- down、move、up 事件的传递
- activity 栈
- 封装 view 的时候怎么知道 view 的大小
- intent-filter
- arraylist 和 linkedlist 的区别,以及应用场景
- 怎么启动 service,service 和 activity 怎么进行数据交互
- 下拉状态栏是不是影响 activity 的生命周期,如果在 onStop 的时候做了网络请求,onResume 的时候怎么恢复
- view 渲染
- Android消息机制
- Android View绘制流程,当一个TextView的实例调用setText()方法后执行了什么
- Android屏幕渲染机制
- 热修复的原理,你都了解过哪几种热修复框架
- OkHttp的原理
- Android 线程池的实现原理
- JavaGC机制
- HashMap的实现机制,怎么样HashMap线程安全
- 可重入锁的实现,公平锁非公平锁都是什么定义?
- 都用过哪些常用的数据结构,说说对树的了解?
- Activity启动模式,allowReparent的特点和栈亲和性
- WebView优化
- 有使用过RxJava吗?
- 说说你对设计模式的理解,开发过程中主要用到了哪些设计模式?
- 快排写一下,动态规划了解吗
画出Android的大体架构图
- 画出Android的大体架构图
描述请点击 Android Studio 的 build 按钮后发生了什么,大体说清一个应用程序安装到手机上时发生了什么;
https://blog.csdn.net/kisty_yao/article/details/79442165
对 Dalvik、ART 虚拟机有基本的了解;
Dalvik是android在4.4之前所使用的虚拟机,dalvik虚拟机和传统jvm有以下区别
- dalvik虚拟机执行的时候dex文件,传统jvm执行的是.class文件,dex文件其实是将多个class文件进行压缩去重成一个文件首先能够减少安装包的体积,其次能够加快读取的速度,
- dalvik虚拟机是基于虚拟寄存器,传统jvm是基于栈结构,提升了执行的速度,但是移植性没有基于栈好
ART:是基于Dalvik优化出来的升级版,
1.
Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
https://blog.csdn.net/wk_beicai/article/details/78682828
App 是如何沙箱化,为什么要这么做;
https://www.kanzhun.com/jiaocheng/244591.html
权限管理系统(底层的权限是如何进行 grant 的)
进程和 Application 的生命周期;
https://blog.csdn.net/github_37130188/article/details/89483117
链表反转
链表反转的意思就是将链表中的内容反转过来,这时候要先知道链表的结构,链表中的每个节点都是3个引用组成分别是(上一个节点) / (自己) / (下一个节点) ,这样整个结构就想一个链子一样,那么链表反转思路主要由以下
动态权限适配方案,权限组的概念
网络请求缓存处理,okhttp如何处理网络缓存的
mvp的图解
LRUCache 原理
图片加载原理
模块化实现(好处,原因)
视频加密传输
统计启动时长,标准
如何保持应用的稳定性
主要从以下几点分析
- 内存优化
- 防止内存泄漏,主要在对象的引用
- 减少内存消耗,这个主要图片,bitmap,等位图信息占用大空间
- 减少内存抖动,这个主要在频繁创建大对象
- 算法的优化,如LRU算法 ,
- 缓存优化: 如网络请求,图片加载,数据查询,列表展示…都需要用到缓存的优化, ,然后设计几级缓存
- 数据结构的合理性: 如链表结构与数组结构的优缺点和使用场景,如多线程操作与无多线程操作使用场景
- 电量优化: 如切到后台后,停止不必要的操作场景
- 适配优化: 根据不同android版本,不同厂商,不同尺寸,甚至于不同性能做不出的处理方式,达到更高的效果
ThreadLocal 原理
谈谈 classloader
- classLoader是jre用来提供给开发者加载.class文件的,
- classloader采用了双亲委派机制
动态布局
动态布局本意就是为了达到可以通过不同的需求随时变化出用户想要的样式,而不用重新安装发版,常用的动态布局方式
2. Native
3. H5
4. React Native
5. LuaView
热修复、插件化
HashMap 源码, SpareArray 原理
性能优化,怎么保证应用启动不卡顿
- 应用的启动分为冷启动、热启动、温启动
https://blog.csdn.net/john_android/article/details/84998358
SP 是进程同步的吗?有什么方法做到同步
介绍下 SurfView
HashMap 实现原理,ConcurrentHashMap 的实现原理
BroadcastReceiver,LocalBroadcastReceiver 区别
Bundle 机制
Handler 机制
android 事件传递机制
线程间 操作 List
App启动流程,从点击桌面开始
https://www.jianshu.com/p/cea19d2400c0
OSGI
Https 请求慢的解决办法,DNS,携带数据,直接访问 IP
GC 回收策略
- 标记清算法
- 根到达算法
大体说清一个应用程序安装到手机上时发生了什么;
对 Dalvik、ART 虚拟机有基本的了解;
进程和 Application 的生命周期;
所有的用户进程都是由zygote fork出来的,在执行一些列本地函数后开启虚拟机回调在ActiivtyThread类的Main函数中,在这里java的第一个函数被调用了 , 在这里会一直初始化application,并且回调application的一些列生命周期函数
系统启动流程 Zygote 进程 –> SystemServer 进程 –> 各种系统服务 –> 应用进程
线程挂起,休眠,释放资源相关,唤醒,线程同步,数据传递,问了很多线程的问题,问了 20 分钟大概
每个线程被start出来都会单独划分一块当前线程独享的内存区域,并且处于挂起状态等待cpu的执行权,cpu通过时间片轮转机制在多个线程中不断的切换,每次切换都会伴随着上下文的转变,这个过程是相对耗时的,当线程休眠的时候,线程会释放cpu的执行权,防止浪费不必要的性能,被唤醒或者到达休眠时间后又会处于挂起状态,由于每个线程的数据都是独享的 ,如果一个变量被多个线程引用,会将该变量拷贝一份到这些线程中, 当多个线程需要对一个数据进行修改时,会引发线程同步问题,每个线程修改这块共享数据需要大致三步1.将变量真实数据同步到线程内存中 2. 修改数据 3 将修改后的数据同步回真实变量 ,那么在这三步中 , 如果多个线程同时操作, 就会造成数据错乱的现象,这种现象被称之为线程同步问题,为了解决这个问题, java语音为我们提供了 synchronized 修饰符 ,这个修饰符可以起到将一块代码区域上锁的效果 , 当线程进入代码区 ,拿到锁,之后其他线程没有锁便强制性等待 , 知道拿到锁后才能执行 , 这种方式 虽然解决了线程同步问题 ,但是大大影响了执行效率 , 这时候锁的各种类型出现了 , 将锁划分成了 , 乐观锁 , 悲观锁 ,
static synchronized 方法的多线程访问和作用,同一个类里面两个 synchronized 方法,两个线程同时访问的问题
内部类和静态内部类和匿名内部类,以及项目中的应用
泛型是什么以及在项目中的应用
handler 发消息给子线程,looper 怎么启动
down、move、up 事件的传递
activity 栈
封装 view 的时候怎么知道 view 的大小
intent-filter
arraylist 和 linkedlist 的区别,以及应用场景
- 一个是数组结构,一个是链表结构
- 在物理结构上 ,数组是一块连续的内存空间,链表可以不一定是连续的内存空间
- 在消耗上 ,数组一旦申请多大就消耗多大空间哪怕不使用 , 而链表可以不需要申请而动态增加,
- 在数据特定上,数组的在尾部增加或者删除很快,提前申请内存也是加快尾部增加和删除的因数,但是中间修改,增加,删除却很慢,因为需要排序,所以每次都要重新排序,而链表却解决了这个问题
怎么启动 service,service 和 activity 怎么进行数据交互
下拉状态栏是不是影响 activity 的生命周期,如果在 onStop 的时候做了网络请求,onResume 的时候怎么恢复
view 渲染
Android消息机制
Android View绘制流程,当一个TextView的实例调用setText()方法后执行了什么
Android屏幕渲染机制
热修复的原理,你都了解过哪几种热修复框架
- 插装技术
OkHttp的原理
Android 线程池的实现原理
JavaGC机制
HashMap的实现机制,怎么样HashMap线程安全
可重入锁的实现,公平锁非公平锁都是什么定义?
都用过哪些常用的数据结构,说说对树的了解?
Activity启动模式,allowReparent的特点和栈亲和性
WebView优化
有使用过RxJava吗?
说说你对设计模式的理解,开发过程中主要用到了哪些设计模式?
快排写一下,动态规划了解吗
synchronized用法
volatile用法
动态权限适配方案,权限组的概念
网络请求缓存处理,okhttp如何处理网络缓存的
图片加载库相关,bitmap如何处理大图,如一张30M的大图,如何预防OOM
进程保活
listview图片加载错乱的原理和解决方案
https相关,如何验证证书的合法性,https中哪里用了对称加密,哪里用了非对称加密,对加密算法(如RSA)等是否有了解
LRUCache原理
图片加载原理
模块化实现(好处,原因)
JVM
视频加密传输
统计启动时长,标准
如何保持应用的稳定性
ThreadLocal 原理
谈谈classloader
动态布局
热修复,插件化
HashMap源码,SpareArray原理
性能优化,怎么保证应用启动不卡顿
怎么去除重复代码
SP是进程同步的吗?有什么方法做到同步
介绍下SurfView
HashMap实现原理,ConcurrentHashMap 的实现原理
BroadcastReceiver,LocalBroadcastReceiver 区别
Bundle 机制
Handler 机制
android 事件传递机制
线程间 操作 List
App启动流程,从点击桌面开始
动态加载
类加载器
OSGI
Https请求慢的解决办法,DNS,携带数据,直接访问IP
GC回收策略
画出 Android 的大体架构图
描述清点击 Android Studio 的 build 按钮后发生了什么
大体说清一个应用程序安装到手机上时发生了什么;
对 Dalvik、ART 虚拟机有基本的了解;
Android 上的 Inter-Process-Communication 跨进程通信时如何工作的;
App 是如何沙箱化,为什么要这么做;
权限管理系统(底层的权限是如何进行 grant 的);
进程和 Application 的生命周期;
系统启动流程 Zygote进程 –> SystemServer进程 –> 各种系统服务 –> 应用进程
RecycleView listview 的区别,性能
滴滴
MVP
广播(动态注册和静态注册区别,有序广播和标准广播)
service生命周期
handler实现机制(很多细节需要关注:如线程如何建立和退出消息循环等等)
多线程(关于AsyncTask缺陷引发的思考)
数据库数据迁移问题
设计模式相关(例如Android中哪里使用了观察者模式,单例模式相关)
微信的聊天数据在本地都是加密处理的(防止root了被破解),设计一个类似的本地数据存储系统
x个苹果,一天只能吃一个、两个、或者三个,问多少天可以吃完
Android相关你最擅长哪一块
TCP与UDP区别与应用(三次握手和四次挥手)涉及到部分细节(如client如何确定自己发送的消息被server收到) HTTP相关 提到过Websocket 问了WebSocket相关以及与socket的区别
是否熟悉Android jni开发,jni如何调用java层代码
进程间通信的方式
java注解
计算一个view的嵌套层级
项目组件化的理解
基于自身工作经验和计算机相关知识,给出 移动端地图局部加载 瓦片大小的像素大小估值
多线程断点续传原理
Android系统为什么会设计ContentProvider,进程共享和线程安全问题
jvm相关
Android相关优化(如内存优化、网络优化、布局优化、电量优化、业务优化)
EventBus实现原理
美团
线程挂起,休眠,释放资源相关,唤醒,线程同步,数据传递,问了很多线程的问题,问了20分钟大概
static synchronized 方法的多线程访问和作用,同一个类里面两个synchronized方法,两个线程同时访问的问题
内部类和静态内部类和匿名内部类,以及项目中的应用
泛型是什么以及在项目中的应用
handler发消息给子线程,looper怎么启动
down、move、up事件的传递
activity栈
封装view的时候怎么知道view的大小
intent-filter
arraylist和linkedlist的区别,以及应用场景
怎么启动service,service和activity怎么进行数据交互
下拉状态栏是不是影响activity的生命周期,如果在onStop的时候做了网络请求,onResume的时候怎么恢复
view渲染