ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

零碎的面试题目总结2

2021-12-30 00:02:37  阅读:182  来源: 互联网

标签:Java 对象 零碎 try 面试 finally 引用 题目 垃圾


1、谈谈你对Java平台的理解,Java是解释运行,这句话对不对?

        Java是一个面向对象的语言,有两个显著的特征,第一是:“一次编译,到处运行”,容易获得跨平台能力。第二个就是垃圾收集器-GC,通过回收分配内存,使得程序员不用担心内存的分配和回收。

        JRE,即Java运行环境,包括jvm和Java类库,以及一些模块等

        JDK,则可以看作是JRE的一个超集,包含更多的工具,比如编译器,诊断工具等。

        “Java是解释运行”这句话不太准确。首先Java源代码,首先通过javac编译成字节码文件,之后运行时,Java虚拟机内嵌的解释器 将字节码转换成最终的机器码。但是常见的JDK都提供了JIT编译器,即动态编译器。JIT在运行时将热点字节码转换成机器码,此时部分热点代码属于编译运行,而不是解释运行。

2、对比Exception和Error,运行时异常与一般异常有什么区别?

        Exception和Error都继承于Throwable类,Java中只有throwable类型的实例才可以被抛出(throw)或捕获(catch)。

        Exception程序正常运行中可以预料的意外情况,可能并且应该被捕获,进行处理。

        Error是指在正常情况下不大可能出现的情况,绝大部非error会导致程序处于不可恢复的,非正常的状态。既然是非正常情况,则不需要被捕获。比如OutOfMemoryError。

        Exception又分为可检查和不可检查的异常,可检查的异常必须在源代码中显式的捕获处理,编译器检查的一部分。

        不检查异常就是运行时异常,NullPointerException、ArrayIndexOutOfBoundsException之类,通常是编码避免的逻辑错误。

3、谈谈final、finally、finalize有什么不同?

        Final可以用来修饰类、方法、变量。修饰class代表不可以继承、拓展,修饰的变量不能被修改,修饰的方法不能重写(override)。

        Finally是Java保证重点代码一定被执行的一种机制可以使用 try-finally 或者 try-catch-finally 来进行类似关闭 JDBC 连接、保证 unlock 锁等动作。

        finalize 是基础类 java.lang.Object 的一个方法,它的设计目的是保证对象在被垃圾收集前完成特定资源的回收。finalize 机制现在已经不推荐使用,并且在 JDK 9 开始被标记为deprecated。

列几个 fianlly 不会被执行的情况:

1. try-cach 异常退出。

        try{

                system.exit(1)

        }finally{

                print(abc)

}

2. 无限循环

        try{

                while(ture){

                print(abc)

        }

        }finally{

                print(abc)

}

3. 线程被杀死

当执行 try,finally 的线程被杀死时。finally 也无法执行。总结

  1. 不要在 finally 中使用 return 语句。
  2. finally 总是执行,除非程序或者线程被中断。

4、强引用、软引用、弱引用、幻象引用有什么区别?具体使用场景是什么?

        不同的引用类型,其实是对象的不同的可达性(reachable)状态和对垃圾收集的影响。

        强引用:就是最常见的普通对象引用,只要还有一个强引用指向对象,就表明该对象还活着,垃圾收集器就不会回收这类对象。对于一个普通的对象,如果没有其他的引用关系,只要超过了应用的作用域或者显式的将对象的引用赋值为null,就是可以被垃圾收集了的,具体还要看垃圾收集策略。

        软引用:是一种相对强引用弱化一些的引用,它可以让对象豁免一些垃圾收集,只有当JVM认为内存不足时,才会试图回收软引用指向的对象。JVM会确保在抛出OutOfMemoryError之前,清理软引用指向的对象。软引用通常用来实现内存敏感的缓存,如果还有空闲内存,就暂时保留缓存,内存不足时清理掉,这样就保证了使用缓存时不会消耗内存。

        弱引用:不能使对象豁免垃圾收集,仅提供一种访问在弱引用状态下的对象的途径。这样可以构建一种没有特定约束的关系,比如,维护一种非强制性的映射关系,如果试图获取对象时,对象还在,就使用它,否则重新实例化。同样是很多缓存实现的选择。

        虚引用:不能通过它访问对象,他仅仅提供了一种确保对象被finalize以后,做某些事情的机制。

5、理解 Java 的字符串,String、StringBuffer、StringBuilder有什么区别?

        String类是字符序列不可变的类,即一旦一个String对象被创建后,包含在这个对象中的字符序列是不可改变的,直至这个对象销毁。

        StringBuffer类则代表一个字符序列可变的字符串,可以通过append、insert等方法改变其内容。一旦生成了最终的字符串,调用toString方法将其转变为String

        StringBuilder类,与StringBuffer相似,构造方法和方法基本相同。不同是StringBuffer是线程安全的,而StringBuilder是线程不安全的,所以性能略高。通常情况下,创建一个内容可变的字符串,应该优先考虑使用StringBuilder

标签:Java,对象,零碎,try,面试,finally,引用,题目,垃圾
来源: https://blog.csdn.net/MCsilhouette/article/details/122214179

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有