百度JAVA一二三面面經(2019秋招深圳)

       筆試過了之後,通知到深圳百度國際大廈面試,北京打來的電話,一開始以爲是推銷電話給掛了……幸虧人家打了第二次。一二三面是同一天進行的,面完一次就讓你等候,然後要麼告訴你“您今天的面試結束了”要麼給你安排下一面。

       本人僥倖面了三面,三面全是技術面,而且每個面試官會記錄你的信息給下一輪的面試官,比如一面覺得你可以手撕代碼能力稍弱或者什麼方面問得比較少,第二輪可能會進行加強。面試官人都挺好的,不過感覺三面過的希望不大。因爲面了一天感覺腦子有點混亂,記住得不全,只能把記得住的分享給大家。

       三次面試都是一開始做自我介紹,中間會看着簡歷問一下項目經歷,所以下面不重複。

     一面問得比較雜,奇怪的是不怎麼問我算法和數據結構:

       JAVA:

       8大基本類型?他們各自佔多少字節?

       JAVA集合類有哪些,有什麼區別,如何保證線程安全?

       synchronize的特點,用過哪些lock,兩種同步方式的區別?

       synchronize可以加在哪?加在類上時,該類的兩個實例能不能同時調用類中同一個方法?能不能同時調用同一個靜態變量?

       樂觀鎖和悲觀鎖的區別以及Java中如何實現?

       lock和CAS的聯繫?

       線程有幾種實現?區別和特點是什麼?

       寫一個程序,Main函數裏開10線程,怎麼保證10個線程都執行完後Main函數才繼續往下執行(我用cutdownlatch)?

       線程池的機制?怎麼實現線程池(問到這個我就有點慌了)?

       IO與NIO的概念?爲什麼 NIO能保證不阻塞?阻塞的IO應該怎麼處理(我答多線程)?

       JAVA中各種InputStream,什麼情況用字節流什麼情況用字符流?讀取本地文件怎麼指定編碼?

       網絡中數據流傳輸,接收方怎麼實現按幀獲取?

       框架:

       MVC模式的概念及好處?

       註解的實現原理(這個我也慌了,實現原理???)?

       IOC和AOP?AOP的實現原理(反射+代理)?

       LINUX:

       LINUX的一些簡單命令(我直接告訴他我很少用LINUX)

       操作系統:

       進程和線程概念?線程彼此的區別是什麼?對應到JAVA程序哪個是進程哪個是線程?

       計算機網絡:

       五層模型?每層的基本作用?每層各有哪些協議?

       數據庫:

       幾個範式的概念?

       設計上分表的好處?

       另一種分表(橫向,縱向,散列)的概念和好處?喜歡用哪種?爲什麼?

       怎麼防止數據庫注入攻擊?preparedStatement爲什麼能防止?

       前端(主要是我簡歷寫我做過前端):

       跨域請求?

       session和cookie的區別?

       知道什麼網站攻擊行爲?怎麼防止js嵌入攻擊?字符轉義可以在哪實現?

       編程(不知道爲什麼,簡單到我有點不敢相信,感覺就像讓人寫冒泡排序):

       給兩個接口,一個可以判斷對象是文件還是目錄。另一個接口可以獲取目錄下的所有文件和目錄,寫一個程序,輸出某一目錄下的所有文件和目錄。遞歸和非遞歸各實現一遍。

 

      二面感覺多了一些思維上的考察,而且感覺面試官是照着電腦上的問題和答案問我的:

        JAVA:

        寫一個最安全的單例模式並解釋(感覺這個哪哪都必考)?

        synchronize可以加在什麼上(代碼段,類,方法這些)?我習慣用在什麼地方?爲什麼?

        volatile的特點和作用?可以用在哪(上面的單例模式就用到了)?和synchronize的區別?怎麼在使用volatile時也保證原子性?(JAVA提供了原子類)

        實現一個不能被繼承的類(我只答了構造器私有,然後其他的不瞭解)?

        抽象和接口的區別?

        怎麼判斷一個對象是否改被回收(引用計數法和可達性分析法)?如何實現引用計數法(講思路)?

        操作系統:

        死鎖的條件?用JAVA寫一個必定死鎖的程序?

        頁面置換算法有哪些?如何用JAVA實現一個最近最久未使用算法?如果不用JAVA,而是自己去設計一個操作系統,怎麼實現該算法(講講思路而已,我說內存本身要排序)?

        還有一些零散的我忘了,基本都是JAVA的(發現二面的挺多問題都是講個大概思想就行)。

        然後她問我還有什麼問題,我說你想考察我的什麼素質?因爲聽說大廠都很注重算法和數據結構,但是兩面過來還沒感覺有太難的算法(我簡直是作死……)?

 

      三面,竟然也是技術面:

         面試官:“聽說算法問得比較少?那我們來問算法吧。”(我的內心……)

         算法:

         1.八皇后寫過嗎?寫完遞歸讓我寫非遞歸。

         2.一個人困在山洞裏,有三個洞口A、B、C,進去三個洞口後分別要走1、2、3個小時,走進A、C洞口會回到原點,走進B洞口會走出山洞,問走出去的數學期望是多少?(我說數學期望是什麼已經忘了,概率論不行)

         3.一個接口,返回0的概率是0.25,返回1的概率是0.75,寫一個封裝該接口的方法,得到一個返回0和1的概率都爲0.5的方法,不能用到隨機數的接口?(我給了個解決方法他說要是比例換成是0.1和0.9呢?懵了,不懂……我記得在其他百度面經看過這道題,但是當時沒有詳細去研究,真的是後悔,其實就是按順序調兩次接口,若爲1,0就返回1,若爲0,1就返回0,否則重新調用,這樣子就相當於兩個概率各取一半,總的概率也爲一半)

         4.面試官自己臨時隨便想的一道題,挺簡單的,給你n瓶飲料,每三個空瓶子可以換一個飲料,總共能換幾瓶?程序實現。

         其他問題:

         http和https的區別?http裏用了什麼協議?比tcp多了什麼?

         聯合索引?

         一致性哈希是什麼?億級數據怎麼分表?自己根據一致性哈希去部署實現。

         分表的線性散列用什麼鍵求哈希值?除餘嗎?考慮擴展性應該怎麼設計算法?

         設計一個秒殺系統(搶手機那種)?考慮會出現什麼問題?怎麼解決?(我沒接觸過,所以按自己的理解就是說一個怕搶多了所以volatile保證可見性,另一個是怕同步導致搶的順序不對所以用公平鎖。但面試官說這是個分佈式的問題。)

          如果要自己負責組織一個app的開發,怎麼去組織,流程是什麼?考慮什麼問題(比如協議用的是json還是xml)?

          非技術性問題:

          有博客嗎?

          參加過什麼比賽?

          在原本的公司收穫最大是什麼?

          還有一些忘了。

 

       三面感覺自己答得不好,4道手撕代碼的題,其中兩道不會,自己也沒準備充足,面試官一開始看了我簡歷一眼,“深圳大學的啊”,後期也有說我做的東西不多,不過人還是很和善的,沒有那種表現出來的鄙視,感覺比網上其他同學幸運了。說實話能到三面自己已經有點難以置信。問了一個一起面試同學,雖然我們一面的面試官是同一人,但是他一面就被問了算法和數據結構。感覺面試官自己的知識儲備比較足,所以基本你回答什麼,他都可以從你的回答裏找出知識點繼續問,所以個人感覺我們在回答問題的時候,可以多往自己會的方面引導。

       祝願各位面試順利。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章