1. 程式人生 > >愛奇藝一面、二面面試問題

愛奇藝一面、二面面試問題

以下是愛奇藝一面、二面的問題,問題按記憶所記錄,不分先後。
1、HTTP協議是哪一層的?其報文結構如何?七層網路結構是?
HTTP協議屬於應用層。

HTTP(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的面向物件的協議,常基於TCP的連線方式,HTTP1.1版本中給出一種持續連線的機制,絕大多數的Web開發,都是構建在HTTP協議之上的Web應用。

HTTP協議的主要特點可概括如下:
1.支援B/S(瀏覽器/伺服器)及C/S(客戶機/伺服器)模式。
2.簡單快速:客戶向伺服器請求服務時,只需傳送請求方法和路徑。請求方法常用的有GET、HEAD、POST。每種方法規定了客戶與伺服器聯絡的型別不同。由於HTTP協議簡單,使得HTTP伺服器的程式規模小,因而通訊速度很快。
3.靈活

:HTTP允許傳輸任意型別的資料物件。正在傳輸的型別由Content-Type加以標記。
4.無連線:無連線的含義是限制每次連線只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連線。採用這種方式可以節省傳輸時間
5.無狀態:HTTP協議是無狀態協議。無狀態是指協議對於事務處理沒有記憶能力。缺少狀態意味著如果後續處理需要前面的資訊,則它必須重傳,這樣可能導致每次連線傳送的資料量增大。另一方面,在伺服器不需要先前資訊時它的應答就較快。

HTTP之請求訊息Request
客戶端傳送一個HTTP請求到伺服器的請求訊息包括以下格式:
請求行(request line)、請求頭部(header)、空行和請求資料四個部分組成。
這裡寫圖片描述


請求行以一個方法符號開頭,以空格分開,後面跟著請求的URI和協議的版本。

請求方法(所有方法全為大寫)有多種,各個方法的解釋如下:
GET 請求獲取Request-URI所標識的資源
POST 在Request-URI所標識的資源後附加新的資料
HEAD 請求獲取由Request-URI所標識的資源的響應訊息報頭
PUT 請求伺服器儲存一個資源,並用Request-URI作為其標識
DELETE 請求伺服器刪除Request-URI所標識的資源
TRACE 請求伺服器回送收到的請求資訊,主要用於測試或診斷
CONNECT 保留將來使用
OPTIONS 請求查詢伺服器的效能,或者查詢與資源相關的選項和需求

POST請求例子,使用Charles抓取的request:
POST / HTTP1.1
Host:www.wrox.com
User-Agent:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.648; .NET CLR 3.5.21022)
Content-Type:application/x-www-form-urlencoded
Content-Length:40
Connection: Keep-Alive

name=Professional%20Ajax&publisher=Wiley

第一部分:請求行,第一行明瞭是post請求,以及http1.1版本。
第二部分:請求頭部,第二行至第六行。
第三部分:空行,第七行的空行。
第四部分:請求資料,第八行。

HTTP之響應訊息Response
一般情況下,伺服器接收並處理客戶端發過來的請求後會返回一個HTTP的響應訊息。

HTTP響應也由四個部分組成,分別是:狀態行、訊息報頭、空行和響應正文。

這裡寫圖片描述

這裡寫圖片描述
例子

HTTP/1.1 200 OK
Date: Fri, 22 May 2009 06:07:21 GMT
Content-Type: text/html; charset=UTF-8

<html>
      <head></head>
      <body>
            <!--body goes here-->
      </body>
</html>

第一部分:狀態行,由HTTP協議版本號, 狀態碼, 狀態訊息 三部分組成。
第一行為狀態行,(HTTP/1.1)表明HTTP版本為1.1版本,狀態碼為200,狀態訊息為(ok)

第二部分:訊息報頭,用來說明客戶端要使用的一些附加資訊,第二行和第三行為訊息報頭,Date:生成響應的日期和時間;Content-Type:指定了MIME型別的HTML(text/html),編碼型別是UTF-8

第三部分:空行,訊息報頭後面的空行是必須的

第四部分:響應正文,伺服器返回給客戶端的文字資訊。空行後面的html部分為響應正文。

HTTP之狀態碼
狀態程式碼有三位數字組成,第一個數字定義了響應的類別,共分五種類別:

1xx:指示資訊–表示請求已接收,繼續處理

2xx:成功–表示請求已被成功接收、理解、接受

3xx:重定向–要完成請求必須進行更進一步的操作

4xx:客戶端錯誤–請求有語法錯誤或請求無法實現

