java面试题

1.面向对象的特征有哪些?

抽象:抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目录有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节,抽象包括两个方面,一是过程抽象,二是数据抽象。

继承:对象的一个新类可以从现有的类中派生,这个过程称为类继承。新类继承了原始类的特征,新类称为原始类的派生类(子类),而原始类称为新类的基类(父类)。派生类可以从它的基类那里继承方法和实例变量,并且类可以修改或增加新的方法使之更适合特殊的需要。

封装:就是把过程和数据包围起来,对数据的访问只能通过已定义的界面。面向对象计算始于这个基本概念,即现实世界可以被描绘成一系列完全自治、封装的对象,这些对象通过一个受保护的接口访问其他对象。

多态性:多态性指的是允许不同类的对象对同一消息作出响应。多态性包括参数化多态性和包含多态性。多态性语言具有灵活、抽象、行为共享、代码共享的优势,很好的解决了应用程序函数同名的问题。

2.String是最基本的数据类型吗?

 

 不是。基本数据类型包括byte、int、short、long、boolean、double、float、char。

 3.int与integer的区别。

Integer是int的包装类,int的初始值为0,Integer的初始值为null。

4.String与StringBuffer的区别

java平台提供了两个类:String和StringBuffer,它们可以存储和操作字符串,即包含多个字符的字符数据。String提供的数值是不可改变的字符串,StringBuffer提供的字符串是可以进行修改的。(改变字符数据时要用到StringBuffer)

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

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

 6、说出Servlet的生命周期,并说出Servlet和CGI的区别。

生命周期:加载和实例化

     初始化

     请求处理

     服务结束

二、Servlet与cgi的区别:

Servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,

而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。

7、说出ArrayList与 LinkedList的存储性能和特性

ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据
快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录
本项的前后项即可,所以插入速度较快。

8、EJB是基于哪些技术实现的?并说出SessionBean和EntityBean的区别,StatefulBean和StatelessBean的区别。

EJB包括Session Bean、Entity Bean、Message Driven Bean,基于JNDI、RMI、JAT等技术实现。

SessionBean在J2EE应用程序中被用来完成一些服务器端的业务操作,例如访问数据库、调用其他EJB组件。EntityBean被用来代表应用系统中用到的数据。

对于客户机,SessionBean是一种非持久性对象,它实现某些在服务器上运行的业务逻辑。

对于客户机,EntityBean是一种持久性对象,它代表一个存储在持久性存储器中的实体的对象视图,或是一个由现有企业应用程序实现的实体。

Session Bean 还可以再细分为 Stateful Session Bean与 Stateless SessionBean,这两种的 Session Bean都可以将系统逻辑放在 method之中执行,不同的是 Stateful SessionBean可以记录呼叫者的状态,因此通常来说,一个使用者会有一个相对应的 Stateful SessionBean的实体。Stateless SessionBean虽然也是逻辑组件,但是他却不负责记录使用者状态,也就是说当使用者呼叫 Stateless SessionBean的时候,EJB Container并不会找寻特定的 Stateless SessionBean的实体来执行这个 method。换言之,很可能数个使用者在执行某个 Stateless SessionBean的 methods时,会是同一个 Bean的 Instance在执行。从内存方面来看, Stateful SessionBean与Stateless SessionBean比较, Stateful SessionBean会消耗 J2EE Server较多的内存,然而 Stateful SessionBean的优势却在于他可以维持使用者的状态。

9、Collection 和 Collections的区别。


Collection是集合类的上级接口,继承与他的接口主要有Set 和List.
Collections是针对集合类的一个帮助类,他提供一系列静态方法实现对各种集合的搜索、排序、线程安全化等操作。

10.&和&&的区别。

&是位运算符       &&是逻辑运算符

11、HashMap和Hashtable的区别。

 

相同点:都是存放key-value形式的元素。

 

不同点:

 

  1.hashMap是可以把null作为key或者value,而hashTabe是不可以的。

 

  2.HashMap线程不安全,但是效率高。HashTable线程安全,但是效率低。

 

12.final, finally, finalize的区别。

