每天几道面试题SSM面试题

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的具体方法及执行结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值