Java软件开发工程师入职测试题及参考解答(第1部分_第1页
Java软件开发工程师入职测试题及参考解答(第1部分_第2页
Java软件开发工程师入职测试题及参考解答(第1部分_第3页
Java软件开发工程师入职测试题及参考解答(第1部分_第4页
Java软件开发工程师入职测试题及参考解答(第1部分_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1.1 Java 软件开发工程师入职测试题及参考解答(第 1 部分)1.1.1 基础知识1、C+或Java中的异常处理机制的简单原理和应用。当 Java 程序违反了 Java 的语义规则时, JAVA 虚拟机就会将发生的错误表示为一个异 常。违反语义规则包括 2 种情况:(1)一种是Java类库内置的语义检查(Run timeException或者Un Check形式异常) 理解:什么是 RuntimeException或者UnCheck形式异常?例如数组下标越界,会引发IndexOutOfBoundsException;访问null的对象时会引发NullPointerException 等。

2、(2)只需要捕获 RuntimeException以外的异常(3)另一种情况就是Java允许程序员扩展这种语义检查 程序员可以创建自己的异常,并自由选择在何时用 throw 关键字引发异常。当然,所有的异常都是java.lang.Thowable ( Exception)的子类。2、Java的接口和C+的虚类的相同和不同处。 理解:什么是接口?为什么要提出接口?(描述抽象问题、达到多重继承的效果)接口如 何定义?如何实现接口?接口和抽象类有什么不同?由于Java不支持多继承,而有可能某个类或对象要使用分别在几个类或对象里面的方 法或属性,现有的单继承机制就不能满足要求。与继承相比,接口有更高的

3、灵活性,因为 接口中没有任何实现代码。当一个类实现了接口以后,该类要实现接口里面所有的方法,并且接口里面的属性在 默认状态下面都是public static、所有方法默认情况下是public形式的,一个类可以实现多 个不同的接口。3、垃圾回收的优点和原理、并考虑 2 种回收机制。理解:什么是 JVM ?在 Java 平台中为什么要提出 JVM (作用)? JVM 中的垃圾回收机 制?垃圾回收回收的时机?为什么要关闭数据库连接对象、文件流、socket流等对象?(1)Java语言中一个显著的特点就是引入了垃圾回收机制这使C+程序员最头疼的内存管理的冋题迎刃而解,它使得Java程序员在编写程序的时

4、候不再需要考虑内存管理。垃圾回收可以有效的防止内存泄露,有效的使用可以使用的内存。(2)垃圾回收器通常是作为一个单独的低级别的线程运行 因此不可预知的情况下对内存堆中已经死亡的或者长时间没有使用的对象进行清楚和 回收,程序员不能实时的调用垃圾回收器对某个对象或所有对象进行垃圾回收。回收机制 有分代复制垃圾回收和标记垃圾回收,增量垃圾回收等。4、请说出你所知道的线程同步的方法。(1)对于单线程理解什么是线程?主要的作用?(产生出异步的执行效果实现并发的功能)在 Java 程 序中如何创建出线程?写出示例代码class MyThread extendsThreadpublic void run()

5、class MyFrameThread extends JFrame implementsRunnablepublic void run()(2)对于多线程访问“ 共享数据 ”理解 什么是多线程同步多个不同的线程同时多某个(异步)?在什么时候需要进行线 程同步(应用场合)?为什么要同步?如何实现线程同步( synchronized控制?如何同 步调度?进行不同的线程同步的实现方法有什么差别?( 1) wait() :使一个线程处于等待状态,并且释放所持有的对象的lock 。(2)sleep():使一个正在运行的线程处于睡眠状态,是一个静态方法,调用此方法要捕捉 InterruptedExcep

6、tion 异常。(3)notify():唤醒一个处于等待状态的线程,注意的是在调用此方法的时候,并不能确切 的唤醒某一个等待状态的线程,而是由 JVM 确定唤醒哪个线程,而且不是按优先级。( 4)notityAll() :唤醒所有处入等待状态的线程,注意并不是给所有唤醒线程一个对象的 锁,而是让它们竞争。5、请讲一讲C+中的析构函数和虚函数的用法和作用。Java中没有提供析构函数和虚函数,但提供有类似的方法一一终结方法和抽象方法。6、Error 与 Exception有什么区别?(1)Error表示系统级的错误(致命错误,它会导致运行系统程序不能再继续执行)和程 序不必处理的异常Error表示

7、恢复不是不可能,但很困难的情况下的一种严重问题。比如说内存溢出。不 可能指望程序能处理这样的情况。(2) Exception表示需要捕捉或者需要程序进行处理的异常(Check形式的异常) Exception表示一种设计或实现问题。也就是说,它表示如果程序运行正常,从不会发生的情况。ExceptionCheck (必须在程序中要捕获)、Un Check ( Run timeExceptio n,可以在程序中不捕获)7、 在Java中一个类被声明为final类型,表示了什么意思?提供它的目的?理解:正确区分Java语言中的final关键字的不同的用法?为什么要采用 final限制某个方法 或者某个

8、类?(1)final float Pl=3.1415926f;(2)final void fun()(3)finalpublic class MyClass public class HeClass extendsMyClass 表示该类不能被继承(无子孙的类)。提供一些标准化功能的实现类(String)或者保护该类不会被非法“盗用”8、描述一下你最常用的编程风格一一程序中的“各种符号”的命名的规则(标准)lav日语吞的编程规范命名的规范 Ja阳的样式文件北码的编写hl格-秤堺的编逅规范(1)符号命名的规范(见名知意)类名称以大写字母开始、方法名和对象名都以小写字母开始、包名全部为小写字母(2

9、)Java程序的基本组成形式包定义语句;一系列的import语句;类的定义语句各个成员属性定义;构造方法定义;普通的方法定义;(3)代码(语句)的编写风格层次缩进;每行只写一条语句;(4)程序的编写风格9、heap (数据堆家)和stack (数据栈旅馆)有什么区别(1)栈是一种线形集合(动态内存区)其添加和删除元素的操作应在同一段完成。栈按照“后进先出”的方式进行处理。比如程序中的局部变量或者普通的对象在函数中定义的一些基本类型的变量和对象的引用变量都在函数的栈内存中分配。另 外,当在一段代码块定义一个变量时,Java就在栈中为这个变量分配内存空间,当超过变 量的作用域后,Java会自动释放

10、掉为该变量所分配的内存空间,该内存空间可以立即被另 作他用。(2) 堆是栈的一个组成元素(静态全局内存区)一一由static限定的全局共享变量堆内存用来存放由new创建的对象和数组。在堆中分配的内存,由Java虚拟机的自动 垃圾回收器来管理在堆中产生了一个数组或对象后,还可以在栈中定义一个特殊的变量,让栈中这个变 量的取值等于数组或对象在堆内存中的首地址,栈中的这个变量就成了数组或对象的引用 变量。注意:栈与堆都是 Java 用来在内存中存放数据的地方。与 C+ 不同, Java 自动管理栈和 堆,程序员不能直接地设置栈或堆。10、 如果系统要使用超大整数(超过long长度范围),请你设计一个

11、数据结构来存储这种 超大型数字以及设计一种算法来实现超大整数加法运算。理解:long类型的变量的长度是多大? ( int 32位,float 64位,long 64位)11、 如果要设计一个图形系统,请你设计基本的图形元件(Point,Line,Rectangle,Triangle)的简单实现12、谈谈 final、 finally 和 finalize 的区别。( 1) final 修饰符(关键字)1)如果一个类被声明为 final ,意味着它不能再派生出新的子类, 不能作为父类被继承。因此一个类不能既被声明为abstract的,又被声明为final的。2)将变量或方法声明为final,可以

12、保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改。3)被声明为 final 的方法也同样只能使用,不能在子类中重写。( 2) finally 在异常处理时提供 finally 块( 一定会执行 )来执行任何 清除(释放资源及内 存空间)操作如果抛出一个异常, 那么相匹配的 catch 子句就会执行, 然后控制就会进入 finally 块 (如果有的话)。try/ 。return;catch(Exception e)fin ally(3)finalize对方法的修饰Java技术允许使用finalize()方法在垃圾收集器将对象从内存中清除

13、出去之前做必要 的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在Object类中定义的,因此所有的类都继承了它。子类覆盖finalize()方法以整理系统资源或者执行其他清理工作。finalize()方法是在垃圾收集器删除对象之前对这个对 象调用的,但无法确切地保证垃圾回收器 何时调用该方法,也无法保证调用不同对象的方 法的顺序。13、Anonymous Inner Class (匿名内部类)是否可以 extends (继承)其它类,是否可以 implements (实现)interface接口 )?理解:什么是Java语言中的内部类?内部类的实现形式?(1

14、)什么是匿名的内部类匿名的内部类是没有名字的内部类(2)匿名的内部类和有名内部类的编程特性匿名的内部类不能exte nds(继承)其它类,但一个内部类可以作为一个接口,由另一 个内部类实现一一如下图所示:1 Jj WebBankAppclieritThree,javaM WebBankAppdientFour.javaimport org.apache * http * uti1 * Ent ityUtils; public class VebBankAppclientFour 但有名的内部类是可以继承的一一如下图所示:class XXXclass YYY extends java.io*工口

15、芒说匸S匸工亡3OverridepuJol ic int read () throws IOException / TODO AulOgenerated method SLub return 0;(3)匿名内部类和有名内部类定义内部类的目的在于隐藏类名,减少全局的标识符,从而限制用户能否使用该类建立对象。这样可以提高类的抽象能力,并且强调了两个类(外围类和内部类)之间的主从关系。 匿名内部类public class T1 public static void main(String args) new Thread() public void run() System.out.println(

16、runing);.start();有名内部类public class OuterSomeOneClass private static final class NestThread extends Thread public void run() System.out.println(runing);内部类能访问外部类的所有数据,包括 private 的成员数据因为嵌套类名与它的外 围类的对象成员名具有相同的访问权限规则;甚至如果一个内部类是在一个方法内的话, 方法的局部变量在内部类中也可以使用。从作用域的角度看,嵌套类被隐藏在外围类之中,该类名只能在外围类中的成员方法 中被使用。(4) 应用

17、场合 匿名内部类和有名内部类的应用效果差别不大,主要在事件监听和线程应用中经常使 用。14、Static Nested Class (嵌套类)和Inner Class (内部类)的不同,说得越多越好 (面试 题有的很笼统 )(1) 静态内部类和普通内部类Nested Class (一般是 C+ 的说法),Inner Class (一般是 JAVA 的说法)。Java 内部类与C+嵌套类最大的不同就在于是否有指向外部的引用上在Java中不允许从一个static内部类的一个对象访问一个外部类对象。(2)静态内部类(Staticlnner Class)的编程特性1)创建一个static内部类的对象,

18、不需要一个外部类对象2)不能从一个static内部类的一个对象访问一个外部类对象 ( 3)静态内部类的代码示例public class OutClasspublic int outld;public String outName;public static class lnnerStaticClasspublic int innerld; public String innerName;( 4)普通内部类的代码示例public class OutClasspublic int outld;public String outName;public class lnnerStaticClasspu