final      修饰符(关键字)。

finally   是在异常处理时提供finally块来执行任何清除操作。

finalize  是方法名。

13、sleep() 和 wait() 有什么区别?

sleep属于Thread类

wait属于Object类中的。

14、Overload和Override的区别。

Overload是重载的意思,Override是覆盖的意思(重写)。

15、error和exception有什么区别?

Error和Exception都继承Throwable类

Error(错误)是系统中的错误,程序员是不能改变的和处理的。

Exception(异常)表示程序可以处理的异常,可以捕获且可能恢复。

16、同步和异步有何异同,在什么情况下分别使用他们?举例说明。

同步:发送一个请求,等待返回,然后再发送下一个请求
异步:发送一个请求,不等待返回,随时可以再发送下一个请求

同步和异步最大的区别就在于。一个需要等待,一个不需要等待。

比如发短信,就是一个异步例子。发起者不关心接收者的状态。不需要等待接收者的返回信息,则可以进行下一次发送。
电话,就是一个同步例子。发起者需要等待接收者,接通电话后,通信才开始。需要等待接收者的返回信息

17、abstract class和interface有什么区别?

a. 抽象类可以有构造方法,接口中不能有构造方法。

b. 抽象类中可以有普通成员变量,接口中没有普通成员变量。

c. 抽象类中可以包含非抽象普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的方法。

d. 抽象类中的抽象方法的访问权限可以是 public、protected 和(默认类型,虽然 eclipse 不报错,但也不能用,默认类型子类不能继承),接口中的抽象方法只能是 public 类型的,并且默认即为 public abstract 类型。

e. 抽象类中可以包含静态方法,在 JDK1.8 之前接口中不能不包含静态方法,JDK1.8 以后可以包含。

f. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问权限可以是任意的,但接口中定义的变量只能是 public static final 类型的,并且默认即为 public static final 类型。

g. 一个类可以实现多个接口,用逗号隔开,但只能继承一个抽象类,接口不可以实现接口,但可以继承接口,并且可以继承多个接口,用逗号隔开。

18、heap和stack有什么区别。

  1、管理方式不同;

  2、空间大小不同;

  3、能否产生碎片不同;

  4、生长方向不同;

  5、分配方式不同;

19、forward和redirect的区别

forward又叫转发,redirect叫做重定向。

区别:地址栏,数据共享,应用场景,效率,本质,次数

20、EJB与JAVA BEAN的区别?

Java Bean 是可复用的组件,对Java Bean并没有严格的规范,理论上讲,任何一个Java类都可以是一个Bean。但通常情况下,由于Java Bean是被容器所创建(如Tomcat)的,所以Java Bean应具有一个无参的构造器,另外,通常Java Bean还要实现Serializable接口用于实现Bean的持久性。Java Bean实际上相当于微软COM模型中的本地进程内COM组件,它是不能被跨进程访问的。Enterprise Java Bean 相当于DCOM,即分布式组件。它是基于Java的远程方法调用(RMI)技术的,所以EJB可以被远程访问(跨进程、跨计算机)。但EJB必须被布署在诸如Webspere、WebLogic这样的容器中,EJB客户从不直接访问真正的EJB组件,而是通过其容器访问。EJB容器是EJB组件的代理,EJB组件由容器所创建和管理。客户通过容器来访问真正的EJB组件。

21、Static Nested Class 和 Inner Class的不同。

 

 1、Inner Class(内部类)定义在类中的类。 (一般是JAVA的说法) 它的创建依赖一个外部类对象作为宿主,内部类必须寄生在外部类对象中才能创建实例。

2、静态:用来修饰类的内部成员(静态方法、静态成员变量、静态常量)唯一的作用是,跟随类的加载而产生,就可以用 ”类   名+静态成员名“ 获得

3、静态内部类(嵌套类):这个类没有必要单独存放一个文件,它一般只被外部类使用,可以直接用 “外部类名+内部类名” 获得**要创建嵌套类Static Nested Class的对象,并不需要其外围类的对象。

22、JSP中动态include与静态include的区别?

