蓝⽛4.0java,Android⾯试题整理Android 插件化和热修复知识梳理
Activity⽣命周期
Android优化中弱引⽤WeakReference的知识
Android四种引⽤:强引⽤、软引⽤、弱引⽤和虚引⽤
Android各⼤图⽚加载框架之间的⽐较.
Android⽹络框架对⽐
Android 中常⽤加密算法
安卓的内存管理机制
Android性能优化总结
浅析android的OOM问题
理解Android虚拟机体系结构
Android多线程⽅式
Android中的缓存机制
MVP,MVC,MVVM的区别及各⾃优势
Android集合使⽤
ArrayList和LinkedList区别
Android中常⽤的设计模式
Android 单例模式
Android数据序列化⽅案
Android RecyclerView —— 基本使⽤
Android⾃定义View全解
android线程池
XML 的4种解析⽅式
Android垃圾回收机制
Java基础之—反射
Activity 与 Window 与 View 之间的关系
TCP和UDP的区别和优缺点
蓝⽛4.0协议详解
从源码⾓度深⼊理解Glide
OKHttp原理
Gradle模块化配置及多渠道打包
Android Webview 性能优化
Glide 实现原理解析
Socket原理详解
LRU算法简析
android ⾯试题
内存泄漏和内存溢出是什么?⼀般怎么处理内存泄漏?
(1)内存溢出(OOM)和内存泄露(对象⽆法被回收)的区别。
(2)引起内存泄露的原因
(3)内存泄露检测⼯具 ------>LeakCanary
内存溢出 out of memory:是指程序在申请内存时,没有⾜够的内存空间供其使⽤,出现out of memory;⽐如申请了⼀个integer,但给它存了long才能存下的数,那就是内存溢出。内存溢出通俗的讲就是内存不够⽤。
内存泄露 memory leak:是指程序在申请内存后,⽆法释放已申请的内存空间,⼀次内存泄露危害可以忽略,但内存泄露堆积后果很严重,⽆论多少内存,迟早会被占光
内存泄露原因以及解决:
⼀、Handler 引起的内存泄漏。
解决:将Handler声明为静态内部类,就不会持有外部类SecondActivity的引⽤,其⽣命周期就和外部类⽆关,
如果Handler⾥⾯需要context的话,可以通过弱引⽤⽅式引⽤外部类
⼆、单例模式引起的内存泄漏。
解决:Context是ApplicationContext,由于ApplicationContext的⽣命周期是和app⼀致的,不会导致内存泄漏
三、⾮静态内部类创建静态实例引起的内存泄漏。
解决:把内部类修改为静态的就可以避免内存泄漏了
四、⾮静态匿名内部类引起的内存泄漏。
解决:将匿名内部类设置为静态的。
五、注册/反注册未成对使⽤引起的内存泄漏。
注册⼴播接受器、EventBus等,记得解绑。
六、资源对象没有关闭引起的内存泄漏。
在这些资源不使⽤的时候,记得调⽤相应的类似close()、destroy()、recycler()、release()等⽅法释放。
七、集合对象没有及时清理引起的内存泄漏。
通常会把⼀些对象装⼊到集合中,当不使⽤的时候⼀定要记得及时清理集合,让相关对象不再被引⽤。
webview 性能优化:
1.webview提前初始化,防⽌多次打开过慢
2.创建独⽴进程,减少webview引起的内存泄露对主进程内存的占⽤.避免WebView的Crash影响App主进程的运⾏。
Glide 实现原理解析
默认情况下,Glide 会在开始⼀个新的图⽚请求之前检查以下多级的缓存:
活动资源 (Active Resources)
内存缓存 (Memory Cache)
资源类型(Resource Disk Cache)
原始数据 (Data Disk Cache)
1.活动资源
活动资源中是⼀个”引⽤计数"的图⽚资源的弱引⽤集合。使⽤⼀个 Map>> 来存储的。
此外还有⼀个引⽤队列ReferenceQueue> resourceReferenceQueue;每当向 activeResource 中添加⼀个 WeakReference 对象时都会将 resourceReferenceQueue 和这个 WeakReference 关联起来,
⽤来跟踪这个 WeakReference 的 gc,⼀旦这个弱引⽤被 gc 掉,就会将它从 activeResource 中移除。
2.内存缓存
内存缓存默认使⽤LRU(缓存淘汰算法/最近最少使⽤算法),当资源从活动资源移除的时候,会加⼊此缓存。使⽤图⽚的时候会主动从此缓存移除,加⼊活动资源。LRU在Android support-v4中提供了LruCach
e⼯具类。
3.磁盘缓存
资源类型缓存的是经过解码后的图⽚,如果再使⽤就不需要再去进⾏解码配置(BitmapFactory.Options),加快获得图⽚速度。⽐如原图是⼀个100x100的ARGB_8888图⽚,在⾸次使⽤的时候需要的是50x50的RGB_565图⽚,那么Resource将50x50 RGB_565缓存下来,再次使⽤此图⽚的时候就可以从 Resource 获得。不需要去计算inSampleSize(缩放因⼦)。
原始数据缓存的则是图像原始数据
4.Bitmap复⽤池
BitmapPool是Glide中的Bitmap复⽤池,同样适⽤LRU来进⾏管理。在每次解析⼀张图⽚为Bitmap的时候(磁盘缓存、⽹络/⽂件)会从其BitmapPool中查⼀个可被复⽤的Bitmap。当⼀个Bitmap从内存缓存 被动 的被移除(内存紧张、达到maxSize)的时候并不会被recycle。⽽是加⼊这个BitmapPool,只有从这个BitmapPool 被动的被移除的时候,Bitmap的内存才会真正被recycle释放。
OKHttp原理
总体架构:
Interface-接⼝层:接⼝层接收⽤户的⽹络访问请求,发起实际的⽹络访问
OkHttpClient是OkHttp框架的⽤户⾯板,⽤户使⽤OkHttp进⾏各种设置,发起各种⽹络请求都是通过OkHttpClient完成的
Call描述⼀个实际的访问请求,⽤户的每⼀个⽹络请求都是⼀个Call实例。Call本⾝只是⼀个接⼝,定义了Call的接⼝⽅法,实际执⾏过程中,OkHttp会为每⼀个请求创建⼀个RealCall,每⼀个RealCall内部有⼀个AsyncCall
Dispatcher是OkHttp的调度器,其内部维护了⼀个线程池
Protocal-协议层:Protocol层负责处理协议逻辑,OkHttp⽀持Http1/Http2/WebSocket协议
Connection-连接层:在连接层中有⼀个连接池,统⼀管理所有的Socket连接,当⽤户新发起⼀个⽹络请求时,OkHttp会⾸先从连接池中查是否有符合要求的连接,如果有则直接通过该连接发送⽹络请求;否则新创建⼀个连接。RealConnection描述⼀个物理Socket连接,连接池中维护多个RealConnection实例。由于Http/2⽀持多路复⽤,⼀个RealConnection可以⽀持多个⽹络访问请求,所以OkHttp⼜引⼊了StreamAllocation来描述⼀个实际的⽹络请求
Cache-缓存层:Cache层负责维护请求缓存,当⽤户的⽹络请求在本地已有符合要求的缓存时,OkHttp
会直接从缓存中返回结果,从⽽节省⽹络开销
IO层:I/O层负责实际的数据读写。OkHttp的另⼀⼤有点就是其⾼效的I/O操作,这归因于其⾼效的I/O库Okio
Interceptor-层:层提供了⼀个类AOP接⼝,⽅便⽤户可以切⼊到各个层⾯对⽹络访问进⾏拦截并执⾏相关逻辑
java中常用的设计模式有哪些
Socket原理简析:
服务器端先初始化Socket,然后与端⼝绑定(bind),对端⼝进⾏监听(listen),调⽤accept阻塞,等待客户端连接。在这时如果有个客户端初始化⼀个Socket,然后连接服务器(connect),如果连接成功,
这时客户端与服务器端的连接就建⽴了。客户端发送数据请求,服务器端接收请求并处理请求,然后把回应数据发送给客户端,客户端读取数据,最后关闭连接,⼀次交互结束。
android垃圾回收机制:
1. 引⽤计数法(Reference Counting Collector)
引⽤计数法是唯⼀没有使⽤根集的垃圾回收的法,该算法使⽤引⽤计数器来区分存活对象和不再使⽤的对象。⼀般来说,堆中的每个对象对应⼀个引⽤计数器。当每⼀次创建⼀个对象并赋给⼀个变量时,引⽤计数器置为1。
当对象被赋给任意变量时,引⽤计数器每次加1当对象出了作⽤域后(该对象丢弃不再使⽤),引⽤计数器减1,⼀旦引⽤计数器为0,对象就满⾜了垃圾收集的条件。
基于引⽤计数器的垃圾收集器运⾏较快,不会长时间中断程序执⾏,适宜地必须实时运⾏的程序。但引⽤计数器增加了程序执⾏的开销,因为每次对象赋给新的变量,计数器加1,⽽每次现有对象出了作⽤域⽣,计数器减1。
2. 根算法
tracing算法是为了解决引⽤计数法的问题⽽提出,它使⽤了根集的概念。基于tracing算法的垃圾收集器从根集开始扫描,识别出哪些对象可达,哪些对象不可达,并⽤某种⽅式标记可达对象,
例如对每个可达对象设置⼀个或多个位。在扫描识别过程中,基于tracing算法的垃圾收集也称为标记和清除(mark-and-sweep)垃圾收集器.
Activity 与 Window 与 View 之间的关系

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。