美團(tuán)實習(xí)面經(jīng)

因為當(dāng)年大四上學(xué)期考完研就直接進(jìn)了實驗室,從來沒有接觸過職場,算是一直生活在象牙塔里。找實習(xí)的想法誕生于今年過完年,開始了解牛客網(wǎng),力扣等刷題和找工作的網(wǎng)站。第一次上力扣刷題應(yīng)該是在2月8號,java的語法從HelloWorld開始學(xué)起,沒事做做??途W(wǎng)的選擇題,復(fù)習(xí)了哈計算機(jī)網(wǎng)絡(luò)。3月中旬在牛客網(wǎng)看到美團(tuán)的實習(xí)生招聘,因為非科班,沒有學(xué)過數(shù)據(jù)庫,操作系統(tǒng)和設(shè)計模式,對比了招聘要求后,沒敢投后臺開發(fā),投了測試開發(fā)工程師。不得不說美團(tuán)的效率還是蠻高的,3月20號筆試,3月25號一面,3月26號二面,3月30號三面。本來對自己非常沒有自信,因為碩士兩年一直在搞深度學(xué)習(xí),沒有接觸過數(shù)據(jù)結(jié)構(gòu)這一套找工作的東西,只是過完年粗略看了一遍,想來體驗哈美團(tuán)的筆試,沒想到就這么一面一面的走過來了。還是挺感謝??途W(wǎng)這個平臺的,上面很多筆試面試的面經(jīng),沒事就去刷刷對自己很有幫助。一面二面的面經(jīng)我都發(fā)到了牛客網(wǎng)上,傳送門在這里[一面面經(jīng)]([https://www.nowcoder.com/discuss/391434
]),[二面面經(jīng)]([https://www.nowcoder.com/discuss/392667
])。三面因為是主管面,沒有聊技術(shù),這里就不做記錄了。另外說一句,美團(tuán)的面試氛圍真的很好,面試官都很和藹。我被分配到了美團(tuán)小象事業(yè)部(美團(tuán)買菜),應(yīng)該是一個氛圍很不錯的部門。
下面記錄一下這幾天為面試做的筆記,這些都是我在美團(tuán)測開面經(jīng)上扒下來的面試問題或者是我自己面試遇到的問題,方便今年秋招的時候復(fù)習(xí):

1. 測試生命周期

需求分析階段:閱讀需求,理解需求,主要就是對業(yè)務(wù)的學(xué)習(xí),分析需求點
計劃階段:根據(jù)需求編寫測試計劃 / 測試方案
設(shè)計階段:根據(jù)需求和設(shè)計編寫一部分測試用例
執(zhí)行階段:遇到問題提交bug到缺陷管理平臺,并對bug進(jìn)行跟蹤,沒有重大bug,測試結(jié)束。
評估階段:出測試報告,對整個測試的過程和版本質(zhì)量做一個詳細(xì)的評估。

2. 白盒、黑盒、單元測試等的區(qū)別

單元測試:是指對軟件中的最小可測試單元進(jìn)行檢查和驗證。如C語言中單元指一個函數(shù),Java里單元指一個類。
集成測試:介于單元測試和系統(tǒng)測試之間,采用黑盒+白盒的方式來測試,主要測試模塊與模塊之間的接口,并測試一些主要的業(yè)務(wù)功能。
系統(tǒng)測試:粒度最大,一般由獨(dú)立測試小組采用黑盒方式來測試,主要測試系統(tǒng)是否符合“需求規(guī)格說明書”。
驗收測試:與系統(tǒng)測試相似,主要區(qū)別是測試人員不同,驗收測試由用戶執(zhí)行。
黑盒測試:也稱功能測試,不考慮程序內(nèi)部結(jié)構(gòu)和邏輯結(jié)構(gòu),主要是用來測試系統(tǒng)的功能是否滿足需求規(guī)格說明書。
白盒測試:也稱結(jié)構(gòu)測試,主要應(yīng)用在單元測試階段,主要是對代碼級的測試,針對程序內(nèi)部邏輯結(jié)構(gòu)測試。

3. ==和equals區(qū)別

==:在基礎(chǔ)數(shù)據(jù)類型中比較的是他們的值是否相等,在引用數(shù)據(jù)類型中比較的是引用的地址是否相同。
equals:對于非string比較的是引用的地址是否相同,String中的equals方法其實比較的是字符串的內(nèi)容是否一樣。

