第三、Java面向对象
1、抽象类和接口的区别?
(1)接口可以被多重implements,抽象类只能被单一extends
(2)接口只有定义,抽象类可以有定义和实现
(3)接口的字段定义默认为:public static finl,
(4)抽象类是典型的一个模板方法
2、java中常见的异常类:
(1). https://www.wendangku.net/doc/8b8948546.html,ng.nullpointerexception “程序遇上了空指针”,
(2). https://www.wendangku.net/doc/8b8948546.html,ng.arrayindexoutofboundsexception “数组下标越界”,
(3). https://www.wendangku.net/doc/8b8948546.html,ng.IndexOutOfBoundsException 索引越界异常。当访问某个序列的索引值小于0或大于等于序列大小时,抛出该异常。
(4). https://www.wendangku.net/doc/8b8948546.html,ng.OutOfMemoryError 内存不足错误。当可用内存不足以让Java虚拟机分配给一个对象时抛出该错误。
算术异常类:ArithmeticExecption
空指针异常类:NullPointerException
类型强制转换异常:ClassCastException
数组负下标异常:NegativeArrayException
数组下标越界异常:ArrayIndexOutOfBoundsException
违背安全原则异常:SecturityException
文件已结束异常:EOFException
文件未找到异常:FileNotFoundException
字符串转换为数字异常:NumberFormatException
第四、线程
3、sleep() 和 wait() 有什么区别
Sleep是指休眠给定的时间,当这个时间达到之后,线程会再次醒来。
Wait是等待状态,多长时间不清楚,由另一个线程将其唤醒。
、启动一个线程是用run()还是start()?
启动一个线程是调用start()方法,启动线程并调用run方法。
3、线程的基本概念、线程的基本状态以及状态之间的关系
线程是进程内的并发,没有自已内存空间,共享进程的,线程间的通信成本较低。
Java中的线程有四种状态分别是:运行、就绪、挂起、结束。
4、多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么? 用什么关键字修饰同步方法?
stop()和suspend()方法为何不推荐使用?
多线程有两种实现方法,分别是继承Thread类与实现Runnable接口
同步的实现方面有两种,分别是synchronized,wait与notify
反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被”挂起”的线程恢复运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的Thread类中置入一个标志,指出线程应该活动还是挂起。若标志指出线程应该挂起,便用wait()命其进入等待状态。若标志指出线程
应当恢复,则用一个notify()重新启动线程。
第四、Jsp与servlet的区别 :
1.jsp经编译后就变成了Servlet.(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)
2.jsp更擅长表现于页面显示,servlet更擅长于逻辑控制.
3.Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,HttpServletResponse对象以及HttpServlet对象得到.
Jsp是Servlet的一种简化,使用Jsp只需要完成程序员需要输出到客户端的内容,Jsp中的Java脚本如何镶嵌到一个类中,由Jsp容器完成。而Servlet则是个完整的Java类,这个类的Service方法用于生成对客户端的响应。
2、JSP中动态INCLUDE与静态INCLUDE的区别?
jsp:include:在运行时调用另一个页面,变量是可以重复的。
<%@include file=””%>:在转译时合在一起,会成为同一个类,变量不可以重复。
3、forward和redirect的区别?
forward: 转发,在下一个页面中,request保留上一个页面中的request的所有值
redirect: 跳转,不传递request对象。
3 、请罗列jsp中的脚本、指令及动作?
指令
<%@page contentType=”text/html;charset=utf-8” language=”java” import=””%> 配置字符集错误页面等等
<%@include file=””%> 包含一下js jsp等
<%@taglib uri=”” prefix=””%> 导包
动作:
1、ArrayList,Vector, LinkedList的存储性能和特性 HashMap和Hashtable的区别:
ArrayList Vector:以数组的方式存储,增、删慢,查、改快
ArrayList:线程不安全,速度快
Vector:线程安全,速度慢(synchoronized)
LikedList: 以单链表的方式存储,增、删快,查、改慢
HashMap与Hashtable都实现的Map接口,HashTable线程安全,HashMap线程不安全。
2、集合的通用方法有那些?通用方法是什么?(操作)
(1)集合List 的遍历方法有:
Iterator:
Enumeration
For
Get
set
(2)Collection的通用方法有:
Iterator()
Add()
Clear();
remove()
NaN 属性是代表非数字值的特殊值。该属性用于指示某个值不是数字。
isNaN() 函数用于检查其参数是否是非数字值。
../表示相对当前路径的上一级目录;
./表示相对当前的路径;
1.== 两边值类型不同的时候,要先进行类型转换,再比较。
=== 不做类型转换,类型不同的一定不等。
"=="和"==="的规则如下:
先说 ===,这个比较简单,具体比较规则如下:
1、如果类型不同,就[不相等]
2、如果两个都是数值,并且是同一个值,那么[相等];(!例外)
的是,如果其中至少一个是NaN,那么[不相等]。(判断一个值是否是NaN,只能用isNaN()来判断)
3、如果两个都是字符串,每个位置的字符都一样,那么[相等];否则[不相等]。
4、如果两个值都是true,或者都是false,那么[相等]。
5、如果两个值都引用同一个对象或函数,那么[相等];否则[不相等]。
6、如果两个值都是null,或者都是undefined,那么[相等]。
再说 ==,具体比较规则如下:
1、如果两个值类型相同,进行 === 比较,比较规则同上
2、如果两个值类型不同,他们可能相等。根据下面规则进行类型转换再比较:
a、如果一个是null、一个是undefined,那么[相等]。
b、如果一个是字符串,一个是数值,把字符串转换成数值再进行比较。
c、如果任一值是 true,把它转换成 1 再比较;如果任一值是 false,把它转换成 0 再比较。
d、 如果一个是对象,另一个是数值或字符串,把对象转换成基础类型的值再比较。对象转换成基础类型,利用它的toString或者valueOf方法。js核心内置类,会尝试valueOf先于toString;例外的是Date,Date利用的是toString转换。非js核心的对象,令说(比较麻烦,我 也不大懂)
e、任何其他组合(array数组等),都[不相等]。
面试遇到的问题:
1.黑盒与白盒的不同
黑盒测试也称功能测试或数据驱动测试,它是在已知产品所应具有的功能,通过测试来检测每个功能是否都能正常使用,在测试时,把程序看作一个不能打开的黑盆子,在完全不考虑程序内部结构和内部特性的情况下,
白盒测试也称结构测试或逻辑驱动测试,它是知道产品内部工作过程,可通过测试来检测产品内部动作是否按照规格说明书的规定正常进行,
按照程序内部的结构测试程序,检验程序中的每条通路是否都有能按预定要求正确工作,而不顾它的功能,白盒测试的主要方法有逻辑驱动、基路测试等,
主要用于软件验证。
2.标识符的是否正确
接口类中方法只能用public 和default,不能用protected,private;
java 初始化块的作用是什么?
静态代码块在加载类的时候运行,就意味着静态代码块在程序中只会运行一次
class Demo{
{
System.out.println("构造块");
}
static{
System.out.println("类中静态构造块");
}
public Demo(){
System.out.println("构造方法");
}
public static void main(String args[]){
new Demo();
System.out.println("---------------------------------");
new Demo();
System.out.println("---------------------------------");
new Demo();
}
static{
System.out.println("---------------主类中的静态代码块---------------------------------");
}
}
运行结果:类中静态构造块
------
---------主类中的静态代码块---------------------------------
构造块
构造方法
---------------------------------
构造块
构造方法
总结:最先执行静态初始化块,多个静态初始化块,按顺序依次执行,而且静态初始化块只执行一次,然后在执行构造块,最后执行构造方法
标识符必须以字母、下划线_、美元符$开头
其他部分可以是字母、下划线_、美元符$、数字的任意组合
31. include的两种实现方式的区别?
<% include %>
32. JSP页面中两种跳转方式分别是什么?有什么区别?
请求转发和重定向
33.在JSP中如何读取客户端的请求,如何确定某个JSP文件的真实路径?
34.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理。
35.什么情况下调用doGet()和doPost()?
36. Hibernate的核心配置文件是什么及其作用?
37. Hibernate中有哪几种关联关系?
38. Hibernate对象的三大状态?
39. Struts 2处理请求的全过程是什么?
40.什么是AOP和IOC,它们的作用是什么?