记录为了下次不再犯同样的错误
1. java类加载器原理和使用范畴
Java 中的类加载器大致可以分成两类,一类是系统提供的,另外一类则是由 Java 应用开发人员编写的。系统提供的类加载器主要有下面三个:
java.lang.ClassLoader
。ClassLoader.getSystemClassLoader()
来获取它。除了系统提供的类加载器以外,开发人员可以通过继承 java.lang.ClassLoader
类的方式实现自己的类加载器,以满足一些特殊的需求。
在 Java 中,类的实例化流程分为两个部分:类的加载和类的实例化。类的加载又分为显式加载和隐式加载。大家使用 new 关键字创建类实例时,其实就隐式地包含了类的加载过程。对于类的显式加载来说,比较常用的是 Class.forName。其实,它们都是通过调用 ClassLoader 类的 loadClass 方法来完成类的实际加载工作的。直接调用 ClassLoader 的 loadClass 方法是另外一种不常用的显式加载类的技术。
用于类的热替换和在线升级系统的实现。
2.static块 成员变量 构造函数的加载顺序
public class ChildClass extends FatherClass{ ParameterClass pc1 = new ParameterClass("child member parameter "); static ParameterClass pc = new ParameterClass("child static parameter "); { System.out.println("block " +"has been initialized"); } static{ System.out.println("static block " +"has been initialized"); } ChildClass(){ System.out.println("child " +"has been initialized"); } public static void main(String[] args){ new ChildClass(); } } class FatherClass{ ParameterClass pc1 = new ParameterClass("father member parameter"); static ParameterClass pc = new ParameterClass("father static parameter"); FatherClass(){ System.out.println("father " +"has been initialized"); } } class ParameterClass{ ParameterClass(String arg0){ System.out.println(arg0 +"has been initialized"); } }
3. Oracle的两种加载方式OCI和THIN的区别
public V put(K key, V value) { if (key == null) return putForNullKey(value); int hash = hash(key.hashCode());//获取key的hash值 int i = indexFor(hash, table.length); for (Entry<K,V> e = table[i]; e != null; e = e.next) { Object k; if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {//先比较hash值再用equals方法 V oldValue = e.value; e.value = value; e.recordAccess(this); return oldValue; } } modCount++; addEntry(hash, key, value, i); return null; }
TreeMap:基于红黑树(Red-Black tree)的 NavigableMap 实现。该映射根据其键的自然顺序进行排序,或者根据创建映射时提供的 Comparator 进行排序,具体取决于使用的构造方法。 红黑树查找的性能比双向链表要好。
HashMap:基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。
7.Http中keep-alive的作用是什么。在服务器的哪里可以配置。
Keep-alive是指在同一个连接中发出和接收多次HTTP请求。优点是:
8.Mysql master和slaver之间是如何实现同步的?分库分表是如何实现?
用于写操作的mater服务器将操作日志拷贝给众slaver服务器。
9.Thread实现的底层原理
每个对象的对象锁
10. BIO,NIO,AIO
11.String StringBuilder StringBuffer
12 java gc
13 java中的堆和栈
Heap(堆) | Stack(栈) | |
JVM中的功能 | 内存数据区 | 内存指令区 |
存储数据 | 对象实例(1) | 基本数据类型, 指令代码,常量,对象的引用地址(2) |