4. 深拷貝和淺拷貝

深拷貝和淺拷貝最根本的區(qū)別在于是否真正獲取一個對象的復(fù)制實體,而不是引用。
淺拷貝:只是增加了一個指針指向已存在的內(nèi)存地址,
深拷貝:是增加了一個指針并且申請了一個新的內(nèi)存,使這個增加的指針指向這個新的內(nèi)存。

5. TCP和UDP

TCP(傳輸控制協(xié)議):是面向連接的協(xié)議,也就是說,在收發(fā)數(shù)據(jù)前,必須和對方建立可靠的連接。
TCP三次握手過程:
1主機(jī)A通過向主機(jī)B 發(fā)送一個含有同步序列號的標(biāo)志位的數(shù)據(jù)段給主機(jī)B ,向主機(jī)B 請求建立連接,通過這個數(shù)據(jù)段,主機(jī)A告訴主機(jī)B 兩件事:我想要和你通信;你可以用哪個序列號作為起始數(shù)據(jù)段來回應(yīng)我。
2 主機(jī)B 收到主機(jī)A的請求后,用一個帶有確認(rèn)應(yīng)答(ACK)和同步序列號(SYN)標(biāo)志位的數(shù)據(jù)段響應(yīng)主機(jī)A,也告訴主機(jī)A兩件事:我已經(jīng)收到你的請求了,你可以傳輸數(shù)據(jù)了;你要用哪個序列號作為起始數(shù)據(jù)段來回應(yīng)我。
3 主機(jī)A收到這個數(shù)據(jù)段后,再發(fā)送一個確認(rèn)應(yīng)答,確認(rèn)已收到主機(jī)B的數(shù)據(jù)段:"我已收到回復(fù),我現(xiàn)在要開始傳輸實際數(shù)據(jù)了這樣3次握手就完成了,主機(jī)A和主機(jī)B就可以傳輸數(shù)據(jù)了。
TCP四次揮手過程:
1 當(dāng)主機(jī)A完成數(shù)據(jù)傳輸后,將控制位FIN置1,提出停止TCP連接的請求
2 主機(jī)B收到FIN后對其作出響應(yīng),確認(rèn)這一方向上的TCP連接將關(guān)閉,將ACK置1
3 由B 端再提出反方向的關(guān)閉請求,將FIN置1
4 主機(jī)A對主機(jī)B的請求進(jìn)行確認(rèn),將ACK置1,雙方向的關(guān)閉結(jié)束.
UDP(用戶數(shù)據(jù)報協(xié)議):
1 UDP是一個非連接的協(xié)議,傳輸數(shù)據(jù)之前源端和終端不建立連接,當(dāng)它想傳送時就簡單地去抓取來自應(yīng)用程序的數(shù)據(jù),并盡可能快地把它扔到網(wǎng)絡(luò)上。
2 UDP使用盡最大努力交付,即不保證可靠交付.
3 對系統(tǒng)資源的要求比較少。

6. DNS,F(xiàn)TP,HTTP

DNS:域名解析協(xié)議,通過域名解析獲得域名所對應(yīng)的IP。
FTP:文件傳輸協(xié)議,用戶可通過客戶機(jī)程序向遠(yuǎn)程主機(jī)上傳文件;或從遠(yuǎn)程主機(jī)上下載文件。
HTTP:超文本傳輸協(xié)議。web服務(wù)器用這種協(xié)議和瀏覽器交互。
HTTPS:為加密的超文本傳輸協(xié)議。

7. 進(jìn)程與線程,線程有哪幾種模式

進(jìn)程 :是系統(tǒng)進(jìn)行資源調(diào)度和分配的基本單位,進(jìn)程間獨(dú)享內(nèi)存,一個系統(tǒng)至少一個進(jìn)程。
線程 :是cpu進(jìn)行資源分配和調(diào)度的基本單位,線程間共享進(jìn)程的內(nèi)存,一個進(jìn)程至少一個線程。
幾乎任何的操作系統(tǒng)都支持運(yùn)行多個任務(wù),通常一個任務(wù)就是一個程序,而一個程序就是一個進(jìn)程。當(dāng)一個進(jìn)程運(yùn)行時,內(nèi)部可能包括多個順序執(zhí)行流,每個順序執(zhí)行流就是一個線程。
線程是進(jìn)程的組成部分,一個進(jìn)程可以擁有多個線程,而一個線程必須擁有一個父進(jìn)程。線程不能擁有系統(tǒng)資源。它與父進(jìn)程的其他線程共享該進(jìn)程的所有資源。
java中,每個線程都需經(jīng)歷新生、就緒、運(yùn)行、阻塞和死亡五種狀態(tài)

