面试题解答

Java相关

1.基础

1. final, finally, finalize( ) 的区别
final:
final 用于修饰类表示该类不能被继承。
final 修饰方法表示方法不能被子类重写。
final 修饰类属性,初始化后值不能改变,初始化的值要么直接赋值要么在构造函数中赋值。
final 修饰方法参数,表示该参数是只读的。
final 修饰基本类型时,值一旦初始化不能改变;修饰引用类型时引用地址不能变,但引用的对象内容可变。
finally:
用在try/catch语句中,表示这段语句必须被执行,不管是否发生异常。一般用于资源释放或初值清理。
finalize():
java.lang.Object 方法,该方法在回收的时候被调用,GC通过可达性分析后会进行标记,标记后调用该方法, 在gc时只调用一次, 调用后并不立即回收对象, 这个方法一般人会吴用来释放资源,但其实是为c++人员容易 接受Java而坐的过渡。 不能用作释放资源的原因是finalize方法的执行时机不可控,完全取决于Gc机制。 如果恰好这个对象是内存泄漏的,那更谈不上释放资源了。

2. Exception、Error ; 运行时异常与一般异常有何异同, 请写出5种常见到的runtime exception
区别:
Exception和Error都是Throwable的子类,Error及其子类是uncheck异常不需要再方法或构造器的throw语义中声名,Error认为是严重错误不能恢复 。Exception 认为应用可以捕获和处理的错误,Exception的子类中除了RuntimeException 和其子类 都是checked 异常 。
Runtime异常:
NPE、ClassCastException、IllegalArgumentException、IndexOutOfBoundsException、ArrayStoreException
3. 包装类,装箱和拆箱;int 和 Integer 有什么区别,Integer的值缓存范围
对于两个非new生成的Integer对象(Integer i = 100; Integer j = 100;),进行==比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false。
java -API中对Integer类型的valueOf的定义如下,对于-128到127之间的数,会进行缓存,Integer i = 127时,会将127进行缓存,下次再写Integer j = 127时,就会直接从缓存中取,就不会new了。

 public static Integer valueOf(int i) {
        if (i >= IntegerCache.low && i <= IntegerCache.high)
            return IntegerCache.cache[i + (-IntegerCache.low)];
        return new Integer(i);
    }

4. String、StringBuilder和StringBuffer异同
StringBuffer是线程安全的可变字符序列,方法加synchronized来保证线程安全;StringBuilder是非线程安全的,其API是和StringBuffer兼容的,两者都继承AbstractStringBuilder、CharSequence,其被设计用在单线程场景以提高效率(因在没有竞争的情况下append 和insert 都要去获取锁)。
两者的字符序列可变是因为AbstractStringBuilder内部使用char[ ] 存储字符序列,通过操作字符数组来达到可变。但String 类是final的 且内部存储字符的char[] 也是final的。

2.集合框架

3.多线程、并发、锁

4.jvm

框架

算法

网络

操作系统

开发流程

软实力

猜你喜欢

转载自blog.csdn.net/liu99999999999999999/article/details/84819461