JAVA面试题.docx

上传人:b****5 文档编号:7962879 上传时间:2023-01-27 格式:DOCX 页数:14 大小:27.56KB
下载 相关 举报
JAVA面试题.docx_第1页
第1页 / 共14页
JAVA面试题.docx_第2页
第2页 / 共14页
JAVA面试题.docx_第3页
第3页 / 共14页
JAVA面试题.docx_第4页
第4页 / 共14页
JAVA面试题.docx_第5页
第5页 / 共14页
点击查看更多>>
下载资源
资源描述

JAVA面试题.docx

《JAVA面试题.docx》由会员分享,可在线阅读,更多相关《JAVA面试题.docx(14页珍藏版)》请在冰豆网上搜索。

JAVA面试题.docx

JAVA面试题

面向对象编程(OOP) 

Java是一种支持并发、基于类和面向对象计算机编程语言。

下面列出了面向对象软件开发长处:

 

1. 代码开发模块化,更易维护和修改。

 2. 代码复用。

 

3. 增强代码可靠性和灵活性。

 4. 增长代码可理解性。

 

面向对象编程有诸多重要特性,例如:

封装,继承,多态和抽象。

下面章节咱们会逐个分析这些特性。

 封装 

封装给对象提供了隐藏内部特性和行为能力。

对象提供某些能被其她对象访问办法来变化它内部数据。

在Java当中,有3种修饰符:

public,private和protected。

每一种修饰符给其她位于同一种包或者不同包下面对象赋予了不同访问权限。

 下面列出了使用封装某些好处:

 

1. 通过隐藏对象属性来保护对象内部状态。

 

2. 提高了代码可用性和可维护性,由于对象行为可以被单独变化或者是扩展。

 3. 禁止对象之间不良交互提高模块化。

 

参照这个文档获取更多关于封装细节和示例。

 多态 

多态是编程语言给不同底层数据类型做相似接口展示一种能力。

一种多态类型上操作可以应用到其她类型值上面。

 继承 

继承给对象提供了从基类获取字段和办法能力。

继承提供了代码重用行,也可以在不修改类状况下给现存类添加新特性。

 抽象 

抽象是把想法从详细实例中分离出来环节,因而,要依照她们功能而不是实现细节来创立类。

Java支持创立只暴漏接口而不包括办法实现抽象类。

这种抽象技术重要目是把类行为和实现细节分离开。

抽象和封装不同点 

抽象和封装是互补概念。

一方面,抽象关注对象行为。

另一方面,封装关注对象行为细节。

普通是通过隐藏对象内部状态信息做到封装,因而,封装可以当作是用来提供抽象一种方略。

 

常用Java问题 

1.什么是Java虚拟机?

为什么Java被称作是“平台无关编程语言”?

 

Java虚拟机是一种可以执行Java字节码虚拟机进程。

Java源文献被编译成能被Java虚拟机执行字节码文献。

 

Java被设计成容许应用程序可以运营在任意平台,而不需要程序员为每一种平台单独重写或者是重新编译。

Java虚拟机让这个变为也许,由于它懂得底层硬件平台指令长度和其她特性。

 

2.JDK和JRE区别是什么?

 

Java运营时环境(JRE)是将要执行Java程序Java虚拟机。

它同步也包括了执行applet需要浏览器插件。

Java开发工具包(JDK)是完整Java软件开发包,包括了JRE,编译器和其她工具(例如:

JavaDoc,Java调试器),可以让开发者开发、编译、执行Java应用程序。

 

3.”static”核心字是什么意思?

Java中与否可以覆盖(override)一种private或者是static办法?

 

“static”核心字表白一种成员变量或者是成员办法可以在没有所属类实例变量状况下被访问。

 

Java中static办法不能被覆盖,由于办法覆盖是基于运营时动态绑定,而static办法是编译时静态绑定。

static办法跟类任何实例都不有关,因此概念上不合用。

 

4.与否可以在static环境中访问非static变量?

 

static变量在Java中是属于类,它在所有实例中值是同样。

当类被Java虚拟机载入时候,会对static变量进行初始化。

如果你代码尝试不用实例来访问非static变量,编译器会报错,由于这些变量还没有被创立出来,还没有跟任何实例关联上。

 

5.Java支持数据类型有哪些?

什么是自动拆装箱?

 

Java语言支持8中基本数据类型是:

自动装箱是Java编译器在基本数据类型和相应对象包装类型之间做一种转化。

例如:

把int转化成Integer,double转化成double,等等。

反之就是自动拆箱。

 

6.Java中办法覆盖(Overriding)和办法重载(Overloading)是什么意思?

 

Java中办法重载发生在同一种类里面两个或者是各种办法办法名相似但是参数不同状况。

