目录
Java1.8版本之前的前提,Java特性中,abstract class和interface有什么区别()
下面关于垃圾收集的描述哪个是错误的?
正确答案: D 你的答案: D (正确)
使用垃圾收集的程序不需要明确释放对象
现代垃圾收集能够处理循环引用问题
垃圾收集能提高程序员效率
使用垃圾收集的语言没有内在泄漏问题
来源:https://www.nowcoder.com/questionTerminal/949ccecf4fd4471391577ec78739ff65 内存泄露(Memory Leak)是指一个不再被使用的对象或者变量还在内存中占有存储空间。 在C/C++语言中,内存泄露出现在开发人员忘记释放已分配的内存就会造成内存泄露。 在java语言中引入垃圾回收机制,有GC负责进行回收不再使用的对象,释放内存。但是还是会存在内存泄露的问题。 内存泄露主要有两种情况: 1.在堆中申请的空间没有释放。 2.对象已不再被使用(注意:这里的不在被使用是指对程序来说没有用处,如数据库连接使用后没有关。但是还是存在着引用),但是仍然在内存中保留着。 GC机制的引入只能解决第一种情况,对于第2种情况无法保证不再使用的对象会被释放。java语言中的内存泄露主要指第2种情况。 内存泄露的原因: 1.静态集合类。如HashMap和Vector。这些容器是静态的,生命周期和程序的生命周期一致,那么在容器中对象的生命周期也和其一样,对象在程序结束之前将不能被释放,从而会造成内存泄露。 2.各种连接,如数据库连接,网络连接,IO连接,不再使用时如果连接不释放容易造成内存泄露。 3.***,释放对象时往往没有相应的删除***,可能会导致内存泄露。 内存溢出(OOM)是指程序在申请内存时没有足够的内存供使用,进而导致程序崩溃这是结果描述。 内存泄露(Memory Leak)最终会导致内存溢出。
Java的跨平台特性是指它的源代码可以在多个平台运行。()
正确答案: B 你的答案: A (错误)
正确
错误
来源:https://www.nowcoder.com/questionTerminal/90db8f2b6c2d40babd21e9d25344e51d
1.Java的跨平台特性是因为JVM的存在, 它可以执行.class字节码文件,而不是.java源代码
2.JAVA的跨平台特性表述为“一次编译,到处运行”,JAVA程序运行在JVM上,而JVM对上屏蔽了底层操作系统差异。
3.我们编译好的文件是以.java后缀保存的,编译器会自动帮我们生成一个标准的.class字节码文件,JVM运行该文件。JVM也是一个软件,不同的系统平台JVM不同,但都可以实现标准的.class字节码文件。
下面哪种情况会导致持久区jvm堆内存溢出?
正确答案: C 你的答案: D (错误)
循环上万次的字符串处理
在一段代码内申请上百M甚至上G的内存
使用CGLib技术直接操作字节码运行,生成大量的动态类
不断创建对象
来源:https://www.nowcoder.com/questionTerminal/1999635c228d49be84eb7623108be35e
学习博客 :https://blog.csdn.net/sivyer123/article/details/17139443
简单的来说 java的堆内存分为两块:
permantspace(持久带) 和 heapspace。
持久带中主要存放用于存放静态类型数据,如 Java Class, Method 等, 与垃圾收集器要收集的Java对象关系不大。
而heapspace分为年轻带和年老带
年轻代的垃圾回收叫 Young GC, 年老代的垃圾回收叫 Full GC。
在年轻代中经历了N次(可配置)垃圾回收后仍然存活的对象,就会被复制到年老代中。因此,可以认为年老代中存放的都是一些生命周期较长的对象
年老代溢出原因 循环上万次的字符串处理、创建上千万个对象、在一段代码内申请上百M甚至上G的内存,既A B D选项
持久代溢出原因 动态加载了大量Java类而导致溢出
package Wangyi;
class Base
{
public void method()
{
System.out.println("Base");
}
}
class Son extends Base
{
public void method()
{
System.out.println("Son");
}
public void methodB()
{
System.out.println("SonB");
}
}
public class Test01
{
public static void main(String[] args)
{
Base base = new Son();
base.method();
base.methodB();
}
}
问这个程序的输出结果。
正确答案: D 你的答案: B (错误)
Base SonB
Son SonB
Base Son SonB
编译不通过
来源:https://www.nowcoder.com/questionTerminal/711badc732d84bd98e4ac684e09791b8。
学习博客:https://www.cnblogs.com/111testing/p/6880831.html
成员变量:编译看左边,运行看左边
静态变量:编译看左边,运行看左边
成员方法:编译看左边,运行看右边
静态方法:编译看左边,运行看左边编译时要看左边有没有该方法
下面的switch语句中,x可以是哪些类型的数据:()
switch(x)
{
default:
System.out.println("Hello");
}
正确答案: B D 你的答案: A B D (错误)
long
char
float
byte
double
Object
以java8为准,switch支持10种类型
基本类型:byte char short int
包装类 :Byte,Short,Character,Integer String enum
2、实际只支持int类型 Java实际只能支持int类型的switch语句,那其他的类型时如何支持的
a、基本类型byte char short 原因:这些基本数字类型可自动向上转为int, 实际还是用的int。
b、基本类型包装类Byte,Short,Character,Integer 原因:java的自动拆箱机制 可看这些对象自动转为基本类型
c、String 类型 原因:实际switch比较的string.hashCode值,它是一个int类型 如何实现的,网上例子很多。此处不表。
d、enum类型 原因 :实际比较的是enum的ordinal值(表示枚举值的顺序),它也是一个int类型 所以也可以说 switch语句只支持int类型
Java1.8版本之前的前提,Java特性中,abstract class和interface有什么区别()
正确答案: A B D 你的答案: A C D (错误)
抽象类可以有构造方法,接口中不能有构造方法
抽象类中可以有普通成员变量,接口中没有普通成员变量
抽象类中不可以包含静态方法,接口中可以包含静态方法
一个类可以实现多个接口,但只能继承一个抽象类。
来源:https://www.nowcoder.com/questionTerminal/f0b4438ea8554423a53740ffdc08faf2