最新真實軟體測試面試題分享

測試架構師百里 發佈 2022-07-19T12:21:33.561377+00:00

筆者很久沒有給大家聊面試題目,今天呢筆者就來和大家聊聊面試題,希望可以幫助到大家,廢話不多說了咱們直接進入主題喲。

前言

筆者很久沒有給大家聊面試題目,今天呢筆者就來和大家聊聊面試題,希望可以幫助到大家,廢話不多說了咱們直接進入主題喲。

一、計算機基礎

1、tcp/IP五層模型(從下往上):

物理層:保證原始數據可在各種物理媒體上傳輸,主要應用:集線器

數據鏈路層:傳輸單位為幀,主要應用:交換機

網絡層:傳輸單位為數據報,主要應用:路由器,保證端到端系統之間通信正常,路徑選擇、路由及邏輯尋址。主要協議:IP協議、ICMP協議(ping命令即為該協議)、ARP協議(IP位址轉為MAC地址)、RARP協議(MAC地址轉為IP位址)

傳輸層:主要應用:網關,保證埠到埠之間的可靠/不可靠的傳輸,主要協議:TCP\UDP

應用層:傳輸單位為報文,主要協議:HTTP\FTP等

2、IP位址:

A類地址:第一個字節為網絡號,地址範圍為0-127

B類地址:前兩個字節為網絡號,地址範圍為128-191

C類地址:前三個字節為網絡號,地址範圍為192-223

3、子網掩碼:1表示網絡位,0表示主機位

4、http和https的區別

  1. http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的SSL加密傳輸協議。
  2. http是80,https是443,http連接是無狀態連接(每次連接只處理一個請求。伺服器處理完客戶的請求,並收到客戶的應答後,即斷開連接。採用這種方式可以節省傳輸時間。而cookie和session可以保持http連接狀態),HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全

5、cookie和session的區別:

  1. cookie存儲在瀏覽器上,session存儲在伺服器上,更安全
  2. cookie可在瀏覽器明文查看,session通過伺服器加密是一串無序字符串

cookie有兩種:

一種存在於瀏覽器的進程中,一種存在於硬碟上。每個session有一個唯一的sessionid,這個id存放在瀏覽器進程中的cookie中。當關閉瀏覽器後cookie消失了,sessionid也消失了,那伺服器端的session也消失了。但實際伺服器不知道瀏覽器是否關閉,因此伺服器會設置一個session失效時間,到時間後將對應的session刪除。

每次瀏覽器被關閉後再次打開訪問同一個請求,都是不同的session。

當勾選自動登錄,其實是將sessionid存放在了硬碟cookie中,這樣下次可以免登錄

6、tcp和udp區別

  1. udp是不可靠、無連接,tcp是可靠,有連接,三次握手,四次揮手。udp比tcp傳播速度更快
  2. udp可以一對多或者多對多連接,tcp是一對一連接
  3. TCP保證數據正確性,UDP可能丟包,TCP保證數據順序,UDP不保證(tcp支持重傳,而且也有序列號保證數據順序)

7、進程與線程區別:

  1. 進程是資源分配的最小單位,計算機把資源分配給進程,同個進程下的線程間共享資源
  2. 一個進程可以包含多個線程,一個線程只能在一個進程中
  3. 一個進程內即使有很多線程,也只運行在一個cpu內,多核cpu上可以運行多個進程,提高速度
  4. 進程的切換開銷比線程的大很多,因為每個進程有自己的虛擬地址空間,同個進程下的線程則是共享該進程的虛擬地址空間。進程切換需要切換虛擬地址,虛擬地址映射為物理地址通過頁表實現,進程切換頁表也切換,導致緩存失效,映射物理地址速率就變慢,而線程不需要切換地址空間
  5. 線程間的通信方式有4種:wait/notify(等待喚醒)、volatile、CountDownLatch、CyclicBarrier

8、tcp怎麼保證可靠性傳輸:

  1. 校驗和:保持首部和數據的校驗和
  2. 序列號:使用序列號保證數據傳輸的順序性
  3. 支持重傳
  4. 停止等待協議:每發完一個分組就停止等待對端確認

9、ping命令不通的原因:

  1. 本機或目的機子未聯網,報time_out超時
  2. 網絡很差超時
  3. 對端有防火牆阻止Ping

11、get和post區別:

  1. get一般用於從伺服器獲取數據,post用於向伺服器提交數據
  2. get表單提交參數直接明文顯示在url中,post提交的數據在body中,因此post比get更安全

12、http狀態碼:

  • 1xx:信息性狀態碼
  • 2xx:成功狀態碼
  • 3xx:重定向
  • 4xx:客戶端錯誤狀態碼
  • 5xx:伺服器錯誤狀態碼

13、重定向:

在 HTTP 協議中,重定向操作由伺服器通過發送特殊的響應(即 redirects)而觸發。HTTP 協議的重定向響應的狀態碼為 3xx 。瀏覽器在接收到重定向響應的時候,會採用該響應提供的新的 URL ,並立即進行加載,大多數情況下,除了會有一小部分性能損失之外,重定向操作對於用戶來說是不可見的。

14、TCP的重傳機制:

  1. 超時重傳:TCP協議要求在發送端每發送一個報文段,就啟動一個定時器並等待確認信息;接收端成功接收新數據後返回確認信息。若在定時器超時前數據未能被確認,TCP就認為報文段中的數據已丟失或損壞,需要對報文段中的數據重新組織和重傳。這種方式會增加端到端的時延
  2. 快速重傳:報文段1成功接收並被確認ACK 2,接收端的期待序號為2,當報文段2丟失,報文段3失序到來,與接收端的期望不匹配,接收端重複發送冗餘ACK 2。這樣,如果在超時重傳定時器溢出之前,接收到連續的三個重複冗餘ACK(其實是收到4個同樣的ACK,第一個是正常的,後三個才是冗餘的),發送端便知曉哪個報文段在傳輸過程中丟失了,於是重發該報文段,不需要等待超時重傳定時器溢出,大大提高了效率。這便是快速重傳機制。

