面试题
Mybatis中的${}和#{}的区别:
答:#{}在动态解析语句的时候,会解析成一个参数标记符。例如:SELECT * From Table where id=?;
${}在动态解析语句的时候,会将我们传入的参数当做String字符串填充到我们的语句中。例如:SELECT * From Table where id="EM123";
#方式能够很大程度防止sql注入,$方法无法防止sql注入。
left join、right join、inner join的区别
答:left join是左连接,返回的是左表中所有的记录以及右表中连接的字段相同的记录。
rigth join是右连接,返回的是右表中的所有记录以及左表中连接的字段相同的记录。
inner join是内连接,返回的结果是两个表相同字段的记录。
PreparedStatement和Statement的区别
答:PreparedStatement用于处理动态SQL语句,在执行前会有一个预编译过程,这个过程是有时间开销的,虽然相对数据库的操作,该时间开销可以忽略不计,但是PreparedStatement的预编译结果会被缓存,下次执行相同的预编译语句时,就不需要编译,只要将参数直接传入编译过的语句执行代码中就会得到执行,所以,对于批量处理可以大大提高效率。
Statement每次都会执行SQL语句,相关数据库都要执行SQL语句的编译
Map中value()方法与keySet()、entrySet()区别
答:values():方法是获取集合中的所有的值----没有键,没有对应关系,
KeySet():将Map中所有的键存入到set集合中。因为set具备迭代器。所有可以迭代方式取出所有的键,再根据get方法。获取每一个键对应的值。 keySet():迭代后只能通过get()取key
entrySet():Set<Map.Entry<K,V>> entrySet() //返回此映射中包含的映射关系的 Set 视图。 Map.Entry表示映射关系。entrySet():迭代后可以e.getKey(),e.getValue()取key和value。返回的是Entry接口
keySet()的速度比entrySet()慢了很多,也就是keySet方式遍历Map的性能不如entrySet性能好
为了提高性能,以后多考虑用entrySet()方式来进行遍历。
throw 与throws两个关键字:
1. throw关键字是用于方法内部的,throws是用于方法声声明上的。
2. throw关键字是用于方法内部抛出一个异常对象的,throws关键字是用于在方法声明上声明抛出异常类型的。
3. throw关键字后面只能有一个异常对象,throws后面一次可以声明抛出多种类型的异常。
Object类的方法:
1. getClass() 返回一个Class对象
2. hashCode() 返回该对象的哈希码值
3. equals() 指示某个其他对象是否与此对象“相等”
4. toString() 返回该对象的字符串表示
5. clone() 创建并返回此对象的一个副本
6. wait() 导致当前的线程等待
7. notify() 唤醒wait()等待的线程
8. notifyAll() 唤醒所有等待的线程
9. finalize() 当垃圾回收器确定不存在对该对象的更多引用时,由对象的垃圾回收器调用此方法
UML类图几种关系:
1.泛化:具有继承关系。
2.实现:具有类与接口的关系。
3.关联:是一种拥有的关系,它使一个类知道另一个类的属性和方法。如:老师与学生,丈夫与妻子关联可以是双向的,也可以是单向的。
4.聚合:是整体与部分的关系,且部分可以离开整体而单独存在。如车和轮胎是整体和部分的关系,轮胎离开车仍然可以存在。
5.组合:是整体与部分的关系,但部分不能离开整体而单独存在。如公司和部门是整体和部分的关系,没有公司就不存在部门。
注意:聚合关系是关联关系的一种,是强的关联关系;关联和聚合在语法上无法区分,必须考察具体的逻辑关系。
6.依赖:是一种使用的关系,即一个类的实现需要另一个类的协助,所以要尽量不使用双向的互相依赖.
这几种关系强弱顺序:泛化=实现>组合>聚合>关联>依赖

浙公网安备 33010602011771号