本文写给正在努力的自己,努力的补基础知识,五道题一篇
ps:我把答案都放在解析下面了
- 关于容器下面说法正确的是()
A.列表(list)和集合(set)存放的元素都是可以重复的
B.列表(list)和集合(set)存放的元素都是不可以重复的
C.映射(Map)<key,value>中的key是可以重复的
D.映射(Map)<key,value>中的value是可以重复的
解析:list中存放的元素可以重复且有序,而Set中的元素不可以重复且无序,Map中的key是不可以重复的,而value能重复
答案:D
- 下面哪个不属于HttpServletResponse接口完成的功能?
A.设置HTTP头标
B.设置cookie
C.读取路径信息
D.输出返回值
解析:HttpServletResponse是服务器打包信息传给客户端的,HttpServletRequest是客户端发送给服务器的请求,HttpServletResponse接口无法读取路径信息,它可以设置HTTP头标,输出返回值和设置cookie
答案:C
- java程序内存泄露的最直接表现是( )
A.频繁FullGc
B.jvm崩溃
C.程序抛内存控制的Exception
D.java进程异常消失
解析:首先我们了解一下内存泄漏的概念,内存泄漏是什么?
内存泄漏就是对象引用消失,但是对象内存缺没有被回收,就像餐厅,如果一桌客人吃完走了,但是没人收拾桌子,下一桌客人就无法进行堂食,慢慢的就不能招待初始的人数,但是城管不让在门口摆摊,新来的客人就没地方吃饭了
明白了内存泄漏是啥之后我们来看选项
A.FullGC是老年代内存空间不足的时候,才会触发的,老年代一般是生命周期较长的对象或者大对象,频繁的FullGC会影响程序的性能(因为内存回收需要消耗CPU等资源)但是并不会直接导致内存泄漏
B.JVM崩溃的可能是内存溢出引起的,也可能是其他导致JVM崩溃的操作,例如设置了错误的JVM参数等等
C.内存异常,最常见的就是StackOverFlow了,内存溢出,其实内存泄漏的最终最终结果
D.明显不对
答案:C
- 以下代码输出了什么?
public class Demo1 {
private static void test(int[] arr) {
for (int i = 0; i < arr.length; i++) {
try {
if (arr[i] % 2 == 0) {
throw new NullPointerException();
} else {
System.out.print(i);
}
} finally {
System.out.print("e");
}
}
}
public static void main(String[] args) {
try {
test(new int[]{0, 1, 2, 3, 4, 5});
} catch (Exception e) {
System.out.print("E");
}
}
}
解析:注意看if的下一行,是程序员自行抛出空指针异常,虽然上面代码没错,但是一旦走到了自行抛出空指针的时候就会自动调到finally中,由于arr[0] =0,所以在进入test()方法里面会在第一个if 上抛出一个 NullPointerException,接着会执行 finally 的语句,(finally语句先于 return 和 throw语句执行),输出一个’e,然后回到 main方法中,由于捕捉到异常,所以进入到catch语句中,然后打印一个’E’,抛异常后程序就自动退出了,不再继续执行所以最终结果为"eE"。
答案:eE
- 久违的文字题
- Java多线程有三种实现方法:第一种,继承Thread类,并重写run()方法,第二种实现Runnable接口,实现run()方法,第三种实现Callable接口,线程结束后可以有返回值,但是该方法依赖于线程池
- 如果希望兼听tcp端口9000,服务器端应该怎么创建socket:new ServletSocket(9000);
- Java中重写方法应该遵循的规则有:1.可以有不同的访问修饰符。2.参数列表必须完全与被重写的方法相同