1. 程式人生 > >百度一面經歷(2019秋季校招Android)

百度一面經歷(2019秋季校招Android)

         前幾天一直以為自己的筆試掛了,然後在某天晚上偶然間都得百度一面的電話通知。想想我筆試答題,我都開始懷疑是不是接到詐騙電話。

         廢話不多說,基於博主現在還是一個二本學院的本科生,學JAVA才一年,Android不到半年。所以各位程式設計大牛就不要噴我了。因為接到一次大公司的面試對我來說很寶貴我就寫下來作為紀(jiao)念(xun)。有的地方我沒有答上來,但是為了部落格的視覺效果我還是把相應答案貼上來。

面試環節

我面試的地方在酒店,大家都是拿著房間號去自己面試的房間。我一進去面試官就站了起來,並邀請我一同坐下。(突然讓我感覺人家員工很有修養呀!)

        概是為了緩解緊張的氣氛吧,我首先進行了一段自我介紹,然後他問我學校不在省會是怎麼過來的巴拉巴拉…問了我簡歷上的專案。我說我以前是做web後端的,今年才開始學java。簡歷上也都是自己做的專案(因為學校都會交學生做toy專案,拿這個寫在簡歷上應該會讓人家覺得你很low吧!)

        聊了大概15分鐘左右,面試官就開始問面試題了(可能有些簡單的題我忘了)

1.你熟悉資料結構嗎?你把你所學的所有資料結構說一下。

         答:線性表、順序表、[棧、佇列]、樹、二叉樹(平衡二叉樹、查詢二叉樹、紅黑樹、哈夫曼樹)、圖(拓撲圖)。

                   可能是說的不太好,因為忘了說排序和檢索了,因為我一直把這兩點歸結為演算法。面試官眉頭皺了皺。

2.棧和佇列的區別?

         答:先進先出、先進後出

3.樹的遍歷學過吧,那我給你畫一個樹,你把樹的前序遍歷、中序遍歷、後續遍歷寫出來。

         答:然後我巴拉巴拉寫出來了(根左右,左根右,左右根)

4.那你來寫一個前序的遞迴演算法吧?

         答:(這個都寫時間長了小夥伴都能寫出來吧,不過最好還是命名規範點)

private void preorder(BinaryNode root){
    if(root == null)
        return;
    System.out.print(root.x);
    preorder(root.left);
    preorder(root.right);
}

5.你說一下排序吧,你知道的排序演算法有哪些?

       答:插入排序、選擇排序、堆排序、氣泡排序、快速排序、歸併排序、桶排序.

      (還有基數排序,排序往下分還有很多,比如直接插入、二分法插入、表插入等。我手擼程式碼是真的不行,所以還是不給直接找麻煩了)

6.你說一下選擇排序的穩定性吧?

         答:它是不穩定排序!(其實我當時說成穩定了,哎少壯不努力呀!)

7.說一下快速排序的時間複雜度?

         答:nlog2(n)【秒答】

         (哈哈,快速排序太愛問了,所以這個排序我手擼了3遍 補充:(轉侵刪)

8.學過計算機網路吧,那說一下網路分層?

         答:網路層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層

9.TCP與UDP的區別是什麼?

         答:  TCP(傳輸控制協議):1.可靠協議 2.流量控制 3.擁塞控制

                   資料要分為多個數據包傳輸,對資料包分段、編號、流量控制、避免擁塞。客戶端和伺服器端需要建立tcp連線、通訊結束要釋放連線。

                  UDP(使用者資料報協議):

                   資料一個數據包全部發送、傳輸是否成功需要應用層判斷,不需要建立連線。

10.TCP三次握手過程?

         答:   第一次:客戶端傳送請求  

                                  伺服器確認對方傳送正常

                   第二次:客戶端傳送確認資訊(自己傳送、接收正常,伺服器傳送、接收正常)

                                  伺服器確認(自己接收正常,客戶端傳送正常)

                   第三次:客戶端傳送確認資訊(自己傳送、接收正常,伺服器傳送、接收正常)

                                   伺服器確認(自己接收正常,客戶端傳送正常)

11.哪斷開連線怎麼做。

         答:四次揮手

12.為什麼要三次握手四次揮手。

         答:握手     1.伺服器猜測客戶端要連線自己,但也可能是誤發。傳送確認

                            2.客戶端知道了伺服器支援tcp並告訴伺服器自己是真的要連線

                            3.伺服器知道了客戶端支援tcp,且是真的要和自己連線

                 揮手     主要是因為告知對方自己已經發送完了資料,但對面還可以繼續傳輸(好比兩人打電話)

                             客戶端“我說完了”,伺服器“知道了”(伺服器這時候可以繼續說話,所以不能掛電話)

                             伺服器“我說完了”,客戶端“知道了”(兩邊都說完了,所以可以掛電話)

13.java1.8的新特性你知道嗎?

         答:Lambda表示式、介面的預設方法與靜態方法、方法引用、重複註解、Optional、Date/Time API、JavaScript引擎Nashorn、Base64。

         (現場我一個都沒有答對,2333!)

14.你知道js與java之間是如何通訊嗎?

         答:不知道(估計是要引出JavaScript引擎Nashorn。但是我是真的不知道!

15.那你知道設計模式嗎?

答:mvc,呸!23種設計模式呀!恩,我說一下:(其實沒有說這麼全)

           建立型模式,共五種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。

           結構型模式,共七種:介面卡模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。

           行為型模式,共十一種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、直譯器模式。

16.你是咋們看單例模式的?

    答:就跟初始火車票一樣,我不能因為多執行緒而出售多張火車票

17.你寫一個執行緒安全的單例模式?

     答:我巴拉巴拉寫了個餓漢模式(簡單好寫)寫完後我補充到懶漢模式也可以實現,可以通過…..(讓他知道我會就行)

18.那你知道執行緒之間通訊嗎?

答:handle、runOnUIThread、view.post、AsyncTask

19.Android程序之間的通訊呢?

    答:intent、檔案共享、messager、aidl、contentprovide、socket、廣播

20.你知道三種垃圾回收機制嗎?

      答:標記清除、複製收集、引用計數

(太多了,我慢慢補)

21.haspMap的底層實現?

22.activity的四種啟動方式?

23.hashset類如何避免重複?

24.雙親委派機制?

25.post請求與get請求的區別?

26.堆和棧的區別?

27.handler的內部實現?如何實現延時傳送?

28.介面與抽象類你怎麼理解?

29.動態代理機制你會嗎?

30.你最近讀過什麼書?

31.你有沒有部落格?

32.你在開發過程中遇到了那些bug,你是如何解決的?

33.說一個你最牛的地方?

34.volatile關鍵字你瞭解多少?

35.問我你最想問的問題?

36.我覺得你挺好的,不必糾結於在哪個公司!嚶嚶嚶!