5xx:伺服器端錯誤–伺服器未能實現合法的請求

常見狀態碼:

200 OK                        //客戶端請求成功
400 Bad Request               //客戶端請求有語法錯誤,不能被伺服器所理解
401 Unauthorized              //請求未經授權,這個狀態程式碼必須和WWW-Authenticate報頭域一起使用 
403 Forbidden                 //伺服器收到請求,但是拒絕提供服務
404 Not Found                 //請求資源不存在,eg:輸入了錯誤的URL
500 Internal Server Error     //伺服器發生不可預期的錯誤
503 Server Unavailable        //伺服器當前不能處理客戶端的請求,一段時間後可能恢復正常

HTTP 請求/響應的步驟:

1、客戶端連線到Web伺服器

一個HTTP客戶端,通常是瀏覽器,與Web伺服器的HTTP埠(預設為80)建立一個TCP套接字連線。例如,http://www.oakcms.cn

2、傳送HTTP請求

通過TCP套接字,客戶端向Web伺服器傳送一個文字的請求報文,一個請求報文由請求行、請求頭部、空行和請求資料4部分組成。

3、伺服器接受請求並返回HTTP響應

Web伺服器解析請求,定位請求資源。伺服器將資源複本寫到TCP套接字,由客戶端讀取。一個響應由狀態行、響應頭部、空行和響應資料4部分組成。

4、釋放連線TCP連線

若connection 模式為close,則伺服器主動關閉TCP連線,客戶端被動關閉連線,釋放TCP連線;若connection 模式為keepalive,則該連線會保持一段時間,在該時間內可以繼續接收請求;

5、客戶端瀏覽器解析HTML內容

客戶端瀏覽器首先解析狀態行,查看錶明請求是否成功的狀態程式碼。然後解析每一個響應頭,響應頭告知以下為若干位元組的HTML文件和文件的字符集。客戶端瀏覽器讀取響應資料HTML,根據HTML的語法對其進行格式化,並在瀏覽器視窗中顯示。

七層網路結構是:物理層、資料鏈路層、網路層、傳輸層、會話層、表示層、應用層。

2、寫java二分查詢程式碼

public class Main {
    // 二分查詢,要求陣列有序。時間複雜度為 O(logN)。

    // 非遞迴 二分查詢
    public static int binarySearch(int[] a, int key) {
        int low = 0;
        int high = a.length - 1;
        int mid = 0;
        while (low <= high) {
            mid = (low + high) / 2;
            if (key < a[mid]) // 查詢值比中值小
                high = mid - 1; // 最高下標調整到比中值小1,在原先中值的左邊找
            else if (key > a[mid]) // 查詢值比中值大
                low = mid + 1;
            else // 相等
                return mid; // 下標
        }
        return -1; // 以上都未返回,則沒找到
    }

    // 遞迴 二分查詢
    public static int recursionBinarySearch(int[] a, int key, int low, int high) {
        if (low <= high) {
            int mid = (low + high) / 2;
            if (key < a[mid]) // 查詢值比中值小
                // 最高下標調整到比中值小1,在原先中值的左邊找
                return recursionBinarySearch(a, key, low, mid - 1);
            else if (key > a[mid]) // 查詢值比中值大
                // 最小下標=中值+1,在原先中值右邊找
                return recursionBinarySearch(a, key, mid + 1, high);
            else // 相等
                return mid; // 下標
        }
        return -1;// 以上都未返回,則沒找到
    }

    public static void main(String[] args) {
        int a[] = { 1, 2, 4, 5, 7, 9, 11, 25, 28 };
        System.out.println(binarySearch(a, 28));
        System.out.println(recursionBinarySearch(a,28,0,a.length-1));
    }
}

3、演算法方面瞭解哪些?簡述動態規劃、貪心演算法。
(1)動態規劃基本要素:
①分析最優子結構
②設計最優子結構的遞推函式
③求解子問題,對每個子問題只接一次,而後將其解儲存在表格中,當再次需要解此子問題時,只是檢視一下結果,即重疊子問題。
④構造最優解,通常採用自底向上方法。

(2)貪心演算法要素:
①貪心選擇:所求問題的整體最優解可以通過一系列區域性最優的選擇即貪心選擇來達到。
②最優子結構性質:指一個問題的最優解包含其子問題的最優解。

(3)共同點:兩者都要求問題具有最優子結構性質。
不同點:動態規劃通常以自底向上的方法解各子問題,而貪心演算法則通常以自頂向下的方式進行,以迭代的方式做出相繼的貪心選擇,每做一次貪心選擇就昂所求問題簡化為規模更小的子問題。