与此相对,办法覆盖是说子类重新定义了父类办法。

办法覆盖必要有相似办法名,参数列表和返回类型。

覆盖者也许不会限制它所覆盖办法访问。

 

7.Java中,什么是构造函数?

什么是构造函数重载?

什么是复制构造函数?

 

当新对象被创立时候,构造函数会被调用。

每一种类均有构造函数。

在程序员没有给类提供构造函数状况下,Java编译器会为这个类创立一种默认构造函数。

 

Java中构造函数重载和办法重载很相似。

可觉得一种类创立各种构造函数。

每一种构造函数必要有它自己唯一参数列表。

 

Java不支持像C++中那样复制构造函数,这个不同点是由于如果你不自己写构造函数状况下,Java不会创立默认复制构造函数。

 

8.Java支持多继承么?

 

不支持,Java不支持多继承。

每个类都只能继承一种类,但是可以实现各种接口。

 

9.接口和抽象类区别是什么?

 

Java提供和支持创立抽象类和接口。

它们实既有共同点,不同点在于:

 

1. 接口中所有办法隐含都是抽象。

而抽象类则可以同步包括抽象和非抽象方

法。

 

2. 类可以实现诸各种接口,但是只能继承一种抽象类 

3. 类如果要实现一种接口,它必要要实现接口声明所有办法。

但是,类可以不实现

抽象类声明所有办法,固然,在这种状况下,类也必要得声明成是抽象。

 

4. 抽象类可以在不提供接口办法实现状况下实现接口。

 

5. Java接口中声明变量默认都是final。

抽象类可以包括非final变量。

 6. Java接口中成员函数默认是public。

抽象类成员函数可以是private,

protected或者是public。

 

7. 接口是绝对抽象,不可以被实例化。

抽象类也不可以被实例化,但是,如果它包

含main办法话是可以被调用。

 

也可以参照JDK8中抽象类和接口区别 

10.什么是值传递和引用传递?

 

对象被值传递,意味着传递了对象一种副本。

因而,就算是变化了对象副本,也不会影响源对象值。

 

对象被引用传递,意味着传递并不是实际对象,而是对象引用。

因而,外部对引用对象所做变化会反映到所有对象上。

4. 抽象类可以在不提供接口办法实现状况下实现接口。

 

5. Java接口中声明变量默认都是final。

抽象类可以包括非final变量。

 6. Java接口中成员函数默认是public。

抽象类成员函数可以是private,

protected或者是public。

 

7. 接口是绝对抽象,不可以被实例化。

抽象类也不可以被实例化,但是,如果它包

含main办法话是可以被调用。

 

也可以参照JDK8中抽象类和接口区别 

10.什么是值传递和引用传递?

 

对象被值传递,意味着传递了对象一种副本。

因而,就算是变化了对象副本,也不会影响源对象值。

 

对象被引用传递,意味着传递并不是实际对象,而是对象引用。

因而,外部对引用对象所做变化会反映到所有对象上。

 

Java线程 

11.进程和线程区别是什么?

 

进程是执行着应用程序,而线程是进程内部一种执行序列。

一种进程可以有各种线程。

线程又叫做轻量级进程。

 

12.创立线程有几种不同方式?

你喜欢哪一种?

为什么?

 

有三种方式可以用来创立线程:

 

1. 继承Thread类 2. 实现Runnable接口 

3. 应用程序可以使用Executor框架来创立线程池 

实现Runnable接口这种方式更受欢迎,由于这不需要继承Thread类。

在应用设计中已经继承了别对象状况下,这需要多继承(而Java不支持多继承),只能实现接口。

同步,线程池也是非常高效,很容易实现和使用。

 

13.概括解释下线程几种可用状态。

 

线程在执行过程中,可以处在下面几种状态:

 

1. 就绪(Runnable):

线程准备运营,不一定立马就能开始执行。

 2. 运营中(Running):

进程正在执行线程代码。

 

3. 等待中(Waiting):

线程处在阻塞状态,等待外部解决结束。

 4. 睡眠中(Sleeping):

线程被强制睡眠。

 

5. I/O阻塞(Blocked on I/O):

等待I/O操作完毕。

 6. 同步阻塞(Blocked on Synchronization):

等待获取锁。

 7. 死亡(Dead):

线程完毕了执行。

 

14.同步办法和同步代码块区别是什么?

 

在Java语言中,每一种对象有一把锁。

线程可以使用synchronized核心字来获取对象上锁。

synchronized核心字可应用在办法级别(粗粒度锁)或者是代码块级别(细粒度锁)。

 

15.在监视器(Monitor)内部,是如何做线程同步?

程序应当做哪种级别同步?

 

监视器和锁在Java虚拟机中是一块使用。

