1. 带答案的java面试题 欢迎参考 1.下面哪种基本类型是无符号的? 1. int 2. long 3. char 4. double 5. float
答案:c. char (所有的数字类型都是带符号的,char是唯一的无符号的整形) 2. Java同时支持多维数组和嵌套数组对吗?
答案:不对,Java只支持嵌套数组,不支持多维数组 3. public main(int number) { }是一个合法的方法吗? 答案: 正确的
4. public static final main(String[] args) {}是一个合法的方法吗? 是的
5. 一个没有方法的类可以在JVM执行吗?如果它的祖先类有main方法? 是的
6. GC是一个高优先级线程吗? 不对,GC是一个低优先级线程
7. 循环引用可以避免一个对象被垃圾回收吗? 不会
8. 如果在finalize方法里面发生了exception, 这个对象会被垃圾回收吗? finalize方法里面的Exception不能避免垃圾回收 2. 如下代码中finally中的代码会不会执行? try {
if (choice) { while (true) } else {
system .exit(1): } }finally {
codetocleanup(); }
答案: 会的,会在system.exit(1)之前执行
3. Java里面StringBuilder和StringBuffer有什么区别?
StringBuilder类是JDK 5.0引入的新的类, 实质上,StringBuffer是一个线程安全的StringBuilder, 如果只在同一个线程内对字符串进行操作, StringBuilder会更快一些, 如果是使用多线程进行操作,需要使用StringBuffer.
StringBuilder是非线程安全的,StringBuffer是线程安全的。 4. WebSphere 应用服务器都支持哪些认证?
WebSphere 应用服务器支持的认证方案包括基本认证、摘要认证、定制认证、证书认证。
基本认证:使用 HTTP 或 HTTPS 请求来自客户机的用户名和口令。 用普通文本将用于验证的信息发送给服务器验证。所有浏览器都支持基本认证。如果一个用户标识符和口令提供了足够的认证,那么请考虑使用基本认证。
摘要认证:使用 HTTP 或 HTTPS 请求来自客户机的用户名和口令。将用于验证的用户名和口令的加密形式(使用摘要)发送给服务器。并非所有浏览器都支持摘要认证。(当前仅 Sun HotJava 浏览器支持该认证方案)。如果浏览器不支持摘要认证,那么其用户将无法访问由该协议进行保护的资源。 定制认证:使用 HTTP 或 HTTPS 来请求使用 HTML 格式定制的客户机信息。由 CGI 和Servlet 将这些用于验证的信息用普通文本发送到服务器上。当需要除了标识符和口令之外的用户认证时,可使用定制认证。例如,可以请求一个社会安全号的用户认证。使用该协议,可建立 HTML 格式以询问用户数据。认证是由服务器端代码( CGI 和 Servlet )执行的,而不是由 IBM WebSphere 应用服务器运行时应用程序执行的。如果使用定制认证,请使用 HTTPS 保护数据。
证书认证:使用 HTTPS 以请求一个客户机证书。必须启用 SSL 客户机认证选项。将用于验证的信息发送给服务器。认证使用的数字证书具有很高的安全性,且证书认证通常对用户是透明的。系统或站点管理员会对客户机证书进行管理。通常这些任务是由证书权威服务器软件授权的,例如 IBM Vault Registry 产品。
(3) 组合认证方案和协议
正如前述,除非是在一个与安全无关的环境中,否则 HTTPS 通常更为可取。对于不同的安全性要求可以对方案和协议进行组合,策略如下:
• 对于基本安全性要求,使用基本、摘要或 HTTP 上的定制认证。 • 对于较高安全性要求,使用基本、摘要或 HTTPS 上的定制认证。 • 对于最高安全性要求,使用 HTTPS 上的证书认证。 5. Java提供了哪些企业应用编程接口?
1) JDBC(Java Database Connectivity)提供连接各种关系数据库的统一接口。
2) EJB(Enterprise JavaBeans)使得开发者方便地创建、部署和管理跨平台的基于组件的企业应用。 3) Java RMI(Java Remote Method Invocation)用来开发分布式Java应用程序。一个Java对象的方法能被远程Java虚拟机调用。这样,远程方法激活可以发生在对等的两端,也可以发生在客户端和服务器之间,只要双方的应用程序都是用Java写的。
4) Java IDL(Java Interface Definition Language) 提供与CORBA(Common Object Request Broker Architecture)的无逢的互操作性。这使得Java能集成异构的商务信息资源。
5) JNDI(Java Naming and Directory Interface)提供从Java平台到的统一的无逢的连接。这个接口屏蔽了企业网络所使用的各种命名和目录服务。
6) JMAPI(Java Management API)为异构网络上系统、网络和服务管理的开发提供一整套丰富的对象和方法。
7) JMS(Java Message Service)提供企业消息服务,如可靠的消息队列、发布和订阅通信、以及有关推拉(Push/Pull)技术的各个方面。
8) JTS(Java transaction Service)提供存取事务处理资源的开放标准,这些事务处理资源包括事务处理应用程序、事务处理管理及监控。
6. 什么是java序列化,如何实现java序列化
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。 序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements
Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流。 7. char型变量中能不能存贮一个中文汉字?为什么?
CHAR类型变量时能够定义成为一个中文的,因为java中以unicode编码,一个char占16个字节,所以放一个中文是没问题的。 8. 值传递还是引用传递?
当一个对象被当作参数传递到一个方法后,此方法可改变这个对象的属性,并可返回变化后的结果,那么这里到底是值传递还是引用传递?
是值传递。Java 编程语言只有值传递参数。当一个对象实例作为一个参数被传递到方法中时,参数的值就是对该对象的引用。对象的内容可以在被调用的方法中改变,但对象的引用是永远不会改变的。 9. Java如何读取CLOB字段?
CLOB字段是Oracle用来存储大容量内容的字段类型,CLOB字段可以存储最高4G的容量。 Java读取CLOB和读取普通类型字段有一点不一样,以下代码实现了如何读取CLOB字段: connection.setAutoCommit(false);
PreparedStatement preparedStatement=connection.prepareStatement(sql); ResultSet rs=preparedStatement.executeQuery(); Clob clob=rs.getClob(colName); if(clob!=null) {
Reader reader=((oracle.sql.CLOB)clob).getCharacterStream(); BufferedReader br=new BufferedReader(reader); String value=”\"; String line=”\";
while((line=br.readLine())!=null) {
value+=line+”\\\\r\\\\n“; } }
rs.close();
preparedStatement.close();
其中value就是java读取的CLOB字段的值。 10. Java如何获得ResultSet的总行数? 取得ResultSet行数的方法主要有以下几种: 1. 用ResultSet的getRow方法来取得总行数 2. 利用循环ResultSet元素的方法取得总行数
ResultSet rset = stmt.executeQuery(”select * from table”); int rowCount = 0; while(rset.next()) { rowCount++; }
3. 利用SQL语句来取得ResultSet的总行数
ResultSet rset = stmt.executeQuery(”select count(*) totalCount from yourTableName”); int rowCount = 0; if(rset.next()) {
rowCount=rset .getInt(”totalCount “); }
rowCount就是ResultSet的总行数。 哪家公司出了这个面试题 千万不要去! DTD的全程式Document Type Definition 文档类型定义 它是一套关于XML标记符的语法规则,是XML1.0版规格的一部分,也是用来验证XML文件格式的验证机制,是XML的一个组成部分。
DTD文档的组成部分有:元素的定义规则,元素间关系的定义规则,元素可使用的属性,可使用的实体或者符号规则。 11. 请介绍一下Ant?
Ant是一个基于Java的构建工具,与make类似,但是对于Java应用开发的跨平台问题有较好的支持,ant是java项目和其他很多开源java项目构建工具的较好选择,Ant可以用来编译你的Java源文件,构建部署用的jar文件和war文件,单元测试代码以及创建javadoc文档。 Ant的一些优点和特性:
1. Ant是基于Java, 使用Java 也应用与Java 2. 支持java工具(javac, javadoc 等等)
3. XML构建文件比MAKE文件更加以用,易读和以维护 4. Ant对扩展有较好的支持 5. 支持跨平台的Java开发
6. Ant比MAKE更加快,每一个命令都会起一个新的进程 7. Ant是在JVM里面进行运行的 8. 每一个命令都是在JVM里面进行
9. 像javac这些工具都是以线程运行而不是进程
10. 用ant编译大量的java源文件的会大大加快编译的速度 11. Ant的debug模式非常有用
12. 如何在Cookie里面保存Unicode和国际化字符?】
一个方法是在保存Cookie之之前,先用URLEncode对他进行编码:URLEncoder.encode(str); 在取出Cookie的时候则用URLDecoder.decode(str)对其进行反编码。 13. 如何打开WebSphere远程debug?
1. 登录WebSphere admin console.
2. 选择Server > Application Servers > server1(或者你的server)
3. 在Configure(配置)下,点debug service 4. 选中Enable service at server startup 5. 点Apply后者应用 6.保存并重启WebSphere
14. Web Service面试题:如何搭建Axis2的开发环境
1. 下载和安装Java (JDK1.4以上)。设置JAVA_HOME环境变量。 2. 下载Axis2并解压到目标文件夹。
3. 拷贝axis2.war文件到你的Servlet引擎的webapps目录。 4. 设置AXIS2_HOME环境变量到步骤3的axis2.war所在文件夹。
大部分情况下还需要为我们的服务建立一个WSDL文件,Axis2的Java2WSDL可以用来生成一个WSDL。如果要从一个Java类来生成一个WSDL,可按照以下步骤: a. 建立和编译你的Java类 (Windows)
%AXIS2_HOME%\\bin\\java2wsdl -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl (Linux)
$AXIS2_HOME/bin/java2wsdl -cp . -cn samples.quickstart.service.pojo.StockQuoteService -of StockQuoteService.wsdl
b. 使用命令行来生成WSDL:
生成命令行以后,你就可以按照你的需要进行修改,例如你可能需要添加一个定制的错误处理,或者改动生成的元素的名字。
15. Java如何调用外部Exe程序? 可以用一下代码来调用外部的EXE程序:
public class JavaInvokeExe {
public static void main(String args[]) {
Runtime rt = Runtime.getRuntime(); Process p = null;
String exeFilePath = “”; try{
exeFilePath = “D:/sample.exe”; p = rm.exec(exeFilePath); }catch(Exception e) {
//TODO do something here } } }
16. 请描述一下”is a”关系和”has a”关系
“is a”关系是指面向对象中的继承, “has a”关系是指面向对象中的包含。 这两种关系都允许你在你的新的类里面放置一个子对象。代码重用的两个重要技术是类继承和对象组装。 继承是一个单向的关系,例如 房子是建筑,但是建筑不是房子。 包含:例如房子有浴室但是浴室没有房子。 17. 面向对象编程是如何提高软件开发水平的?
1. 重用了以前的工作, 如使用继承,对象组合。
2. 真实的反应问题领域:变成对象真实的反应现实世界的对象 3. 模块化架构:对象,系统,框架等等组成了系统的模块。 18. 面向对象编程的优势是什么?
1. 面向对象编程的对象直接描述真实世界的对象,像Car, Jeep, Account等 2. 面向对象编程语言的一些特性如多态,继承和包装使得面向对象语言很强大。 19. 构造方法和其他方法的区别?怎么调用父类的构造方法?
构造方法必要跟类名相同且不能返回任何值,构造方法只能在对象创建时被调用一次,不同方法可以被调用很多次。
不同方法方法名可以取任何符合java命名规则的名字。 调用父类的构造方法可以使用关键字super.
20. Java面试题:Java平台和其他软件平台有什么不同?
1. Java平台是一个纯软件平台,它是运行在其他基于硬件的UNIX,Linux或者NT平台上的。 2. Java平台有两个组成元件: a. Java虚拟机(Java Virtual Machine): 它是一个可以移植到不同硬件平台的软件。Byte Codes是JVM的机器语言。
b. Java Application Programming Interface (Java API)- 一组用Java写出的并可以在JVM上运行的类。
21. Java面试题:为什么要用Java?
1. Java有内置的多线程,socket通信和内存管理(自动垃圾回收) 2. 面向对象(Ojbect Oriented)
3. 相比较其他语言有更好的可移植性
4. 支持基于Web的应用(Applet, Servlet和JSP), 支持分布式应用(Socket,RMI, EJB等),通过扩展的标准API,支持多种通讯协议(HTTP, JRMP等) 22. Java面试中常遇到的问题,也是需要注意的几点
1. Struts action 类不是线程安全的 2. JSP变量声明不是线程安全的。
3. 数据源如数据库连接需要及时关闭以避免内存和性能问题。 4. 抛出checked exception不会导致EJB transaction回滚。
23. META-INF文件夹中的MANIFEST.MF 有什么作用?
MANIFEST中的配置信息共有下面几类: 一. 一般属性
1. Manifest-Version
用来定义manifest文件的版本,例如:Manifest-Version: 1.0 2. Created-By
声明该文件的生成者,一般该属性是由jar命令行工具生成的,例如:Created-By: Apache Ant 1.5.1 3. Signature-Version 定义jar文件的签名版本 4. Class-Path
应用程序或者类装载器使用该值来构建内部的类搜索路径 二. 应用程序相关属性 1. Main-Class
定义jar文件的入口类,该类必须是一个可执行的类,一旦定义了该属性即可通过 java -jar x.jar来运行该jar文件。
三. 小程序(Applet)相关属性 1. Extendsion-List
该属性指定了小程序需要的扩展信息列表,列表中的每个名字对应以下的属性 2. 3. 该属性定义了jar文件的标识,例如Extension-Name: Struts Framework 五. 包扩展属性 1. Implementation-Title 定义了扩展实现的标题 2. Implementation-Version 定义扩展实现的版本 3. Implementation-Vendor 定义扩展实现的组织 4. Implementation-Vendor-Id 定义扩展实现的组织的标识 5. Implementation-URL : 定义该扩展包的下载地址(URL) 6. Specification-Title 定义扩展规范的标题 7. Specification-Version 定义扩展规范的版本 8. Specification-Vendor 声明了维护该规范的组织 9. Sealed 定义jar文件是否封存,值可以是true或者false 六. 签名相关属性 签名方面的属性我们可以来参照JavaMail所提供的mail.jar中的一段 Name: javax/mail/Address.class Digest-Algorithms: SHA MD5 SHA-Digest: AjR7RqnN//cdYGouxbd06mSVfI4= MD5-Digest: ZnTIQ2aQAtSNIOWXI1pQpw== 这段内容定义类签名的类名、计算摘要的算法名以及对应的摘要内容(使用BASE64方法进行编码) 24. 请说出这段代码执行后a和b的值分别是多少? int a = 22; int b = 11; a = b + (b = a) * 0; 答案:a = 11, b=22 25. 简述synchronized和java.util.concurrent.locks.Lock的异同? 主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。 26. Java面试题:说出如下代码的执行结果? 1. class MyClass 2. { 3. void myMethod(int i) {System.out.println(”int version”);} 4. void myMethod(String s) {System.out.println(”String version”);} 5. public static void main(String args[]) 6. { 7. MyClass obj = new MyClass(); 8. char ch = ‘c’; 9. obj.myMethod(ch); 10. } 11. } 请问这段代码能不能编译?如果能的话,在第九行那个方法将会被调用,int的那个方法还是String得那个方法? 答案:这段代码能编译,在第九行的方法调用中,char变量将扩展成int型,所以int那个方法会被调用。 27. Vector, ArrayList, HashTable, HashMap哪些是线程安全的?哪些不是? Vector and Hashtable are two collection classes that are inherently thread safe or synchronized; whereas, the classes ArrayList and HashMap are unsynchronized and must be `wrapped` via Collections.SynchronizedList or Collections.synchronizedMap if synchronization is desired. Vector和Hashtable是线程安全的,ArrayList和HashMap不是线程安全的而且必须要通过 Collections.SynchronizedList或者Collections.synchronizedMap来包装一下才能实现同步。 28. Boolean b = new Boolean(”abcde”); 会编译错误码? 答案:不会,在Boolean的构造函数中,除了”true”和”false”之外的字符串虽然不会造成编译错误,会返回false。 29. AssertionError 跟一下那个类是 “is – a”的关系? 1. RuntimeException 2. Error 3. VirtualMachineError 4. IllegalAccessException 5. Throwable 答案:2 The class AssertionError is an Error, which denotes an “incorrect condition” as opposed to an “unusual condition” (Exception). Since, the class Error descends from Throwable, AssertionError also has “is-a” relationship with Throwable. Here is the hierarchy – java.lang.Object | +-java.lang.Throwable | +-java.lang.Error | +-java.lang.AssertionError 因篇幅问题不能全部显示,请点此查看更多更全内容