`

面试三

 
阅读更多

1.所有的对象实例化都需要调用构造函数 ,个人为是对的,因为你new时候会调用,反射的时候也会调用默认的构造函数,克隆也会,因为构造函数就是为了防止属性不能正确初始化而设计的。

2.

public class A {
    static {
        System.out.println(" static  a");
    }

    {
        System.out.println(" a 代码块 ");
    }

    public A() {
        System.out.println(" a 构造函数");
    }
}

 

public class B extends A {
    static {
        System.out.println(" static  b");
    }

    {
        System.out.println(" b 代码块 ");
    }

    public B() {
        System.out.println(" b 构造函数");
    }

    public static void main(String[] args) {
        new B();
    }
}

 结果:

 static  a
 static  b
 a 代码块 
 a 构造函数
 b 代码块 
 b 构造函数
 

推荐读读一下深入理解java虚拟机第七章,当时面试的时候写对了,但是还是免不了被刷的结果。

类的加载会在对象实例化之前,而子类实例化时会实例化父类,但是接口则不一样,必须使用到接口的时候才会实例化接口。

 3.

public class ThreadA {
    public static void main(String[] args) {
        new Thread(() -> {
           print();
        }).run();
        System.out.println("2");
    }
    public static void print(){
        System.out.println("1");
    }
}

 本来以为这里考的是竞态性,没想到这里是个run,哎,只是简单的调用了这个方法,并没有开启线程。

4.自定义一个classloader

深入理解java虚拟机第七章

5.threadlocal原理

当时说了threadlocal使用安全原子类保证了线程的hashcode,并使用get和set方法进行传值,保证了线程安全的同时也减少了参数传递。需要标准答案的请百度。

6.http头

你咋不考新华字典呢?

7.安全单例模式

public class Singleton {
    private static volatile Singleton singleton = null;

    private Singleton() {
    }

    public static Singleton instance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

 如果不进行双检查,在多线程竞态的时候可能会导致产生两个。

8.编写一个二分查找

http://dan326714.iteye.com/admin/blogs/2426244

9.get是否能用body进行传输

https://yanbin.blog/why-http-get-cannot-sent-data-with-reuqest-body/ 写的不错,推荐看一下

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics