springMVC面试问题

(一)spring框架的基础核心关键词是DI(依赖注入)与AOP(控制翻转)
IOC就是控制翻转,就是将类的创建和依赖关系写在配值文件中,由配值文件注入,实现松耦合
AOP将安全,事务,日志,等相对独立的模块抽取出来,利用弹簧的配置文件将这些功能插入进去,实现了按照方面编程,了提高复用性
三种注入方式,构造函数注入,设定器函数注入,接口注入
基于模版的设计方法
基于继承实现
基于模版实现模版方法
创建执行,钩子函数

1,)Struts2是如何实现MVC的?M(模型):这个一般不是Struts来做V(视图):视图也不算struts的强项,但是struts提供优秀的标签来支持视图的展示,利用标签,可以将数据合理的展示给用户控制器:支柱的重要功能,提供支柱的过滤器,拦截用户的请求,查找支柱配置文件,为其匹配一个对应的行动,这个行动负责调用模型,获得数据,然后对数据做部分处理,接着动作再将处理后的数据,为其选择一个视图进行输出。

2)支柱的工作机制为什么要使用的Struts的工作机制:Struts的的的工作流程:在网络应用启动时就会加载初始化的ActionServlet的,的ActionServlet的从struts-config.xml中中文件中读取配置信息,把它们存放到各种配置对象当的ActionServlet的的接收到一个客户请求时,将执行如下流程(1)检索和用户请求匹配的的的ActionMapping的实例,如果不存在,就返回请求路径无效信息;(2)如果ActionForm的的的实例不存在,就创建一个的ActionForm中的对象,把客户提交的表单数据保存到的ActionForm的的对象中; (3)根据配置信息决定是否需要表单验证如果需要验证,就调用的的ActionForm的的验证()方法。(4)如果ActionForm的的的验证()方法返回零或返回一个不包含ActionMessage的的的ActuibErrors对象,就表示表单验证成功; (5)的的ActionServlet的根据的的ActionMapping中所包含的映射信息决定将请求转发给哪个动作,如果相应的行动实例不存在,就先创建这个实例,然后调用动作的执行()方法; (6)动作的执行()方法返回一个的的的ActionForward对象,的的的ActionServlet在把客户请求转发给的的的ActionForward对象指向的JSP组件; (7)的的的ActionForward对象指向JSP组件生成动态网页,返回给客户;

 3)spring工作机制及为什么要用? 1.spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。 2.DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller. 3.DispatcherServlet请请求提交到目标Controller 4.Controller进行业务逻辑处理后,会返回一个ModelAndView 5.Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象 6.视图对象负责渲染返回给客户端。为什么用: AOP 让开发人员可以创建非行为性的关注点,称为横切关注点,并将它们插入到应用程序代码中。使用 AOP 后,公共服务 (比 如日志、持久性、事务等)就可以分解成方面并应用到域对象上,同时不会增加域对象的对象模型的复杂性。

IOC允许创建一个可以构造对象的应用环境,然后向这些对象传递它们的协作对象。 singleton)和直接构造(直接构造),每一个对象都是用于其协作对象构造的。因此是由容器管理协作对象(合作者)。

    4)Hibernate工作原理及为什么要用? 原理: 1.读取并解析配置文件 2.读取并解析映射信息,创建SessionFactory 3.打开Sesssion 4.创建事务Transation 5.持久化操作 6.提交事务 7.关闭Session 8.关闭SesstionFactory为什么要用: 1. 对JDBC访问数据库的代码做了封装,大大简化了数据访问层繁琐的重复性代码。2. Hibernate是一个基于JDBC的主流持久化框架,是一个优秀的ORM实现。他很大程度的简化DAO层的编码工作3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到多对多的各种复杂关系。2. Hibernate是如何延迟加载? 1. Hibernate2延迟加载实现:a)实体对象 b)集合(Collection)2. Hibernate3 提供了属性的延迟加载功能当Hibernate在查询数据的时候,数据并没有存在与内存中,当程序真正对数据的操作时,对象才存在与内存中,就实现了延迟加载,他节省了服务器的内存开销,从而提高了服务器的性能。3.Hibernate中怎样实现类之间的关系?(如:一对多、多对多的关系)类与类之间的关系主要体现在表与表之间的关系进行操作,它们都市对对象进行操作,我们程序中把所有的表与类都映射在一起,它们通过配置文件中的many-to-one、one-to-many、many-to-many。 

5)休眠的一级缓存与二级缓存的区别?