4、使用過哪些設計模式?
普通工廠模式、工廠模式、策略模式、裝飾模式、單例模式代理模式等。
普通工廠模式:就是建立一個工廠類,對實現了同一介面的一些類進行例項的建立。首先看下關係圖:
這裡寫圖片描述
舉例如下:(我們舉一個傳送郵件和簡訊的例子)
首先,建立二者的共同介面:

public interface Sender {  
    public void Send();  
}  

其次,建立實現類:

public class MailSender implements Sender {  
    @Override  
    public void Send() {  
        System.out.println("this is mailsender!");  
    }  
}  
public class SmsSender implements Sender {  

    @Override  
    public void Send() {  
        System.out.println("this is sms sender!");  
    }  
}  

最後,建工廠類:

public class SendFactory {  

    public Sender produce(String type) {  
        if ("mail".equals(type)) {  
            return new MailSender();  
        } else if ("sms".equals(type)) {  
            return new SmsSender();  
        } else {  
            System.out.println("請輸入正確的型別!");  
            return null;  
        }  
    }  
}  

測試:

public class FactoryTest {  

    public static void main(String[] args) {  
        SendFactory factory = new SendFactory();  
        Sender sender = factory.produce("sms");  
        sender.Send();  
    }  
}  

輸出:this is sms sender!

5、你的專案中使用了hashmap和arraylist,說明一下hashmap的實現原理。Collection下有哪些集合?arraylist和linkedlist的區別?
關於hashmap的實現原理,直接看以下幾個問題:

(1)什麼時候會使用HashMap?他有什麼特點?
是基於Map介面的實現,儲存鍵值對時,它可以接收null的鍵值,是非同步的,HashMap儲存著Entry(hash, key, value, next)物件。

(2)你知道HashMap的工作原理嗎?
通過hash的方法,通過put和get儲存和獲取物件。儲存物件時,我們將K/V傳給put方法時,它呼叫hashCode計算hash從而得到bucket位置,進一步儲存,HashMap會根據當前bucket的佔用情況自動調整容量(超過Load Facotr則resize為原來的2倍)。獲取物件時,我們將K傳給get,它呼叫hashCode計算hash從而得到bucket位置,並進一步呼叫equals()方法確定鍵值對。如果發生碰撞的時候,Hashmap通過連結串列將產生碰撞衝突的元素組織起來,在Java 8中,如果一個bucket中碰撞衝突的元素超過某個限制(預設是8),則使用紅黑樹來替換連結串列,從而提高速度。

(3)你知道get和put的原理嗎?equals()和hashCode()的都有什麼作用?
通過對key的hashCode()進行hashing,並計算下標( n-1 & hash),從而獲得buckets的位置。如果產生碰撞,則利用key.equals()方法去連結串列或樹中去查詢對應的節點

(4)你知道hash的實現嗎?為什麼要這樣實現?
在Java 1.8的實現中,是通過hashCode()的高16位異或低16位實現的:(h = k.hashCode()) ^ (h >>> 16),主要是從速度、功效、質量來考慮的,這麼做可以在bucket的n比較小的時候,也能保證考慮到高低bit都參與到hash的計算中,同時不會有太大的開銷。

(5)如果HashMap的大小超過了負載因子(load factor)定義的容量,怎麼辦?
如果超過了負載因子(預設0.75),則會重新resize一個原來長度兩倍的HashMap,並且重新呼叫hash方法。

6、你實習的專案大資料系統前端和後端的資料是通過什麼互動的?ajax中有哪些屬性?前端超文字標記語言html有哪些標籤?

(1)通過ajax獲取JSON資料給後端,ajax中有一個url可以對應到後端某一個java檔案的某一個函式,後端由Controller->Service->ServiceImpl->Dao->DaoImpl。
下面貼一個來自知乎的AJAX獲取JSON資料說明和其他的前後端資料互動的方法:
https://www.zhihu.com/question/26532621/answer/33144979