静态 INCLUDE 用 include 伪码实现 , 不会检查所含文件的变化 , 适用于包含静态页面 <%@
 include file="included.htm" %> 。先将文件的代码被原封不动地加入到了主页面从而合成一个文件,然后再进行翻译
动态 INCLUDE 用 jsp:include 动作实现 <jsp:include
 page="included.jsp" flush="true" /> 它总是会检查所含文件中的变化 , 适合用于包含动态页面 , 并且可以带参数。各个文件分别先编译,然后组合成一个文件。
两者有几个不同点:
1)静态导入是将被导入页面的代码完全融入,两个页面融合成一个整体的servlet;而动态导入则在servlet中使用include方法来引入被导入页面的内容。
2)静态导入时被导入的页面的编译指令会起作用,而动态导入时被导入的页面的编译指令则失去作用,只是插入被导入页面的body内容。
3)动态包含可以包含相同变量,而静态包含不行。
4)如果被包含文件经常变动,则应该使用动态包含,而使用静态包含时,改变被包含文件后,有可能不能及时更新

23、什么时候用assert。

assertion在软件开发中是一种常用的调试方式ssertion检查通常在开发和测试时开启.为了提高性能,在软件发布后,assertion检查通常是关闭的.

24、GC是什么? 为什么要有GC?

GC是垃圾收集的意思。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。

25、short s1 = 1; s1 = s1 + 1;有什么错? short s1 =  1; s1 += 1;有什么错?

 short s1 = 1; s1 = s1 + 1; (s1+1运算结果是int型,需要强制转换类型)  short s1 = 1; s1 += 1;(可以正确编译)

26、Math.round(11.5)等於多少? Math.round(-11.5)等於多少?

11.5+0.5后是12再向下取整是12;-11.5+0.5后是-11再向下取整-11

27、String s = new String("xyz");创建了几个String Object?    

两个。

1.如果String常理池中,已经创建"xyz",则不会继续创建,此时只创建了一个对象new String("xyz");
2.如果String常理池中,没有创建"xyz",则会创建两个对象,一个对象的值是"xyz",一个对象new String("xyz")。

28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。

public class ThreadTest1{private int j;  public static void main(String args[]){  ThreadTest1 tt=newThreadTest1();  Inc inc=tt.new Inc(); Dec dec=tt.new Dec();  for(int i=0;i<2;i++){  Thread t=new Thread(inc);  t.start();  t=new Thread(dec);  t.start();  } }   private synchronized void inc(){  j++;  System.out.println(Thread.currentThread().getName()+"-inc:"+j);  }  private synchronized void dec(){ j--;  System.out.println(Thread.currentThread().getName()+"-dec:"+j);  }class Inc implements Runnable{  public void run(){  for(int i=0;i<100;i++){  inc();  } }  } class Decimplements Runnable{public void run(){  for(int i=0;i<100;i++){ dec(); } }  } }

29、Java有没有goto?

java中的保留字,现在没有在java中使用。

注:java保留字;C语言中使用

30、启动一个线程是用run()还是start()?

run()方法是线程执行体,start()方法才能启动线程。

31、EJB包括(SessionBean,EntityBean)说出他们的生命周期,及如何管理事务的?

SessionBean:Stateless Session Bean 的生命周期是由容器决定的,当客户机发出请求要建立一个Bean的实例时,EJB容器不一定要创建一个新的Bean的实例供客户机调用,而是随便找一个现有的实例提供给客户机。

EntityBean:Entity Beans能存活相对较长的时间,并且状态是持续的。

通过以下技术管理实务:对象管理组织(OMG)的对象实务服务(OTS),Sun Microsystems的Transaction Service(JTS)、Java Transaction API(JTA),开发组(X/Open)的XA接口。

32、应用服务器有那些?

jsp服务器和javaEE服务器(jsp服务器有tomcat)

33、给我一个你最常见到的异常。

空指针异常

类型转换异常

数组下标越界异常

算数异常

找不到文件异常

找不到类异常

sql异常

posted on 2019-05-26 09:48  斐常完美  阅读(106)  评论(0编辑  收藏  举报

导航