1. 程式人生 > 實用技巧 >BATJ面試經驗分享+Java面試題附答案解析

BATJ面試經驗分享+Java面試題附答案解析

BATJ面試經驗分享+Java面試題附答案解析(十四)

持續更新Java相關資料。最近有工作了3年多的朋友跟我交流了一下他的面試經驗,經他同意分享出來,希望能給到大家一些幫助,另外大家想看前幾個合集的可以去我主頁查詢。

有些答案是我自己總結的,有些是在網上搜集整理的。看完這些面試不慌!大家如果有更多經驗可以在評論分享,有錯誤也歡迎大家指出,不吝賜教,謝謝

百度,百度我去的那年是停止社招的,大部分部門都不社招只有校招,但也有少數部門有特批名額,於是就去試了一把,一面剛來就是寫程式碼,
一個單鏈表的演算法題目,寫完,面試官很滿意點點頭,隨後面試官發問在你的專案中spring是如何管理zookeeper的,答:balabala,

瞭解zookeeper的leader選取演算法嗎,講一下他的流程,知道zab演算法嗎,講一下他的流程,汗,問的問題都太變態,沒想到會問的這麼深,
zab演算法太複雜了,zab是基於paxos的,而paxos可是獲得圖靈獎的演算法,勉強說了一下,說的很心虛,有好多盲點自己也沒搞清楚,
不過好在面試官也不往下問了,其實我估計他也不見得會(竊喜),隨後讓我稍等一下;一會兒過後二面面試官過來了,是個成熟的大叔,
二面只問了兩個東西,一個jvm,一個併發程式設計,jvm主要是效能調優,jstack的使用,full GC和minor GC的分析等,併發程式設計問的很細,
發問多個執行緒達到同一個狀態然後再一起執行,達到某一個狀態之後再繼續併發執行,這種怎麼實現,答:jdk5之後有一個CyclicBarrir,
通過這個來實現,它可以重用等balabala說了一些,再發問讀寫鎖中加讀鎖後如何避免寫執行緒餓死,答:加策略balabala,發問如何實
現控制執行緒在某段時間內完成,不完成就撤銷,答:實現Callable介面,返回FutureTask類或者Future介面,然後去觸發撤銷操作。
開始問專案,描述一下對賬系統,balabala…資料量大嗎,併發量高嗎,資料庫怎麼設計的等,隨後讓我等一會,又過來一個面試官,
問我業務,你在第三方支付公司,能不能講一下支付的技術流程,balabala…把自己理解的支付流程講了一下,最後補了一句,
支付的細節業務很複雜,我也沒完全明白呢,汗,讓我等了一會,隨後面試官說你回去等訊息吧,我想完蛋了吧,難道因為業務不熟被刷,
真不甘心;心涼了一個星期,結果hr在星期一打電話說讓星期四去最後一面,是技術總監的面試,星期四屁顛屁顛的去了
(話說百度大廈離國貿太遠了,地鐵每次要坐一個半小時,我也是跪了),四面開始,發問非同步處理的冪等性,不是很難,
唯一性索引或者開發分散式鎖唄,隨後風格立馬就轉了,不問技術了,發問你覺得你來百度能給百度帶來什麼樣的價值,
你希望你加入的百度的團隊是一個什麼樣的團隊,你如何和產品經理溝通,假如你和其他研發介面制定無法統一你該如何解決等,
一點準備都沒有,回答的結結巴巴很是不好,哎,聽天由命吧!

阿里


第五個面的是阿里,百度面完等訊息,閒來無事檢視公司招聘資訊,看到阿里招聘薪資很誘人。
哈哈,我就是這樣一個無節操的人,開始是電話面試,然後是面試,二面和三面,主要面試技術點有
JVM相關:
jvm中一次完整的GC流程(從ygc到fgc)是怎樣的,重點講講物件如何晉升到老年代,幾種主要的jvm引數等
你知道哪幾種垃圾收集器,各自的優缺點,重點講下cms
當出現了記憶體溢位,你怎麼排錯
JVM記憶體模型的相關知識瞭解多少
簡單說說你瞭解的類載入器
JAVA的反射機制

網路:
http1.0和http1.1有什麼區別
TCP三次握手和四次揮手的流程,為什麼斷開連線要4次,如果握手只有兩次,會出現什麼
TIME_WAIT和CLOSE_WAIT的區別
說說你知道的幾種HTTP響應碼

