1. 程式人生 > 實用技巧 >java牛客錯題 2020年9月16日

java牛客錯題 2020年9月16日

java牛客錯題 2020年9月16日

  1. 下面有關java classloader說法錯誤的是?

    正確答案: C 你的答案: C (正確)

    Java預設提供的三個ClassLoader是BootStrap ClassLoader,Extension ClassLoader,App ClassLoader
    ClassLoader使用的是雙親委託模型來搜尋類的
    JVM在判定兩個class是否相同時,只用判斷類名相同即可,和類載入器無關
    ClassLoader就是用來動態載入class檔案到記憶體當中用的
    解釋:
    JVM在判定兩個class是否相同時,不僅要判斷兩個類名是否相同,而且要判斷是否由同一個類載入器例項載入的。
    一個jvm中預設的classloader有Bootstrap ClassLoader、Extension ClassLoader、App ClassLoader,分別各司其職:
    
    Bootstrap ClassLoader     負責載入java基礎類,主要是 %JRE_HOME/lib/ 目錄下的rt.jar、resources.jar、charsets.jar和class等
    Extension ClassLoader      負責載入java擴充套件類,主要是 %JRE_HOME/lib/ext 目錄下的jar和class
    App ClassLoader           負責載入當前java應用的classpath中的所有類。
    classloader 載入類用的是全盤負責委託機制。 所謂全盤負責,即是當一個classloader載入一個Class的時候,這個Class所依賴的和引用的所有 Class也由這個classloader負責載入,除非是顯式的使用另外一個classloader載入。
    所以,當我們自定義的classlo ader載入成功了 com.company.MyClass以後,MyClass裡所有依賴的class都由這個classLoader來載入完成。
    
  2. 下面有關java例項變數,區域性變數,類變數和final變數的說法,錯誤的是?

    正確答案: B 你的答案: C (錯誤)

    例項變數指的是類中定義的變數,即成員變數,如果沒有初始化,會有預設值。
    區域性變數指的是在方法中定義的變數,如果沒有初始化,會有預設值
    類變數指的是用static修飾的屬性
    final變數指的是用final 修飾的變數
    
    類變數不就是ClassName.variableName嗎。
    解釋:
    區域性變數必須有初始值。
    
  3. 以下多執行緒對int型變數x的操作,哪個不需要進行同步()

    正確答案: D 你的答案: D (正確)

    ++x
    x=y
    x++
    x=1
    自我感覺是賦值的話,不涉及到執行緒問題,而X++,或者變數之間的賦值問題都涉及到先後順序。肯定會導致髒資料等問題。
    同步是害怕在操作過程的時候被其他執行緒也進行讀取操作,一旦是原子性的操作就不會發生這種情況。
    因為一步到位的操作,其他執行緒不可能在中間干涉。另外三項都有讀取、操作兩個步驟,而X=1則是原子性操作。
    
  4. 順序執行下列程式語句後,則b的值是()

    String a="Hello";

    String b=a.substring(0,2);

    正確答案: C 你的答案: B (錯誤)

    Hello
    Hel
    He
    null
    解釋:
    不用看答案了,直接自己寫吧。
    substring擷取字串前閉後開,也就是[0,2),按理說是從0,1,2但是2不包括所以就是C
    
  5. @SuppressWarnings(“deprecation”)的功能是什麼?

    正確答案: A 你的答案: B (錯誤)

    遮蔽不贊同使用的類和方法的警告
    遮蔽在強制型別轉換的時候編譯器給出的警告
    關閉所有警告資訊
    當在可序列化的類上缺少serialVersionUID定義的警告
    考註解:
    本題考查註解程式設計,對java三大註解是否瞭解:
    @SuppressWarnings這是java三大註解之一,主要功能是遮蔽相應的警告。
    裡面的deprecation修飾符則是對java中已經過時或者廢棄方法的警告。
    @SuppressWarnings(“deprecation”)的功能是遮蔽不贊同(就是過時廢棄的意思)使用的類和方法的警告
    
  6. 以下哪些方法是Object類中的方法

    正確答案: A B C D 你的答案: B C (錯誤)

    clone()
    toString()
    wait()
    finalize()
    都是
    
  7. 下述有關c++的虛類和java介面的描述,說法錯誤的是?

    正確答案: C D 你的答案: A C (錯誤)

    c++虛類相當與java裡面的抽象類
    c++中沒有介面的概念,與之對應的是純虛類,對應的是java的介面
    純虛擬函式和虛擬函式的區別在於前者只包含定義,而後者還可以包含函式體。
    一個抽象類和介面中的方法必須是抽象方法
    解釋:
    1、一個子類只能繼承一個抽象類(虛類),但能實現多個介面;
    2、一個抽象類可以有構造方法,介面沒有構造方法;
    3、一個抽象類中的方法不一定是抽象方法,即其中的方法可以有實現(有方法體),介面中的方法都是抽象方法,不能有方法體,只有宣告;
    4、一個抽象類可以是public、private、protected、default,
       介面只有public;
    5、一個抽象類中的方法可以是public、private、protected、default,
       介面中的方法只能是public和default