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.抽象类遵循的原则:
13.java 的transient关键字为我们提供了便利,你只需要实现Serilizable接口,将不需要序列化的属性前添加关键字transient,序列化对象的时候,这个属性就不会序列化到指定的目的地中。
(1)一旦变量被transient修饰,变量将不再是对象持久化的一部分,该变量内容在序列化后无法获得访问。
(2)transient关键字只能修饰变量,而不能修饰方法和类。注意,本地变量是不能被transient关键字修饰的。变量如果是用户自定义类变量,则该类需要实现Serializable接口。
(3)被transient关键字修饰的变量不再能被序列化,一个静态变量不管是否被transient修饰,均不能被序列化。
14.在Java中,子类的构造过程中必须调用其父类的构造函数,是因为有继承关系存在时,子类要把父类的内容继承下来。但如果父类有多个构造函数时,该如何选择调用呢?
第一个规则:子类的构造过程中,必须调用其父类的构造方法。一个类,如果我们不写构造方法,那么编译器会帮我们加上一个默认的构造方法(就是没有参数的构造方法),但是如果你自己写了构造方法,那么编译器就不会给你添加了,所以有时候当你new一个子类对象的时候,肯定调用了子类的构造方法,但是如果在子类构造方法中我们并没有显示的调用基类的构造方法,如:super(); 这样就会调用父类没有参数的构造方法。
第二个规则:如果子类的构造方法中既没有显示的调用基类构造方法,而基类中又没有无参的构造方法,则编译出错,所以,通常我们需要显示的:super(参数列表),来调用父类有参数的构造函数,此时无参的构造函数就不会被调用。
总之,一句话:子类没有显示调用父类构造函数,不管子类构造函数是否带参数都默认调用父类无参的构造函数,若父类没有则编译出错。
15.数据库的特点:
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。