8. OSI七層協(xié)議,每層是干啥的

物理層:為數(shù)據(jù)端設(shè)備提供原始比特流的傳輸通路。(中繼器、集線器、網(wǎng)線、HUB)
數(shù)據(jù)鏈路層:在通信的實體間建立數(shù)據(jù)鏈路連接。(交換機(jī))
網(wǎng)絡(luò)層:為數(shù)據(jù)在節(jié)點之間傳輸創(chuàng)建邏輯鏈路,并分組轉(zhuǎn)發(fā)數(shù)據(jù)。(路由器)
傳輸層:提供應(yīng)用進(jìn)程之間的邏輯通信。
會話層:建立端連接并提供訪問驗證和會話管理。
表示層:提供數(shù)據(jù)格式的轉(zhuǎn)換服務(wù)。
應(yīng)用層:訪問網(wǎng)絡(luò)服務(wù)的接口。

9. Linux常用命令

cd <路徑> cd命令后面跟一個路徑,用于切換當(dāng)前用戶所在的路徑。
pwd 顯示目前的目錄。
ls <參數(shù)> <路徑> ls命令后面可以跟一個路徑或參數(shù),也可以不跟,表示列出路徑或當(dāng)前目錄下的所有文件信息。
cat <文件> 表示讀取文件內(nèi)容及拼接文件。
tac <文件> 從最后一行開始讀取文件內(nèi)容。
touch <文件> 在當(dāng)前目錄下創(chuàng)建一個文件。
rm -r <文件夾> 用于刪除文件或文件夾,常用參數(shù)-r -f,-r表示刪除目錄,也可以用于刪除文件,-f表示強(qiáng)制刪除,不需要確認(rèn)。
mkdir <文件夾> 用于創(chuàng)建文件夾。
rmdir <文件夾> 刪除當(dāng)前目錄下的test目錄(注意:該命令只能夠刪除空目錄)
cp <文件> <目標(biāo)文件> 用于復(fù)制文件或文件夾。
tar -zcvf <打包壓縮后的文件名> <要打包壓縮的文件> 打包并壓縮文件。
tar -xvf <壓縮文件> 解壓壓縮包
tail <必要參數(shù)> <選擇參數(shù)> <文件> 用于顯示指定文件末尾內(nèi)容,不指定文件時,作為輸入信息進(jìn)行處理。常用查看日志文件。
kill <PID碼> 結(jié)束當(dāng)前進(jìn)程。
ps aux ps命令用于報告當(dāng)前系統(tǒng)的進(jìn)程狀態(tài)。
reboot 現(xiàn)在重新啟動計算機(jī)。
su - 切換用戶
chmod 修改文件/目錄的權(quán)限
mv 移動文件與目錄,或修改名稱
man [命令] 查看各個命令的使用文檔
netstat 查看端口開放情況
df 查看磁盤空間大小
du 查看文件和目錄大小
grep [選項] “模式” [文件]查找文件里符合條件的字符串

10. 瀏覽器輸入一個網(wǎng)址發(fā)生了什么
  1. 首先,它會請求DNS把這個域名解析成對應(yīng)的IP地址。
  2. 向IP所對應(yīng)的服務(wù)器發(fā)送請求,服務(wù)器創(chuàng)建線程響應(yīng)并返回默認(rèn)資源給予用。
    當(dāng)數(shù)據(jù)返回給瀏覽器的時候,若瀏覽器解析數(shù)據(jù)還有一些靜態(tài)資源(CSS、圖片等)
  3. 再次發(fā)送HTTP請求,這些請求可能在CDN(內(nèi)容分發(fā)網(wǎng)絡(luò))上,CDN服務(wù)器會處理用戶請求。
11. GET和POST的區(qū)別

GET:一般用于獲取/查詢資源信息, 它僅僅是獲取資源信息,就像數(shù)據(jù)庫查詢一樣,不會修改,增加數(shù)據(jù),不會影響資源的狀態(tài)。 Get是不安全的,很可能你的一些操作會被第三方看到。Get傳輸?shù)臄?shù)據(jù)量小。
POST:一般用于更新資源信息。Post的所有操作多用戶來說是不可見的。Post可以傳輸大量的數(shù)據(jù)。

