android面試題目大全,java高級綜合部分

1:本試卷難度較大,大部分摘自華爲,中興,騰訊,百度,阿里巴巴等試題

2:知識點涵蓋Java基礎,面向對象,異常,多線程,輸入輸出流,集合,數據結構與算法

3:注意本試卷分滿分爲100分,60分爲及格分數線

4:本試卷分爲以下部分:選擇題,簡答題,改錯與分析題,編程算法題

5:本試卷時間爲100分鐘,請抓緊時間做題

 

一:選擇題,只有一個選項正確,每道題1.5分,共20道,總計30分

 

【 】1:下面的表達式錯誤的是

 

A: float f=(1.9 + 0.1)/(int)1.0

B: float f=1.0F

C: float f=(float)1.0F

D: float f=(int)(0.73+0.27);

 

【 】2:設x和y均爲int型變量,則以下語句:x+=y,y=x-y;x-=y;的功能是

A:把x和y按從大到小排列

B:把x和y按從小到大排列

C:無確定結果

D:交換x和y中的值

 

【 】3:請寫出下面程序運行的結果()

int x = 0;

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:選擇下列程序運行的結果

 

int total = 0;

for (int i = 0, j = 5; total < 10 || j > 3; ++i, –j) {

total += (i + j);

System.out.println(total );

}

A:結果爲 5 ,因爲一個i自加,一個j自減抵消等於沒有自加

B:結果爲 10,因爲正常運算了

C:有語法錯誤,不能寫多個變量

D:有語法錯誤,條件表達式不能寫多個

 

【 】5:請問總共創建了多少個對象?

 

String aa,b,c;

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個方法,接口B中有2個方法,以下正確的是  (  )

 

A:若接口C繼承A,B兩個接口,則C一定繼承了四個方法

B:若類C實現接口A,B,則C中必須至少實現A、B中各一個方法

C:若類C要繼承接口A,B,則必須要定義接口D來繼承接口A、B,由類C實現接口D,才能達到目的

D:若抽象的接口C繼承了接口A,B;抽象的D類實現C接口,此時必須要實現累加接口中的所有方法

 

【 】7:關於類,抽象,接口,繼承綜合說法錯誤的是?

 

A:類與類之間有關聯,繼承,聚合的關係;

B:抽象類可以繼承實例類,抽象類可以實現接口,抽象接口可以繼承多個接口

C:抽象類是類和接口的並集與接口繼承的補集

D:在應用開發中,功能類的繼承是平行結構,實現功能的接口是樹型結構

 

【 】8:請判斷下面程序運行的結果:

public class ParamTest {

 

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 {

//填入一個方法

}

 

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的定義如下:
public class Foo {
int value;
Foo(int value) {
this.value = value;
}
}
運行下面程序段:
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]));
控制檯輸出的結果是( )。
A. false,false       B. false,true       C. true,true         D. true,false

 

【 】11:哪種說話闡明瞭垃圾收集和終結化機制鎖承諾的行爲?()
A 對象直到沒有任何引用指向自己時纔會立即被銷燬
B 對一個對象調用的finalize()方法永遠不會多於一次
C 適用於收集的對象會最終由垃圾收集器銷燬
D 對象一但適用於垃圾收集,就再無法由存活線程訪問了

 

【 】12:下面執行的結果是

 

static boolean loop(char c) {

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[拋出一個運行例外].

 

【 】13:下面異常執行的結果是:

 

try {

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 a[] = { ‘a’, 65, ‘#’, ‘B’ };

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();

假設file.txt原先不存在,運行該程序段後,文件file.txt的內容爲( )。

 

A. 65               B. 65#           C. A#             D. A

 

【 】15:假設以數組A[n]存放循環隊列的元素,其頭、尾指針分別爲head和end。若設定尾指針指向隊列中的隊尾元素,頭指針指向隊列中隊頭元素的前一個位置,則當前存於隊列中的元素個數爲

 

A:(end-head-1)%n      B:(end-head)%n
C:(head-end+1)%n   D:(end-head+n)%n

 

【 】16:對線性鏈表和線性表分析錯誤的是()

A:線性鏈表分爲單鏈表、雙向鏈表和循環鏈表

B:線性鏈表是一種物理存儲單元上連續但非順序的存儲結構,數據元素的邏輯順序是通過鏈表中的指針鏈接來實現的

C:線性表插入或刪除的運算效率很低。在順序存儲的線性表中,插入或刪除數據元素時需要移動大量的數據元素

D:線性表的順序存儲結構不便於對存儲空間的動態分配

 

【 】17:以下屬於java.util包中集合類具體實現類的是?
A:Map           B:Collection        C:TreeMap         D:SortedMap

 

【 】18:下面對集合不能正確創建實例化是()

A:List<HashMap<Number, String>> list = new LinkedList<HashMap<Number, String>>();

B:ArrayList<HashSet<String>> list = new ArrayList<HashSet<String>>();

C:TreeSet<Hashtable<String,Integer>>  tree=new TreeSet<Hashtable<String,Integer>>();

D:TreeSet<ArrayList<String,Integer>>  tree=new TreeSet<ArrayList<String,Integer>>();

 

【 】19:下面可以刪除list中所有的“java”的代碼是:
ArrayList list = new ArrayList();
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:題示代碼的功能爲:將兩個有序的ArrayList合併爲一個有序的ArrayList。
對於兩個存放Integer對象的ArrayList,
內容分別爲:list1:{1,3,4,6,8} 和 list2:{2,5,9}
合併後的list3: {1,2,3,4,5,6,8,9}

……
List<Integer> list3 = new ArrayList<Integer>();
int size = list1.size() + list2.size();

for (int i = 0, j = 0, k = 0; k < size; k++) {
< 填入的代碼 >
}
System.out.println(list3);
……

完成該功能應該填入的代碼是( )。

A.
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++));
}

 

