2019-09-29面试总结

日期:2019年9-月29日

天气:晴

今天下午,应邀参加昨天某公司发来的面试邀请,一路坐地铁加走路历时1小时到达该公司所在大楼,整个大楼历史悠久(很破)。上到楼上,找到该公司,电话联系hr,进入发现整个公司不过20来人,办公面积不超过100平,在一个小会议室等了约5分钟,一个中年大叔进来了(面试官),先让做自我介绍。随便介绍下自己后,面试官先问了我为什么现在才找工作,应该是不知道我还没有离职。跟他说明了下情况后,貌似失去了耐心,就开始进入技术提问环节。

随意地问了下mybatis的#{}与${}的区别,我回答一个可以防止sql注入(#{}可以防止),另一个不可以。紧接着,又问实现的原理是什么?由于平时没有怎么关心这一块,使用也都是直接用#{},所以回答的不是很好,紧接着就问我sql注入的相关知识,我没有正面回答,直接说不是搞这块的,不是很了解,说了下自己平时也就会做些sql优化之类的。然后就问我sql优化有什么心得,总结了一下平时使用的心得后就没了,直接问我还有什么要问的(我面试的java开发工程师,然而跟java相关的边都没沾到)。心里已经知道结果了,我也没打算去这公司,就问了些他们公司的产品是什么,技术用的啥框架,团队成员构成情况,开发是否有需求文档之类的。听完面试官的回答,感觉更加不想去这家公司了(눈_눈)。然后整场面试时间不超过10分钟,就这样愉快地结束了。

虽然这场面试浪费了我来回2小时的时间加路费加简历打印费,但是也还是知道自己的知识掌握不够全面的问题,于是记录下今天面试中面试官提的我没有回答上来的问题:

1.什么是sql注入?

最早接触sql注入是在大学的时候,其实我理解,就是sql 对传入参数的拼接,会引发安全问题,举个例子

select name from student where id = (); 这里括号里的参数我如果传 “3;drop table student;”,就发生注入了。

2.原理,怎么防止?

发生sql注入的原因是,不安全的参数拼接,编译后,sql执行,如上例子,会出现问题。那怎么防止?

其实在Java JDBC中 我们都知道 有 用 ?占位符去代替参数先进行编译,然后代入参数执行,这样就可以避免注入,why?因为sql注入不安全因素是发生在编译期,用占位符后,就避免了这个问题。

3.mybatis中的防注入?#{} 和${}区别?

其实 #{}正是用了?占位符,而${} (使用场景:order by 这样固定的字段后面,但也要防止安全问题)则是原样代入,mybatis就是用#{}来实现防注入,而底层是用JDBC的PreparedStatement实现的,如上个问题所述。

发布了42 篇原创文章 · 获赞 10 · 访问量 7056

猜你喜欢

转载自blog.csdn.net/MCJPAO/article/details/101693902
今日推荐