面试题要点

一.static修饰某个字段时,确定会改变字段建立的方式(每一个被static修饰的字段对于每个类来讲只有一份存储空间,而非static修饰的字段对于每个对象来讲都有一个存储空间)java

     static 修饰符修饰的变量是全部同一个类生成的对象共享的tomcat

 

二.多线程

  1. 使用匿名内部类时,必须继承一个类或实现一个接口
  2. 匿名内部类因为没有名字,所以不能定义构造函数
  3. 匿名内部类中不能含有静态成员变量和静态方法

 

Thread 的 run 和 start 方法:函数

 

 

ANT 和 Maven 区别:this

 

struts1 和 struts2的区别:spa

 

 

子类构造方法在调用时必须先调用父类的,因为父类没有无参构造,必须在子类中显式调用线程

 

1)Bootstrap ClassLoadercode

负责加载$JAVA_HOME中jre/lib/rt.jar里全部的class,由C++实现,不是ClassLoader子类对象

2)Extension ClassLoaderblog

负责加载java平台中扩展功能的一些jar包,包括$JAVA_HOME中jre/lib/*.jar或-Djava.ext.dirs指定目录下的jar包

3)App ClassLoader

负责记载classpath中指定的jar包及目录中class

4)Custom ClassLoader

属于应用程序根据自身须要自定义的ClassLoader,如tomcat、jboss都会根据j2ee规范自行实现ClassLoader

加载过程当中会先检查类是否被已加载,检查顺序是自底向上,从Custom ClassLoader到BootStrap ClassLoader逐层检查,只要某个classloader已加载就视为已加载此类,保证此类只全部ClassLoader加载一次。而加载的顺序是自顶向下,也就是由上层来逐层尝试加载此类。

ArrayList空间的增加率为1.5倍

 

一、ThreadLocal的类声明:

public class ThreadLocal<T>

能够看出ThreadLocal并无继承自Thread,也没有实现Runnable接口。

二、ThreadLocal类为每个线程都维护了本身独有的变量拷贝。每一个线程都拥有了本身独立的一个变量。

因此ThreadLocal重要做用并不在于多线程间的数据共享,而是数据的独立。

因为每一个线程在访问该变量时,读取和修改的,都是本身独有的那一份变量拷贝,不会被其余线程访问,

变量被完全封闭在每一个访问的线程中。

三、ThreadLocal中定义了一个哈希表用于为每一个线程都提供一个变量的副本:

 static class ThreadLocalMap {

        static class Entry extends WeakReference<ThreadLocal> {

            /** The value associated with this ThreadLocal. */

            Object value;

            Entry(ThreadLocal k, Object v) {

                super(k);

                value = v;

            }

        }

        /**

         * The table, resized as necessary.

         * table.length MUST always be a power of two.

         */

        private Entry[] table;

}

相关文章
相关标签/搜索