java常见的120道面试题第二季

问答题31 /120

如何权衡是使用无序的数组还是有序的数组?

参考答案

有序数组最大的好处在于查找的时间复杂度是O(log n),而无序数组是O(n)。有序数组的缺点是插入操作的时间复杂度是O(n),因为值大的元素需要往后移动来给新元素腾位置。相反,无序数组的插入时间复杂度是常量O(1)

问答题32 /120

Java集合类框架的最佳实践有哪些?

参考答案

根据应用的需要正确选择要使用的集合的类型对性能非常重要,比如:假如元素的大小是固定的,而且能事先知道,我们就应该用Array而不是ArrayList
有些集合类允许指定初始容量。因此,如果我们能估计出存储的元素的数目,我们可以设置初始容量来避免重新计算hash值或者是扩容。
为了类型安全,可读性和健壮性的原因总是要使用泛型。同时,使用泛型还可以避免运行时的ClassCastException
使用JDK提供的不变类(immutable class)作为Map的键可以避免为我们自己的类实现hashCode()equals()方法。
编程的时候接口优于实现。
底层的集合实际上是空的情况下,返回长度是0的集合或者是数组,不要返回null

问答题33 /120

Enumeration接口和Iterator接口的区别有哪些?

参考答案

Enumeration速度是Iterator2倍,同时占用更少的内存。但是,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象。同时,Iterator允许调用者删除底层集合里面的元素,这对Enumeration来说是不可能的。

问答题34 /120

HashSetTreeSet有什么区别?

参考答案

HashSet是由一个hash表来实现的,因此,它的元素是无序的。add()remove()contains()方法的时间复杂度是O(1)
另一方面,TreeSet是由一个树形的结构来实现的,它里面的元素是有序的。因此,add()remove()contains()方法的时间复杂度是O(logn)

问答题35 /120

Java中垃圾回收有什么目的?什么时候进行垃圾回收?

参考答案

垃圾回收的目的是识别并且丢弃应用不再使用的对象来释放和重用资源。

问答题36 /120

System.gc()Runtime.gc()会做什么事情?

参考答案

这两个方法用来提示JVM要进行垃圾回收。但是,立即开始还是延迟进行垃圾回收是取决于JVM的。

问答题37 /120

finalize()方法什么时候被调用?析构函数(finalization)的目的是什么?

参考答案

垃圾回收器(garbage colector)决定回收某对象时,就会运行该对象的finalize()方法 但是在Java中很不幸,如果内存总是充足的,那么垃圾回收可能永远不会进行,也就是说filalize()可能永远不被执行,显然指望它做收尾工作是靠不住的。 那么finalize()究竟是做什么的呢?它最主要的用途是回收特殊渠道申请的内存。Java程序有垃圾回收器,所以一般情况下内存问题不用程序员操心。但有一种JNI(Java Native Interface)调用non-Java程序(CC++),finalize()的工作就是回收这部分的内存。

问答题38 /120

如果对象的引用被置为null,垃圾收集器是否会立即释放对象占用的内存?

参考答案

不会,在下一个垃圾回收周期中,这个对象将是可被回收的。

问答题39 /120

Java堆的结构是什么样子的?什么是堆中的永久代(Perm Gen space)?

参考答案

JVM的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在JVM启动的时候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。
堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些对象回收掉之前,他们会一直占据堆内存空间。

问答题40 /120

串行(serial)收集器和吞吐量(throughput)收集器的区别是什么?

参考答案

吞吐量收集器使用并行版本的新生代垃圾收集器,它用于中等规模和大规模数据的应用程序。而串行收集器对大多数的小应用(在现代处理器上需要大概100M左右的内存)就足够了。

问答题41 /120

Java中,对象什么时候可以被垃圾回收?

参考答案

当对象对当前使用这个对象的应用程序变得不可触及的时候,这个对象就可以被回收了。

问答题42 /120

JVM的永久代中会发生垃圾回收么?

参考答案

垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。如果你仔细查看垃圾收集器的输出信息,就会发现永久代也是被回收的。这就是为什么正确的永久代大小对避免Full GC是非常重要的原因。请参考下Java8:从永久代到元数据区
(注:Java8中已经移除了永久代,新加了一个叫做元数据区的native内存区)

问答题43 /120

Java中的两种异常类型是什么?他们有什么区别?

参考答案

Java中有两种异常:受检查的(checked)异常和不受检查的(unchecked)异常。不受检查的异常不需要在方法或者是构造函数上声明,就算方法或者是构造函数的执行可能会抛出这样的异常,并且不受检查的异常可以传播到方法或者是构造函数的外面。相反,受检查的异常必须要用throws语句在方法或者是构造函数上声明。这里有Java异常处理的一些小建议。

问答题44 /120

JavaExceptionError有什么区别?

