1. Servlet的基本架构
Servlet是Server与Applet的缩写,是服务端小程序的意思。是SUN公司提供的一门用于开发动态Web资源的技术。 Servlet本质上也是Java类,但要遵循Servlet规范进行编写,没有main()方法,它的创建、使用、销毁都由Servlet容器进行管理(如Tomcat)。Servlet是和HTTP协议是紧密联系的,其可以处理HTTP协议相关的所有内容。这也是Servlet应用广泛的原因之一。提供了Servlet功能的服务器,叫做Servlet容器,其常见容器有很多,如Tomcat, Jetty, resin, Oracle Application server, WebLogic Server, Glassfish, Websphere, JBoss等。
public class ServletName extends HttpServlet {
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
}
}
2. JDO是什么?
JDO提供了透明的对象存储,因此对开发人员来说,存储数据对象完全不需要额外的代码(如JDBC API的使用)。这些繁琐的例行工作已经转移到JDO产品提供商身上,使开发人员解脱出来,从而集中时间和精力在业务逻辑上。另外,JDO很灵活,因为它可以在任何数据底层上运行。JDBC只是面向关系数据库(RDBMS)JDO更通用,提供到任何数据底层的存储功能,比如关系数据库、文件、XML以及对象数据库(ODBMS)等等,使得应用可移植性更强。
3. xml的有哪些解析技术?区别是什么?
解析方式 | 思想 | 优点 | 缺点 |
---|---|---|---|
DOM | 将整个xml文件读入内存,建立一个dom树来解析每个结点 | a、由于整棵树在内存中,因此可以对xml文档随机访问 b、可以对xml文档进行修改操作 c、较sax,dom使用也更简单。 | a、整个文档必须一次性解析完 a、由于整个文档都需要载入内存,对于大文档成本高 |
SAX | 部分解析,基于事件驱动,可以注册自己感兴趣的事件,比如 EntityResolver, DTDHandler, ContentHandler, ErrorHandler接口,分别用于监听解析实体事件、DTD处理事件、正文处理事件和处理出错事件,默认实现类为DefaultHandler | a、无需将整个xml文档载入内存,因此消耗内存少 b、可以注册多个ContentHandler | a、不能随机的访问xml中的节点 b、不能修改文档 |
JDOM | 纯java,API大量使用了Collection类,且仅使用具体类而不使用接口,自身不包含解析器,它通常使用SAX2解析器来解析和验证输入xml文件,也可以将以前构造的DOM表示作为输入,包含转换器可以将JDOM表示输出为SAX2事件流、DOM模型或XML文本文档 | a、DOM方式的优点 b、具有SAX的Java规则 | a、DOM方式的缺点 |
DOM4 | 目前在xml解析方面是最优秀的(Hibernate、Sun的JAXM也都使用dom4j来解析XML),它合并了许多超出基本 XML 文档表示的功能,包括集成的 XPath 支持、XML Schema 支持以及用于大文档或流化文档的基于事件的处理 | 最优秀的一个,集易用和性能于一身。 |
XPath 是一门在 XML 文档中查找信息的语言, 可用来在 XML 文档中对元素和属性进行遍历。XPath 是 W3C XSLT 标准的主要元素,并且 XQuery 和 XPointer 同时被构建于 XPath 表达之上。因此,对 XPath 的理解是很多高级 XML 应用的基础。
XPath非常类似对数据库操作的SQL语言,或者说JQuery,它可以方便开发者抓起文档中需要的东西。(dom4j也支持xpath)
4. 你在项目中用到了xml技术的哪些方面?如何实现的?
用到了数据存储,信息配置两方面,在做数据交换平台的时候,将数据组装成xml文件,然后将xml文件压缩加密后通过网络传送给接收者,接收解密与解压缩后再次xml文件中还原相关信息进行处理,在做软件配置时,利用xml可以很放百年的进行,软件的各种配置都可以存储在xml文件中,比如SharedPrefences。
5. EJB 与JAVA BEAN的区别?
java bean是可复用的组件,对java bean并没有严格的规范,理论上讲,任何一个java类都可以是一个bean,但通常情况下,由于java bean是被容器所创建的,所以java bean应该具有一个无参构造器,另外还要实现SErializable接口用于实现bean的持久性。java bean实际上相当于微软com模型中的本地进程内组件,然是不能被跨进程访问的。
Enterprise java bean将挡雨dcom,即分布式组件,它是基于java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程,跨计算机),但是EJB必须被部署在诸如Webspere/WebLogic这样的容器内,EJB客户从不直接访问真正的组件,而是通过其同期访问,EJB容器是EJB组件的代理,EJB组件由容器所创建和管理,客户通过容器来访问真正的组件。
6. struts的应用
Struts是采用java servlet/javaServer pagers技术,开发web应用程序的开放源码的framework。采用struts能开发出基于mvc设计模式的应用框架,struts有如下的主要功能:
- 包含一个controller servlet,能将用户送到相应的action对象
- jsp自由tag库,并且在controller servlet中提供关联支持,帮助开发员简历交互式表单应用
- 提供了一系列实用对象:xml处理,通过java reflection apis自动处理javabeans属性,国际化的提示和消息。
7. forward和redirect的区别
forward是服务器请求资源,服务器直接访问目标地址的URL,把相应内容读取过来,然后在讲这些内容发送给浏览器,浏览器根本不知道服务器发送的内容是从哪来的,所以它的地址栏中还是原来的地址。
redirect就是服务端根据逻辑,发送一个状态码,高速浏览器重新去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取。
8. Servlet的生命周期,以及和CGI的区别
Servlet被服务器实例化后,容器运行其init方法,请求到达时运行其Service方法,Service方法自动派遣运行与请求对应的doXXXfangfa (doget, doPost)等,当服务器决定将实例销毁的时候调用其Destory方法。
与CGI的区别:Servlet处于服务器进程中,它通过多线程方式运行其Service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,搜易效率上低于CGI。
9. 说出ArrayList,Vector,LinkedList的存储性能和特性。
对比/种类 | ArrayList | Vector | LinkedList |
---|---|---|---|
实现方式 | 数组 | 数组 | 双向链表 |
存储容量 | 大于实际元素 | 大于实际元素 | 等于实际元个数 |
线程安全 | 不安全 | 安全(利用synchronized) | 不安全 |
扩充方式 | 每次增加原来的一半 | 每次增加原来的一倍 |
10. 同步和异步有什么异同,在什么情况下分别使用他们?举例说明。
如果数据在线程间共享,例如正在写的数据以后肯呢个被另一个线程读到,或者正在读的数据已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。
当应用程序在一个对象上调用了一个需要花费时间很长执行的方法,并且不希望让程序等待方法的执行时,就应该使用异步编程,在很多情况下采用异步途径更有效率。