黄色网址大全免费-黄色网址你懂得-黄色网址你懂的-黄色网址有那些-免费超爽视频-免费大片黄国产在线观看

專注Java教育14年 全國咨詢/投訴熱線:400-8080-105
動力節(jié)點LOGO圖
始于2009,口口相傳的Java黃埔軍校
首頁 學習攻略 Java學習 來自銀行的10個Java面試題,僅供參考

來自銀行的10個Java面試題,僅供參考

更新時間:2019-08-14 14:00:10 來源:動力節(jié)點 瀏覽7204次

Java常見面試題匯總.jpg

  問題一:在多線程環(huán)境中使用HashMap會有什么問題?在什么情況下使用get()方法會產(chǎn)生無限循環(huán)?

  HashMap本身沒有什么問題,有沒有問題取決于你是如何使用它的。比如,你在一個線程里初始化了一個HashMap然后在多個其他線程里對其進行讀取,這肯定沒有任何問題。有個例子就是使用HashMap來存儲系統(tǒng)配置項。當有多于一個線程對HashMap進行修改操作的時候才會真正產(chǎn)生問題,比如增加、刪除、更新鍵值對的時候。因為put()操作可以造成重新分配存儲大小(re-sizeing)的動作,因此有可能造成無限循環(huán)的發(fā)生,所以這時需要使用Hashtable或者ConcurrentHashMap,而后者更優(yōu)。

  問題二:不重寫B(tài)ean的hashCode()方法是否會對性能帶來影響?

  這個問題非常好,每個人可能都會有自己的體會。按照我掌握的知識來說,如果一個計算hash的方法寫得不好,直接的影響是,當向HashMap中添加元素的時候會更頻繁地造成沖突,因此最終增加了耗時。但是自從Java8開始,這種影響不再像前幾個版本那樣顯著了,因為當沖突的發(fā)生超出了一定的限度之后,鏈表類的實現(xiàn)將會被替換成二叉樹(binarytree)實現(xiàn),這時你仍可以得到O(logN)的開銷,優(yōu)于鏈表類的O(n)。

  問題三:對于一個不可修改的類,它的每個對象是不是都必須聲明成final的?

  不盡然,因為你可以通過將成員聲明成非final且private,并且不要在除了構(gòu)造函數(shù)的其他地方來修改它。不要為它們提供setter方法,同時不會通過任何函數(shù)泄露出對此成員的引用。需要記住的是,把對象聲明成final僅僅保證了它不會被重新賦上另外一個值,你仍然可以通過此引用來修改引用對象的屬性。這一點是關(guān)鍵,面試官通常喜歡聽到你強調(diào)這一點。

  問題四:你在寫存儲過程或者在Java里調(diào)用存儲過程的時候如何來處理錯誤情況?

  這是個很棘手的Java面試題,答案也并不固定。我的答案是,寫存儲過程的時候一旦有操作失敗,則一定要返回錯誤碼。但是在調(diào)用存儲過程的時候出錯的話捕捉SQLException卻是唯一能做的。

  問題五:Executor.submit()和Executor.execute()這兩個方法有什么區(qū)別?

  答案是:前者返回一個Future對象,可以通過這個對象來獲得工作線程執(zhí)行的結(jié)果。

  當我們考察異常處理的時候,又會發(fā)現(xiàn)另外一個不同。當你使用execute提交的任務(wù)拋出異常時,此異常將會交由未捕捉異常處理過程來處理(uncaughtexceptionhandler),當你沒有顯式指定一個異常處理器的話,默認情況下僅僅會通過System.err打印出錯誤堆棧。

  當你用submit來提交一個任務(wù)的時候,這個任務(wù)一旦拋出異常(無論是否是運行時異常),那這個異常是任務(wù)返回對象的一部分。對這樣一種情形,當你調(diào)用Future.get()方法的時候,這個方法會重新拋出這個異常,并且會使用ExecutionException進行包裝。

  問題六:什么是單例模式?創(chuàng)建單例對象的時候是將整個方法都標記為synchronized好還是僅僅把創(chuàng)建的的語句標記為synchronized好?

  在Java中,單例類是指那些在整個Java程序中只存在一份實例的類,例如java.lang.Runtime就是一個單例類。在Java4版本及以前創(chuàng)建單例會有些麻煩,但是自從Java5引入了Enum類型之后,事情就變得簡單了。可以去看看我的關(guān)于如何使用Enum來創(chuàng)建單例類的文章,同時再看看問題五來看看如何在創(chuàng)建單例類的時候進行雙重檢查。

  問題七:能否寫一段用Java4或5來遍歷一個HashMap的代碼?

  事實上,用Java可以有四種方式來遍歷任何一個Map,一種是使用keySet()方法獲取所有的鍵,然后遍歷這些鍵,再依次通過get()方法來獲取對應(yīng)的值。第二種方法可以使用entrySet()來獲取鍵值對的集合,然后使用foreach語句來遍歷這個集合,遍歷的時候獲得的每個鍵值對已經(jīng)包含了鍵和值。這種算是一種更優(yōu)的方式,因為每輪遍歷的時候同時獲得了key和value,無需再調(diào)用get()方法,get()方法在那種如果bucket位置有一個巨大的鏈表的時候的性能開銷是O(n)。第三種方法是獲取entrySet之后用iterator依次獲取每個鍵值對。第四種方法是獲得keyset之后用iterator依次獲取每個key,然后再根據(jù)key來調(diào)用get方法。

  問題八:你在什么時候會重寫hashCode()和equals()方法?

  當你需要根據(jù)業(yè)務(wù)邏輯來進行相等性判斷、而不是根據(jù)對象相等性來判斷的時候你就需要重寫這兩個函數(shù)了。例如,兩個Employee對象相等的依據(jù)是它們擁有相同的emp_id,盡管它們有可能是兩個不同的Object對象,并且分別在不同的地方被創(chuàng)建。同時,如果你準備把它們當作HashMap中的key來使用的話,你也必須重寫這兩個方法。現(xiàn)在,作為Java中equals-hashcode的一個約定,當你重寫equals的時候必須也重寫hashcode,否則你會打破諸如Set,Map等集合賴以正常工作的約定。

  問題九:如果不重寫hashCode方法會有什么問題?

  如果不重寫equals方法的話,equals和hashCode之間的約定就會被打破:當通過equals方法返回相等的兩個對象,他們的hashCode也必須一樣。如果不重寫hashCode方法的話,即使是使用equals方法返回值為true的兩個對象,當它們插入同一個map的時候,因為hashCode返回不同所以仍然會被插入到兩個不同的位置。這樣就打破了HashMap的本來目的,因為Map本身不允許存進去兩個key相同的值。當使用put方法插入一個的時候,HashMap會先計算對象的hashcode,然后根據(jù)它來找到存儲位置(bucket),然后遍歷此存儲位置上所有的Map.Entry對象來查看是否與待插入對象相同。如果沒有提供hashCode的話,這些就都做不到了。

  問題十:我們要同步整個getInstance()方法,還是只同步getInstance()方法中的關(guān)鍵部分?

  答案是:僅僅同步關(guān)鍵部分(CriticalSection)。這是因為,如果我們同步整個方法的話,每次有線程調(diào)用getInstance()方法的時候都會等待其他線程調(diào)用完成才行,即使在此方法中并沒有執(zhí)行對象的創(chuàng)建操作。換句話說,我們只需要同步那些創(chuàng)建對象的代碼,而創(chuàng)建對象的代碼只會執(zhí)行一次。一旦對象創(chuàng)建完成之后,根本沒有必要再對方法進行同步保護了。事實上,從性能上來說,對方法進行同步保護這種編碼方法非常要命,因為它會使性能降低10到20倍。下面是單例模式的UML圖。