(2)ajax中屬性:
①url:String,(預設為當前頁地址)傳送請求的地址,後端呼叫controller的路徑。
②type:String,請求方式(post或get),預設為get。注意其他http請求方法,例如put和delete也可以使用,但僅部分瀏覽器支援。
③data:要求為Object或String型別的引數,傳送到伺服器的資料。如果已經不是字串,將自動轉換為字串格式。get請求中將附加在url後。防止這種自動轉換,可以檢視processData選項。物件必須為key/value格式,例如{foo1:”bar1”,foo2:”bar2”}轉換為&foo1=bar1&foo2=bar2。如果是陣列,JQuery將自動為不同值對應同一個名稱。例如{foo:[“bar1”,”bar2”]}轉換為&foo=bar1&foo=bar2。
④dataType:要求為String型別的引數,預期伺服器返回的資料型別。如果不指定,JQuery將自動根據http包mime資訊返回responseXML或responseText,並作為回撥函式引數傳遞。可用的型別如下:
xml:返回XML文件,可用JQuery處理。
html:返回純文字HTML資訊;包含的script標籤會在插入DOM時執行。
script:返回純文字JavaScript程式碼。不會自動快取結果。除非設定了cache引數。注意在遠端請求時(不在同一個域下),所有post請求都將轉為get請求。
json:返回JSON資料。
jsonp:JSONP格式。使用SONP形式呼叫函式時,例如myurl?callback=?,JQuery將自動替換後一個“?”為正確的函式名,以執行回撥函式。
text:返回純文字字串。
⑤success:要求為Function型別的引數,請求成功後呼叫的回撥函式,有兩個引數。
(1)由伺服器返回,並根據dataType引數進行處理後的資料。
(2)描述狀態的字串。

success:function(data, textStatus){
    //data可能是xmlDoc、jsonObj、html、text等等
    this;  //呼叫本次ajax請求時傳遞的options引數
}

(3)html中常用標籤有:html、h1-h6標題、p段落、a href=”..”連結、img影象、body、title、option下拉框、select選擇列表、table表格等。

7、

相關推薦

一面面試問題

以下是愛奇藝一面、二面的問題,問題按記憶所記錄,不分先後。 1、HTTP協議是哪一層的?其報文結構如何?七層網路結構是? HTTP協議屬於應用層。 HTTP(超文字傳輸協議)是一個基於請求與響應模式的、無狀態的、應用層的面向物件的協議,常基於TCP的連線方

