1. 程式人生 > >2018 秋招 百度一面

2018 秋招 百度一面

百度一面

面試地點很豪華,星級酒店包了很多層樓。先集體到5樓等待,再單獨分配到不同的樓層不同的房間去面試。每個面試官單獨在一個房間,很安靜,可以專心思考問題。面試官說話超級和氣,交流很隨心,不用半點約束。總的來說,整個面試還算順利吧,也很榮幸,來面試的實在太多太多了,期望能過一面吧。(PS:後面真的過了….)

1.HTTP和HTTPS區別

  超文字傳輸協議HTTP協議被用於在Web瀏覽器和網站伺服器之間傳遞資訊,HTTP協議以明文方式傳送內容,不提供任何方式的資料加密,如果攻擊者截取了Web瀏覽器和網站伺服器之間的傳輸報文,就可以直接讀懂其中的資訊,因此,HTTP協議不適合傳輸一些敏感資訊,比如:信用卡號、密碼等支付資訊。

  為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文字傳輸協議HTTPS,為了資料傳輸的安全,HTTPS在HTTP的基礎上加入了SSL協議,SSL依靠證書來驗證伺服器的身份,併為瀏覽器和伺服器之間的通訊加密。

2.HTTP有哪些請求方式?說說GET和POST的區別

HTTP請求的方法:

HTTP/1.1協議中共定義了八種方法(有時也叫“動作”),來表明Request-URL指定的資源不同的操作方式

1、OPTIONS
返回伺服器針對特定資源所支援的HTTP請求方法,也可以利用向web伺服器傳送‘*’的請求來測試伺服器的功能性

2、HEAD
向伺服器索與GET請求相一致的響應,只不過響應體將不會被返回。這一方法可以再不必傳輸整個響應內容的情況下,就可以獲取包含在響應小訊息頭中的元資訊。

3、GET
向特定的資源發出請求。注意:GET方法不應當被用於產生“副作用”的操作中,例如在Web Application中,其中一個原因是GET可能會被網路蜘蛛等隨意訪問。Loadrunner中對應get請求函式:web_link和web_url

4、POST
向指定資源提交資料進行處理請求(例如提交表單或者上傳檔案)。資料被包含在請求體中。POST請求可能會導致新的資源的建立和/或已有資源的修改。 Loadrunner中對應POST請求函式:web_submit_data,web_submit_form

5、PUT
向指定資源位置上傳其最新內容

6、DELETE
請求伺服器刪除Request-URL所標識的資源

7、TRACE
回顯伺服器收到的請求,主要用於測試或診斷

8、CONNECT
HTTP/1.1協議中預留給能夠將連線改為管道方式的代理伺服器。

注意:

1)方法名稱是區分大小寫的,當某個請求所針對的資源不支援對應的請求方法的時候,伺服器應當返回狀態碼405(Mothod Not Allowed);當伺服器不認識或者不支援對應的請求方法時,應返回狀態碼501(Not Implemented)。

2)HTTP伺服器至少應該實現GET和HEAD/POST方法,其他方法都是可選的,此外除上述方法,特定的HTTP伺服器支援擴充套件自定義的方法。

3.氣泡排序,優化,手寫

    public static void bubbleSort(int[] arr) {
            for (int i = 0; i < arr.length - 1; i++) {
                boolean flag = true;//設定一個標記,若為true,則表示此次迴圈沒有進行交換,也就是待排序列已經有序,排序已然完成。
                for (int j = 0; j < arr.length - 1 - i; j++) {
                    if (arr[j] > arr[j + 1]) {
                        swap(arr,j,j+1);
                        flag = false;
                    }
                }
                if (flag) {
                    break;
                }
            }
        }

4.打印出2-100的所有素數,優化,手寫

5.安卓四大元件簡單介紹

5.1 Activity-活動:

