admin 管理员组

文章数量: 887039


2024年1月11日发(作者:rabbitmq默认账号密码)

Java面试题以及答案

1.J2EE是什么?

答:Je22是Sun公司提出的多层(multi-diered),分布式(distributed),基于组件(component-base)的企业级应用模型(enterpriese application model).在这样的一个应用系统中,可按照功能划分为不同的组件,这些组件又可在不同计算机上,并且处于相应的层次(tier)中。所属层次包括客户层(clietn tier)组件,web层和组件,Business层和组件,企业信息系统(EIS)层。

2.J2EE是技术还是平台还是框架?

答:J2EE本身是一个标准,一个为企业分布式应用的开发提供的标准平台。

J2EE也是一个框架,包括JDBC、JNDI、RMI、JMS、EJB、JTA等技术。

的各个部分都有那些技术来实现?如何实现?

答:MVC是Model-View-Controller的简写。"Model" 代表的是应用的业务逻辑(通过JavaBean,EJB组件实现), "View" 是应用的表示面(由JSP页面产生),"Controller" 是提供应用的处理过程控制(一般是一个Servlet),通过这种设计模型把应用逻辑,处理过程和显示逻辑分成不同的组件实现。这些组件可以进行交互和重用。

6.C/S 与 B/S 区别:

答:有如下八个方面的不同:

(1)硬件环境不同: (2)对安全要求不同 (3)对程序架构不同 (4)软件重用不同 (5)系统维护不同

(6)处理问题不同 (7)用户接口不同 (8)信息流不同

7.什么是JNDI

答:(Java Naming & Directory Interface)JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。

8.什么是JMS

答:(Java Message Service)JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播

9.什么是JTA 答:(Java Transaction API)JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。

是什么

答:标准建模语言UML。用例图,静态图(包括类图、对象图和包图),行为图,交互图(顺序图,合作图),实现图

JAVA 基础

1.如何获得数组的长度?

答:数组名.length

5.&和&&的区别

答:&是位运算符,表示按位与运算;&&是逻辑运算符,表示逻辑与(and)

tion和Collections的区别

答:collection是集合类的上级接口,继承与它的接口主要是set和list ,其中list必须以特定的顺序容纳元素;而一个set不能包含重复的元素. 映射(Map)一系列"键-值"对.可以返回自己键的一个set,一个包含自己值的list,或者包含自己(键-值)对的一个list. 均可构建自己的反复器. collections类是针对集合类的一个帮助类.它提供一系列的静态方法对各种集合的搜索,排序,线程安全化等操作.

s = new String("xyz");创建了几个String Object***

答:两个,一个字符对象,一个字符对象引用对象

(11.5)和(-11.5)

答:前者等于12,后者等于-方法返回与参数最接近的长整数.参数加0.5,求其floor

10. short s1 = 1;s1 = s1+1;是否有错误? short s1 = 1;s1 += 1;是否有错误?

答:前者s1+1返回一个int型,需要强制类型转换. 后者正确.

种有没有goto?

答:有,为保留字.但是尚未使用.

和exception有什么区别?

答:error 表示恢复不是不可能但很困难的情况下的一种严重问题。比如说内存溢出。不可能指望程序能处理这样的情况 ; exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况

, Set, Map是否继承自Collection接口

答: List,Set是,Map不是

18.接口是否可继承接口? 抽象类是否可实现(implements)接口? 抽象类是否可继承实体类(concrete class)

答:接口可以继承接口。抽象类可以实现(implements)接口,抽象类可继承实体类,但前提是实体类必须有明确的构造函数

21.是否可以继承String类

答:String类是final类,故不可以继承

{}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后

答:会执行,在return前执行

23.用最有效率的方法算出2乘以8等於几

答:2 << 3

25.当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递

答:是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的.

是否能作用在byte上,是否能作用在long上,是否能作用在String上

答:witch(expr1)中,expr1是一个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、

char 或者 byte。long,string 都不能作用于swtich

是什么? 为什么要有GC

答:GC是垃圾收集的意思(Gabage Collection),内存处理是编程人员容易出现问题的地方,忘记或者错误的内存回收会导致程序或系统的不稳定甚至崩溃,Java提供的GC功能可以自动监测对象是否超过作用域从而达到自动回收内存的目的,Java语言没有提供释放已分配内存的显示操作方法。

型float f=3.4是否正确?

答:不正确。精度不准确,应该用强制类型转换,如下所示:float f=(float)3.4

与STRINGBUFFER的区别。

答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进行操作,特别是内容要修改时,那么使用StringBuffer,如果最后需要String,那么使用StringBuffer的toString()方法

是最基本的数据类型吗

答:基本数据类型包括byte、int、char、long、float、double、boolean和short。 类是final类型的,因此不可以继承这个类、不能修改这个类。为了提高效率节省空间,我们应该用StringBuffer类

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

