天天看點

Java&SQL 測試題目 答案Java&SQL 階段考試

Java&SQL 階段考試

(滿分 100 分,時長 180 分鐘) Java 部分

一、選擇題

1.以下關于 abstract 關鍵字的說法,正确的是(D)。 A.abstract 可以與 final 并列修飾同一個類。 B.abstract 類中不可以有 private 的成員。 C.abstract 類中必須全部是 abstract 方法。 D.abstract 方法必須在 abstract 類或接口中。

2.以下方法,(B)不是對 add 方法的重載。 publicclassTest{ public void add(intx,inty,intz){ //todo } } A.public int add(intx,inty,floatz){return0;} B.public int add(intx,inty,intz){return0;} C.public void add(intx,inty){ } D.以上都不是

3.關于 Java 堆,下面說法錯誤的是(D)。 A.所有類的執行個體都是在堆上配置設定記憶體。 B.對象所占的堆記憶體是由自動記憶體管理系統回收。 C.堆記憶體由存活和死亡的對象,空閑碎片區組成。 D.數組是配置設定在棧中的。

4.觀察以下代碼,輸出結果是(A)。 publicclassMyClass{ inti=-1; privatevoidaction(){ inti=0; i++; } publicstatic voidmain(String[]args){ MyClassmc =newMyClass(); mc.action();

System.out.println(mc.i);

}

} A. 1 B.0 C.-1 D.抛出異常

5.觀察下面的代碼,正确的結果是(A)。 classLetter{ charc=‘x’; } publicclassPassObject{ staticvoid f(Lettery){ y.c=‘z’; } publicstatic voidmain(String[]args){ Letterx=newLetter(); x.c=‘a’; f(x); System.out.println(x.c); } } A. z B.a C.x D.null

6.觀察如下代碼,正确顯示結果為(C)。 classA{ voidcallme(){ System.out.println(“InsideA’scallme()method”); } } classBextendsA{ voidcallme(){ System.out.println(“InsideB’scallme()method”); } } classCextendsB{ voidcallme(){ System.out.println(“InsideC’scallme()method”); } } publicclassDispatch{ publicstatic voidmain(Stringargs[]){ Aa=newC(); a.callme(); } } A.InsideA’scallme()methodB.InsideB’scallme()method C.InsideC’scallme()method D.抛出異常

7.觀察如下代碼,正确的顯示結果是(A)。 publicclassMyClass{ publicstatic voidmain(String[]args){ Strings1=“hello”; Strings2=“hello”; Strings3=newString(“hello”); Strings4=newString(“hello”); System.out.println((s1s2)+"/"+(s3s4)); } } A.true/false B.true/true C.false/true D.false/false

8.觀察如下代碼,正确的顯示結果是(B)。 classMyExceptionextendsException{ publicMyException(String msg){ super(msg); } } publicclassMyClass{ publicstatic voidmain(String[]args){ try{ if(true)thrownewMyException(“bad”); System.out.println(“OK”); }catch(MyExceptione){ System.out.print(e.getMessage()); } System.out.print(“bye”); } } A. bad B. badbye C. OKbad D. OKbadbye

9.下列說法中,不正确的是(B)。 A.一個 Java 源程式經過編譯後,得到的檔案的擴充名一定是.class。 B.一個 Java 源程式經過編譯後,得到的結果檔案數也隻有一個。 C.一個 Java 源程式隻能有一個 publicclass 類定義,且源檔案的名字與 publicclass 的類 名相同,擴充名必須是.java。

D.一個 Java 源程式可以包含多個 class 類。

10.欲構造 ArrayList 類的一個執行個體,此類實作繼承了 List 接口,下列方法正确的是(B)。 A.ArrayListmyList=newObject(); B.Listmylist=newArrayList(); C.ArrayListmyList=newList(); D.ListmyList=newList();

11.下列說法正确的是(AC)(多選)。 A.LinkedList 實作了繼承自 List。 B.AbstractSet 繼承自 Set。 C.HashSet 繼承自 AbstractSet。 D.WeakMap 繼承內建自 HashMap。

12.Thread 類用來建立和控制線程,一個線程從下面(B)方法開始執行。 A.init() B.start() C.run() D.notifyAll()

13.下面關于 Java 語言執行個體方法和類方法的說法,正确的是(BC)(多選)。 A.執行個體方法可以直接通過類名調用。 B.類方法可以直接通過類名調用。 C.執行個體方法可以操作執行個體變量也可以操作類變量。 D.類方法可以操作執行個體變量也可以操作類變量。

14.在 Java 語言當中,(C)關鍵字用來實作同步。 A.native B.static C.synchronized D.abstract

15.以下關于 Java 的 List Set 和 Map 集合的描述,錯誤的是(BC)(多選)。 A) List 集合的元素是有序的,元素可以重複 B) HashSet 集合的元素是無序的,可以重複的;TreeSet 是有序的,基于 TreeMap 實作 的 C) HashMap 的 Key 必須唯一,Value 同樣不可以重複 D) LinkedList 線程不安全,它是連結清單結構 E) List 集合具有以下幾種常用的方法:add(E e) clear() hashCode() iterator() toArray()

16.正規表達式“\d+.?\d*”,在比對下列字元串時結果失敗的是(C)。 A.12.5 B.1.25 C.以上都成功 D.以上都失敗

二、簡答題

1.string、stringbuilder、stringbuffer 差別?stringbuilder、stringbuffer 哪個是線程不安全?

答:String對象不可變,線程安全,Stringbuffer(加了同步鎖) 對象可變,線程安全,速度較慢,Stringbuilder對象可變,線程不安全,速度快。

2.HashMap 和 Hashtable 有什麼差別?

答:兩者都實作了map接口,hashmap是以鍵值對存儲,線程不安全,hashtable是安全線程

