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