好久没有写过博客,重拾博客记录自己成长的点滴...
一.笔试题
1.spring的事务有那些类型,分别说明一下作用?
PROPAGATION_REQUIRED--支持当前事务,如果当前没有事务,就新建一个事务。这是最常见的选择。
PROPAGATION_SUPPORTS--支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY--支持当前事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW--新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED--以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER--以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_REQUIRED类似的操作。
PROPAGATION_NESTED--如果当前存在事务,则在嵌套事务内执行
2.怎么防止SQL注入,防止XSS攻击?
1>.(简单又有效的方法)PreparedStatement
采用预编译语句集,它内置了处理SQL注入的能力,只要使用它的setXXX方法传值即可。
使用好处:
(1).代码的可读性和可维护性.
(2).PreparedStatement尽最大可能提高性能.
(3).最重要的一点是极大地提高了安全性.
原理:
sql注入只对sql语句的准备(编译)过程有破坏作用
而PreparedStatement已经准备好了,执行阶段只是把输入串作为数据处理,
而不再对sql语句进行解析,准备,因此也就避免了sql注入问题.
2>.使用正则表达式过滤传入的参数
3>.字符串过滤
总的说来,防范一般的SQL注入只要在代码规范上下点功夫就可以了。
凡涉及到执行的SQL中有变量时,用JDBC(或者其他数据持久层)提供的如:PreparedStatement就可以 ,切记不要用拼接字符串的方法就可以了。
XSS攻击防御
原则:不相信客户输入的数据
注意: 攻击代码不一定在<script></script>中
1>.使用XSS Filter。
2>.DOM型的XSS攻击防御
把变量输出到页面时要做好相关的编码转义工作,如要输出到 <script>中,可以进行JS编码;要输出到HTML内容或属性,则进行HTML编码处理。
根据不同的语境采用不同的编码处理方式。
3>.HttpOnly Cookie
将重要的cookie标记为http only, 这样的话当浏览器向Web服务器发起请求的时就会带上cookie字段,但
是在脚本中却不能访问这个cookie,这样就避免了XSS攻击利用JavaScript的document.cookie获取cookie:
4.oracle的分页语句?
SELECT * FROM
(
SELECT A.*, ROWNUM RN
FROM (SELECT * FROM TABLE_NAME) A
WHERE ROWNUM <= 40
)
WHERE RN >= 21
二.面试
1.JDK,以及框架的源码有没有读过?
2.spring cloude,spring boot有没有使用过?
3.mysql的事务隔离级别是什么?
4.javascript,以及前端的框架Angular js有没有使用过?
5.响应超时,我们程序的处理方式?
三.面试总结
1.面试中于技术面试官而言,问到了一些框架源码,以及mysql底层的东西,自己都是回答了一点点可能只是皮毛。针对该问题的解决办法,
下来,还是要花大量的时间去研究JDK以及开源框架的源码,没遇到一个难点多去记录。此次,自己面试的不足之处觉得自己想要说的都
没有说出来,原因也是因为面试官并未问到自己熟悉的东西,所以,面试的技巧还有一个就是要自己引导面试官将主动权掌握到自己的手中。
2.hr面,hr问了一些自己离开当前公司的原因,自己回答的理由是主要原因公司将要搬迁,此回答hr不以为然。所以,自己下次说理由的时候
应该尽量直接了当一些,进入一个新平台,更好提升自己,与公司互利共赢。
3.每次面试官面试结束后最后一个问题都会问,你还有什么要问我的吗?对于我自己来说该技术的,一般都会网技术方面问。
4.总之,此次面试的感觉觉得自己更像一个井底之蛙了,流行的技术满天飞,而我却望而止步。并不是,没有更多的时间去学技术,只是
自己还是太懒惰...给自己加油...