19、blic int innerld;public String innerName;15、&和& 的区别( 1)两者是不同功能的运算符&是位运算符。 & 是布尔逻辑运算符(也包括“ |”和“ |”)(2)&的结果是“布尔”类型的值(true或者false)pilbli void init ) throws ServletException int x=l;int y=2;int zxi;jj The operator M is undfind f*r the rgMunt tjfpe (5) int intPress : F27 fcx focuspublic void inic() throw

20、s ServlecExceptian int x=l;int y=2:boolean z=(xl)4(y2);piiblia void init;() 七brows ServletExcep匸iciii x=l;尸2;(3)在Java中是不允许直接将逻辑运算的结果赋值为整数变量inti ut16、HashMap 和 Hashtable 的区别。Java中的集合:(1)Java有哪些集合(2)各个集合之间有什么差别(List、Set、Map)(1) 它们都属于Map接口的实现类,实现了将“唯一键”(不允许出现同名的键名)映 射到特定的值上。(2) 其中的HashMap类没有分类或者排序、并且它允

21、许一个null键和多个null值。(3)Hashtable类似于 Hash Map,但是不允许 null键和n ull值。它也比 HashM ap慢, 因为它是线程同步的(已经同步的功能)。class MyServlet exte nds HttpServlet Hashtableon eHashtable =new Hashtable ();public void doGet(HttpServletRequest request,HttpServletResp onse resp on se)HashMap oneHashMap =new HashMap (); 仃、Collection 和

