51、JDBC操作的步骤
52、在使用jdbc的时候,如何防止出现sql注入的问题?怎么在JDBC内调用一个存储过程?
53、是否了解连接池,使用连接池有什么好处?
54、你所了解的数据源技术有那些?使用数据源有什么好处?
55、Java的io流分为哪两种?字节流与字符流的区别?
56、final、finalize()、finally
57、线程同步的方法
58、如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
59、java 创建对象的几种方式
60、java当中的四种引用
51、JDBC操作的步骤
加载数据库驱动类
打开数据库连接
执行sql语句
处理返回结果
关闭资源
52、在使用jdbc的时候,如何防止出现sql注入的问题?怎么在JDBC内调用一个存储过程?
防止注入:使用PreparedStatement类,而不是使用Statement类
调用存储过程:使用CallableStatement
53、是否了解连接池,使用连接池有什么好处?
数据库连接是非常消耗资源的,影响到程序的性能指标。
连接池是用来分配、管理、释放数据库连接的,可以使应用程序重复使用同一个数据库连接,而不是每次都创建一个新的数据库连接。
通过释放空闲时间较长的数据库连接避免数据库因为创建太多的连接而造成的连接遗漏问题,提高了程序性能。
54、你所了解的数据源技术有那些?使用数据源有什么好处?
Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;通过配置文件的形式来维护数据库信息,而不是通过硬编码。
当连接的数据库信息发生改变时,不需要再更改程序代码就实现了数据库信息的更新。
55、Java的io流分为哪两种?字节流与字符流的区别?
按功能来分:输入流(input),输出流(output)
按类型来分:字节流,字符流
以字节为单位输入输出数据,字节流按照8位传输
以字符为单位输入输出数据,字符流按照16位传输
56、final、finalize()、finally
final | finalize() | finally |
---|---|---|
关键字 | 方法 | 区块标志,用于try语句中 |
用于标识常量的关键字,final标识的关键字存储在常量池中 | finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作) | finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行; |
57、线程同步的方法
wait():让线程等待。将线程存储到一个线程池中。
notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。
notifyAll():唤醒所有的等待线程。将线程池中的所有线程都唤醒。
58、如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
- 不会,在下一个垃圾回收周期中,这个对象将是可被回收的。
59、java 创建对象的几种方式
采用new
通过反射
采用clone
通过序列化机制
前2者都需要显式地调用构造方法。造成耦合性最高的恰好是第一种,因此你发现无论什么框架,只要涉及到解耦必先减少new的使用。
60、java当中的四种引用
强引用,软引用,弱引用,虚引用。不同的引用类型主要体现在GC上:
强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。
软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。
弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象。
虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收