一级缓存就是Session级别的缓存,一个Session做了一个查询操作,它会把这个操作的结果放在一级缓存中,如果短时间内这个session(一定要同一个session)又做了同一个操作,那么hibernate直接从一级缓存中拿,而不会再去连数据库,取数据。二级缓存就是SessionFactory级别的缓存,顾名思义,就是查询的时候会把查询结果缓存到二级缓存中,如果同一个sessionFactory创建的某个session执行了相同的操作,hibernate就会从二级缓存中拿结果,而不会再去连接数据库。(这个题想简答就可以了,但是如果想深入去多问几个问什么这里提供一个连接,写得较为详细:1)

   另外一个关键点是:你要知道什么信息和什么操作,该调用什么级别的缓存!

6)如何优化休眠?(这个问题有些触及到这个框架的弱点了,那就得想办法应付)

     1.使用双向一对多关联,不使用单向一对多                         2.灵活使用单向一对多关联         3.不用一对一,用多对一取代         4.配置对象缓存,不使用集合缓存          5.一对多集合使用Bag,多对多集合使用Set         6. 继承类使用显式多态      7. 表字段要少,表关联不要怕多,自己再补充一点,上面说到的都是关于数据库设计 带来的优势,从而起到优化框架的效果,但是真正在实际操作中,我们只有尽量控制不使用懒加载“lazy

=真”,如果在涉及的尽量使用HQL语句

7)支柱的核心是什么(参考了这个回答:2)

FilterDispatcher也是Struts2的的核心技术.FilterDispatcher核心控制器执行以下操作:(1)读取静态数据信息(2)决定需要转发或者导航的操作配置(3)创建动作的上下文(4)创建行动代理(5)内存清理和性能优化拦截器:Interceptor拦截器本身是一个普通的Java对象,它能动态拦截Action调用,在Action执行前后执行拦截器本身提供的各种样式的Web项目需求。也可以阻止Action的执行,同时也可以提取操作中可以复用的部分。(1)在动作调用之前提供系统处理流程逻辑控制(2)和动作交互时,提供ATION执行时的一些初始信息(3)在操作结束后,一些事后的处理流程逻辑(4)修改操作中返回的结果信息(5)捕获异常栈是用ognl表达式存值的最初地方,即一个存值的栈自己再补充一点:struts的标签库也算一个。

8)ssh的工作流程(这个问题留作作业,它们之间的相互实现,相互调用从原理上理解就行了)

(1)Spring在SSM起什么作用
Spring是一个轻量级框架,也是一个容器,Spring实质上讲就是一个Bean工厂,主要用来管理Bean的生命周期和框架集成。IOC控制反转,DI依赖注入,控制反转是把DAO依赖注入到SERVIC层,然后服务层反转给操作层,春天的顶层容器为Bean工厂,常用的的ApplicationContext为它的子接口,实现了工厂模式,春季还提供了AOP的支持,方便在切面级开发,
(2)怎么样理解IOC和DI
在使用Spring框架的过程中,一定会用到控制反转,但是往往所需要的资源还需要其他资源的支持,个过程就需要依赖注入的支持
(3)Spring的事务,事务的作用。
•编程式事务管理:这意味你通过编程的方式管理事务,给你带来极大的灵活性,但是难维护。
•声明式事务管理:这意味着你可以将业务代码和事务管理分离,你只需用注解和XML配置来管理事务
(3)弹簧的IOC你在 目中是怎么使用的?
•国际奥委会主要来解决对象之间的依赖问题,把所有的豆的依赖关系通过配置文件或者注解关联起来,降低了耦合度
(5)弹簧的配置文件有哪些内容?
•开源事务注解驱动
•事务管理器
•开启注解功能,并配置扫描包
•配置数据源
•配置SQL会话工厂,别名,映射文件
•不用编写DAO层的实现类(代理模式)
(6)注解
@Controller
@Service
@Component
@RequestMapping @Resource
@ Autowired
@ResponseBody
@Transactional

(7)为什么要用弹簧
•降低对象耦合度,让代码更加清晰,提供一些常见的模版
(8)弹簧DI几种的方式
•(1)构造器注入:构造通过方法初始化

•(2)设定部注入:通过设定器初始化方法注入