12. https的加密傳輸
  1. 瀏覽器將自己支持的一套加密規(guī)則發(fā)送給網(wǎng)站。
  2. 網(wǎng)站從中選出一組加密算法與HASH算法,并將自己的身份信息以證書的形式發(fā)回給瀏覽器。
  3. 客戶端拿到公鑰之后先發(fā)送一個隨機(jī)串到服務(wù)器,服務(wù)器進(jìn)行加密,并且返回。
  4. 客戶端用公鑰解密收到的報文,發(fā)現(xiàn)果然能解開,于是確認(rèn)這就是正確的公鑰。
  5. 客戶端生成一個對稱加密密鑰,公鑰加密,并且發(fā)送給服務(wù)器。這個過程是安全的。
  6. 服務(wù)器收到對稱密鑰加密報文。用私鑰進(jìn)行解密,于是get到客戶端發(fā)來的密鑰,于是愉快的開始了通信。
13. 狀態(tài)碼總結(jié)

2XX——表明請求被正常處理了 :
200 請求已正常處理。
204 請求處理成功,但沒有任何資源可以返回給客戶端。
206 是對資源某一部分的請求,該狀態(tài)碼表示客戶端進(jìn)行了范圍請求,而服務(wù)器成功執(zhí)行了這部分的GET請求。
3XX——表明瀏覽器需要執(zhí)行某些特殊的處理以正確處理請求:
301向是永久重定向,搜索引擎在抓取新的內(nèi)容的同時也將舊的網(wǎng)址替換為了重定向之后的網(wǎng)址。
302是臨時重定向,搜索引擎會抓取新的內(nèi)容而保留舊的地址。
303與302狀態(tài)碼有著相同的功能,但303狀態(tài)碼明確表示客戶端應(yīng)當(dāng)采用GET方法獲取資源。
304資源已找到,但未符合條件請求。
4XX——表明客戶端是發(fā)生錯誤的原因所在:
400服務(wù)器端無法理解客戶端發(fā)送的請求,請求報文中可能存在語法錯誤。
403不允許訪問那個資源。
404服務(wù)器上沒有請求的資源。
5XX——服務(wù)器本身發(fā)生錯誤:
500貌似內(nèi)部資源出故障了。
503該狀態(tài)碼表明服務(wù)器暫時處于超負(fù)載或正在停機(jī)維護(hù),現(xiàn)在無法處理請求。

14. 數(shù)據(jù)結(jié)構(gòu)中,什么是線性結(jié)構(gòu),什么是非線性結(jié)構(gòu)

線性結(jié)構(gòu):是一個有序數(shù)據(jù)元素的集合。常用的線性結(jié)構(gòu)有:棧,隊列,數(shù)組,鏈表。其特點是數(shù)據(jù)元素之間存在一對一的線性關(guān)系。線性結(jié)構(gòu)擁有兩種不同的存儲結(jié)構(gòu),即順序存儲結(jié)構(gòu)和鏈?zhǔn)酱鎯Y(jié)構(gòu)。順序存儲的線性表稱為順序表,順序表中的存儲元素是連續(xù)的,鏈?zhǔn)酱鎯Φ木€性表稱為鏈表,鏈表中的存儲元素不一定是連續(xù)的,元素節(jié)點中存放數(shù)據(jù)元素以及相鄰元素的地址信息。線性結(jié)構(gòu)中存在兩種操作受限的使用場景,即隊列和棧。
非線性結(jié)構(gòu):各個數(shù)據(jù)元素不再保持在一個線性序列中,每個數(shù)據(jù)元素可能與零個或者多個其他數(shù)據(jù)元素發(fā)生聯(lián)系。常見的非線性結(jié)構(gòu)有:多維數(shù)組,樹,圖。

15. 重載與重寫

重載: 是讓類以統(tǒng)一的方式處理不同類型數(shù)據(jù)的一種手段,實質(zhì)表現(xiàn)就是多個具有不同的參數(shù)個數(shù)或者類型的同名函數(shù),同時存在于同一個類中,是一個類中多態(tài)性的一種表現(xiàn)。
重寫: 是父類與子類之間的多態(tài)性,實質(zhì)是對父類的函數(shù)進(jìn)行重新定義,如果在子類中定義某方法與其父類有相同的名稱和參數(shù)則該方法被重寫,不過子類函數(shù)的訪問修飾權(quán)限不能小于父類的。

