目錄
前言
StringBuffer悠久的歷史
字串
大廠面試題的開頭
阿里P5-P7知識結構
最后
前言
在日常開發程序中,我們經常用到字串,但是到具體應用的時候并不知道(String StringBuffer StringBuilder)在什么情況下會應用到;我們今天就深入淺出的說一下字串、在什么情況下會用到,
StringBuffer悠久的歷史
StringBuilder 問題檔次并不低,如果仔細思考的話,這是一個歷史悠久,并且至今仍在困擾很多程式員的問題,這是個字串記憶體管理策略問題,幾十年前 在C和Pascal的時代,就有字串存盤形式 是 \0 結尾還是 長度+內容的爭論,這個問題嚴重影響了API的設計,記憶體的管理,甚至程式架構,
字串
字串是一種非常常用的 生命周期通常很短的物件,而且它的size是不固定的,長度為 1 或 1GB都有可能,導致記憶體管理非常麻煩復雜,
- 用長度+內容表示,每個串都要額外付出4個位元組,用\0結尾吧,算長度就很麻煩,萬一結尾忘了\0就要崩潰,選哪個好?
- 字串的長度放哪里,放到起始指標的位置,還是起始指標的前面
- 如果放前面,那么字串起始指標和記憶體塊起始不一致怎么解決?
- 字串拼接的時候把源串復制到目標串結尾,那么目標串剩余記憶體不夠怎么辦,重新分配要多一次賦值,頻繁拼接性能有問題怎么辦?
- 函式回傳值如果是字串,那么這個串是呼叫者分配記憶體還是被呼叫者分配,誰來負責釋放,
- 如果呼叫者分配,那么呼叫者怎么知道字串將有多長,
- 頻繁分配釋放大小各異的字串,會不會導致記憶體碎片化?
- 對于小字串是分配在堆上還是堆疊上?
- 怎么把常量串和變數串分別處理?
- 如果設計面向物件的字串,字串加法怎么定義,是在原來物件上加,還是生成一個新物件
- 如果每加一次都生成新物件會不會導致構造析構太頻繁
- 如果是托管語言會不會太頻繁GC
- 要不要設計單獨的輔助類來解決字串拼接問題
- 那這個輔助類怎么設計,要不要考慮執行緒安全?
- 如果考慮執行緒安全的話,怎么兼顧性能?
你把這些問題都思考透徹了,再遇到問此類問題的面試官,就給他上上課,保證他懵逼,

大廠面試題的開頭
大廠開場的面試題一般就是這么樸實無華且枯燥,我們的一位老師阿里P8,面P6/P7上來第一個問題就是這個:Java中操作字串都有哪些類?它們之間有什么區別?
答案是這樣的:
String,StringBuffer,StringBuilder,區別String宣告的是不可變的物件,每次操作必然產生一個新的物件;StringBuffer和StringBuilder都繼承自抽象類AbstractStringBuilder;StringBuffer具備執行緒安全性;
知道有什么,知道為什么,知道怎么用缺一不可,否則就等著面試官的靈魂拷問吧,
這里面還有兩個加分項:
1.知道StringBuffer和StringBuilder都繼承自抽象類AbstractStringBuilder,
2.String的原始碼解讀:final修飾-->不可變-->每次操作都會生成新的String物件;對比StringBuffer和StringBuilder-->值可變,拼接字串開銷,
這只能算開場熱身,接下來才是重點,
面試官會問你執行緒的安全性,可以直接查原始碼,找synchronized、執行緒鎖,得到結論:StringBuffer具備執行緒安全性,
你以為要結束了?接著問:既然StringBuffer具備執行緒安全性,迭代開銷又小,那我們在工程實踐中是不是首選StringBuffer就可以了?這就是考驗你的批判性思維了,
所以這一波你以為你在第三層,其實面試官在第五層,老千層餅了,

阿里P5-P7知識結構
當然不同級別的面試,要求也不一樣,所以被問到答不上來時,也不要覺得面試涼了,這可能只是面試官在確定你的考察級別,以阿里P5-P7來看,要求的知識結構大概是這樣:

P5對應校招級別:Java語言高級特性簡單來說就是教科書不怎么講的東西,比如并發、演算法執行緒、模板使用等等;關系資料庫,索引怎么建,索引演算法是什么,怎么調優,從百萬到億級資料量之間要做些什么作業;面向物件/設計模式則一般通過簡歷上的專案來了解,
P6是社招起步職級:面試一般就是抓住簡歷中的專案,不斷深挖技術,主要看你是不是真的做過和理解,
P7技術專家:高可用架構、JVM原理和優化,這兩個國內與國外差異比較大,國內非常重要所以是面試重點關注內容,用過Spring cloud的話,面試官會跟你深入溝通一番;如果能再懂點云計算,那么這個P7含金量就比較高了,
最后,面試中你的每一次回答都要珍惜,每一句話都要斟酌,你要告訴面試官:你真的很專業,
最后
感謝你看到這里,文章有什么不足還請指正,覺得文章對你有幫助的話記得給我點個贊,每天都會分享java相關技術文章或行業資訊,歡迎大家關注和轉發文章!
文章到此就結束了!

最后來自小編的福利
以下是小編整理的一份大廠真題的面試資料,以及2020最新Java核心技術整理的資料集錦,需要領取的小伙伴可以 點我 免費領取 ,編程的世界永遠向所有熱愛編程的人開放,這是一個自由,平等,共享的世界,我始終是這樣堅信的,
部分資料圖片:

喜歡小編的分享可以點贊關注哦,小編持續為你分享最新文章 和 福利領取哦
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/231126.html
標籤:其他
