java知识点

1.int 和 Integer区别

Java提供两种不同的类型:引用类型和原始类型。Int是java的原始数据类型,Integer是java为int提供的封装类。java为每个原始类型提供了封装类。

2.StringBuffer 提供的字符串可以进行修改,StringBuffer是动态地构造字符数据。StringBuffer是线程安全的,StringBuilder是线程不安全的

3.运行时异常与一般异常有何异同

  异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。

4.Servlet的生命周期,Servlet与CGI的区别

  Servlet被服务器实例化后,容器运行其init方法,强求到达时运行其service方法,service方法自动派遣运行与请求对应的(doGet/doPost

等),当服务器决定将实例销毁时调用其destroy方法。

  与CGI区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进行,服务完成后就销毁,所以效率较低

4.Collection与Collections的区别

  Collection是集合类的上级接口,继承与它的接口主要有Set和List

  Collections是针对集合类的一个帮助类,提供一系列的静态方法对各种集合搜索、排序、线程安全化等操作。

5.final,finally,finalize的区别

  final用于声明属性、方法和类,分别表示属性不可变,方法不可覆盖,类不可继承

  finally是异常处理语句结构的一部分,表示总是执行

  finalize是object类的一个方法,在垃圾收集器执行时会调用被回收对象的此方法,可以覆盖此方法提供垃圾回收的其他资源回收,比如关闭文件等

6.sleep()和wait()方法区别

  在java中,每一个对象都有一把锁。线程可以使用synchrnized来获取对象上的锁。

  sleep是线程类(Thread)的犯法,导致此线程暂停执行指定时间,但监控状态依然保持,时间到达会自动回复,sleep不会释放对象锁

  wait()是object类的方法,对此对象调用wait方法导致本线程放弃对象锁,进入等待对象的等待锁定池,只有针对此对象发出notify(notifyAll)后本线程才进入对象锁定池准备获得对象锁进入运行状态。

7.error不指望程序能解决的问题,如内存溢出。Exception是设计或实现的问题

8.什么是同步

  同步是指数据在线程间共享,例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,这些数据是共享的,必须进行同步存取

9.抽象类(abstract class)和接口(interface)的区别

10.Jre和JDK的区别是什么

  JAVA运行时环境(Jre)是将要执行Java程序的java虚拟机。它同时也包含了执行applet需要的浏览器插件。Java开发工具包(JDK)是完成的java软件开发包,包含了jre、编译器和其他工具,可以让开发者开发、编译、执行java程序。

11.static的作用

  static关键字表名成员变量或者是成员方法时可以在没有所属的类的实例变量的情况下被访问。static: Java平台调用这个方法时不会创建这个类的一个实例

  java  static方法不能被覆盖,因为方法覆盖是基于运行时动态绑定的,而static方法是编译时静态绑定的。static变量在java中是属于类的,当类被java虚拟机载入时,会对static变量进行初始化。如果尝试不用实例来访问非static变量,编译器会报错,因为这些变量还没有被创建出来,还没有跟任何实例关联上。

  静态变量是和类绑定到一起的,而不是类的实例对象。非静态变量在每一个对象实例上都有单独的一份值。

  当类加载器将类加载到JVM中的时候就会创建静态变量,这跟对象是否创建无关。静态变量加载的时候就会分配内存空间。静态代码块的代码只会在类第一次初始化的时候执行一次。一个类可以有多个静态代码块,它并不是类的成员,也没有返回值,并且不能直接调用。静态代码块不能包含this或者super,它们通常被用初始化静态变量。

12什么是构造函数?

  当新对象被创建时,构造函数就会被调用。每一个类都有构造函数(默认构造函数),java构造函数重载是指可以被一个类创建多个构造函数,每一个构造函数必须有它唯一的参数列表

13.java不支持多继承,每个类只能继承一个类,但是可以实现多个接口

14. 值传递和引用传递

  对象被值传递,意味着传递了对象的一个副本,因此就算改变了对象副本,也不会影响源对象的值

  对象被引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象所做的改变会反映到所有的对象上。

  当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递? 
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。

  传引用是指传递的是地址而不是值本身,传值则是传递值的一份拷贝。

15.在监视器(Monitor)内部,是如何做到线程同步的,程序应该做何种级别的同步

  监视器和锁在java虚拟机中是一块使用的。监视器监视一块同步块代码,确保每次只有一个线程执行同步代码块。每一个监视器都和一个对象引用相关联,线程在获取锁之前不可以执行同步代码。

