放棄后端,沖測開去了!
大家好,我是小林。
最近有一些同學(xué)看到很多大廠都開了春招實(shí)習(xí),但是自己準(zhǔn)備的比較晚,比較著急,問我有什么快速突擊的辦法?
如果之前基礎(chǔ)薄弱的情況下,突擊 1-2 個(gè)月也比較難進(jìn)大廠的后端的,因?yàn)橛行┑讓又R原理,得花時(shí)間慢慢啃,不然一問三不知,就寄了。
不過可以另辟蹊徑,不卷后端,嘗試一下測試開發(fā)的崗位。
測開的面試相比后端簡單很多,而且投的人不算多,沒有后端卷,獲得面試機(jī)會(huì)的概率更高一些。
在互聯(lián)網(wǎng)大廠的校招中,測試開發(fā)的薪資實(shí)際上和后端開的是一樣的,比如普通檔的大廠 offer,都是 22k*16(年薪 35w+)。
測試開發(fā)崗會(huì)伴隨開發(fā)+測試類的工作,開發(fā)主要是開發(fā)一些測試工具來提高測試效率,也會(huì)和根據(jù)業(yè)務(wù)團(tuán)隊(duì)的需求開發(fā)一些工具。
測試開發(fā)的面試其實(shí)跟后端開發(fā)差不多,其實(shí)被問的問題不會(huì)太細(xì)節(jié)或者太底層,除此后端的內(nèi)容之外,還會(huì)考察一些測試相關(guān)的內(nèi)容。
比如,如何設(shè)計(jì)測試用例、黑盒測試和白盒測試有什么區(qū)別、手動(dòng)測試和自動(dòng)測試有什么區(qū)別、api 測試工具怎么用等等。
甚至也會(huì)問,為什么要選擇做測試開發(fā)等之類的問題, 同學(xué)們在投遞測開崗位的時(shí)候,最好提前準(zhǔn)備下測試相關(guān)的問題。
今天分享2位同學(xué)大廠測開的校招面試:快手和滴滴的測開面經(jīng)。
雖然也會(huì)有算法題,但是整體的八股和算法的難度確實(shí)會(huì)比后端減少了很多,是一個(gè)彎道超車進(jìn)大廠的機(jī)會(huì),給想準(zhǔn)備測開同學(xué)做一個(gè)參考。
快手測開實(shí)習(xí)
數(shù)據(jù)庫增刪改查指令說一下?
增加(Insert):用于向數(shù)據(jù)庫表中插入新的數(shù)據(jù)記錄。
- SQL語句示例:INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
刪除(Delete):用于從數(shù)據(jù)庫表中刪除符合指定條件的數(shù)據(jù)記錄。
- SQL語句示例:DELETE FROM table_name WHERE condition;
修改(Update):用于更新數(shù)據(jù)庫表中符合指定條件的數(shù)據(jù)記錄。
- SQL語句示例:UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
查詢(Select):用于從數(shù)據(jù)庫表中檢索數(shù)據(jù)記錄。
- SQL語句示例:SELECT column1, column2, ... FROM table_name WHERE condition;
mysql和redis的區(qū)別?
數(shù)據(jù)存儲方式:
- MySQL:數(shù)據(jù)以表格的形式以行和列的方式存儲在磁盤上,支持復(fù)雜的關(guān)系型數(shù)據(jù)模型。
- Redis:數(shù)據(jù)存儲在內(nèi)存中,因此具有更快的讀寫速度,但受到內(nèi)存容量的限制。
數(shù)據(jù)類型:
- MySQL:支持各種數(shù)據(jù)類型,包括整型、浮點(diǎn)型、字符型、日期型等。
- Redis:支持豐富的數(shù)據(jù)類型,如字符串、列表、集合、哈希表、有序集合等,適合用于緩存、消息隊(duì)列等場景。
持久化:
- MySQL:支持持久化存儲數(shù)據(jù),數(shù)據(jù)可以在磁盤上持久保存。
- Redis:可以選擇是否持久化數(shù)據(jù),支持RDB快照和AOF日志兩種持久化方式。
應(yīng)用場景:
- MySQL:適用于需要復(fù)雜查詢和事務(wù)支持的應(yīng)用,如企業(yè)級應(yīng)用、電子商務(wù)平臺等。
- Redis:適用于對速度要求較高、數(shù)據(jù)量較小、對數(shù)據(jù)結(jié)構(gòu)要求較高的場景,如緩存、計(jì)數(shù)器、實(shí)時(shí)排行榜等。
http和https的區(qū)別?
- HTTP 是超文本傳輸協(xié)議,信息是明文傳輸,存在安全風(fēng)險(xiǎn)的問題。HTTPS 則解決 HTTP 不安全的缺陷,在 TCP 和 HTTP 網(wǎng)絡(luò)層之間加入了 SSL/TLS 安全協(xié)議,使得報(bào)文能夠加密傳輸。
- HTTP 連接建立相對簡單, TCP 三次握手之后便可進(jìn)行 HTTP 的報(bào)文傳輸。而 HTTPS 在 TCP 三次握手之后,還需進(jìn)行 SSL/TLS 的握手過程,才可進(jìn)入加密報(bào)文傳輸。
- 兩者的默認(rèn)端口不一樣,HTTP 默認(rèn)端口號是 80,HTTPS 默認(rèn)端口號是 443。
- HTTPS 協(xié)議需要向 CA(證書權(quán)威機(jī)構(gòu))申請數(shù)字證書,來保證服務(wù)器的身份是可信的。
https的安全性體現(xiàn)在哪里?
- 數(shù)據(jù)加密:HTTPS使用SSL/TLS加密協(xié)議對數(shù)據(jù)進(jìn)行加密傳輸,防止數(shù)據(jù)在傳輸過程中被竊聽或篡改。
- 身份驗(yàn)證:HTTPS使用SSL證書對服務(wù)器進(jìn)行身份驗(yàn)證,確保通信雙方的身份,防止中間人攻擊。
- 數(shù)據(jù)完整性:HTTPS使用消息摘要算法(如SHA)來驗(yàn)證數(shù)據(jù)的完整性,確保數(shù)據(jù)在傳輸過程中沒有被篡改。
tcp的可靠性怎么保障的?
TCP協(xié)議主要通過以下幾點(diǎn)來保證傳輸可靠性:連接管理、序列號、確認(rèn)應(yīng)答、超時(shí)重傳、流量控制、擁塞控制。
- 連接管理:即三次握手和四次揮手。連接管理機(jī)制能夠建立起可靠的連接,這是保證傳輸可靠性的前提。
- 序列號:TCP將每個(gè)字節(jié)的數(shù)據(jù)都進(jìn)行了編號,這就是序列號。序列號的具體作用如下:能夠保證可靠性,既能防止數(shù)據(jù)丟失,又能避免數(shù)據(jù)重復(fù)。能夠保證有序性,按照序列號順序進(jìn)行數(shù)據(jù)包還原。能夠提高效率,基于序列號可實(shí)現(xiàn)多次發(fā)送,一次確認(rèn)。
- 確認(rèn)應(yīng)答:接收方接收數(shù)據(jù)之后,會(huì)回傳ACK報(bào)文,報(bào)文中帶有此次確認(rèn)的序列號,用于告知發(fā)送方此次接收數(shù)據(jù)的情況。在指定時(shí)間后,若發(fā)送端仍未收到確認(rèn)應(yīng)答,就會(huì)啟動(dòng)超時(shí)重傳。
- 超時(shí)重傳:超時(shí)重傳主要有兩種場景:數(shù)據(jù)包丟失:在指定時(shí)間后,若發(fā)送端仍未收到確認(rèn)應(yīng)答,就會(huì)啟動(dòng)超時(shí)重傳,向接收端重新發(fā)送數(shù)據(jù)包。確認(rèn)包丟失:當(dāng)接收端收到重復(fù)數(shù)據(jù)(通過序列號進(jìn)行識別)時(shí)將其丟棄,并重新回傳ACK報(bào)文。
- 流量控制:接收端處理數(shù)據(jù)的速度是有限的,如果發(fā)送方發(fā)送數(shù)據(jù)的速度過快,就會(huì)導(dǎo)致接收端的緩沖區(qū)溢出,進(jìn)而導(dǎo)致丟包。為了避免上述情況的發(fā)生,TCP支持根據(jù)接收端的處理能力,來決定發(fā)送端的發(fā)送速度。這就是流量控制。流量控制是通過在TCP報(bào)文段首部維護(hù)一個(gè)滑動(dòng)窗口來實(shí)現(xiàn)的。
- 擁塞控制:擁塞控制就是當(dāng)網(wǎng)絡(luò)擁堵嚴(yán)重時(shí),發(fā)送端減少數(shù)據(jù)發(fā)送。擁塞控制是通過發(fā)送端維護(hù)一個(gè)擁塞窗口來實(shí)現(xiàn)的。可以得出,發(fā)送端的發(fā)送速度,受限于滑動(dòng)窗口和擁塞窗口中的最小值。擁塞控制方法分為:慢開始,擁塞避免、快重傳和快恢復(fù)。
linux指令簡單說幾個(gè)
- ls:列出目錄內(nèi)容。
- grep:在文件中搜索指定模式。
- chmod:修改文件權(quán)限。
- top:顯示系統(tǒng)當(dāng)前資源占用情況。
- ps:顯示當(dāng)前進(jìn)程信息。
- netstate:查看進(jìn)程端口號
數(shù)組和鏈表的區(qū)別?
- 訪問效率:數(shù)組可以通過索引直接訪問任何位置的元素,訪問效率高,時(shí)間復(fù)雜度為O(1),而鏈表需要從頭節(jié)點(diǎn)開始遍歷到目標(biāo)位置,訪問效率較低,時(shí)間復(fù)雜度為O(n)。
- 插入和刪除操作效率:數(shù)組插入和刪除操作可能需要移動(dòng)其他元素,時(shí)間復(fù)雜度為O(n),而鏈表只需要修改指針指向,時(shí)間復(fù)雜度為O(1)。
- 緩存命中率:由于數(shù)組元素在內(nèi)存中連續(xù)存儲,可以提高CPU緩存的命中率,而鏈表節(jié)點(diǎn)不連續(xù)存儲,可能導(dǎo)致CPU緩存的命中率較低,頻繁的緩存失效會(huì)影響性能。
- 應(yīng)用場景:數(shù)組適合靜態(tài)大小、頻繁訪問元素的場景,而鏈表適合動(dòng)態(tài)大小、頻繁插入、刪除操作的場景
設(shè)計(jì)測試用例:朋友圈點(diǎn)贊功能
測試用例1 - 點(diǎn)贊功能正常使用:
- 步驟:用戶進(jìn)入朋友圈頁面,找到一條動(dòng)態(tài),點(diǎn)擊點(diǎn)贊按鈕。
- 預(yù)期結(jié)果:點(diǎn)贊按鈕狀態(tài)變?yōu)橐腰c(diǎn)贊,點(diǎn)贊數(shù)加一,用戶信息顯示在點(diǎn)贊列表中。
測試用例2 - 取消點(diǎn)贊功能:
- 步驟:用戶進(jìn)入朋友圈頁面,找到已點(diǎn)贊的動(dòng)態(tài),再次點(diǎn)擊點(diǎn)贊按鈕。
- 預(yù)期結(jié)果:點(diǎn)贊按鈕狀態(tài)變?yōu)槲袋c(diǎn)贊,點(diǎn)贊數(shù)減一,用戶信息從點(diǎn)贊列表中移除。
測試用例3 - 多用戶同時(shí)點(diǎn)贊:
- 步驟:多個(gè)用戶同時(shí)對同一條動(dòng)態(tài)進(jìn)行點(diǎn)贊操作。
- 預(yù)期結(jié)果:點(diǎn)贊數(shù)正確累加,點(diǎn)贊列表顯示所有點(diǎn)贊用戶信息。
測試用例4 - 點(diǎn)贊數(shù)上限限制:
- 步驟:連續(xù)多次點(diǎn)贊同一條動(dòng)態(tài)。
- 預(yù)期結(jié)果:點(diǎn)贊數(shù)達(dá)到上限時(shí),無法再進(jìn)行點(diǎn)贊操作,系統(tǒng)給出相應(yīng)提示。
測試用例5 - 點(diǎn)贊數(shù)據(jù)同步:
- 步驟:用戶在多端(如手機(jī)、電腦)對同一條動(dòng)態(tài)進(jìn)行點(diǎn)贊操作。
- 預(yù)期結(jié)果:點(diǎn)贊操作在所有設(shè)備上同步更新,保持一致性。
測試用例6 - 點(diǎn)贊功能異常處理:
- 步驟:模擬網(wǎng)絡(luò)異常或服務(wù)器故障時(shí)進(jìn)行點(diǎn)贊操作。
- 預(yù)期結(jié)果:系統(tǒng)能夠正確處理異常情況,保證數(shù)據(jù)的一致性和完整性。
手撕:鏈表刪除
class ListNode {
int val;
ListNode next;
ListNode(int x) {
val = x;
}
}
public class LinkedListDeletion {
public ListNode deleteNode(ListNode head, int val) {
if (head == null) {
return null;
}
if (head.val == val) {
return head.next;
}
ListNode prev = head;
ListNode curr = head.next;
while (curr != null) {
if (curr.val == val) {
prev.next = curr.next;
break;
}
prev = curr;
curr = curr.next;
}
return head;
}
}
其他
- 為什么選擇測試開發(fā)崗位?
滴滴測開面經(jīng)
介紹TCP和UDP,有什么應(yīng)用?
- TCP:TCP是面向連接的、可靠的、基于字節(jié)流的傳輸協(xié)議,適用于需要可靠傳輸、順序傳輸、流量控制和擁塞控制的應(yīng)用。
- UDP:UDP是無連接的、不可靠的、基于數(shù)據(jù)包的傳輸協(xié)議。適用于實(shí)時(shí)性要求高、能容忍一定數(shù)據(jù)丟失的應(yīng)用,以及需要減少通信開銷的應(yīng)用。
你了解redis嗎?
了解,redis屬于NoSQL數(shù)據(jù)庫的一種,它主要用來作為緩存、分布式鎖、消息中間件等多種用途。
數(shù)據(jù)存儲在內(nèi)存中,讀寫速度非常快,支持多種數(shù)據(jù)結(jié)構(gòu),如字符串、哈希、列表、集合、有序集合等。
關(guān)系型數(shù)據(jù)庫的特點(diǎn)是什么?
SQL數(shù)據(jù)庫,指關(guān)系型數(shù)據(jù)庫 - 主要代表:SQL Server,Oracle,MySQL(開源),PostgreSQL(開源)。
關(guān)系型數(shù)據(jù)庫存儲結(jié)構(gòu)化數(shù)據(jù)。這些數(shù)據(jù)邏輯上以行列二維表的形式存在,每一列代表數(shù)據(jù)的一種屬性,每一行代表一個(gè)數(shù)據(jù)實(shí)體。
圖片
NoSQL指非關(guān)系型數(shù)據(jù)庫 ,主要代表:MongoDB,Redis。NoSQL 數(shù)據(jù)庫邏輯上提供了不同于二維表的存儲方式,存儲方式可以是JSON文檔、哈希表或者其他方式。
圖片
選擇 SQL vs NoSQL,考慮以下因素。
ACID vs BASE
關(guān)系型數(shù)據(jù)庫支持 ACID 即原子性,一致性,隔離性和持續(xù)性。相對而言,NoSQL 采用更寬松的模型 BASE , 即基本可用,軟狀態(tài)和最終一致性。
從實(shí)用的角度出發(fā),我們需要考慮對于面對的應(yīng)用場景,ACID 是否是必須的。比如銀行應(yīng)用就必須保證 ACID,否則一筆錢可能被使用兩次;又比如社交軟件不必保證 ACID,因?yàn)橐粭l狀態(tài)的更新對于所有用戶讀取先后時(shí)間有數(shù)秒不同并不影響使用。
對于需要保證 ACID 的應(yīng)用,我們可以優(yōu)先考慮 SQL。反之則可以優(yōu)先考慮 NoSQL。
擴(kuò)展性對比
NoSQL數(shù)據(jù)之間無關(guān)系,這樣就非常容易擴(kuò)展,也無形之間,在架構(gòu)的層面上帶來了可擴(kuò)展的能力。比如 redis 自帶主從復(fù)制模式、哨兵模式、切片集群模式。
相反關(guān)系型數(shù)據(jù)庫的數(shù)據(jù)之間存在關(guān)聯(lián)性,水平擴(kuò)展較難 ,需要解決跨服務(wù)器 JOIN,分布式事務(wù)等問題。
你的登錄接口設(shè)計(jì)的哪些測試用例?
- 邊界值測試:測試輸入的邊界情況,例如最小長度的用戶名和密碼、最大長度的用戶名和密碼等。
- 狀態(tài)轉(zhuǎn)換測試:測試在不同狀態(tài)下進(jìn)行登錄操作的情況,如已登錄狀態(tài)下再次登錄應(yīng)有何反應(yīng)。
- 權(quán)限測試:測試不同用戶角色的登錄情況,如管理員、普通用戶等。
- 并發(fā)測試:模擬多個(gè)用戶同時(shí)嘗試登錄系統(tǒng),驗(yàn)證系統(tǒng)的并發(fā)處理能力。
- 跨平臺測試:測試不同平臺(如PC、移動(dòng)端)上的登錄功能。
- 性能測試:驗(yàn)證系統(tǒng)在不同負(fù)載下的登錄性能,如高并發(fā)情況下的登錄響應(yīng)時(shí)間。
- 安全性測試:測試系統(tǒng)對于安全漏洞(如密碼泄露、會(huì)話劫持)的防范能力。
手撕:sql語句:有一張成績表,查詢最高成績
SELECT MAX(score) FROM grades;
手撕:二分查找
public int binarySearch(int[] arr, int target) {
int low = 0;
int high = arr.length - 1;
while (low <= high) {
int mid = low + (high - low) / 2;
if (arr[mid] == target) {
return mid;
} else if (arr[mid] < target) {
low = mid + 1;
} else {
high = mid - 1;
}
}
return -1; // target not found
}
其他
- 介紹研究研究方向
- 為什么想做測試?