中国软件与技术服务股份有限公司(成都)实习面试记录
1.HashMap和HashTable区别
HashMap作者比HashTable多了著名顶顶的并发大神Doug Lea;
产生时间不同:HashTable伴随Java发布到现在,HashMap产生于JDK1.2;
继承父类不同:HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口。
对外提供的接口不同:Hashtable比HashMap多提供了elments() 和contains() 两个方法。
对Null key 和Null value的支持不同:Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注释中有说明。HashMap都支持!
Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步。
HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。使用HashMap时就必须要自己增加同步处理。
遍历方式的内部实现上不同:Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。
HashMap的Iterator是fail-fast迭代器。当有其它线程改变了HashMap的结构(增加,删除,修改元素),将会抛出ConcurrentModificationException。不过,通过Iterator的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。
初始容量大小和每次扩充容量大小的不同:
Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。计算hash值的方法不同:
Hashtable直接使用对象的hashCode。hashCode是JDK根据对象的地址或者字符串或者数字算出来的int类型的数值。然后再使用除留余数发来获得最终的位置。Hashtable在计算元素的位置时需要进行一次除法运算,而除法运算是比较耗时的。
HashMap为了提高计算效率,将哈希表的大小固定为了2的幂,这样在取模预算时,不需要做除法,只需要做位运算。位运算比除法的效率要高很多。HashMap的效率虽然提高了,但是hash冲突却也增加了。因为它得出的hash值的低位相同的概率比较高,而计算位运算为了解决这个问题,HashMap重新根据hashcode计算hash值后,又对hash值做了一些运算来打散数据。使得取得的位置更加分散,从而减少了hash冲突。当然了,为了高效,HashMap只做了一些简单的位处理。从而不至于把使用2 的幂次方带来的效率提升给抵消掉。
2.String类常用API
3.Java常用的类,包,接口
常用的类包括:
Object、String、Math、Thread、Date、File。
常用的接口:
List、Map、Runnable、collection、comparable。
常用的包:
java.lang.包:这个是系统的基础类;
java.util.包:这个是系统辅助类,特别是集合类;
java.io.包:这里面是所有输入输出有关的类,比如文件操作等;
java.math.包:数学常用类;java.net.包:这里面是与网络有关的类;
java.sql.包:这个是数据库操作的类;
java.nio.包:为了完善 io 包中的功能,提高 io 包中性能而写的一个新包;
Java集合框架:
接口:Collection、List、Set、Map、Iterator
类:Collections、ArrayList、HashMap
4.JSP内置对象有哪些?
HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据。
HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。
JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter
HttpSession类的session对象:主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题。
ServletContext类的application对象:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application,故其保存的信息被所有用户所共享。
PageContext类的PageContext对象:管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的。
ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。
Object类的Page对象:处理jsp页面,是object类的一个实例,指的是jsp实现类的实例
Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。
5.HTML表格单元格合并
!!!!使用rowspan(行合并)和colspan(列合并)
1、如果要合并两行或更多行,则将使用rowspan属性。
2、如果要将两个或多个列合并为一个列,将使用colspan属性。
1 |
|
6.GroupBY和外连接使用
表a
表b
1.查询每个部门dpt中成绩最好的人。
1 |
|
2.a b 表外连接进行查询。
1 |
|
不同的 SQL JOIN
不同的 SQL JOIN 类型:
内连接:
- INNER JOIN:如果表中有至少一个匹配,则返回行 等同于JOIN
外连接:
- LEFT JOIN(左连接):即使右表中没有匹配,也从左表返回所有的行 等同于LEFT OUTER JOIN
- RIGHT JOIN(右连接):即使左表中没有匹配,也从右表返回所有的行 等同于LEFT OUTER JOIN
- FULL OUTER JOIN(全连接):只要其中一个表中存在匹配,则返回行 等同于leftjoin+rightjoin结果
总结:
- 面试官不错,引导我回答问题;
- 有点小紧张;
- 继续加油!