螞蟻金服的一次面試經歷(一面

一次有把握的面試,需要經過長時間的準備 電話一面 1、自我介紹、自己做的專案和技術領域 2、專案中的監控:那個監控指標常見的有哪些? 3、微服務涉及到的技術以及需要注意的問題有哪些? 4、註冊中心你瞭解了哪些? 5、consul 的可靠性你瞭解嗎? 6、cons

螞蟻金服的一次面試經歷分享!(一面

一次有把握的面試,需要經過長時間的準備! 電話一面 1、自我介紹、自己做的專案和技術領域 2、專案中的監控:那個監控指標常見的有哪些? 3、微服務涉及到的技術以及需要注意的問題有哪些? 4、註冊中心你瞭解了哪些? 5、consul 的可靠性你瞭解嗎? 6、c

記一次措手不及的面試--今日頭條(一面)

樓主投簡歷的時間是2017-01-25日,其實對於春招來說算是比較早了,但是當時看著牛客網上已經有許多招聘資訊了,而且隊友都已經騰訊二面的,就有點慌,想著先投幾份吧,反正也不會這麼早開始面試(一般來說校招實習生是在年後開始面試),還有一個月時間開始準備。第一發投了今日頭條

能夠將qsv騰訊qlv優酷kux完美轉換成mp4的轉換器和指令碼

愛奇藝視訊、騰訊視訊、優酷視訊相信很多人都在使用其中的一款或者幾款軟體吧,這三大視訊網站已經主導國內視訊行業,都是購買視訊版權。因此,為了保護視訊版權,就將快取視訊的格式設定成專屬的qsv、qlv、kux,這三種視訊格式非常特殊,都只能有自家的視訊播放器播放。   下面根

2017阿里巴巴實習生C/C++研發內推一面經歷

不得不說阿里巴巴的工程師有多厲害,問的問題也是諄諄善誘。 一面:進入正題, 3月29號晚上,一面面試官準時打來了電話,他先說自己是金蟻客服的,然後和一般的套路一樣,“先做個

騰訊筆試OMG一面HR

一年有餘沒有寫部落格了,這一年經歷了很多事。找實習、夏令營、考研、腳骨折受傷、複試、來到中科院工作。直到最近,才有時間一一記錄這一年以來的發生的種種事情。先從去年騰訊面試說起吧,時間久遠,可能記憶得不是太完全。 騰訊面試是按城市來分,申報時可以選擇希望面試城市

bat頭條iOS試題總結

1.什麼是函數語言程式設計? 函式可以接受函式當作輸入(引數)和輸出(返回值)。 2.什麼是ABI? 應用程式二進位制介面(application binary interface,ABI) 描述了應用程式和作業系統之間,一個應用和它的庫之間,或者應用的組成部分之間的低

騰訊優酷搜狐芒果樂視PPTV音悅臺等VIP視頻免費觀看

blog 視頻 www 樂視 log html show iyu com 有圖有真相 觀看地址一:http://www.luoruiyuan.cn/blog-show.html?id=62 觀看地址二:http://www.luor

騰訊電視劇解析采集

localhost mark code cursor python mat mac 同步 utf import re import urllib import urllib.request import pymysql def getHtml(url): pa

從B站映客的IPO上市,看國內視頻公司的內容審核現狀

內容安全 內容審核 中央電視臺《經濟半小時》欄目3月30日,中央電視臺《經濟半小時》欄目講述了網絡上的一個頑癥——×××內容。在這期主題為《互聯網上的“色誘”》的節目中,央視的記者揭示了×××直播的猖獗。×××也是困擾視頻和直播平臺的難題。今年2月份,全國“掃黃打非”辦公室曾召集百度、阿裏巴巴、騰訊、

下載網易雲收費歌曲觀看VIP視訊並下載

多年前,在一檔電視節目中,歌手韓紅斥責中國盜版太多,吐槽中國對版權的不重視、說實話,作為一名付不起VIP的良好中國公民來說,聽到這話挺無奈的,心想要是中國也和美國那樣知識版權意識太好,那以後誰還聽歌了。然而。我們做過的發展超乎了世界的想想,對版權意識的增加也完全超出了我的想想,不

糾結!優酷騰訊,我到底該買哪一個會員呢?

當前,在國內的長視訊領域,可以說是優酷、騰訊、愛奇藝這三家三足鼎立,集追劇、追電影、追綜藝、追動漫於一身。雖說在資源上,三家存在重合之處,但是也都有各自獨家的資源,比如,騰訊被稱為“國漫專區”,另外,如果想看NBA的話,騰訊則是最好的選擇;而優酷再與蘇寧體育達成合作後,在足球體育賽事這一塊兒也可以說

Python 爬取視訊十五萬條資料分析為什麼李誕不值得了?

  在《 Python 爬取愛奇藝 52432 條資料分析誰才是《奇葩說》的焦點人物? )》這篇文章中,我們從愛奇藝爬取了 5 萬多條評論資料,並對一些關鍵資料進行了分析,由此總結出了一些明面上看不到的資料,並將其直觀地展現了出來,資料分析的妙處即在於此。

2018秋季社招java實習生試題

題目: String a = new String("abc"); String b = new String("abc"); System.out.println(a.equals(b)); System.out.println(a== b); Strin

最新HOSTS法去除優酷等視訊網站廣告

#優酷 127.0.0.1 atm.youku.com 127.0.0.1 Fvid.atm.youku.com 127.0.0.1 html.atm.youku.com 127.0.0.1 valb.atm.youku.com 127.0.0.1 valf.atm.youku.com 127.0.0.1 v

Java實習生兩次經(base上海)

愛奇藝Java實習生兩次面試經驗 第一次 第一次是內推,一面電話面試,二面現場面試。 電話面試內容 介紹專案 B樹及其原理 二叉樹知道前序遍歷和中序遍歷如何重建(劍指offer原題)知道前序遍歷和後序遍歷能否重建(不能)為什麼 知道哪些排序演算

前端校招面試的一些經驗(阿里美團

筆試:只參加過阿里的線上筆試,美團是霸面,愛奇藝是實習轉正,所以並沒有什麼可以借鑑的地方,所以筆試這一塊兒並沒有太多經驗,後期跟很多已經入職BAT的人交流,都會吐槽筆試只是純唬人的,過不過有時候看緣分看運氣,而筆試的建議是面試哪個公司可以去刷該公司前兩年的校招或實習筆試題,

筆試試題

筆試題目主要側重於作業系統: 1.某完全二叉樹的總結點數為967,求葉子節點數?484 2.以下幾種方式都可以用於程序中執行緒的通訊,只能用於同一程序中的執行緒通訊為() a.事件 b.訊號量 c.互斥量 d.臨界區 關於執行緒間通訊,涉及到同一程序內的所有執行緒通訊和不

影象演算法工程師面試

過程 1.這是一位我見過最和藹的面試官,就像一個老師坐在我的面前一樣,之前每次帶簡歷,面試官都帶了電腦。這次去之前還在考慮到底要不要帶簡歷,還好去之前列印了一份新的簡歷,真是做事的態度永遠不要因為你經歷的一些事而改變。因為面試官只帶了一根筆,然後便在我的簡歷上