2.9Java專項測試覆盤

  • Math.round(11.5) 等於多少 (). Math.round(-11.5) 等於多少 ( ).
    A. 11 ,-11
    B. 11 ,-12
    C. 12 ,-11
    D. 12 ,-12前端

    解析:Math類中提供了三個與取整有關的方法:ceil,floor,round,這些方法的做用於它們的英文名稱的含義相對應。
    ceil的英文意義是天花板,該方法就表示向上取整。
    floor的英文是地板,該方法就表示向下取整。
    round方法,他表示「四捨五入」。
    答案:Cjava

  • 字符界面下接受用戶從鍵盤輸入,須要import的包是:( )
    A. java.lang包
    B. java.awt包
    C. java.io包
    D. java.applet包mysql

    解析:這個問題的前提是:字符界面下。前端用戶輸入、後臺程序獲取,都是字符流的傳輸,所以須要導入java.io包。而java.util中的Scanner則是獲取控制檯的輸入。所以,答案選C
    答案:Cweb

  • 創建Statement對象的做用是?
    A. 鏈接數據庫
    B. 聲明數據庫
    C. 執行SQL語句
    D. 保存查詢結果
    解析:
    Class.forName(「com.mysql.jdbc.Driver」); //加載jdbc驅動
    con=DriverManager.getConnection(url,user,password); //創建鏈接
    stmt=con.createStatement(); //建立語句執行者
    //stateMent用於執行不帶參數的簡單sql語句
    //PreparedStatement用於執行帶參數的預編譯sql語句可以預防sql注入
    //CallableStatement提供了一種標準形式的調用存儲過程的方法
    stmt.execute(「sql語句」);
    rs=stmt.executeQuery(「sql查詢語句」); //結果集
    答案:Csql

  • 下面論述正確的是()?
    A. 若是兩個對象的hashcode相同,那麼它們做爲同一個HashMap的key時,必然返回一樣的值
    B. 若是a,b的hashcode相同,那麼a.equals(b)必須返回true
    C. 對於一個類,其全部對象的hashcode必須不一樣
    D. 若是a.equals(b)返回true,那麼a,b兩個對象的hashcode必須相同數據庫

    解析:hashCode()方法和equals()方法的做用實際上是同樣的,在Java裏都是用來對比兩個對象是否相等一致。
    重寫的equals()裏通常比較的比較全面比較複雜,這樣效率就比較低,而利用hashCode()進行對比,則只要生成一個hash值進行比較就能夠了,效率很高。
    可是hashCode()並非徹底可靠,有時候不一樣的對象他們生成的hashcode也會同樣(生成hash值得公式可能存在的問題),因此hashCode()只能說是大部分時候可靠,並非絕對可靠,因此咱們能夠得出:
    1.equals()相等的兩個對象他們的hashCode()確定相等,也就是用equals()對比是絕對可靠的。
    2.hashCode()相等的兩個對象他們的equal()不必定相等,也就是hashCode()不是絕對可靠的。
    全部對於須要大量而且快速的對比的話若是都用equals()去作顯然效率過低,因此解決方式是,每當須要對比的時候,首先用hashCode()去對比,若是hashCode()不同,則表示這兩個對象確定不相等(也就是沒必要再用equal()去再對比了),若是hashCode()相同,此時再對比他們的equals(),若是equals()也相同,則表示這兩個對象是真的相同了,這樣既能大大提升了效率也保證了對比的絕對正確性!
    答案:D編程

  • 如下代碼執行的結果顯示是多少( )?

    A. true,false,true
    B. false,true,false
    C. true,true,false
    D. false,false,true緩存

    解析: 其實當咱們在爲Integer賦值的時候,java編譯器會將其翻譯成調用valueOf()方法。好比Integer i=127翻譯爲Integer i=Integer.valueOf(127)
    而後咱們來看看valueOf()函數的源碼:
    public static Integer valueOf(int i)
    {
    //high爲127
    if(i >= -128 && i <= IntegerCache.high)
    return IntegerCache.***[i + 128];
    else
    return new Integer(i);
    }
    能夠看出,對於-128到127之間的數,Java會對其進行緩存。而超出這個範圍則新建一個對象。
    因此如今回到這道問題
    i1和i2爲128,超出範圍,因此都須要新建對象,對象比較爲false;
    i5和i6爲100,在範圍以內,在執行Integer i5=100時,就會直接緩存到內存中,但執行執行Integer i6=100時,就直接從緩存裏取,而不須要新建對象,因此爲true。
    答案:D安全

  • 對於子類的構造函數說明,下列敘述中錯誤的是( )。
    A. 子類不能繼承父類的無參構造函數。
    B. 子類能夠在本身的構造函數中使用super關鍵字來調用父類的含參數構造函數,但這個調用語句必須是子類構造函數的第一個可執行語句。
    C. 在建立子類的對象時,若不含帶參構造函數,將先執行父類的無參構造函數,而後再執行本身的無參構造函數。
    D. 子類不但能夠繼承父類的無參構造函數,也能夠繼承父類的有參構造函數。session

        解析:構造函數不能被繼承,構造方法只能被顯式或隱式的調用。
        答案:D

  • 下面有關java classloader說法正確的是()?
    A. ClassLoader就是用來動態加載class文件到內存當中用的
    B. JVM在斷定兩個class是否相同時,只用判斷類名相同便可,和類加載器無關
    C. ClassLoader使用的是雙親委託模型來搜索類的
    D. Java默認提供的三個ClassLoader是Boostrap ClassLoader,Extension ClassLoader,App ClassLoader
    E. 以上都不正確

         解析:
         答案:ACD

  • 下面的對象建立方法中哪些會調用構造方法 ()?
    A. new語句建立對象
    B. 調用Java.io.ObjectInputStream的readObject方法
    C. java反射機制使用java.lang.Class或java.lang.reflect.Constructor的newInstance()方法
    D. 調用對象的clone()方法

    解析:虛擬機中嚴格規定有且只有5中狀況必須對類進行初始化:
    1.使用new生成對象時,讀取或者設置靜態屬性,調用靜態方法
    2.對類使用反射調用的時候
    3.初始化一個類的時候,若是發現父類沒有被調用,澤須要先觸發其父類進行初始化
    4.當虛擬機啓動時,用戶須要制定一個要執行的朱磊(包含main方法的那個類),虛擬機會先初始化這個主類
    5.使用jdk1.7的動態預定支持時,若是一個java.lang.invoke.MethodHandle實例最後的解析結果REF_getStatic、REF_puttStatic、REF_invokeStatic的方法句柄,而且這個方法句柄所對應的類沒有進行初始化,澤須要先觸發其初始化
    答案:AC

  • 在 hibernate 開發中,關於 POJO 類對象的狀態說法正確的是()。
    A. 自由狀態(Transient):實體在內存中自由存在,與數據庫中的記錄無關
    B. 持久狀態(Persistent):實體處於由Hibernate框架所管理的狀態,對應了數據庫中的一條記錄,同時與某個session實例發生了關聯
    C. 遊離狀態(Detached):在session 關閉以後,可使對象從持久狀態轉換到遊離狀態。
    D. 不能將對象從遊離狀態轉換成持久態

    解析:
    答案:ABC

  • 下面關於volatile的功能說法正確的是哪一個
    A. 原子性
    B. 有序性
    C. 可見性
    D. 持久性

    解析:synchronized保證三大性,原子性,有序性,可見性,volatile保證有序性,可見性,不能保證原子性
    答案:BC

  • 如下各種中哪幾個是線程安全的?( )
    A. ArrayList
    B. Vector
    C. Hashtable
    D. Stack

    解析:下面是這些線程安全的同步的類:
    vector:就比arraylist多了個同步化機制(線程安全),由於效率較低,如今已經不太建議使用。在web應用中,特別是前臺頁面,每每效率(頁面響應速度)是優先考慮的。
    statck:堆棧類,先進後出
    hashtable:就比hashmap多了個線程安全
    enumeration:枚舉,至關於迭代器
    除了這些以外,其餘的都是非線程安全的類和接口。
    答案:BCD

  • 截止JDK1.8版本,java併發框架支持鎖包括?
    A. 讀寫鎖
    B. 自旋鎖
    C. X鎖
    D. 樂觀鎖
    E. 排他鎖

    解析:http://ifeve.com/java_lock_see/
    一、自旋鎖 ,自旋,jvm默認是10次吧,有jvm本身控制。for去爭取鎖
    二、阻塞鎖 被阻塞的線程,不會爭奪鎖。
    三、可重入鎖 屢次進入改鎖的域
    四、讀寫鎖
    五、互斥鎖 鎖自己就是互斥的
    六、悲觀鎖 不相信,這裏會是安全的,必須所有上鎖
    七、樂觀鎖 相信,這裏是安全的。
    八、公平鎖 有優先級的鎖
    九、非公平鎖 無優先級的鎖
    十、偏向鎖 無競爭不鎖,有競爭掛起,轉爲輕量鎖
    十一、對象鎖 鎖住對象
    十二、線程鎖
    1三、鎖粗化 多鎖變成一個,本身處理
    1四、輕量級鎖 CAS 實現
    1五、鎖消除 偏向鎖就是鎖消除的一種
    1六、鎖膨脹 jvm實現,鎖粗化
    1七、信號量 使用阻塞鎖 實現的一種策略
    1八、排它鎖:X鎖,若事務T對數據對象A加上X鎖,則只容許T讀取和修改A,其餘任何事務都不能再對A加任何類型的鎖,直到T釋放A上的鎖。這就保證了其餘事務在T釋放A上的鎖以前不能再讀取和修改A。
    答案:ABD

  • 判斷對錯。在java的多態調用中,new的是哪個類就是調用的哪一個類的方法。()

    解析:java多態有兩種狀況:重載和覆寫
    在覆寫中,運用的是動態單分配,是根據new的類型肯定對象,從而肯定調用的方法;
    在重載中,運用的是靜態多分派,即根據靜態類型肯定對象,所以不是根據new的類型肯定調用的方法
    答案:×

  • 下面代碼的輸出結果是什麼?
    public class ZeroTest {
    public static void main(String[] args) {
    try{
    int i = 100 / 0;
    System.out.print(i);
    }catch(Exception e){
    System.out.print(1);
    throw new RuntimeException();
    }finally{
    System.out.print(2);
    }
    System.out.print(3);
    }
    }
    A. 3
    B. 123
    C. 1
    D. 12
    解析:try catch是直接處理,處理完成以後程序繼續往下執行,throw則是將異常拋給它的上一級處理,程序便不往下執行了。本題的catch語句塊裏面,打印完1以後,又拋出了一個RuntimeException,程序並無處理它,而是直接拋出,所以執行完finally語句塊以後,程序終止了。
    答案:D

  • 關於下面的程序Test.java說法正確的是( )。
    public class Test {
    static String x=「1」;
    static int y=1;
    public static void main(String args[]) {
    static int z=2;
    System.out.println(x+y+z);
    }
    }
    A. 3
    B. 112
    C. 13
    D. 程序有編譯錯誤

    解析:被static修飾的變量稱爲靜態變量,靜態變量屬於整個類,而局部變量屬於方法,只在該方法內有效,因此static不能修飾局部變量
    答案:D

  • 下面關於Spring的說法中錯誤的是()
    A. Spring是一系列輕量級Java EE框架的集合
    B. Spring中包含一個「依賴注入」模式的實現
    C. 使用Spring能夠實現聲明式事務
    D. Spring提供了AOP方式的日誌系統

    解析:Spring並無爲咱們提供日誌系統,咱們須要使用AOP(面向方面編程)的方式,藉助Spring與日誌系統log4j實現咱們本身的日誌系統。 
    答案:D

  • 在java7中,下列不能作switch()的參數類型是?
    A. int型
    B. 枚舉類型
    C. 字符串
    D. 浮點型

    答案:D

  • 說明輸出結果。
    package test;
    import java.util.Date;
    public class SuperTest extends Date{
    private static final long serialVersionUID = 1L;
    private void test(){
    System.out.println(super.getClass().getName());
    }

    public static void main(String[]args){
    new SuperTest().test();
    }
    }
    A. SuperTest
    B. SuperTest.class
    C. test.SuperTest
    D. test.SuperTest.class

    解析:1.首先 super.getClass() 是父類的getClass()方法,其父類是Date,它的getClass()方法是繼承自Object類並且沒有重寫,因此就是調用object的getClass()方法。因此能夠知道是返回當前運行時的類。2.在調用getName()方法而getName()是:包名+類名。
    答案:C

  • 下面關於程序編譯說法正確的是()
    A. java語言是編譯型語言,會把java程序編譯成二進制機器指令直接運行
    B. java編譯出來的目標文件與具體操做系統有關
    C. java在運行時才進行翻譯指令
    D. java編譯出來的目標文件,能夠運行在任意jvm上

    解析:A:.java編譯成的是字節碼,再被各系統的jvm翻譯成本系統能夠識別的機器碼,這就是java一次編程多平臺應用的跨平臺性 B:java源文件生成的是class文件,與系統無關 C:注意字節碼和機器碼不是一回事 java程序在運行時字節碼纔會被jvm翻譯成機 器碼,因此說java是解釋性語言 D:注意jvm的版本
    答案:C

  • CMS垃圾回收器在那些階段是沒用用戶線程參與的
    A. 初始標記
    B. 併發標記
    C. 從新標記
    D. 併發清理

    解析:用戶線程(user-level threads)指不須要內核支持而在用戶程序中實現的線程,其不依賴於操做系統核心,應用進程利用線程庫提供建立、同步、調度和管理線程的函數來控制用戶線程。
    CMS的GC過程有6個階段(4個併發,2個暫停其它應用程序)
    1.初次標記(STW initial mark)
    2.併發標記(Concurrent marking)
    3.併發可中斷預清理(Concurrent precleaning)
    4.最終從新標記(STW remark)
    5.併發清理(Concurrent sweeping)
    6.併發重置(Concurrent reset)
    在初次標記,從新標誌的時候,要求咱們暫停其它應用程序,那麼這兩個階段用戶線程是不會參與的
    答案:AC

  • 關於Java中的ClassLoader下面的哪些描述是錯誤的:( )
    A. 默認狀況下,Java應用啓動過程涉及三個ClassLoader: Boostrap, Extension, System
    B. 通常的狀況不一樣ClassLoader裝載的類是不相同的,但接口類例外,對於同一接口全部類裝載器裝載所得到的類是相同的
    C. 類裝載器須要保證類裝載過程的線程安全
    D. ClassLoader的loadClass在裝載一個類時,若是該類不存在它將返回null
    E. ClassLoader的父子結構中,默認裝載採用了父優先
    F. 全部ClassLoader裝載的類都來自CLASSPATH環境指定的路徑

    解析:A.Java系統提供3種類加載器:啓動類加載器(Bootstrap ClassLoader) 擴展類加載器(Extension ClassLoader) 應用程序類加載器(Application ClassLoader). A正確
    B.《深刻理解Java虛擬機》P228:對於任意一個類,都須要由加載它的類加載器和這個類自己一同確立其在Java虛擬機中的惟一性,每個類加載器,都擁有一個獨立的類名稱空間。這句話能夠表達得更通俗一些:比較兩個類是否「相等」,只有在這兩個類是由同一個類加載器加載的前提下才有意義,不然,即便這兩個類來源於同一個Class文件,被同一個虛擬機加載,只要加載它們的類加載器不一樣,那麼這兩個類一定不相等。接口類是一種特殊類,所以對於同一接口不一樣的類裝載器裝載所得到的類是不相同的。B錯誤
    C.類只需加載一次就行,所以要保證類加載過程線程安全,防止類加載屢次。C正確
    D. Java程序的類加載器採用雙親委派模型,實現雙親委派的代碼集中在java.lang.ClassLoader的loadClass()方法中,此方法實現的大體邏輯是:先檢查是否已經被加載,若沒有加載則調用父類加載器的loadClass()方法,若父類加載器爲空則默認使用啓動類加載器做爲父類加載器。若是父類加載失敗,拋出ClassNotFoundException異常。D錯誤
    E.雙親委派模型的工做過程:若是一個類加載器收到了類加載的請求,它首先不會本身去嘗試加載這個類,而是把這個請求委派給父類加載器去完成,每個層次的類加載器都是如此,所以全部的加載請求最終都應該傳送到頂層的啓動類加載器中,只有當父加載器反饋本身沒法完成這個加載請求時,子加載器纔會嘗試本身去加載。E正確
    F.應用程序類加載器(Application ClassLoader)負責加載用戶類路徑(ClassPath)上所指定的類庫,不是全部的ClassLoader都加載此路徑。F錯誤
    答案:BDF

  • 如下哪幾種方式可用來實現線程間通知和喚醒:( )
    A. Object.wait/notify/notifyAll
    B. ReentrantLock.wait/notify/notifyAll
    C. Condition.await/signal/signalAll
    D. Thread.wait/notify/notifyAll

    解析:wait()、notify()和notifyAll()是 Object類 中的方法 ;
    Condition是在java 1.5中才出現的,它用來替代傳統的Object的wait()、notify()實現線程間的協做,相比使用Object的wait()、 notify(),使用Condition1的await()、signal()這種方式實現線程間協做更加安全和高效。
    答案:AC

相關文章
相關標籤/搜索