中文字幕在线观看,亚洲а∨天堂久久精品9966,亚洲成a人片在线观看你懂的,亚洲av成人片无码网站,亚洲国产精品无码久久久五月天

去投資銀行面試會遇到的10個Java問題

2018-07-26    來源:importnew

容器云強勢上線!快速搭建集群,上萬Linux鏡像隨意使用

很多Java開發(fā)人員會到巴克萊、瑞士信貸、花旗等投資銀行申請Java開發(fā)職位,但他們中很多人都不知道面試時會遇到什么類型的問題。

在這篇文章中,我將分享一些3年以上經(jīng)驗Java開發(fā)人員頻繁被銀行問到的問題。是的,這些問題不是為新人或者1-2經(jīng)驗的開發(fā)人員準備的-通常,銀行不通過公開面試雇用他們。相反,他們大多以畢業(yè)培訓生的身份加入銀行。

我不能保證你會被問到這些問題,但它們足以讓你了解真正的面試中會出現(xiàn)哪種類型的問題。

還有,準備得越多,你就準備得越好。所以,如果你覺得這10個問題不夠,還需要更多,可以查看這40個電話面試java問題200多個問題列表,以做更好的準備。

一旦你見識過這些問題,參加任何Java面試你都會自信很多。

廢話少說,下面是我列舉的一些投資銀行最常問到的Java問題:

問題1: 在多線程環(huán)境中使用HashMap有什么問題?調(diào)用get()方法什么時候會進入無限循環(huán)?(答案)

首先,這并沒什么錯 — 它取決于你怎樣使用它。例如,如果你僅僅使用一個線程初始化 HashMap 而所有的線程只是讀取它,這可以很好的工作。

還有一個例子是包含配置屬性的 Map。當多個線程更新這個 HashMap,如添加、修改或刪除任何一個鍵值對時,真正的問題來了。

因為 put() 會造成 HashMap 擴容操作,又會進一步導致無限循環(huán),這就是為什么你應該使用?Hashtable?或?ConcurrentHashMap(后面一個更好)。

問題2. 不覆蓋 hashCode()方法會有性能問題嗎?(答案)

這是一個很好的問題,大家都應該有所了解。據(jù)我所知,一個效率低的 hashCode 方法會導致 HashMap內(nèi)部頻繁的沖突,最終添加對象到這個 HashMap 要花費更多時間。

從?Java8?開始, Hash沖突已經(jīng)不會像先前版本那么影響性能了, 因為超過臨界值后,鏈表會被二叉樹替換,在最壞情況下也可以達到 O(log N) 復雜度。相比之下,鏈表的復雜度是O(N)。

這是你將面對的幾個棘手的Java問題之一。很多開發(fā)者都只知道要重寫 equals 和 hashcode 方法。而沒有考慮它們對性能影響。

問題3:不變對象的所有屬性都需要聲明為final嗎?(答案)

不需要。如上所述,你可以通過聲明成員變量為?private?而不是 final 實現(xiàn)相同的功能, — 除了構(gòu)造方法,沒有其他途徑修改它們。

不要為它們提供?setter 方法,如果它是一個可變的對象,不要泄漏這個成員的任何引用。

記住,聲明一個引用屬性為?final?只能保證它不會再指向另一個值,但你仍然可以改變這個引用指向?qū)ο蟮母鱾屬性。

這是面試官希望從應聘者那里聽到的一個關鍵點。提到這點,你可以得到一些贊賞分。

問題4:String中的substring ()方法是怎樣工作的?(答案)

很多開發(fā)者都知道這個答案:”子字符串通過獲取原始字符串的一部分,從原 string 對象中創(chuàng)建一個新對象“。

但我覺得這個答案是不完善的。

這個問題主要是為了考察開發(fā)者是否熟悉子字符串造成的內(nèi)存泄漏風險。

直到Java 1.7, 子字符串保持著原始字符數(shù)組引用,這意味著即使5個字符長的子字符串也能阻止1GB的字符數(shù)組被垃圾回收器回收,因為子字符串保持著它的一個強引用。

這個問題在 Java1.7 被修復, 原始字符數(shù)組不再被引用,但這個改變也造成創(chuàng)建子字符串要花費多一點時間。之前,它在 O(1) 復雜度內(nèi)完成,在 Java7 中最壞情況下,它會達到 O(N) 復雜度。

問題5:你能寫出單例的關鍵代碼片段嗎?(答案)

這個關鍵的 Java 問題是前一個問題的后續(xù)。希望應聘者使用雙重檢查鎖模式寫出java單例。

記住使用 volatile 變量確保單例線程安全。

以下是使用雙重檢查鎖模式實現(xiàn)線程安全單例的核心代碼:

public class Singleton {
    private static volatile Singleton _instance;
    /**
     * Double checked locking code on Singleton
     * @return Singelton instance
     */
    public static Singleton getInstance() {
        if (_instance == null) {
            synchronized(Singleton.class) {
                if (_instance == null) {
                    _instance = new Singleton();
                }
            }
        }
        return _instance;
    }
}

問題6:當你用 Java 編寫存儲寫入程序或存儲讀取程序時,你怎么處理錯誤?(答案)

這也是一個棘手的Java問題,它同樣面向所有人。我有一個朋友不知道答案,但他不介意告訴我。

