一月六号面试题整理
1.解释一下什么是servlet
- Servlet 是运行在 Web 服务器或应用服务器上的程序,它是作为来自 Web 浏览器或其他 HTTP 客户端的请求和 HTTP 服务器上的数据库或应用程序之间的中间层。
2.jsp有哪些动作?分别有什么作用
- jsp:include:在页面被请求的时候入一个文件。
- jsp:useBean:寻找或者实例化一个JavaBean。
- jsp:setProperty:设置JavaBean的属性。
- jsp:getProperty:输出某个JavaBean的属性。
- jsp:forward:把请求转到一个新的页面。
- jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记。
3.jsp中动态include与静态include的区别
- 静态包含:<%@ include file=”包含页面”%>
- 静态包含一般用于加载进页面显示后就再也不变的东西比如页眉、背景、标题等等。
- 静态包含不会检查所含文件的变化,把文件包含进来后,被包含文件的修改变化是不会影响已被包含进来的内容的。
- 静态包含发生在编译阶段。
- 动态包含:<jsp:include page=" " flush=“true”/>
- 动态包含用于加载经常变化的、要求显示最新版本内容的东西
- 不同之处:
- 执行时间上
- 静态include 是在编译阶段执行 。
- 动态include 在请求处理阶段执行 .
- 引入内容的不同 :
- 静态include 是引入静态文本 (html,jsp), 在 JSP 页面被转化成 servlet 之前和它融和到一起 .
- 动态include 引入执行页面或 servlet 所生成的应答文本 .
- 执行时间上
4.jsp与servlet有哪些相同点和不同点
- 相同点:都是使用JAVA语言进行开发的,联系:JSP依赖于daoServlet。
- 不同点如下:
- 主体不同
- JSP:是一种动态网页技术标准。
- Servlet:用Java编写的服务器端程序,具有独立于平台和协议的特性。
- 功能不同
- JSP:部署于网络服务器上,可以响应客户端发送的请求,并根据请求内容动态地生成HTML、XML或其他格式文档的Web网页,然后返回给请求者。
- Servlet:功能在于交互式地浏览和生成数据,生成动态Web内容。
- 特点不同
- JSP:为用户的HTTP请求提供服务,并能与服务器上的其它Java程序共同处理复杂的业务需求。
- Servlet:Servlet可以响应任何类型的请求,但绝大多数情况下Servlet只用来扩展基于HTTP协议的Web服务器。
5.xml有哪些解析技术?区别是什么
- DOM
- 解析器读入整个文档,然后构建一个驻留内存的树结构,然后代码就可以使用 DOM 接口来操作这个树结构。
- 优点:整个文档树在内存中,便于操作;支持删除、修改、重新排列等多种功能;
- 缺点:将整个文档调入内存(包括无用的节点),浪费时间和空间;
- 使用场合:一旦解析了文档还需多次访问这些数据;硬件资源充足(内存、CPU)。
- SAX
- 解决DOM的问题。
- 优点:不用事先调入整个文档,占用资源少;SAX解析器代码比DOM解析器代码小,适于Applet,下载。
- 缺点:不是持久的;事件过后,若没保存数据,那么数据就丢了;无状态性;从事件中只能得到文本,但不知该文本属于哪个元素;
- 使用场合:Applet;只需XML文档的少量内容,很少回头访问;
- 机器内存少;
- DOM4J
- 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
XML,特别值得一提的是连 Sun 的 JAXM 也在用 DOM4J。
- 是一个非常非常优秀的Java XML API,具有性能优异、功能强大和极端易用使用的特点,同时它也是一个开放源代码的软件。
- JDOM
- 为减少DOM、SAX的编码量,出现了JDOM
- 优点:20-80原则,极大减少了代码量。
- 使用场合:要实现的功能简单,如解析、创建等,但在底层,JDOM还是使用SAX(最常用)、DOM、
Xanan文档。
6.B/S与C/S的联系与区别
- 相同
- 他们都是一种软件架构
- 不同
1.硬件环境不同
2.对安全要求不同
3.对程序架构不同
4.软件重用不同
5.系统维护不同
6.处理问题不同
7.用户接口不同
8.信息流不同
7.面向对象的特征有哪些方面
- 面向对象的编程语言有封装、继承 、抽象、多态等4个主要的特征。
-
抽象
忽略一个主题中与当前目标无关的东西,专注的注意与当前目标有关的方面。(就是把现实世界中的某一类东西,提取出来,用程序代码表示,抽象出来的一般叫做类或者接口)。抽象并不打算了解全部问题,而是选择其中的一部分,暂时不用部分细节。抽象包括两个方面,一个数据抽象,而是过程抽象。 -
封装
封装就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。
封装保证了模块具有较好的独立性,使得程序维护修改较为容易。 -
继承
一种联结类的层次模型,并且允许和鼓励类的重用,提供一种明确表达共性的方法。对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特性,新类称为原始类的派生类(子类),原始类称为新类的基类(父类)。派生类可以从它的父类哪里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。因此可以说,继承为了重用父类代码,同时为实现多态性作准备。 -
多态
多态是指允许不同类的对象对同一消息做出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活/抽象/行为共享/代码共享的优势,很好的解决了应用程序函数同名问题。
-
8.Java中实现多态的机制是什么
- 靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
9.String是最基本的数据类型吗?
- 基本数据类型包括byte、int、char、long、float、double、boolean和short。
- Java.lang.String类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类
10.String 和StringBuffer的区别?
- JAVA平台提供了两个类:String和StringBuffer,它们可以储存和操作字符串,即包含多个字符的字符数据。
- 这个String类提供了数值不可改变的字符串。
- 而这个StringBuffer类提供的字符串进行修改。当你知道字符数据要改变的时候你就可以使用StringBuffer。
- String实现了equals方法,new String(“abc”).equals(new String(“abc”)的结果为true,
- 而StringBuffer没有实现equals方法,所以,new StringBuffer(“abc”).equals(new StringBuffer(“abc”)的结果为false。
- String覆盖了equals方法和hashCode方法,而StringBuffer没有覆盖equals方法和hashCode方法,所以,将StringBuffer对象存储进Java集合类中时会出现问题。
11.什么是内部类?Static Nested Class 和 Inner Class的不同。
- 内部类就是在一个类的内部定义的类.
- 内部类中不能定义静态成员.
- 内部类可以直接访问外部类中的成员变量.
- 内部类可以定义在外部类的方法外面,也可以定义在外部类的方法体中.
12.abstract class和interface有什么区别?
- 含有abstract修饰符的class即为抽象类,abstract 类不能创建实例对象。
- 接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。
- 两者的语法区别:
- 抽象类可以有构造方法,
接口中不能有构造方法。 - 抽象类中可以有普通成员变量,
接口中没有普通成员变量 - 抽象类中可以包含非抽象的普通方法
接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。 - 抽象类中的抽象方法的访问类型可以是public,protected和默认类型
接口中的抽象方法只能是public类型的,并且默认即为public abstract类型。 - 抽象类中可以包含静态方法,
接口中不能包含静态方法 - 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意.
接口中定义的变量只能是public static final类型,并且默认即为public static final类型。 - 一个类可以实现多个接口,但只能继承一个抽象类。
- 抽象类可以有构造方法,
- 两者在应用上的区别:
- 接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约。
- 而抽象类在代码实现方面发挥作用,可以实现代码的重用
例如,模板方法设计模式是抽象类的一个典型应用,假设某个项目的所有Servlet类都要用相同的方式进行权限判断、记录访问日志和处理异常,那么就可以定义一个抽象的基类,让所有的Servlet都继承这个抽象基类,在抽象基类的service方法中完成权限判断、记录访问日志和处理异常的代码,在各个子类中只是完成各自的业务逻辑代码