二、Python

1、python疊代器和生成器區別:

1.疊代器是一種訪問集合元素的方式,只能往前訪問不能後退,疊代器可以記住遍歷的位置

使用iter(obj)可生成一個疊代器對象,使用next(疊代器對象)可遍歷疊代器中的元素,也可以for語句遍歷。字符串,列表或元組對象都可用於創建疊代器。註:每次調用next()方法只會輸出一個值

2.使用了yield關鍵字的函數為生成器函數,調用生成器函數返回的是疊代器對象

2、python是動態語言,動態語言和靜態語言區別:

  1. 動態語言無需申明變量類型,運行時才確定數據類型的語言,如python,js等
  2. 靜態語言需要先申明變量類型,如java\c\c++

3、python裝飾器:

當一個方法有裝飾器修飾時,首先會將該方法當作參數傳入裝飾器函數中執行,再執行該方法。

4、python2和python3的區別:

  1. python2的字符串編碼有兩類(unicode【字符串】和str【字節】),unicode在python3中改為str,python2的str在python3中改為byte
  2. python2可以使用print 『hi』列印,python3必須使用小括號包含:print('hi')
  3. Python2中使用ascii編碼,Python3中使用uft-8編碼
  4. python3新增了set集合

5、 python可變與不可變類型區別:

可變表示值變,但是指向的內存地址不變;不可變表示值變,指向的內存地址也變

tuple 整型 字符串都為不可變類型

list dict set都為可變類型

tuple中嵌套list或者dict,dict和list的值都可變,但是tuple的值不可變。

6、淺拷貝與深拷貝與賦值:

賦值表示指向同一個地址,任何一個變都會變。

淺拷貝:嵌套內的原值改變,新值也變。原值改變,新值不變

深拷貝:嵌套內的原值改變,新值不變。原值改變,新值不變

7、python垃圾回收機制,python進程與線程

8、python的列表和元組的區別以及其他Python基礎

三、資料庫

1、嵌套查詢需關注:

  1. 最外層的為最終的結果,再根據條件一層一層嵌套
  2. 嵌套查詢每次只查找一個表

2、內連接、左外連接、右外連接:

  1. 寫法:from table_a inner/left/right join table_b on 關聯兩個表的條件。
  2. 三個連接區別:內連接只顯示兩表中有關聯(符合條件)的數據;左連接顯示左表所有數據,右表沒有對應的數據用NULL補齊,右表多餘的數據刪除;右連接顯示右表所有數據,左表沒有對應的數據用NULL補齊,左表多餘的數據刪除

3、group by的分組欄位要與select的欄位一致,除去使用聚合函數的欄位

  • group by後可以跟having對分組後的數據再進行篩查
  • delete table where xxx,update table set xxx
  • 模糊查詢用like,不匹配用is not
  • sum和count區別:sum用於統計值的總和,count用於統計行數即記錄數

4、索引(用戶不可見,主鍵默認為索引):

  1. 創建索引:create index 索引名稱 on table_name(column_name)
  2. 根據索引查詢:select * from tabel_name where column_name='xxx'

為某一列創建索引,搜索該列的值的時候可以提高查詢速度,但是索引太多將會影響更新和插入的速度,因為它同樣需要更新每個索引文件。

5、主鍵,外鍵和索引

主鍵的值唯一,不能為空,一個表只能有一個主鍵。

外鍵的值可以不唯一,可以為空,一個表可以有多個外鍵,一個表的外鍵通常是另一隔壁表的主鍵。

索引的值不能唯一,可以為空,一個表可以有多個索引

6、TOP 子句用於規定要返回的記錄的數目,需要現場寫sql語句,多為連表查詢

四、Linux

1、vim下的指令參數:

  • nx:連續向後刪除n個字符
  • dd:刪除游標所在的那一行
  • ndd:刪除光標所在的向下n行
  • yy:複製光標所在的那一行
  • nyy:複製光標所在的向下n行

2、python反轉字符串

  1. 切片: str【: : -1】
  2. list=list(str) list. reverse() ' '. join(list)

3、linux查看進程命令:

ps -ef | grep 查找需要的進程

top 列出各個進程的資源占用情況

Linux找到被占用的埠號進程並結束:

netstat -tunl|grep 埠號 找到進程號後kill -9 進程號(-9強制刪除)

五、Selenium

定位元素方法有id,name,class_name,tag_name,linktext,xpath,css

1、driver.quit()關閉瀏覽器,driver.close()僅關閉當前頁面

2、等待分為強制等待(必須等待多久),顯示等待(直到某個元素出現才操作,除非超時)和隱式等待(為瀏覽器對象創建一個等待時間,得不到某個元素就等待,直至拿到)

3、isDisplayed()方法可以判斷某個元素是否顯示

4、driver.switchTo().alert()切換到web彈窗

5、driver.window_handles()可查看當前所有句柄,driver.switch_to.window(index)切換句柄

總結

由於篇幅有限,沒辦法將完整的放上來,有需要的小夥伴可以私信我關鍵字「資料」免費獲取喲。

今天的文章就分享到這裡了喲,喜歡的小夥伴請點讚收藏評論加關注喲。

關鍵字: