记录三个面试题

1.Mybatis动态SQL中的SQL注入问题

说实话,当时问到我这个问题的时候,我是懵逼的;因为我从来没有遇到过这样的问题,结果就game over了;

一般情况下,我们在给sql传参的时候都是使用#{}来获取传入参数的,然而它还有另一种方式,就是通过${}来获取传入参数;

#{}拼接后的sql:
记录三个面试题

${}拼接后的sql:
记录三个面试题

官方解释:
记录三个面试题
说实话,因为自己写代码写项目啥的,都是用#{},没出过问题,也不知道还有其他,结果因为这个挂了,虽说自己学艺不精,但感觉还是怪怪的;感觉就像我能干这个事了不行,你还得知道怎么把它搅黄了才行,哎难受;

2.Spring中使用注解@Transactional却无法回滚的问题

原因1:在方法内部自己捕获了异常

如果异常刚好被捕获的话,你就无法触发Transactional注解,所以自然也就无法回滚事务;(谁闲的没事儿去造异常还自己捕获?)

原因2:同时使用了Spring和SpringMVC,但是SpringMVC中注解扫描的位置包含了需要事务支持的包

这个问题是由于加载Spring和SpringMVC项目的时候,会先加载Spring的配置文件,也就是先创建Spring的IOC容器,而SpringMVC的IOC容器是SpringIOC容器的子容器,所以SpringMVC的注解扫描如果扫描了需要事务支持的包,那么就会由SpringMVCD的IOC容器来创建这些类,而SpringMVC不具有事务管理的功能,自然也就会导致事务失效

3.Git如何解决版本冲突问题

这个问题就很好解决了,解决方案:先把冲突的版本下载到本地,然后手动对比两个版本,根据需求修改,然后合并提交;

但当时为什么没有答上来呢?其实是因为想太多了,我当时想的是,如果冲突的地方很多那手动是处理不过来的,而一旦发生,应该有对应的处理方式的,那这种处理方式,或者操作命令我没有见过也没有用过,一下子就不知道怎么回答了,结果还得人手动处理;