22、 Collections的区别(1) Collections 是个 java.util 包中的一个 Util 工具类,它包含有各种有关集合操作的(实 用的)静态方法。(2) Collection 是个 java.util 包中的一个接口,它是各种集合结构的父接口。18、什么时候用 assert( 1)断言是一个包含布尔表达式的语句在执行这个语句时假定该表达式为true,如果表达式计算为false,那么系统会报告一个 Assertionerror。它主要是用于调试目的:assert(a 0); / throws an Assertionerror if a = 0(2)断言可以有两种形式:ass

23、ert Expression1 ;assert Expression1 : Expression2 ;其中的 Expression1 应该总是产生一个布尔值, 而 Expression2 可以是得出一个值的任意表 达式。这个值用于生成显示更多调试信息的 String 消息。(3)断言在默认情况下是禁用的1)要在编译时启用断言,需要使用 source 1.4 标记: javac -source 1.4 Test.java2)要在运行时启用断言,可使用-enableassertions或者-ea标记。3)要在运行时选择禁用断言,可使用 -da 或者 -disableassertions 标记。4)

24、要系统类中启用断言,可使用 -esa 或者 -dsa 标记。还可以在包的基础上启用或 者禁用断言。可以在预计正常情况下不会到达的任何位置上放置断言。断言可以用于验证传递给私 有方法的参数。不过,断言不应该用于验证传递给公有方法的参数,因为不管是否启用了 断言,公有方法都必须检查其参数。不过,既可以在公有方法中,也可以在非公有方法中 利用断言测试后置条件。另外,断言不应该以任何方式改变程序的状态。19、GC 是什么 ? 为什么要有 GC?(1)GC 是垃圾收集器Java 程序员不用担心内存管理,因为垃圾收集器会自动进行管理。要请求垃圾收集,(2)可以调用下面的方法之一进行强制垃圾收集1)Syst