•注意:在实际开发中常用的setter注入
(1)用SpringMVC的控制器是不是单例模式,如果是,有什么问题,解决怎么
的英文单译文模式,所以在多线程访问的时候有线程安全问题,不要用同步,会影响性能的,解决方案是在控制器里面不能写字段
(2)SpingMvc中的控制器的注解
@Controller注解:该注解表明该类扮演控制器的角色,Spring不需要继承任何其他控制器基类或引用Servlet API。
(3)@RequestMapping注解用在类上面有什么作用
该注解是用来映射一个URL到一个类或一个特定的方处理法上。
(4)我想在拦截的方法里面得到从前台传入的参数,得到怎么
直接在形参里面声明这个参数就可以,但必须名字和传过 的参数一样
(5)如果前台有很多个参数传入,并且这些参数都是一个对象的,怎么那么样快速得到这个对象
直接在方法中声明这个对象,用SpringMVC就自动会把属性赋值到这个对象里面
(6)用SpringMVC中函数的返回值是什么
返回值可以有很多类型,有String,ModelAndView,List,Set等,一般用String比较好,如果是AJAX请求,返回的可以是一个集合
(7)SpringMvc怎么处理返回值的
SpringMvc根据配置文件中InternalResourceViewResolver内部资源视图解析器)的前缀和后缀,用前缀+返回值+后缀组成完整的返回值
(8)用SpringMVC样怎么设定重定向转发状语从句:的
在返回值前面加”前进”就可以让结果转发,譬如“forward:user.do?name = method4”在返回值前面加“redirect:”就可以让返回值重定向,譬如“redirect:http :
//www.uu456.com (9)SpringMvc中有个类把视图和数据都合并的一开的,叫什么
ModelAndView
(10)怎么样把数据放入Session里面
可以声明一个请求,或者session先拿到session,然后就可以放入数据,或者可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入会话里面的键
(11)用SpringMVC怎么和AJAX调用相互的
通过杰克逊框架就可以把Java的里 的对象直接转化成JS可以识别的的Json对象具体步骤如下:
1.加入Jackson.jar
2.在配置文件中配置JSON的映射
3.在接受Ajax的方法里面可以直接返回对象,列出等,但方法前面要加上@ResponseBody注解
(12)当一个方法向AJAX返回对象,譬如对象,列出等,做需要什么处理
要加上@ResponseBody注解
(13)讲下SpringMvc的执行流程
系统启动的时候根据配置文件创建spring的容器,首先是发送http请求到核心控制器DispatcherServlet,spring容器通过映射器去寻找业务控制器,
使用适配器找到相应的业务类,在进业务类时进行数据封装,在封装前可能会涉及到类型转换,执行完业务类后使用ModelAndView进行视图转发,
数据放在model中,用map传递数据进行页面显示。
(1)什么是的MyBatis的接口绑定,什么有好处
接口映射就是在iBATIS的中任意定义接口,然后把接口里面的方法和SQL语句绑定,我们直接调用接口方法就可以,这样比起原来了一个SqlSession提供的方法我们可以有更加灵活的选择和设置。
(2)什么情况下用注解绑定,什么情况下用XML绑定
当的Sql语句比较简单时候,用注解绑定,当SQL语句比较复杂时候,用XML绑定,一般用XML绑定的比较多
(3)如果要查询的表名和返回的实体Bean对象不一致,那你是怎么处理的?
在MyBatis里面最主要最灵活的一个映射对象的ResultMap,在它里面可以映射键值对,默认里面有ID节点,因此节点,它可以映射表里面的列名和对象里面的字段名并且在一对一,一对多的情况下结果集也一定要用的ResultMap
(4)MyBatis在核心处理类叫什么
MyBatis里面的核心处理类叫做SqlSession
(5)讲下MyBatis的缓存
MyBatis的缓存分为一级缓存和二级缓存,一级缓存放在session里面,默认就有,二级缓存放在它的命名空间里,
默认是打开的,使用二级缓存属性类需要实现串行化序列化接口(可用来保存对象的状态),可在它的映射文件中配置
(6)的MyBatis (IBatis)的好处是什么
ibatis把sql语句从Java源程序中独立出来,放在单独的XML文件中
编写,给程序的维护带来了很大便利
。ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成JavaBean的对象,大大简化了Java的数据库编程的重复工作。
因为iBATIS的需要程序员自己去编写SQL语句,程序员可以结合数据库自身的特点灵活控制SQL语句,
因此能够实现比休眠等全自动orm框架更高的查询效率,能够完成复杂查询。
(7)MyBatis怎么配置一对多?
一对多的关系:proper ty:指的是集合属性的值,ofType:指的是集合中元素的类型
(8)MyBatis怎样配置多对一?
多对一的关系:属性:指的是属性的值,javaType:指的是是属性的类型

-b \ pm \ sqrt { b ^ 2  -  4ac }    }    { 2a }    $$         更多LaTex语法请参考[这儿] [3]。### UML图:可以渲染序列图:`  `  ` sequence张三 - >李四:嘿,小四儿,写博客了没?需要注意的李四权:李四愣了一下,说:李四 - >张三:忙得吐血,哪有时间写`  `  `或者流程图: COND =>条件:确认ST-> OP-> COND COND(是) - >电子COND(无) - > COND COND(无) - >关于**流程图**语法,参考[这儿] [5]。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值