android个人理解语言话术知识点1

面试问题
1.浅析Android沙箱模型:http://blog.csdn.net/ljheee/article/details/53191397
2.Android 热补丁动态修复框架小结:http://blog.csdn.net/lmj623565791/article/details/49883661/
3.Android中的Parcel机制 实现Bundle传递对象:http://www.cnblogs.com/zhujiabin/p/5693564.html
4. Android性能优化之加快应用启动速度:http://blog.csdn.net/alinlin627/article/details/50557856
5.【android】如何有效的减少重复的代码:http://blog.csdn.net/u011494050/article/details/40593605
6.android调用https接口原理及解决方案:https://wenku.baidu.com/view/fabbcc7203768e9951e79b89680203d8ce2f6ae6.html
7.Android ListView异步加载图片乱序问题,原因分析及解决方案:http://blog.csdn.net/guolin_blog/article/details/45586553
8.Android权限机制与适配经验:https://mp.weixin.qq.com/s/YL-NooJmsqbGSUlpNmpqbw
9.ANDROID内存优化——大汇总(转):http://www.cnblogs.com/yezhennan/p/4711187.html
10.Android—大图or多图加载解决方案(完美解决OOM问题):http://www.2cto.com/kf/201407/321093.html
11.理解LinkedHashMap:http://www.cnblogs.com/children/archive/2012/10/02/2710624.html
12.Android 缓存策略LruCache和DiskLruCache学习:http://www.jianshu.com/p/833adadc9eb6
13.Vector与ArrayList区别:http://www.cnblogs.com/plmnko/archive/2010/10/10/1847362.html
14.Android总结篇系列:Activity生命周期:http://www.cnblogs.com/lwbqqyumidi/p/3769113.html
15.java 里面保留字volatile及其与synchronized的区别:http://blog.csdn.net/fanaticism1/article/details/9966163
16.OKHttp源码解析:http://blog.csdn.net/lmj623565791/article/details/47911083
17.Android控件RecyclerView与ListView的异同:http://www.cnblogs.com/littlepanpc/p/4497290.html
18.Activity详解 Intent显式跳转和隐式跳转:http://www.2cto.com/kf/201301/183599.html
19.Android 开发之 App 启动时间统计:http://www.jianshu.com/p/c967653a9468
20. Android稳定性专题之CRASH:http://blog.csdn.net/wei_lei/article/details/69868280
21.JAVA线程同步锁和线程间协调操作:http://blog.csdn.net/u010521842/article/details/76713857
22.Android ViewGroup事件分发机制:http://blog.csdn.net/lmj623565791/article/details/39102591/
23.Android实践之ScrollView中滑动冲突处理:http://blog.csdn.net/xiaohanluo/article/details/52130923
24.Android智能下拉刷新框架-SmartRefreshLayout:https://github.com/scwang90/SmartRefreshLayout
25.kotlin讲解:https://github.com/heimashi/kotlin_tips
26.饿了么:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2018/0522/9727.html

一.4种线程池:都是new的ThreadPoolExecutor对象,对它进行build 传参
1) fixThreadPool:设置线程池的数量,new了之后  里面的所有线程都是活动,不会被回收,等待执行新的任务
2)singleThreadPool:设置单个线程,排队执行,所有的任务都在一个线程中完成
3) CachedThreadPool:设置线程池的数量,有新的任务会利用新的空闲线程(60s空闲时间,多了自动回收线程)
4) ScheduledThreadPool:这个表示可以设置延迟和重复执行线程

二.handler刷新机制:handler刷新机制:
子线程中不能更新ui,否则会导致多线程并发访问导致UI控制不可预期的状态
当new一个handler时,会创建一个looper对象消息循环,同时会new一个messageQueue的消息队列,messageQueue一般用来存放消息的,当handler.sendMessage把消息放到消息队列中(先进先出),此时looper在轮训消息时监测消息队列中有新的消息,就会调用handler的dispatchMessage分发给handleMessage,然后在主UI线程中刷新view.


三.IntentService:是抽象类,创建一个异步service,Service是依附于主线程的,不能进行耗时操作
每次创建一个intentService,在它的onCreate方法中会创建一个HandlerThread(继承的Thread)并启动它,同时也会创建一个有handlerThread的looper对象,HandlerThread也可以看做是一个异步的线程,通过looper来监听轮询消息,从消息队列中取出消息进行处理,在onHandleIntent中做耗时操作,它是一个异步方法,执行完后创建一个message,通过handler回传给handlerMessage,包装一个intent回传给activity,
在主UI线程工刷新view

