投行数据_投行对Java的二十大核心访谈问答
投行數據
這是在金融領域(主要是在大型投資銀行)共享Java核心訪談問題和答案的新系列。 在JP Morgan,Morgan Stanley,Barclays或Goldman Sachs上會問許多這些Java面試問題。 銀行主要從多線程 , 集合 ,序列化,編碼和OOPS設計原理詢問Java核心訪談問題。
我已經從我的朋友那里收集了這些問題,并希望與大家分享。 我希望這對我們雙方都有幫助。 練習一些編程面試問題也是有益的,因為在幾乎所有Java面試中,至少出現1或2個編碼問題。 請分享未回答的Java面試問題的答案,并讓我們知道這些Java面試問題有多好? 如果您正在認真準備Java面試并參加面試,那么我也建議您看看Markham公開的Java編程面試 。
這是一本專門針對Java的書籍,以其較早的暢銷書為原型,也涉及編程訪談。 本書不僅包含來自Java的問題,還包含來自相關技術堆棧的問題,例如JUnit,Maven,設計模式,JVM內部原理,Android和最佳實踐。 問題很好,答案很明確,解釋也很清楚,這也使它讀起來很有趣。
20多個核心Java面試問題答案
這些Java面試問題混合了一些簡單,棘手和棘手的Java問題,例如,為什么Java不支持多重繼承是棘手的問題之一。 多數問題是在高級和有經驗的水平上提出的,即3、4、5或6年的Java經驗,例如HashMap如何在Java中工作,這在有經驗的Java訪談中最受歡迎。
順便說一句,最近,我正在查看有關本文中給出的Java面試問題的答案和評論,我發現其中一些非常有用,可以包含在主要文章中,以使所有人受益。 除了博客和文章之外,您還可以利用一些書籍,這些書籍是專門為清除編程訪談而寫的,而另一些書籍則著重于Java編程,因此想到的兩本書是《 破解編碼面試》和《 公開的編程面試》:下一份工作的秘密和。 這兩本書都側重于一般的編程以及許多其他相關主題,例如數據結構,算法,數據庫,SQL,網絡和行為問題,但也包含Java概念。
問題1:在多線程環境中使用HashMap有什么問題? 什么時候get()方法進入無限循環? ( 回答 )
好吧,沒有錯,這取決于您如何使用它。 例如,如果僅通過一個線程初始化HashMap,然后所有線程都只從中讀取,那么就很好了。 一個示例是包含配置屬性的映射。 真正的問題開始于該線程中的至少一個線程正在更新HashMap時,即添加,更改或刪除任何鍵值對。 由于put()操作可能會導致重新調整大小,并可能進一步導致無限循環,因此這就是為什么您以后應該使用Hashtable或ConcurrentHashMap的原因。
問題2.覆蓋hashCode()方法是否對性能有影響? ( 回答 )
這是一個很好的問題,并向所有人開放,因為據我所知,較差的哈希碼功能將導致HashMap中頻繁發生沖突,最終增加了將對象添加到Hash Map中的時間。 從Java 8開始,沖突不會像以前的版本那樣影響性能,因為在閾值之后,鏈表將被二叉樹取代,在最壞的情況下,O(logN)性能會得到提高,因為與鏈表的O(n)比較。
問題3:不可變對象的所有屬性是否都必須是最終的? ( 回答 )
不一定,如上所述,您可以通過使成員成為非最終成員而不是私有成員并且不修改它們(除非在構造函數中)來實現相同的功能。 不要為它們提供setter方法,如果它是一個可變對象,則不要泄漏該成員的任何引用。 請記住將參考變量定為final,僅確保不會將其重新分配為其他值,但是您仍然可以更改該參考變量所指向的對象的各個屬性。 這是關鍵點之一,面試官喜歡從候選人那里聽到。
問題4:String中的substring()方法如何工作? ( 回答 )
另一個很好的Java面試問題,我認為答案還不夠,但是這里是“子字符串通過從原始字符串中提取一部分來創建一個新對象”。 主要詢問此問題,以了解開發人員是否熟悉子字符串可能造成的內存泄漏風險。 在Java 1.7之前,子字符串保留原始字符數組的引用,這意味著即使一個5個字符長的子字符串也可以通過保留強引用來防止1GB字符數組被垃圾回收。
這個問題在Java 1.7中已得到修復,在Java 1.7中不再引用原始字符數組,但是這種更改也使創建子字符串的時間花費更高。 先前它在O(1)的范圍內,在Java 7的最壞情況下可能是O(n)。
問題 5:您可以為單例編寫關鍵部分代碼嗎? ( 回答 )
這個核心Java問題是上一個問題的跟進,并期望候選人使用雙重檢查鎖定來編寫Java單例。 請記住使用volatile變量使Singleton線程安全。 這是使用雙重檢查的鎖定習慣用法的線程安全的Singleton模式的關鍵部分的代碼:
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面試中最棘手的問題之一,而且開放給所有人使用,我的朋友不知道答案,所以他不介意告訴我。 我的看法是,如果某些操作失敗,則存儲過程應該返回錯誤代碼,但是如果存儲過程本身失敗,則捕獲SQLException是唯一的選擇。
問題7:Executor.submit()和Executer.execute()方法之間有什么區別? ( 回答 )
該問題來自我的15個Java多線程問題解答。 由于具有良好的并發技能的Java開發人員的巨大需求,它日趨流行。 答案是前者返回一個Future對象,該對象可用于從工作線程中查找結果。
查看異常處理時有所不同。 如果您的任務拋出異常,并且該異常是在執行該異常時提交的,則會轉到未捕獲的異常處理程序(當您未明確提供異常處理程序時,默認的異常處理程序只會將堆棧跟蹤打印到System.err)。 如果您提交的任務與提交任何引發的異常(是否經過檢查的異常)一起提交,則它將成為任務返回狀態的一部分。 對于通過提交提交且以異常終止的任務, Future.get()將重新引發此異常,并包裝在ExecutionException 。
問題8:工廠模式和抽象工廠模式有什么區別? ( 回答 )
抽象工廠提供了另一層抽象。 考慮不同的工廠,每個工廠都從抽象工廠擴展而來,并負責根據工廠的類型創建不同的對象層次結構。 例如,由AutomobileFactory , UserFactory , RoleFactory等擴展的RoleFactory 。每個工廠都將負責創建該類型的對象。 這是工廠和抽象工廠模式的UML圖:
問題9:什么是單例? 使整個方法同步還是僅使關鍵部分同步更好? ( 回答 )
Java中的Singleton是一個類,在整個Java應用程序中只有一個實例,例如, java.lang.Runtime是Singleton類。 在Java 4之前,創建Singleton非常棘手,但是一旦Java 5引入Enum,它就非常容易。
問題10:您可以在Java 4和Java 5中編寫用于遍歷HashMap的代碼嗎? ( 回答 )
棘手的但他設法使用while和for循環來編寫。 實際上,有四種方法可以遍歷Java中的任何Map,一種涉及使用keySet()并遍歷key,然后使用get()方法來檢索值,這有點昂貴。 第二種方法涉及使用entrySet()并通過為每個循環使用或在Iterator.hasNext()方法中進行遍歷。 這是一種更好的方法,因為在迭代過程中鍵和值對象都可以使用,并且不需要調用get()方法來檢索值,這在出現巨大鏈表的情況下可以提高O(n)的性能。一桶。 有關詳細說明和代碼示例,請參見我的文章4在Java中迭代Map的方法 。
問題11:什么時候覆蓋hashCode()和equals()? ( 回答 )
只要有必要,尤其是如果您要基于業務邏輯而不是對象相等性進行相等性檢查,例如,兩個雇員對象具有相同的emp_id,則相等,盡管它們是由代碼的不同部分創建的兩個不同的對象。 如果要在HashMap中將它們用作鍵,則必須重寫這兩種方法。 現在,作為Java中的equals-hashcode合同的一部分,當您覆蓋equals時,您還must覆蓋hashcode,否則您的對象將不會破壞類的不變性,例如Set,Map依靠equals()方法正常運行。 您還可以查看有關Java中的equals的文章5技巧,以了解在處理這兩種方法時可能出現的細微問題。
問題12: 如果不重寫hashCode()方法將是什么問題? ( 回答 )
如果不重寫equals方法,則equals和hashcode之間的協定將不起作用,根據該契約,由equals()相等的兩個對象必須具有相同的hashcode。 在這種情況下,另一個對象可能返回不同的hashCode并將被存儲在該位置,這將破壞HashMap類的不變性,因為它們不應允許重復的鍵。 當您使用put()方法添加對象時,將迭代該存儲桶位置中存在的所有Map.Entry對象,并更新先前映射的值(如果Map已經包含該鍵)。 如果未覆蓋哈希碼,則此方法將無效。
問題13:同步getInstance()方法的關鍵部分或整個getInstance()方法是否更好? ( 回答 )
答案只是關鍵部分,因為如果我們鎖定整個方法,那么每次有人調用此方法時,即使我們沒有創建任何對象,它都必須等待。 換句話說,僅在創建對象時才需要同步,同步僅發生一次。 創建對象后,無需進行任何同步。 實際上,就性能而言,這是非常差的編碼,因為同步方法最多可將性能降低10到20倍。 這是Singleton模式的UML圖:
順便說一下,有幾種方法可以在Java中創建線程安全的單例,您也可以在此問題或后續文章中提及這些方法。
問題14:在get()操作期間,圖片中的equals()和hashCode()方法在哪里? ( 回答 )
這個核心Java面試問題是對先前Java問題的后續,應聘者應該知道,一旦您提到hashCode,人們很可能會問他們如何在HashMap中使用它們。 提供鍵對象時,首先調用其hashcode方法以計算存儲桶位置。 由于存儲桶可能包含多個條目作為鏈接列表,因此通過使用equals()方法評估每個Map.Entry對象,以查看它們是否包含實際的鍵對象。
問題15:如何避免Java陷入僵局? ( 回答 )
您可以通過打破循環等待條件來避免死鎖。 為此,您可以在代碼中進行安排以將順序強加于鎖的獲取和釋放。 如果將以一致的順序獲取鎖并以相反的順序釋放鎖,則不會出現一個線程持有由另一線程獲取的鎖的情況,反之亦然。 有關代碼示例和詳細說明,請參見詳細答案。
問題16:將String創建為new()和立即數有什么區別? ( 回答 )
當我們使用new()運算符創建字符串時,它是在堆中創建的,而不是添加到字符串池中,而使用文字創建的字符串是在存在于堆的PermGen區域的字符串池本身中創建的。
String str = new String("Test")不會將對象str放入字符串池,我們需要調用String.intern()方法,該方法用于顯式將它們放入字符串池。 只有將String對象創建為String文字(例如String s = "Test" ,Java才會自動將其放入String池。 順便說一句,這里有一個問題,因為我們將參數傳遞為“ Test”(這是一個字符串文字),所以它還將在字符串池上創建另一個對象作為“ Test”。 這是一個要點,直到Javarevisited博客的博學的讀者提出來之前,這一點才被注意到。 要了解更多關于字符串文字和String對象之間的差異,看到這個文章。
這是一個很好的圖像,很好地顯示了這種差異:
問題17:什么是不可變對象? 你可以寫一個不可變的類嗎? ( 回答 )
不變類是Java類,其對象一旦創建就無法修改。 不可變對象中的任何修改都會產生新對象。 例如, String在Java中是不可變的 。 大多數情況下,不可變類在Java中也是最終的,以防止子類覆蓋可能損害不可變性的方法。 您可以通過將成員設置為非最終成員但私有并將其修改(除非在構造函數中)來實現相同的功能。
除了顯而易見的形式外,您還需要確保不暴露不可變對象的內部,尤其是當它包含可變成員時。 同樣,當您從客戶端(例如java.util.Date )接受可變成員的值時,請使用clone()方法為您自己保留一個單獨的副本,以防止惡意客戶端在設置可變引用后對其進行修改的風險。
在返回可變成員的值,將另一個單獨的副本返回給客戶端,從不返回Immutable類所擁有的原始引用時,需要采取相同的預防措施。 您可以查看我的文章如何在Java中創建不可變類,以獲取逐步指南和代碼示例。
問題18:提供一種最簡單的方法來找出方法執行所需的時間而無需使用任何分析工具? ( 回答 )
在調用方法之前和thr方法返回之后立即讀取系統時間。 采取時間差,這將為您提供執行方法所花費的時間。
放入代碼中...
long start = System.currentTimeMillis (); method (); long end = System.currentTimeMillis ();System.out.println (“Time taken for execution is ” + (end – start));請記住,如果執行時間太短,則可能表明執行時間為零毫秒。 嘗試使用一種足夠大的方法,從某種意義上說,它正在執行大量處理
問題19:要在HashMap中使用對象作為鍵,需要實現以下兩種方法? ( 回答 )
為了將任何對象用作HashMap或Hashtable中的Key,它必須在Java中實現equals和hash-code方法。 閱讀HashMap如何在Java中工作,以獲取有關如何使用相等和哈希碼方法從HashMap放置和獲取對象的詳細說明。
問題20:如何防止客戶直接實例化您的具體課程? 例如,您有一個Cache接口以及兩個實現類MemoryCache和DiskCache,如何確保客戶端沒有使用new()關鍵字創建這兩個類的對象。
我將這個問題留給您練習和思考,然后再給出答案。 我相信您可以找到正確的方法來執行此操作,因為從維護的角度來看,這是保持對類的控制的重要決定之一。
我也非常感謝我的讀者,他們慷慨地為初學者和經驗豐富的開發人員貢獻了Java Interviews中的幾個好問題。 我已經在此博客中回答了許多這些問題,您可以使用此頁面右上角的搜索框輕松找到相關的帖子。
更多問題
- 過去5年中的133+個Java面試問題( 在此處閱讀 )
- 最近三年來的50多個Java多線程問題( 請參閱此處 )
- 50多個程序員電話面試問題及答案( 鏈接 )
推薦書籍
- Java編程面試公開
- 破解編碼面試:150個編程問題
翻譯自: https://www.javacodegeeks.com/2015/11/top-20-core-java-interview-questions-and-answers-from-investment-banks.html
投行數據
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的投行数据_投行对Java的二十大核心访谈问答的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 部署被测软件应用和中间件_使用FlexD
- 下一篇: java实现ldap服务器_Java到L