蓝牙4.0 java,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>> 来存储的。

此外还有一个引用队列ReferenceQueue> 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 之间的关系

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值