Android 面试题整理

Android 插件化和热修复知识梳理

https://www.jianshu.com/p/704cac3eb13d

Activity生命周期

https://www.jianshu.com/p/b5a72a741025

Android优化中弱引用WeakReference的知识

https://blog.csdn.net/printfcc/article/details/79131479

Android四种引用:强引用、软引用、弱引用和虚引用

https://www.jianshu.com/p/1cbdc8f52014

Android各大图片加载框架之间的比较.

https://blog.csdn.net/tomcat0916/article/details/81902189

Android网络框架对比

https://www.jianshu.com/p/ff67472a6638

Android 中常用加密算法

https://blog.csdn.net/muranfei/article/details/82626656

安卓的内存管理机制

https://www.cnblogs.com/chendu123/p/6081305.html

Android性能优化总结

https://blog.csdn.net/xiangzhihong8/article/details/92800490

浅析android的OOM问题

https://www.jianshu.com/p/ee78eb0fb651

理解Android虚拟机体系结构

https://www.cnblogs.com/lao-liang/p/5111399.html

Android多线程方式

https://blog.csdn.net/baidu_36385172/article/details/79705915

Android中的缓存机制

https://www.jianshu.com/p/ad2b8af03133

MVP,MVC,MVVM的区别及各自优势

https://blog.csdn.net/victoryzn/article/details/78392128

Android集合使用

https://blog.csdn.net/dbpggg/article/details/80825294

ArrayList和LinkedList区别

https://blog.csdn.net/u012216131/article/details/82500925

Android中常用的设计模式

https://blog.csdn.net/lijinweii/article/details/80194875

Android 单例模式

https://blog.csdn.net/zhangying1994/article/details/83239916

Android数据序列化方案

https://www.cnblogs.com/hustzhb/p/7072951.html

Android RecyclerView —— 基本使用

https://blog.csdn.net/ITRenj/article/details/91556719

Android自定义View全解

https://www.jianshu.com/p/705a6cb6bfee

android线程池

https://www.jianshu.com/p/7b2da1d94b42

XML 的4种解析方式

https://cloud.tencent.com/developer/article/1012671

Android垃圾回收机制

https://blog.csdn.net/lu1005287365/article/details/52475957

Java基础之—反射

https://blog.csdn.net/sinat_38259539/article/details/71799078

Activity 与 Window 与 View 之间的关系

https://www.cnblogs.com/dubo-/p/6676259.html

https://blog.csdn.net/freekiteyu/article/details/79408969

TCP和UDP的区别和优缺点

https://blog.csdn.net/xiaobangkuaipao/article/details/76793702

蓝牙4.0协议详解

https://blog.csdn.net/yangxun0727l/article/details/81295772

从源码角度深入理解Glide

https://www.jianshu.com/p/ddb8e84b5238

OKHttp原理

https://blog.csdn.net/wangzihan91/article/details/87625986

Gradle模块化配置及多渠道打包

https://www.jianshu.com/p/1846506330d7

Android Webview 性能优化

https://my.oschina.net/ososchina/blog/1799575

https://www.cnblogs.com/ganchuanpu/p/8485811.html

Glide 实现原理解析

https://blog.csdn.net/hxl517116279/article/details/99639520

Socket原理详解

https://blog.csdn.net/noricky/article/details/82626188

LRU算法简析

https://www.cnblogs.com/wyq178/p/9976815.html

android 面试题

https://blog.csdn.net/m0_37868230/article/details/81457720

https://www.cnblogs.com/gooder2-android/p/11049755.html

https://www.jianshu.com/p/da8d6c01e3e6

内存泄漏和内存溢出是什么?一般怎么处理内存泄漏?

(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主进程的运行。

https://www.cnblogs.com/ganchuanpu/p/8485811.html

Glide 实现原理解析

默认情况下,Glide 会在开始一个新的图片请求之前检查以下多级的缓存:

活动资源 (Active Resources)

内存缓存 (Memory Cache)

资源类型(Resource Disk Cache)

原始数据 (Data Disk Cache)

1.活动资源

活动资源中是一个”引用计数"的图片资源的弱引用集合。使用一个 Map<Key, WeakReference<EngineResource<?>>> 来存储的。

此外还有一个引用队列ReferenceQueue<EngineResource<?>> resourceReferenceQueue;每当向 activeResource 中添加一个 WeakReference 对象时都会将 resourceReferenceQueue 和这个 WeakReference 关联起来,

用来跟踪这个 WeakReference 的 gc,一旦这个弱引用被 gc 掉,就会将它从 activeResource 中移除。

2.内存缓存

内存缓存默认使用LRU(缓存淘汰算法/最近最少使用算法),当资源从活动资源移除的时候,会加入此缓存。使用图片的时候会主动从此缓存移除,加入活动资源。LRU在Android support-v4中提供了LruCache工具类。

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接口,方便用户可以切入到各个层面对网络访问进行拦截并执行相关逻辑

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 之间的关系

©著作权归作者所有,转载或内容合作请联系作者
禁止转载,如需转载请通过简信或评论联系作者。
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,997评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,603评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,359评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,309评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,346评论 6 390
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,258评论 1 300
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,122评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,970评论 0 275
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,403评论 1 313
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,596评论 3 334
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,769评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,464评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,075评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,705评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,848评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,831评论 2 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,678评论 2 354