一, Spring 面试题
1,Spring 在 ssm 中起什么作用?
Spring: 轻量级框架
作用: Bean 工厂, 用来管理 Bean 的生命周期和框架集成.
两大核心: 1,IoC/DI(控制反转 / 依赖注入) : 把 dao 依赖注入到 service 层, service 层反转给 action 层, Spring 顶层容器为 BeanFactory. 2,AOP: 面向切面编程
2,Spring 的事务?
编程式事务管理: 编程方式管理事务, 极大灵活性, 难维护.
声明式事务管理: 可以将业务代码和事务管理分离, 用注解和 xml 配置来管理事务.
3,IoC 在项目中的作用?
作用: IoC 解决对象之间的依赖问题, 把所有 Bean 的依赖关系通过配置文件或注解关联起来, 降低了耦合度.
4,Spring 的配置文件中的内容?
开启事务注解驱动
事务管理器
开启注解功能, 并配置扫描包
配置数据库
配置 SQL 会话工厂, 别名, 映射文件
不用编写 Dao 层的实现类
5,Spring 下的注解?
注册:@Controller @Service @Component
注入:@Autowired @Resource
请求地址:@RequestMapping
返回具体数据类型而非跳转:@ResponseBody
6,Spring DI 的三种方式?
构造器注入: 通过构造方法初始化
<constructor-arg index="0" type="java.lang.String" value="宝马"></constructor-arg>
setter 方法注入: 通过 setter 方法初始化
<property name="id" value="1111"></property>`
接口注入
7,Spring 主要使用了什么模式?
工厂模式: 每个 Bean 的创建通过方法
单例模式: 默认的每个 Bean 的作用域都是单例
代理模式: 关于 Aop 的实现通过代理模式
8,IoC,AOP 的实现原理?
IoC: 通过反射机制生成对象注入
AOP: 动态代理
二, SpringMvc 面试题
1,SpringMvc 的控制器是不是单例模式, 如果是, 有什么问题, 怎么解决?
问题: 单例模式, 在多线程访问时有线程安全问题
解决方法: 不要用同步, 在控制器里面不能写字段
2,SpringMvc 中控制器的注解?
@Controller: 该注解表明该类扮演控制器的角色
3,@RequestMapping 注解用在类上的作用?
作用: 用来映射一个 URL 到一个类或者一个特定的处理方法上
4, 前台多个参数, 这些参数都是一个对象, 快速得到对象?
方法: 直接在方法中声明这个对象, SpringMvc 就自动把属性赋值到这个对象里面
5,SpringMvc 中函数的返回值?
String,ModelAndView,List,Set 等
一般 String,Ajax 请求, 返回一个 List 集合
6,SpringMvc 中的转发和重定向?
转发: return:"hello"
重定向 :return:"redirect:hello.jsp"
7,SpringMvc 和 Ajax 之间的相互调用?
通过 JackSon 框架把 java 里面对象直接转换成 JS 可识别的 JSON 对象, 具体步骤如下:
加入 JackSon.jar
在配置文件中配置 JSON 的映射
在接受 Ajax 方法里面直接返回 Object,list 等, 方法前面需要加上注解 @ResponseBody
8,SpringMvc 的工作流程图?
9,Struts2 和 SpringMvc 的区别?
入口不同:
Struts2:filter 过滤器
SpringMvc: 一个 Servlet 即前端控制器
开发方式不同:
Struts2: 基于类开发, 传递参数通过类的属性, 只能设置为多例
SpringMvc: 基于方法开发 (一个 url 对应一个方法), 请求参数传递到方法形参, 可以为单例也可以为多例 (建议单例)
请求方式不同:
Struts2: 值栈村塾请求和响应的数据, 通过 OGNL 存取数据
SpringMvc: 通过参数解析器将 request 请求内容解析, 给方法形参赋值, 将数据和视图封装成 ModelAndView 对象, 最后又将 ModelAndView 中的模型数据通过 request 域传输到页面, jsp 视图解析器默认使用的是 jstl.
三, Mybatis 面试题
1,Ibatis 和 Mybatis?
Ibatis:2010 年, apache 的 Ibatis 框架停止更新, 并移交给了 google 团队, 同时更名为 MyBatis. 从 2010 年后 Ibatis 在没更新过, 彻底变成了一个孤儿框架. 一个没人维护的框架注定被 mybatis 拍在沙滩上.
Mybatis:Ibatis 的升级版本.
2, 什么是 Mybatis 的接口绑定, 有什么好处?
Mybatis 实现了 DAO 接口与 xml 映射文件的绑定, 自动为我们生成接口的具体实现, 使用起来变得更加省事和方便.
3, 什么情况用注解, 什么情况用 xml 绑定?
注解使用情况: Sql 语句简单时
xml 绑定使用情况: xml 绑定 (@RequestMap 用来绑定 xml 文件)
4,Mybatis 在核心处理类叫什么?
SqlSession
5, 查询表名和返回实体 Bean 对象不一致, 如何处理?
映射键值对即可
<result column="title" property="title" javaType="java.lang.String"/>`
column: 数据库中表的列名
property: 实体 Bean 中的属性名
6,Mybatis 的好处?
把 Sql 语句从 Java 中独立出来.
封装了底层的 JDBC,API 的调用, 并且能够将结果集自动转换成 JavaBean 对象, 简化了 Java 数据库编程的重复工作.
自己编写 Sql 语句, 更加的灵活.
入参无需用对象封装 (或者 map 封装), 使用 @Param 注解
7,Mybatis 配置一对多?
- <collection property="topicComment" column="id" ` ofType="com.tmf.bbs.pojo.Comment"
- select="selectComment" />
property: 属性名
column: 共同列
ofType: 集合中元素的类型
select: 要连接的查询
8,Mybatis 配置一对一?
- <association property="topicType" select="selectType" ` column="topics_type_id"
- javaType="com.tmf.bbs.pojo.Type" />
property: 属性名
select: 要连接的查询
column: 共同列
javaType: 集合中元素的类型
9 ,${} 和 #{} 的区别?
* ${}: 简单字符串替换, 把 ${} 直接替换成变量的值, 不做任何转换, 这种是取值以后再去编译 SQL 语句.
* #{}: 预编译处理, sql 中的 #{} 替换成?, 补全预编译语句, 有效的防止 Sql 语句注入, 这种取值是编译好 SQL 语句再取值.
总结: 一般用 #{} 来进行列的代替
10, 获取上一次自动生成的主键值?
select last _insert_id()
11,Mybatis 如何分页, 分页原理?
RowBounds 对象分页
在 Sql 内直接书写, 带有物理分页
12,Mybatis 工作原理?
原理:
通过 SqlSessionFactoryBuilder 从 mybatis-config.xml 配置文件中构建出 SqlSessionFactory.
SqlSessionFactory 开启一个 SqlSession, 通过 SqlSession 实例获得 Mapper 对象并且运行 Mapper 映射的 Sql 语句.
完成数据库的 CRUD 操作和事务提交, 关闭 SqlSession.
四, 结语
前面如有不正确的地方还希望大家多多指教, 希望和志同道合的朋友一起学习, 一起进步, 先更新到这里, 下次继续补充.
读者分享
对于很多初级 Java 工程师而言, 想要提升技能, 往往是自己摸索成长, 不成体系的学习效果低效漫长且无助.
整理的这些架构技术希望对 Java 开发的朋友们有所参考以及少走弯路, 本文的重点是你有没有收获与成长, 其余的都不重要, 希望读者们能谨记这一点. 同时我经过多年的收藏目前也算收集到了一套完整的学习资料, 希望对想成为架构师的朋友有一定的参考和帮助.
下面是部分资料截图, 诚意满满: 特别适合有 1-5 年开发经验的 Java 程序员们学习.
资料免费领取方式: 加入合作 Java 架构学习交流 Qqun:810589193, 管理员处免费领取资料.
部分资料如下:
资料免费领取方式: 加入合作 Java 架构学习交流 Qqun:810589193, 管理员处免费领取资料.
来源: http://www.jianshu.com/p/5655217e8c08