答:异常表示程序运行过程中可能出现的非正常状态,运行时异常表示虚拟机的通常操作中可能遇到的异常,是一种常见运行错误。java编译器要求方法必须声明抛出可能发生的非运行时异常,但是并不要求必须声明抛出未被捕获的运行时异常。

38.说出ArrayList,Vector, LinkedList的存储性能和特性

答:ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList

使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快

和stack有什么区别****

答:栈是一种线形集合,其添加和删除元素的操作应在同一段完成。栈按照后进先出的方式进行处理。堆是栈的一个组成元素

中的异常处理机制的简单原理和应用

答:当JAVA程序违反了JAVA的语义规则时,JAVA虚拟机就会将发生的错误表示为一个异常。违反语义规则包括2种情况。一种是JAVA类库内置的语义检查。例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException。另一种情况就是JAVA允许程序员扩展这种语义检查,程序员可以创建自己的异常,并自由选择在何时用throw关键字引发异常。所有的异常都是le的子类。

43.你所知道的集合类都有哪些?主要方法?

答:最常用的集合类是 List 和 Map。 List 的具体实现包括 ArrayList 和 Vector,它们是可变大小的列表,比较适合构建、存储和操作任何类型对象的元素列表。 List 适用于按数值索引访问元素的情形。

Map 提供了一个更通用的元素存储方法。 Map 集合类用于存储元素对(称作"键"和"值"),其中每个键映射到一个值。

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

答:JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类。

47.一个".java"源文件中是否可以包括多个类(不是内部类)?有什么限制?

答:可以。必须只有一个类名与文件名相同。

中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是哪些类?

答:字节流,字符流。字节流继承于InputStream OutputStream,字符流继承于InputStreamReader

OutputStreamWriter。在包中还有许多其他的流,主要是为了提高性能和使用方便。

中会存在内存泄漏吗,请简单描述。

答:会。自己实现堆载的数据结构时有可能会出现内存泄露

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

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

51.静态变量和实例变量的区别?

答:static i = 10; //常量 class A a; a.i =10;//可变

53.是否可以从一个static方法内部发出对非static方法的调用?

答:不可以,如果其中包含对象的method();不能保证对象初始化.

54.写clone()方法时,通常都有一行代码,是什么?

答:Clone 有缺省行为,();他负责产生正确大小的空间,并逐位复制。

55.在JAVA中,如何跳出当前的多重嵌套循环?

答:用break; return 方法。

、Map、Set三个接口,存取元素时,各有什么特点?

答:List 以特定次序来持有元素,可有重复元素。Set 无法拥有重复元素,内部排序。Map 保存key-value

值,value可多值。

57.说出一些常用的类,包,接口,请各举5个

答:常用的类:BufferedReader BufferedWriter FileReader FileWirter String Integer

常用的包:

常用的接口:Remote List Map Document NodeList

59.什么是JNDI?

java命名目录接口

62.内部类要点?

静态内部类可以有静态成员,而非静态内部类则不能有静态成员。

静态内部类的非静态成员可以访问外部类的静态变量,而不可访问外部类的非静态变量。

非静态内部类的非静态成员可以访问外部类的非静态变量。

中有几种方法可以实现一个线程?用什么关键字修饰同步方法?答:有两种实现方法,分别是继承Thread类与实现Runnable接口 ,用synchronized关键字修饰同步方法

() 和 wait() 有什么区别?

答:sleep是线程类(Thread)的方法,导致此线程暂停执行指定时间,给执行机会给其他线程,但是监控状态依然保持,到时后会自动恢复。调用sleep不会释放对象锁。

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

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

答:如果数据将在线程间共享。例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就是共享数据,必须进行同步存取。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。

66.启动一个线程是用run()还是start()?

答:启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM调度并执行。这并不意味着线程就会立即运行。run()方法可以产生必须退出的标志来停止一个线程。

67.当一个线程进入一个对象的一个synchronized方法后,其它线程是否可进入此对象的其它方法?

答:不能,一个对象的一个synchronized方法只能由一个线程访问。

69.多线程有几种实现方法,都是什么?同步有几种实现方法,都是什么?

答:多线程有两种实现方法,分别是继承Thread类与实现Runnable接口

同步的实现方面有两种,分别是synchronized,wait与notify

70.线程的基本概念、线程的基本状态以及状态之间的关系

答:线程指在程序执行过程中,能够执行程序代码的一个执行单位,每个程序至少都有一个线程,也就是程序本身。 Java中的线程有四种状态分别是:运行、就绪、挂起、结束

71.简述synchronized和的异同 ?

答:主要相同点:Lock能完成synchronized所实现的所有功能

主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。


本文标签: 对象 方法 元素 线程