java题库4.docx
- 文档编号:14882884
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:24
- 大小:30.59KB
java题库4.docx
《java题库4.docx》由会员分享,可在线阅读,更多相关《java题库4.docx(24页珍藏版)》请在冰点文库上搜索。
java题库4
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能够实现代码解耦,各层之间耦合性降到最低。
11:
Spring注入对象有几种方式
答:
构造器注入,set注入。
2种方式。
12:
谈谈AOP中的代理
答:
Spring中的AOP内部集成了jdk的动态代理和cglib的动态代理。
使用Spring的AOP生成代理对象将不会再有代理对象原生的缺点。
spring中可以做到方法级别的代理。
13:
AOP的实现原理
答:
当获取对象时,首先将对象与切入点表达式进行匹配。
如果匹配成功,
则会创建代理对象。
然后代理对象执行方法时就会执行通知。
14:
spring事务的回滚策略
答:
1.运行时异常:
如果程序出现运行时异常,那么错误级别较高,spring会自动的回滚事务。
2.检查异常:
对于检查异常而言,spring认为检查异常是可以避免的,程序员可以修复的,
那么spring容器就不负责回滚检查异常。
15:
解释SpringBean的生命周期?
答:
在一个bean实例被初始化时,需要执行一系列的初始化操作以达到可用的状态。
同样的,当一个bean不在被调用时需要进行相关的析构操作,并从bean容器中移除。
Springbeanfactory负责管理在spring容器中被创建的bean的生命周期。
Bean的生命周期由两组回调(callback)方法组成。
1.初始化之后调用的回调方法。
2.销毁之前调用的回调方法。
Spring框架提供了以下四种方式来管理bean的生命周期事件:
InitializingBean和DisposableBean回调接口
针对特殊行为的其他Aware接口
Bean配置文件中的Custominit()方法和destroy()方法
@PostConstruct和@PreDestroy注解方式
16:
Spring框架中的单例Beans是线程安全的么?
答:
Spring框架并没有对单例bean进行任何多线程的封装处理。
关于单例bean的线程安全和并发问题需要开发者自行去搞定。
但实际上,大部分的Springbean并没有可变的状态(比如Serview类和DAO类),
所以在某种程度上说Spring的单例bean是线程安全的。
如果你的bean有多种状态的话(比如ViewModel对象),就需要自行保证线程安全。
最浅显的解决办法就是将多态bean的作用域由“singleton”变更为“prototype”。
17:
Spring框架中都用到了哪些设计模式?
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
模板方法—用来解决代码重复的问题。
比如.RestTemplate,JmsTemplate,JpaTemplate。
前端控制器—Srping提供了DispatcherServlet来对请求进行分发。
视图帮助(ViewHelper)—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,hibernateorJDO抛出的)转化为一致的unchecked异常。
20.IOC的优点是什么?
答:
IOC或依赖注入把应用的代码量降到最低。
它使应用容易测试,单元测试不再需要单例和JNDI查找机制。
最小的代价和最小的侵入性使松散耦合得以实现。
IOC容器支持加载服务时的饿汉式初始化和懒加载。
21.解释Spring支持的几种bean的作用域。
答:
Spring框架支持以下五种bean的作用域:
singleton:
bean在每个Springioc容器中只有一个实例。
prototype:
一个bean的定义可以有多个实例。
request:
每次http请求都会创建一个bean,该作用域仅在基于web的SpringApplicationContext情形下有效。
session:
在一个HTTPSession中,一个bean定义对应一个实例。
该作用域仅在基于web的SpringApplicationContext情形下有效。
global-session:
在一个全局的HTTPSession中,一个bean定义对应一个实例。
该作用域仅在基于web的SpringApplicationContext情形下有效。
缺省的Springbean的作用域是Singleton.
22.Spring支持的事务管理类型
答:
Spring支持两种类型的事务管理:
编程式事务管理:
这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
声明式事务管理:
这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务
23.Spring框架的事务管理有哪些优点?
答:
它为不同的事务API如JTA,JDBC,Hibernate,JPA和JDO,提供一个不变的编程模式。
它为编程式事务管理提供了一套简单的API而不是一些复杂的事务API如
它支持声明式事务管理。
它和Spring各种数据访问抽象层很好得集成
24.在SpringAOP中,关注点和横切关注的区别是什么?
答:
关注点是应用中一个模块的行为,一个关注点可能会被定义成一个我们想实现的一个功能。
横切关注点是一个关注点,此关注点是整个应用都会使用的功能,并影响整个应用,比如
日志,安全和数据传输,几乎应用的每个模块都需要的功能。
因此这些都属于横切关注点
25.什么是目标对象?
答:
被一个或者多个切面所通知的对象。
它通常是一个代理对象。
也指被通知(advised)对象。
28.哪些是重要的bean生命周期方法?
你能重载它们吗?
答:
有两个重要的bean生命周期方法,第一个是setup,它是在容器加载bean的时候被调用。
第二个方法是teardown它是在容器卸载类的时候被调用。
Thebean标签有两个重要的属性(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
原来的queryForObjectqueryForList变成了selectOneselectList
原来的别名设置在映射文件里面放在了核心配置文件里
42.讲下MyBatis的缓存
答:
MyBatis的缓存分为一级缓存和二级缓存,
一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,默认是打开的,
使用二级缓存属性类需要实现Serializable序列化接
口(可用来保存对象的状态),可在它的映射文件中配置
43.MyBatis(IBatis)的好处是什么
答:
ibatis把sql语句从Java源程序中独立出来,
放在单独的XML文件中编写,给程序的维护带来了很大便利。
ibatis封装了底层JDBCAPI的调用细节,并能自动将结果集转换成JavaBean对象,
大大简化了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单线程模式
答:
<%@pageisThreadSafe="false"%>
56.JSP和Servlet有哪些相同点和不同点?
答:
Jsp是Servlet技术的扩展,本质上是Servlet的简易方式,更强调应用的外部表达。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于Servlet的应用
逻辑是在java文件中,并且完全从表示层中HTML里分离出来,而jsp是java和html
结合成一个扩展名为.jsp的文件,JSP侧重于视图,servlet侧重于控制逻辑。
57.说说四种会话跟踪技术
答:
1.page是代表与一个页面相关的对象和属性。
一个页面由一个编译好的javaservlet类(可以带有任何的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?
答:
设置
<%
Cookiemycookie=newCookie("aName","aValue");
response.addCookie(mycookie);
%>
删除:
<%
CookiekillMyCookie=newCookie("mycookie",null);
killMyCookie.setMaxAge(0);
killMyCookie.setPath("/");
response.addCookie(killMyCookie);
%>
60.什么是servlet
答:
Servlet是sun公司制订的一种用于扩展web服务器功能的组件规范。
61.讲下servlet的执行流程。
do
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- java 题库