最新java面试题.doc

上传人:文库蛋蛋多 文档编号:2386676 上传时间:2023-02-17 格式:DOC 页数:41 大小:107.50KB
返回 下载 相关 举报
最新java面试题.doc_第1页
第1页 / 共41页
最新java面试题.doc_第2页
第2页 / 共41页
最新java面试题.doc_第3页
第3页 / 共41页
最新java面试题.doc_第4页
第4页 / 共41页
最新java面试题.doc_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《最新java面试题.doc》由会员分享,可在线阅读,更多相关《最新java面试题.doc(41页珍藏版)》请在三一办公上搜索。

1、下列各题ABCD四个选顼中,只有一个选项是正确的,请将正确选项填写在答题纸上(1)下列关于栈的描述中错误的是( ) A. 栈是先进后出的线性表 B 栈只能顺序存储 C 栈具有记忆作用 D 对栈的插入弓删除操作中,不需要改变栈底指针正确答案: B分析: 栈是链式存储的(2)对于长度为n的线性表,在最坏情况下,下列各排序法所对应的比较次数中正确的是( ) A 冒泡排序为n/2 B 冒泡排序为n C 快速排序为n D 快速排序为n(n-l)/2正确答案: D分析: 想想快速排序,每次都会选取线性表的轴值,随后以此轴值划分为两个子线性表再分别进行快排,在最坏情况下,也就是说每次选出的线性表轴值完全不能

2、将这个线性表划分为两个子线性表。那么此时快速排序退化为冒泡排序了。那么第一趟排序时,轴值(线性表的中间位置)被选出,这个值绝对是这个线性表中最大的(不然也不能是最坏情况),其他值都比他小,那么线性表现在分为完全不对等的两段(一段是0,另一段是n - 1),一段是这个值,一段是其他值。同样第二趟排序在刚才剩下的值中选中间值(剩余值中最大的那个),又分为不对等两段,依次递推。也就是说每次都比较了N - 1个元素(轴值选出后都与它比较大小),那么肯定是比较了n - 1次(如第一次先挑了个轴值,然后剩下n - 1比较),n代表当前子线性表中元素个数由此最白痴的数列问题出现了,如下1 + 2 + 3 +

3、 . + n - 2 + n - 1 = n(n - 1) / 2还有一种投机取巧的方法,在最垃圾情况下既然快排变为冒泡,那由时间复杂度知其必为o(n 2)的复杂度,答案中ABC都是线性时间复杂,显然错误(3)下列对于线性链表的描述中正确的是( ) A 存储空间间不一定是连续,且各元素的存储顺序是任意的 B 存储空间不一定是连续,且前件元素一定存储在后件元素的前面 C 存储定间必须连续,且前件元素一定存储在后件元素的前面 D 存储空间必须连续,且各元素的存储顺序是任意的答案是A, 分析 链接存储并不要求存储空间连续,存储位置也不用有序(4)为了使模块爆可能独立,要求( ) A 模块的内聚程度要

4、尽量高,且各模块间的耦合程度要尽量强 B 模块的内聚程度要尽量高,且各模块间的耦合程度要尽量弱 C 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量弱 D 模块的内聚程度要尽量低,且各模块间的耦合程度要尽量强答案:B 分析:高内聚,低耦合。5)下列叙述中,正确的是( ) A Java语言的标识符是区分大小写的 B 源文件名与public类名可以不相同 C 源文件扩展名为.jar D 源文件中public类的数目不限答案:A 6)下列属于合法的Java标识符是( ) A _cat B 5books C +static D -3.14159答案:A 7) 在Java中,表示换行符的转义字符是(

5、) A n B f C n D dd答案:A ( 8)扯Java中,所有类的根类是( ) A. java.lang.Object Bjava.lang.Class Cjava.applet.Applet Djava.awt.Frame 答案:A (9)在Java+中,用Package语句说明一个包时,该包的层次结构必须是( ) A 与文件的结构相同 B 与文件目录的层次相同 C 与文件类型相同 D 与文件大小相同答案:A (10)在读字符文件Employee.dat时,使用该文件作为参数的类是( )。 A BufferReader B DatalnputStream C DataOutoutS

