Java常见笔试和面试题(一)
1.break和continue的区别
在循环体内,break和continue的区别在于,使用break是结束整个循环,并执行循环体之后的语句。使用continue是结束本次循环,并继续执行下一次循环。
2.冒泡排序,快速排序,二分查找
3.面向对象的四大特征:抽象(有争议),封装,继承,多态
4.方法的重写和重载
- 重写是子类对父类允许访问的方法的实现过程进行重新编写,返回值和参数列表都不能改变。
- 重载是在一个类里面,方法名字相同,而参数不同,返回值类型可以相同也可以不同。
5.什么是多态,多态的应用场景?
多态是继封装,继承之后,面向对象的第三大特征。
多态可以实现向上转型和向下转型。
6.String和StringBuilder的区别,StringBuilder和StringBuffer的异同
-
String和StringBuilder的区别
String的字符串不能修改,要修改只能创建新的String对象。
StringBuilder的字符串可以修改。 -
StringBuilder和StringBuffer的异同
StringBuilder和StringBuffer的用法完全相同,都是可以改变自身的字符串。
StringBuilder的方法是非线程安全的,适合单线程环境。
StringBuffer的方法是线程安全的,适合多线程环境。
StringBuilder的性能高于StringBuffer。
7.异常处理的两种方式,throw异常处理流程?
一,使用throws关键字,声明异常,交给方法的调用者处理,最终交给JVM处理。
二,使用try…catch捕获异常。
- try…catch异常处理流程:如果try中没有异常,就不会执行catch中的代码,执行try…catch后面的代码。如果catch中有异常,且异常类型和catch声明的异常类型一致,就会执行catch中的代码,然后再执行try…catch后面的代码。finally中的代码一定会执行。
- throw异常处理流程:throw用于在方法中手动抛出异常,出现错误后抛出异常,让上级知道有异常出现,一旦抛出异常,后面的程序不能运行。
8.Servlet生命周期
Servlet生命周期指的是Servlet类的对象从创建到销毁的过程。
Servlet类是单实例多线程的,自始自终只会创建一个对象来响应用户请求。
- 如果servlet类的配置中没有load-on-startup配置:
当用户请求第一次到达时,就会创建servlet类的对象,然后使用该对象依次调用service(ServletRequest,ServletResponse)——service(HttpServletRequest,HttpServletResponse)——doGet/doPost方法响应用户请求,当用户请求再次到达时,不会重新创建对象,而是直接使用已经创建的对象调用service——service——doGet/doPost进行响应。 - 如果servlet类的配置中有load-on-startup配置:
在服务器启动时就会按照load-on-startup配置的加载顺序创建servlet类的实例,当请求到达时就直接使用创建的实例调用service——service——doGet/doPost进行响应。
当服务器关闭时,就销毁servlet实例。