71.Try.catch.finally是必须要存在的吗?
Try块必须存在,catch和finally可以不存在,但不能同时不存在
72.Thow与thorws区别
Throw写在代码块内,throw后面跟的是一个具体的异常实例
Throw写在方法前面后面,throws后面跟的是异常类,异常类可以出现多个
73.Error与Exception区别?
Error和Exception都是java错误处理机制的一部分,都继承了Throwable类。
Exception表示的异常,异常可以通过程序来捕捉,或者优化程序来避免。
Error表示的是系统错误,不能通过程序来进行错误处理。
74.使用Log4j对程序有影响吗?
有,log4j是用来日志记录的,记录一些关键敏感的信息,通常会将日志记录到本地文件或者数据库中。记录在本地文件中,会有频繁的io操作,会耗费一些系统资源。记录在数据库中,会频繁地操作数据库表,对系统性能也有一定的影响。但是为了程序安全以及数据的恢复或者bug的跟踪,这点资源消耗是可以承受的。
75.Log4j日志有几个级别?
由低到高:debug、info、wran、error
76.除了使用new创建对象之外,还可以用什么方法创建对象?
Java反射
77.Java反射创建对象效率高还是通过new创建对象的效率高?
通过new创建对象的效率比较高。通过反射时,先找查找类资源,使用类加载器创建,过程比较繁琐,所以效率较低
78.Java中集合框架的有几个?
Coillection、Map。
79.Collection接口下有那些集合框架?
List:线性表、Set:无序集合。
80.List接口有什么特点?
顺序存储、可以有重复值。
81.Set接口有什么特点
无须存储、不能有重复值。
82.ArrayList与LinkedList有什么区别?
ArrayList与LinkedList都实现了List接口。
ArrayList是线性表,底层是使用数组实现的,它在尾端插入和访问数据时效率较高,
Linked是双向链表,他在中间插入或者头部插入时效率较高,在访问数据时效率较低
83.Array与ArrayList有什么不一样?
Array与ArrayList都是用来存储数据的集合。ArrayList底层是使用数组实现的,但是arrayList对数组进行了封装和功能扩展,拥有许多原生数组没有的一些功能。我们可以理解成ArrayList是Array的一个升级版。
84.Map有什么特点
以键值对存储数据
元素存储循序是无须的
不允许出现重复键
85.JDBC操作的步骤
加载数据库驱动类 打开数据库连接 执行sql语句 处理返回结果 关闭资源
86.在使用jdbc的时候,如何防止出现sql注入的问题。
使用PreparedStatement类,而不是使用Statement类
87.怎么在JDBC内调用一个存储过程
使用CallableStatement
88.是否了解连接池,使用连接池有什么好处?
数据库连接是非常消耗资源的,影响到程序的性能指标。连接池是用来分配、管理、释放数据库连接的,可以使应用程序重复使用同一个数据库连接,而不是每次都创建一个新的数据库连接。通过释放空闲时间较长的数据库连接避免数据库因为创建太多的连接而造成的连接遗漏问题,提高了程序性能。
89.你所了解的数据源技术有那些?使用数据源有什么好处?
Dbcp,c3p0等,用的最多还是c3p0,因为c3p0比dbcp更加稳定,安全;通过配置文件的形式来维护数据库信息,而不是通过硬编码。当连接的数据库信息发生改变时,不需要再更改程序代码就实现了数据库信息的更新。
90.Java的io流分为哪两种?
按功能来分
输入流(input),输出流(output)
按类型来分
字节流,字符流
91.常用io类有那些?
File FileInputSteam,FileOutputStream BufferInputStream,BufferedOutputSream PrintWrite FileReader,FileWriter BufferReader,BufferedWriter ObjectInputStream,ObjectOutputSream
92.字节流与字符流的区别
以字节为单位输入输出数据,字节流按照8位传输
以字符为单位输入输出数据,字符流按照16位传输
93.final、finalize()、finally
性质不同
- final为关键字;
- finalize()为方法;
- finally为区块标志,用于try语句中;
作用
- final为用于标识常量的关键字,final标识的关键字存储在常量池中(在这里final常量的具体用法将在下面进行介绍);
- finalize()方法在Object中进行了定义,用于在对象“消失”时,由JVM进行调用用于对对象进行垃圾回收,类似于C++中的析构函数;用户自定义时,用于释放对象占用的资源(比如进行I/0操作);
- finally{}用于标识代码块,与try{}进行配合,不论try中的代码执行完或没有执行完(这里指有异常),该代码块之中的程序必定会进行;
94.抽象类和接口的区别?
抽象类:
- 抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。
- 包含抽象方法的类,一定是抽象类。
- 抽象类只能被继承,一个类只能继承一个抽象类。
接口:
- 全部的方法都是抽象方法,属型都是常量
- 不能实例化,可以定义变量。
- 接口变量可以引用具体实现类的实例
- 接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法
- 接口之间可以多实现
- 一个具体类可以实现多个接口,实现多继承现象
95.线程同步的方法
- wait():让线程等待。将线程存储到一个线程池中。
- notify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。
- notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒。
96.线程与进程的区别
进程是系统进行资源分配和调度的一个独立单位,线程是CPU调度和分派的基本单位
进程和线程的关系:
- 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
- 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
- 线程在执行过程中,需要协作同步。不同进程的线程间要利用消息通信的办法实现同步。
- 线程是指进程内的一个执行单元,也是进程内的可调度实体。
线程与进程的区别:
- 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位。
- 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行。
- 拥有资源:进程是拥有资源的一个独立单位,线程不拥有系统资源,但可以访问隶属于进程的资源。
- 系统开销:在创建或撤销进程的时候,由于系统都要为之分配和回收资源,导致系统的明显大于创建或撤销线程时的开销。但进程有独立的地址空间,进程崩溃后,在保护模式下不会对其他的进程产生影响,而线程只是一个进程中的不同的执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉,所以多进程的程序要比多线程的程序健壮,但是在进程切换时,耗费的资源较大,效率要差些。
97.&和&&的区别
&是位运算符。&&是布尔逻辑运算符,在进行逻辑判断时用&处理的前面为false后面的内容仍需处理,用&&处理的前面为false不再处理后面的内容。
98.重载与重写
- Overload为重载,Override为重写方法的重写和重载是Java多态性的不同表现。重写是父类与子类之间多态性的一种表现,重载是一个类中多态性的一种表现。
- 如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Override)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被"屏蔽"了。
- 如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overload)。
重载的方法是可以改变返回值的类型。
99.如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?
不会,在下一个垃圾回收周期中,这个对象将是可被回收的。
100.串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?
吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。