1.什么是IOC
答:1.IOC就是控制反转,就是将对象创建的权利交给spring容器来完成。
从此程序员无需关注对象的创建过程。spring容器来维护对象的生命周期。
2.什么是AOP
答:1.切面(Aspect):就是完成额外任务的类
2.连接点(Joinpoint):就是调用的目标方法
3.通知(Advice):切面中的方法
4.切入点(Pointcut):匹配连接点的断言。(执行通知的if,就是一个匹配规则)
3.spring的核心类有哪些
答:BeanFactory:产生一个新的实例,可以实现单例模式
BeanWrapper:提供统一的get及set方法
ApplicationContext:提供框架的实现,包括BeanFactory的所有功能
4.spring的接口有哪些
答:1.BeanFactory最基础最核心的接口
2.Resource接口,可以通用地访问文件资源
3.FactoryBean工厂bean
4.MessageSource接口
5.springMVC是什么
答:SpringMVC是一个前台的控制框架,与前台进行数据的交互。并且能够做到自动的值的封装。
一个前台控制类(Controller)就可以控制所有的请求。
6:springMVC内部调用过程
答:1.前端控制器 负责request对象和response对象的转发(不负责处理数据)
2.处理器映射器 负责将 url请求与Controller一一对应
3.处理器适配器 最终执行请求(crud)
4.视图解析器 将页面和数据回显给用户。
7:springMVC实现原理
答:1.将客户端的URL发送给前端控制器
2.前端控制前不负责处理任何业务逻辑,之后转发到处理器映射器中询问能够处理当前请求的Controller
3.处理器映射器根据url匹配相应的Controller然后返回给前端控制器
4.前端控制器请求处理器适配器执行请求(handler)
5.处理器适配器根据某种特定的规则,调用相应的处理器处理请求
6.处理器处理完成以后返回一个ModelAndView对象,这个对象中包含2个信息
model就是处理后的数据 view就是返回页面的名称(index)没有任何修饰。
7.处理器适配器将返回后的ModelAndVIew对象返回给前端控制器。
8.这是的前端控制器拿到ModelAndView对象后不能直接解析,需要调用视图解析器解析,返回页面的具体路径
9.视图解析器拿到页面名称后进行路径的拼接(web-inf/index.jsp)
需要给页面名称添加前缀“web-inf” 和后缀“.jsp”然后形成一个具体的页面路径。
10.前端控制器拿到具体的页面路径后调用视图渲染 将model中的数据填充到页面中。
11.将页面返回给客户端进行展现。
8:spring创建对象有几种方式
答:4种,分别是:构造方法创建----静态工厂创建----实列工厂创建----Spring工厂
9:Spring对象创建的过程
答:当spring容器启动的时候,先会加载applicationContext.xml,按行解析。
遇到每一个bean都会为这个bean创建对象.然后存入到map中,直到整个xml
配置文件解析完成,spring容器才启动成功。在容器启动完成以后,才能为
用户提供服务。(用户getBean()获取的对象)
10.IOC和DI的意义
答:通过使用Spring的IOC和DI能够实现代码解耦,各层之间耦合性降到最低。
IOC 将对象进行一个生成
DI 将对象的属性进行一个设置
11:Spring注入对象有几种方式
答:构造器注入,set注入。2种方式。
12:谈谈AOP中的代理
答:Spring中的AOP内部集成了jdk的动态代理和cglib的动态代理。
使用Spring的AOP生成代理对象将不会再有代理对象原生的缺点。
spring中可以做到方法级别的代理。
13:AOP的实现原理
答:当获取对象时,首先将对象与切入点表达式进行匹配。如果匹配成功,
则会创建代理对象。然后代理对象执行方法时就会执行通知。
14:spring事务的回滚策略
答:1.运行时异常:
如果程序出现运行时异常,那么错误级别较高,spring会自动的回滚事务。
2.检查异常:
对于检查异常而言,spring认为检查异常是可以避免的,程序员 可以修复的,
那么spring容器就不负责回滚检查异常。
15:解释Spring Bean的生命周期?
答:在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。
Spring bean factory 负责管理在spring容器中被创建的bean的生命周期。Bean的生命周期由两组回调(call back)方法组成。
1.初始化之后调用的回调方法。
2.销毁之前调用的回调方法。
Spring框架提供了以下四种方式来管理bean的生命周期事件:
InitializingBean和DisposableBean回调接口
针对特殊行为的其他Aware接口
Bean配置文件中的Custom init()方法和destroy()方法
@PostConstruct和@PreDestroy注解方式
16:Spring框架中的单例Beans是线程安全的么?
答: Spring框架并没有对单例bean进行任何多线程的封装处理。关于单例bean的线程安全和并发问题需要开发者自行去搞定。但实际上,大部分的Spring bean并没有可变的状态(比如Serview类和DAO类),
所以在某种程度上说Spring的单例bean是线程安全的。如果你的bean有多种状态的话(比如 View Model 对象),就需要自行保证线程安全。
最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。
17:Spring 框架中都用到了哪些设计模式?
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
模板方法—用来解决代码重复的问题。
比如. RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Srping提供了DispatcherServlet来对请求进行分发。
视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
工厂模式—BeanFactory用来创建对象的实例。
18. 什么是spring?
答:spring 是个Java企业级应用的开源开发框架。Spring主要用来开发Java应用,但是有些扩展是针对构建J2EE平台的web应用。
Spring 框架目标是简化Java企业级应用开发,并通过POJO为基础的编程模型促进良好的编程习惯
19. 使用Spring框架的好处是什么?
轻量:Spring 是轻量的,基本的版本大约2MB。
控制反转:Spring通过控制反转实现了松散耦合,对象们给出它们的依赖,而不是创建或查找依赖的对象们。
面向切面的编程(AOP):Spring支持面向切面的编程,并且把应用业务逻辑和系统服务分开。
容器:Spring 包含并管理应用中对象的生命周期和配置。
MVC框架:Spring的WEB框架是个精心设计的框架,是Web框架的一个很好的替代品。
事务管理:Spring 提供一个持续的事务管理接口,可以扩展到上至本地事务下至全局事务(JTA)。
异常处理:Spring 提供方便的API把具体技术相关的异常(比如由JDBC,hibernate or JDO抛出的)转化为一致的unchecked 异常。
20. IOC的优点是什么?
答:IOC 或 依赖注入把应用的代码量降到最低。它使应用容易测试,单元测试不再需要单例和JNDI查找机制。最小的代价和最小的侵入性使松散耦合得以实现。IOC容器支持加载服务时的饿汉式初始化和懒加载。
21. 解释Spring支持的几种bean的作用域。
答:Spring框架支持以下五种bean的作用域:
singleton : bean在每个Spring ioc 容器中只有一个实例。
prototype:一个bean的定义可以有多个实例。
request:每次http请求都会创建一个bean,该作用域仅在基于web的Spring ApplicationContext情形下有效。
session:在一个HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
global-session:在一个全局的HTTP Session中,一个bean定义对应一个实例。该作用域仅在基于web的Spring ApplicationContext情形下有效。
缺省的Spring bean 的作用域是Singleton.
22. Spring支持的事务管理类型
答:Spring支持两种类型的事务管理:
编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务
23. Spring框架的事务管理有哪些优点?
答:它为不同的事务API 如 JTA,JDBC,Hibernate,JPA 和JDO,提供一个不变的编程模式。
它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如
它支持声明式事务管理。
它和Spring各种数据访问抽象层很好得集成
24. 在Spring AOP 中,关注点和横切关注的区别是什么?
答:关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如
日志,安全和数据传输,几乎应用的每个模块都需要的功能。因此这些都属于横切关注点
25. 什么是目标对象?
答:被一个或者多个切面所通知的对象。它通常是一个代理对象。也指被通知(advised)对象。
28. 哪些是重要的bean生命周期方法? 你能重载它们吗?
答:有两个重要的bean 生命周期方法,第一个是setup , 它是在容器加载bean的时候被调用。第二个方法是 teardown 它是在容器卸载类的时候被调用。
The bean 标签有两个重要的属性(init-method和destroy-method)。用它们你可以自己定制初始化和注销方法。它们也有相应的注解(@PostConstruct和@PreDestroy)。
29.什么是hribernate?
答:用来简化jdbc 简化对数据库的访问,实现java模型对象与数据库表之间的对应
30.什么是MyBatis?
答:Mybatis是一个持久层的框架,轻量级的框架 因为现在主流的持久层框架就是Mybatis。能够快速处理大批量数据。
mybatis是一个半自动化的对象关系映射。
31.MyBatis能给我们实现哪些功能?
答:1.内部维护了线程池
2.mybatis自己维护了事务(后来交给Spring来处理)
3.结果集自动的封装为javabean.
4.半自动话的原因是 需要手动编写SQL语句。
5.实现数据库的缓存处理
32.MyBatis里#号与$之间的区别?
答:.${}和#{}
${}它是不安全的,容易被攻击(sql注入攻击)
#{}它给参数添加了'name' 预编译机制 preparedStatements 更加的安全
提倡使用。
33.Mybatis比IBatis比较大的几个改进是什么
答:
1.有接口绑定,包括注解绑定sql和xml绑定Sql ,
2.动态sql由原来的节点配置变成OGNL表达式,
3. 在一对一,一对多的时候引进了association,在一对多的时候引入了collection
节点,不过都是在resultMap里面配置
34.什么是MyBatis的接口绑定,有什么好处
答:
接口映射就是在IBatis中任意定义接口,然后把接口里面的方法和SQL语句绑定,
我们直接调用接口方法就可以,这样比起原来了SqlSession提供的方法我们可以有更加灵活的选择和设置
35.接口绑定有几种实现方式,分别是怎么实现的?
答: 接口绑定有两种实现方式,一种是通过注解绑定,就是在接口的方法上面加上
@Select@Update等注解里面包含Sql语句来绑定,另外一种就是通过xml里面写SQL来绑定,
在这种情况下,要指定xml映射文件里面的namespace必须为接口的全路径名.
36.什么情况下用注解绑定,什么情况下用xml绑定
答: 当Sql语句比较简单时候,用注解绑定,
当SQL语句比较复杂时候,用xml绑定,一般用xml绑定的比较多
37.MyBatis实现一对一有几种方式?具体怎么操作的
答:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,
通过在resultMap里面配置association节点配置一对一的类就可以完成;
嵌套查询是先查一个表,根据这个表里面
的结果的外键id,去再另外一个表里面查询数据,也是通过association配置,但另外一个表
的查询通过select属性配置
38.MyBatis实现一对多有几种方式,怎么操作的
答:有联合查询和嵌套查询,联合查询是几个表联合查询,只查询一次,通过在resultMap里面配
置collection节点配置一对多的类就可以完成;
嵌套查询是先查一个表,根据这个表里面的
结果的外键id,去再另外一个表里面查询数据,也是通过配置collection,但另外一个表的
查询通过select节点配置
39.MyBatis里面的动态Sql是怎么设定的?用什么语法?
答:MyBatis里面的动态Sql一般是通过if节点来实现,通过OGNL语法来实现,但是如果要写的完
整,必须配合where,trim节点,where节点是判断包含节点有内容就插入where,否则不插
入,trim节点是用来判断如果动态语句是以and 或or开始,那么会自动把这个and或者or取
掉
40.IBatis和MyBatis在核心处理类分别叫什么
答:IBatis里面的核心处理类交SqlMapClient,
MyBatis里面的核心处理类叫做SqlSession
41.IBatis和MyBatis在细节上的不同有哪些
答:在sql里面变量命名有原来的#变量# 变成了#{变量}
原来的$变量$变成了${变量},
原来在sql节点里面的class都换名字交type
原来的queryForObject queryForList 变成了selectOne selectList
原来的别名设置在映射文件里面放在了核心配置文件里
42.讲下MyBatis的缓存
答:MyBatis的缓存分为一级缓存和二级缓存,
一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,
使用二级缓存属性类需要实现Serializable序列化接
口(可用来保存对象的状态),可在它的映射文件中配置
43.MyBatis(IBatis)的好处是什么
答:ibatis把sql语句从Java源程序中独立出来,
放在单独的XML文件中编写,给程序的维护带来了很大便利。
ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象,
大大简化了Java数据库编程的重复工作。
因为Ibatis需要程序员自己去编写sql语句,
程序员可以结合数据库自身的特点灵活控制sql语句,
因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询
44.Hibernate工作原理及为什么要用?
原理:
答:1.读取并解析配置文件
2.读取并解析映射信息,创建SessionFactory
3.打开Sesssion
4.创建事务Transation
5.持久化操作
6.提交事务
7.关闭Session
8.关闭SesstionFactory
45.为什么要用Hribernate:
答:1.对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。
2.Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作
3.hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4.hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系
46.Mybatis优势
1.MyBatis可以进行更为细致的SQL优化,可以减少查询字段。
2.MyBatis容易掌握,而Hibernate门槛较高。
47.Hibernate优势
1.Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
2.Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
48.MyBatis支持级联删除吗?
答:不支持,只能写sql语句关联删除。
49.servlet的生命周期
答:web容器加载servlet,生命周期开始。通过调用servlet的init()方法进行servlet的初始化。
通过调用service()方法实现,根据请求的不同调用不同的do***()方法。结束服务,web容器
调用servlet的destroy()方法。
50.什么情况下调用doGet()和doPost()?
答:Jsp页面中的form标签里的method属性为get时调用doGet(),为post时调用doPost()。
51.JSP的9大内置对象及方法。
答:request表示HttpServletRequest对象。它包含了有关浏览器请求的信息,并且提供了几个用于获取cookie, header, 和session数据的有用的方法。
response表示HttpServletResponse对象,并提供了几个用于设置送回浏览器的响应的方法(如cookies,头信息等)
out对象是javax.jsp.JspWriter的一个实例,并提供了几个方法使你能用于向浏览器回送输出结果。
pageContext表示一个javax.servlet.jsp.PageContext对象。它是用于方便存取各种范围的名字空间、servlet相关的对象的API,并且包装了通用的servlet相关功能的方法。
session表示一个请求的javax.servlet.http.HttpSession对象。Session可以存贮用户的状态信息
applicaton 表示一个javax.servle.ServletContext对象。这有助于查找有关servlet引擎和servlet环境的信息
config表示一个javax.servlet.ServletConfig对象。该对象用于存取servlet实例的初始化参数。
page表示从该页面产生的一个servlet实例
52.JSP中动态INCLUDE与静态INCLUDE的区别?
答:动态INCLUDE用jsp:include动作实现
它总是会检查所含文件中的变化,适合用于包含动态页面,并且可以带参数
静态INCLUDE用include伪码实现,定不会检查所含文件的变化,适用于包含静态页面
53.jsp有哪些动作作用分别是什么
答:JSP共有以下6种基本动作
jsp:include:在页面被请求的时候引入一个文件。
jsp:useBean:寻找或者实例化一个JavaBean。
jsp:setProperty:设置JavaBean的属性。
jsp:getProperty:输出某个JavaBean的属性。
jsp:forward:把请求转到一个新的页面。
jsp:plugin:根据浏览器类型为Java插件生成OBJECT或EMBED标记
54.如何实现servlet单线程模式
答:<%@ page isThreadSafe="false" %>
56.JSP和Servlet有哪些相同点和不同点?
答:Jsp是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外部表达。
JSP编译后是“类 servlet”。Servlet和JSP最主要的不同点在于Servlet的应用
逻辑是在java文件中,并且完全从表示层中HTML里分离出来,而jsp是java和html
结合成一个扩展名为.jsp的文件,JSP侧重于视图,servlet侧重于控制逻辑。
57.说说四种会话跟踪技术
答:1.page是代表与一个页面相关的对象和属性。一个页面由一个编译好的java servlet类(可以带有任何的include指令,但是没有include动作)表示。这既包括servlet又包括被编译成servlet的jsp页面。
2.request是代表与web客户端发送的一个请求相关的对象和属性。一个请求可能跨越多个页面,涉及多个web组件
3.session代表与用于某个web客户端的一个用户体验相关的对象和属性,一个web会话可以也经常会跨越多个客户机请求。
4.application是代表与整个web应用程序相关的对象和属性,这实质上是跨越多个web应用程序,包括多个页面、请求和会话的一个全局作用域。
58.如何防止在JSP或servlet中的输出不被browser保存在cache中?
答:把一下脚本加入到jsp文件中即可
<%
response.setHeader("Cache-Control","no-store");
response.setHeader("Pragma","no-cache");
response.setDateHeader("Expires",0);
%>
59.在JSP中如何设置cookie?
答:设置
<%
Cookie mycookie=new Cookie("aName","aValue");
response.addCookie(mycookie);
%>
删除:
<%
Cookie killMyCookie=new Cookie("mycookie",null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
%>
60.什么是servlet
答:Servlet是sun公司制订的一种用于扩展web服务器功能的组件规范。
61.讲下servlet的执行流程。doGet和doPost的区别
答:Servlet的执行流程也就是servlet的生命周期,当服务器启动的时候生命周期开始,然后通过init()《启动顺序根据web.xml里的startup-on-load来确定加载顺序》方法初始化servlet,再根据不同请求调用doGet或doPost方法,最后再通过destroy()方法进行销毁。
doGet和doPost都是接受用户请求的方法,doGet处理get请求,doPost处理post请求,doGet用于地址栏提交,doPost用于表单提交,在页面提交数据时,get的数据大小有限制4k,post没有限制,get请求提交的数据会在地址栏显示,post不显示,所以post比get安全.
62.当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的。
答:会出现线程不安全问题。无论是doGet还是doPost去调用,服务器端处理的过程都是一样的,
那么我们可以把处理过程单独写在另外一个方法handle里,让两个方法都去调用handle,
根据不同请求去调用不同的方法。
63.有三台服务器,如果在一台服务器上登陆了这个用户,其他两台就不能再登陆这个用户,使用session共享,你是怎么做的。
答:把所有的session的数据保存到Mysql服务器上,所有Web服务器都来这台Mysql服务器来获取Session数据。
64.Jsp如何处理json
答:在jsp中处理 JSON通常需要配套使用JQuery控件并且导入一些Commonjar包使用JQuery
控件是因为它能有效的解析并且展示 JSON 数据导入Common则是因为Java中的对象并不
是纯粹的数据,需要通过这些 Jar 包的处理使之转化成真实数据。
65.Jsp的重定向和转发的流程有什么区别
答:重定向是客户端行为,转发是服务器端行为
重定向时服务器产生两次请求,转发产生一次请求,重定向时可以转发到项目以外的任何网址,转发只能在当前项目里转发
重定向会导致request对象信息丢失。转发则不会
转发的url不会变,request.getRequestDispatch()。forward()
重定向的url会改变,response.getRedirect();
66.jsp可以操作窗口吗?
答:Jsp不能够直接调用窗口,只能先 生成打开窗口的js,再由js调用
67.获取页面的元素和值有几种方式,分别说一下
答:request.getParameter() 返回客户端的请求参数与值
request.getParameterNames() 返回所有可用属性名的枚举
request.getParameterValues() 返回包含参数的所有值的数组
68.servlet和javaScript的区别,他们分别是什么作用
答:一个是服务端,一个是客户端
Servlet是独立于平台和协议的服务器端的java应用程序,可以动态生成web页面,并采用响应--请求的模式提供web服务
javaScript是一种解释性语言,用于向html页面提供交互行为,通常被直接嵌入在html页面中
servlet是java语言编写的web应用
js是基于html上的一种解释语言
69.jsp的执行原理
答:客户端发出请求(request),jsp引擎将jsp页面翻译成servlet的java源文件,在Tomcat中将源文件编译成class文件,并加载到内存中执行,
把结果返回(response)给客户端。
70.转发http请求一般有两种方法,response.sendRedirect和request.forward。resquest.setAttribute()中设置的值不会丢失?(B)
答:A.sendRedirect B.forward C.两个都不能 D.两个都可以
71.HTML和Servlet的异同
答:不同:
Html是静态,servlet是动态
html页面由服务器直接返回,
servlet是用来处理客户请求,并返回html页面
//servlet需要服务器调用servlet方法生成动态html页面,且需要在web.xml中配置url路径
72.session和application的作用
答:Session用于客户端与服务器之间保持状态的解决方案,数据保存在服务器内存中,底层是有cookie实现的
Application的作用域是整个工程里只有一个,可以在不同浏览器之间共享数据,所有人都可以共享,因此
application是不安全的
73.request ,response,session 和 application是怎么用的
答:Request是客户端向服务端发送请求
Response是服务端对客户端请求做出响应
Session在servlet中不能直接使用,需要通过getSession()创建,如果没有设定它的生命周期,或者通过invildate()方法销毁,关闭浏览器session就会消失
Application不能直接创建,存在于服务器的内存中,由服务器创建和销毁
74.服务端怎么判断浏览器是否支持cookie
答:可以使用javaScript的方法navigator.cookieEnabled判断浏览器是否支持cookie
75.Request和session的取值区别,以及出现乱码的解决方式(不能在java代码中设置)
答:Request可以通过getAttribute()方法直接取值,也可通过getParameter()取值
Session需要通过request.getSession().getAttribute()才能取值
Request是针对一次请求,session是针对整个会话
在页面通过contentType,pageEncoding,content设置编码格式,必须要一致
76.jsp页面跳转
答:Jsp页面跳转有两种方式,forward和redirect(转发和重定向)
Forward只能在当前项目里跳转,只产生一次请求,request保存的变量不会丢失,url地址不会改变
Redirect可跳转到项目以外的任何页面,产生两次请求,request保存的变量会全部丢失,url地址会发生改变,变化为第二个请求的地址
77.有几种方式将页面的值传到后台
答:可通过form表单的get或post将值传递到后台,也可通过setAttribute()方法将值传递到后台
78.一个form表单的值如何获取
答:在servlet中通过request.getParameter()方法可以获取表单的值
或者是request.getParameterValuse();
79.Jsp中父页面中怎么拿到子页面的表单元素,不是拿值怎么拿
答:通过设置属性setAttribute(),通过getAttribute()拿值,getParameter()方法可以做到
80.404和500是什么意思
答:404 :找不到url请求的路径,一般是工程名不对或者拼写错误
500 :服务器内部错误,一般是服务器内部代码编写错误,也有可能是抛异常导致
81.写出5种JSTL常用标签
答:,,,,
82.在项目名和页面路径都没有错的情况下为什么会报404错误,它有什么原理在里面
答:工程名不对或者拼写错误,404错误一般是找不到客户端请求的文件
83.Jsp页面把一个元素隐藏的方法
答:通过使用属性hidden可以将元素隐藏
84.Session,application,cookie的区别
答:Session不能通过new创建,要通过调用getSession()方法创建,数据保存在服务器端,单个客户端session是共享的,底层是由cookie实现的,大小没有限制
Application的作用域是整个工程只有共享一个,生命周期比session大
Cookie需要通过new创建,数据保存在客户端中,cookie保存的数据不能超过4k,不安全
85.我们在web应用开发过程中经常遇到输出某种编码的字符,如ISO-8859-1,如何输出一个某种编码的字符串
答:如将ISO-8859-1输出为GBK格式的字符, 通过new String(byte[] bytes,String charset)
构造器设置编码构造一个新的String(new String("ISO-8859-1","GBK"));
86.怎么判断用户请求时是第一次,如果客户端和服务端断开怎么连到上一次操作
答:通过session中的isNew()可以判断是否是新用户
87.Servlet是安全的吗?当service有一个实例变量,doGet和doPost去调用这个变量,会出现什么问题,你是如何解决的
答:是线程不安全的,因为servlet是单例模式,当多个客户端共同访问的时候线程不安全。
尽量用局部变量,同步块,如果当前字段是不会改变的,用final修饰
88.Servlet和过滤器的区别
答:Servlet:是用来处理客户端发送的请求,然后生成响应并将其传给server服务器,
最后服务器将响应返回给客户端
过滤器:是用于 对servlet容器调用servlet的过程进行拦截
可以在servlet进行响应处理前后做一些特殊的处理
89. pageContext有什么作用
答:可以使用pageContext对象来设定属性,并指定属性的作用范围,提供了对JSP页面内所有的对象及名字空间的访问
90.Filter与拦截器怎么执行的
答:首先初始化过滤器,然后服务器组织过滤器链,所有的请求都必须需要先通过过滤器链,
过滤器链是一个栈,遵循先进后出的原则 ,所有的请求需要经过一个一个的过滤器,
执行顺序要根据web.xml里配置的的位置前后执行,每个过滤器之间通
过chain.doFilter连接, 最后抵达真正请求的资源,执行完后再从过滤器链退出
91.Servlet是单例还是多例
答:是单例的,可以提高性能
92.Jsp中如何进行分页,项目中如何进行分页?
答:需要上一页和下一页的超链接(至少需要这两个),通过计算当前页的页码获取下一页数据
的起始位置,然后在 MySql 中查询,如果使用 Oracle 则需要另外计算下一页数据的结
束位置。
使用hibernate框架,它可以针对不同的数据库自动产生为你分页的代码。
93.什么是hibernate一级缓存?
答:一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,
如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,
而不会再去连数据库,取数据。
94.什么是hibernate二级缓存呢?
答:二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同
一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连
接数据库
95.Hibernate的优缺点:
优点:1、程序更加面向对象;
2、提高了生产率;
3、方便移植(修改配置文件);
4、无侵入性。
缺点:
1、效率比JDBC略差;
2、不适合批量操作。
96.Hibernate有四种查询方案:
1、get,load方法,根据id查找对象
2、HQL--hibernate query language(查询对象:Query)
3、Criteria--标准查询语言(查询对象:Criteria,查询条件:Criterion)
4、通过sql来查(查询对象:SQLQuery)
97.Hibernate中的命名SQL查询指的是什么?
答:Hibernate的这个面试问题同Hibernate提供的查询功能相关。命名查询指的是用标签在影射文档中
定义的SQL查询,可以通过使用Session.getNamedQuery()方法对它进行调用。命名查询使你可以使用你所指定的
一个名字拿到某个特定的查询。 Hibernate中的命名查询可以使用注解来定义,也可以使用我前面提到的xml影射
问句来定义。在Hibernate中,@NameQuery用来定义单个的命名查询,@NameQueries用来定义多个命名查询。
98.Hibernate中的查询缓存指的是什么?
答:这个问题有时是作为上个Hibernate面试问题的后继问题提出的。查询缓存实际上保存的是sql查询的结果,这样再进行
相同的sql查询就可以之间从缓存中拿到结果了。为了改善性能,查询缓存可以同二级缓存一起来使用。Hibernate支持
用多种不同的开源缓存方案,比如EhCache,来实现查询缓存
99.为什么在Hibernate的实体类中要提供一个无参数的构造器这一点非常重要?
答:每个Hibernate实体类必须包含一个 无参数的构造器, 这是因为Hibernate框架要使用Reflection API,通过调用
Class.newInstance()来创建这些实体类的实例。如果在实体类中找不到无参数的构造器,这个方法就会抛出一个
InstantiationException异常。
100.可不可以将Hibernate的实体类定义为final类?
答:是的,你可以将Hibernate的实体类定义为final类,但这种做法并不好。因为Hibernate会使用代理模式在延迟关联
的情况下提高性能,如果你把实体类定义成final类之后,因为 Java不允许对final类进行扩展,所以Hibernate就无
法再使用代理了,如此一来就限制了使用可以提升性能的手段。不过,如果你的持久化类实现了一个接口而且在该接
口中声明了所有定义于实体类中的所有public的方法轮到话,你就能够避免出现前面所说的不利后果