25、em.gc()2)Runtime.getRuntime().gc()20、String s = new String(xyz);创建了几个 String 类型的对象两个对象,其中一个是“ xyx”,另一个是指向“ xyx”的引用对象s。因此,在实际编 程中少用下面形式的代码:System.out.println( Xxx”+string+”abcdefg);public void() throws Servlet Except ion String 51- T,xyzn; 引用Suring s2= new Scring ( xyzfl);.扌善pilblic void init () thro

26、ws ServleLExcepcion S匸ring sl= rxyzR; 引用String s2= new String ( xyzN) ; z1/拷贝System, out -print In TrKx xn+s2 + ,Ta)cdefgn);pzitolic void init ) throws SexvietException String al= xyz: 引用String 52= new String (xyz*) ; /拷贝StringBuffer oneSvringBufer=new StringBuffer): oneSringBuf fer * append (r,xxx)

27、;oneStringBuffer.append(s2);Sys Lem*。艺匸匸Min 匸In (T,zxxr,+32+abctiefg,T);注意:String和StringBuffer之间的差别。21、Math.round(11.5)等于多少? Math.round(-11.5)等于多少?Math.round(11.5)返回( long) 12,Math.round(-11.5)返回(Iong)-11;这种舍入方法叫做银行家舍入(Ba nkersRou nc),22、short a = 1;a =a + 1;有什么错? short a = 1; a += 1 有什么错?本题主要考查Java