6、tream D FileInputStream答案:D (11)在Java中,能实现多重继承效果的方式是( )。 A 内部类 B 适配器 C 接口 D 同步答案:C(12) char类型的取值范围是( )。 A 2-727-1 B 0216-1 C -2152151 D 028-1答案:A (13)下列方法中可以用来创建一个新线程的是( )。 A 实现java.lang.Runnable接口并重写start0方法 B 实现java.iang.Runnable接口并重写run0方法 C 继承java.lang.Thread类并重写run0方法 D 继承java.lang.Thread类并重写st

7、art0方法答案:C(14)下列关于线程优先级的说法中,正确的是( )。 A.线程的优先级是不能改变的 B线程的优先级是在创建线程时设置的 C在创建线程后的任何时候都可以设置 D. B和C 答案:C (15)下列代码中,将引起一个编译错误的行是( )。 1) public class Test 2) int m, n; 3) public Test() 4) public Test(int a) m=a;) 5) public static void main(String args0) 6) Test t1, t2; 7) int j, k; 8) j=0; k=0; 9)t1 = new

8、Test(); 10) t2 = new Test(j,k); 11) 12)A第3行B第5行C第6行D第10行答案:D (16)阅读下列代码后 public class Person int arr=new int10; public static void main(String args ) System.out.println(arrl); ) 正确的说法是( )。 A 编译时将产生错误 B 编译时正确,运行时将产生错误 C 输出零 D 输出空答案:A(17) AIDL支持以下哪种数据类型?l)string 2)list 3)map 4)All native java datatype

9、( ),A1,2和3B4C.以上所有D都不支持答案:C分析:AIDL 服务只支持有限的数据类型,如果用AIDL服务传递一些复杂的数据就需要做更一步处理,AIDL 服务支持的数据类型如下:1. Java 的原生类型2. String 和CharSequence3. List 和 Map ,List和Map 对象的元素必须是AIDL支持的数据类型;以上三种类型都不需要导入(import)4. AIDL 自动生成的接口 需要导入(import)5. 实现android.os.Parcelable 接口的类. 需要导入(import)。 二、多项选择题下列各题A、B.、C.、D四个选项中,有一个或多个

10、选项是正确的,(l)下列说法正确的有( )。 A. 环境变量可在编译source code时指定 B在编译程序时,所能指定的环境变盛不包括class path Cjavac -次可同时编译数个Java源文件 D. javac.exe能指定编译结果要置于哪个目录(directory)答案:BCD(2)不能用来修饰interface的有( )A. private B.public C.protected D.static答案:ACD(3)下列说法错误的有( ) A.在类方法中可用this来调用本类的类方法 B。在类方法中调用本类的类方法时可直接调用 C在类方法中只能调用本类中的类方法 D.在类方法

11、中绝对不能调用实例方法答案:ACD请将正确选项填写在答题纸上(4)下列说法错误的有( ) A. Java面向对象语言容许单独的过程与函数存在 B Java面向对象语言容许单独的方法存在 C Java语亩中的方法属于类中的成员(member) D. Java语言中的方法必定隶属于某类(对象),调用方法与过程或函数相同答案:ABC(5)下列说法错误的有( )。 A.能被java.exe成功运行的java class文件必须有main()方法 BJ2SDK就是Java API C. Appletviewer.exe可利用jar选项运行Jar文件 D.能被Appletviewer成功运行的java c

12、lass文件必须有main()方法答案:BCD三、判断题 请将每空的正确答案写在答题纸上,答在试卷上不得分。 (1) Java程序中的起始类名称必须与存放该类的文件名相同。(对)(2) Unicode是用16位来表示一个字的。(对)(3) 原生类中的数据类型均可任意转换。(对)三、填空题请将每空的正确答案写在答题纸上【l】至【25】序号的横线上,答在试卷上不得分。(l)某二叉树中度为2的结点有18个,则该二叉树中有【1】 19 个叶子结点。 二叉树的终端结点(叶子结点)数等于双分支结点数加1。(2)在面向对象方法中,类的实例称为【2】 对象 (3) 诊断和改正程序中错误的工作通常称为【3】 D

13、ebug (4) 在关系数据库中,把数据表示成二维表,每一个二维表称为【4】 关系 (5) Java 源文件中最多只能有一个【5】 public 类, 其他类的个数不限。(6) 线程在生命周期中要经历5中状态,分别是新建状态、可运行状态、运行状态。【6】 暂停 状态和终止状态。(7) FileInputStream 是字节流;BufferedWriter是字符流, ObjectOutputStream是 【7】 对象序列化流(8) 当使用Thread t = new Thread(r)创建一个线程时,表达式r instance of Thread 的值为【8】 false 。 r instan

14、ceOf Runnable1.抽象类和接口的区别?抽象类:1)抽象方法,只有行为的概念,没有具体的行为实现。使用abstract关键字修饰,没有方法体。子类必须重写这些抽象方法。2)包含抽象方法的类,一定是抽象类。3)抽象类只能被继承,一个类只能继承一个抽象类。接口:1)全部的方法都是抽象方法,属型都是常量2)不能实例化,可以定义变量。3)接口变量可以引用具体实现类的实例4)接口只能被实现,一个具体类实现接口,必须实现全部的抽象方法5)接口之间可以多实现6)一个具体类可以实现多个接口,实现多继承现象2列举你所知道的线程同步的方法:1)wait():让线程等待。将线程存储到一个线程池中。2)no

15、tify():唤醒被等待的线程。通常都唤醒线程池中的第一个。让被唤醒的线程处于临时阻塞状态。3)notifyAll(): 唤醒所有的等待线程。将线程池中的所有线程都唤醒。3equals()方法和“=”操作符的区别是什么?重写equals()方法的时候,我们还需要重写哪些方法?为什么?“=”比较的是一个对象在内存中的地址值,栈中的内容是否相同equals()是针对引用的,比较的是引用类型的内容一样不一样,堆中的内容是否相同重写equals()方法的时候,需重写hashcode方法,这样比较的时候,比较的是两个对象的hash值,不同对象的hash值不同。7.写一个函数计算但参数为n(n很大)时的值

16、1-2+3-4+5-6+7+n。(提示:考虑程序执行效率)private static void jisuan(int n) int sum=0;if(n%2=0)sum=-(n/2);System.out.println(+sum);elsesum=-(n-1)/2+n;System.out.println(+sum);(11) 简述String和StringBuffer、ArrayList和LinkedList、HashMap和HashTable的特点及区别。答:String 对象的长度一旦定义就固定就不可以改变,对于已经存在的String对象的修改都是创建一个新的对象,然后把新的值存进去

17、,String类不能被继承。StringBuffer是一个可变对象,当对它进行修改的时候不会像String那样重新建立对象。它只能通过构造函数来建立对象。另外StringBuffer还是一个线程安全的类。ArrayList是实现了基于动态数组的数据结构用于,LinkedList基于连表的数据结构,二者都可以存储对象的引用。对于随机访问get和set,ArrayList优于LinkedList,因为LinkedList要移动指针。对于新增和删除操作add和remove,LinkedList比较占优势,因为ArrayList要移动数据。HashMap是Hashtable的轻量级实现(非线程安全的实

18、现),他们都完成了Map接口,主要区别在于HashMap允许空(null)键值(key),由于非线程安全,在只有一个线程访问的情况下,效率要高于Hashtable。HashMap允许将null作为一个entry的key或者value,而Hashtable不允许。HashMap把Hashtable的contains方法去掉了,改成containsvalue和containsKey。因为contains方法容易让人引起误解。Hashtable继承自Dictionary类,而HashMap是Java1.2引进的Map interface的一个实现。最大的不同是,Hashtable的方法是Synchr

19、onize的,而HashMap不是,在多个线程访问Hashtable时,不需要自己为它的方法实现同步,而HashMap 就必须为之提供外同步。Hashtable和HashMap采用的hash/rehash算法都大概一样,所以性能不会有很大的差异。就HashMap与HashTable主要从三方面来说。一.历史原因:Hashtable是基于陈旧的Dictionary类的,HashMap是Java 1.2引进的Map接口的一个实现二.同步性:Hashtable是线程安全的,也就是说是同步的,而HashMap是线程序不安全的,不是同步的三.值:只有HashMap可以让你将空值作为一个表的条目的key或

20、value求质数的多种优化方式答:一般我们求质数时都会去计算小于某一个数N的质数而不会不加限定,现在我们以求小于N的质数来说一说优化方式。在我们求质数的过程中一般会用到两种方法试除法和筛选法两种,现在下来说一下试除法:.判断小于N的数X是否是质数,就是从2一直尝试到X-1,这种做法效率最差,并不可取-如果X是质数,那么它如果不能被小于X/2的数整除即可,这样算法效率提高一些-除了2以外,所有的质数都只能是奇数,所以我们可以将数X先试除2,然后尝试从3一直到X/2的所有奇数-其实判断一个数是否是质数,只需判断一个数能不能被除了1之外小于的数整除即可,-最后,我们可以利用前面求出来的质数来判断,我

21、们只需判断X能不能被小于的质数整除即可,这样效率是不是更高。再说筛选法:对于使用筛选法的优化主要是从空间上考虑定义一个容器,将数据放入容器中,然后遍历其中的数据,将是合数的数据删除,最后剩余的就是质数了-我们可以定义一个布尔类型的数组容器,将其中的值都赋值为true,在筛选的过程中将不是质数的数作为数组的下标将对应元素的值改为false,最后取出值为true的元素的下标即可-构造定长的byte数组,数组的每个byte存储8个布尔值,这样性能是不是又有了提高呢。(14) 简述几种排序方式(至少四种,可以从以下各个方面来比较这几种算法,例如从时间复杂度和空间复杂度)排序法最差时间分析平均时间复杂度

22、稳定度空间复杂度冒泡排序O(n2)O(n2)稳定O(1)快速排序O(n2)O(n*log2n)不稳定O(log2n)O(n)选择排序O(n2)O(n2)稳定O(1)二叉树排序O(n2)O(n*log2n)不一定O(n)插入排序O(n2)O(n2)稳定O(1)堆排序O(n*log2n)O(n*log2n)不稳定O(1)希尔排序O(n1.25)不稳定O(1)冒泡排序:(Bubble Sort)冒泡排序方法是最简单的排序方法。这种方法的基本思想是,将待排序的元素看作是竖着排列的“气泡”,较小的元素比较轻,从而要往上浮。在冒泡排序算法中我们要对这个“气泡”序列处理若干遍。所谓一遍处理,就是自底向上检查

23、一遍这个序列,并时刻注意两个相邻的元素的顺序是否正确。如果发现两个相邻元素的顺序不对,即“轻”的元素在下面,就交换它们的位置。显然,处理一遍之后,“最轻”的元素就浮到了最高位置;处理二遍之后,“次轻”的元素就浮到了次高位置。在作第二遍处理时,由于最高位置上的元素已是“最轻”元素,所以不必检查。一般地,第i遍处理时,不必检查第i高位置以上的元素,因为经过前面i-1遍的处理,它们已正确地排好序。 插入排序(Insertion Sort)插入排序的基本思想是,经过i-1遍处理后,L1.i-1己排好序。第i遍处理仅将L插入L1.i-1的适当位置,使得L1.i又是排好序的序列。要达到这个目的,我们可以用

24、顺序比较的方法。首先比较L和Li-1,如果Li-1 L,则L1.i已排好序,第i遍处理就结束了;否则交换L与Li-1的位置,继续比较Li-1和Li-2,直到找到某一个位置j(1ji-1),使得Lj Lj+1时为止。选择排序(Selection Sort)选择排序的基本思想是对待排序的记录序列进行n-1遍的处理,第 i 遍处理是将i.n中最小者与位置 i 交换位置。这样,经过 i 遍处理之后,前 i 个记录的位置已经是正确的了。快速排序(Quick Sort)快速排序是对冒泡排序的一种本质改进。它的基本思想是通过一趟扫描后,使得排序序列的长度能大幅度地减少。在冒泡排序中,一次扫描只能确保最大数值

25、的数移到正确位置,而待排序序列的长度可能只减少1。快速排序通过一趟扫描,就能确保某个数(以它为基准点吧)的左边各数都比它小,右边各数都比它大。然后又用同样的方法处理它左右两边的数,直到基准点的左右只有一个元素为止。 一、专业知识1、a0=1、a1=1、a2=a1+a0、a3=a2+a1,以此类推,请写代码用递归算出a30?3、简述值类型和引用类型的区别 值类型包括简单 类型、结构体类型和枚举类型,引用类型包括自定义类、数组、接口、委托等他们两在内存中存储的方式不同,值类型以栈的方式存储的,引用类型以堆的方式;前者是真实的存储空间,后者只是存储地址的引用!4、简述类中的静态成员和非静态成员的区别

26、 静态变量使用 static 修饰符进行声明,在类被实例化时创建,通过类进行访问。不带有 static 修饰符声明的变量称做非静态变量,在对象被实例化时创建,通过对象进行访问。一个类的所有实例的同一静态变量都是同一个值,同一个类的不同实例的同一非静态变量可以是不同的值。静态函数的实现里不能使用非静态成员,如非静态变量、非静态函数等。5、什么是单例?一个类中只有一个实例并且自行化向整个系统提供这个实例叫单例下面程序段的输出结果是:Void complicatedex()int x=20,y=30;boolean b; b=x50&y60|x50&y-6|x60|x-50&y + cat.getN

27、ame(); cat.setName(My Cat); oos.writeObject(cat); oos.close(); catch(Exception e)overload和overrride的区别。Overloaded的方法和是否可以改变返回值类型override(重写,覆盖) 1、方法名、参数、返回值相同。 2、子类方法不能缩小父类方法的访问权限。 3、子类方法不能抛出比父类方法更多的异常(但子类方法可以不抛出异常)。 4、存在于父类和子类之间。 5、方法被定义为final不能被重写。 overload(重载,过载) 1、参数类型、个数、顺序至少有一个不相同。 2、不能重载只有返回值

28、不同的方法名。 3、存在于父类和子类、同类中。 Overloaded的方法不能改变返回值类型final类有什么特点该类不能被继承写出下面代码的输出结果Package test;Public class OuterClassPrivate class InterClass Public InterClass System.out.println(“interClass create”);Public OuterClass() InterClass ic= new InterClass();System.out.println(“outerclass create”);Public static

29、void main(String args) OuterClass oc=new OuterClass();输出:interClass create Outerclass create如何格式化日期java日期的格式话主要用的是SimpleDateFormat df = new SimpleDateFormat();ArrayList Vector LinkedList 的存储性能好特性,HashMap和Hashtable的区别ArrayList和Vector都是使用数组方式存储数据,此数组元素数大于实际存储的数据以便增加和插入元素,它们都允许直接按序号索引元素,但是插入元素要涉及数组元素移动

30、等内存操作,所以索引数据快而插入数据慢,Vector由于使用了synchronized方法(线程安全),通常性能上较ArrayList差,而LinkedList使用双向链表实现存储,按序号索引数据需要进行前向或后向遍历,但是插入数据时只需要记录本项的前后项即可,所以插入速度较快。1. HashTable的方法是同步的,HashMap未经同步,所以在多线程场合要手动同步HashMap这个区别就像Vector和ArrayList一样。 2.HashTable不允许null值(key和value都不可以),HashMap允许null值(key和value都可以)。 3.HashTable有一个con

31、tains(Object value),功能和containsValue(Object value)功能一样。 4.HashTable使用Enumeration,HashMap使用Iterator。String是基本数据类型吗?不是多线程有几种实现方式,同步有几种实现方式,stop()和suspend()方法为什么不推荐使用多线程有两种实现方法,分别是继承Thread类与实现Runnable接口 同步的实现方面有两种,分别是synchronized,wait与notify反对使用stop(),是因为它不安全。它会解除由线程获取的所有锁定,而且如果对象处于一种不连贯状态,那么其他线程能在那种状态

