android面试 day2

1.如何保证Service不被杀死
a.设置onStartCommand()的返回值为START_STICKY
b.启动前台服务,在内存不足的时候不会被回收
c.用户通过setting->stop时,在销毁时发送广播启动服务

2.contentprovider作用
a.对数据操作提供统一的接口,将上层业务与底层数据解耦
b.进程间数据共享

3.图片三级缓存(fresco)
a.Bitmap内存缓存
Bitmap缓存存储Bitmap对象,这些Bitmap对象可以立刻用来显示或者用于后处理
在5.0以下系统,Bitmap缓存位于ashmem, 5.0及其以上系统, Bitmap缓存直接位于Java的heap上。
b.未解码图片的内存缓存
这个缓存存储的是原始压缩格式的图片,图片在显示之前,需要调整大小,解码。
c.磁盘缓存
未解码的原始压缩格式的图片,在使用之前同样需要经过解码等处理

4.多态
含义:不修改程序代码就可以改变程序运行时所绑定的具体代码,让程序可以选择多个运行状态
原理:动态绑定机制(程序运行过程中<编译后>通过动态创建的对象的方法表来定位方法的方式)
注:静态方法是属于类的,方法的调用不具有多态

5.static块执行顺序
static静态代码块可以看做是一个没有名字、没有参数、没有返回值的静态方法,会在main方法执行前主动执行的,它和静态变量的初始化顺序与代码书写位置有关。

6.单例模式
a.dcl

public class SingleTon {
        private static volatile SingleTon instance;
        private SingleTon(){
        }
        public static SingleTon newInstance(){
            if(instance==null){
            synchronized(SingleTon.class){
                if(instance==null){
                    instance=new SingleTon ();
                }
        }
        }
            return instance;
        }
}

b.类加载器的初始化

public class Singleton {
    private static class SingletonHolder {
        private static Singleton instance = new Singleton();
    }
    private Singleton (){}
    public static final Singleton getInstance() {
        return SingletonHolder.instance;
    }
}

7.synchronized
原理(字节码层面):
同步代码块:monitorenter指令在代码起始位置,monitorexit指令在结束位置,每一个monitorenter都有一个monitorexit。线程执行到monitorenter指令时,尝试获取对象的锁。如果当前线程已经拥有对象的锁,那它可以重入这个锁,重入计数器的值会加1。

同步方法: 通过Class文件的方法表中将该方法的access_flags字段中的synchronized标志位置1表示该方法是同步方法,并调用该方法的对象或所属的Class做为锁对象。
作用:
a.共享变量操作的同步 b. 共享变量的内存可见性
同步代码块与同步方法的区别:
同步代码块的同步区域比同步方法小,降低线程切换带来的系统开销

8.volatile
作用:
a.共享变量可见性
当写一个volatile变量时,JMM会把线程对应的工作内存中的变量拷贝刷新到内存中,当另一个线程读取一个volatile变量时,JMM会它的工作内存中的变量拷贝置为无效,只能从内存中重新读取变量。
b.禁止指令重排序,指令间插入一条Memory Barrier通知编译器和CPU,不管什么指令都不能和这条Memory Barrier指令重排序

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值