监视器监视一块同步代码块,保证一次只有一种线程执行同步代码块。

每一种监视器都和一种对象引用有关联。

线程在获取锁之前不容许执行同步代码。

 

16.什么是死锁(deadlock)?

 

两个进程都在等待对方执行完毕才干继续往下执行时候就发生了死锁。

成果就是两个进程都陷入了无限等待中。

 

17.如何保证N个线程可以访问N个资源同步又不导致死锁?

 

使用多线程时候,一种非常简朴避免死锁方式就是:

指定获取锁顺序,并强制线程按照指定顺序获取锁。

因而,如果所有线程都是以同样顺序加锁和释放锁,就不会浮现死锁了。

 

Java集合类 

18.Java集合类框架基本接口有哪些?

 

Java集合类提供了一套设计良好支持对一组对象进行操作接口和类。

Java集合类里面最基本接口有:

 

1. Collection:

代表一组对象,每一种对象都是它子元素。

 2. Set:

不包括重复元素Collection。

 

3. List:

有顺序collection,并且可以包括重复元素。

 4. Map:

可以把键(key)映射到值(value)对象,键不能重复。

5. 编程时候接口优于实现。

 

6. 底层集合事实上是空状况下,返回长度是0集合或者是数组,不要返回null。

 

33.Enumeration接口和Iterator接口区别有哪些?

 

Enumeration速度是Iterator2倍,同步占用更少内存。

但是,Iterator远远比Enumeration安全,由于其她线程不可以修改正在被iterator遍历集合里面对象。

同步,Iterator容许调用者删除底层集合里面元素,这对Enumeration来说是不也许。

 

34.HashSet和TreeSet有什么区别?

 

HashSet是由一种hash表来实现,因而,它元素是无序。

add(),remove(),contains()办法时间复杂度是O

(1)。

 

另一方面,TreeSet是由一种树形构造来实现,它里面元素是有序。

因而,add(),remove(),contains()办法时间复杂度是O(logn)。

 

垃圾收集器(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)。

如果你仔细查看垃圾收集器输出信息,就会发现永久代也是被回收。

这就是为什么对的永久代大小对避免Full GC是非常重要因素。

请参照下Java8:

从永久代到元数据区 

(译者注:

Java8中已经移除了永久代,新加了一种叫做元数据区native内存区)  

异常解决 

43.Java中两种异常类型是什么?

她们有什么区别?

 

Java中有两种异常:

受检查(checked)异常和不受检查(unchecked)异常。

不受检查异常不需要在办法或者是构造函数上声明,就算办法或者是构造函数执行也许会抛出这样异常,并且不受检查异常可以传播到办法或者是构造函数外面。

相反,受检查异常必要要用throws语句在办法或者是构造函数上声明。

这里有Java异常解决某些小建议。

 

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

 

Exception和Error都是Throwable子类。

Exception用于顾客程序可以捕获异常状况。

Error定义了不盼望被顾客程序捕获异常。

 45.throw和throws有什么区别?

 

throw核心字用来在程序中明确抛出异常,相反,throws语句用来表白办法不能解决异常。

每一种办法都必要要指定哪些异常不能解决,因此办法调用者才可以保证解决也许发生异常,各种异常是用逗号分隔

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.JavaSwing组件使用了哪种设计模式?

 

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

74.Class.forName()办法有什么作用?

 

这个办法用来载入跟数据库建立连接驱动。

 

75.PreparedStatement比Statement有什么优势?

 

PreparedStatements是预编译,因而,性能会更好。

同步,不同查询参数值,PreparedStatement可以重用。

 

76.什么时候使用CallableStatement?

用来准备CallableStatement办法是什么?

 

CallableStatement用来执行存储过程。

存储过程是由数据库存储和提供。

存储过程可以接受输入参数,也可以有返回成果。

非常勉励使用存储过程,由于它提供了安全性和模块化。

准备一种CallableStatement办法是:

 

77.数据库连接池是什么意思?

 

像打开关闭数据库连接这种和数据库交互也许是很费时,特别是当客户端数量增长时候,会消耗大量资源,成本是非常高。

可以在应用服务器启动时候建立诸各种数据库连接并维护在一种池中。

连接祈求由池中连接提供。

在连接使用完毕后来,把连接归还到池中,以用于满足将来更多祈求。

 

远程办法调用(RMI) 

78.什么是RMI?

 

Java远程办法调用(Java RMI)是Java API对远程过程调用(RPC)提供面向对象等价形式,支持直接传播序列化Java对象和分布式垃圾回收。

远程办法调用可以看做是激活远程正在运营对象上办法环节。

RMI对调用者是位置透明,由于调用者感觉办法是执行在本地运营对象上。

看下RMI某些注意事项。

 

