实习电话面试遇到到一些问题
2018-03-14 19:47
543 查看
1.Spring的注入方式
当使用byType时,如果容器中存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。
2.判断两个类是否存在继承关系
1、instanceOf关键字,用来判断对象是否是类的实例
2、isAssignableFrom,用来判断类型间是否存在派生关系
3、isInstance方法,用来判断对象是否属于某个类型的实例
3.JDK1.8为什么把运行时常量池移入堆中?永久代被移除,元空间取代
1、字符串存在永久代中,容易出现性能问题和内存溢出。
2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4、Oracle 可能会将HotSpot 与 JRockit 合二为一
4.mybatis中的#和$的区别
动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现
#{} 在动态解析的时候, 会解析成一个参数标记符。就是解析之后的语句是:
那么我们使用 ${}的时候
${}在动态解析的时候,会将我们传入的参数当做String字符串填充到我们的语句中,就会变成下面的语句
预编译之前的 SQL 语句已经不包含变量了,完全已经是常量数据了。相当于我们普通没有变量的sql了。
综上所得 ,$ 变量的替换阶段是在动态 SQL 解析阶段,而 #变量的替换是在 DBMS 中。
#方式能够很大程度防止sql注入。
S方式无法防止Sql注入。
S方式一般用于传入数据库对象,例如传入表名.
一般能用#的就别用 S{}.
所以我们在使用mybatis的时候,尽量的使用#方式
5.mybatis 中修改sql语句需要重启吗 ?
需要重启,所有的配置文件修改了都要重启。修改了java文件需要重新编译。修改了页面不需要重启 。
当使用byType时,如果容器中存在多个该类型的bean,那么将会抛出异常,并指出不能使用byType方式进行自动装配。若没有找到相匹配的bean,则什么事都不发生,属性也不会被设置。
2.判断两个类是否存在继承关系
1、instanceOf关键字,用来判断对象是否是类的实例
2、isAssignableFrom,用来判断类型间是否存在派生关系
3、isInstance方法,用来判断对象是否属于某个类型的实例
Class clazzB = B.class; Class clazzD = D.class; boolean isFather = clazzD.isAssignableFrom(clazzB)); if(isFather){ System.out.println("D是B的父类"); }else{ System.out.println("D不是B的父类"); }
System.out.println(new B() instanceof A); System.out.println(new A() instanceof B);
System.out.println(A.class.isInstance(new B()));
3.JDK1.8为什么把运行时常量池移入堆中?永久代被移除,元空间取代
1、字符串存在永久代中,容易出现性能问题和内存溢出。
2、类及方法的信息等比较难确定其大小,因此对于永久代的大小指定比较困难,太小容易出现永久代溢出,太大则容易导致老年代溢出。
3、永久代会为 GC 带来不必要的复杂度,并且回收效率偏低。
4、Oracle 可能会将HotSpot 与 JRockit 合二为一
4.mybatis中的#和$的区别
动态 SQL 是 mybatis 的强大特性之一,也是它优于其他 ORM 框架的一个重要原因。mybatis 在对 sql 语句进行预编译之前,会对 sql 进行动态解析,解析为一个 BoundSql 对象,也是在此处对动态 SQL 进行处理的。在动态 SQL 解析阶段, #{ } 和 ${ } 会有不同的表现
select * from user where name = #{name};
#{} 在动态解析的时候, 会解析成一个参数标记符。就是解析之后的语句是:
select * from user where name = ?;
那么我们使用 ${}的时候
select * from user where name = ${name};
${}在动态解析的时候,会将我们传入的参数当做String字符串填充到我们的语句中,就会变成下面的语句
select * from user where name = "dato";
预编译之前的 SQL 语句已经不包含变量了,完全已经是常量数据了。相当于我们普通没有变量的sql了。
综上所得 ,$ 变量的替换阶段是在动态 SQL 解析阶段,而 #变量的替换是在 DBMS 中。
#方式能够很大程度防止sql注入。
S方式无法防止Sql注入。
S方式一般用于传入数据库对象,例如传入表名.
一般能用#的就别用 S{}.
所以我们在使用mybatis的时候,尽量的使用#方式
5.mybatis 中修改sql语句需要重启吗 ?
需要重启,所有的配置文件修改了都要重启。修改了java文件需要重新编译。修改了页面不需要重启 。
相关文章推荐
- 实习电话面试遇到到一些问题(四)
- 实习电话面试遇到到一些问题(二)
- 实习面试会遇到的一些问题
- 2018春,在实习面试过程中遇到的一些问题
- 【面试问题】——秋招面试中遇到的一些问题&思维导图
- 整理一些自己的面试中遇到的问题,不定期更新。
- c++一些 面试可能遇到的问题
- (面试)遇到的一些智力问题的题目
- 实习中遇到的一些困惑问题
- 总结面试找工作时遇到的一些问题
- 【最近面试遇到的一些问题】运行时异常与一般异常有何异同
- 新浪电话面试印象深刻的一些问题
- 总结一下自己Java实习后遇到的一些问题。
- 【最近面试遇到的一些问题】多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么
- 【一些事晚报】新人面试中遇到什么问题?
- 【最近面试遇到的一些问题】forward 和redirect的区别
- 一些面试可能会遇到的问题 ---- 实时更新中
- 【最近面试遇到的一些问题】线程安全-单例模式[转]
- 总结一下最近面试遇到的一些问题吧
- 软件测试面试可能会遇到的一些问题