很真實的經歷,美團阿里京東全都嘗試過。希望對你們都有幫助
近一個多月 斷斷續續參加了一些校園秋季招聘,仍未上岸。
記錄近段時間的反思共享。
(時間順序)
【美團基礎研發部門-測試開發崗(功能測試,測試平臺研發,白盒測試等)】第一次面試
- 自我介紹
- 介紹實習工作
- 印象最深刻的線上問題以及解決方案
- StringBuffer和StringBuilder的區別
- Java悲觀鎖Synchronized和lock
- http和tcp區別
- http請求有哪些
- Linux查看日志信息,查內存
- 算法->整型有序數組,只有一個已知的有重復單元,找到第一次出現的下標(思路:二分查找)
- 數據庫->表(id,姓名,借閱書籍,借閱時間)查找確定7天的借閱記錄,按id排序。
[反思:
- 大大方方的自我介紹,來自哪里,叫什么,學校&專業,校內測試實踐,實習工作(無則空);這些經歷讓我對測試工作和技能有了更多了解并認識到了自己的不足和提高方向,如果有機會加入該團隊會提前了解工作內容和需要,并做好準備。
- 由上引出關于實習的問題(或校內實踐)。此介紹個人實習->功能測試為主,校內學習的自動化框架和測試工具輔助測試。回答此問題時介紹了測試的業務系統以及服務對象,提到了要根據不同的測試場景選用對應方法,同時除了熟悉業務的黑盒邏輯還要多多了解業務的代碼邏輯。
- 由上引出一個線上問題(即bug)怎么排查解決。①嘗試復現②關注數據流的各個階段,前端交互,http請求接口,后臺java api接口,數據庫③梳理代碼邏輯和數據來源(來自sql數據庫還是mongo或redis緩存,還是通過多個數據庫的拼湊數據)
- 串聯知識點StringBuffer&StringBuilder區別,除了各自應用場景一定會說到線程安全,引出保證安全的鎖機制。
- Linux查看日志的過程
cd 指定目錄(一般最后一級為logs)
ls 此命令會顯示出這個路徑下的各個日志文件
cat 文件名(靜態查看文件內容)
tail –f 文件名(動態查看日志)
??????? 【在面試官讓列舉知道的Linux命令時不妨以此場景說出多個命令】
]
【阿里菜鳥部門-測試開發崗(功能測試 黑盒&白盒 數據分析等)】電話第一次面試
- 自我介紹。與上答的一樣。
- 實習工作。與上答的一樣。
- 實習時接觸的系統或工作有什么不好的地方嗎?怎么改進。感覺跑偏了答的系統架構,前后端分離什么的,完全不會 其知識點也不屬于自己的能力范圍;反思認為,應該說自己應該從多方面熟悉業務系統(黑盒 白盒邏輯等)同時提高測試的工作效率,測試也作為敏捷開發周期的一部分其效率也影響到整個項目的進度。
- 看過什么源碼嗎。?????? ……
- 最近看什么書嗎。?????? ……
- 反問環節
- 系統優化那個問題我該怎么答。
面試官:具體我也不清楚,但我想知道你自己去了解的東西以及去思考的東西,而不是聽別人說的。
-
- 我沒有什么開發經驗,了解的到測試與測試開發的區別是測試開發會開發一些測試工具并以白盒測試為主?是嗎,還是有什么區別呢?
面試官(反問):我看到你簡歷上寫的完成過一些UI和http接口的測試框架,為什么說自己沒有開發經驗呢?其實測試開發與測試都是要結合具體的業務場景的,而測試開發更注重于什么測試場景選用什么測試框架的工具,有時候也會自己mock&stub接口來進行測試的。
[反思:
其實上面也寫出一些反思了,阿里的這一面雖然涼的明顯但給了我極大的啟發和自信。我一般在面試時總會找機會提一下自己沒有實際的開發經驗,但其實所謂“開發”并沒有多么高大、遠不可及;軟件開發時也是利用程序去梳理業務邏輯,關注消息的同步,數據的增刪改查,關注內存的使用,CPU的利用效率,利用接口鏈接與前端交互等等。這些都是基礎知識的應用實踐,測試也需要具備開發技能,但我們的開發技能會更多關注測試的框架和技術。這兩者是互通的。
而源碼的學習又會帶來什么呢?能幫我們去理解JVM內存的管理和調度,那些學習的理論也正是源代碼的體現。
而由原來李老師給我們看的美團lego接口測試平臺發現了美團的技術交流網站
tech.meituan.com
里面有篇文章寫道,程序員在復現BUG時發現問題代碼沒有日志,想加上日志再復現卻擔心重新啟動會破壞線程池等因素。而如果深入了解源碼便可以解決此困難,文章介紹了阿里團隊研發的開源框架用于解決上述問題。
?
秋招面臨的對手來自很多很多優秀的大學,他們比我們起點高且優秀的原因時人家曾比我們效率高,反思的更快,跑的更遠。而當我們一起去試水秋招一起競爭的時候我們也并非毫無優勢,很多崗位其實我們的能力也絕對能夠勝任,這20年我們也經歷過很多有益的事,也學過見過足夠的世面,我們需要反思、需要思考如何把自己有的東西更好的表達出來。讓面試官聽到 我們對已有知識的深刻反思以及能夠打動他們的事。
]
?
【美團基礎研發部門-測試開發崗(功能測試,測試平臺研發,白盒測試等)】第二次面試
- 介紹實習工作 (負責的四個系統及業務,給誰使用;根據不同的測試需求采取不同的測試方法[手工?自動化?框架輔助等])
- 怎么看待測試工作(研發負責實現抽象的業務功能;產品負責梳理需求做出需求文檔;測試介于兩者之間即需要關注代碼邏輯和黑盒的業務功能 正向反向的去設計測試驗證,同時也需要關注產品的業務容錯率。同時應當結合所在團隊的應用框架、組件技術等設計相應的測試。如:前端Vue技術的雙向綁定特性能夠讓表單輸入通過Js代碼利用”formdata.Name=”填寫;由于實習所在團隊沒實現前后端分離而又由于前端頁面相對固定,研發系統實現前端代碼的封裝應用Json串來操作Java代碼實現配置。由此反思,對所測系統的代碼邏輯,應用技術深入理解會對測試工作有利。)
- 怎么理解測試和測試開發(認為兩者都需要具備代碼能力,但認為除了業務測試外測試平臺的開發是由測試開發崗的人做的)。面試官:測試開發是由測試成長起來的,從業務測試入手,能在不同的測試場景應用相應的測試框架和方法。同時測試開發需要還需要具備一定的產品思維,對產品需求提出建議。
- 實習的測試團隊有什么不太好的地方嗎(研發承擔了過多壓力,實習的測試流程為需求文檔交付測試和開發,測試設計用例并熟悉業務,研發投入漫長的開發,待開發完成后介入測試。認為測試需要提前介入,除了了解黑盒業務外在開發過程中提前了解改造的接口和代碼邏輯,梳理開發的上下游依賴并判斷測試時是否需要提前做依賴的mock以及mock部分的回歸驗證,應實時了解研發的進度、困難點和暫不處理的地方這些地方會對應到bug的掛起等相應狀態。?????? 同時在此討論測試人員的代碼權限以及bug的定位問題<->測出bug研發不改的問題 ?bug不改是指bug確認為需要處理的bug但研發不予處理。此有兩種可能①需求更改沒同步給測試人員bug無效②bug優先級低且研發認為不影響主要功能,其根本原因是bug在上線截止日期前改不完且bug的修復代價很大,這時如果測試人員能協助定位到每個bug的更多信息,或者提供一定程度上的bug解決方向,便會使研發修復問題的效率提高。實現這點需要測試人員更多的了解、理解開發人員的工作,去分擔研發的壓力)。
- 學校學的測試和實際的測試工作有什么不同?(沒有不同,只是實際的測試與自己之前對測試的理解有不同。校內實訓的測試業務場景和邏輯比較簡單,以保證自動化等測試技術的實踐;而實際的測試業務十分復雜,不會很容易的把一個有價值的模塊單獨提煉出來設計自動化測試,但測試工作需要嘗試應用一些自動化技術來起到輔助的作用,還有資深業務測試人員會把許多歷史遺留問題及時記錄并及時在新的業務開發后驗證該問題是否升級,還會根據不同的業務場景帶入不同的用戶角色來設計測試,這些也都是有理論支撐的[探索測試],如果我工作及時反思并與所學的知識結合起來 會 讓自己更快的成長。)
- 代碼題:給定兩個字母組成的字符串,去除第一個字符串中含有的第二個字符串的字母,并將結果按字母字典序輸出。(思路利用set集合給第二個字符串去重,兩個遍歷,結果再用排序算法)
- 測試代碼
- Java8個基本類型
- 說出Java5個異常
- 反問:由于之前發現了tech.meituan.com問了面試官美團Quake全鏈路壓測平臺的一些問題。
[反思:
????????????? 還是前面那句話,我們很多經歷過的東西都值得思考和總結——實訓的測試框架每個模塊都有很多值得深入學習探索的價值(數據驅動怎么結合業務場景應用?監聽器有很多種類型可以實現用例的調度和選擇執行等),實習的再平常再機械的工作也有很多哲理值得總結(很多迭代里沒修復的問題根據什么理論知識記錄的?怎么與產品研發溝通?測試數據的協調等)。
????????????? 同時這些反思要怎么謙虛且流暢的表達給面試官
]
【京東云產品研發部門-測試開發工程師(無界面的后臺接口測試 對應 數據庫的增刪改查)】-初試
- 自我介紹
- 實習工作
- Bug生命周期
- 生命周期“掛起”狀態誰來處理
【京東云產品研發部門-測試開發工程師(無界面的后臺接口測試 對應 數據庫的增刪改查)】-復試
- 數據庫:A表(id),B表(id)查兩個表共有的id->連接查詢&子查詢
- 一個web界面只有一個按鈕,點擊按鈕后,http請求返回200,但界面出現error彈窗,怎么排查是前或后端的問題。(可能前端沒有正確的封裝后臺需要類型的參數;也可能是后臺捕獲的代碼異常處理時返回了200。斷定問題需要查看程序日志并關注上述的代碼邏輯和運行情況)
- 后臺的一系列接口,對應到數據庫的增刪改查邏輯,怎么測試?
- 判斷測試的兩個系統是否屬于一個網絡
- Switch語句和if else語句的區別
- 介紹Java集合set,list,map
- 一個頁面六個輸入框怎么測試
- Linux grep命令使用
[反思:
????????????? 被我忽視的兩次面試,由研發組長和系統架構作為面試官,在我回答測試相關的問題時并沒有足夠的耐心聽。但有時候我們需要適應不同的面試官和面試場景,此時應提煉簡化自己的回答。
]
【美團基礎研發部門-測試開發崗(功能測試,測試平臺研發,白盒測試等)】第三次面試(終)
- 介紹一個自己遇到的最具有挑戰的問題
- 這個問題設計的業務場景能否用UML圖畫出來
- 21層樓6臺電梯設計一個電梯調度程序實現電梯的調度使用,考慮多個場景。抽象出類和具體的屬性方法
- 快排的思想,時間復雜度,這個時間復雜度怎么算的,如何計算時間復雜度
- HashMap查找的時間復雜度,如何查找的
- Java集合有哪些?set和list區別?
[反思:
?????? ?……
]
最終倒在了京東云和美團的最后一次面試上,這是一段極其折磨人的經歷。
試水秋招期間
記不清這次準備是第幾次回顧:
三次握手,四次揮手;tcp/ip tcp udp http ip https,http請求方法,post&get區別;osi七層協議(以及為什么常問七層協議)及各層之間的作用;url解析過程;長連接&短鏈接;死鎖條件;擁塞控制;流量控制
??????
終于進一步搞清了:
JVM垃圾回收機制和分代回收算法;hashmap hashtable concurrentHashMap的區別以及jdk1.7 1.8concurrentHashMap的線程機制變化;線程同步的方法以及方法的原理(樂觀鎖,悲觀鎖,volatile關鍵字);線程的狀態和線程池調度以及創建線程的過程。
Sql的索引、兩種引擎
?
吸取實習面試經驗:
????????????? 刷了一些leetcode易中題型,幾種經典算法題如:約瑟夫環,topK(堆排序)等
最終反思:
- 面試的幾輪難度和層次是遞進的,如果一次面試后發現自己的所有能力點都被挖掘要及時警惕及時反思,為下一次面試做足準備
- 要把理論與實際要面臨的工作結合,有助于分清楚知識點的主次
- 許多知識點和考點也是需要迭代學習的,每次學習會有新發現,會更接近與實際的應用,而把知識點掌握到能夠應用到實際->我認為是修煉的終點
- 知識點是有限的,但對知識點的挖掘是無限的,但會有終點的。
- 秋招不易,考研也不易,祝福大家堅持到底。也祝上岸的同學一切順利。
- 總還是會有一些運氣成分和一些無法改變的東西影在響最終的結果,把握好自己能把握的,最終會上岸的。
- 以上純屬個人見解,修行不夠,繼續努力。
?