JavaEE认证面试题Word文档格式.docx
《JavaEE认证面试题Word文档格式.docx》由会员分享,可在线阅读,更多相关《JavaEE认证面试题Word文档格式.docx(39页珍藏版)》请在冰豆网上搜索。
15.SpringIoC的原理18
16.SpringAOP的原理18
17.AOP的基本概念:
切面、通知、切入点、连接点、织入19
18.SSH整合的基本步骤19
19.并行操作下数据库事务出现的问题及含义;
事务的隔离级别和四大属性19
20.手动搭建Web项目,手动搭建SSH环境20
21.Mybatis中#{...}和${...}的区别21
22.MyBatis中使用LIKE语句该怎么写?
22
23.如何执行批量插入?
24.如何获取自动生成的(主)键值?
23
25.在mapper中如何传递多个参数?
26.Struts2和SpringMVC对比24
第三章其他26
1.项目开发经历了哪几个阶段?
26
2.白盒测试和黑盒测试26
3.面向对象设计原则有哪些26
4.写出简单工厂模式的示例代码27
5.写出单例模式的示例代码27
6.请对你所熟悉的一个设计模式进行介绍28
7.索引是怎样来提高搜索速度的30
8.简述什么是SOA。
30
9.什么是工作流?
第一章动态网页技术
1.JSP的执行过程
在JSP运行过程中,首先由客户端发出请求,Web服务器接收到请求后,如果是第一次访问某个jsp页面,Web服务器对它进行以下3个操作。
1.翻译:
由.jsp变为.java,由JSP引擎实现。
2.编译:
由.java变为.class,由Java编译器实现。
3.执行:
由.class变为.html,用Java虚拟机执行编译文件,然后将执行结果返回给Web服务器,并最终返回给客户端
如果不是第一次访问某个JSP页面,则只执行第三步。
所以第一次访问JSP较慢。
2.JSP的9个内置对象及其含义
request表示HttpServletRequest对象。
它包含了有关浏览器请求的信息
response表示HttpServletResponse对象,并提供了几个用于设置浏览器的响应的方法
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。
它是用于方便存取各种范围的名字空间
session表示一个请求的javax.servlet.http.HttpSession对象。
Session可以存贮用户的状态信息
applicaton表示一个javax.servle.ServletContext对象。
这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。
该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
jsp:
include:
在页面被请求的时候引入一个文件。
useBean:
寻找或者实例化一个JavaBean。
jsp:
setProperty:
设置JavaBean的属性。
getProperty:
输出某个JavaBean的属性。
forward:
把请求转到一个新的页面。
plugin:
根据浏览器类型为Java插件生成OBJECT或EMBED标记。
4.JSP中动态INCLUDE与静态INCLUDE的区别
动态包含可以传递参数,而静态则不可以
5.JNDI是什么
JNDI全称JavaNamingandDirectoryInterface
JNDI是Java平台的一个标准扩展,提供了一组接口、类和关于命名空间的概念。
如同其它很多Java技术一样,JDNI是provider-based的技术,暴露了一个API和一个服务供应接口(SPI)。
这意味着任何基于名字的技术都能通过JNDI而提供服务,只要JNDI支持这项技术。
JNDI目前所支持的技术包括LDAP、CORBACommonObjectService(COS)名字服务、RMI、NDS、DNS、Windows注册表等等。
很多J2EE技术,包括EJB都依靠JNDI来组织和定位实体。
6.错误404,500分别表示什么?
404,没有找到该页(没有找到资源)。
500,内部错误
7.容器的理解
容器也是java程序,它的主要作用是为应用程序提供运行环境。
,容器用来接管安全性、并发性、事务处理、交换到辅助存储器和其它服务的责任
以tomcat为例:
Tomcat是一个后台服务进程,其它的servlet(相当于DLL)是在Tomcat容器内运行,Broswer只与Tomcat通迅;
Tomcat接受browser的请求,经过一系列动作(如果是静态网页,那么装载,按http协议形成响应流;
如果是动态的如JSP,那就要调用JDK中的servlet.jsp接口,解释形成静态网页,按http协议生成响应流发送回browser)后,形成静态网页,返回响应。
8.page/request/session/application的范围区别
page:
当前页面范围
request:
当前页面范围+转发页面(forward)+包含页面(include)
session:
当前会话:
session在以下几种情况下失效
1.销毁session:
Session.invalidate();
2.超过最大非活动间隔时间
3.手动关闭浏览器(session并没有立刻失效,因为服务器端session仍旧存在,超过最大非活动间隔时间后真正失效)
4.application:
当前应用;
服务器重新启动前一直有效
9.get和post的区别
1.Get是不安全的,因为在传输过程,数据被放在请求的URL中;
Post的所有操作对用户来说都是不可见的。
2.Get传送的数据量较小,这主要是因为受URL长度限制;
Post传送的数据量较大,一般被默认为不受限制。
3.Get限制Form表单的数据集的值必须为ASCII字符;
而Post支持整个ISO10646字符集。
4.Get执行效率却比Post方法好。
Get是form提交的默认方法。
10.Servlet的生命周期
1.加载:
在下列时刻加载Servlet:
(1)如果已配置自动加载选项,则在启动服务器时自动加载(web.xml中设置<
load-on-start>
);
(2)在服务器启动后,客户机首次向Servlet发出请求时;
(3)重新加载Servlet时(只执行一次)
2.实例化:
加载Servlet后,服务器创建一个Servlet实例。
(只执行一次)
3.初始化:
调用Servlet的init()方法。
在初始化阶段,Servlet初始化参数被传递给Servlet配置对象ServletConfig。
(只执行一次)
4.请求处理:
对于到达服务器的客户机请求,服务器创建针对此次请求的一个“请求”对象和一个“响应”对象。
服务器调用Servlet的service()方法,该方法用于传递“请求”和“响应”对象。
service()方法从“请求”对象获得请求信息、处理该请求并用“响应”对象的方法以将响应传回客户机。
service()方法可以调用其它方法来处理请求,例如doGet()、doPost()或其它的方法。
(每次请求都执行该步骤)
5.销毁:
当服务器不再需要Servlet,或重新装入Servlet的新实例时,服务器会调用Servlet的destroy()方法。
11.JSP和Servlet的区别和联系
区别
1.JSP是在HTML代码里写JAVA代码,框架是HTML;
而Servlet是在JAVA代码中写HTML代码,本身是个JAVA类。
2.JSP使人们把显示和逻辑分隔成为可能,这意味着两者的开发可并行进行;
而Servlet并没有把两者分开。
3.Servlet独立地处理静态表示逻辑与动态业务逻辑.这样,任何文件的变动都需要对此服务程序重新编译;
JSP允许用特殊标签直接嵌入到HTML页面,HTML内容与JAVA内容也可放在单独文件中,HTML内容的任何变动会自动编译装入到服务程序.
4.Servlet需要在web.xml中配置,而JSP无需配置。
5.目前JSP主要用在视图层,负责显示,而Servlet主要用在控制层,负责调度
联系:
都是Sun公司推出的动态网页技术。
先有Servlet,针对Servlet缺点推出JSP。
JSP是Servlet的一种特殊形式,每个JSP页面就是一个Servlet实例——JSP页面由系统翻译成Servlet,Servlet再负责响应用户请求。
12.session和cookie的区别
1、联系
http是无状态的协议,客户每次读取web页面时,服务器都打开新的会话,而且服务器也不会自动维护客户的上下文信息,那么要怎么才能在多次请求之间共享信息呢(比如实现网上商店中的购物车)?
session和cookie就是为了解决HTTP协议的无状态而采用的两种解决方案。
2、原理(通过比喻形象说明,真正原理自己总结)
⏹Cookie:
发给顾客一张卡片,上面记录着消费的数量,一般还有个有效期限。
每次消费时,如果顾客出示这张卡片,则此次消费就会与以前或以后的消费相联系起来。
这种做法就是在客户端保持状态。
【卡上记录所有信息,而店家只认卡不认人。
】
⏹Session:
发给顾客一张会员卡,除了卡号之外什么信息也不纪录,每次消费时,如果顾客出示该卡片,则店员在店里的纪录本上找到这个卡号对应的纪录添加一些消费信息。
这种做法就是在服务器端保持状态。
【只记用户ID,而ID的详细记录放在店家的数据库里;
每次凭ID检索服务器的记录。
3、区别
⏹cookie数据存放在客户的浏览器上,session数据放在服务器上(sessionid可以通过cookie保存在客户端,也可以使用URL重写方式)。
⏹cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗,考虑到安全应当使用session
⏹session会在一定时间内保存在服务器上。
当访问增多,会比较占用你服务器的性能,考虑到减轻服务器性能方面,应当使用COOKIE
⏹单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。
⏹个人建议:
将登陆信息等重要信息存放为SESSION;
其他信息如需保留,可放在COOKIE中
13.转发和重定向的区别
转发是在服务端直接做的事情,是对客户端的同一个request进行传递,浏览器并不知道。
重定向是由浏览器来做的事情。
重定向时,服务端返回一个response,里面包含了跳转的地址,由浏览器获得后,自动发送一个新request。
转发像呼叫转移或者110报警中心,重定向似114查号台。
◆区别1:
跳转效率的不同
⏹转发效率相对高;
重定向效率相对低
◆区别2:
实现语句不同
⏹转发request.getRequestDispatcher("
xxxx"
).forward(request,response);
⏹重定向response.sendRedirect("
)
◆区别3:
是否共有同一个request的数据
⏹转发源组件与目标组件共有同一个request数据
⏹重定向源组件与目标组件不共有同一个request数据(可使用session共有数据)
◆区别4:
浏览器URL地址的不同
⏹转发后浏览器URL地址保持不变(源组件地址)
⏹重定向后浏览器URL地址改变为重定向后的地址(目标组件地址)
◆区别5:
"
/"
路径的含义不同
⏹转发时"
代表当前项目的根路径;
重定向时"
代表当前服务器的根路径
◆区别6:
跳转范围的不同
⏹只能转发到同一应用中的URL(默认);
可以重定向任何服务器、任何应用的URL
◆区别7:
刷新是否导致重复提交
⏹转发会导致重复提交(可以通过同步令牌解决);
重定向不会导致重复提交
◆区别8:
是否经过过滤器
⏹转发不经过过滤器(默认情况);
重定向经过过滤器
14.MVC模式及其优缺点
一、MVC原理
MVC是一种程序开发设计模式,它实现了显示模块与功能模块的分离。
提高了程序的可维护性、可移植性、可扩展性与可重用性,降低了程序的开发难度。
它主要分模型、视图、控制器三层。
1、模型(model)它是应用程序的主体部分,主要包括业务逻辑模块和数据模块。
模型与数据格式无关,这样一个模型能为多个视图提供数据。
由于应用于模型的代码只需写一次就可以被多个视图重用,所以减少了代码的重复性
2、视图(view)用户与之交互的界面、在web中视图一般由jsp,html组成
3、控制器(controller)接收来自界面的请求并交给模型进行处理在这个过程中控制器不做任何处理只是起到了一个连接的作用
二、MVC的优点
1、降低代码耦合性。
在MVC模式中,三个层各施其职,所以如果一旦哪一层的需求发生了变化,就只需要更改相应的层中的代码而不会影响到其他层中的代码。
2、有利于分工合作。
在MVC模式中,由于按层把系统分开,那么就能更好的实现开发中的分工。
网页设计人员可进行开发视图层中的JSP,而对业务熟悉的人员可开发业务层,而其他开发人员可开发控制层。
3、有利于组件的重用。
如控制层可独立成一个能用的组件,表示层也可做成通用的操作界面。
可以为一个模型在运行时同时建立和使用多个视图。
三、MVC的不足之处
1、增加了系统结构和实现的复杂性。
对于简单的界面,严格遵循MVC,使模型、视图与控制器分离,会增加结构的复杂性,并可能产生过多的更新操作,降低运行效率。
2、视图与控制器间的过于紧密的连接。
视图与控制器是相互分离,但确实联系紧密的部件,视图没有控制器的存在,其应用是很有限的,反之亦然,这样就妨碍了他们的独立重用。
3、视图对模型数据的低效率访问。
依据模型操作接口的不同,视图可能需要多次调用才能获得足够的显示数据。
对未变化数据的不必要的频繁访问,也将损害操作性能。
4、目前,一般高级的界面工具或构造器不支持模式。
改造这些工具以适应MVC需要和建立分离的部件的代价是很高的,从而造成MVC使用的困难。
15.B/S和C/S的含义及其区别
C/S结构,即Client/Server(客户机/服务器)结构,通过将任务合理分配到Client端和Server端,降低了系统的通讯开销,可充分利用两端硬件环境优势。
早期软件系统多以此作为首选设计标准。
B/S结构,即Browser/Server(浏览器/服务器)结构,是随着Internet技术的兴起,对C/S结构的一种变化或者改进的结构。
在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现,节约了开发成本,便于软件维护。
1、C/S是建立在局域网的基础上的。
B/S是建立在广域网的基础上的,但并不是说B/S结构不能在局域网上使用。
2、B/S业务扩展简单方便,通过增加页面即可增加服务器功能。
C/S的客户端还需要安装专用的客户端软件,不利于扩展。
3、B/S维护简单方便。
开发、维护等几乎所有工作也都集中在服务器端,当企业对网络应用进行升级时,只需更新服务器端的软件就可以,这减轻了异地用户系统维护与升级的成本。
。
4、B/S响应速度不及C/S;
5、B/S用户体验效果不是很理想
1、数据库连接池的原理。
•传统连接方式:
–首先调用Class.forName()方法加载数据库驱动,
–然后调用DriverManager.getConnection()方法建立连接.
•连接池技术:
–连接池解决方案是在应用程序启动时就预先建立多个数据库连接对象,然后将连接对象保存到连接池中。
–当客户请求到来时,从池中取出一个连接对象为客户服务。
–当请求完成时,客户程序调用close()方法,将连接对象放回池中.
–对于多于连接池中连接数的请求,排队等待。
–应用程序还可根据连接池中连接的使用率,动态增加或减少池中的连接数。
2、为什么要使用连接池?
•传统的数据库连接方式
–一个连接对象对应一个物理连接
–每次操作都打开一个物理连接,
–使用完都关闭连接,造成系统性能低下。
•连接池技术
–客户程序得到的连接对象是连接池中物理连接的一个句柄
–调用连接对象的close()方法,物理连接并没有关闭,数据源的实现只是删除了客户程序中的连接对象和池中的连接对象之间的联系.
•数据库连接的建立及关闭是耗费系统资源的操作,在大型应用中对系统的性能影响尤为明显。
为了能重复利用数据库连接对象,缩短请求的响应时间和提高服务器的性能,支持更多的客户,应采用连接池技术.
JavaBean是可复用的组件,对JavaBean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。
但通常情况下,由于JavaBean是被容器所创建(如Tomcat)的,所以JavaBean应具有一个无参的构造器。
另外,通常JavaBean还要实现Serializable接口用于实现Bean的持久性。
JavaBean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。
EnterpriseJavaBean相当于DCOM,即分布式组件。
它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。
但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。
EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。
客户通过容器来访问真正的EJB组件。
18.Ajax如何实现的
实现Ajax的关键是使用XMLHttpRequest对象(下简称XHR对象)
Step1.创建XHR对象实例
Step2.向服务器做请求
Step3.指定回调函数,即当服务器返回结果时如何处理结果
Step4.使用XHR对象的send方法发送请求
第二章框架
1.Struts1的工作原理
.在web应用程序启动就会加载ActionServlet,ActionServlet从配置文件struts-config.xml中读取配置信息,并把它们存放到各种配置对象中。
用户发起请求后,按如下步骤执行:
(1)用户的请求以HTTP方式传输到服务器上,接受请求的是ActionServlet.
(2)ActionServlet接收到请求后,会查找Struts-config.xml文件来确定服务器上是否有用户请求的操作,此处用户请求操作应为登陆操作。
如果没有,则返回一个用户请求无效的出错信息。
(3)当ActionServlet请求找到用户请求的Action后,首先将用户输入的表单参数打包成一个ActionFrom对象。
接着ActionServlet再根据struts-config.xml中的配置信息决定是否要执行ActionFrom对象中的Validate方法。
若Validate方法执行有错,则返回。
否则,继续下一步。
(4)系统生成一个用户所请求的Action的实例对象,将ActionFrom对象传递给它,运行其Execute()方法
(5)execute()执行结束前会生成以和ActionForward类型的对象并将之返回给ActionServlet,该对象的作用是告诉ActionFroward就代表跳转到一个登陆成功的页面。
ActionServlet将对之进行分析,其实就相当于接收到一个新的请求,重复
(2)~(5)的过程,直到将某个界面返会给用户为止!
2.Struts2的工作原理
Struts2的工作原理图Struts2的工作原理简图
Struts2执行流程
1、客户端向Servlet容器(如Tomcat)提交一个请求
2、请求经过一系列过滤器(如ActionContextCleanUp过滤器等)
3、核心控制器被调用,询问ActionMapper来决定请求是否需要调用某个Action
4、如果ActionMapper决定需要调用某个Action,核心控制器把控制权委派给ActionProxy(备注:
JSP请求无需调用Action)
5、ActionProxy通过ConfigurationManager询问框架的配置文件(struts.xml),找到需调用的Action类
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation负责调用Action,在此之前会依次调用所有配置的拦截器
8、Action执行完毕,ActionInvocation负责根据结果码字符串在struts.xml的配置中找到对应的返回结果
9、拦截器被再次执行
10、过滤器被再次执行
3.Struts1与Struts2的区别
特性
Struts1.x
Struts2
Action类
Struts1.x要求Action类要扩展自一个抽象基类。
Struts1.x的一个共有的问题是面向抽象类编程而不是面向接口编程。
Struts2的Action类实现了一个Action接口。
Struts2也提供ActionSupport基类来实现一般使用的接口。
当然,Action接口不是必须的。
任何使用execute方法的POJO可以被当作Struts