目錄java
前言程序員
字符串算法
大廠面試題的開頭數據庫
最後設計模式
前言
在平常開發過程當中,咱們常常用到字符串,可是到具體應用的時候並不知道(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核心技術整理的資料集錦,須要領取的小夥伴能夠 點我 免費領取 ,編程的世界永遠向全部熱愛編程的人開放,這是一個自由,平等,共享的世界,我始終是這樣堅信的。
部分資料圖片:
喜歡小編的分享能夠點贊關注哦,小編持續爲你分享最新文章 和 福利領取哦