16.HTTP请求的基本过程

17.java中的内存回收机制所采用的算法

18.java反射机制

  开放性和原因连接(causally-connected)是反射系统的两大基本要素

  反射是指在运行时能查看一个类的状态及特征,并能进行动态管理的功能。这些功能是通过一些内建类的反射API提供的,比如Class,Method,Field, Constructors等。使用的例子:使用Java反射API的getName方法可以获取到类名。

19. 面向对象的特性:抽象,继承,封装,多态性

  派生类可以从基类中集成方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

  多态性是指允许不同类的对象对同一消息做出响应。包括参数化和多态性和包含多态性,具有灵活、抽象、行为共享、代码共享的优势。

  多态在Java里有三种表现方式:方法重载通过继承实现方法重写通过Java接口进行方法重写。

20.String不是基本类型,是java.lang.String类,不可以继承、修改这个类,是final类型的。

22.接口可以继承接口。抽象类可以实现接口,抽象类可以继承实体类,但实体类必须有明确的构造函数。

  abstract的方法不能同时是static,synchronized,private,final

  构造器可以被重载

  Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法。迭代器可以在迭代时删除底层集合的元素。分为快速失败(fail-fast)和安全失败(fail-safe)。,Iterator远远比Enumeration安全,因为其他线程不能够修改正在被iterator遍历的集合里面的对象

23.JAVA语言如何进行异常处理,关键字:throws,throw,try,catch,finally分别代表什么意义?在try块中可以抛出异常吗?

 Java 通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理。 用try来指定一块预防所有"异常"的程序。紧跟在try程序后面,应包含一个catch子句来指定你想要捕捉的"异常"的类型。 throw语句用来明确地抛出一个"异常"。 throws用来标明一个成员函数可能抛出的各种"异常"。 Finally为确保一段代码不管发生什么"异常"都被执行一段代码。 可以在一个成员函数调用的外面写一个try语句,在这个成员函数内部写另一个try语句保护其他代码。每当遇到一个try语句,"异常"的框架就放到堆栈上面,直到所有的try语句都完成。如果下一级的try语句没有对某种"异常"进行处理,堆栈就会展开,直到遇到有处理这种"异常"的try语句。

  其中违反语义规则包括:java类库内置的语义检查,程序员自定义拓展的予以检查,所有的异常都是java。lang.Thow

abe子类。

24垃圾回收器的基本原理是什么?垃圾回收器可以马上回收内存吗?有什么办法主动通知虚拟机进行垃圾回收?  

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

  对于GC来说,当程序员创建对象时,GC就开始监控这个对象的地址、大小以及使用情况。通常,GC采用有向图的方式记录和管理堆(heap)中的所有对象。通过这种方式确定哪些对象是"可达的",哪些对象是"不可达的"。当GC确定一些对象为"不可达"时,GC就有责任回收这些内存空间。可以。程序员可以手动执行System.gc(),通知GC运行,但是Java语言规范并不保证GC一定会执行。

  垃圾回收不会发生在永久代,如果永久代满了或者是超过了临界值,会触发完全垃圾回收(Full GC)。

  GC功能可以自动检测对象是否超过作用域从而达到自动回收内存的目的。java没有提供释放已分配内存的显式操作方法。回收机制有分代复制垃圾回收、标记垃圾回收、增量垃圾回收。

   垃圾回收可以有效的防止内存泄露,有效的使用可以使 用的内存。垃圾回收器通常是作为一个单独的低级别的线程运行,不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和回收

  JVM自身会管理缓存,它在堆中创建对象,然后在栈中引用这些对象。

25.什么是java序列化,如何实现java序列化?  

  序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。  序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。

 26.什么是java虚拟机,为什么java被称为平台无关的编程语言

  java虚拟机是一个可以执行java字节流的虚拟机进程,java源文件被编译成能被java虚拟机执行的字节码文件。

  java被设计成允许应用程序可以运行在任意的平台。因为java虚拟机知道底层硬件平台的指令长度和其他特性。

27.接口与抽象类的区别

abstract class  Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface

abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。

abstract classinterface所反映出的设计理念不同。其实abstract class表示的是"is-a"关系,interface表示的是"like-a"关系。

实现抽象类和接口的类必须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。

接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。

抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。

接口中的方法默认都是 public,abstract 类型的。

