Java面试题(牛客)

来源:互联网 发布:淘宝的惠威喇叭怎么样 编辑:程序博客网 时间:2024/05/09 12:11
1.
HashMap不能保证元素的顺序,HashMap能够将键设为null,也可以将值设为null,与之对应的是Hashtable,(注意大小写:不是HashTable),Hashtable不能将键和值设为null,否则运行时会报空指针异常错误;
HashMap线程不安全,Hashtable线程安全。
2.
静态块:用static申明,JVM加载类时执行,仅执行一次。
构造块:类中直接用{}定义,每一次创建对象时执行。
执行顺序优先级:静态块>main()>构造块>构造方法,静态块按照申明顺序执行。
3.
方法是static静态方法,直接使用"类.方法"就行了,因为静态方法在对象创建前就存在了,他的使用不依赖对象是否被创建.。
非静态的方法用"对象.方法"的方式,因为他在对象创建前不存在,必须依赖对象的创建后,才能使用。

4.
notify()就是对对象锁的唤醒操作。但有一点需要注意的是notify()调用后,并不是马上就释放对象锁的,而是在相应的synchronized(){}语句块执行结束,自动释放锁后,JVM会在wait()对象锁的线程中随机选取一线程,赋予其对象锁,唤醒线程,继续执行。这样就提供了在线程间同步、唤醒的操作。

5.堆区:只存放类对象,线程共享;
方法区:又叫静态存储区,存放class文件和静态数据,线程共享;
栈区:存放方法局部变量,基本类型变量区、执行环境上下文、操作指令区,线程不共享;

6.
1:创建时的区别:  

    Statementstatement = conn.createStatement();
   PreparedStatement preStatement = conn.prepareStatement(sql);
   执行的时候: 
    ResultSetrSet = statement.executeQuery(sql);
    ResultSetpSet = preStatement.executeQuery();

由上可以看出,PreparedStatement有预编译的过程,已经绑定sql,之后无论执行多少遍,都不会再去进行编译,

而 statement 不同,如果执行多变,则相应的就要编译多少遍sql,所以从这点看,preStatement 的效率会比Statement要高一些

2>安全性问题

这个就不多说了,preStatement是预编译的,所以可以有效的防止 SQL注入等问题

所以 preStatement 的安全性 比 Statement 高

3>代码的可读性 和 可维护性 
这点也不用多说了,你看老代码的时候  会深有体会

preStatement更胜一筹


0 0