码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA面试题(二)

时间:2015-07-12 21:29:29      阅读:346      评论:0      收藏:0      [点我收藏+]

标签:

上文链接:点击跳转

垃圾收集器(Garbage Collectors)  

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

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

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

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

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

在释放对象占用的内存之前,垃圾收集器会调用对象的 finalize()方法。一般建议在该方法中 释放对象持有的资源。  

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

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

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

JVM 的堆是运行时数据区,所有类的实例和数组都是在堆上分配内存。它在 JVM 启动的时 候被创建。对象所占的堆内存是由自动内存管理系统也就是垃圾收集器回收。  

堆内存是由存活和死亡的对象组成的。存活的对象是应用可以访问的,不会被垃圾回收。死 亡的对象是应用不可访问尚且还没有被垃圾收集器回收掉的对象。一直到垃圾收集器把这些 对象回收掉之前,他们会一直占据堆内存空间。  

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

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

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

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

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

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

异常处理  

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

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

44.Java 中 Exception 和 Error 有什么区别?  

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

45.1 throw 和 throws 有什么区别?  

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

45.2 异常处理的时候,finally 代码块的重要性是什么?  

无论是否抛出异常,finally 代码块总是会被执行。就算是没有 catch 语句同时又抛出异常的情况下,finally 代码块仍然会被执行。最后要说的是,finally 代码块主要用来释放资源,比 如:I/O 缓冲区,数据库连接。  

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

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

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

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

Java 小应用程序(Applet)  

48.什么是 Applet?  

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

49.解释一下 Applet 的生命周期  

applet 可以经历下面的状态:  

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

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

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

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

applet 是运行在启用了 java 的浏览器中,Java 应用程序是可以在浏览器之外运行的独立的 Java 程序。但是,它们都需要有 Java 虚拟机。  

进一步来说,Java 应用程序需要一个有特定方法签名的 main 函数来开始执行。Java applet 不需要这样的函数来开始执行。  

最后applet一般会使用很严格的安全策略,Java应用一般使用比较宽松的安全策略。  

52.Java applet 有哪些限制条件?  

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

53.什么是不受信任的 applet?  

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

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

当 applet 是从网络上加载的时候,applet 是由 applet 类加载器载入的,它受 applet 安全管 理器的限制。  

当 applet 是从客户端的本地磁盘载入的时候,applet 是由文件系统加载器载入的。  

从文件系统载入的 applet 允许在客户端读文件,写文件,加载类库,并且也允许执行其他 程序,但是,却通不过字节码校验。  

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

当 applet 是从网络上加载的时候,它是由 applet 类加载器载入的。类加载器有自己的 java 名称空间等级结构。类加载器会保证来自文件系统的类有唯一的名称空间,来自网络资源的 类有唯一的名称空间。  

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

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

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

Swing  

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

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

58.什么是布局管理器?  

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

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

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

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

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

61.说出三种支持重绘(painting)的组件。  

Canvas, Frame, Panel,和 Applet 支持重绘。  

62.什么是裁剪(clipping)?  

限制在一个给定的区域或者形状的绘图操作就做裁剪。  

63.MenuItem 和 CheckboxMenuItem 的区别是什么?  

CheckboxMenuItem 类继承自 MenuItem 类,支持菜单选项可以选中或者不选中。  

64.边缘布局(BorderLayout)里面的元素是如何布局的?  

BorderLayout 里面的元素是按照容器的东西南北中进行布局的。  

65.网格包布局(GridBagLayout)里面的元素是如何布局的?  

GridBagLayout 里面的元素是按照网格进行布局的。不同大小的元素可能会占据网格的多于 1 行或一列。因此,行数和列数可以有不同的大小。  

66.Window 和 Frame 有什么区别?  

Frame 类继承了 Window 类,它定义了一个可以有菜单栏的主应用窗口。  

67.裁剪(clipping)和重绘(repainting)有什么联系?  

当窗口被 AWT 重绘线程进行重绘的时候,它会把裁剪区域设置成需要重绘的窗口的区域。  

68.事件监听器接口(event-listener interface)和事件适配器(event-adapter)有什么关系? 

事件监听器接口定义了对特定的事件,事件处理器必须要实现的方法。事件适配器给事件监 听器接口提供了默认的实现。  

69.GUI 组件如何来处理它自己的事件?  

GUI 组件可以处理它自己的事件,只要它实现相对应的事件监听器接口,并且把自己作为事 件监听器。  

70.Java 的布局管理器比传统的窗口系统有哪些优势?  

Java 使用布局管理器以一种一致的方式在所有的窗口平台上摆放组件。因为布局管理器不会 和组件的绝对大小和位置相绑定,所以他们能够适应跨窗口系统的特定平台的不同。  

71.Java 的 Swing 组件使用了哪种设计模式? 

Java 中的 Swing 组件使用了 MVC(视图-模型-控制器)设计模式。  

 上文链接:点击跳转

JAVA面试题(二)

标签:

原文地址:http://www.cnblogs.com/starainDou/p/4641501.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!