四.单列模式:
饿汉模式:先创建一个静态的有值的对象
懒汉模式:延迟初始化,在getInstance中对对象进行初始化
静态类内部方法:
public class SingletonDemo {
    private static class SingletonHolder{
        private static final SingletonDemo instance=new SingletonDemo();
    }
    private SingletonDemo(){
        System.out.println("Singleton has loaded");
    }
    public static SingletonDemo getInstance(){
        return SingletonHolder.instance;
    }
}

五.工厂模式:
定义一个创建对象的接口,让子类决定实例化哪个对象,客户端使用抽象接口来创建自己所需要对象。


六.策略模式:
定义了一系列的算法,并将算法封装起来,他们可以相互的替换.

七.ArrayList:也是存储在数组中,默认存储10个  达到10个,会重新分配内存大小((旧容量 * 3) / 2) + 1的新数组,把原数组的拷贝到新数组中

八.okHttps:

有同步和异步请求两种,它主要有两个比较关键的方法,dispatch分发和intercept拦截器
1)dispatch的作用为维护请求的状态,并维护一个线程池,来执行同步或异步,异步调用Call的enqueue(),dispatch会创建一个缓存线程池CachedThreadPool,默认大小为20个,如果收到10个并发的请求,在线程池中还是10个以上空余线程,就会创建10个线程,当这10个线程执行完毕,在60s后会
在finall中会自动回收线程;若果是同步的话,调用Call的execute(),会引起堵塞,到reponse返回。
2)intercept:在发起请求request后,会调用拦截器,对response进行处理,然后传给上个拦截器。
   1.有重试和失败拦截器,主要是失败重连,根据响应异常和响应码来判断是否需要重连。通过connection跟服务器连接来处理
   2.缓存拦截器,提供了缓存策略,一个缓存的路径和大小;
   3.连接拦截器
   4.桥接和适配拦截器,主要是对请求request的头一些设置,什么编码方式,内存长度,将服务器相应的response转换可以用的response
     可能服务器返回的响应会进行压缩,需要进行解压

九.service怎么保证不被进程杀死:
   通过onStarCommand的几个常量值,START_REDELIVER_INTENT表示被杀掉后,系统会重新启动command方法,并且将最后一个intent传值给它;
   还可以在声明文件中,设置priority=1000,最高值优先级最高

十.三种网络图片加载框架区别

glide:
  绑定activity有生命周期,对每个context都保持一个requestManager,来实现图片声明周期

picasso,glide,fresco:
  - Picasso所能实现的功能,Glide都能做,无非是所需的设置不同。但是Picasso体积比起Glide小太多且图像质量比 Glide 高,如果项目中网络请求
     本身用的就是okhttp或者retrofit(本质还是okhttp),那么建议用Picasso,体积会小很多(Square全家桶的干活)。
  - Glide 的速度比 Picasso 更快,Glide 的长处是大型的图片流,比如gif、Video,如果你们是做美拍、爱拍这种视频类应用,建议使用Glide。
  - Fresco 可以说是综合了之前图片加载库的优点,其在5.0以下的内存优化非常好,但它的不足是体积太大,按体积进行比较:
     Fresco>Glide>Picasso,所以 Fresco 在图片较多的应用中更能凸显其价值,如果应用没有太多图片需求,还是不推荐使用 Fresco。
     Fresco有个渐进式的功能,随着图片的加载继续,逐渐呈现清晰的图片。

十一.lru缓存,内存满了之后,会及时清除最久最远的内存,调用trimToSize来判断内存是否已满,如果满了就要删除近期最少使用的算法,内部机制使用linkHashmap

十二.map:还是以数组的方式存储,key的hashCode值表示数组的位置,如果两个hashCode值相同也对应的key也一样,就覆盖之前的value;如果hashCode值相等,对应的key不相等,就添加新的put进去

十三.ui卡顿:1s刷新60次,60fps,16ms刷新一次,如果期间有大量数据操作,会引起ui卡顿,浪费cpu

十四.观察者模式:1对多的使用,eventbus和rxjava,注册一个观察者方法,当另一个方法调用时发送通知给注册的方法

猜你喜欢

转载自blog.csdn.net/AnthonyDJG/article/details/81177979