一、JS的4种基本数据类型
一下四种:Undefined, Boolean,Number和String
网上答案(js中有5种数据类型:Undefined、Null、Boolean、Number和String)。javascript
二、JS中,请说出==和===的区别
”==”是判断值是否相等,”===”是判断值及类型是否彻底相等html
三、JS里面有没有重载?
同名的函数最后声明会覆盖前面以声明。Javascript中没有函数重载,当同一个名称的函数定义屡次时,最终使用的是最后一个的定义。java
四、JS定义变量是否是必定要有关键字var,假如没有var定义变量会怎样?
js中 容许在定义变量的时候 不加var 修饰符。
js会在当前做用域下寻找上下文是否认义了此变量, 若是没有找到则会为这个变量分配内存。
当且将其视为window的成员。 也就是全局变量。mysql
若是加了var 修饰符。 js会从新为这个变量分配内存,不论当前上下文中是否已经定义过了。
这个变量的做用域就为当前上下文。 即局部变量。程序员
不加var的写法是强烈不推荐的。
1. 语义不清楚。
2. 团队开发时,容易覆盖掉其它做用域内的变量,引起异常。
3. 给window对象添加没必要要成员。 web
五、JS中的prototype是什么?
“prototype”字面翻译是“原型”。粗略来讲就是:prototype是javascript中的函数(function)的一个保留属性,而且它的值是一个对象(咱们能够称这个对象为"prototype对象")。
Prototype注意的细节:
1.prototype是函数(function)的一个必备属性(书面一点的说法是"保留属性")(只要是function,就必定有一个prototype属性)
2.prototype的值是一个对象
3.能够任意修改函数的prototype属性的值。
4.一个对象会自动拥有这个对象的构造函数的prototype的成员属性和方法。spring
六、说出JS中获取节点元素的3个方法
document.getElementById("html元素的id")
document.getElementsByTagName("标签名")
document.getElementsByName("html元素的name")sql
七、说出在Java单元测试中@Before和@BeforeClass的区别
@Before:初始化方法 对于每个测试方法都要执行一次(注意与BeforeClass区别,后者是对于全部方法执行一次)
@BeforeClass:针对全部测试,只执行一次,且必须为static void 数据库
八、在XML经过什么方式可让原始的字符串不改变输出
在编写XML文件时,有些内容可能不想让解析引擎解析执行,而是看成原始内容处理。
遇到此种状况,能够把这些内容放在CDATA区里,对于CDATA区域内的内容,XML解析程序不会处理,而是直接原封不动的输出。express
九、请说出什么是XML的SAX解析
SAX采用事件处理的方式解析XML文件,利用 SAX 解析 XML 文档,涉及两个部分:解析器和事件处理器:
解析器可使用JAXP的API建立,建立出SAX解析器后,就能够指定解析器去解析某个XML文档。
解析器采用SAX方式在解析某个XML文档时,它只要解析到XML文档的一个组成部分,都会去调用事件处理器的一个方法,解析器在调用事件处理器的方法时,
会把当前解析到的xml文件内容做为方法的参数传递给事件处理器。
事件处理器由程序员编写,程序员经过事件处理器中方法的参数,就能够很轻松地获得sax解析器解析到的数据,从而能够决定如何对数据进行处理。
十、请说出什么事XML的DOM解析
DOM(全称叫Document Object Model)基于树或基于对象的XML处理模式。
XML 文档具备一个称为节点的信息单元层次结构;
十一、请说出XML中SAX解析和DOM解析各自的优缺点。
基于SAX(事件的处理)的优势和缺点
优势:这种处理的优势很是相似于流媒体的优势。分析可以当即开始,而不是等待全部的数据被处理。并且,因为应用程序只是在读取数据时检查数据,
所以不需 要将数据存储在内存中。
这对于大型文档来讲是个巨大的优势。事实上,应用程序甚至没必要解析整个文档;它能够在某个条件获得知足时中止解析。通常来讲,SAX 还比它的替代者 DOM 快许多。
缺点:因为应用程序没有以任何方式存储数据,使用 SAX 来更改数据或在数据流中日后移是不可能的。
基于DOM(树)的处理的优势和缺点
优势:
1)因为树在内存中是持久的,所以能够修改它以便应用程序能对数据和结构做出更改。
2)它能够在任什么时候候在树中上下导航,而不是像 SAX 那样是一次性的处理。
3)DOM 使用起来也要简单得多。
缺点:
1)在内存中构造这样的树涉及大量的开销。大型文件彻底占用系统内存容量的状况并不鲜见。
2)建立一棵DOM树多是一个缓慢的过程。
十二、请说出HTTP1.0和HTTP1.1的区别
1,HTTP/1.0协议使用非持久链接,即在非持久链接下,一个tcp链接只传输一个Web对象,;
2,HTTP/1.1默认使用持久链接(然而,HTTP/1.1协议的客户机和服务器能够配置成使用非持久链接)。
在持久链接下,没必要为每一个Web对象的传送创建一个新的链接,一个链接中能够传输多个对象!
1三、请说出在html中表单的提交方式get和post的区别
经常使用的有:POST、GET
无论POST或GET,都用于向服务器请求某个WEB资源,这两种方式的区别主要表如今数据传递上,客户端经过这两种方式均可以带一些数据给服务器:
1)如请求方式为GET方式,则能够在请求的URL地址后以?的形式带上交给服务器的数据,多个数据之间以&进行分隔,例如:
GET /mail/1.html?name=abc&password=xyz HTTP/1.1
GET方式的特色:在URL地址后附带的参数是有限制的,其数据容量不能超过1K。另外一方面,一些用户密码等保密数据不适合以GET方式提交。
2)如请求方式为POST方式,则能够在请求的实体内容中向服务器发送数据,例如:
POST /servlet/ParamsServlet HTTP/1.1
Host:
Content-Type: application/x-www-form-urlencoded
Content-Length: 28
name=abc&password=xyz
Post方式的特色:传送的数据量无限制。
1四、表单提交方式是否是只有get和post这两种方式
请求方式有:
POST、GET、HEAD、OPTIONS、DELETE、TRACE、PUT
1五、描述Servlet的执行过程
1.将应用部署到应用服务器(每一个应用程序必须提供web.xml web描述文件)(用来描述该应用程序全部组件(servlet)的信息,提供给应服务器进行参考)。
2.当客户端(浏览器)发送请求到服务器,服务器分析请求信息在到应用程序(在应用服务器中已经部署)的web.xml文件中找对应的处理组件
(servlet)。
3.应用服务器调用对应Servlet的init()方法初始化Servlet(程序本身实现了Servlet接口的子类),产生对应的Servlet对象。
4.应用服务器调用对应Servlet的services()方法处理请求数据 。若是请求是基于Http协议
a)若是是get请求services()方法调用对应的doGet()方法
b)若是是post请求services()方法调用对应的doPost方法
5.当应用服务器处理完请求数据后(调用完services()方法)接着调用destroy()方法,释放Serlvet对象占用的内存空间。整个Servlet生命周期结束
1六、请说出Servlet的生命周期
Servlet是受容器管理的,其生命周期都是由容器负责,包括以下几个阶段:
1)Servlet的类加载与实例化(调用构造方法)
2)Servlet实例的初始化(调用init方法)
3)Servlet提供服务(调用service方法)
4)Servlet的销毁(调用destroy方法)
1七、Servlet是单例仍是多例的
Servlet在web容器里是单实例多线程的。当多个客户端并发访问同一个Servlet时,
web服务器会为每个客户端的访问请求建立一个线程,并在这个线程上调用Servlet的service方法,
所以service方法内若是访问了同一个资源的话,就有可能引起线程安全问题。
(servlet单实例多线程处理原理:
servlet中的init方法只有在启动(例如web容器启动,要看loadOnStartup的设置)的时候调用,也就是只初始化一次,这就是单实例。
servlet在处理请求的时候 调用的是service方法,这个方法能够处理多个客户端的请求。
具体访问时:
JSP 在web容器中"翻译成servlet"由容器执行,web 容器自己就是提供的多线程,A,B,C 3个访问,创建3个独立的线程组,而后运行一个servlet。依次执行。
这就解决了多用户同一实例实行的困惑。
要注意几点:
1:servlet首先不是现成线程的。
2:Servlet体系结构是创建在Java多线程机制之上的,它的生命周期是由Web容器负责的)
1八、Servlet何时实例化
默认状况下,第一次访问时加载Servlet类并进行实例化。
在部署时经过ClassLoader直接载入并实例化
1九、怎么配置文件,让Servlet在启动tomcat的时候就实例化
<load-on-startup>1</load-on-startup>
load-on-startup: 表示Servlet在部署时经过ClassLoader直接载入并初始化,
数值越低(从0开始计数),载入的优先级越高。不然,用户第一次访问的时候才实例化Servlet。
值相同,通常按在web.xml文件中的出现的顺序执行。
20、请问Servlet的destory方法在何时才会执行
destory方法在We服务器中止或Web应用被中止/从新加载时被调用。一般完成一些资源释放,中止后台程序等工做。释放或销毁一些非内存资源。destory只会调用一次。
2一、请描述ServletConfig对象
在Servlet的配置文件中,可使用一个或多个<init-param>标签为servlet配置一些初始化参数。
当servlet配置了初始化参数后,web容器在建立servlet实例对象时,会自动将这些初始化参数封装到ServletConfig对象中,
并在调用servlet的init方法时,将ServletConfig对象传递给servlet。进而,程序员经过ServletConfig对象就能够获得当前servlet的初始化参数信息。
主要用来读取web.xml中配置的Servlet初始信息,不能被其它Servlet共享。还能够用于访问ServletContext。
该对象的做用:
得到字符集编码
得到数据库链接信息
得到配置文件
2二、请描述ServletContext对象
WEB容器在启动时,它会为每一个WEB应用程序都建立一个对应的ServletContext对象,它表明当前web应用。
ServletContext对象被包含在ServletConfig对象中,开发人员在编写servlet时,能够经过ServletConfig.getServletContext方法得到对ServletContext对象的引用。
因为一个WEB应用中的全部Servlet共享同一个ServletContext对象,所以Servlet对象之间能够经过ServletContext对象来实现通信。ServletContext对象一般也被称之为context域对象。
ServletContext应用场景:
1)多个Servlet经过ServletContext对象实现数据共享。
2)获取WEB应用的初始化参数。
3)实现Servlet的转发。
4)利用ServletContext对象读取资源文件。
获得文件路径
读取资源文件
2三、请说出request对象获取前台传过来参数的几种方式
getParameter方法
getParameterValues(String name)方法
getParameterNames方法
getParameterMap方法
2四、使用Servlet下载时,为何文件名须要单独编码后才不会出现乱码,是否是编码后必定不会出现乱码。
当文件名出现中文的时候会出现乱码问题,须要把文件名编码转为UTF-8,应为服务器默认是iso-8859-1编码,
而系统默认是jbk编码,因此须要单独转码。
编码后还会出现乱码,须要设置响应头编码,告诉浏览器端用什么编码来解析服务器发送的数据。
2五、请说出cookie和session的区别
区别:
1)Cookie保存在客户端
2)只能保存字符串对象,不能保存对象类型
Cookie是把用户的数据写给用户的浏览器。
Session技术把用户的数据写到用户独占的session中。
都是有服务器建立
2六、除了使用Java代码,还有没有其余方式清除cookie
//清除cookie,用javascript也可实现。
2七、请说出session的默认有效时间和有哪几种方式能够设置session的有效时间
默认有效时间为30分钟
设置Session的有效期
方式一:
public void setMaxInactiveInterval(int interval)
置最大非活动时间间隔,单位秒;
果参数interval是负值,表示永不过期
方式二:
经过配置web.xml来设置会话超时,单位是分钟
2八、请说Servlet和JSP的区别和共同点
区别:servletd的应用逻辑是在java文件中,而且彻底从html里分离开来。servlet主要用于控制逻辑。
jsp是的是java和HTML能够组合成一个扩展名为jsp的文件。jsp主要用于视图。
相同点:本质上都是java类。
2九、请说出JSP的执行原理
1)首先,客户端发出请求(request ),请求访问JSP网页
2)接着,JSP Container将要访问的.JSP文件 转译成Servlet的源代码(.java文件)
3)而后,将产生的Servlet的源代码(.java文件)通过编译,生成.class文件,并加载到内存执行
4)最后把结果响应(response )给客户端
30、请说出JSP的3个指令,和各自的做用
1.Page指令 做用:page指令用于定义JSP页面的各类属性
2.Include指令 做用:include指令用于引入其它JSP页面,
若是使用include指令引入了其它JSP页面,那么JSP引擎将把这两个JSP翻译成一个servlet。因此include指令引入一般也称之为静态引入。
3.taglib指令 做用:让用户可以自定义标签
3一、请说出JSP的9个内置对象,和四个域对象,并说出9个内置对象中那几个比较经常使用
9个内置对象,不用咱们手工去建立的对象,由容器根据页面设置而产生直接可使用
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletcContext
config ServletConfig
exception (特殊状况下使用)
page this(本JSP页面)
out JspWriter(带缓冲的PrintWriter)
pageContext (使普通Java类可访问WEB资源,自定义标签经常使用)
四大域对象
pageContext(称之为page域)
request(称之为request域)
session(称之为session域)
servletContext(称之为application域)
JSP的9个内置对象中比较经常使用的几个:request,response,session,pageContext
3二、请说出JSP的9个内置对象对应的Servlet的对象
request HttpServletRequest
response HttpServletResponse
session HttpSession
application ServletcContext
config ServletConfig
exception Throwable(异常)
page this(本JSP页面)
out JspWriter(带缓冲的PrintWriter)
pageContext PageContext
3三、请说出JSP中4个域对象的生命周期
page:jsp页面被执行,生命周期开始,jsp页面执行完毕,声明周期结束
request:用户发送一个请求,开始,服务器返回响应,请求结束,生命周期结束
session:用户打开浏览器访问,建立session(开始),session超时或被声明失效,该对象生命周期结束
application:web应用加载的时候建立。Web应用被移除或服务器关闭,对象销毁。[结束]。
3四、JSP中哪一种状况下用哪一种域对象。
四个域对象在选择的时候,能用范围小的毫不用范围大的
page:数据只是暂时存在集合,在jsp页面的其余地方要用,用page(页面中自定义的map)
(何时须要用map了,就用page)
Request:数据只是作显示的,看完了就没用了。就存request域,请求转发,
Servlet产生的处理结果(数据)交给jsp显示。 数据转发能够带数据。
Session:数据给用户看完了,必定还要用,会话结束了就没用了
用户登陆,用户信息发给客户端看,看完了,一会访问别的页面还要看用户信息。
购物车,购物车成功了,给用户看购物车,待会随时间能够查看购物车
请求重定向,由于是两次请求,每一次请求的数据,第二次请求还要看。
application:数据给一个用户用完了,别人还要用
聊天室,聊天记录,须要给全部的用户看
统计网站在线人数,全部看到的应该是一个数
3五、请说出el中的隐藏对象,和对应的servlet中的对象
EL表达式中的11个隐含对象
EL提供了本身的一套隐含对象,方便在页面内对各类经常使用数据信息的访问.
EL隐藏对象 JSP隐藏对象
pageScope/pageContext pageContext
requestScope request
sessionScope session
applicationScope appication
param request.getParameter()
paramValues 在提交表单里,有多个输入域同名getParameterValues
header request.getHeader(),按照key value的形式取出 value:是一个String类型的值
headerValues 按照key value的方式取出,但headerValues里面的value是一个String类型的数组
cookie request.getCookies()
initParam context param
3六、请说出有几种方式能够设置禁止在JSP中使用el表达式
有俩种:
能够自由设置是否支持表达式语言,
1.<%@page isELIgnored="false"%> : 缺省为false,表示可使用EL
2.配置web.xml也可达到一样的效果(同时存在,那种起做用?)(禁用脚本和EL) 默认都是false
在页面中经过page指令设置isELIgnored属性的优先级比在web.xml中经过<el-ignored>设置的高
3七、请说出JSP中经常使用的动做
<jsp:include>标签
<jsp:forward>标签
<jsp:param>标签
3八、请说出<jsp:include>动做与include指令的区别
<jsp:include>与include指令的比较
<jsp:include>标签是动态引入, <jsp:include>标签涉及到的2个JSP页面会被翻译成2个servlet,这2个servlet的内容在执行时进行合并。
而include指令是静态引入,涉及到的2个JSP页面会被翻译成一个servlet,其内容是在源文件级别进行合并。
无论是<jsp:include>标签,仍是include指令,它们都会把两个JSP页面内容合并输出,因此这两个页面不要出现重复的HTML全局架构标签,
不然输出给客户端的内容将会是一个格式混乱的HTML文档。
<jsp:include>标签:使用page属性指定被引入资源。
include指令:使用file属性指定被引入资源。
3九、请说出自定义JSTL标签的步骤
SimpleTag接口的方法:
doTag():执行标签的方法,由web服务器调用
getParent(): 获得父标签。
setJspBody(JspFragment jspBody)传入标签主体内容。由web服务器调用
setJspContext(JspContext pc)传入PageContext。由web服务器调用
setParent(JspTag parent) 传入父标签。由web服务器调用
a) 编写一个java类,实现SimpleTag接口或者继承SimpleTagSupport类。
b) 置这个标签
在项目下的WEB-INF目录下新建一个tld文件。(itcast.tld)
<taglib xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-jsptaglibrary_2_0.xsd"
version="2.0">
<tlib-version>1.0</tlib-version>
<short-name>itcast</short-name>
<uri>http://gz.itcast.cn/jsp/tags</uri>
<!-- 一个标签的配置 -->
<tag>
<name>showClientIP</name>
<tag-class>gz.itcast.tag.ShowClientIPTag</tag-class>
<!-- 默认empty:表示空标签,么有主体内容 -->
<body-content>empty</body-content>
</tag>
</taglib>
标签
c)使用标签
导入:<%@taglib uri="http://gz.itcast.cn/jsp/tags" prefix="itcast" %>
使用: <itcast:showClientIP/>
40、请说出使用JDBC访问数据获取数据的一个过程。
1.加载注册驱动
2.创建数据链接 DriverManager.getConnection(url user pwd)
3.建立 statement或者PrepareStatement对象,执行sql语句
4.操做Resultset 结果集
5.资源释放
4一、请说出Statement和PreparedStatement的区别
1、语法结构不一样
1)Statment执行静态sql语句,且sql能够拼接。
2)PreparedStatement能够先执行预编译的sql语句,在预编译sql语句中使用?进行参数占位,后面在进行参数赋值
2、原理不一样
1)Statement不能进行sql缓存
2)而PreparedStatement能够进行sql缓存,执行效率会比Statement快!!!
3、安全性不一样
1)Statement存在sql注入的风险
2)而PreparedStatement能够有效防止用户注入。
4二、mysql的默认端口是多少
3306
4三、什么是数据库元数据
指的是基本数据,好比人,人的基本信息,姓名,性别,年龄,身高体重,
与元数据对应的是关系数据
也能够说:元数据就是关于数据的数据
4四、什么是数据的悲观锁和乐观锁
数据的锁定分为两种方法,第一种叫作悲观锁,第二种叫作乐观锁。
什么叫悲观锁呢,悲观锁顾名思义,就是对数据的冲突采起一种悲观的态度,
也就是说假设数据确定会冲突,因此在数据开始读取的时候就把数据锁定住。
而乐观锁就是认为数据通常状况下不会形成冲突,因此在数据进行提交更新的时候,
才会正式对数据的冲突与否进行检测,若是发现冲突了,则让用户返回错误的信息,让用户决定如何去作。
4五、请说出数据库三范式
一、每一个字段都必须是不可分割的单元
二、每张表只表达一个意思(确保表中的每列都和主键相关)
三、每张表的主键以外的其余字段都只能和主键有直接的决定依赖关系
4六、请简要描述Servlet中的过滤器,Filter
一、过滤器其实就是一个接口
二、过滤器是一个对象,能够在浏览器请求一个资源(动态或者静态),服务器响应资源的时候,执行过滤任务
三、过滤器由服务器运行
4七、请说出Filter的生命周期
一、服务器启动时候,调用构造方法建立过滤器,只执行一次
二、init方法初始化
三、doFilter执行过滤方法(屡次)
四、destroy方法,服务器中止或者服务器重启,销毁过滤器对象
4八、请说Filter作模糊过滤的几种状况
没有明确的名称
/*
/demo/*
*.do
4九、什么是过滤器链
过滤器链: 一个目标资源能够被多个过滤器过滤,那么造成一个过滤器链。***
注意:过滤器链中的过滤器执行顺序问题:由web.xml中filter-mapping的配置决定顺序。先配置的优先被执行。
50、怎么肯定过滤器的执行顺序
过滤器链中的过滤器执行顺序问题:由web.xml中
-mapping的配置决定顺序。先配置的优先被执行。
5一、请说出监听器的做用
web程序在开发的过程当中,会频繁的使用到servletContext,servletRequest,httpSession三个对象,
在建立或者销毁这些对象时候,或者在对这些对象进行操做的时候,触发一些事件,
就可使用web监听器去监听这些事情。
5二、请详细说出Struts2的执行流程
一、服务器启动,加载服务器自身的web.xml文件
二、加载部署到服务器项目的web.xml文件
三、建立项目中struts 2的核心过滤器对象:StrutsPrepareAndExecuteFiter
四、执行过滤器初始化方法init
五、加载struts配置文件
六、执行过滤器doFilter方法
七、建立Action对象
八、再执行拦截器
九、执行action的业务方法
5三、请说Struts2和Servlet的关系
struts 就是对 servlet 的封装
Servlet开发步骤:
Http --> servlet --> service --> dao 响应 jsp
struts 开发步骤
http --> action --> service --> dao 响应jsp
5四、请说出配置Struts2的步骤
一、引入jar包
二、配置web.xml核心过滤器
三、配置struts配置文件,配置action
5五、怎么配置Struts2的常量
一、找到default.properties,找到须要配置的属性
二、在struts.xml文件中定义常量
<constant nae="" value="">
5六、请说出Struts2配置文件中nameSpace和package的做用
nameSpace 是命名空间,用于action访问时候的路径一部分
Package 管理action或者管理路径的做用,可用于包之间的继承
5七、Struts2的action配置中,可不能够不指定class属性,为何
能够,不写class属性,系统会默认调用com.opensymphony.xwork2.ActionSupport类的execute()方法,该方法代码是:
public String execute() throws Exception {
return SUCCESS;
}
5八、请说出struts.properties和struts.xml配置的常量的执行顺序
先执行struts-default.xml,struts-plugin.xml,struts.xml配置的常量,
而后再执行struts.properties的配置文件,属性相同,后者会覆盖前者
5九、在struts2中,全局配置的result和局部配置的result,会执行哪个,为何
局部优于全局
60、hibernate的handle
6一、请问Struts2中的action是单例仍是多例的,struts1呢?
Struts2 是多例,每次请求都会建立一个action
struts 1的Action是单实例的,由于它的数据保存在Form类中,
多线程环境下,Action只负责处理一些逻辑,
并无数据,也就是你们把它当作一个工具使用。
6二、请说出Struts2中自定义类型转换器的步骤
一、自定义转换器继承StrutsTypeConverter
二、重写convertFromString和convertToString方法
三、注册转换器
3.一、在Action所在的包中创建
action名-conversion.proprtties
3.二、在3.1文件中添加如下数据
须要转换的字段名=自定义转换器的权限定名
birthday=cn.itcast.convertor.DateTypeConvertor
总结:
以上的转换器注册时候是与action的名字想耦合的。所以只能在本身的action内部使用,
称之为局部转换器注册方式
6三、如何定义Struts2中的全局类型转换器
一、自定义转换器继承StrutsTypeConverter
二、重写convertFromString和convertToString方法
三、注册转换器
3.1 在项目src目录下创建如下固定文件
xwork-conversion.properties
3.2 在3.1文件中添加如下数据
须要转换的类类型=转换器类的权限定名
如: java.util.Date= cn.itcast.converter.DateConverter 总结
该拦截器负责对错误信息进行拦截器<interceptor name="conversionError“ class="org.apache.struts2.interceptor.StrutsConversionErrorInterceptor"/>
6四、请说出Struts2中的拦截器的生命周期
当请求到达Struts 2的ServletDispatcher时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,
而后串成一个列表(list),最后一个一个地调用列表中的拦截器
struts2拦截器在访问某个action方法以前或者以后实施拦截,struts2拦截器是可插拔的,
拦截器是aop的一种实现
拦截器栈(interceptor Stack):将拦截器按必定的顺序连接成一条链,
在访问被拦截的方法时候,struts2拦截器链就会按 定义的顺序被依次调用
6五、请说出Strins2中怎么配置自定拦截器
一、定义一个类实现Interceptor接口
二、实现生命周期的方法
三、声明和引用自定义的拦截器
6六、Struts2拦截器能不能编码get请求的数据
能够,i18n编码
6七、请详细说出Struts2中ValueStack
ValueStack 实际是一个接口,在struts2中利用OGNL时,实际上使用的是实现了该接口的OgnlValue
Stack类,这个类是struts2利用OGNL的基础
ValueStack特色
ValueStack贯穿整个Action的生命周期(每一个Action类的对象实例都拥有一个ValueStack对象),其做用至关于一个数据中转站,在其中保存当前的Action对象和其余相关对象
6八、请说出ognl表达式和el表达式各自的优缺点
OGNL:
object graph navigation language的缩写,它是一种功能强大的表达式语言,经过它简单一致的表达式语法,能够存取对象的任意属性,调用对象的方法,遍历整个对象的结构图,实现字段类型转化等功能。它使用相同的表达式去存取对象的属性。这样能够更好的取得数据。
EL:
Expression Lanhuage 代替jsp页面的java代码块
6九、请说说你对Strut2的理解
struts2 是对servlet的封装
struts2 实现了mvc模式,层次结构清晰
struts2 有丰富的标签库,开发上大大方便
struts2 有丰富的过滤器
struts2 异常处理机制
70、请说出hibernate的执行流程
一、应用程序先调用Configuration类,该类读取Hibernate配置文件及映射文件中的信息
二、并用这些信息生成一个SessionFactory对象
三、而后从SessionFactory对象生成一个Session对象
四、并用Session对象生成Transaction对象;
A、可经过Session对象的get(),load(),save(),update(),delete()和saveOrUpdate()等方法对PO进行加载、保存、更新、删除、等操做;
B、在查询的状况下,可经过Session对象生成一个Query对象,而后利用Query对象执行查询操做;若是没有异常Transaction对象将提交这些操做到数据库中。
7一、请说hibernate中sessionFactory的做用
SessionFactory接口
Configuration对象根据当前的配置信息生成 SessionFactory 对象。SessionFactory 对象一旦构造完毕,即被赋予特定的配置信息(SessionFactory 对象中保存了当前的数据库配置信息和全部映射关系以及预约义的SQL语句。同时,SessionFactory还负责维护Hibernate的二级缓存)。 Configuration cfg = new Configuration().configure(); SessionFactory sf = cfg.buildSessionFactory(); 是线程安全的。 SessionFactory是生成Session的工厂: Session session = sf.openSession(); 构造SessionFactory很消耗资源,通常状况下一个应用中只初始化一个 SessionFactory对象。
7二、请说出hibernate的session中get()和load()的区别
get()和load()都是读取数据的方法
get()在读取数据,若是为空,会返回null,因此容易致使空指针异常
load()在读取数据的时候,若是数据为空,会直接报错,由于load 认为,使用本方法就必定会有数据
7三、请说出hibernate的Query中list()和iterator()的区别
query.list(),一次性查询出全部的数据,可是不会放入二级缓存中
query.iterator()
一、会放入缓存,也会从缓存取
二、容易产生N+1问题
7四、请详细说出Hibernate3中持久化对象的几种状态
一、持久状态
二、游离状态
三、临时状态
7五、请说出hibernate中缓存的做用,默认开启的是哪一级缓存
做用、减小对数据库的屡次查询,提升程序的效率,保证缓存中的对象与数据库记录的保持同步,当
缓存改变之后,session不会当即执行sql,而是将多个sql语句合并为一条sql进行执行,提升效率
默认开启的是一级缓存
7六、请说出hibernate开启二级缓存的步骤
方法:(1)在hibernate的properties文件修改配置开启
#hibernate.cache.use_second_level_cache true 二级缓存默认不开启
## enable the query cache
#hibernate.cache.use_query_cache true 是否开启查询缓存!
方法:(2)在hibernate.cfg.xml文件中增长配置文件
<!-- 开启查询缓存
<property name="hibernate.cache.use_query_cache">true</property>
<property name="hibernate.cache.use_second_level_cache">true</property>
<property name="hibernate.cache.provider_class">org.hibernate.cache.HashtableCacheProvider</property>
<class-cache usage="read-write" class="cn.itcast.g_second_cache.User"/>
<class-cache usage="read-only" class="cn.itcast.g_second_cache.Address"/>
-->
<!-- 集合缓存配置 (集合中的对象也要加入二级缓存!)
<collection-cache usage="read-only" collection="cn.itcast.g_second_cache.User.addresses"/>
-->
7七、请说出hibernate一级缓存和二级缓存的区别
一级缓存:
由hibernate自动维护的,开发者不可以自行控制,默认开启,而且做用范围只在一个session内,缓存在除了session范围内就失效
二级缓存:
由开发者自定义开启,默认是关闭的,二级缓存的做用范围是基于application,做用时间长,范围大
7八、请说出hibernate的配置文件中Inverse属性的做用
inversese 属性做用是控制的反转,例如表关系的维护,一方能够把本身的控制权放弃,交给另外一方去维护
7九、请说出hibernate的配置文件中lazy和cascade属性的做用。
lazy属性:
做用是延迟加载,默认是开启,当须要查询较大的数据量时候,使用缓存费内存,因此可使用懒加载功能
懒加载有三个属性:
true:开启
false:关闭
extra:懒加载, 在真正使用数据的时候才查询,若是只是使用集合的size()/isEmpty()方法,只是统计数据!
cascade属性:
做用是控制级联操做,默认是不开启,多表之间的关系,级联通常用在保存(为了数据的安全性,其余操做适宜用代码去控制)
属性
save-update 级联保存更新
delete 级联删除
save-update,delete 级联保存更新、删除
all 同上 (save-update,delete)
none 默认不级联
80、请说出hibernate和JDBC查询数据库各自的优缺点,如何优化Hibernate?
hibernate:
优势:
一、hibernate是经过hql语句操纵数据库的,是一个面向对象的过程,开发者只需关心如何写hql语句即可以操纵数据库。相对于学习sql语句,hibernate学习成本更低
二、hibernate 对表单的复杂关系维护出色
三、hibernate 封装了许多简单的操做数据库方法,开发者只需调用就可以使用对数据库操做
四、移植性强,只需改驱动和少量配置就能更换数据库
五、耦合性低
缺点:
因为是对JDBC的轻量封装,hibernate的效率比JDBC低
hibernate的缓存使用不容易
JDBC:
优势:
一、直接使用sql语句操作数据库,效率高
缺点:
一、耦合高
二、对开发者要求高,开发难度相对比较大
三、移植性差
优化hibernate的核心是优化hql语句
8一、请说出你对hibernate的理解。
hibernate是一款轻量级的持久层框架,可是功能强大,解耦能力强,提升了代码的复用性,开发难度下降,强大的面向对象型hql语句简化了开发流程
8二、请解析什么是Spring的IOC(控制反转)
IOC 控制反转,
Inversion of control 控制反转! 因此,也叫控制反转容器!
主要是把建立对象的权利交给外部容器,而外部容器建立对象,能够更好的管理对象的建立时期,便于程序的管理维护与开发
8三、请解析什么事Spring的AOP,以及其应用场景
aop(Aspect Oriented Programming 面向切面编程)原理是动态代理,经过动态代理能够为目标对象增长额外功能。Spring的声明式事务管理中,更精细的控制事物。采用面向切面编程来实现不少基础可是与业务无关功能的解耦,好比:事务管理,日志采集,权限验证。。。
8四、请问AOP是Spring所独有的吗?Struts2中有没有AOP?
不是,aop是一种思想,而struts2的拦截器能够算是aop思想的实现方式!
8五、请问Spring中IOC容器里面的对象是单例的仍是多例的。
scope="singletion" 默认是单例的,在容器建立的时候建立。
8六、请说出Spring中IOC容器里面对象的生命周期
(单列状况)Spring中IOC容器的对象在服务器启动时建立,须要手动调用destroy()方法销毁。
(多列状况)Spring中IOC容器的对象在第一次使用的时候建立,使用完自动销毁。
8七、Spring IOC容器里面的对象,何时后会被建立
1. 单例/多例
scope="singleton" 默认是单例;默认是在建立容器的时候建立!
2.单例的对象,可否在第一次调用的时候建立? (服务器启动不要建立)
lazy-init="true" 延迟建立单例的对象; 在第一次使用的时候建立一次!
注意:只对单例的对象有效!
3. 初始化与销毁
init-method="init_" 对应bean中的init_()方法;
在建立对象以后执行!
destroy-method="destroy_"
在对象销毁时候执行!
必需要调用容器的ac.destroy(); 须要用容器的实现类!(对单例的对象有效!)
8八、什么是依赖注入?
程序在运行的时候,所须要的对象由外部容器动态的建立注入
8九、请说出注解注入对象,和配置文件注入对象各自的优缺点和你的体会
注解注入:
开发方便,不须要写太多代码,配置简单,开发效率高。
维护不方便,间接增长了程序的耦合度,修改须要从新编译
XML配置:
维护方便,对于对象的表示清晰易解,修改后不须要从新编译
配置麻烦,开发效率较慢
90、请问Spring 的 AOP中使用了几种动态代理技术,分别是什么,各自的特色是什么
spring在运行期建立代理,有两种代理方式:若目标对象实现了若干接口,spring就会使用JDK动态代理。若目标对象没有实现任何接口,spring就使用CGLIB库生成目标对象的子类。
9一、请问Spring提供了几种事务管理方式,分别是什么
Spring提供了两种事务管理方式
编程式事务管理
声明式事务管理
若是你并不须要细粒度的事务控制,你可使用声明式事务,在Spring中,你只须要在Spring配置文件中作一些配置,便可将操做归入到事务管理中,解除了和代码的耦合, 这是对应用代码影响最小的选择,从这一点再次验证了Spring关于AOP的概念。当你不须要事务管理的时候,能够直接从Spring配置文件中移除该设置
Spring声明式事务控制:
在Spring中,对于事务控制: Spring提供了事务切面(DataSourceTransactionManager、HibernateTransactionManager), 若是程序中使用事务,能够利用aop切入点表达式拦截指定对象生成代理对象, 从而在执行拦截方法的时候(业务方法), 动态织入事务切面的代码!
9二、请说出Spring中声明式事务的步骤
第一步 :开启注解 扫描
第二步 :Aop配置
第三步:切入点 表达式
<!-- 1. 拦截指定类的指定方法 (UserDao.save) -->
<!--<aop:pointcut expression="execution(* cn.itcast.g_aop_pt.UserDao.save(..))" id="pt"/>-->
第四点:切面配置
<aop:aspect ref="aop">
<aop:before method="begin" pointcut-ref="pt"/>
<aop:after method="after" pointcut-ref="pt"/>
</aop:aspect>
9三、请简要说出Spring AOP编程的执行过程
Aop执行过程:
1. 建立IOC容器对象,
a. 根据切入点表达式配置,对符合规则的类,生成代理对象!
b. 其余bean,若是不符合切入点表达式拦截规则,就直接建立!
2. 执行代理类的方法,
a. 若是方法切入点表达式拦截规则, 在执行方法时候动态织入“通知代码”
b. 执行方法,不被拦截器,就直接执行代理的方法(代理会直接调用目标对象)
Spring的Aop编程,其实就是代理的生成的过程,只是这步骤由Spring运行时期完成!
9四、Spring中的BeanFactory与ApplicationContext的做用有哪些?
ApplicationContext 继承了 Beanfactory ,二者都是接口
beanFactory 是一个建立bean对象的实例化工厂
applicationContext 是一个贯穿web程序的对象容器
9五、描述一下你如何理解Spring的ApplicationContext对象的?
applicationContext 存放了IOC容器实例化的对象,它是一个贯穿web应用的对象
9五、请说出你对Spring的理解
spring 提供了对架构分层的一站式解决方案
spring 具备极大的包容性,能与市面上多个流行的主流框架相互整合共用,提升开发效率。
spring 的事物管理和切面编程,对于程序的开发,能起到很是好的控制做用
spring 的ioc容器能够更好的管理对象的建立时期,便于程序的管理维护与开发
9六、为何要用Spring
Spring提供的是一站式的解决方案!
Spring 主要是建立对象,与其余框架整合,表示能够帮其余框架建立对象!
在项目中引入spring当即能够带来下面的好处下降组件之间的耦合度,实现软件各层之间的解耦。
一、IOC(依赖注入):包含并管理应用对象的配置和生命周期,你能够配置你的每一个bean如何被建立,也能够配置每一个bean是只有一个实例,仍是每次须要时都生成一个新的实例,以及它们是如何相互关联的
二、AOP(面向切面):采用了面向切面编程来实现不少基础可是与业务逻辑无关的功能的解耦,好比:事务管理、日志、权限验证.....
三、DAO:Spring 还提供了对数据库JDBC的封装,使用JdbcTemplate来简化数据操
做
四、ORM:提供了对主流的对象关系映射框架的支持
五、JEE: 对Java企业级开发提供了一些解决方案,例如EJB、JMS等 六、WEB: 提供了本身的Spring MVC和对显示层框架的集合支持
9七、谈一谈SSH的整合
Ssh分工明确,各司其职,struts负责表现层,spring负责业务层,hibernate负责数据库层。其中spring至关于一个中间的角色。负责对其余两个框架的整合。
Spring框架 能够利用IOC容器建立对象给其余容器使用,可使用切面编程aop实现对重复的代码的编写,具备一次编写屡次利用的好处。还有的 spring的事务。能够控制数据的回滚的问题,实现对数据的增长,删除,修改的有效控制。
Hibernate:方便咱们对数据库的操做。简化咱们对sql语句的书写。咱们 也能够本身本身写sql语句。
9八、请说说JSON和XML做为数据载体的各自的优缺点
json:
格式简洁,数据的有效性高,它是以对象形式传输数据,带宽流量的利用率高,编写相对比较简单
缺点:可读性差
xml:
可读性好,它是以标签形式存放数据,格式阅读方便了然
缺点:编写麻烦,占用带宽流量
9九、拦截器和过滤器之间不一样之处
拦截器和过滤器之间有不少相同之处,可是二者之间存在根本的差异。其主要区别为如下几点:
1)拦截器是基于JAVA反射机制的,而过滤器是基于函数回调的。
2)过滤器依赖于Servlet容器,而拦截器不依赖于Servlet容器
3)拦截器只能对Action请求起做用,而过滤器能够对几乎全部的请求起做用。
4)拦截器能够访问Action上下文、值栈里的对象,而过滤器不能
5)在Action的生命周期中,拦截器能够屡次被调用,而过滤器只能在容器初始化时被调用一次。
SE部分
一、请说出经常使用的几种设计模式,并详细描
单例模式、
单例对象(Singleton)是一种经常使用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在
装饰器模式、
装饰模式就是给一个对象增长一些新的功能,并且是动态的,要求装饰对象和被装饰对象实现同一个接口,装饰对象持有被装饰对象的实例
普通工厂模式、
就是创建一个工厂类,对实现了同一接口的一些类进行实例的建立。
观察者模式、
观察者模式定义了对象间的一对多依赖关系,让一个或多个观察者对象观察一个主题对象。
当主题对象的状态发生变化时,系统能通知全部的依赖于此对象的观察者对象,从而使得观察者对象可以自动更新。
二、建立线程有几种不一样的方式
1.第一种方式继承了Thread类,但JAVA在类中只支持单继承,就不能继承其它类
继承Thread:线程代码存放在Thread子类run方法中
2.第二种方式实现了接口,但能够继续继承其它类;(避免了单继承局限性)
实现接口,代码存放在Runnable实现子类子的run方法中
三、HashMap和Hashtable有什么区别?
1 HashMap不是线程安全的
hastmap是一个接口 是map接口的子接口,是将键映射到值的对象,其中键和值都是对象,而且不能包含重复键,
但能够包含重复值。HashMap容许null key和null value,而hashtable不容许。
2 HashTable是线程安全的一个Collection。
四、ArrayList和LinkedList有什么区别?
若是是实现了List接口的集合类,具有的特色: 能够存储重复元素,并且是有序的
ArrayList 底层是维护了一个Obejct数组实现的, 特色: 查询速度快,增删慢。
LinkedList 底层是使用了链表数据结构实现的,特色: 查询速度慢, 增删快.
五、若是对象的引用被置为null,垃圾收集器是否会当即释放对象占用的内存? 不会,在下一个垃圾回收周期中,这个对象将是可被回收的。