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

去投資銀行面試會(huì)遇到的10個(gè)Java問題

2018-07-26    來源:importnew

容器云強(qiáng)勢(shì)上線!快速搭建集群,上萬Linux鏡像隨意使用

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

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

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

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

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

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

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

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

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

因?yàn)?put() 會(huì)造成 HashMap 擴(kuò)容操作,又會(huì)進(jìn)一步導(dǎo)致無限循環(huán),這就是為什么你應(yīng)該使用?Hashtable?或?ConcurrentHashMap(后面一個(gè)更好)。

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

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

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

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

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

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

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

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

這是面試官希望從應(yīng)聘者那里聽到的一個(gè)關(guān)鍵點(diǎn)。提到這點(diǎn),你可以得到一些贊賞分。

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

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

但我覺得這個(gè)答案是不完善的。

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

直到Java 1.7, 子字符串保持著原始字符數(shù)組引用,這意味著即使5個(gè)字符長的子字符串也能阻止1GB的字符數(shù)組被垃圾回收器回收,因?yàn)樽幼址3种囊粋(gè)強(qiáng)引用。

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

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

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

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

以下是使用雙重檢查鎖模式實(shí)現(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:當(dāng)你用 Java 編寫存儲(chǔ)寫入程序或存儲(chǔ)讀取程序時(shí),你怎么處理錯(cuò)誤?(答案)

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

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

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

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

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

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

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

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

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

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

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

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

每個(gè)特定的工廠負(fù)責(zé)創(chuàng)建某一種類型的對(duì)象。

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

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

Java 中單例是指在整個(gè) Java 應(yīng)用中 class 只有一個(gè)實(shí)例。例如 java.lang.Runtime 就是一個(gè)單例。

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

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

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

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

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

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

這是一個(gè)更好的方法,因?yàn)樵谀惚闅v時(shí),鍵和值都是可得的,你不需要調(diào)用?get()?方法來檢索值。如果 HashMap 的 bucket 中有一個(gè)巨大的鏈表,它會(huì)造成 O(N) 時(shí)間復(fù)雜度。

如果你使用 Java8,情況會(huì)好點(diǎn),Java8 會(huì)使用樹來替換鏈表。

總結(jié)

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

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

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

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

我會(huì)盡力回答好那些問題。

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

關(guān)于作者: 大瓜細(xì)瓜

查看大瓜細(xì)瓜的更多文章 >>

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

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

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

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