咨詢熱線:0791-87557233
 您現在的位置:  首頁 > 人才服務 

14场胜负: 思誠科技總結:投資銀行最常問的10個Java面試題

來源:思誠科技    更新時間:2018-4-3

14场胜负 www.ckyaa.com 現在的銀行早已經有了自己成熟穩定的信息化團隊,自然也成為了不少技術人員求職的好去處。很多Java開發人員樂于向花旗銀行、巴克萊銀行,瑞士信貸銀行提交申請,但很多人可能還不清楚面試時可能會被問到哪些問題。

思誠科技:銀行java崗位面試題

思誠科技分享了投資銀行的一些常見面試問題,主要針對3年以上工作經驗的Java開發人員,這些問題不適用于新手或具有1-2年Java經驗的人員。

不保證一定會被問到,但這個列表你可以嘗試看看:

問題1:在多線程環境中使用HashMaps有什么問題?get()方法何時進入無限循環?

答:沒有什么方法是錯誤的——這取決于程序員如何使用它。例如,如果只使用一個線程初始化HashMap,并且所有線程都只能從中讀取,那么這非常好。其中一個例子是包含配置屬性的Map。當不止一個線程正在更新HashMap,即添加,更改或刪除任何鍵值對時,真正的問題就開始了。

由于put()操作可能會導致重新調整大小,從而導致無限循環,這就是為什么要使用Hashtable或ConcurrentHashMap(后者更好)。

問題2:不覆蓋hashCode()方法是否有任何性能影響?

答案:這是一個很好的問題,幾乎會問所有面試者。一個糟糕的hashCode函數會導致HashMap中頻繁的沖突,最終增加向HashMap中添加對象的時間。

然而,從Java8開始,沖突不會像早期版本那樣影響性能。因為在閾值之后,鏈接列表將被二叉樹替換,這在最壞的情況下時間復雜度還可以達到O(logN)。

這個問題有時難以回答,是因為許多開發人員只知道equals和hashcode契約,并沒有考慮它們的性能影響。

equals和hashcode契約:

1.如果兩個對象相等,它們的hashcode必須相等;

2.如果兩個對象的hashcode相等,這兩個對象不一定相等。

問題3:不可變對象的所有屬性都必須是final嗎?

答:不必要。如上所述,可以不是final而是private-不是在構造函數中修改它們來實現相同的功能,不要為它們提供setter方法。如果是一個可變對象,永遠不要泄露對該成員的任何引用。

請記住,變量屬性設為final僅確保它不會被重新分配不同的值,但仍可以更改該引用變量所指向的對象的各個屬性。這是面試官希望從候選人那里聽到的關鍵點之一。提到這一點,就可以得到一些分數。

問題4:String中的substring()如何工作?

答:許多開發人員知道答案:“子字符串通過獲取原始字符串的一部分,從原字符串中創建一個新對象?!?/P>

但我認為這個答案是不夠的。這個問題的目的在于看看開發人員是否熟悉子串可能產生的內存泄漏風險。

在Java1.7之前,一個保存了原始字符數組引用的子字符串,意味著5個字符長的子字符串也可以通過保留強引來阻止垃圾收集中的1GB字符數組。

這個問題在Java1.7中得到了修復,原來的字符數組不再被引用,但是這種改變也使得創建子字符串在時間上成本更高。早些時候,它在O(1)范圍內,在Java7最壞的情況下可能是O(N)。

問題5:你能為singleton編寫關鍵部分代碼嗎?

答:這個核心Java問題是前一個問題的后續,希望面試者使用雙重檢查鎖定模式編寫Java單例,請記住使用volatile變量來使Singleton線程安全。

問題6:在編寫存儲過程或從Java訪問存儲過程時,如何處理錯誤條件?

答:這是Java面試題中幾乎對所有人開放的問題。如果某個操作失敗,存儲過程應該返回一個錯誤代碼,但如果存儲過程本身失敗,那么捕獲SQLException是唯一的選擇。

問題7:Executor.submit()和Executer.execute()方法有什么區別?

這個問題來自投資銀行針對有經驗的程序員的50個Java多線程問題列表。

由于擁有良好并發技能的Java開發人員的巨大需求,它日益普及。順便說一句,如果想認真構建并發技能,那么HeinzKabutz的JavaConcurrencyinPractice課程是一個很好的開始。它是關于Java并發的最高級課程之一,也是基于BrianGoetz和其公司的經典書籍JavaConcurrencyinPractice。

這個Java面試問題的答案是前者返回一個Future對象,它可以用來從worker線程中查找結果。查看異常處理時有區別。如果任務拋出一個異常(如果是在執行時提交的),這個異常將進入未捕獲的異常處理程序(當沒有顯式提供異常時,默認只會將堆棧跟蹤打印到System.err)。

如果在提交任何拋出異常時提交了任務,則檢查異常與否,這是任務返回狀態的一部分。對于已提交并以異常終止的任務,Future.get()將重新拋出此異常,并包裝在ExecutionException中。

問題8:Factory和AbstractFactory模式有什么區別?

與Factory模式相比,AbstractFactory提供了更多級別的抽象。

考慮不同的Factory,每個Factory都從AbstractFactory擴展而來,負責根據Factory類型創建不同的對象層次結構。

例如,AbstractFactory可以通過AutomobileFactory,UserFactory,RoleFactory等進行擴展。

每個Factory都將負責創建該類型的對象。

問題9:什么是Singleton?讓整個方法同步還是只有關鍵部分同步更好?

答:Java中的Singleton是在整個Java應用程序中只有一個實例的類。例如,java.lang.Runtime是一個Singleton類。

在Java5之前創建Singleton是棘手的,自從Java5引入Enum,它變得非常容易。

這個問題需要程序員了解使用Enums編寫單例和使用雙重檢查鎖定的一些細節,這是此Java面試問題的目的。

問題10:你能編寫用于在Java4和Java5中迭代HashMaps的代碼嗎?

答:這是一個棘手問題,程序員可以設法使用while和for循環。但實際上,有幾種方法可以遍歷Java中的所有Map。

第一種方法涉及使用keySet()并迭代該鍵,然后使用get()方法檢索值,這有點貴。

第二種方法涉及使用entrySet()并遍歷它們,方法是使用for循環或使用Iterator.hasNext()方法。這個方法更好。因為在迭代過程中key和value對象都可用,并且不需要調用get()方法來檢索值,這可以提供O(N)性能。

如果使用Java8并且有樹而不是鏈接列表,可能會稍微好一點。

結論

這就是投資銀行常見的Java面試問題。如果你正在尋找Java開發人員相關崗位,那么應該多了解Java并發性,多線程,集合,JVM內部結構,垃圾回收以及如何提高Java應用程序的性能。

  • 上一篇文章:

  • 下一篇文章:
  •  

    0791-87557233

    重視每個來電 珍惜您的時間
    思誠者開發沙龍
    江西思誠科技有限公司  贛ICP備17006097號  CopyRight©2014 - 2019
    {ganrao}