Java Interview Question

20 Essential Java Interview Questions

  • 為什么要在避免在抽象類的構(gòu)造方法中調(diào)用其抽象方法?

    • 主要是因?yàn)槌跏蓟樞驅(qū)е碌?,因?yàn)樵诟割惓跏蓟臅r(shí)候,子類還沒來得及初始化
  • 利用 類似List<e extents Object> , 而不是 List<Object> 來容納子類

  • transit 關(guān)鍵字的用法?

  • 利用transit 修飾field 可以防止 一些不想被序列化的屬性被序列化

  • TreeSet 和HashSet 的比較

  • HashSet 在 add ,remove ,contain 操作都是 O(1) , 而TreeSet 是 O(Log N),可以說HashSet 幾乎在各個(gè)方面都是優(yōu)于TreeSet, 但是TreeSet 是基于Tree 的數(shù)據(jù)結(jié)構(gòu)來實(shí)現(xiàn)的,所以說,TreeSetr 可以保持?jǐn)?shù)據(jù)的元素順序。這個(gè)特性是HashSet所沒有的

  • **好萊塢原則 : ** 以通知代替輪訓(xùn)是好萊塢的核心!

  • 為何 String.length() 給出的結(jié)果并非準(zhǔn)確的?

    • 因?yàn)镾tring.length() 返回的是char[] 數(shù)組的長度,在Java 最初設(shè)計(jì)時(shí),由于char是一個(gè) 16位的變量所它只能覆蓋 Unicode 的第0號平面,如果字符不包含在第0號平面的,將會(huì)覆蓋兩個(gè)char 字節(jié) 具體參考 Uncode 字符衍射
  • **什么是JIT ? **:深入淺出 JIT 編譯器

  • JIT 是JVM 在運(yùn)行時(shí)優(yōu)化代碼的一種機(jī)制

  • 高運(yùn)行頻率的字節(jié)碼直接被翻譯為機(jī)器指令以提高性能。在JIT將這部分翻譯為機(jī)器碼時(shí),是method為單位的。并且翻譯后的機(jī)器碼會(huì)被保存起來,這樣,在第一次以后調(diào)用時(shí),就不需要再進(jìn)行翻譯

  • JIT 有兩種模式:server 模式啟動(dòng)慢,但是運(yùn)行快,client 模式啟動(dòng)快,運(yùn)行慢

  • JIT 的代碼緩存是有限的,可以利用 命令–XX:ReservedCodeCacheSize=Nflag 來最大化代碼緩存

  • 編譯是基于兩個(gè)計(jì)數(shù)器的:一個(gè)是方法被調(diào)用的次數(shù),另一個(gè)是方法中循環(huán)被回彈執(zhí)行的次數(shù)。通過改變 -XX:CompileThreshold=Nflag 的值,可以更改 方法被編譯的閾值,如果在應(yīng)用的性能瓶頸期,更改這個(gè)閾值會(huì)帶來一定的性能提升

  • 說出下面代碼帶來的便捷

 try (final Stream<String> stream = Files.lines(path)){
            stream.forEach(System.out::println);
        } catch (IOException e) {
            e.printStackTrace();
        }
  1. 利用Paths 攻破那個(gè)劇了
  2. 利用method reference 來簡化控制輸出到控制臺
  3. Stream 是繼承于AutoCloseable 接口,然后利用 Java 1.7 開始的try - resource 語法,實(shí)現(xiàn)了stream的自動(dòng)關(guān)閉,不需要再去寫 try-catch-finally了
  • 解釋下面的現(xiàn)象
final List<Integer> list = new ArrayList<>();
list.add(1);
list.add(2);
list.add(3);
list.remove(2)

最后輸出了 [1,2] , 因?yàn)?JVM 總是選擇最為準(zhǔn)確的override 方法,remove 兩個(gè)重載,remove(int index ) 和 remove(Object object ) 明顯第一個(gè)更加準(zhǔn)確,雖然Java 有自動(dòng)裝載功能,但其實(shí)在這里沒有用

  • 解釋下下面代碼存在的問題
public class Foo {
    public Foo() {
        doSomething();
    }

    public void doSomething() {
        System.out.println("do something acceptable");
    }
}

public class Bar extends Foo {
    public void doSomething() {
        System.out.println("yolo");
        Zoom zoom = new Zoom(this); 
    }
}
  • Bar這個(gè)對象在創(chuàng)建時(shí),首先是調(diào)用的父類 Foo的 construor 方法,而父類的constructor 方法又調(diào)用了子類重寫的 doSomething 方法,這樣在Zoom 引用Bar 對象進(jìn)行創(chuàng)建的時(shí)候,是引用的一個(gè)沒有完全初始化完成的對象?。。?/li>
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務(wù)發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,502評論 19 139
  • 1. Java基礎(chǔ)部分 基礎(chǔ)部分的順序:基本語法,類相關(guān)的語法,內(nèi)部類的語法,繼承相關(guān)的語法,異常的語法,線程的語...
    子非魚_t_閱讀 34,623評論 18 399
  • 背景 一年多以前我在知乎上答了有關(guān)LeetCode的問題, 分享了一些自己做題目的經(jīng)驗(yàn)。 張土汪:刷leetcod...
    土汪閱讀 12,890評論 0 33
  • 1.import static是Java 5增加的功能,就是將Import類中的靜態(tài)方法,可以作為本類的靜態(tài)方法來...
    XLsn0w閱讀 1,419評論 0 2
  • 轉(zhuǎn)讓APP有一個(gè)條件,項(xiàng)目上線之后才可以轉(zhuǎn)讓 一 打開iTunes Connect 登陸from 賬戶 就是要...
    負(fù)心薄幸的龍哥閱讀 22,388評論 60 31

友情鏈接更多精彩內(nèi)容