架構設計與分散式:
tomcat如何調優,各種引數的意義
常見的快取策略有哪些,你們專案中用到了什麼快取系統,如何設計的,Redis的使用要注意什麼,持久化方式,記憶體設定,叢集,淘汰策略等
如何防止快取雪崩
分散式叢集下如何做到唯一序列號
設計一個秒殺系統,30分鐘沒付款就自動關閉交易
如何做一個分散式鎖
用過哪些MQ,怎麼用的,和其他mq比較有什麼優缺點,MQ的連線是執行緒安全的嗎
MQ系統的資料如何保證不丟失
分散式事務的原理,如何使用分散式事務
什麼是一致性hash
說說你知道的幾種HASH演算法,簡單的也可以
什麼是paxos演算法
redis和memcached 的記憶體管理的區別等等
後面給了我offer。但是最近996不知道如何選擇。

Java面試題(十四)

MySql

142. 資料庫的三正規化是什麼?

  • 第一正規化:強調的是列的原子性,即資料庫表的每一列都是不可分割的原子資料項。

  • 第二正規化:要求實體的屬性完全依賴於主關鍵字。所謂完全依賴是指不能存在僅依賴主關鍵字一部分的屬性。

  • 第三正規化:任何非主屬性不依賴於其它非主屬性。

143. 一張自增表裡面總共有 7 條資料,刪除了最後 2 條資料,重啟 mysql 資料庫,又插入了一條資料,此時 id 是幾?

  • 表型別如果是 MyISAM ,那 id 就是 18。

  • 表型別如果是 InnoDB,那 id 就是 15。

InnoDB 表只會把自增主鍵的最大 id 記錄在記憶體中,所以重啟之後會導致最大 id 丟失。

144. 如何獲取當前資料庫版本?

使用 select version() 獲取當前 MySQL 資料庫版本。

145. 說一下 ACID 是什麼?

  • Atomicity(原子性):一個事務(transaction)中的所有操作,或者全部完成,或者全部不完成,不會結束在中間某個環節。事務在執行過程中發生錯誤,會被恢復(Rollback)到事務開始前的狀態,就像這個事務從來沒有執行過一樣。即,事務不可分割、不可約簡。

  • Consistency(一致性):在事務開始之前和事務結束以後,資料庫的完整性沒有被破壞。這表示寫入的資料必須完全符合所有的預設約束、觸發器、級聯回滾等。

  • Isolation(隔離性):資料庫允許多個併發事務同時對其資料進行讀寫和修改的能力,隔離性可以防止多個事務併發執行時由於交叉執行而導致資料的不一致。事務隔離分為不同級別,包括讀未提交(Read uncommitted)、讀提交(read committed)、可重複讀(repeatable read)和序列化(Serializable)。

  • Durability(永續性):事務處理結束後,對資料的修改就是永久的,即便系統故障也不會丟失。

146. char 和 varchar 的區別是什麼?

char(n) :固定長度型別,比如訂閱 char(10),當你輸入"abc"三個字元的時候,它們佔的空間還是 10 個位元組,其他 7 個是空位元組。

chat 優點:效率高;缺點:佔用空間;適用場景:儲存密碼的 md5 值,固定長度的,使用 char 非常合適。

varchar(n) :可變長度,儲存的值是每個值佔用的位元組再加上一個用來記錄其長度的位元組的長度。

所以,從空間上考慮 varcahr 比較合適;從效率上考慮 char 比較合適,二者使用需要權衡。

147. float 和 double 的區別是什麼?

  • float 最多可以儲存 8 位的十進位制數,並在記憶體中佔 4 位元組。

  • double 最可可以儲存 16 位的十進位制數,並在記憶體中佔 8 位元組。

148. mysql 的內連線、左連線、右連線有什麼區別?

內連線關鍵字:inner join;左連線:left join;右連線:right join。

內連線是把匹配的關聯資料顯示出來;左連線是左邊的表全部顯示出來,右邊的表顯示出符合條件的資料;右連線正好相反。

最後

面試題內容到這裡就結束了,後續會有更多更新內容,希望對大家有幫助。

最後還想對你們說幾句心裡話,工作這麼多年,也幫別人面試過一些人。不管是站在面試官的角度看還是leader的視角,面試大廠除了面試技巧和經驗,過硬的技術和好的專案經驗也是自己的王牌和底氣。一線大廠核心技術分享

我花了比較長的時間整理了一些學習資料,上面發的就是資料中的冰山一角,希望能幫到大家!點選一起學習 暗號:csdn

後續會分享更多純乾貨文章,希望能真正幫到你們。你們的支援就是我最大的動力!歡迎關注點贊啊!