軟體測試工程師面試題系列篇 | 目錄
- 測試常見問題與流程篇
- 測試工具篇
- 計算機網絡知識與資料庫篇
- Linux 篇
- Python 程式設計篇
- 自動化測試篇:包含 Selenium、Appium 和接口測試
- 性能測試篇
- 軟素質篇:10 大靈魂拷問
- 反問面試官篇
- 計算機網絡篇(基礎知識)
1.擅長哪些開發語言?
- 學習過 Java,C 等
- 半精通 Python
2.輸入 URL 到網頁顯示出來的全過程
- 輸入網址
- DNS解析
- 建立tcp連接配接
- 用戶端發送HTTP請求
- 伺服器處理請求
- 伺服器響應請求
- 浏覽器展示HTML
- 浏覽器發送請求擷取其他在HTML中的資源。
3.HTTP 和 HTTPS 的差別
- HTTPS 裡面是要有證書的,HTTP 并沒有證書。證書的作用是證明你是這個網站的擁有者。誰去證明?最頂級的 CA 去幫你證明,這些頂級的 CA 都是浏覽器、作業系統本身就自動幫你內建,而且自動添加到設定信任裡面去;
- HTTPS 要兼顧安全+性能的方面,由于對稱式加密雖然速度很快,但是安全性特别的低,因為雙方要規定對稱式加密的秘鑰,别人都無法知道,但你怎麼能確定别人不知道你的秘鑰呢,是以需要有非對稱式加密去保證安全,但非對稱式加密速度又很慢,如果用戶端和伺服器端都用非對稱式加密,網絡得卡死了。是以當雙方建立好了非對稱加密後,再約定一個随機數,等大家都非對稱解密了之後呢,就拿到隻有對方知道的唯一随機數(秘鑰),就可以用秘鑰來進行對稱式加密和解密了;
4.HTTP 的封包結構
- HTTP請求封包:一個HTTP請求封包由請求行、請求頭部、空行和請求資料4個部分組成
- HTTP響應封包:HTTP響應也由三個部分組成,分别是:狀态行、消息報頭、響應正文
5.HTTP 常見的響應狀态碼
- 200 請求已成功,請求所希望的響應頭或資料體将随此響應傳回。
- 201 請求已經被實作,而且有一個新的資源已經依據請求的需要而建立,且其 - - URI 已經随 Location 頭資訊傳回
- 202 伺服器已接受請求,但尚未處理
- 301 (永久移動) 請求的網頁已永久移動到新位置。伺服器傳回此響應(對 GET 或 HEAD 請求的響應)時,會自動将請求者轉到新位置。
- 302 (臨時移動) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
- 303 (檢視其他位置) 請求者應當對不同的位置使用單獨的 GET 請求來檢索響應時,伺服器傳回此代碼。
- 304 (未修改) 自從上次請求後,請求的網頁未修改過。伺服器傳回此響應時,不會傳回網頁内容。
- 305 (使用代理) 請求者隻能使用代理通路請求的網頁。如果伺服器傳回此響應,還表示請求者應使用代理。
- 307 (臨時重定向) 伺服器目前從不同位置的網頁響應請求,但請求者應繼續使用原有位置來進行以後的請求。
- 401 目前請求需要使用者驗證。如果目前請求已經包含了 Authorization 證書,那麼
- 401 響應代表着伺服器驗證已經拒絕了那些證書
- 403 伺服器已經了解請求,但是拒絕執行它。與 401 響應不同的是,身份驗證并不能提供任何幫助,而且這個請求也不應該被重複送出
- 404 請求失敗,請求所希望得到的資源未被在伺服器上發現
- 500 伺服器遇到了一個未曾預料的狀況,導緻了它無法完成對請求的處理。一般來說,這個問題都會在伺服器的程式碼出錯時出現。
- 501 伺服器不支援目前請求所需要的某個功能。當伺服器無法識别請求的方法,并且無法支援其對任何資源的請求。
- 502 作為網關或者代理工作的伺服器嘗試執行請求時,從上遊伺服器接收到無效的響應。
- 503 由于臨時的伺服器維護或者過載,伺服器目前無法處理請求。這個狀況是臨時的,并且将在一段時間以後恢複。
6.cookie 和 session 機制的差別
- cookies 資料儲存在用戶端,session 資料儲存在伺服器端;
- cookies 可以減輕伺服器壓力,但是不安全,容易進行 cookies 欺騙;
- session 較安全,但占用伺服器資源
7.TCP 和 UDP 的差別
- TCP:面向連接配接,可靠的,速度慢,效率低
- UDP:無連接配接、不可靠、速度快、效率高
8.TCP 為什麼是三次握手和四次揮手
- 三次握手能保證資料可靠傳輸又能提高傳輸效率。若握手是兩次:如果隻是兩次握手, 至多隻有連接配接發起方的起始序列号能被确認,另一方選擇的序列号則得不到确認;
- 要保證雙方都關閉了連接配接。因為 TCP 是全雙工的,就是要等到兩邊都發送 fin 包确認雙方都沒有資料傳輸後才關閉;
9.TCP為什麼最後揮手後會有time_wait
- 為了保證可靠的斷開TCP的雙向連接配接,確定足夠的時間讓對方收到 ACK 包。若用戶端回複的 ACK 丢失,server 會在逾時時間到來時,重傳最後一個 fin 包,處于 TIME_WAIT 狀态的 client 可以繼續回複 Fin 包,發送 ACK。
- 保證讓遲來的 TCP 封包段有足夠的時間被識别和丢棄,避免新舊連接配接混淆。有些路由器會緩存沒有收到的資料包,如果新的連接配接開啟,這些資料包可能就會和新的連接配接中的資料包混在一起。連接配接結束了,網絡中的延遲封包也應該被丢棄掉,以免影響立刻建立的新連接配接。
10.簡要說明 HTTP 請求中的 Post 和 Get 有哪些差別的地方
- 請求頭多了 content-length 和 content-type 字段
- Post 可以附加 body,可以支援 form、json、xml、binary 等各種資料格式
- 行業通用規範
- 無狀态變化的建議使用 Get
- 資料的寫入與狀态的修改建議使用 Post
- 基于 HTTP 協定:都是請求傳回資料,Get 将請求體放在頭上,隻發一次請求,Post 将請求體放在内部,需要發送兩次請求
- GET 在浏覽器回退時是無害的,而 POST 會再次送出請求。
- GET 請求會被浏覽器主動 cache,而 POST 不會,除非手動設定。
- GET 請求隻能進行 URL 編碼,而 POST 支援多種編碼方式。
- GET 請求在 URL 中傳送的參數是有長度限制的,而 POST 麼有。
- 對參數的資料類型,GET 隻接受 ASCII 字元,而 POST 沒有限制。
- GET 比 POST 更不安全,因為參數直接暴露在 URL 上,是以不能用來傳遞敏感資訊。
11.如果一個請求,傳回的狀态碼是 200,但是沒有内容,可能發生了什麼?
- 請求頭缺失或錯誤
- 參數 length 不符
- 以上為個人了解,有誤請指正。
資料庫篇
1. 工作中常使用的 SQL 文法有哪些?
- create table、create view、 select from where、insert into、update set values、delete、alter、order by、having
2.資料庫存儲過程
- 一組資料庫操作指令,當作是自己寫的一個方法,一系列步驟自己去封裝(個人了解)
3.SQL 常見查詢語句編寫(此處僅舉例常見的查詢語句,如有更多坑,希望補充)
a.查詢所有學生的數學成績,顯示學生姓名 name, 分數, 由高到低。
SELECT a.name, b.score FROM student a, grade b WHERE a.id = b.id AND kemu = '數學' ORDER BY score DESC;
b.統計每個學生的總成績(由于學生可能有重複名字),顯示字段:學生 id,姓名,總成績。
SELECT a.id, a.name, c.sum_score from student a, (SELECT b.id, sum(b.score) as sum_score FROM grade b GROUP BY id) c WHERE a.id = c.id ORDER BY sum_score DESC;
c.列出各門課程成績最好的學生, 要求顯示字段: 學号,姓名,科目,成績
SELECT c.id , a.name, c.kemu, c.score FROM grade c, student a,(SELECT b.kemu, MAX(b.score) as max_score FROM grade b GROUP BY kemu) t WHERE c.kemu = t.kemu AND c.score = t.max_score AND a.id = c.id
4.慢查詢是什麼意思?
- 開啟慢查詢日志,可以讓 MySQL 記錄下查詢超過指定時間的語句,通過定位分析性能的瓶頸,才能更好的優化資料庫系統的性能。
5.導緻資料庫性能差的可能原因有哪些?
- 硬體環境問題,如磁盤IO
- 查詢語句問題,如join、子查詢、沒建索引
- 索引失效,建了索引,查詢的時候沒用上
- 查詢關聯了太多的join
- 伺服器關聯緩存,線程數等
- 表中存在備援字段,在生成笛卡爾積時耗費多餘的時間
6.Redis 緩存應用場景
- 需要将資料緩存在記憶體中,提升查詢效率
- 這裡希望大家補充
7.怎麼定位 Redis 緩存失效問題(緩存壞了)
- Redis 的知識,了解的不是很多
- 抛磚引玉,請大家指正和補充。