<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

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

          共 3884字,需瀏覽 8分鐘

           ·

          2018-07-26 07:58

          很多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有什么問題?調用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)相同的功能, — 除了構造方法,沒有其他途徑修改它們。

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

          記住,聲明一個引用屬性為?final?只能保證它不會再指向另一個值,但你仍然可以改變這個引用指向對象的各個屬性。

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

          問題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?對象,可以通過這個對象從工作線程中獲取結果。

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

          如果你submit的任務觸發(fā)了異常,不管是不是受檢異常,它們都是這個任務返回狀態(tài)的一部分。因為這個任務是被 submit 的,并以異常終結,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)或者結合 Iterator.hasNext() 方法使用 while 循環(huán)遍歷它們。

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

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

          總結

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


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

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

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

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


          原文鏈接:?dzone?翻譯:?ImportNew.com?-?大瓜細瓜

          譯文鏈接:?http://www.importnew.com/29199.html

          瀏覽 202
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          評論
          圖片
          表情
          推薦
          點贊
          評論
          收藏
          分享

          手機掃一掃分享

          分享
          舉報
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  中文字幕亚洲a√ | 最新免费一区二区三区 | 亚洲精品系列 | 欧美一区三区 | 午夜精品一区二区三区免费视频 |