笔试不足

由于自己的垃圾,没有过目不忘的能力,经常看完书合上就忘记了,答题很菜,所以持续更新笔试遇到的问题

2018.9.9京东笔试

1、类的初始化过程,父类,静态变量,静态代码块,代码块

Java程序初始化的执行顺序

Java程序初始化的执行顺序:父类静态变量—>父类静态代码块—>子类静态变量—>子类静态代码块—>父类非静态变量—>父类非静态代码块—>父类构造方法—>子类非静态变量—>子类非静态代码块—>子类构造方法

package com.practice.initClass;

/**
 * 请填写类注释
 *
 * @author ling
 * @since 2018年09月10日
 */
public class InitClass {
    public static void main(String[] args) {
       /* System.out.println("\n---------------SubClass.name------------------\n"+SubClass.name);
        System.out.println("\n---------------SubClass.value------------------\n"+SubClass.value);

        System.out.println("\n---------------SubClass.nameSuper------------------\n"+SubClass.nameSuper);
        System.out.println("\n---------------SubClass.valueSuper------------------\n"+SubClass.valueSuper);*/

        System.out.println("\n--------------new SubClass()-------------------\n");
        SubClass subClass=new SubClass();

        /*System.out.println("\n--------------new SuperClass()-------------------\n");
        SuperClass superClass=new SuperClass();

        System.out.println("\n--------------SuperClass superClassOfSub=new SubClass()-------------------\n");
        SuperClass superClassOfSub=new SubClass();*/
    }
}
class SuperClass{
    final static String nameSuper="final static string of superClass";
    static String valueSuper="static string of superClass";
    static {
        System.out.println("static blocker of superClass");
    }
    {
        System.out.println("not static blocker of superClass");
    }
    SuperClass(){
        System.out.println("constructor of superClass");
    }
}
class SubClass extends SuperClass{
    final static String name="final static string of subClass";
    static String value="static string of subClass";
    static {
        System.out.println("static blocker of subClass");
    }
    {
        System.out.println("not static blocker of subClass");
    }
    SubClass(){
        System.out.println("constructor of subClass");
    }
}
--------------new SubClass()-------------------

static blocker of superClass
static blocker of subClass
not static blocker of superClass
constructor of superClass
not static blocker of subClass
constructor of subClass

类初始化场景

      (1) 遇到new、getstatic、putstatic或invokestatic这4条字节码指令时,如果类没有进行过初始化,则需要先触发其初始化。生成这4条指令的最常见的Java代码场景是:使用new关键字实例化对象的时候读取或设置一个类的静态字段(被final修饰、已在编译期把结果放入常量池的静态字段除外)的时候,以及调用一个类的静态方法的时候

      (2) 使用java.lang.reflect包的方法对类进行反射调用的时候,如果类没有进行过初始化,则需要先触发其初始化。

      (3) 当初始化一个类的时候,如果发现其父类还没有进行过初始化,则需要先触发其父类的初始化

      (4)当虚拟机启动时,用户需要指定一个要执行的主类(包含main()方法的那个类),虚拟机会先初始化这个主类

只有上述四种情况会触发初始化,也称为对一个类进行主动引用,除此以外,所有其他方式都不会触发初始化,称为被动引用

代码清单1

上述代码运行后,只会输出【---SuperClass init】, 而不会输出【SubClass init】,对于静态字段,只有直接定义这个字段的类才会被初始化。

因此,通过子类来调用父类的静态字段,只会触发父类的初始化,但是这是要看不同的虚拟机的不同实现。

代码清单2

此处对象数组不会引起SuperClass的初始化

但是却触发了【[Ltest.SuperClass】的初始化,通过arr.toString()可以看出,对于用户代码来说,这不是一个合法的类名称,它是由虚拟机自动生成的,直接继承于Object的子类,创建动作由字节码指令newarray触发,此时数组越界检查也会伴随数组对象的所有调用过程,越界检查并不是封装在数组元素访问的类中,而是封装在数组访问的xaload,xastore字节码指令中.

代码清单3

public static void main(String[] args) {
        System.out.println("\n---------------SubClass.nameSuper------------------\n"+SubClass.nameSuper);
        
    }
---------------SubClass.nameSuper------------------
final static string of superClass
static blocker of superClass

对常量ConstClass.value 的引用实际都被转化为NotInitialization类对自身常量池的引用,不会触发类实例化,静态变量和静态代码块是同一时期初始化的,所以不管调用静态变量还是静态代码块都会触发对方一起初始化

public static void main(String[] args) {
   
        System.out.println("\n---------------SubClass.valueSuper------------------\n"+SubClass.valueSuper);

      
    }
static blocker of superClass

---------------SubClass.valueSuper------------------
static string of superClass

2、加载机制

 

3、二叉树的节点数计算

 

4、tcp/ip协议五层模型,OSI七层模型,以及作用

 

5、tcp三次握手,四次释放

 

6、排序算法的时间复杂度

https://blog.csdn.net/gane_cheng/article/details/52652705

 

7、spring面试相关问题

https://www.nowcoder.com/discuss/105358?type=0&order=0&pos=566&page=1

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值