《java的面试题目.doc》由会员分享,可在线阅读,更多相关《java的面试题目.doc(44页珍藏版)》请在淘文阁 - 分享文档赚钱的网站上搜索。
1、如有侵权,请联系网站删除,仅供学习与交流java的面试题目【精品文档】第 44 页一、面向对象的三个基本特征 2、方法重载和方法重写的概念和区别 3、接口和内部类、抽象类的特性 4、文件读写的基本类 *5、串行化的注意事项以及如何实现串行化 6、线程的基本概念、线程的基本状态以及状态之间的关系 7、线程的同步、如何实现线程的同步 8、几种常用的数据结构及内部实现原理。 9、Socket通信(TCP、UDP区别及Java实现方式) *10、Java的事件委托机制和垃圾回收机制 11、JDBC调用数据库的基本步骤 *12、解析XML文件的几种方式和区别 13、Java四种基本权限的定义 14、Ja
2、va的国际化二、JSP 1、至少要能说出7个隐含对象以及他们的区别 * 2、forward 和redirect的区别 3、JSP的常用指令三、servlet 1、什么情况下调用doGet()和doPost()? 2、servlet的init()方法和service()方法的区别 3、servlet的生命周期 4、如何现实servlet的单线程模式 5、servlet的配置 6、四种会话跟踪技术四、EJB *1、EJB容器提供的服务 主要提供声明周期管理、代码产生、持续性管理、安全、事务管理、锁和并发行管理等服务。 2、EJB的角色和三个对象 EJB角色主要包括Bean开发者 应用组装者 部署者
3、 系统管理员 EJB容器提供者 EJB服务器提供者 三个对象是Remote(Local)接口、Home(LocalHome)接口,Bean类 2、EJB的几种类型 会话(Session)Bean ,实体(Entity)Bean 消息驱动的(Message Driven)Bean 会话Bean又可分为有状态(Stateful)和无状态(Stateless)两种 实体Bean可分为Bean管理的持续性(BMP)和容器管理的持续性(CMP)两种 3、bean 实例的生命周期 对于Stateless Session Bean、Entity Bean、Message Driven Bean一般存在缓冲池
4、管理,而对于Entity Bean和Statefull Session Bean存在Cache管理,通常包含创建实例,设置上下文、创建EJB Object(create)、业务方法调用、remove等过程,对于存在缓冲池管理的Bean,在create之后实例并不从内存清除,而是采用缓冲池调度机制不断重用实例,而对于存在Cache管理的Bean则通过激活和去激活机制保持Bean的状态并限制内存中实例数量。 4、激活机制 以Statefull Session Bean 为例:其Cache大小决定了内存中可以同时存在的Bean实例的数量,根据MRU或NRU算法,实例在激活和去激活状态之间迁移,激活机
5、制是当客户端调用某个EJB实例业务方法时,如果对应EJB Object发现自己没有绑定对应的Bean实例则从其去激活Bean存储中(通过序列化机制存储实例)回复(激活)此实例。状态变迁前会调用对应的ejbActive和ejbPassivate方法。 5、remote接口和home接口主要作用 remote接口定义了业务方法,用于EJB客户端调用业务方法 home接口是EJB工厂用于创建和移除查找EJB实例 6、客服端调用EJB对象的几个基本步骤一、 设置JNDI服务工厂以及JNDI服务地址系统属性二、 查找Home接口三、 从Home接口调用Create方法创建Remote接口四、 通过Rem
6、ote接口调用其业务方法五、数据库 1、存储过程的编写 2、基本的SQL语句六、weblogic1、 如何给weblogic指定大小的内存? 在启动Weblogic的脚本中(位于所在Domian对应服务器目录下的startServerName),增加set MEM_ARGS=-Xms32m -Xmx200m,可以调整最小内存为32M,最大200M2、 如何设定的weblogic的热启动模式(开发模式)与产品发布模式?可以在管理控制台中修改对应服务器的启动模式为开发或产品模式之一。或者修改服务的启动文件或者commenv文件,增加set PRODUCTION_MODE=true。3、 如何启动时
7、不需输入用户名与密码?修改服务启动文件,增加 WLS_USER和WLS_PW项。也可以在boot.properties文件中增加加密过的用户名和密码.4、 在weblogic管理制台中对一个应用域(或者说是一个网站,Domain)进行jms及ejb或连接池等相关信息进行配置后,实际保存在什么文件中?保存在此Domain的config.xml文件中,它是服务器的核心配置文件。5、 说说weblogic中一个Domain的缺省目录结构?比如要将一个简单的helloWorld.jsp放入何目录下,然的在浏览器上就可打入http:/主机:端口号/helloword.jsp就可以看到运行结果了? 又比如
8、这其中用到了一个自己写的javaBean该如何办?Domain目录服务器目录applications,将应用目录放在此目录下将可以作为应用访问,如果是Web应用,应用目录需要满足Web应用目录要求,jsp文件可以直接放在应用目录中,Javabean需要放在应用目录的WEB-INF目录的classes目录中,设置服务器的缺省应用将可以实现在浏览器上无需输入应用名。6、 如何查看在weblogic中已经发布的EJB?可以使用管理控制台,在它的Deployment中可以查看所有已发布的EJB 7、 如何在weblogic中进行ssl配置与客户端的认证配置或说说j2ee(标准)进行ssl的配置缺省安装
9、中使用DemoIdentity.jks和DemoTrust.jks KeyStore实现SSL,需要配置服务器使用Enable SSL,配置其端口,在产品模式下需要从CA获取私有密钥和数字证书,创建identity和trust keystore,装载获得的密钥和数字证书。可以配置此SSL连接是单向还是双向的。 8、在weblogic中发布ejb需涉及到哪些配置文件不同类型的EJB涉及的配置文件不同,都涉及到的配置文件包括ejb-jar.xml,weblogic-ejb-jar.xmlCMP实体Bean一般还需要weblogic-cmp-rdbms-jar.xml 9、EJB需直接实现它的业务接
10、口或Home接口吗,请简述理由.远程接口和Home接口不需要直接实现,他们的实现代码是由服务器产生的,程序运行中对应实现类会作为对应接口类型的实例被使用。 10、说说在weblogic中开发消息Bean时的persistent与non-persisten的差别persistent方式的MDB可以保证消息传递的可靠性,也就是如果EJB容器出现问题而JMS服务器依然会将消息在此MDB可用的时候发送过来,而nonpersistent方式的消息将被丢弃。 11、说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法 Session Facade Pattern:使用SessionBea
11、n访问EntityBeanMessage Facade Pattern:实现异步调用EJB Command Pattern:使用Command JavaBeans取代SessionBean,实现轻量级访问Data Transfer Object Factory:通过DTO Factory简化EntityBean数据提供特性Generic Attribute Access:通过AttibuteAccess接口简化EntityBean数据提供特性Business Interface:通过远程(本地)接口和Bean类实现相同接口规范业务逻辑一致性架构的设计好坏将直接影响系统的性能、可扩展性、可维护性
12、、组件可重用性及开发效率。项目越复杂,项目队伍越庞大则越能体现良好设计的重要性。一般Singleton模式通常有几种种形式:第一种形式:定义一个类,它的构造函数为private的,它有一个static的private的该类变量,在类初始化时实例话,通过一个public的getInstance方法获取对它的引用,继而调用其中的方法。public class Singleton private Singleton() /在自己内部定义自己一个实例,是不是很奇怪? /注意这是private 只供内部调用 private static Singleton instance = new Singleto
13、n(); /这里提供了一个供外部访问本class的静态方法,可以直接访问 public static Singleton getInstance() return instance; 第二种形式:public class Singleton private static Singleton instance = null; public static synchronized Singleton getInstance() /这个方法比上面有所改进,不用每次都进行生成对象,只是第一次 /使用时生成实例,提高了效率! if (instance=null) instancenew Singleto
14、n(); return instance; 其他形式:定义一个类,它的构造函数为private的,所有方法为static的。一般认为第一种形式要更加安全些 Hashtable和HashMap Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现 HashMap允许将null作为一个entry的key或者value,而Hashtable不允许 还有就是,HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。 最大的不同是
15、,Hashtable的方法是Synchronize的,而HashMap不是,在 多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。 Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。121、内部类可以引用他包含类的成员吗?有没有什么限制?一个内部类对象可以访问创建它的外部类对象的内容122、WEB SERVICE名词解释。JSWDL开发包的介绍。JAXP、JAXM的解释。SOAP、UDDI,WSDL解释。 Web ServiceWeb Service是基于网络的、分布式的模块化组件,它执
16、行特定的任务,遵守具体的技术规范,这些规范使得Web Service能与其他兼容的组件进行互操作。JAXP(Java API for XML Parsing) 定义了在Java中使用DOM, SAX, XSLT的通用的接口。这样在你的程序中你只要使用这些通用的接口,当你需要改变具体的实现时候也不需要修改代码。JAXM(Java API for XML Messaging) 是为SOAP通信提供访问方法和传输机制的API。WSDL是一种 XML 格式,用于将网络服务描述为一组端点,这些端点对包含面向文档信息或面向过程信息的消息进行操作。这种格式首先对操作和消息进行抽象描述,然后将其绑定到具体的网
17、络协议和消息格式上以定义端点。相关的具体端点即组合成为抽象端点(服务)。SOAP即简单对象访问协议(Simple Object Access Protocol),它是用于交换XML编码信息的轻量级协议。 UDDI 的目的是为电子商务建立标准;UDDI是一套基于Web的、分布式的、为Web Service提供的、信息注册中心的实现标准规范,同时也包含一组使企业能将自身提供的Web Service注册,以使别的企业能够发现的访问协议的实现标准。JAVA代码查错1.abstract class Name private String name; public abstract boolean isS
18、tupidName(String name) 大侠们,这有何错误?答案: 错。abstract method必须以分号结尾,且不带花括号。2.public class Something void doSomething () private String s = ; int l = s.length(); 有错吗?答案: 错。局部变量前不能放置任何访问修饰符 (private,public,和protected)。final可以用来修饰局部变量(final如同abstract和strictfp,都是非访问修饰符,strictfp只能修饰class和method而非variable)。3.ab
19、stract class Something private abstract String doSomething ();这好像没什么错吧?答案: 错。abstract的methods不能以private修饰。abstract的methods就是让子类implement(实现)具体细节的,怎么可以用private把abstractmethod封锁起来呢? (同理,abstract method前不能加final)。4.public class Something public int addOne(final int x) return +x; 这个比较明显。答案: 错。int x被修饰成f
20、inal,意味着x不能在addOne method中被修改。5.public class Something public static void main(String args) Other o = new Other(); new Something().addOne(o); public void addOne(final Other o) o.i+; class Other public int i;和上面的很相似,都是关于final的问题,这有错吗?答案: 正确。在addOne method中,参数o被修饰成final。如果在addOne method里我们修改了o的referen
21、ce(比如: o = new Other();),那么如同上例这题也是错的。但这里修改的是o的member vairable(成员变量),而o的reference并没有改变。6.class Something int i; public void doSomething() System.out.println(i = + i); 有什么错呢? 看不出来啊。答案: 正确。输出的是i = 0。int i属於instant variable (实例变量,或叫成员变量)。instant variable有default value。int的default value是0。7.class Someth
22、ing final int i; public void doSomething() System.out.println(i = + i); 和上面一题只有一个地方不同,就是多了一个final。这难道就错了吗?答案: 错。final int i是个final的instant variable (实例变量,或叫成员变量)。final的instant variable没有default value,必须在constructor (构造器)结束之前被赋予一个明确的值。可以修改为final int i = 0;。8.public class Something public static void
23、main(String args) Something s = new Something(); System.out.println(s.doSomething() returns + doSomething(); public String doSomething() return Do something .; 看上去很完美。答案: 错。看上去在main里call doSomething没有什么问题,毕竟两个methods都在同一个class里。但仔细看,main是static的。static method不能直接call non-static methods。可改成System.out
24、.println(s.doSomething() returns + s.doSomething();。同理,static method不能访问non-static instant variable。9.此处,Something类的文件名叫OtherThing.javaclass Something private static void main(String something_to_do) System.out.println(Do something .); 这个好像很明显。答案: 正确。从来没有人说过Java的Class名字必须和其文件名相同。但public class的名字必须和文
25、件名相同。10interface A int x = 0;class B int x =1;class C extends B implements A public void pX() System.out.println(x); public static void main(String args) new C().pX(); 答案:错误。在编译时会发生错误(错误描述不同的JVM有不同的信息,意思就是未明确的x调用,两个x都匹配(就象在同时import java.util和java.sql两个包时直接声明Date一样)。对于父类的变量,可以用super.x来明确,而接口的属性默认隐含为
26、public static final.所以可以通过A.x来明确。11.interface Playable void play();interface Bounceable void play();interface Rollable extends Playable, Bounceable Ball ball = new Ball(PingPang);class Ball implements Rollable private String name; public String getName() return name; public Ball(String name) this.na
27、me = name; public void play() ball = new Ball(Football); System.out.println(ball.getName(); 这个错误不容易发现。答案: 错。interface Rollable extends Playable, Bounceable没有问题。interface可继承多个interfaces,所以这里没错。问题出在interface Rollable里的Ball ball = new Ball(PingPang);。任何在interface里声明的interface variable (接口变量,也可称成员变量),默认
28、为public static final。也就是说Ball ball = new Ball(PingPang);实际上是public static final Ball ball = new Ball(PingPang);。在Ball类的Play()方法中,ball = new Ball(Football);改变了ball的reference,而这里的ball来自Rollable interface,Rollable interface里的ball是public static final的,final的object是不能被改变reference的。因此编译器将在ball = new Ball(
29、Football);这里显示有错。JAVA编程题1现在输入n个数字,以逗号,分开;然后可选择升或者降序排序;按提交键就在另一页面显示按什么排序,结果为,提供resetimport java.util.*;public class bycomma public static String splitStringByComma(String source) if(source=null|source.trim().equals() return null; StringTokenizer commaToker = new StringTokenizer(source,); String resul
30、t = new StringcommaToker.countTokens(); int i=0; while(commaToker.hasMoreTokens() resulti = commaToker.nextToken(); i+; return result; public static void main(String args) String s = splitStringByComma(5,8,7,4,3,9,1); int ii = new ints.length; for(int i = 0;is.length;i+) iii =Integer.parseInt(si); A
31、rrays.sort(ii); /asc for(int i=0;i=0;i-) System.out.println(iii); 2金额转换,阿拉伯数字的金额转换成中国传统的形式如:(¥1011)(一千零一拾一元整)输出。package test.format;import java.text.NumberFormat;import java.util.HashMap;public class SimpleMoneyFormat public static final String EMPTY = ; public static final String ZERO = 零; public s
32、tatic final String ONE = 壹; public static final String TWO = 贰; public static final String THREE = 叁; public static final String FOUR = 肆; public static final String FIVE = 伍; public static final String SIX = 陆; public static final String SEVEN = 柒; public static final String EIGHT = 捌; public stati
33、c final String NINE = 玖; public static final String TEN = 拾; public static final String HUNDRED = 佰; public static final String THOUSAND = 仟; public static final String TEN_THOUSAND = 万; public static final String HUNDRED_MILLION = 亿; public static final String YUAN = 元; public static final String J
34、IAO = 角; public static final String FEN = 分; public static final String DOT = .; private static SimpleMoneyFormat formatter = null; private HashMap chineseNumberMap = new HashMap(); private HashMap chineseMoneyPattern = new HashMap(); private NumberFormat numberFormat = NumberFormat.getInstance(); p
35、rivate SimpleMoneyFormat() numberFormat.setMaximumFractionDigits(4); numberFormat.setMinimumFractionDigits(2); numberFormat.setGroupingUsed(false); chineseNumberMap.put(0, ZERO); chineseNumberMap.put(1, ONE); chineseNumberMap.put(2, TWO); chineseNumberMap.put(3, THREE); chineseNumberMap.put(4, FOUR)
36、; chineseNumberMap.put(5, FIVE); chineseNumberMap.put(6, SIX); chineseNumberMap.put(7, SEVEN); chineseNumberMap.put(8, EIGHT); chineseNumberMap.put(9, NINE); chineseNumberMap.put(DOT, DOT); chineseMoneyPattern.put(1, TEN); chineseMoneyPattern.put(2, HUNDRED); chineseMoneyPattern.put(3, THOUSAND); ch
37、ineseMoneyPattern.put(4, TEN_THOUSAND); chineseMoneyPattern.put(5, TEN); chineseMoneyPattern.put(6, HUNDRED); chineseMoneyPattern.put(7, THOUSAND); chineseMoneyPattern.put(8, HUNDRED_MILLION); public static SimpleMoneyFormat getInstance() if (formatter = null) formatter = new SimpleMoneyFormat(); re
38、turn formatter; public String format(String moneyStr) checkPrecision(moneyStr); String result; result = convertToChineseNumber(moneyStr); result = addUnitsToChineseMoneyString(result); return result; public String format(double moneyDouble) return format(numberFormat.format(moneyDouble); public Stri
39、ng format(int moneyInt) return format(numberFormat.format(moneyInt); public String format(long moneyLong) return format(numberFormat.format(moneyLong); public String format(Number moneyNum) return format(numberFormat.format(moneyNum); private String convertToChineseNumber(String moneyStr) String res
40、ult; StringBuffer cMoneyStringBuffer = new StringBuffer(); for (int i = 0; i 0; i-) cMoneyStringBuffer.insert(i, chineseMoneyPattern.get(EMPTY + moneyPatternCursor); moneyPatternCursor = moneyPatternCursor = 8 ? 1 : moneyPatternCursor + 1; String fractionPart = cMoneyStringBuffer.substring(cMoneyStr
41、ingBuffer.indexOf(.); cMoneyStringBuffer.delete(cMoneyStringBuffer.indexOf(.), cMoneyStringBuffer.length(); while (cMoneyStringBuffer.indexOf(零拾) != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(零拾), cMoneyStringBuffer.indexOf(零拾) + 2, ZERO); while (cMoneyStringBuffer.indexOf(零佰) != -1)
42、cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(零佰), cMoneyStringBuffer.indexOf(零佰) + 2, ZERO); while (cMoneyStringBuffer.indexOf(零仟) != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(零仟), cMoneyStringBuffer.indexOf(零仟) + 2, ZERO); while (cMoneyStringBuffer.indexOf(零万) != -1) cMoney
43、StringBuffer.replace(cMoneyStringBuffer.indexOf(零万), cMoneyStringBuffer.indexOf(零万) + 2, TEN_THOUSAND); while (cMoneyStringBuffer.indexOf(零亿) != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(零亿), cMoneyStringBuffer.indexOf(零亿) + 2, HUNDRED_MILLION); while (cMoneyStringBuffer.indexOf(零零) != -1) cMoneyStringBuffer.replace(cMoneyStringBuffer.indexOf(零零), cMoneyStringBuffer.indexOf(零零) + 2, ZERO); if (cMoneyStringBuffer.lastIndexOf(ZERO) = cMoneyStringBuffer.length() - 1) cMoneyStringB
限制150内