中国软件与技术服务股份有限公司(成都)实习面试记录

1.HashMap和HashTable区别

  1. HashMap作者比HashTable多了著名顶顶的并发大神Doug Lea;

  2. 产生时间不同:HashTable伴随Java发布到现在,HashMap产生于JDK1.2;

  3. 继承父类不同:HashMap是继承自AbstractMap类,而HashTable是继承自Dictionary类。不过它们都实现了同时实现了Map、Cloneable(可复制)、Serializable(可序列化)这三个接口。

  4. 对外提供的接口不同:Hashtable比HashMap多提供了elments() 和contains() 两个方法。

  5. 对Null key 和Null value的支持不同:Hashtable既不支持Null key也不支持Null value。Hashtable的put()方法的注释中有说明。HashMap都支持!

  6. Hashtable是线程安全的,它的每个方法中都加入了Synchronize方法。在多线程并发的环境下,可以直接使用Hashtable,不需要自己为它的方法实现同步。

    HashMap不是线程安全的,在多线程并发的环境下,可能会产生死锁等问题。使用HashMap时就必须要自己增加同步处理。

  7. 遍历方式的内部实现上不同:Hashtable、HashMap都使用了 Iterator。而由于历史原因,Hashtable还使用了Enumeration的方式 。

    HashMap的Iterator是fail-fast迭代器。当有其它线程改变了HashMap的结构(增加,删除,修改元素),将会抛出ConcurrentModificationException。不过,通过Iterator的remove()方法移除元素则不会抛出ConcurrentModificationException异常。但这并不是一个一定发生的行为,要看JVM。

  8. 初始容量大小和每次扩充容量大小的不同:
    Hashtable默认的初始大小为11,之后每次扩充,容量变为原来的2n+1。HashMap默认的初始化大小为16。之后每次扩充,容量变为原来的2倍。

  9. 计算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内置对象有哪些?

  1. HttpServletRequet类的Request对象:代表请求对象,主要用于接受客户端通过HTTP协议连接传输服务器端的数据。

  2. HttpSevletResponse类的Response对象:代表响应对象,主要用于向客户端发送数据。

  3. JspWriter类的out对象:主要用于向客户端输出数据,out的基类是jspWriter

  4. HttpSession类的session对象:主要用来分别保存每个月的信息与请求关联的会话;会话状态的维持是web应用开发者必须面对的问题。

  5. ServletContext类的application对象:主要用于保存用户信息,代码片段的运行环境;它是一个共享的内置对象,即一个容器中的多个用户共享一个application,故其保存的信息被所有用户所共享。

  6. PageContext类的PageContext对象:管理网页属性,为jsp页面包装页面的上下文,管理对属于jsp的特殊可见部分中已经命名对象的访问,它的创建和初始化都是由容器来完成的。

  7. ServletConfig类的Config对象:代码片段配置对象,标识Servlet的配置。

  8. Object类的Page对象:处理jsp页面,是object类的一个实例,指的是jsp实现类的实例

  9. Exception对象:处理jsp文件执行时发生的错误和异常,只有在错误页面里才使用,前提是在页面指令里要有isErrorPage=true。

5.HTML表格单元格合并

!!!!使用rowspan(行合并)和colspan(列合并)

1、如果要合并两行或更多行,则将使用rowspan属性。
2、如果要将两个或多个列合并为一个列,将使用colspan属性。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>

<html>
<head>
<meta charset="utf-8">
<title>表单元格合并</title>
</head>
<body>
<table align="center" border="1px" width="50%">
<tr>
<td>a1</td>
<td>a2</td>
<td>a3</td>
</tr>
<tr>
<td>b1</td>
<td>b2</td>
<!--
1、row合并的时候,删除“下面的”单元格。
2、row合并的时候,对删除哪个没有要求。
-->
<td rowspan="2">b3c3</td>
</tr>
<tr>
<td colspan="2">c1c2</td>
</tr>
</table>
</body>
</html>

6.GroupBY和外连接使用

表a

表b

1.查询每个部门dpt中成绩最好的人。

1
SELECT name,age,site,position,score FROM a LEFT JOIN b on a.id = b.id WHERE score in (SELECT max(score) from a,b GROUP BY dpt);

2.a b 表外连接进行查询。

1
SELECT * FROM a LEFT OUTER JOIN b on a.id = b.id;//左外连接

不同的 SQL JOIN

不同的 SQL JOIN 类型:

内连接:
  • INNER JOIN:如果表中有至少一个匹配,则返回行 等同于JOIN
外连接:
  • LEFT JOIN(左连接):即使右表中没有匹配,也从左表返回所有的行 等同于LEFT OUTER JOIN
  • RIGHT JOIN(右连接):即使左表中没有匹配,也从右表返回所有的行 等同于LEFT OUTER JOIN
  • FULL OUTER JOIN(全连接):只要其中一个表中存在匹配,则返回行 等同于leftjoin+rightjoin结果

总结:

  • 面试官不错,引导我回答问题;
  • 有点小紧张;
  • 继续加油!

中国软件与技术服务股份有限公司(成都)实习面试记录
https://zty-f.github.io/2022/05/17/中国软件(成都分公司)面试记录/
作者
ZTY
发布于
2022年5月17日
更新于
2025年1月2日
许可协议