3.Array 和(ArrayList)有什麼差別?什麼時候應該使用 Array 而不是 ArrayList?

Array長度不可調整,是固定長度的數組,且存儲的值必須是統一類型,而Arraylist底層是可以改變長度的數組,存儲的對象類型不受限制

4.Java 中建立線程哪幾種方式?需要實作什麼方法?優缺點是什麼?

繼承Thread,重寫run方法,使用start啟動線程,受單根繼承的限制

實作runnable接口,重寫run方法,

實作callable接口,實作call方法,

三、程式設計題

1.給定一個長字元串 A 和一個短字元串 B,請問如何最快判斷字元串 B 中的所有字元是否 都在字元串 A 中 publicbooleanstringContains(StringA,StringB){ //編碼區 }

public boolean stringContains(String a,String b){
        char [] ch=b.toCharArray();
        for (char c : ch) {
            if(a.indexOf(c)<0){
                return false;
            }
        }
        return true;
    } 
           

2.在排序的數組中,給定一個值,找出值對應的索引 publicintfindIndex(int[]a,intvalue){ //編碼區 }

public int findIndex(int[]a,int value){
        for (int i = 0; i < a.length; i++) {
            if(a[i]==value){
                return i;
            }
        }
        return -1;

    }
           

3.給定一個整數數組 nums 和一個目标值 target,請你在該集合中找出和為目标值的那兩個整 數,并傳回他們的數組下标。你可以假設每種輸入隻會對應一個答案,但是不能重複利用這 個數組中同樣的元素。 示例: 給定 nums=[2,7,11,15],target=9 因為 nums[0]+nums[1]=2+7=9 是以傳回[0,1] publicSolution{

publicint[]twoSum(int[]num,inttarget){ //編碼區 }

}

public int[] twoSum(int[]num,int target){
        int [] a=new int[2];
        for (int i = 0; i < num.length-1; i++) {
            for (int j = i+1; j <num.length ; j++) {
                if(num[i]+num[j]==target){
                    a[0]=i;
                    a[1]=j;
                    return a;
                }
            }
        }
        return null;
    }
           

4.寫出 List 的三種周遊方式

SQL 部分

List list=new ArrayList<>();
        //增強for
        for (Object o : list) {
            System.out.println(o);
        }
        //for循環
        for (int i = 0; i < list.size(); i++) {
            System.out.println(list.get(i));
        }
        //疊代器
        Iterator it=list.iterator();
        while (it.hasNext()){
            System.out.println(it.next());
        }
           

5.編寫代碼使用 FileReader 和 FileWrite 實作檔案複制功能。

FileReader fr=new FileReader("PATH");
        FileWriter fw =new FileWriter("toPATH");
        int tmp;
        while((tmp=fr.read())!=-1){
            fw.write(tmp);
        }
        fw.close();
        fr.close();
           

一、選擇題

1.已知表 T1 中有 2 行資料,T2 中有 3 行資料,執行語句”selecta.*fromT1a,T2b”後,傳回 的行數為(D)。

A.2 行 B.3 行 C.5 行 D.6 行

3.在資料庫中,表是一個非常重要的資料對象,它是用來____ C __ A、顯示 B、查詢 C、存放 D、檢索

4.選擇要執行操作的資料庫,應該執行的 SQL 指令是(A)。 A、USE B、GO C、EXEC D、DB

二、簡答題

  1. 談談你對事務的了解?

    事務就是為了業務需求,将一組sql語句放入事務,要麼同時成功,要麼同時失敗,提高資料的安全性和執行一緻性;

  2. union 和 unionall 的差別?

    union:對兩個結果集進行歸并處理,去重,排序

    unionAll:歸并,但是不去重,不排序

  3. Where 和 having 的差別?

    where是針對全文的檢索,效率高,having是針對group by 進行過濾,後面跟聚合函數,兩者的位置不同,

  4. in 和 exists 的差別?
  5. char 和 varchar 的差別?

    char是長度固定的,varchar是長度可變的

    三、編碼題

    1.編寫 SQL 語句

    1)建立一張學生表,包含以下資訊,學好,姓名,年齡,性别,家庭住址,聯系 電話。

CREATE TABLE student( 
stuid INT, 
stuname VARCHAR(20) NOT NULL,
age INT NOT NULL,
sex VARCHAR(2) NOT NULL,
address VARCHAR(255),
tel VARCHAR(11)); 
           

2)修改學生表的結構,添加一列資訊,學曆。

3)修改學生表的結構,删除一列資訊,家庭住址。

4)修改學生表的資料,将電話号碼以 11 開發的學員的學曆修改為“碩士”。

3.表 a 如下,編寫一條 SQL 語句,查詢出每門課都大于 80 分的學生姓名及成績

SELECT NAME ,course,score FROM student_score
WHERE NAME NOT IN
(
SELECT NAME FROM student_score WHERE score<80
GROUP BY NAME)
           

4.學生表如下,編寫 SQL 完成:删除除了自動編号不同,其他都相同的學生備援資訊。

CREATE TABLE tmp SELECT * FROM student;
DELETE FROM student WHERE stuid  IN
(
SELECT stuid FROM tmp GROUP BY stuname,age,sex,tel,school
)
DROP TABLE tmp;
           

5.怎麼樣把下面的表 A 資料查詢成表 B 的資料

SELECT YEAR ,(CASE WHEN MONTH=1 THEN amount ELSE 0 END) m1,
(CASE WHEN MONTH=2 THEN amount ELSE 0 END) m2,
(CASE WHEN MONTH=3 THEN amount ELSE 0 END) m3,
(CASE WHEN MONTH=4 THEN amount ELSE 0 END) m4
FROM TABLE 
GROUP BY YEAR