Java提供和支持创建抽象类和接口。它们的实现有共同点,不同点在于:

  • 接口中所有的方法隐含的都是抽象的。而抽象类则可以同时包含抽象和非抽象的方法。
  • 类可以实现很多个接口,但是只能继承一个抽象类
  • 类如果要实现一个接口,它必须要实现接口声明的所有方法。但是,类可以不实现抽象类声明的所有方法,当然,在这种情况下,类也必须得声明成是抽象的。
  • 抽象类可以在不提供接口方法实现的情况下实现接口。
  • Java接口中声明的变量默认都是final的。抽象类可以包含非final的变量。
  • Java接口中的成员函数默认是public的。抽象类的成员函数可以是private,protected或者是public。
  • 接口是绝对抽象的,不可以被实例化。抽象类也不可以被实例化,但是,如果它包含main方法的话是可以被调用的。

28.HashMap和HashTable的区别

  HashMap和Hashtable都实现了map接口,不同点:

  HashMap允许键和值为null,而hashtable不允许

  HashMap提供了可供应用迭代的键的集合,是快速失败的。Hashtable提供了对键的列举

29.ArrayList是基于索引的数据接口,底层是数组,LinkedList是双向链表

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

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

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

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

  堆是栈的一个组成元素

31.forward和redirect区别

  forward是服务器请求资源,服务器直接访问目标地址的URL,把URL的相应内容读取过来,然后把这些内容再发给浏览器,地址栏还是原来的地址

  redirect是服务器根据逻辑,发送一个状态码,告诉浏览器冲洗去请求那个地址,一般来说浏览器会用刚才请求的所有参数重新请求,所以session,request参数都可以获取

32.数据连接池的工作机制是什么

  J2EE服务器启动时会建立一定数量的池连接,并一直维持不少于此数目的池连接。客户端程序需要连接,池驱动程序就会返回一个未使用的池连接并标记为忙。

33.描述一下JVM加载class文件的原理机制?

  JVM是一台抽象的计算机,就像真实的计算机那样,它们会先将.java文件编译成.class文件(.class文件就是字节码文件),然后用它的解释器来加载字节码。
  JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

34、简述synchronized和java.util.concurrent.locks.Lock的异同 ?
  主要相同点:Lock能完成synchronized所实现的所有功能
  主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放

35.MVC模型

  Model:模型层  View:视图层  Controller:控制层

  强制性的使应用程序的输入、处理和输出分开。控制器:当单击Web页面中的超链接和发送HTML表单时,控制器本身不输出任何东西和做任何处理。它只是接收请求并决定调用哪个模型构件去处理请求,然后用确定用哪个视图来显示模型处理返回的数据。 

36.==与equals的区别

  ==比较的是引用而equals方法比较的是内容

37.Main的作用 

  当程序运行的时候,我们会指定运行的类名。JVM只会在你指定的类中查找main方法。程序的入口方法

38.Java的三大核心机制

  虚拟机机制:利用虚拟机解释字节码执行java程序实现跨平台

  垃圾收集机制:自动内存回收

  代码安全性机制:加载代码后校验代码后再执行代码

39.基本类型都有哪8种类型?
  布尔类型:boolean 占1字节  字符类型:char 占2字节  整型:byte 占1字节 short 占2字节 int 占4字节 long 占8字节  浮点型:float 占4字节 double 占8字节
  char是Unicode全球统一编码
40.this和super是作什么用处的?

  this:本身代表当前的对象引用,可以用this.成员名称调用当前对象的属性和方法,如果属性和局部变量重名,可以用this.属性名和局部变量区分开。也可以用this()语法调用本类重载构造器。

  super:本事是一个特殊关键字,可以用super.成员名称调用从父类继承的属性和方法,也可以用super()语法调用父类构造器。

41.泛型

  类型参数化,后期绑定数据类型,只支持引用类型,默认是object类型,将泛型参数声明在方法中,调用方法的时候绑定泛型。

42接口

  interface关键字,数据域必须是(pubilic static final修饰)公有静态变量

  方法必须是(public static)公有抽象

  没有构造方法,不能创建对象,接口和接口之间是集成关系,可以继承多个父接口,

 

43.IO流

  按单位分为字节流和字符流。java.io.File类,

  synchronized关键字,ReentrantLock类的lock和unlock方法

 

posted @ 2015-10-16 23:49  晋心  阅读(358)  评论(0编辑  收藏  举报