您的位置:首页 > 职场人生

一些java面试高频题

2019-07-27 10:07 218 查看

1.说出ArrayList,Vector, LinkedList的存储性能和特性?
答案:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。

2.errorpage的作用
errorPage作用:当JSP页面可能出现异常时,可以告知容器将出现的异常抛到errorPage指定的页面进行处理。
errorPage应用
在某一个可能出现异常的页面,通过page指令设置errorPage属性。如下:
1
<%@ page errorPage=“a.jsp”%>
然后在a.jsp文件中,添加isErrorPage属性,并且设置属性值为true,进行异常的处理:
1
<%@ page isErrorPage=“true”%>
最后在a.jsp文件中就可以使用隐含对象exception进行异常的处理啦。

3.Java中sleep()与wait()区别
1、每个对象都有一个锁来控制同步访问,Synchronized关键字可以和对象的锁交互,来实现同步方法或同步块。sleep()方法正在执行的线程主动让出CPU(然后CPU就可以去执行其他任务),在sleep指定时间后CPU再回到该线程继续往下执行(注意:sleep方法只让出了CPU,而并不会释放同步资源锁!!!);wait()方法则是指当前线程让自己暂时退让出同步资源锁,以便其他正在等待该资源的线程得到该资源进而运行,只有调用了notify()方法,之前调用wait()的线程才会解除wait状态,可以去参与竞争同步资源锁,进而得到执行。(注意:notify的作用相当于叫醒睡着的人,而并不会给他分配任务,就是说notify只是让之前调用wait的线程有权利重新参与线程的调度);

2、sleep()方法可以在任何地方使用;wait()方法则只能在同步方法或同步块中使用;

3、sleep()是线程线程类(Thread)的方法,调用会暂停此线程指定的时间,但监控依然保持,不会释放对象锁,到时间自动恢复;wait()是Object的方法,调用会放弃对象锁,进入等待队列,待调用notify()/notifyAll()唤醒指定的线程或者所有线程,才会进入锁池,再次获得对象锁才会进入运行状态;
原文:https://www.geek-share.com/detail/2669098106.html

4.哈希表
设哈希表长为11,哈希函数为Hash (key)=key%11。存在关键码{7,29,22,16,92,44,8,19},采用线性探测法处理冲突,建立的hash表为
采用开放定址法处理冲突中的二次探测再散列(也即是题目中的二元探测法),哈希函数变为

对于43,代入公式为Hash(43) = 43 % 11 = 10, 则地址为10;

对于7,代入公式为Hash(7) = 7 % 11 = 7,则地址为7;

对于29,代入公式为Hash(29) = 29 % 11 = 7, 与7冲突,则采用二次探测进行消除冲突, 继续(7 + 1) % 11 = 8,没有冲突,则地址为8;

对于22,代入公式Hash(22) = 22 % 11 = 0, 则地址为0;

对于16,代入公式Hash(16) = 16 % 11 = 5, 则地址为5;

对于92,代入公式Hash(92) = 92 % 11 = 4,则地址为4;

对于44,代入公式Hash(44) = 44 % 11 = 0, 与22的地址冲突,则继续(0 + 1) % 11 = 1,没有冲突,则地址为1;

对于8, 代入公式Hash(8) = 8 % 11 = 8, 与29有冲突,则继续(8 + 1) % 11 = 9, 没有冲突,则地址为9;

对于19,代入公式Hash(19) = 19 % 11 = 8. 与 29有冲突,则继续(8 + 1) * 11 = 9, 与8有冲突,继续(8 - 1) % 11 = 7, 与7有冲突,则继续(8 + 4) % 11 = 1, 与44有冲突,则继续(8 - 4) % 11 = 4, 与92有冲突,则继续(8 + 9) % 11 = 6, 没有冲突,则地址为6。

答案为:

0 1 2 3 4 5 6 7 8 9 10
22 44 92 16 19 7 29 8 43


原文:https://blog.csdn.net/sinat_34530053/article/details/93475097

5.二叉树
二叉树:A(B(D,E(H(J,K(L,M(,N))))),C(F,G(,I)))
为:

详细二叉树,树,森林的转换见https://blog.csdn.net/qq_42147998/article/details/97393197

6.native关键字
native是调用操作系统的底层函数,而这些函数是由C和C++实现的。
native详解:https://www.geek-share.com/detail/2712051860.html
7.java常用的字节流和处理流
按照流是否直接与特定的地方(如磁盘、内存、设备等)相连,分为节点流和处理流两类。

节点流:可以从或向一个特定的地方(节点)读写数据。如FileReader.
处理流:是对一个已存在的流的连接和封装,通过所封装的流的功能调用实现数据读写。如 BufferedReader.处理流的构造方法总是要带一个其他的流对象做参数。一个流对象经过其他流的多次包装,称为流的链接。

JAVA常用的节点流

1.文 件 FileInputStream FileOutputStrean FileReader FileWriter 文件进行处理的节点流。
2.字符串 StringReader StringWriter 对字符串进行处理的节点流。
3.数 组 ByteArrayInputStream ByteArrayOutputStream CharArrayReader CharArrayWriter 对数组进行处理的节点流(对应的不再是文件,而是内存中的一个数组)。
4.管 道 PipedInputStream PipedOutputStream PipedReader PipedWriter对管道进行处理的节点流。

常用处理流(关闭处理流使用关闭里面的节点流)

1.缓冲流:BufferedInputStrean BufferedOutputStream BufferedReader BufferedWriter 增加缓冲功能,避免频繁读写硬盘。
2.转换流:InputStreamReader OutputStreamReader 实现字节流和字符流之间的转换。
3.数据流 DataInputStream DataOutputStream 等-提供将基础数据类型写入到文件中,或者读取出来.
流的关闭顺序
一般情况下是: 7ff7 先打开的后关闭,后打开的先关闭
另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b。例如,处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b
可以只关闭处理流,不用关闭节点流。处理流关闭的时候,会调用其处理的节点流的关闭方法。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: