1:本試卷為高難度試題,大部分摘自華為,中興,騰訊,百度,阿里巴巴等試題
2:知識(shí)點(diǎn)涵蓋Java基礎(chǔ),面向?qū)ο螅惓#嗑€程,輸入輸出流,集合,數(shù)據(jù)結(jié)構(gòu)與算法
3:注意本試卷分滿分為100分,60分為及格分?jǐn)?shù)線
4:本試卷分為以下部分:選擇題,簡(jiǎn)答題,改錯(cuò)與分析題,編程算法題
5:本試卷時(shí)間為100分鐘,請(qǐng)抓緊時(shí)間做題
一:選擇題【有四個(gè)選項(xiàng),只有一個(gè)選項(xiàng)正確,每道題1.5分,共20道,總計(jì)30分】
【 】1:下面的表達(dá)式錯(cuò)誤的是
B: float f=1.0F
C: float f=(float)1.0F
D: float f=(int)(0.73+0.27);
【 】2:設(shè)x和y均為int型變量,則以下語(yǔ)句:x+=y,y=x-y;x-=y;的功能是
A:把x和y按從大到小排列
B:把x和y按從小到大排列
C:無(wú)確定結(jié)果
D:交換x和y中的值
【 】3:請(qǐng)寫(xiě)出下面程序運(yùn)行的結(jié)果()
int y = 1;
int a = x++ + ++x;
int b = y– – –y;
System.out.println(++a + b++);
A:3 B:4 C:5 D:6
【 】4:選擇下列程序運(yùn)行的結(jié)果
for (int i = 0, j = 5; total < 10 || j > 3; ++i, –j) {
total += (i + j);
System.out.println(total );
}
A:結(jié)果為 5 ,因?yàn)橐粋€(gè)i自加,一個(gè)j自減抵消等于沒(méi)有自加
B:結(jié)果為 10,因?yàn)檎_\(yùn)算了
C:有語(yǔ)法錯(cuò)誤,不能寫(xiě)多個(gè)變量
D:有語(yǔ)法錯(cuò)誤,條件表達(dá)式不能寫(xiě)多個(gè)
【 】5:請(qǐng)問(wèn)總共創(chuàng)建了多少個(gè)對(duì)象?
aa=”bb”;
b=”dd”+aa;
c=”cc”+b+aa;
StringBuffer d = new StringBuffer(c);
A: 4 B: 5 C: 7 D: 8
【 】6:接口A中有2個(gè)方法,接口B中有2個(gè)方法,以下正確的是 ( )
A:若接口C繼承A,B兩個(gè)接口,則C一定繼承了四個(gè)方法
B:若類C實(shí)現(xiàn)接口A,B,則C中必須至少實(shí)現(xiàn)A、B中各一個(gè)方法
C:若類C要繼承接口A,B,則必須要定義接口D來(lái)繼承接口A、B,由類C實(shí)現(xiàn)接口D,才能達(dá)到目的
D:若抽象的接口C繼承了接口A,B;抽象的D類實(shí)現(xiàn)C接口,此時(shí)必須要實(shí)現(xiàn)累加接口中的所有方法
【 】7:關(guān)于類,抽象,接口,繼承綜合說(shuō)法錯(cuò)誤的是?
A:類與類之間有關(guān)聯(lián),繼承,聚合的關(guān)系;
B:抽象類可以繼承實(shí)例類,抽象類可以實(shí)現(xiàn)接口,抽象接口可以繼承多個(gè)接口
C:抽象類是類和接口的并集與接口繼承的補(bǔ)集
D:在應(yīng)用開(kāi)發(fā)中,功能類的繼承是平行結(jié)構(gòu),實(shí)現(xiàn)功能的接口是樹(shù)型結(jié)構(gòu)
【 】8:請(qǐng)判斷下面程序運(yùn)行的結(jié)果:
int num = 1;
public void change() {
num = 2;
}
public void change(int num) {
num = 3;
}
public void change(ParamTest pt) {
pt.num = 4;
}
public static void main(String[] args) {
ParamTest pt = new ParamTest();
int num = 5;
pt.change();
System.out.println(“1->:” + pt.num);
pt.change(num);
System.out.println(“2->:” + pt.num);
pt.change(pt);
System.out.println(“3->:” + pt.num);
}
A: B: C: D:
1->:1 1->:2 1->:2 1->:2
2->:5 2->:5 2->:2 2->:5
3->:4 2->:5 3->:4 3->:4
【 】9:下面方法不可以共存的是:()
class A {
public A() {
}
public void A() {
}
public void A(int x) {
}
}
class B extends A {
//填入一個(gè)方法
}
A:public void A(){}
B:public void A(int x, int y) {}
C:public int A(int x, char y) {
return x + y;
}
D:public String A(int x){
return “hello”+x;
}
【 】10:已知類Foo的定義如下:
int value;
Foo(int value) {
this.value = value;
}
}
運(yùn)行下面程序段:
Foo[] a1 = { new Foo(1), new Foo(2), new Foo(3) };
Foo[] a2 = new Foo[a1.length];
System.arraycopy(a1, 0, a2, 0, a1.length);
System.out.println((a1 == a2) + “,” + (a1[1] == a2[1]));
控制臺(tái)輸出的結(jié)果是( )。
A. false,false B. false,true C. true,true D. true,false
【 】11:哪種說(shuō)話闡明了垃圾收集和終結(jié)化機(jī)制鎖承諾的行為?()
A 對(duì)象直到?jīng)]有任何引用指向自己時(shí)才會(huì)立即被銷(xiāo)毀
B 對(duì)一個(gè)對(duì)象調(diào)用的finalize()方法永遠(yuǎn)不會(huì)多于一次
C 適用于收集的對(duì)象會(huì)最終由垃圾收集器銷(xiāo)毀
D 對(duì)象一但適用于垃圾收集,就再無(wú)法由存活線程訪問(wèn)了
【 】12:下面執(zhí)行的結(jié)果是
System.out.print(c);
return true;
}
public static void main(String[] args) {
int i = 0;
for (loop(‘A’); loop(‘B’) && (i < 2); loop(‘C’)) {
i++;
loop(‘D’);
}
}
A. ABDCBDCB
B. ABCDABCD
C. Compilation fails[編譯失敗].
D. An exception is thrown at runtime[拋出一個(gè)運(yùn)行例外].
【 】13:下面異常執(zhí)行的結(jié)果是:
int x = 0;
float y = 0;
float z = x / y;
System.out.println(“11″);
try {
int a[] = new int[3];
a[3] = x;
System.out.println(“22″);
return;
} catch (Exception e) {
System.out.println(“33″);
return;
} finally {
System.out.println(“44″);
System.exit(0);
return;
}
} catch (ArithmeticException e) {
System.out.println(“55″);
return;
} finally {
System.out.println(“66″);
return;
}
A: B: C: D:
11 55 11 11
55 66 33 33
66 44 44
66
【 】14:閱讀下面程序段:
byte b[] = new byte[a.length];
System.arraycopy(a, 1, b, 1, 2);
BufferedOutputStream bos;
bos = new BufferedOutputStream(new FileOutputStream(“C:\\file.txt”));
bos.write(b, 1, 2);
bos.flush();
bos.close();
假設(shè)file.txt原先不存在,運(yùn)行該程序段后,文件file.txt的內(nèi)容為( )。
A. 65 B. 65# C. A# D. A
【 】15:假設(shè)以數(shù)組A[n]存放循環(huán)隊(duì)列的元素,其頭、尾指針?lè)謩e為head和end。若設(shè)定尾指針指向隊(duì)列中的隊(duì)尾元素,頭指針指向隊(duì)列中隊(duì)頭元素的前一個(gè)位置,則當(dāng)前存于隊(duì)列中的元素個(gè)數(shù)為
A:(end-head-1)%n B:(end-head)%n
C:(head-end+1)%n D:(end-head+n)%n
【 】16:對(duì)線性鏈表和線性表分析錯(cuò)誤的是()
A:線性鏈表分為單鏈表、雙向鏈表和循環(huán)鏈表
B:線性鏈表是一種物理存儲(chǔ)單元上連續(xù)但非順序的存儲(chǔ)結(jié)構(gòu),數(shù)據(jù)元素的邏輯順序是通過(guò)鏈表中的指針鏈接來(lái)實(shí)現(xiàn)的
C:線性表插入或刪除的運(yùn)算效率很低。在順序存儲(chǔ)的線性表中,插入或刪除數(shù)據(jù)元素時(shí)需要移動(dòng)大量的數(shù)據(jù)元素
D:線性表的順序存儲(chǔ)結(jié)構(gòu)不便于對(duì)存儲(chǔ)空間的動(dòng)態(tài)分配
【 】17:以下屬于java.util包中集合類具體實(shí)現(xiàn)類的是?
A:Map B:Collection C:TreeMap D:SortedMap
【 】18:下面對(duì)集合不能正確創(chuàng)建實(shí)例化是()
B:ArrayList
C:TreeSet
D:TreeSet
【 】19:下面可以刪除list中所有的“java”的代碼是:
list.add(“java”);
list.add(“aaa”);
list.add(“java”);
list.add(“java”);
list.add(“bbb”);
A:
for (int i = list.size() – 1; i >= 0; i–) {
if (“java”.equals(list.get(i))) {
list.remove(i);
}
}
B:
for (int i = 0; i < list.size(); i++) {
if (“java”.equals(list.get(i))) {
list.remove(i);
}
}
C:
Iterator i = list.iterator();
while (i.hasNext()) {
if ((i.next().toString()).equals(“java”)) {
i.removeAll();
}
}
D:
Iterator i = list.listIterator();
while (i.hasNext()) {
if (((String) i.next()).equals(“Java”))
i.remove();
}
}
【 】20:題示代碼的功能為:將兩個(gè)有序的ArrayList合并為一個(gè)有序的ArrayList。
內(nèi)容分別為:list1:{1,3,4,6,8} 和 list2:{2,5,9}
合并后的list3: {1,2,3,4,5,6,8,9}
……
List
int size = list1.size() + list2.size();
for (int i = 0, j = 0, k = 0; k < size; k++) {
< 填入的代碼 >
}
System.out.println(list3);
……
完成該功能應(yīng)該填入的代碼是( )。
if (j >= list2.size() || i > list1.size():&& list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
B.
if (j >= list2.size() || i < list1.size()&& list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
C.
if (j >= list2.size() || i < list1.size()&& list1.get(i) > list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
D.
if (j >= list2.size() || i < list1.size()|| list1.get(i) < list2.get(j)) {
list3.add(list1.get(i++));
} else {
list3.add(list2.get(j++));
}
二:簡(jiǎn)答題【本環(huán)節(jié)中每道題3分,共5道,總計(jì)15分】
1:String 和StringBuffer有什么差別?在什么情況下使用它們?【3分】
答:
2:new一個(gè)類對(duì)象和使用類名創(chuàng)建一個(gè)對(duì)象有什么區(qū)別?二者使用時(shí)應(yīng)該注意什么?【3分】
答:
3:在異常當(dāng)中 throw和throws 有什么區(qū)別和聯(lián)系?【3分】
答:
4:LinkList和ArrayList的區(qū)別?
如果是在集合的開(kāi)頭插入一個(gè)對(duì)象,使用哪種效率高些,在集合的末尾插入一個(gè)對(duì)象,使用哪種效率高些,為什么?【3分】
5:
介紹JAVA開(kāi)發(fā)中常用的Collection FrameWork(寫(xiě)出Java集合的框架結(jié)構(gòu),加上必要的名稱注釋)? 【3分】
答:
三:改錯(cuò)與分析題【本環(huán)節(jié)中每道題3分,共7道,總計(jì)21分】
interface 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();
}
}
請(qǐng)問(wèn)哪一行有錯(cuò)?為什么?【3分】
答:
abstract class Animal {
public void saySomething() {
System.out.println(“你想說(shuō)什么就說(shuō)吧!”);
}
}
class Dog extends Animal {
public void saySomething() {
System.out.println(“我現(xiàn)在有了第二職業(yè):捉耗”);
}
}
public class Test {
public static void main (String[] args) {
Animal ani=new Dog();
ani.saySomething();
}
}
請(qǐng)問(wèn)哪一行有錯(cuò)?為什么?【3分】
答:
public class Test {
private static void printArray(int[] arr) {
for(int i=0;i< arr.length;i++)
System.out.print(arr[i]+”,”);
System.out.println(” “);
}
private static void changeValue(int value) {
value*=2;
}
private static void changeValue(int[] arr) {
for(int i=0;i
arr[i]*=2;
}
public static void main (String[] args) {
int[] arr={1,2,3,4,5};
changeValue(arr[0]);
printArray(arr);
changeValue(arr);
printArray(arr);
}
}
請(qǐng)問(wèn)結(jié)果是什么?并詳細(xì)解釋原因【3分】
答:
public class A {
static {
System.out.println(“11″);
}
{
System.out.println(“22″);
}
public A() {
System.out.println(“33″);
}
public void deal() {
System.out.println(“44″);
}
}
public class B extends A {
static {
System.out.println(“55″);
}
{
System.out.println(“66″);
}
public B() {
System.out.println(“77″);
}
public void deal() {
System.out.println(“88″);
}
}
public class C {
public static void main(String[] args) {
A b=new B();
b.deal();
}
}
請(qǐng)問(wèn)結(jié)果是什么?并詳細(xì)分析原因【3分】
答:
public class Test{
public static void so(String[] name){
String temp=name[0];
Name[0]=name[1];
Name[1]=temp;
}
public static void so(String name0,String name1){
String temp=name0;
Name0=name1;
Name1=temp;’
}
public static void main(String[] wewe){
String[] name = new String[]{“mike”,”Lily”};
String name0 = “mike”;
String name1=”Lily“;
So(name);
System.out.println(name[0]+”,”+name[1]);
So(name0,name1);
System.out.println(name0+”,”+name1);
}
請(qǐng)輸出結(jié)果?并詳細(xì)解釋為什么?【3分】
答:
public class Person {
static class User {
int id;
String name;
public User(int id, String name) {
this.id = id;
this.name = name;
}
public int getId() {
return this.id;
}
public String getName() {
return this.name;
}
class Student {
public void setid(int newId) {
id = newId;
}
public void setName(String newName) {
name = newName;
}
}
}
public void print(int id, String name) {
User user = new User(id, name);
System.out.println(user.getId() + “\t” + user.getName());
}
public static void main(String[] args) {
//…手寫(xiě)補(bǔ)充代碼
}
}
要求:先對(duì)User進(jìn)行創(chuàng)建實(shí)例化 學(xué)號(hào)為:1001 姓名為: 張三 之后進(jìn)行修改 學(xué)號(hào)為: 1002 姓名為:李四 調(diào)用Person類的打印輸出方法顯示修改后的結(jié)果。【3分】
答:
<第七題>
列舉幾個(gè)你常去的IT技術(shù)型的網(wǎng)站,類型不限,個(gè)數(shù)不限,寫(xiě)中文名亦可,并解釋為什么值得你去?【3分】
答:
四:編程算法題,將代碼下在每道題的下面[共5道題,第一,二題為5分,第三題為6分,第四題為8分,第五題為10分,總計(jì)34分]
1:請(qǐng)用遞歸算法寫(xiě)一個(gè)方法求出兩個(gè)數(shù)字的最大公約數(shù)和最小公倍數(shù)【5分】
【安徽科大訊飛2012屆武漢大學(xué)校園招聘試題】
2:請(qǐng)將一個(gè)鏈表反序【5分】
【華為2011屆華中科技大學(xué)校園招聘試題】
3:現(xiàn)在有一個(gè)有趣的游戲:稱為殺人游戲!游戲規(guī)則是:輸入?yún)⒓拥目側(cè)藬?shù),在輸入一個(gè)基數(shù),然后每個(gè)人依次報(bào)數(shù),
當(dāng)前選手報(bào)的數(shù)能被基數(shù)整除的話,就判為死亡出局,剩下的再繼續(xù)數(shù)數(shù),當(dāng)數(shù)到最后一個(gè)時(shí)候,再接著從1開(kāi)始從頭數(shù)數(shù)。。。
一直到活下的人小于基數(shù)為止,整個(gè)游戲結(jié)束,打印最后存活選手的編號(hào);【6分】
例子:總數(shù):6 基數(shù) 2
M M M M M M
1 2 3 4 5 6
M X M X M X
1 2 3 4 5 6
M M M
1 2 3
M X M
1 2
M X
1
存活的人數(shù)是:1
存活的編號(hào)是:1
【微軟,中興的筆試題,要求不限制語(yǔ)言編寫(xiě)實(shí)現(xiàn)】
4:比較兩個(gè)字符串,要求從字符串的最后一個(gè)元素開(kāi)始逐個(gè)向前比較,如果兩個(gè)字符串的長(zhǎng)度不等,則只比較短長(zhǎng)度字符串的元素。請(qǐng)編程實(shí)現(xiàn)下面給出的比較方法,并返回比較中發(fā)現(xiàn)的不相等元素的個(gè)數(shù)。【8分】
public int getDiffNum(int len1, String str1,int len2, String str2)
例如:len1=3 str1=”acd” len2=5 str2=”zhacd” 函數(shù)返回為 0
len1=3 str1=”acd” len2=6 str2=”zhacdv” 函數(shù)返回為 3
【華為2012屆南京大學(xué)校園招聘試題】
5:任何一個(gè)自然數(shù)m的立方均可寫(xiě)成m個(gè)連續(xù)奇數(shù)之和。【10分】
例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
請(qǐng)編程實(shí)現(xiàn):輸入一自然數(shù)n,求組成n^3的n個(gè)連續(xù)奇數(shù),格式必須按照上面進(jìn)行輸出。