美文网首页
Android面试准备

Android面试准备

作者: 执念蓝枫 | 来源:发表于2018-07-25 16:43 被阅读113次

    Retrofit的实现与原理

    关键字: 动态代理

    HashMap原理

    关键字:数组散列+单链表
    HashMap由数组+链表组成的,数组是HashMap的主体,链表则是主要为了解决哈希冲突而存在的,如果定位到的数组位置不含链表(当前entry的next指向null),那么对于查找,添加等操作很快,仅需一次寻址即可;如果定位到的数组包含链表,对于添加操作,其时间复杂度为O(n),首先遍历链表,存在即覆盖,否则新增;对于查找操作来讲,仍需遍历链表,然后通过key对象的equals方法逐一比对查找。所以,性能考虑,HashMap中的链表出现越少,性能才会越好。
    https://www.cnblogs.com/chengxiao/p/6059914.html

    HashMap怎么解决Hash冲突

    关键字:“拉链法”
    https://xiaolu123456.iteye.com/blog/1485349

    Android两种虚拟机

    Dalvik :
    Android4.4及以前使用的都是Dalvik虚拟机,我们知道Apk在打包的过程中会先将java等源码通过javac编译成.class文件,但是我们的Dalvik虚拟机只会执行.dex文件,这个时候dx会将.class文件转换成Dalvik虚拟机执行的.dex文件。Dalvik虚拟机在启动的时候会先将.dex文件转换成快速运行的机器码,又因为65535这个问题,导致我们在应用冷启动的时候有一个合包的过程,最后导致的一个结果就是我们的app启动慢,这就是Dalvik虚拟机的JIT特性(Just In Time)

    ART:
    ART虚拟机是在Android5.0才开始使用的Android虚拟机,ART虚拟机必须要兼容Dalvik虚拟机的特性,但是ART有一个很好的特性AOT(ahead of time),这个特性就是我们在安装APK的时候就将dex直接处理成可直接供ART虚拟机使用的机器码,ART虚拟机将.dex文件转换成可直接运行的.oat文件,ART虚拟机天生支持多dex,所以也不会有一个合包的过程,所以ART虚拟机会很大的提升APP冷启动速度。

    ART优点:
    1.加快APP冷启动速度
    2.提升GC速度
    3.提供功能全面的Debug特性

    ART缺点:
    1.APP安装速度慢,因为在APK安装的时候要生成可运行.oat文件
    2.APK占用空间大,因为在APK安装的时候要生成可运行.oat文件

    GC机制

    算法:根搜索算法(GC Roots根节点)
    https://blog.csdn.net/anjoyandroid/article/details/78609971

    Activity的onNewIntent

    • 通过Intent启到一个Activity的时候,就算已经存在一个相同的正在运行的Activity,系统也会创建一个新的Activity实例。为了不让Activity实例化多次,我们需要通过在AndroidManifest.xml配置启动方式。
    • launchMode为singleTask的时候,通过Intent跳到一个Activity,如果系统已经存在一个实例,系统就会将请求发送到这个实例上,但这个时候----------系统就不会再调用onCreate方法,而是调用onNewIntent方法。

    能用到的地方是A-->B-->C-->A,此时onActivityResult就有些复杂了。

    类加载机制

    类的生命周期:加载---验证---准备---解析---初始化---使用---卸载

    ActivityThread工作流程

    • 首先通过myLooper()方法获取Looper对象,取出Looper持有的MessageQueue;
    • 然后从MessageQueue取出Message,如果Message为null,说明线程正在退出;
    • Message不为空,则调用Message的target handler对该Message进行分发;
    • 消息处理完毕,调用recycle()方法进行回收。

    Binder机制

    每一个Android的进程都只会运行在自己进程所拥有的虚拟地址空间。每个虚拟地址空间又分割为用户空间和内核空间两种。对于用户空间,不同进程之间是不能共享的,而内核空间是可以共享。

    RecycleView与ListView之间的关系

    https://blog.csdn.net/shu_lance/article/details/79566189

    Thread.sleep()与Thread.wait()方法的区别

    • sleep()方法是Thread类的方法,主要的意义就是让当前线程停止执行,让出cpu给其他的线程,但是 不会释放对象锁资源以及监控的状态 ,当指定的时间到了之后又会自动恢复运行状态。
    • wait()方法是Object类里面的,主要的意义就是让线程放弃当前的对象的锁,进入等待此对象的等待锁定池,只有针对此对象调动notify方法后本线程才能够进入对象锁定池准备获取对象锁进入运行状态。

    Java中线程间通讯

    Synchronized修饰static方法与非static方法之间的区别

    • 当synchronized修饰一个static方法时,多线程下,获取的是类锁(即Class本身,注意:不是实例),作用范围是整个静态方法,作用的对象是这个类的所有对象。
    • 当synchronized修饰一个非static方法时,多线程下,获取的是对象锁(即类的实例对象),作用范围是整个方法,作用对象是调用该方法的对象。

    安卓开发怎么实现延迟加载

    ViewStub 是一个不可见的,大小为0的View,最佳用途就是实现View的延迟加载,避免资源浪费,在需要的时候才加载View
    https://blog.csdn.net/jason0539/article/details/26132267

    相关文章

      网友评论

          本文标题:Android面试准备

          本文链接:https://www.haomeiwen.com/subject/jroemftx.html