我的看法是,如果一些寫入存儲操作失敗,就應該返回一個錯誤code,但如果是這個程序本身失敗,那唯一的選擇就是捕獲SQL異常了。

問題7:Executor.submit()方法和Executer.execute()有什么不同?(答案)

這個Java面試問題來自我的50個多線程問題列表,它是銀行用于針對有經(jīng)驗的程序員的。

因為現(xiàn)在對擁有良好并發(fā)技能的 Java 開發(fā)人員有巨大需求,這問題也正日益流行。另外,如果你正認真地打造你的并發(fā)技能,Heinz Kabutz的 《Java Concurrency in Practice》是一個很好的開始。這是最高級的java并發(fā)課程,它基于經(jīng)典java書籍,Brian Goetz和其公司的《Java Concurrency in Practice》。

總之,這個 Java 面試問題的答案是前者返回一個?Future?對象,可以通過這個對象從工作線程中獲取結(jié)果。

觀察異常處理,你會發(fā)現(xiàn)另外一個不同之處。如果你的任務拋出一個異常(異常由execute的任務觸發(fā)),這個異常將會交由未捕捉異常處理器來處理(當你沒有提供一個確切的處理器,默認處理器只會打印異常棧軌跡到 System.err)。

如果你submit的任務觸發(fā)了異常,不管是不是受檢異常,它們都是這個任務返回狀態(tài)的一部分。因為這個任務是被 submit 的,并以異常終結(jié),F(xiàn)uture.get() 會將這個異常封裝在 ExecutionException 中,再重新拋出。

問題8: 工廠模式和抽象工廠模式有什么不同?(答案)

相比工廠模式,抽象工廠提供了更多一層的抽象。

不同的工廠可以繼承自同一個抽象工廠,并基于工廠的類型創(chuàng)建不同類別的對象。

例如,AbstractFactory 可以被 AutomobileFactory、UserFactory、RoleFactory等工廠繼承。

每個特定的工廠負責創(chuàng)建某一種類型的對象。

這是工廠模式和抽象工廠模式的UML圖:

問題9: 什么是單例?整個方法同步和代碼臨界片段同步哪個更好?(答案)

Java 中單例是指在整個 Java 應用中 class 只有一個實例。例如 java.lang.Runtime 就是一個單例。

在 Java5 中,創(chuàng)建單例很麻煩,但 Java5 引入了枚舉后,就容易很多了。

請看看我的文章《怎樣在Java中創(chuàng)建線程安全的單例》,可以獲得使用枚舉和雙重檢查鎖模式編寫單例的更多細節(jié),這些正是這個java面試問題的考察目的。

問題10:在Java4和Java5中,你能不能寫下迭代遍歷HashMaps的代碼?(答案)

這是也是一個棘手的問題,正如回答者所說,他努力使用while和for循環(huán)完成。實際上,在Java中有4種方法遍歷Map。

一個方法是使用?keySet()?來遍歷所有的 key,然后使用?get() 方法來檢索值,但這樣成本有點昂貴。

第二種方法是使用 entrySet(),通過 for 循環(huán)或者結(jié)合 Iterator.hasNext() 方法使用 while 循環(huán)遍歷它們。

這是一個更好的方法,因為在你遍歷時,鍵和值都是可得的,你不需要調(diào)用?get()?方法來檢索值。如果 HashMap 的 bucket 中有一個巨大的鏈表,它會造成 O(N) 時間復雜度。

如果你使用 Java8,情況會好點,Java8 會使用樹來替換鏈表。

總結(jié)

這就是投資銀行常見的Java面試問題。如果你準備成為一名 Java 開發(fā)人員,那您應該多關注Java并發(fā)、多線程、集合、JVM內(nèi)部結(jié)構(gòu),垃圾回收以及如何提高 Java 應用程序的性能。

在這篇文章中,我沒有涉及到準備Java面試時需要的所有專題,但如果你正在認真準備,這里有些有用的資源,可以找到更多結(jié)構(gòu)化和專題問題:

1. 200+ Java面試問題 – 指南
2. 針對2到5年經(jīng)驗開發(fā)人員的130+java核心問題
3. 破解編碼面試-189個問題和解決方案
4. Java面試攻略

希望可以幫到你的下一個工作面試。如果你理解問題有任何困難或者你正尋找最近面試遇到問題的答案,請隨時與我們分享。

我會盡力回答好那些問題。

原文鏈接: dzone 翻譯: ImportNew.com - 大瓜細瓜
譯文鏈接: http://www.importnew.com/29199.html
[ 轉(zhuǎn)載請保留原文出處、譯者和譯文鏈接。]

關于作者: 大瓜細瓜

查看大瓜細瓜的更多文章 >>

標簽: 安全 代碼 開發(fā)者

版權(quán)申明:本站文章部分自網(wǎng)絡,如有侵權(quán),請聯(lián)系:west999com@outlook.com
特別注意:本站所有轉(zhuǎn)載文章言論不代表本站觀點!
本站所提供的圖片等素材,版權(quán)歸原作者所有,如需使用,請與原作者聯(lián)系。

上一篇:avue 1.5.2 優(yōu)化大量底層代碼,crud 和 form 底層公用

下一篇:Java EE8的五大最新特性