二:簡答題【本環節中每道題3分,共5道,總計15分】

 

1:String 和StringBuffer有什麼差別?在什麼情況下使用它們?【3分】

答:


2:new一個類對象和使用類名創建一個對象有什麼區別?二者使用時應該注意什麼?【3分】

答:

 

3:在異常當中 throw和throws 有什麼區別和聯繫?【3分】

答:


4:LinkList和ArrayList的區別?

如果是在集合的開頭插入一個對象,使用哪種效率高些,在集合的末尾插入一個對象,使用哪種效率高些,爲什麼?【3分】


5:
介紹JAVA開發中常用的Collection FrameWork(寫出Java集合的框架結構,加上必要的名稱註釋)? 【3分】

答:


三:改錯與分析題【本環節中每道題3分,共7道,總計21分】

 

<第一題>

  1. interface  A{
  2.     int x = 0;
  3. }
  4. class B{
  5.     int x =1;
  6. }
  7. class C extends B implements A {
  8.     public void pX(){
  9.        System.out.println(x);
  10. }
  11. public static void main(String[] args) {
  12.        new C().pX();
  13.       }
  14.    }

 

請問哪一行有錯?爲什麼?【3分】

< 第二題>

 

  1. abstract class Animal {
  2. public void saySomething() {
  3.     System.out.println(“你想說什麼就說吧!”);
  4.     }
  5. }
  6. class Dog extends Animal {
  7. public void saySomething() {
  8.      System.out.println(“我現在有了第二職業:捉耗”);
  9.      }
  10. }
  11. public class Test {
  12.      public static void main (String[] args) {
  13.            Animal ani=new Dog();
  14.            ani.saySomething();
  15.      }
  16. }

請問哪一行有錯?爲什麼?【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.length;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);

        }

  }

  請問結果是什麼?並詳細解釋原因【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();

}

}

請問結果是什麼?並詳細分析原因【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);

}

請輸出結果?並詳細解釋爲什麼?【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) {

//…手寫補充代碼

}

}

要求:先對User進行創建實例化   學號爲:1001 姓名爲: 張三   之後進行修改 學號爲: 1002 姓名爲:李四  調用Person類的打印輸出方法顯示修改後的結果。【3分】


<第七題>

 

列舉幾個你常去的IT技術型的網站,類型不限,個數不限,寫中文名亦可,並解釋爲什麼值得你去?【3分】

答:

 

四:編程算法題,將代碼下在每道題的下面[共5道題,第一,二題爲5分,第三題爲6分,第四題爲8分,第五題爲10分,總計34分]

 

1:請用遞歸算法寫一個方法求出兩個數字的最大公約數和最小公倍數【5分】

【安徽科大訊飛2012屆武漢大學校園招聘試題】

 

2:請將一個鏈表反序【5分】

【華爲2011屆華中科技大學校園招聘試題】

 

3:現在有一個有趣的遊戲:稱爲殺人遊戲!遊戲規則是:輸入參加的總人數,在輸入一個基數,然後每個人依次報數,

當前選手報的數能被基數整除的話,就判爲死亡出局,剩下的再繼續數數,當數到最後一個時候,再接着從1開始從頭數數。。。

一直到活下的人小於基數爲止,整個遊戲結束,打印最後存活選手的編號;【6分】

 

例子:總數:6  基數 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

存活的人數是:1

存活的編號是:1

【微軟,中興的筆試題,要求不限制語言編寫實現】

 

 

4:比較兩個字符串,要求從字符串的最後一個元素開始逐個向前比較,如果兩個字符串的長度不等,則只比較短長度字符串的元素。請編程實現下面給出的比較方法,並返回比較中發現的不相等元素的個數。【8分】

public int getDiffNum(int len1, String str1,int len2, String str2)

 

例如:len1=3  str1=”acd”   len2=5   str2=”zhacd”  函數返回爲 0

len1=3  str1=”acd”   len2=6   str2=”zhacdv” 函數返回爲 3

【華爲2012屆南京大學校園招聘試題】

5:任何一個自然數m的立方均可寫成m個連續奇數之和。【10分】

例如:
1^3=1
2^3=3+5
3^3=7+9+11
4^3=13+15+17+19
請編程實現:輸入一自然數n,求組成n^3的n個連續奇數,格式必須按照上面進行輸出。

【浙江大學研究院2011年筆試題目】


題目很多,最近也一直在找工作,題目很多,抽時間找出一段比較充裕的時間來做做以上的免試題,對於自己的java水平會有一定的認識了。這樣免試的時候心裏也不會沒底了。

原文:http://www.mianwww.com/html/2012/06/16596.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章