79.RMI体系构造基本原则是什么?

 

RMI体系构造是基于一种非常重要行为定义和行为实现相分离原则。

RMI容许定义行为代码和实现行为代码相分离,并且运营在不同JVM上。

 

80.RMI体系构造分哪几层?

 

RMI体系构造分如下几层:

 

存根和骨架层(Stub and Skeleton layer):

这一层对程序员是透明,它重要负责拦截客户端发出办法调用祈求,然后把祈求重定向给远程RMI服务。

 

远程引用层(Remote Reference Layer):

RMI体系构造第二层用来解析客户端对服务端远程对象引用。

这一层解析并管理客户端对服务端远程对象引用。

连接是点到点。

 传播层(Transport layer):

这一层负责连接参加服务两个JVM。

这一层是建立在网络上机器间TCP/IP连接之上。

它提供了基本连接服务,尚有某些防火墙穿透方略。

 

81.RMI中远程接口(Remote Interface)扮演了什么样角色?

 

远程接口用来标记哪些办法是可以被非本地虚拟机调用接口。

远程对象必要要直接或者是间接实现远程接口。

实现了远程接口类应当声明被实现远程接口,给每一种远程对象定义构造函数,给所有远程接口办法提供实现。

 

82.java.rmi.Naming类扮演了什么样角色?

 

java.rmi.Naming类用来存储和获取在远程对象注册表里面远程对象引用。

Naming类每一种办法接受一种URL格式String对象作为它参数。

 

83.RMI绑定(Binding)是什么意思?

 

绑定是为了查询找远程对象而给远程对象关联或者是注册后来会用到名称过程。

远程对象可以使用Naming类bind()或者rebind()办法跟名称有关联。

 

84.Naming类bind()和rebind()办法有什么区别?

 

bind()办法负责把指定名称绑定给远程对象,rebind()办法负责把指定名称重新绑定到一种新远程对象。

如果那个名称已经绑定过了,先前绑定会被替代掉。

 

85.让RMI程序能对的运营有哪些环节?

 

为了让RMI程序能对的运营必要要包括如下几种环节:

 

1. 编译所有源文献。

 2. 使用rmic生成stub。

 3. 启动rmiregistry。

 4. 启动RMI服务器。

 5. 运营客户端程序。

 

86.RMIstub扮演了什么样角色?

远程对象stub扮演了远程对象代表或者代理角色。

调用者在本地stub上调用办法,它负责在远程对象上执行办法。

当stub办法被调用时候,会经历如下几种环节:

 

1. 初始化到包括了远程对象JVM连接。

 2. 序列化参数到远程JVM。

 3. 等待办法调用和执行成果。

 

4. 反序列化返回值或者是办法没有执行成功状况下异常。

 5. 把值返回给调用者。

91.什么是Servlet?

 

Servlet是用来解决客户端祈求并产生动态网页内容Java类。

Servlet重要是用来解决或者是存储HTML表单提交数据,产生动态内容,在无状态HTTP合同下管理状态信息。

 

92.说一下Servlet体系构造。

所有Servlet都必要要实现核心接口是javax.servlet.Servlet。

每一种Servlet都必要要直接或者是间接实现这个接口,或者是继承javax.servlet.GenericServlet或者

javax.servlet.http.HTTPServlet。

最后,Servlet使用多线程可以并行为各种祈求服务。

 

93.Applet和Servlet有什么区别?

 

Applet是运营在客户端主机浏览器上客户端Java程序。

而Servlet是运营在web服务器上服务端组件。

applet可以使用顾客界面类,而Servlet没有顾客界面,相反,Servlet是等待客户端HTTP祈求,然后为祈求产生响应。

 

94.GenericServlet和HttpServlet有什么区别?

 

GenericServlet是一种通用合同无关Servlet,它实现了Servlet和ServletConfig接口。

继承自GenericServletServlet应当要覆盖service()办法。

最后,为了开发一种能用在网页上服务于使用HTTP合同祈求Servlet,你Servlet必要要继承自HttpServlet。

这里有Servlet例子。

 

95.解释下Servlet生命周期。

 

对每一种客户端祈求,Servlet引擎载入Servlet,调用它init()办法,完毕Servlet初始化。

然后,Servlet对象通过为每一种祈求单独调用service()办法来解决所有随日后自客户端祈求,最后,调用Servlet(译者注:

这里应当是Servlet而不是server)destroy()办法把Servlet删除掉。

 

96.doGet()办法和doPost()办法有什么区别?

 

doGet:

GET办法会把名值对追加在祈求URL背面。

由于URL对字符数目有限制,进而限制了用在客户端祈求参数值数目。

并且祈求中参数值是可见,因而,敏感信息不能用这种方式传递。

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 计算机硬件及网络

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1