Java面试没过_Java面试中遇到的坑【填坑篇】
1.StringBuilder替代String拼接,面試中經(jīng)常會問到
String,StringBuilder,StringBuffer的區(qū)別。
解答:String類作為java語言中最常見的字符串類被廣泛使用,如果在做大量字符串拼接效率時變得比較低,因為虛擬機需要不斷地將對象引用指向新的地址。因此,一般方法內(nèi)的私有變量推薦使用stringBuilder來完成,如果是多線程需要同步的自然選用stringBuffer。
1.對參數(shù)未做空驗證,就做判斷值相等
下面的寫法將常量放到方法左邊,能防止NPE。
解答:關(guān)于這道題需要查看String類中equals的實現(xiàn)方法,當左邊為Null時會出現(xiàn)NPE。因此后續(xù)代碼中需要保證equals方法左邊變量不為null。
2.這個坑很多兄弟都踩過,知道為什么
打印結(jié)果為false,而下面結(jié)果為true為啥
解答:Integer類型當正整數(shù)小于128時是在內(nèi)存棧中創(chuàng)建值的,并將對象指向這個值,這樣當比較兩個棧引用時因為是同一地址引用兩者則相等。當大于127時將會調(diào)用new Integer(),兩個整數(shù)對象地址引用不相等了。這就是為什么當值為128時不相等,當值為100時相等了。
3.將變量作為參數(shù)傳遞,在方法中改變參數(shù)值,變量的值改變了么?下圖total值到底是幾?
解答:將一個私有變量作為形參傳遞賦值并不會改變參數(shù)原有的值,但是如果將一個對象作為參數(shù)傳遞改變屬性,對象的屬性值就會隨著改變。因此total的值仍然為0。
4.由數(shù)組轉(zhuǎn)換的list,只能循環(huán)遍歷,而不能看長度,增加元素,刪除元素,這是為何?下圖代碼執(zhí)行竟然出錯!
解答:因為將數(shù)組轉(zhuǎn)換的列表其實不是我們經(jīng)常使用的arrayList,但只是數(shù)組中內(nèi)部定義的一種數(shù)據(jù)結(jié)構(gòu)類型,本質(zhì)還是原數(shù)組而并非列表,因此當向列表添加元素就會出現(xiàn)錯誤,這道題上當?shù)男值懿簧侔伞?/p>
5.將列表中李明的名字移除掉,下圖實現(xiàn)有無問題?
解答:在列表中移除最后一個元素按說應(yīng)該沒有問題的,但是這個算法還是出現(xiàn)了錯誤,主要是這種寫法的列表循環(huán)遵循下表索引查找,當移除某個元素時,上次計算出來的長度超過了當前列表長度,故而會出現(xiàn)越界錯誤。
6.在指定目錄下創(chuàng)建文件目錄,到底使用哪一種呢,兩個方法都沒報錯,為何第一次沒創(chuàng)建目錄而第二次創(chuàng)建?
解答:mkdirs()可以建立多級文件夾,而mkdir()只會建立一級的文件夾。這個主要依靠java底層調(diào)用操作系統(tǒng)的實現(xiàn),作者愚見無須弄明白底層實現(xiàn)原理,只要使用中能區(qū)分不留BUG就好。
7.老板從客戶那里回來后罵了我一頓,說是客戶界面顯示金額很奇怪,我的代碼那里有問題?
解答:這道題如果我是老板我會打你的,因為老板之前也寫過代碼。老板之所以罵你是因為客戶看到的太奇怪以至于看不懂,兩個float類型數(shù)據(jù)相減會丟失精度,尾部帶著常常的一串數(shù)字。如果實際場景要做計算我給你兩個思路:第一可以用bigdecimal來計算,第二先將單位做成整數(shù)再做除法。
8.面試官:你能說出來java中實現(xiàn)多線程的幾種方法么?
面試者:繼承Thread類和實現(xiàn)runnable接口!
面試官:除此以外還有方法么?
面試者:就這兩種實現(xiàn)啊?!
面試官:我們聊點別的,呵呵。
解答:這道題最有意思了,一般人都會干脆利索回答前兩個,我工作前3年每次都是信心滿滿這樣回答問題的。其實 實現(xiàn)多線程還可以實現(xiàn)Callable接口,利用task來接受異步線程的執(zhí)行結(jié)果。希望后面再被面試官問到這道題可千萬別再入坑,并且能回答這第三種方式跟前兩種不同的地方(可以獲取執(zhí)行結(jié)果)。
9.我只是想讓這個好好循環(huán)三次,有什么問題么?
解答:這道題主要是犯了整數(shù)符號位的問題了,大家可以了解一下
Integer.MAX_VALUE加上1以后的數(shù)值這道陷阱題就解決了。
10.這個一直沒有弄明白,到底返回哪個true還是false?
解答:這道題大家需要弄明白finally的使用場景,主要是捕獲異常以后必須要執(zhí)行的代碼,大多是關(guān)閉流之類的。即使try的代碼塊已經(jīng)返回結(jié)果但程序仍然會執(zhí)行finally里面的代碼,因此上題返回false。
大家可以看看下面這道題返回結(jié)果是多少?歡迎留言,答對的同學自己給自己晚飯加雞腿。
與50位技術(shù)專家面對面20年技術(shù)見證,附贈技術(shù)全景圖總結(jié)
以上是生活随笔為你收集整理的Java面试没过_Java面试中遇到的坑【填坑篇】的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java getreader_java后
- 下一篇: java美元兑换,(Java实现) 美元