参考答案

ExceptionError都是Throwable的子类。Exception用于用户程序可以捕获的异常情况。Error定义了不期望被用户程序捕获的异常。

问答题45 /120

throwthrows有什么区别?

参考答案

throw关键字用来在程序中明确的抛出异常,相反,throws语句用来表明方法不能处理的异常。每一个方法都必须要指定哪些异常不能处理,所以方法的调用者才能够确保处理可能发生的异常,多个异常是用逗号分隔的。

问答题46 /120

异常处理完成以后,Exception对象会发生什么变化?

参考答案

Exception对象会在下一个垃圾回收过程中被回收掉。

问答题47 /120

finally代码块和finalize()方法有什么区别?

参考答案

无论是否抛出异常,finally代码块都会执行,它主要是用来释放应用占用的资源。finalize()方法是Object类的一个protected方法,它是在对象被垃圾回收之前由Java虚拟机来调用的。
Java小应用程序(Applet)

问答题48 /120

什么是Applet

参考答案

java applet是能够被包含在HTML页面中并且能被启用了java的客户端浏览器执行的程序。Applet主要用来创建动态交互的web应用程序。

问答题49 /120

解释一下Applet的生命周期

参考答案

applet可以经历下面的状态:
Init:每次被载入的时候都会被初始化。
Start:开始执行applet
Stop:结束执行applet
Destroy:卸载applet之前,做最后的清理工作。

问答题50 /120

applet被载入的时候会发生什么?

参考答案

首先,创建applet控制类的实例,然后初始化applet,最后开始运行。

问答题51 /120

Applet和普通的Java应用程序有什么区别?

参考答案

applet是运行在启用了java的浏览器中,Java应用程序是可以在浏览器之外运行的独立的Java程序。但是,它们都需要有Java虚拟机。
进一步来说,Java应用程序需要一个有特定方法签名的main函数来开始执行。Java applet不需要这样的函数来开始执行。
最后,Java applet一般会使用很严格的安全策略,Java应用一般使用比较宽松的安全策略。

问答题52 /120

Java applet有哪些限制条件?

参考答案

主要是由于安全的原因,给applet施加了以下的限制:
applet不能够载入类库或者定义本地方法。
applet不能在宿主机上读写文件。
applet不能读取特定的系统属性。
applet不能发起网络连接,除非是跟宿主机。
applet不能够开启宿主机上其他任何的程序。

问答题53 /120

什么是不受信任的applet

参考答案

不受信任的applet是不能访问或是执行本地系统文件的Java applet,默认情况下,所有下载的applet都是不受信任的。

问答题54 /120

从网络上加载的applet和从本地文件系统加载的applet有什么区别?

参考答案

applet是从网络上加载的时候,applet是由applet类加载器载入的,它受applet安全管理器的限制。
applet是从客户端的本地磁盘载入的时候,applet是由文件系统加载器载入的。
从文件系统载入的applet允许在客户端读文件,写文件,加载类库,并且也允许执行其他程序,但是,却通不过字节码校验。

问答题55 /120

applet类加载器是什么?它会做哪些工作?

参考答案

applet是从网络上加载的时候,它是由applet类加载器载入的。类加载器有自己的java名称空间等级结构。类加载器会保证来自文件系统的类有唯一的名称空间,来自网络资源的类有唯一的名称空间。
当浏览器通过网络载入applet的时候,applet的类被放置于和applet的源相关联的私有的名称空间中。然后,那些被类加载器载入进来的类都是通过了验证器验证的。验证器会检查类文件格式是否遵守Java语言规范,确保不会出现堆栈溢出(stack overflow)或者下溢(underflow),传递给字节码指令的参数是正确的。

问答题56 /120

applet安全管理器是什么?它会做哪些工作?

参考答案

applet安全管理器是给applet施加限制条件的一种机制。浏览器可以只有一个安全管理器。安全管理器在启动的时候被创建,之后不能被替换覆盖或者是扩展。

问答题57 /120

弹出式选择菜单(Choice)和列表(List)有什么区别

参考答案

Choice是以一种紧凑的形式展示的,需要下拉才能看到所有的选项。Choice中一次只能选中一个选项。List同时可以有多个元素可见,支持选中一个或者多个元素。

问答题58 /120

什么是布局管理器?

参考答案

布局管理器用来在容器中组织组件。

 

问答题59 /120

滚动条(Scrollbar)和滚动面板(JScrollPane)有什么区别?

参考答案

Scrollbar是一个组件,不是容器。而ScrollPane是容器。ScrollPane自己处理滚动事件。

问答题60 /120

哪些Swing的方法是线程安全的?

参考答案

只有3个线程安全的方法: repaint(), revalidate(), and invalidate()

!!! applet现在都不用了  ~~~

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值