Android笔记大全(二)

题目

  • String、StringBuffer和StringBuilder的区别?
  • hashcode()和equals()的区别、联系?
  • Java反射 和Java泛型
  • session与cookit的区别
  • synchronize用法,volatile用法,原理?两者的区别和场景?偏向锁、轻量锁、重量锁。手写DCL
    https://www.cnblogs.com/deltadeblog/p/9559035.html
  • 简述ReetrantLock?synchronzize与ReetrantLock的区别?
  • 内部类如何访问外部类的变量和方法?
  • JVM内存区域划分?哪部分是线程公有的,哪部分是私有的?
    JVM 的内存区域可以分为两类:线程私有和区域和线程共有的区域。
    线程私有的区域:程序计数器、JVM 虚拟机栈、本地方法栈;
    线程共有的区域:堆、方法区、运行时常量池。
  • Java对象的创建过程
    1.类的检查:接收到指令之后虚拟机首先会在常量池中查找是否有该类的引用类型,如无,则进行类的加载(加载,验证,准备,解析,初始化)
    2.分配内存:为该对象分配内存,两种方法:指针偏移和闲散列表
    3.内存空间初始化为0
    4.设置对象:主要是设置对象头,例如对象的哈希码,锁信息,GC分代信息等。
  • GC回收算法(优缺点)
    1.标记-清除(标记的方式)
    2.复制(简述内存担保)
    3.标记-整理
    4.分代回收(新生代&老年代,大对象回收,新生代如何变成老年代)
  • 垃圾收集器
    1.Serial:这个收集器是一个单线程的收集器,但它 的“单线程”的意义并不仅仅说明它只会使用一个CPU或一条收集线程去完成垃圾收集工作, 更重要的是在它进行垃圾收集时,必须暂停其他所有的工作线程,直到它收集结束。“Stop The World”
    2.ParNew:ParNew收集器其实就是Serial收集器的多线程版本
  • 对象如何从年轻代变成老年代?
  • 简述双亲委派模型
    该模型是为类的加载服务的,当一个类加载器收到类加载的请求时,首先自己不会去加载该类,而是委托给当前类加载器的父类加载器去加载,每个类加载器都是如此,直到该请求委托给顶部的启动类加载器去加载。假如父类加载器无法加载该类,那才会由子类加载器去加载。
    系统类加载器分为三种:启动类加载器,拓展类加载器,应用类加载。最下面才是自定义类加载器。
  • HashMap如何实现一个Key对应多个value?
    new HashMap<String,List>;
  • HashMap如何扩容?扩容为什么是2的幂次方?1.7与1.8的区别?插入的方式?扩容后的位置变化?什么时候rehash?
  • 判断一个对象实例可回收的条件?
    1.引用计数法
    2.可达性分析(被分析不可达的对象并非一定要被回收,需经过两次标记阶段。)
  • 判断一个类是否为无用类的方法?
    1.该类所有的实例都已经被回收,也就是Java堆中不存在该类的任何实例。
    2.加载该类的ClassLoader已经被回收。
    3.该类对应的java.lang.Class对象没有在任何地方被引用,无法在任何地方通过反射访问该 类的方法。
  • 判断一个常量为废弃常量的条件
    假如一个字符串“abc”已经进入了 常量池中,但是当前系统没有任何一个String对象是叫做“abc”的,换句话说,就是没有任何 String对象引用常量池中的“abc”常量,也没有其他地方引用了这个字面量,如果这时发生内 存回收,而且必要的话,这个“abc”常量就会被系统清理出常量池
  • 并行与并发
  • 线程的几种状态,代表着什么意思
    NEW,RUNNING,TIME_WAITING(超时等待,wait(long),join(long)),WAITING(调用wait,join,lock),BLOCKED(出现资源竞争,等待获取锁),TERMINATED(线程结束)
  • 开启线程的三种方式?
  • 线程的join()和yield()是什么意思?

总结