框架考题题目简答+论述+综合
1.如何设置Maven 的编译级别?
<build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>2.0.2</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin> </plugins> </build>
2.Maven 是什么?
Maven是基于项目对象模型(pom),可以通过一小段描述信息来管理项目的构建,报告和文档的软件项目管理工具。
Maven可以构建项目和管理、依赖Jar包。
3.BeanFactory和ApplicationContext有什么区别?
BeanFactory 可以理解为含有bean集合的工厂类。BeanFactory 包含了种bean的定义,以便在接收到客户端请求时将对应的bean实例化。BeanFactory还能在实例化对象的时生成协作类之间的关系。此举将bean自身与bean客户端的配置中解放出来。BeanFactory还包含了bean生命周期的控制,调用客户端的初始化方法(initialization methods)和销毁方法(destruction methods)。从表面上看,application context如同bean factory一样具有bean定义、bean关联关系的设置,根据请求分发bean的功能。但application context在此基础上还提供了其他的功能
4.什么@Qualifier 注解?
当有多个相同类型的bean而只有其中的一个需要自动装配时,将@Qualifier 注解和@Autowired 注解结合使用消除这种混淆,指明需要装配的bean。
5.依赖注入有几种方式?
set注入
构造器注入
自动装配 、手动装配
6.请说明一下AOP中需要的最基本的三个类:代理类、目标类、切面类
7.怎么样在方法里面得到Request,或者Session?
直接在方法的形参中声明request,SpringMvc就自动把request对象传入
8.SpringMVC怎么样设定重定向和转发的?
在返回值前面加"forward:"就可以让结果转发,譬如"forward:user.do?name=method4"
在返回值前面加"redirect:"就可以让返回值重定向,譬如"redirect:http://www.baidu.com"
9.什么是Spring的MVC框架?
Spring 配备构建Web 应用的全功能MVC框架。Spring可以很便捷地和其他MVC框架集成,如Struts,Spring 的MVC框架用控制反转把业务对象和控制逻辑清晰地隔离。它也允许以声明的方式把请求参数和业务对象绑定。
10.DispatcherServlet的作用?
Spring的MVC框架是围绕DispatcherServlet来设计的,负责接收用户的请求,并根据用户的请求返回相应的视图给用户。
SpringMVC是Spring中的模块,它实现了mvc设计模式,
首先用户发起请求,请求到达SpringMVC的前端控制器(DispatcherServlet),DispatcherServlet根据用户的url请求处理器映射器查找匹配该url的handle,并返回一个执行链,前端控制器再请求处理器适配器调用相应的handle进行处理并返回给前端控制器一个modelAndView,前端控制器再请求视图解析器对返回的逻辑视图进行解析,最后前端控制器将返回的视图进行渲染,并把数据装入到request域,返回给用户。
11.什么是Spring MVC框架的控制器?
控制器提供一个访问应用程序的行为,此行为通常通过服务接口实现。控制器解析用户输入并将其转换为一个由视图呈现给用户的模型。Spring用一个非常抽象的方式实现了一个控制层,允许用户创建多种用途的控制器。
12.Spring 框架中都用到了哪些设计模式?
代理模式—在AOP和remoting中被用的比较多。
单例模式—在spring配置文件中定义的bean默认为单例模式。
模板方法—用来解决代码重复的问题。
比如. RestTemplate, JmsTemplate, JpaTemplate。
前端控制器—Srping提供了DispatcherServlet来对请求进行分发。
视图帮助(View Helper )—Spring提供了一系列的JSP标签,高效宏来辅助将分散的代码整合在视图里。
依赖注入—贯穿于BeanFactory / ApplicationContext接口的核心理念。
工厂模式—BeanFactory用来创建对象的实例。
13.MyBatis编程步骤是什么样的?
① 创建SqlSessionFactory
② 通过SqlSessionFactory创建SqlSession
③ 通过sqlsession执行数据库操作
④ 调用session.commit()提交事务
14.Mybatis中如何执行批处理?
使用BatchExecutor完成批处理
15.请简述Mybatis的工作流程 ?
(1) 加载配置并初始化
(2) 接收调用请求
(3) 处理操作请求 触发条件:API 接口层传递请求过来
16.请写出4个动态SQL的元素? if choose where set
17.请说出动态SQL的作用
动态SQL元素和使用JSTL或其他类型基于XML的文本处理器相似
Mybatis采用功能强大的OGNL表达式来完成
18.Mybatis动态sql是做什么的?都有哪些动态sql?能简述一下动态sql的执行原理?
Mybatis动态sql可以让我们在Xml映射文件内,以标签的形式编写动态sql,完成逻辑判断和动态拼接sql的功能,其执行原理为,使用OGNL从sql参数对象中计算表达式的值,根据表达式的值动态拼接sql,以此来完成动态sql的功能。
19.当实体类中的属性名和表中的字段名不一样如何解决?
通过在查询的sql语句中定义字段名的别名,让字段名的别名和实体类的属性名一致
<select id=”selectorder” parametertype=”int” resultetype=”me.gacl.domain.order”>
select order_id id, order_no orderno ,order_price price form orders where order_id=#{id};
</select>
20.MyBatis(IBatis)的好处是什么?
ibatis把sql语句从Java源程序中独立出来, 放在单独的XML文件中编写,给程序的维护带来了很大便利。 ibatis封装了底层JDBC API的调用细节,并能自动将结果集转换成Java Bean对象, 大大简化了Java数据库编程的重复工作。 因为Ibatis需要程序员自己去编写sql语句, 程序员可以结合数据库自身的特点灵活控制sql语句, 因此能够实现比hibernate等全自动orm框架更高的查询效率,能够完成复杂查询。
21.如何在web.xml中设置编码?
<filter> <filter-name>CharacterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>utf-8</param-value> </init-param> </filter> <filter-mapping> <filter-name>CharacterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
22.spring是什么?根据你的理解
Spring是一个轻量级的非入侵式的开源web框架,解决企业应用开发的复杂性,它本身提供的IOC容器可以提高开发效率,AOP组件可以降低耦合度,并且它还可以集成其他的很多优秀框架,给企业开发应用提供一站式的解决方案。提高了开发效率、降低了维护成本。
23.项目中如何体现Spring中的切面编程,具体说明
主要是横切一个关注点,将一个关注点模块化成一个切面。在切面上声明一个通知(Advice)和切入点(Pointcut); 通知: 是指在切面的某个特定的连接点(代表一个方法的执行。通过声明一个org.aspectj.lang.JoinPoint类型的参数可以使通知(Advice)的主体部分获得连接点信息。)上执行的动作。通知中定义了要插入的方法。切入点:切入点的内容是一个表达式,以描述需要在哪些对象的哪些方法上插入通知中定义的方法。
24.使用Spring框架能带来哪些好处
Dependency Injection(DI) 方法使得构造器和JavaBean properties文件中的依赖关系一目了然。
与EJB容器相比较,IoC容器更加趋向于轻量级。这样一来IoC容器在有限的内存和CPU资源的情况下进行应用程序的开发和发布就变得十分有利。
Spring并没有闭门造车,Spring利用了已有的技术比如ORM框架、logging框架、J2EE、Quartz和JDK Timer,以及其他视图技术。
Spring框架是按照模块的形式来组织的。由包和类的编号就可以看出其所属的模块,开发者仅仅需要选用他们需要的模块即可。
要测试一项用Spring开发的应用程序十分简单,因为测试相关的环境代码都已经囊括在框架中了。更加简单的是,利用JavaBean形式的POJO类,可以很方便的利用依赖注入来写入测试数据。
Spring的Web框架亦是一个精心设计的Web MVC框架,为开发者们在web框架的选择上提供了一个除了主流框架比如Struts、过度设计的、不流行web框架的以外的有力选项。
Spring提供了一个便捷的事务管理接口,适用于小型的本地事物处理(比如在单DB的环境下)和复杂的共同事物处理(比如利用JTA的复杂DB环境)
25.什么是控制反转(IOC)?
控制反转是应用于软件工程领域中的,在运行时被装配器对象来绑定耦合对象的一种编程技巧,对象之间耦合关系在编译时通常是未知的。在传统的编程方式中,业务逻辑的流程是由应用程序中的早已被设定好关联关系的对象来决定的。在使用控制反转的情况下,业务逻辑的流程是由对象关系图来决定的,该对象关系图由装配器负责实例化,这种实现方式还可以将对象之间的关联关系的定义抽象化。而绑定的过程是通过“依赖注入”实现的。
控制反转是一种以给予应用程序中目标组件更多控制为目的设计范式,并在我们的实际工作中起到了有效的作用
26.Spring在SSM中起到了什么作用?
Spring是一个轻量级框架,也是一个容器,Spring实质上讲就是一个Bean工厂,主要用来管理Bean的生命周期和框架集成。有IOC控制反转,DI依赖注入,控制反转是把dao依赖注入到servic层,然后service层反转给action层,Spring的顶层容器为BeanFactory,常用的ApplicationContext为它的子接口,实现了工厂模式,Spring还提供了AOP的支持,方便在切面级开发
27.说下Spring的注解?
@Controller
• @Service
• @Component
• @RequestMapping
• @Resource、@Autowired
• @ResponseBody
28.@RequestMapping注解用在类上面有什么作用?
该注解是用来映射一个URL到一个类或一个特定的方处理方法上。
30.怎么样理解IOC和DI?
IOC(控制反转):全称为:Inverse of Control。从字面上理解就是控制反转了,将对在自身对象中的一个内置对象的控制反转,反转后不再由自己本身的对象进行控制这个内置对象的创建,而是由第三方系统去控制这个内置对象的创建。
DI(依赖注入):全称为Dependency Injection,意思自身对象中的内置对象是通过注入的方式进行创建。
IOC就是一种软件设计思想,DI是这种软件设计思想的一个实现。而Spring中的核心机制就是DI。
31.为什么要用Spring?
降低对象耦合度,让代码更加清晰,提供一些常见的模版
32.Spring DI的几种方式?
(1)构造器注入:通过构造方法初始化
• <constructor-arg name="dao"</constructor-arg>
• (2)setter注入:通过setter方法初始化注入
• <property name="dao" ref="dao2"></property>
• 注意:在实际开发中常用setter注入。
33.如果前台有很多参数传入,并且这些参数都是一个对象的,那么怎么快速得到这个对象?
直接在方法中声明这个对象,SpringMvc就自动会把属性赋值到这个对象里面
34.SpringMvc中函数的返回值是什么?
返回值可以有很多类型,有String, ModelAndView,List,Set等,一般用String比较好,如果是AJAX请求,返回的可以是一个集合
35.怎么样把数据放入Session里面?
可以声明一个request,或者session先拿到session,然后就可以放入数据,或者可以在类上面加上@SessionAttributes注解,里面包含的字符串就是要放入session里面的key
36.SpringMvc怎么和AJAX相互调用的?
通过Jackson框架可以把Java里面的对象直接转化成js可以识别的Json对象 具体步骤如下 :
①加入Jackson.jar
②在配置文件中配置json的映射
③在接受Ajax方法里面可以直接返回Object,List等,但方法前面要加上@ResponseBody注解
37.Spring 能帮我们做什么
①实例化bean,并且管理bean与bean之间的依赖关系
② Spring面向切面编程能帮助我们无耦合实现日志记录,性能统计,安全控制等功能
③Spring能非常简单的帮我们管理数据库事务
④Spring提供了与第三方框架无缝集成,如:
第三方数据访问框架(mybatis,hibernate,jpa),自身提供了JDBC访问;
第三方web框架(struts,jsf),自己提供了spring mvc进行web创建;
其他第三方框架(如:java mail,任务调度,缓存框架等)
38.使用 MyBatis 的 mapper 接口调用时有哪些要求
① namespace命名空间指向一个特定的dao接口(全路径)
②每一个sql中的id,唯一标识接口中的一个方法
③parameterType对应接口方法中的输入参数类型
④resultType对应接口方法的返回类型
⑤参数多个怎么做
map,索引,注解@Param
39.String和StringBuilder、StringBuffer的区别?
String和StringBuffer/StringBuilder,它们可以储存和操作字符串。其中String是只读字符串,也就意味着String引用的字符串内容是不能被改变的。而StringBuffer/StringBuilder类表示的字符串对象可以直接进行修改。StringBuilder是Java 5中引入的,它和StringBuffer的方法完全相同,区别在于它是在单线程环境下使用的,因为它的所有方面都没有被synchronized修饰,因此它的效率也比StringBuffer要高。
1.IOC有什么优点?
IOC或依赖注入减少了应用程序的代码量。它使得应用程序的测试很简单,因为在单元测试中不再需要单例或JNDI查找机制。简单的实现以及较少的干扰机制使得松耦合得以实现。IOC容器支持勤性单例及延迟加载服务。
2.SpringMVC的执行流程?
①spring mvc请所有的请求都提交给DispatcherServlet,它会委托应用系统的其他模块负责负责对请求进行真正的处理工作。
②DispatcherServlet查询一个或多个HandlerMapping,找到处理请求的Controller.
③DispatcherServlet请请求提交到目标Controller
④Controller进行业务逻辑处理后,会返回一个ModelAndView
⑤Dispathcher查询一个或多个ViewResolver视图解析器,找到ModelAndView对象指定的视图对象
⑥视图对象负责渲染返回给客户端。
3.对于AOP的理解?
面向切面的编程,或AOP, 是一种编程技术,允许程序模块化横向切割关注点,或横切典型的责任划分,如日志和事务管理。AOP核心就是切面,它将多个类的通用行为封装成可重用的模块,该模块含有一组API提供横切功能。比如,一个日志模块可以被称作日志的AOP切面。根据需求的不同,一个应用程序可以有若干切面。在Spring AOP中,切面通过带有@Aspect注解的类实现。
4.HashMap和Hashtable有什么区别?
①HashMap是非线程安全的,HashTable是线程安全的。
②HashMap的键和值都允许有null值存在,而HashTable则不行。
③因为线程安全的问题,HashMap效率比HashTable的要高。
④Hashtable是同步的,而HashMap不是。因此,HashMap更适合于单线程环境,而Hashtable适合于多线程环境。
一般现在不建议用HashTable, ①是HashTable是遗留类,内部实现很多没优化和冗余。②即使在多线程环境下,现在也有同步的ConcurrentHashMap替代,没有必要因为是多线程而用HashTable。
5.写出spring中的注解及其含义(至少6个)
@Component 标识一个受Spring管理的组件
@Controller 标识控制层
@Respository 标识持久层
@Service 标识服务层
@RequestMapping
@RequestParam
@Autowired 它可以对类成员变量、方法及构造函数进行标注,完成自动装配
1.编写一个懒汉式单例demo
public class Singleton { private static Singleton instance; private Singleton (){} public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
2.编写一个饿汉式单例demo
public class Singleton { private static Singleton instance = new Singleton(); private Singleton (){} public static Singleton getInstance() { return instance; } }
3.实现表单提交并验证用户名非空和重复
<form action="register" method ="post" enctype="multipart/form-data"> 姓名:<input type="text" name="username" id="uid"><span id="errmsg"></span> <br/> 密码:<input type="password" name="password" id="pid"> <br/> 头像:<input type="file" name="file"><br/> <input type="button" value="Register" onclick="submitForm()"> </form> <script type="text/javascript"> // 提交表单 function submitForm(){ // 获取用户名和密码 判空 var username = $("#uid").val() var password = $("#pid").val() validName(username , password) } // ajax验证用户名是否存在 function validName(username , password){ $.post("validName",{name:username},function(data,status){ if(data == "success"){ if(username == "" || password == ""){ $("#errmsg").text("用户名呢或密码不能为空") }else{ $("form").submit() } }else{ $("#errmsg").text("昵称已被注册")
4.解决Post机提交乱码
<filter> <filter-name>characterEncodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter> <filter-mapping> <filter-name>characterEncodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
5.Mybatis数据源配置
<confifuration>
<environments default="development"><!-- 开发者环境 -->
<environment id="development">
<transactionManager type="JDBC"/>
<dataSource type="POOLED"><!-- 连接池 -->
<property name="driver" value="com.mysql.jdbc.Driver"/>
<property name="url" value="jdbc:mysql://localhost:3306/web"/>
<property name="username" value="root"/>
<property name="password" value="123"/>
</dataSource>
</environment>
</enviroments>
</confifuration>