转载华硕2008年Java⾯试题
1、将public、private、proteceted、frendly按着作⽤域的⼤⼩从⼤到⼩排列
作⽤域当前类同⼀package ⼦孙类其他package
public √ √ √ √
protected √ √ √ ×
friendly √ √ × ×
private √ × × ×
第⼀种解释:
功能差不多,都⽤来进⾏线程控制,他们最⼤本质的区别是:sleep()不释放同步锁,wait()释放同步缩. 还有⽤法的上的不同
是:sleep(milliseconds)可以⽤时间指定来使他⾃动醒过来,如果时间不到你只能调⽤interreput()来强⾏打断;wait()可以⽤notify()直接唤起.
第⼆种解释:
sleep是Thread类的静态⽅法。sleep的作⽤是让线程休眠制定的时间,在时间到达时恢复,也就是说sleep将在接到时间到达事件事恢复线程执⾏,例如:
try{ System.out.println("I'm going to bed"); Thread.sleep(1000); System.out.println("I wake up"); } catch(IntrruptedException e) { }
wait是Object的⽅法,也就是说可以对任意⼀个对象调⽤wait⽅法,调⽤wait⽅法将会将调⽤者的线程挂起,直到其他线程调⽤同⼀个对象的notify⽅法才会重新激活调⽤者,例如:
//Thread 1
try{ obj.wait();//suspend thread ify() is called } catch(InterrputedException e) { }
第三种解释:
这两者的施加者是有本质区别的. sleep()是让某个线程暂停运⾏⼀段时间,其控制范围是由当前线程决定,也就是说,在线程⾥⾯决定.好⽐如说,我要做的事情是 "点⽕->烧⽔->煮⾯",⽽当我点完⽕之后我不⽴即烧⽔,我要休息⼀段时间再烧.对于运⾏的主动权是由我的流程来控制.
⽽wait(),⾸先,这是由某个确定的对象来调⽤的,将这个对象理解成⼀个传话的⼈,当这个⼈在某个线程⾥⾯说"暂停!",也是 thisOBJ.wait(),这⾥的暂停是阻塞,还是"点⽕->烧⽔->煮饭",thisOBJ就好⽐⼀个监督我的⼈站在我旁边,本来该线程应该执⾏1后执⾏2,再执⾏3,⽽在2处被那个对象喊暂停,那么我就会⼀直等在这⾥⽽不执⾏3,但正个流程并没有结束,我⼀直想去煮饭,但还没被允许, 直到那个对象在某个地⽅说"通知暂停的线程启动!",也就是ify()的时候,那么我就可以煮饭了,这个被暂停的线程就会从暂停处继续执⾏.
其实两者都可以让线程暂停⼀段时间,但是本质的区别是⼀个线程的运⾏状态控制,⼀个是线程之间的通讯的问题
在java.lang.Thread类中,提供了sleep(),⽽java.lang.Object类中提供了wait(), notify()和notifyAll()⽅法来操作线程 sleep()可以将⼀个线程睡眠,参数可以指定⼀个时间。⽽wait()可以将⼀个线程挂起,直到超时或者该线程被唤醒。 wait有两种形式wait()和
wait(milliseconds). sleep和wait的区别有: 1,这两个⽅法来⾃不同的类分别是Thread和Object 2,最主要是sleep⽅法没有释放锁,⽽wait⽅法释放了锁,使得其他线程可以使⽤同步控制块或者⽅法。 3,wait,notify和notifyAll只能在同步控制⽅法或者同步控制块⾥⾯使⽤,⽽sleep可以在任何地⽅使⽤ synchronized(x){ x.notify() //或者wait() } 4,sleep必须捕获异常,⽽wait,notify和notifyAll不需要捕获异常
创建了两个对象。
⾸先在string池内,到?不创建string对象,否则创建,这样就⼀个string对象遇到new运算符号了,在内存上创建string对象,并将其返回给s,⼜⼀个对象所以总共是2个对象。
对于short s1 = 1; s1 = s1 + 1; 由于s1+1运算时会⾃动提升表达式的类型,所以结果是int型,再赋值给short类型s1时,编译器将报告需要强制转换类型的错误。
对于short s1 = 1; s1 += 1;由于 += 是java语⾔规定的运算符,java编译器会对它进⾏特殊处理,因此可以正确编译。
GC是垃圾回收器的意思。
Java有了GC,就不需要程序员去⼈⼯释放内存空间。当Java虚拟机发觉内存资源紧张的时候,就会⾃动地去清理⽆⽤变量所占⽤的内存空间。当然,如果需要,程序员可以在Java程序中显式地使⽤()来强制进⾏⼀次⽴即的内存清理。但是要注意的是,系统并不保证会⽴即进⾏释放内存。
request的作⽤:客户端的请求信息被封装在request对象中,通过它才能了解到客户的需求,然后做出响应。
response的作⽤:包含了响应客户请求的有关信息,但在JSP中很少直接⽤到它。
session的作⽤:session对象指的是客户端与服务器的⼀次会话,从客户连到服务器的⼀个WebApplication开始,直到客户端与服务器断开连接为⽌
7、Servlet中什么情况下调⽤doGet()⽅法?什么情况下调⽤doPost()⽅法?
8、error和Exception有什么不同?
9、解释其是什么意思:struts、spring、Hibernate、IoC、AOP、JSF、AJAX、ROR、Log4j、ant、JUnit、JFire
Struts:是采⽤Java Servlet/JavaServer Pages技术,开发Web应⽤程序的开放源码的framework。采⽤Struts能开发出基于MVC(Model-View-Controller)设计模式的应⽤构架。
下⾯还有两个,⼀个编程截取字符串的题,⼀个是继承的根据程序写结果,⽐较简单!
要求:编写⼀个截取字符串的函数,输⼊为⼀个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如“我ABC” 4,应该截为“我AB”,输⼊“我ABC汉DEF”,6,应该输出为“我ABC”⽽不是“我ABC+汉的半个”。
1 . /**
2. * 编写⼀个截取字符串的函数,输⼊为⼀个字符串和字节数,输出为按字节截取的字符串。
3. * 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输⼊"我ABC汉DEF",6,
4. * 应该输出为"我ABC"⽽不是"我ABC+汉的半个"。
5. */
6 . public static String subString(String str, int len){
7 . if (str == null && "" .equals(str)){
8 . return null ;
9 . }
10 . //将字符串中的char数组转换成指定编码⽅式的byte数组的函数
11 . byte [] strBytes = null ;
12 . try {
13 . strBytes = Bytes( "GBK" );
14 .
15 . } catch (UnsupportedEncodingException e) {
16 . e.printStackTrace();
17 . }java重写和重载的区别
18 . //得到字符串的长度,判断截取字符串的长度是否在判断的范围内,否则返回原串
19 . int strLen = strBytes.length;
20 . if (len >= strLen || len < 1 ){
21 . return str;
22 . }
23 . // System.out.println("strBytes.length="+strBytes.length);
24 . // System.out.println("len="+len);
25 . int count = 0 ;
26 . for ( int i= 0 ; i<len; i++){
27 . //将每个字节数组转换为整型数,以为后⾯根据值的正负来判断是否为汉字
28 . int value = strBytes[i];
29 . // System.out.print(value+",");
30 . //如果是汉字(负),则统计截取字符串中的汉字所占字节数
31 . if (value < 0 ){
32 . count++;
33 . }
34 . // System.out.println("zh count="+count);
35 . }
36 . //依据判断给定的字符串是否含有汉字,利⽤String类的substring()⽅法来截取不同的长度
37 .
38 . //根据所统计的字节数,判断截取到字符是否为半个汉字,奇数为半个汉字
39 . if (count % 2 != 0 ){
40 . //如果在截取长度为1时,则将该汉字取出,
41 . //其他情况则不截取这⾥的截取长度则按字符长度截取(截取字节长度数-截取汉字字节数/2-截取到的半个汉字的字节数)
42 . len = (len == 1 )?len:len-count/ 2 - 1 ;
43 . // System.out.println("处理后的len="+len);
44 .
45 . } else {
46 . //截取字符长度为字节长度-汉字所占字节长度/2(汉字占两个字节)
47 . len = len-(count/ 2 );
48 . }
49 . return str.substring( 0 ,len);
50 .
51 . }
52 . public static void main(String[] args) {
53 . //情况⼀:
54 . String inStr = "我ABC你" ;
55 . String str = subString(inStr, 6 );
56 . System.out.println(str); //我ABC
57 .
58 . //情况⼆:⾸字符为汉字
59 . inStr = "我ABC汉DEF" ;
60 . str = subString(inStr, 1 );
61 . System.out.println(str); //我
62 .
63 . //情况三:中间有连续汉字
64 . inStr = "我AB爱孩⼦CDEF" ;
65 . str = subString(inStr, 9 );
66 . System.out.println(str); //我AB爱孩
67 .
68 . //情况四:没有汉字
69 . inStr = "ABCDEF" ;
70 . str = subString(inStr, 4 );
71 . System.out.println(str); //ABCD
72 . }
2、说明队列和堆栈的不同
3、⾯向对象编程OOP和⾯向⽅⾯编程AOP有什么异同
4、什么是同步?什么是异步?
5、请说出你熟悉的设计模式并说明其意思(⾄少三种)
6、说明常⽤的UML中的图⽰是什么意思(⾄少三种)
好像还有两个,记不起来了~~
其他的还有逻辑思维题,C和软件测试⽅⾯,除了JAVA和基础,其他的都不会
其中逻辑和基础题是必做,java是java程序员必做,其他任选做
Java 常见⾯试题
1、Anonymous Inner Class (匿名内部类) 是否可以extends(继承)其它类,是否可以implements(实现)interface(接⼝)
答:匿名的内部类是没有名字的内部类。不能extends(继承) 其它类,但⼀个内部类可以作为⼀个接⼝,由另⼀个内部类实现
2、Static Nested Class 和 Inner Class的不同
答:Nested Class (⼀般是C++的说法),Inner Class (⼀般是JAVA的说法)。Java内部类与C++嵌套类最⼤的不同就在于是否有指向外部的引⽤上。注:静态内部类(Inner Class)意味着1创建⼀个static内部类的对象,不需要⼀个外部类对象,2不能从⼀个static内部类的⼀个对象访问⼀个外部类对象
3、STRING与STRINGBUFFER的区别。
答:STRING的长度是不可变的,STRINGBUFFER的长度是可变的。如果你对字符串中的内容经常进⾏操作,特别是内容要修改时,那么使⽤StringBuffer,如果最后需要String,那么使⽤StringBuffer的toString()⽅法4、&和&&的区别
答:&是位运算符,表⽰按位与运算,&&是逻辑运算符,表⽰逻辑与(and)
4、抽象类与接⼝?
答:抽象类与接⼝都⽤于抽象,但是抽象类(JAVA中)可以有⾃⼰的部分实现,⽽接⼝则完全是⼀个标识(同时有多重继承的功能)。
JAVA类实现序例化的⽅法是实现java.io.Serializable接⼝
Collection框架中实现⽐较要实现Comparable 接⼝和 Comparator 接⼝5、Collection 和 Collections的区别
答:Collection是集合类的上级接⼝,继承与他的接⼝主要有Set 和List.
Collections是针对集合类的⼀个帮助类,他提供⼀系列静态⽅法实现对各种集合的搜索、排序、线程安全化等操作
5、float型float f=3.4是否正确?
答:不正确。精度不准确,应该⽤强制类型转换,如下所⽰:float f=(float)3.46、什么时候⽤assert
答:assertion(断⾔)在软件开发中是⼀种常⽤的调试⽅式,很多开发语⾔中都⽀持这种机制。在实现中,assertion就是在程序中的⼀条语句,它对⼀个boolean表达式进⾏检查,⼀个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,系统将给出警告或退出。⼀般来说,assertion⽤于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提⾼性能,在软件发布后,assertion检查通常是关闭的
6、char型变量中能不能存贮⼀个中⽂汉字?为什么?
答:是能够定义成为⼀个中⽂的,因为java中以unicode编码,⼀个char占16位,所以放⼀个中⽂是没问题的8、und(11.5)等於多少? und(-11.5)等於多少
答: und(11.5)==und(-11.5)==-11;round⽅法返回与参数最接近的长整数,参数加1/2后求其floor
7、两个对象值相同(x.equals(y) == true),但却可有不同的hash code,这句话对不对
答:不对,有相同的hash code
8、当⼀个对象被当作参数传递到⼀个⽅法后,此⽅法可改变这个对象的属性,并可返回变化后的结果,那么这⾥到底是值传递还是引⽤传递
答:是值传递。Java 编程语⾔只有值传递参数。当⼀个对象实例作为⼀个参数被传递到⽅法中时,参数的值就是对该对象的引⽤。对象的内容可以在被调⽤的⽅法中改变,但对象的引⽤是永远不会改变的
9、swtich是否能作⽤在byte上,是否能作⽤在long上,是否能作⽤在String上
答:witch(expr1)中,expr1是⼀个整数表达式。因此传递给 switch 和 case 语句的参数应该是 int、 short、 char 或者 byte。long,string 都不能作⽤于swtich10、Java有没有goto
答:java中的保留字,现在没有在java中使⽤
10、⽤最有效率的⽅法算出2乘以8等於⼏
答:2 << 311、数组有没有length()这个⽅法? String有没有length()这个⽅法
答:数组没有length()这个⽅法,有length的属性。String有length()这个⽅法
11、try {}⾥有⼀个return语句,那么紧跟在这个try后的finally {}⾥的code会不会被执⾏,什么时候被执⾏,在return前还是后
答:会执⾏,在return前执⾏12、Overload和Override的区别。Overloaded的⽅法是否可以改变返回值的类型
答:⽅法的重写Overriding和重载Overloading是Java多态性的不同表现。重写Overriding是⽗类与⼦类之间多态性的⼀种表现,重载Overloading是⼀个类中多态性的⼀种表现。如果在⼦类中定义某⽅法与其⽗类有相同的名称和参数,我们说该⽅法被重写 (Overriding)。⼦类的对象使⽤这个⽅法时,将调⽤⼦类中的定义,对它⽽⾔,⽗类中的定义如同被"屏蔽"了。如果在⼀个类中定义了多个同名的⽅法,它们或有不同的参数个数或有不同的参数类型,则称为⽅法的重载 (Overloading)。Overloaded的⽅法是可以改变返回值的类型
12、是否可以继承String类
答:String类是final类故不可以继承13、Set⾥的元素是不能重复的,那么⽤什么⽅法来区分重复与否呢? 是⽤==还是equals()? 它们有何区别
13、构造器Constructor是否可被override
答:构造器Constructor不能被继承,因此不能重写Overriding,但可以被重载Overloading
14、给我⼀个你最常见到的runtime exception
答:常见的运⾏时异常有如下这些 ArithmeticException, ArrayStoreException, BufferOverflowException, BufferUnderflowException, CannotRedoException, CannotUndoException, ClassCastException, CMMException, ConcurrentModificationException, DOMException, EmptyStackException, IllegalArgumentException, IllegalMonitorStateException, IllegalPathStateException, IllegalStateException, ImagingOpException, IndexOutOfBoundsException, MissingResourceException, NegativeArraySizeException, NoSuchElementException, NullPointerException, ProfileDataException, ProviderException, RasterFormatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, UnsupportedOperationException
15、error和exception有什么区别
答:error 表⽰恢复不是不可能但很困难的情况下的⼀种严重问题。⽐如说内存溢出。不可能指望程序能处理这样的情况
exception 表⽰⼀种设计或实现问题。也就是说,它表⽰如果程序运⾏正常,从不会发⽣的情况
16、List, Set, Map是否继承⾃Collection接⼝
答: List,Set是,Map不是
17、abstract class和interface有什么区别
答:声明⽅法的存在⽽不去实现它的类被叫做抽象类(abstract class),它⽤于要创建⼀个体现某些基本⾏为的类,并为该类声明⽅法,但不能在该类中实现该类的情况。不能创建abstract 类的实例。然⽽可以创建⼀个变量,其类型是⼀个抽象类,并让它指向具体⼦类的⼀个实例。不能有抽象构造函数或抽象静态⽅法。Abstract 类的⼦类为它们⽗类中的所有抽象⽅法提供实现,否则它们也是抽象类为。取⽽代之,在⼦类中实现该⽅法。知道其⾏为的其它类可以在类中实现这些⽅法
接⼝(interface)是抽象类的变体。在接⼝中,所有⽅法都是抽象的。多继承性可通过实现这样的接⼝⽽获得。接⼝中的所有⽅法都是抽象的,没有⼀个有程序体。接⼝只可以定义static final成员变量。接⼝的实现与⼦类相似,除了该实现类不能从接⼝定义中继承⾏为。当类实现特殊接⼝时,它定义(即将程序体给予)所有这种接⼝的⽅法。然后,它可以在实现了该接⼝的类的任何对象上调⽤接⼝的⽅法。由于有抽象类,它允许使⽤接⼝名作为引⽤变量的类型。通常的动态联编将⽣效。引⽤可以转换到接⼝类型或从接⼝类型转换,instanceof 运算符可以⽤来决定某对象的类是否实现了接⼝
18、abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized
答:都不能
19、接⼝是否可继承接⼝? 抽象类是否可实现(implements)接⼝? 抽象类是否可继承实体类(concrete class)
答:接⼝可以继承接⼝。抽象类可以实现(implements)接⼝,抽象类是否可继承实体类,但前提是实体类必须有明确的构造函数
20、ArrayList和Vector的区别,HashMap和Hashtable的区别
答:就ArrayList与Vector主要从⼆⽅⾯来说.
⼀.同步性:Vector是线程安全的,也就是说是同步的,⽽ArrayList是线程序不安全的,不是同步的
⼆.数据增长:当需要增长时,Vector默认增长为原来⼀培,⽽ArrayList却是原来的⼀半
就HashMap与HashTable主要从三⽅⾯来说。
⼀.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接⼝的⼀个实现
⼆.同步性:Hashtable是线程安全的,也就是说是同步的,⽽HashMap是线程序不安全的,不是同步的
三.值:只有HashMap可以让你将空值作为⼀个表的条⽬的key或value
三、Java⾯试题
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论