(1)、Activity是Android程式的呈現層,顯示視覺化的使用者介面,並接收與使用者互動所產生的介面事件,如單擊、觸控事件。在介面上呈現形式為全屏窗體、非全屏懸浮窗體的對話方塊。

(2)、Activities是可執行的程式碼塊,由使用者或者作業系統來進行初始例項化,並在他們被需求時致以執行。

(3)、Activities可以與使用者、請求資料或者其他Activity、Service的服務通過query或Intent進行互動。

(4)、對於一個Android應用程式而言,可以有一個或多個Activity,一般在程式啟動後會呈現一個Activity,用於提示使用者已經正常啟動此Activity。當Activity不積極執行時,可以被Android系統終止已節省記憶體。

5.2 Service-服務:

(1)、Service用於沒有使用者介面,但需要長時間在後臺執行的應用。Service有點類似於桌面應用或者伺服器作業系統上的服務和守護程序。

(2)、Service是在後臺執行的可執行的程式碼塊,從它被初始化一直執行到此程式關閉。

(3)、Service最經典的一個例子是音樂播放器,儘管使用者已經使用了其它的應用程式,但仍然需要持續播放音樂,比如在你聽歌的時候,有人打個電話進來,此時音樂播放器的服務仍然子啊後臺執行著,等你電話接完,音樂又會重新播放,在你接電話的時候是無音樂播放器的介面的,而程式一直執行Service來實現後臺任務。

5.3 BroadcastReceiver-廣播接收器

(1)、Broadcast和Intent Receivers對從其他的應用程式的服務請求做出一個全系統廣播的響應,這些廣播響應可能來自於Android系統本身或者是任何在其系統上執行的程式。

(2)、BroadcaseReceiver是用來接受並響應廣播訊息的元件。

(3)、BroadcaseReceiver不包含任何使用者介面,但可以通過啟動Activity或者Notification訊息通知欄通知使用者接收到重要資訊。

(4)、Activity或Service通過執行一個IntentReceiver 為其他應用程式提供了訪問其功能的功能。Intent Receiver是一段可執行程式碼塊,對其他Activity的資料或服務請求做出響應。請求的Activity(客戶端)生成一個Intent,把其新增至Android Framework中,來指出哪些應用程式(目標程式)接收並對其做出響應。

(5)、Intent是Android的主要構成元素之一,它從現有的應用程式中創造新的應用程式。Intent實現了應用程式和其他的應用程式和服務交換所需資訊的功能。

5.4 ContentProvider-內容提供器:

(1)、ContentProvider是Android系統提供的一種標準的共享資料的機制,應用程式可以通過ContentProvider來訪問其他應用程式的私有資料(私有資料可以是儲存在檔案系統中的檔案,也可以是SQLite中的資料庫)。
(2)、Android系統內部也提供一些內建的ContentProvider,能夠為應用程式提供重要的資料資訊。

6. ContentProvider底層是怎麼實現的?

7. 程序和執行緒區別

1.定義

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位.

執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬一個程序的其他的執行緒共享程序所擁有的全部資源.

2.關係

一個執行緒可以建立和撤銷另一個執行緒;同一個程序中的多個執行緒之間可以併發執行.

相對程序而言,執行緒是一個更加接近於執行體的概念,它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的執行序列。

3.區別

程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的地址空間,一個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是一個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的地址空間,一個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。

1) 簡而言之,一個程式至少有一個程序,一個程序至少有一個執行緒.

2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。

3) 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

4) 執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有一個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

5) 從邏輯角度來看,多執行緒的意義在於一個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

4.優缺點

執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。同時,執行緒適合於在SMP機器上執行,而程序則可以跨機器遷移。

8.安卓下如何新建一個程序,如何新建一個執行緒,有幾種方式?

9.咦,聽說你有部落格和github,地址拿出來,我看看。看的同時叫我自我介紹。

10.聽說你寫過幾個小專案,簡單說說。

答案參考連結:

連結1