image.png

提交申請后,顧問老師會電話與您溝通安排學習

免費課程推薦 >>
技術(shù)文檔推薦 >>
主站蜘蛛池模板: 黄色一级免费 | 日韩在线三级视频 | 一个人看的日本www 一个人看的视频www | 很黄很污的视频网站 | 久久天天躁夜夜躁狠狠85台湾 | 精品欧美一区二区三区在线 | 国产 欧美日韩 在线播放 | 北条麻妃在线一区二区 | 久久青娱乐| 看全色黄大色黄大片女图片 | 中文字幕亚洲一区二区va在线 | 在线观看91精品国产hd | 69av导航 | 亚洲男女一区二区三区出奶水了 | 色影影院| 草碰视频 | 欧美精品一区二区久久 | 欧美日韩免费在线视频 | 国产99精品视频 | 日本成人福利视频 | 成人午夜视频免费 | 日本ab视频 | 亚洲精品第一综合99久久 | 日批视频免费在线观看 | 久久综合综合久久 | 日日操夜夜草 | 在线观看黄色毛片 | 性爱免费视频 | 成年美女黄网站色大片免费看 | 丝袜足控免费软件xx | 欧美高清videosex极品 | 日韩在线视频一区二区三区 | 日本黄色片三级 | 全免费一级毛片在线播放 | 拍真实国产伦偷精品 | 午夜私人影院在线观看 | gogo大胆全球裸xxxx | 欧美日韩国产高清一区二区三区 | 男女视频在线观看网站 | 最近最新2019中文字幕1 | 一级做a爰片性色毛片武则天五则 |