Java之问(一)

如何强制执行垃圾回收?

  (1)首先,垃圾回收是JVM自动处理的,我们不能强制致敬,尽管我们可以调用System.gc()。

  (2)JVM不能保证GC能够直接开始回收。

  (3)每一个class都从Object基础了finalize()方法。

  (4)当垃圾回收器觉得应用中没有更多的引用对象存在时就会调用finalize()。因此我们手动调用finalize()并没有什么多大作用

  (5)我们可以通过调用System.gc()和Runtime.gc()来请求回收不用的对象,但是不能保证这些对象何时会被回收。


Java的Socket的有点和缺点

  优点:

  (1)Socket是灵活的,可以很容易的实现一般的通信。

  (2)Socket通信只需要很少的流量而不像HTML表单和CGI脚本那样每次请求网页都会传输整个页面。

  缺点:

  (1)基于Socket的通信只允许在应用间发送原始的数据。

  (2)无论是客户端还是服务端都必须提供一个机制使数据在任何情况下都是有用的。


你如何理解Synchronization?为什么它很重要?

  (1)Synchronization关键字是控制多线程访问共享资源的一种手段。

  (2)Synchronization只允许在一个时间点一个线程访问一个资源。

  (3)Synchronization保证当一个线程在修改共享的对象时另一个线程不能再访问该对象。

  (4)Synchronization通常会导致错误,因为它防止了一些类型的数据被损坏。


什么是不变类?如何创建一个不变类?

  (1)不变类是指一个类一旦被创建了,它的内容就不能被修改。比如不能被继承,其所有属性/方法都不能被重写等。

  (2)不变对象是那些一旦被创建就状态不能再被修改的对象

  (3)既然不变类一般被创建就不能被修改,那么它们就是典型的线程安全的。

  (4)JDK的不变类有八大基本类型的包装类:String、Integer、Boolean、等等。

  

ArrayList和Vector的区别?

  (1)ArrayList是线程不安全的,Vectory是线程安全的,因为Vectory的每一个方法都用synchronization装饰了。

  (2)这两者的元素都是通过数组来持有的

 

JDK、JRE和JVM有什么区别?

  JVM:JVM是Java Virtual Machine的缩写,他是为java字节码(class文件)在运行时提供的一个抽象的机器,JVM是一种规范,它可以用于很多硬件和软件平台,所以JVM是与平台无关的。
  JRE:JRE是Java程序运行时的环境,他是JVM的实现。
  JDK:JDK是Java Development Kit的缩写,具体来说,它包含了JRE+开发者工具。
  

JVM为内存分配了多少类型的区域?

  (1)Class(方法)区。
  (2)堆区。
  (3)栈区(线程栈)。
  (4)程序计数器(一个寄存器)。
  (5)本地方法栈。

什么是JIT编译器?

  JIT是Just-In-Time的缩写。JIT编译器是用于提升程序的性能,JIT编译器会一次性编译那些有相似功能的字节码,并且之后就减少了编译时间。“编译器”这个术语的意思就是将JVM的指令集转换成CPU的指令集。

什么是Platform?

  一个platform是程序运行的最基本的软件或硬件环境。有两种类型的platform,也就是基于软件和基于硬件。JVM提供的就是基于软件的平台。


Java平台和其他平台的主要区别是什么?

  Java平台和大多数其它平台显著的不同就是他是一个基于软件的平台,它(JVM)是运行在其它硬件平台上的,他有两个组成部分:
  (1)运行时环境
  (2)API(应用程序接口)。

Java的“一次编写处处运行”的本质是什么?

  java源代码可以被编译成字节码,这种字节码是源代码和机器码的中间产物,这种字节码不是在指定平台生成的,它是依赖于JVM而存在的,与平台无关。所以它可在任何有JVM上的平台运行。


什么是类加载器(ClassLoader)

  ClassLoader是一JVM的子系统,用于加载类和接口,有很多种类型的ClassLoader,比如Bootstrap、Extension、System、Plugin等等。

局部变量默认值是多少?

  局部变量不会自动初始化的,也就是没有默认值,因此我们在使用局部变量时必须手动指定初始值。

什么是运行时多态性(Runtime Polymorphism)?

   运行时多态或者说是动态方法的调度是一个调用重写方法的过程,重写的方法是在运行时调用而不是在编译时调用。
  在这个过程中,一个重写的方法是通过父类的引用变量来调用的。


什么是抽象?

  抽象是隐藏实现的细节而只向用户突出功能的一个过程。


在Java中创建对象有哪几种方式?

  (1)使用关键字new对象

  (2)使用Class.forName()根据对象的名称去反射一个对象,反射见http://blog.csdn.net/u012481172/article/details/49668315

  (3)使用clone()方法克隆一个已经存在的对象。

  (4)使用反序列化,将已经序列化的对象反序列化成对象。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章