java 常规笔试题

  1.Oracle和MySQL是关系数据库,IMS是层次数据库;

  2.Java线程分为守护线程和非守护线程(用户线程),只有当用户线程结束后,守护线程才会结束;GC是垃圾回收器,是典型的守护线程。

  3.volatile 是保证线程读取的可见性,并不能保证线程的安全性。

  4.linkedLIst继承自List,abstractSet继承自abstractCollect和set,此外还有abstract-Map和-List同理, hashSet继承自abstractSet,WeakMap继承自abstractMap并不继承hashMap.

  5. 存在使i + 1 < i的数,因为当i作为int类型的数时,内存溢出。

   存在使i > j || i <= j不成立的数==>>存在,比如Double.NaN或Float.NaN.

  6.Java中0.6666的数据类型是double类型,因为默认的是double,如果是float类型的必须要在末尾加上f,除非是直接定义的float数据,如:float s=0.3333;

  7.以InputStream(输入)/OutputStream(输出)为后缀的是字节流;以Reader(输入)/Writer(输出)为后缀的是字符流。Reader只能用FileReader进行实例化,不能进行流对象的创建。

  8.java 接口修饰符可以是:abstract 和final。接口里面定义变量的话,必须加static final.

  9. 常用的对称加密算法有:DES、3DES、RC2、RC4、AES

      常用的非对称加密算法有:RSA、DSA、ECC

        使用单向散列函数的加密算法:MD5、SHA

  9.null可以强制转化任何类型。

  10.对象(多态性对象的时候)的初始化顺序:(1)首先执行父类静态代码块,然后执行子类静态代码块

                                                                                (2)紧接着再执行父类代码块,父类无参构造方法

                                                                                 (3)子类代码块,子类无参构造方法

                       注明:当实例化一个类以后,静态代码块不会再次执行,代码块依然实例化会执行。实例化时,父类无参构造每次都会被调用,最后再看本身的调用实例化构造是有参还是无参,如果本身是有参数的,那么本身的无参就不会调用执行,但是父类的一定会执行。(此种情况是因为没有显示写出super()调用那个父类构造方法而默认调用无参父类构造方法,若super()显示指定调用那个就调用那个构造方法)。

  11.java里面所有定义的基本类型或对象要进行输出,必须要有值或者初始化。

  12.抽象类遵循的原则:

  (1)abstract关键字只能修饰类和方法,不能修饰字段。
  (2)抽象类不能被实例化(无法使用new关键字创建对象实例),只能被继承。
  (3)抽象类可以包含属性,方法,构造方法,初始化块,内部类,枚举类,和普通类一样,普通方法一定要实现,变量可以初始化或不初始化但不能初始化后在抽象类中重新赋值或操作该变量(只能在子类中改变该变量)。
  (4)抽象类中的抽象方法(加了abstract关键字的方法)不能实现。
  (5)含有抽象方法的类必须定义成抽象类。

  13.java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。

  (1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。

  (2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。

  (3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。

  14.在Java中,子类的构造过程中必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来。但如果父类有多个构造函数时,该如何选择调用呢?

第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法(就是没有参数的构造方法),但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是如果在子类构造方法中我们并没有显示的调用基类的构造方法,如:super();  这样就会调用父类没有参数的构造方法。    

第二个规则:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数,此时无参的构造函数就不会被调用。

总之,一句话:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。

  15.数据库的特点:   

    1.数据结构化
    2.数据的共享性高,冗余度低,易扩充
    3.数据独立性高
    4.数据由DBMS统一管理和控制
  16.java加载一个类是根据顺序加载构造语句模块或者静态模块化语句,然后当实例化一个类的时候,静态模块语句不会在实例化。
 
  spring 事物:
    PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。 
    PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。 
    PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。 
    PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。 
    PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
    PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务
原文地址:https://www.cnblogs.com/cqyy/p/7275091.html