28、中的“数据类型转换”和“不同数据类型正确的赋值”public class WebBanlcAppclientFour public WebBemkAppc 1 ien匸Foul:) tlir(nrs ClieHttpCHttpHHttpHCredeUsernshort a = 1; Type mismatch:匚annot convert from ini to short2 quick fixes available:(质 Add vast to short0 6日nqe type oF 日t口 讹Press HF2 For Focuspublic WebBanAppclientFour()

29、 throws ClientPuotocolExcept ion, IOExcept ion short a = 1;旦=(short)(a +1);short a = 1; a = a + 1;有错,a是short型,a +1是int型,不能显式转化为 short型。可修改为 a =(short)(a + 1)。shorta = 1; a += 1 正确。pubXic VebBankAppclientrourthrows ClientProtocolException IOException short a = 1;a += 1;复合赋值E1 op= E2等价于简单赋值E1 = (T)(E1

30、)op(E2),其中T是E1的类型,除 非E1只被计算一次。因此,本示例为:a =(short)(a + 1);23、sleep()和 wait()有什么区别?(1) sleep()方法是使线程停止一段时间的方法在sleep时间间隔期满后,线程不一定立即恢复执行。这是因为在那个时刻,其它线程可能正在运行而且没有被调度为放弃执行,除非(a)醒来”的线程具有更高的优先级(b)正在运行的线程因为其它原因而阻塞。(2) wait()是线程交互时,如果线程对一个同步对象x发出一个wait()调用,该线程会暂 停执行,被调对象进入等待状态,直到被唤醒(notify()或等待时间到。24、Java语言中有没

31、有goto?gotojava中的保留字,现在没有在java中使用。public void Lmt () throws Servletr!xception int x;Syntax error oil token goto assert expectedPrwss F2 for focud可以采用break语句代替。如下的代码示例:target:for(int i=1; i10)break target;public void init() throws ServietExceptian Itarget:for(int i=l; iia)break, target;25、数组有没有length(

32、)这个方法? String有没有length()这个方法?数组没有length()这个方法,有length的属性;String有有length()这个方法。26、Overload (重载)和Override (重写)的区别。Overloaded的方法是否可以改变返回 值的类型 ?(1) 方法的重写Overriding和重载Overloading是Java多态性的不同表现重写 Overriding 是父类与子类之间多态性的一种表现,重载 Overloading 是一个类中多 态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写(Overriding) 。子类的对象

33、使用这个方法时,将调用子类中的定义,对它而言,父类中的定 义如同被 “屏蔽”了。如果在一个类中定义了多个同名的方法,它们或有不同的参数个数或 有不同的参数类型,则称为方法的重载 (Overloading)。class SomeOneClasspublic int add(int x, int y)return x+y;public float add(float x, float y)return x+y;(2) Overloaded的方法是可以改变返回值的类型。class SomeOneClasspublic int add(int x, int y)return x+y;class Som

34、eOneSubClass extends SomeOneClasspublic int add(int x, int y)return x-y;27, 给我一个你最常见到的 Runtimeexception (可以不需要捕获)。ArithmeticException, ArrayStoreExcepti on, BufferOverflowExcepti on,BufferU nderflowExceptio n, Canno tRedoExcepti on, CannotUn doExcepti on, ClassCastException CMMExcepti on, Con curre

35、ntModificati on Exceptio n, DOMExcepti on, EmptyStackExceptio n, lllegalArgume ntExceptio n, lllegalMo ni torStateExceptio n, lllegalPathStateExceptio n, IllegalStateExceptio n,Imag in gOpExcepti on, IndexOutOfBoundsException Miss in gResourceExcepti on, NegativeArraySizeExceptio n, NoSuchEleme ntEx

36、cepti on,N ullPointerException, ProfileDataException, ProviderException, RasterFORMatException, SecurityException, SystemException, UndeclaredThrowableException, UnmodifiableSetException, Un supportedOperati on Excepti on28, List, Set, Map 是否继承自 Collection接口 ?List,Set是,而 Map 不是。Collection|-List| |-L

37、inkedList| |-ArrayList| LVector| LStackLSetMappHashtable|-HashMap-WeakHashMap29, 抽象类和接口有什么本质的区别?(1声明方法的存在而不去实现它的类被叫做抽象类(abstract class它用于要创建一个体现某些基本行为的类,并为该类声明方法,但不能在该类中实现 该类的情况。不能创建abstract类的实例。然而可以创建一个变量,其类型是一个抽象类, 并让它指向具体子类的一个实例。不能有抽象构造函数或抽象静态方法。Abstract类的子类为它们父类中的所有抽象方法提供实现,否则它们也是抽象类为。取而代之,在子类中 实现该方法。知道其行为的其它类可以在类中实现这些方法。(2)接口( in terface )是抽象类的变体在接口中,所有方法都是抽象的。多继承性可通过实现这样的接口而获得。接口中的 所有方法都是抽象的,没有一个有程序体。接口只可以定义static final成员变量。接口的实 现与子类相似,

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论