最近有收到一些學員不同公司的面試題,像位元組跳動、網易、美團等,趁著有時間,給大家梳理下,說不定面試能派上用場,大概給大家從以下幾個方面來做了整理:
- 個人資訊:(作業/實習經驗,所做的專案,態度素養)
- 測驗思維
- 情景問題
- 計算機網路
- 作業系統
- 代碼/演算法題
- 語言(Python/Java)
- Linux
- 資料庫
- ...

注意注意這只是其中的部分面試題,需要完整版的PDF可以點擊這里,備注博客園哈,僅此本次分享
個人資訊
1. 公司測驗流程?/測驗作業怎么開展的?/怎么展開測驗?
考察是否熟悉測驗程序中各個環節,具備知識:軟體生命周期、bug 生命周期、測驗流程,
大概流程為需求評審會議 ---> 測驗計劃(測驗范圍、時間節點、任務分配、測驗策略、環境,風險評估)---> 測驗用例撰寫(測驗思維)、內部/專案組評審 ---> 測驗執行(開發編譯完成,提測):發現 bug 定位 bug,提交并跟蹤 bug,多輪回歸測驗,測驗結束 ---> 整理測驗報告--> 發布線上,線上問題跟蹤,
可依據自己公司做適當調整,
2.做過什么專案,負責什么?
3.專案中每個業務扣細節?
4.個人規劃、如何理解測驗崗位
5.在最近生活或者作業上,遇到的最有挑戰的事
測驗思維
1.紙杯子做什么測驗?
反問面試官:這個水杯容量、材質、大小、形狀、功能有無限制?
面試官:沒有限制
我:假設這個水杯 100ml 辦公室一次性的紙質水杯
功能測驗、界面測驗、易用性測驗、兼容性測驗、安全測驗、性能壓力來思考
功能測驗:水杯能否正常裝水,不漏水?100ml 邊界值? 裝冷水開水熱水?能否降解?....
界面測驗:外觀顏色、設計、logo、界面文字是否正確?.
易用性測驗:隔熱、易握?杯口是否毛刺?設計是否符合人體工學?....
兼容性測驗:裝氣體/固體/液體? 不同環境下是否正常?
安全測驗:材質質量,是否防止腐蝕能力?防止碰撞,割手?抑制細菌?....
性能壓力:摔多次?是否耐摔?(不同高度) 擠壓(不同角度),是否變形?.....
2.發紅包測驗用例?
3.微信點贊如何測驗?
4. 設計發朋友圈測驗用例
5.領取優惠券的頁面如何設計?
6.設計抖音視頻播放頁面測驗用例?
7.針對抖音搜索界面,設計測驗用例?
8.如何測驗一瓶礦泉水?
9.一個專案,有增刪改查介面等,做介面測驗,怎么測?
情景問題
1. 視頻卡頓如何排查
2.打開 APP 后頁面空白,怎么排查問題?
答案:
- 先確保網路正常、輸入的 URL 地址是正確的
- 通過瀏覽器除錯工具或者抓包工具例 fiddler,查看控制臺的請求和回應,
- 查看請求地址和引數等是否正常;后臺回傳狀態碼、回應資料等是否正常
- 一般經過以上步驟,基本能夠定位到問題,例控制臺報 js 例外之類的,則前端問題;若回傳狀態 500,則后端問題,可同步查看服務器日志來定位
3. 為微信的點贊功能設計測驗用例,假如點贊了但是點贊數沒有加一,可能報錯在哪里?
答案:url 定位錯誤、代碼錯誤、斷網操作網路不好、未更新、次數限制
4. 網路良好的情況下,發現資料傳輸程序出現 404 的情況,你認為是什么問題,
原因一般來說有幾種情況:
- 無法在所請求的埠上訪問 Web 站點,
- Web 服務擴展鎖定策略阻止本請求,
- MIME 映射策略阻止本請求
- 網站更新改版,但某些區域板塊沿用原來的模塊,而原有的模塊呼叫的檔案已經被洗掉或轉移了路徑,
- 跟蹤訪問的各類腳碼或 CSS 檔案無效但呼叫代碼依然存在,
- 某個目錄直接洗掉
- 網頁 URL 生成規則改變
- 網頁檔案更名或移動位置
- 匯入鏈接拼寫錯誤等
5. A 給 B 發送訊息后,A 看見訊息發送出去了,但是 B 沒有收到,怎么排查問題?
6. 網頁加載慢的原因?
7. 與開發人員沖突的處理方法及遇到問題的解決方法
8. 一個 bug 開發不認同是 bug 你該怎么做 ?
首先確認開發環境是否跟自己測驗環境一致(有時候開發是在他們已更新代碼的環境上驗證 bug 的,所以 bug 就沒出現,但在測驗環境上面會出現),確認在測驗環境能重現,如果確認是缺陷跟開發保持有效的溝通,
如果是級別較低的建議性 bug,可以先記錄到 bug 平臺,先保留溝通;
如果是 bug 級別較高的問題,對應需求檔案的預期結果跟開發說明,更有說服力;耐心講解 bug 的危害,不行就找產品確認,確認是 bug 注明情況并再次指派給開發
9. 你正在測驗,產品組拿來一個緊急測驗讓你測,你該怎么辦?
10. 如果同事進度不能符合預期,影響整體進度怎么辦
11. 如果領導給你一個不熟悉的事件,但很緊急怎么辦?
計算機網路
1.介紹 OSI 模型
第一層:物理層,功能:利用傳輸介質為通信的主機之間的建立、管理和釋放物理連接,實作位元流的透明傳輸,為資料聯立層提供資料傳輸服務
第二層:資料鏈路層,功能:在物理層提供位元流的基礎上通過建立資料鏈路連接,采用差錯控制與流量控制方法,使有差錯的物理線路變成無差錯的資料鏈路
第三層:網路層,功能:通過路由選擇演算法為分組通過通信子網選擇適當的傳輸路徑,實作流量控制,擁塞控制與網路互聯的功能
第四層:傳輸層,功能:為分布不同地理位置計算機的行程提供可靠的端對端鏈接與資料傳輸服務;傳輸層向高層屏蔽了底層資料通信的細節
第五層:會話層,功能:負責維護兩個會話主機之間連接的建立、管理和終止,以及資料的交換
第六層:表示層,功能:負責通信系統之間的資料格式變換、資料加密與解密、資料壓縮與恢復
第七層:應用層,功能:實作協同作業的應用程式之間的通信程序控制
2.為什么 TCP 消耗系統資源多
3.TCP 與 UDP 區別
- 基于連接與無連接;
- 對系統資源的要求(TCP 較多,UDP 少);
- UDP 程式結構較簡單;
- 流模式與資料報模式 ;
- TCP 保證資料正確性,UDP 可能丟包,TCP 保證資料順序,UDP 不保證,
4.TCP 怎么保證可靠連接
5.http 會話保持功能如何實作?
6.http 狀態碼?
1XX:通知,1XX 系列回應代碼僅在與 HTTP 服務器溝通時使用,
2XX: 成功,2XX 系列回應代碼表明操作成功了,
3XX 重定向,3XX 系列回應代碼表明:客戶端需要做些額外作業才能得到所需要的資源,
4XX:客戶端錯誤,這些回應代碼表明客戶端出現錯誤,不是認證資訊有問題,就是表示格式或 HTTP 庫本身有問題,客戶端需要自行改正,
5XX 服務端錯誤,這些回應代碼表明服務器端出現錯誤,
7.http 長連接和短連接以及他們分別適用的場景 ?
8.get 和 post 區別?
Get:
a.一般對于從服務器取資料的請求可以設定為 get 方式
b.Get 方式在傳遞引數的時候,一般都會把引數直接拼接在 url 上(例如:http://xxx?id=1&type=2)
c.Get 請求方法可以傳遞的引數資料量是有限的(因為一般引數是拼接在 url 上,而瀏覽器對于 url 的長度是有限制的)
d.Get 請求因為是直接將資料拼接在 url 上,所以安全性不如 post 強(相對),但是 get 的執行效率要快于 post
Post:
a.一般往服務器提交資料的請求會設定為 post 方式
b.Post 方式傳遞引數一般都會把引數放在請求體,而不會拼接在 url
c.Post 請求方法可以提交的資料量不受限制
Post 請求傳參相對于 get 要安全(相對不是絕對),但是 post 的執行效率不如 get,
9.post 主體的格式?
10.http 協議的 header
11.cookie 和 session 是什么,為什么要用 cookie 和 session ?
12.DNS 協議和作用?
13.Https 中的 CA 證書在客戶端還是在服務端?
作業系統
1. 行程和執行緒的區別?
行程是資源分配的最小單位,執行緒是程式執行的最小單位,
行程有自己的獨立地址空間,每啟動一個行程,系統就會為它分配地址空間,建立資料表來維護代碼段、堆疊段和資料段,這種操作非常昂貴,而執行緒是共享行程中的資料的,使用相同的地址空間,因此 CPU 切換一個執行緒的花費遠比行程要小很多,同時創建一個執行緒的開銷也比行程要小很多,
執行緒之間的通信更方便,同一行程下的執行緒共享全域變數、靜態變數等資料,而行程之間的通信需要以通信的方式(IPC)進行,不過如何處理好同步與互斥是撰寫多執行緒程式的難點,
但是多行程程式更健壯,多執行緒程式只要有一個執行緒死掉,整個行程也死掉了,而一個行程死掉并不會對另外一個行程造成影響,因為行程有自己獨立的地址空間,
2. 多執行緒和多行程,以及應用場景?
3. 行程通信方式 ?
4. 記憶體泄漏?
5. 堆和堆疊?
堆疊區(stack)— 由編譯器自動分配釋放 ,存放函式的引數值,區域變數的值等,其操作方式類似于資料結構中的堆疊,
堆區(heap) — 一般由程式員分配釋放, 若程式員不釋放,程式結束時可能由 OS 回收 ,
6. 堆記憶體和堆疊記憶體?
7. 什么是死鎖,死鎖的條件?
8. 產生死鎖的原因?
可歸結為如下兩點:
a. 競爭資源
系統中的資源可以分為兩類:
可剝奪資源,是指某行程在獲得這類資源后,該資源可以再被其他行程或系統剝奪,CPU 和主存均屬于可剝奪性資源;
另一類資源是不可剝奪資源,當系統把這類資源分配給某行程后,再不能強行識訓,只能在行程用完后自行釋放,如磁帶機、列印機等,
產生死鎖中的競爭資源之一指的是競爭不可剝奪資源(例如:系統中只有一臺列印機,可供行程 P1 使用,假定 P1 已占用了列印機,若 P2 繼續要求列印機列印將阻塞)
產生死鎖中的競爭資源另外一種資源指的是競爭臨時資源(臨時資源包括硬體中斷、信號、訊息、緩沖區內的訊息等),通常訊息通信順序進行不當,則會產生死鎖
b. 行程間推進順序非法
若 P1 保持了資源 R1,P2 保持了資源 R2,系統處于不安全狀態,因為這兩個行程再向前推進,便可能發生死鎖
例如,當 P1 運行到 P1:Request(R2)時,將因 R2 已被 P2 占用而阻塞;當 P2 運行到 P2:Request(R1)時,也將因 R1 已被 P1 占用而阻塞,于是發生行程死鎖
9. 如何預防死鎖,!避免死鎖,死鎖發生的檢查?
資源一次性分配:一次性分配所有資源,這樣就不會再有請求了:(破壞請求條件)
只要有一個資源得不到分配,也不給這個行程分配其他的資源:(破壞請保持條件)
可剝奪資源:即當某行程獲得了部分資源,但得不到其它資源,則釋放已占有的資源(破壞不可剝奪條件)
資源有序分配法:系統給每類資源賦予一個編號,每一個行程按編號遞增的順序請求資源,釋放則相反(破壞環路等待條件)
代碼題、演算法題
1.裝飾器并寫一個裝飾器例子?
2.找出 陣列中出現次數超過一半的數字
3.哈希表的空間復雜度
4.演算法題:給你一個字串,查找出所有的重復子字串,
5.演算法題:樹的深度遍歷:while 回圈:堆疊,先入右子樹節點,后入左子樹節點,
6.演算法題:給你一個字串找出其中的回文字串,對你的演算法設計用例
7.演算法題:二叉樹的前序遍歷
Python/Java 基礎
- 面向物件語言的特性?
- 深拷貝與淺拷貝?
資料型別分為兩種基礎型別和參考型別
- 基礎型別:像 Number、String、Boolean 等這種為基本型別
- 參考型別:Object 和 Array
淺拷貝只是復制了物件的參考地址,兩個物件指向同一個記憶體地址,所以修改其中任意的值,另一個值都會隨之變化,這就是淺拷貝(例:assign())
深拷貝是將物件及值復制過來,兩個物件修改其中任意的值另一個值不會改變,這就是深拷貝
- python 元祖和串列的區別
a=[] 這是一個串列
b=() 這是一個元組
區別:串列可以修改而元組不能修改,例如可以往串列中用 append()添加元素,由于元組是不可修改的所以不存在添加元素的問題,
相同點:串列和元組都是容器,包含了一些列的物件,二者都可以包含任意型別的元素甚至包含序列,
- python 去重用什么 ?
- python 用過哪些庫函式?
- selenium 用到什么程度了?
- python 裝飾器,作用,用法
- Java:多型說一下,介面類和抽象類的區別;
- Java/Python 的垃圾回識訓制?
- Java 和 python 創建多執行緒和多行程的方式 ?
Linux
1.常見命令
2.列印當前檔案夾檔案 ls -al a 所有檔案 l 詳細資訊
3.查詢 CPU 等情況的命令
答案:free 命令是一個快速查看記憶體使用情況的方法,它是對 /proc/meminfo 收集到的資訊的一個概述,
top 命令提供了實時的運行中的程式的資源使用統計
atop 命令是一個終端環境的監控命令,它顯示的是各種系統資源(CPU, memory, network, I/O, kernel)的綜合,并且在高負載的情況下進行了彩色標注
htop 命令顯示了每個行程的記憶體實時使用率,它提供了所有行程的常駐記憶體大小、程式總記憶體大小、共享庫大小等的報告,串列可以水平及垂直滾動,
ps 命令可以實時的顯示各個行程的記憶體使用情況,
smem 命令允許你統計基于/proc 資訊的不同行程和用戶的記憶體使用情況,記憶體使用情況的分析可以匯出圖表(如條形圖和餅圖--圖形界面視窗才提供),
vmstat 命令顯示實時的和平均的統計,覆寫 CPU、記憶體、I/O 等內容,例如記憶體情況,不僅顯示物理記憶體,也統計虛擬記憶體,
nmon 是一個基于 ncurses 的系統基準測驗工具,它可以監控 CPU、記憶體、I/O、檔案系統及網路資源等的互動模式,對于記憶體的使用,它可以實時的顯示 總/剩余記憶體、交換空間等資訊,
資料庫
- MySQL 存盤引擎如何實作?
- 事務概念及其特性?
概念:
1.資料庫事務: 資料庫事務通常指對資料庫進行讀或寫的一個操作序列,
它的存在包含有以下兩個目的:
- 為資料庫操作提供了一個從失敗中恢復到正常狀態的方法,同時提供了資料庫即使在例外狀態下仍能保持一致性的方法,
- 當多個應用程式在并發訪問資料庫時,可以在這些應用程式之間提供一個隔離方法,以防止彼此的操作互相干擾,
- 多表查詢、普通 SQL 和存盤程序的區別?
- 索引的底層、底層為什么要采用 B 樹或 B+ 樹?
- B 樹和 B+ 樹區別?
- 熟悉資料庫嗎:學生選課系統怎么建表,查詢一個老師教的所有學生的名字?
- 取一個年級中每個班級年齡最小的同學名字?
- where 和 having 的區別?
答案:
用的地方不一樣
where 可以用于 select、update、delete 和 insert into values(select * from table where ..)陳述句中, having 只能用于 select 陳述句中
執行的順序不一樣
where 的搜索條件是在執行陳述句進行分組之前應用
having 的搜索條件是在分組條件后執行的
即如果 where 和 having 一起用時,where 會先執行,having 后執行
子句有區別
where 子句中的條件運算式 having 都可以跟,而 having 子句中的有些運算式 where 不可以跟;having 子句可以用集合函式(sum、count、avg、max 和 min),而 where 子句不可以,
總結
1.WHERE 子句用來篩選 FROM 子句中指定的操作所產生的行,
2.GROUP BY 子句用來分組 WHERE 子句的輸出,
3.HAVING 子句用來從分組的結果中篩選行
- 內連接和外連接?
內連接 則是只有條件的交叉連接,根據某個條件篩選出符合條件的記錄,不符合
條件的記錄不會出現在結果集中,即內連接只連接匹配的行,
外連接 其結果集中不僅包含符合連接條件的行,而且還會包括左表、右表或兩個
表中的所有資料行,這三種情況依次稱之為左外連接,右外連接,和全外連接,
左外連接,也稱左連接,左表為主表,左表中的所有記錄都會出現在結果集中,
對于那些在右表中并沒有匹配的記錄,仍然要顯示,右邊對應的那些欄位值以
NULL 來填充,右外連接,也稱右連接,右表為主表,右表中的所有記錄都會出現
在結果集中,左連接和右連接可以互換,MySQL 目前還不支持全外連接,
- 資料庫欄位去重?
- SQL 陳述句 查詢每一門課程分數都大于 80 分的學生姓名?
SELECT 姓名 FROM Student GROUP BY 科目 Having MIN(成績)>=80
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299288.html
標籤:其他
上一篇:第五章 虛擬機位元組碼執行引擎
下一篇:文學常識
