SSM面试题
1、#{}和¥{}的区别?
${}会产生SQL注入,#{}不会产生SQL注入问题
#{}
匹配的是一个占位符,相当于JDBC中的一个?
,会对一些敏感的字符进行过滤,编译过后会对传递的值加上双引号,因此可以防止SQL注入问题。
${}
匹配的是真实传递的值,传递过后,会与sql语句进行字符串拼接。${}
会与其他sql进行字符串拼接,不能预防sql注入问题。
2、spring mvc的主要组件
1、前端控制器(DispatcherServlet)
2、处理器映射器(HandlerMapping)
3、处理器适配器(HandlerAdapter)
4、后端控制器(处理器)(Handler)
5、视图解析器(ViewResolver)
3、spring DI 的三种方式
1. 接口注入
2. Setter方法注入
3. 构造方法注入
4、spring主要使用了什么模式
1.工厂模式
2.模版模式
3.代理模式
4.策略模式
5.单例模式
5、模糊查询like语句该怎么写
第1种:在Java代码中添加sql通配符。
string a = “%smi%”;
list<name> names = mapper.selectlike(a);
<select id=”selectlike”>
select * from foo where bar like #{value}
</select>
第2种:在sql语句中拼接通配符,会引起sql注入
string a = “smi”;
list<name> names = mapper.selectlike(a);
<select id=”selectlike”>
select * from foo where bar like "%"${value}"%"
</seect>
6、如何执行批量注入
利用MyBatis拼接sql语句:
INSERT INTO userTable (id,username,password) VALUES ('1','A','123'),('2','B','456'),....
Service层
List<User> userList=new ArrayList<>();
...
userList.add(user1);
userList.add(user2);
userList.add(user3);
userList.add(user4);
...
UserDao.addUsers(userList)
Dao层
public void addUsers(List<User> list);
Mapper代码如下:
<insert id="方法名">
INSERT INTO userTable (id,username,password)
VALUES
<foreach collection="list" item="u" separator=",">
(#{u.id},#{u.username},#{u.password})
</foreach>
</insert>
7、请说说MyBatis的工作原理
先封装SQL,接着调用JDBC操作数据库,最后把数据库返回的表结果封装成Java类。
8、获取上一次自动生成的主健值
9、说一下spring的事务隔离
1、Default:用底层数据库的设置隔离级别,数据库设置的是什么我就用什么;
2、未提交读(read uncommited) :脏读,不可重复读,虚读都有可能发生。
是最低的事务隔离级别,它允许另外一个事务可以看到这个事务未提交的数据。
3、已提交读 (read commited):避免脏读。但是不可重复读和虚读有可能发生。
保证一个事物提交后才能被另外一个事务读取。另外一个事务不能读取该事物未提交的数据。
4、可重复读 (repeatable read) :避免脏读和不可重复读.但是虚读有可能发生。
保证多次读取同一个数据时,其值都和事务开始时候的内容是一致,禁止读取到别的事务未提交的数据,MySQL 的默认级别。
5、串行化读 (serializable) :避免以上所有读问题.
这是花费最高代价但最可靠的事务隔离级别。事务被处理为顺序执行。
Mysql 默认:可重复读
Oracle 默认:已提交读
6、脏读 :表示一个事务能够读取另一个事务中还未提交的数据。比如,某个事务尝试插入记录 A,此时该事务还未提交,然后另一个事务尝试读取到了记录 A。
7、不可重复读 :是指在一个事务内,多次读同一数据。
8、幻读 :指同一个事务内多次查询返回的结果集不一样。一个事务读到另一个事务已提交的insert数据。
10、spring IOC的实现机制
1、初始化spring容器
2、扫描包下所有calss
3、解析calss中的注解信息
4、封装类反射后实例化类对象
5、以beanld,bean实例化类对象形式保存集合(–本地调用某个bean中的方法)
6、getbean
7、bean的实例化类对象
8、bean的具体方法及执行结果