32、下检查和修改它们。结果很难检查出真正的问题所在。suspend()方法容易发生死锁。 调用suspend()的时候,目标线程会停下来,但却仍然持有在这之前获得的锁定。此时,其他任何线程都不能访问锁定的资源,除非被挂起的线程恢复 运行。对任何线程来说,如果它们想恢复目标线程,同时又试图使用任何一个锁定的资源,就会造成死锁。所以不应该使用suspend(),而应在自己的 Thread类中置入一个标志,1.请阐述一下你对Java多线程中同步的几种使用方式,区别,以及其重要性。同步有两种实现方式1.同步方法 2.同步代码块多线程的同步时为了能够保证关键数据在单位时间能只能有一个线程操作,保证数据的同步

33、性,安全性2.final ,finally , finalize 的区别。Final 有最终的不可改变的意思,可以用来修饰基本数据使之成为常量,该常量只能在编译期进行修改 。当修饰对象时,则该对象引用不能改变,但该对象本身可以做修改。当修饰方法时,表示该方法在被继承时不能被修改,或覆盖当修饰类时,表示该类不会别别的类继承 Finally 用于在Try-catch-finally语句中 finally 中的代码块时必须执行的finalize 当某个对象要被当做垃圾回收时,会调用finalize()方法,该方法用于检查对象不被运行状态的对象引用或间接地引用 sleep() 和wait()有什么区别

34、?Sleep()是线程中的一个方法,该方法用于控制自身线程的流程,当执行sleep()方法睡眠时保持对象锁。Wait()方法是object类中的一个方法,该方法用于让一个线程处于等待状态并释放对象锁,当该线程想要再次执行时需要调用notity方法唤醒此线程4. abstact 的method是否可同时是static,是否可同时是native,是否可同时是synchronized ?不可以5当一个线程进入一个对象的Synchronized方法后,其他线程是否可进入此对象的其他方法可以去访问非Synchronized方法。6当一个对象被当做参数传递到一个方法后,此方法可改变这个对象的属性,并可返回

35、变化后的结果,那么这里到底是值传递还是引用传递?值传递7.创建一个class对象有几种方法?分别是什么?有三种:1. Class c=Class.for(“java.lang.String”);2. String str=new Stirng();Class c=Str.getClass(); 3.Class c=String.Class;9.如何获取一个目录下有多少个文件?File f=new File(“D:/”); Int count=f.list().length;10.请写出下列代码的输出结果:public class FatherClass public FatherClass()

36、 System.out.println(“FatherClass Create”);public static class ChildClass extends FatherClass public ChildClass() System.out.println(“ChildClass Create”); public static void main() FatherClass fc=new FatherClass(); ChildClass cc=new ChildClass(); FatherClass CreateFatherClass CreateChildClass Create1

37、3.当一个对象不再被使用时,如何才能从内存中消失?将该对象引用值为空14.请写一个整数组成的矩阵转置程序,及行变成列,列变成行? int transponse(int t);public int transponse(int t)int f=new intt0.lengtht.length; for(int i=0;it.length;i+)int index=0; index+; for(int x=0;i50&y60|x50&y-60|x60|x-50&y-60; System.out.println(b);A,ture B,false C,1 D,011.activity5.以下程序的运

38、行结果(B )/-128127从对象池取,超了后新建对象 Integer a = 34556; Integer b =34556; If(a=b) System.out.println(“Equal”); else System.out.println(“Not equal”); A. Equal B.Not equal C.无输出 D.编译错误6.以下程序的运行结果是(B ) public class test public static void main(String args) System.out.print(100%3); System.out.print(“,”); System.out.print(100%3.0); A.1,1 B.1,1.0 C.1.0,1 D1.0,1.07.Java语言中字符串 “学Java” 所占的内存空间是( B)A.5个字节 B.6个字节 C.7个字节 D.10个字节Math.round(11.5)等于多少()。Math.round(-11.5)等于多少?(C)A11,-11 B.11,-12 C. 12.-11 D.12,-128.下列程序段的输出结果是:(B)void complicatedexpression_r() int x=20,y=30; boolean

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号