java面试(十)--(1)ServletConfig接口默认是哪里实现的(2)Map,Collection(3)OutOfMemoryError(4)equals和hashCode(5)类型转换问题

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/JAVA_I_want/article/details/102605130

1. ServletConfig接口默认是哪里实现的?

在这里插入图片描述

2.Map,Collection概括总结

在这里插入图片描述

3.OutOfMemoryError

1.java.lang.OutOfMemoryError: PermGen space 属于运行时常量池导致的溢出,设置-XX:MaxPermSize可以解决这个问题.

  1. java.lang.OutOfMemoryError: Requested array size exceeds VM limit 属于堆空间不足导致的错误, 一般情况下解决这个问题最快的方法就是通过-Xmx参数来增加堆的大小.

  2. java.lang.OutOfMemoryError: Java heap space 属于java堆内存问题,一般的手段是通过内存映像分析工具,对Dump出来的堆转储存快照进行分析,重点是确认内存中的对象是否是有必要的,也就是要判断是出现了内存泄漏,还是出现了内存溢出,如果是内存泄漏,通过工具检查泄露对象打GC Roots的引用链信息,可以准确的确定出泄露代码的位置,不存在泄露,就应该检查虚拟机的堆参数,如果可以继续调大,可以设置-Xmx解决问题.

  3. java.lang.OutOfMemoryError: nativeGetNewTLA 指当虚拟机不能分配新的线程本地空间(Thread Local Area)的时候错误信息,此错误是线程申请一个新的TLA时产生的,这个异常一般只会发生在jRockit虚拟机.

以上是小编整理的常见jvm错误,具体了解请读者参考:《深入理解java虚拟机》

4. equals和hashCode

1.两个obj,如果equals()相等,hashCode()一定相等(符合代码规范的情况下)
2.两个obj,如果hashCode()相等,equals()不一定相等
3. 两个不同的obj, hashCode()可能相等
总结:两个对象的equals比较为true,那么他们的HashCode一定相同,反之,两个对象的HashCode相同不一满足equals比较为true
补充:
“=”=":作用是判断两个对象的地址是否相等,即,判断两个对象是不是同一个对象,如果是基本数据类型,则比较的是值是否相等。
“equal”:作用是判断两个对象是否相等,但一般有两种使用情况 :
1.类没有覆盖equals()方法,则相当于通过“==”比较
2.类覆盖equals()方法,一般,我们都通过equals()方法来比较两个对象的内容是否相等,相等则返回true,如String
地址比较是通过计算对象的哈希值来比较的,hashcode属于Object的本地方法,对象相等(地址相等),hashcode相等,对象不相等,hashcode()可能相等,哈希冲突

5.类型转换问题:

byte b1=1,b2=2,b3,b6,b8;
final byte b4=4,b5=6,b7;
b3=(b1+b2);  /*语句1*/
b6=b4+b5;    /*语句2*/
b8=(b1+b4);  /*语句3*/
b7=(b2+b5);  /*语句4*/
System.out.println(b3+b6);

知识点:
Java表达式转型规则由低到高转换:
1、所有的byte,short,char型的值将被提升为int型;
2、如果有一个操作数是long型,计算结果是long型;
3、如果有一个操作数是float型,计算结果是float型;
4、如果有一个操作数是double型,计算结果是double型;
5、被fianl修饰的变量不会自动改变类型,当2个final修饰相操作时,结果会根据左边变量的类型而转化。

解析:
语句1错误:b3=(b1+b2);自动转为int,所以正确写法为b3=(byte)(b1+b2);或者将b3定义为int;
语句2正确:b6=b4+b5;b4、b5为final类型,不会自动提升,所以和的类型视左边变量类型而定,即b6可以是任意数值类型;
语句3错误:b8=(b1+b4);虽然b4不会自动提升,但b1仍会自动提升,所以结果需要强转,b8=(byte)(b1+b4);
语句4错误:b7=(b2+b5); 同上。同时注意b7是final修饰,即只可赋值一次,便不可再改变。

猜你喜欢

转载自blog.csdn.net/JAVA_I_want/article/details/102605130