16. static關(guān)鍵字

static方法就是沒有this的方法。在static方法內(nèi)部不能調(diào)用非靜態(tài)方法,反過來是可以的。而且可以在沒有創(chuàng)建任何對象的前提下,僅僅通過類本身來調(diào)用static方法。這實際上正是static方法的主要用途。

17. hashCode和equals方法的區(qū)別與聯(lián)系

equal()相等的兩個對象他們的hashCode()肯定相等,也就是用equal()對比是絕對可靠的。
hashCode()相等的兩個對象他們的equal()不一定相等,也就是hashCode()不是絕對可靠的。
當(dāng)需要對比的時候,首先用hashCode()去對比,如果hashCode()不一樣,則表示這兩個對象肯定不相等(也就是不必再用equal()去再對比了),如果hashCode()相同,此時再對比他們的equal(),如果equal()也相同,則表示這兩個對象是真的相同了。

18. TCP/IP分為幾層,每一層有那些協(xié)議

網(wǎng)絡(luò)接口層:負(fù)責(zé)從網(wǎng)絡(luò)上接收物理幀,抽出IP數(shù)據(jù)報,交給IP層。(網(wǎng)絡(luò)接口協(xié)議)
網(wǎng)絡(luò)層:主要定義了IP地址格式。(IP協(xié)議)
傳輸層:主要是提供應(yīng)用程序間的通信。(TCP協(xié)議,UDP協(xié)議)
應(yīng)用層:(FTP、SMTP、DNS)

19. synchronized和volatile的區(qū)別

volatile:一旦一個共享變量(類的成員變量、類的靜態(tài)成員變量)被volatile修飾之后,那么就具備了兩層語義:
1)保證了不同線程對這個變量進(jìn)行操作時的可見性,即一個線程修改了某個變量的值,這新值對其他線程來說是立即可見的。
2)禁止進(jìn)行指令重排序。
Synchronized:則是鎖定當(dāng)前變量,只有當(dāng)前線程可以訪問該變量,其他線程被阻塞住。
二者區(qū)別:
1.volatile僅能使用在變量級別;
synchronized則可以使用在變量、方法、和類級別的
2.volatile僅能實現(xiàn)變量的修改可見性,并不能保證原子性;
synchronized則可以保證變量的修改可見性和原子性
3.volatile不會造成線程的阻塞;
synchronized可能會造成線程的阻塞。

20. α測試和β測試

α測試:就是把用戶請到公司內(nèi)部進(jìn)行測試使用。α測試是由一個用戶在開發(fā)環(huán)境下進(jìn)行的測試,也可以是公司內(nèi)部的用戶在模擬實際操作環(huán)境下進(jìn)行的測試。注意!α測試不能由程序員或測試員完成。
β測試:用戶在不同場所進(jìn)行測試。β測試是一種驗收測試。β測試由軟件的終用戶們在一個或多個場所進(jìn)行。
二者區(qū)別:
它們都是驗收測試!
α測試是指把用戶請到開發(fā)方的場所來測試
β測試是指在一個或多個用戶的場所進(jìn)行的測試。
α測試的環(huán)境是受開發(fā)方控制的,用戶的數(shù)量相對比較少,時間比較集中。
β測試的環(huán)境是不受開發(fā)方控制的, 用戶數(shù)量相對比較多,時間不集中。
α測試先于β測試執(zhí)行。通用的軟件產(chǎn)品需要較大規(guī)模的β測試,測試周期比較長。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • __block和__weak修飾符的區(qū)別其實是挺明顯的:1.__block不管是ARC還是MRC模式下都可以使用,...
    LZM輪回閱讀 3,599評論 0 6
  • ———————————————回答好下面的足夠了---------------------------------...
    恒愛DE問候閱讀 1,844評論 0 4
  • 01 2014年2月離家北漂,來到一個陌生的城市,身為土生土長的湖南妹子,不適應(yīng)氣候開始水土不服。我這水土不服說起...
    龍姑娘生活記閱讀 468評論 0 0
  • 今天按照書上說的Q版漫畫畫了幾個人臉~ —— ——! Fathing
    魯狂歌閱讀 135評論 0 0
  • 當(dāng)今的時代, 時下的教育,你不要相信有好孩子,也不要說你的孩子有多聽話,我不信。即使有,那也是老師逼出來的...
    奔跑的小豬_7f4c閱讀 234評論 0 4

友情鏈接更多精彩內(nèi)容