测试开发工程师面经
一面(30min-1h)
主要考察對測試的理解以及計算機基礎(chǔ)、算法與邏輯思維。
- 平常看過那些技術(shù)性網(wǎng)站,在github看過什么項目,有沒有自己實現(xiàn)過
二面/三面(不一定有)(30min-1h)
主要考察項目相關(guān)以及編程能力。相關(guān)知識能說多少說多少,面試官不會打斷你,主要看技術(shù)深度?。
編程題手寫有困難的情況下,必須介紹分析思路、準備用什么方法
HR面(30-45min)
一般不會掛人。
- 對公司的技術(shù)氛圍和工作氛圍有沒有什么要求
- 有沒有遇到什么特別有壓力/挑戰(zhàn)的事情
- 過去幾年最有成就感的事情
- 你比別人的優(yōu)勢在哪里
- 實習的經(jīng)歷,遇到的困難和挑戰(zhàn)
- 當學(xué)習一個新技術(shù)得時候你會怎么做
- 拿到一個項目得一個大體需求 你會怎么擴展
- 做項目時會有總結(jié)嗎
- 做項目時有什么難點,有的話怎么解決
測試崗/測試開發(fā)崗面試真題
來源與網(wǎng)易、網(wǎng)易互娛、360、頭條、商湯等公司面試真題,整理自牛客網(wǎng)link。
自我介紹
項目/實習介紹
計算機網(wǎng)絡(luò)
1.tcp、udp屬于哪層,區(qū)別,應(yīng)用
屬于傳輸層
TCP與UDP基本區(qū)別
應(yīng)用:
TCP 每個數(shù)據(jù)封包都需要確認,因此天然不適應(yīng)高速數(shù)據(jù)傳輸場景,比如觀看視頻(流媒體應(yīng)用)、網(wǎng)絡(luò)游戲(TCP 有延遲)等。具體來說,如果網(wǎng)絡(luò)游戲用 TCP,每個封包都需要確認,可能會造成一定的延遲;再比如音、視頻傳輸天生就允許一定的丟包率;
Ping 和 DNS Lookup,這類型的操作只需要一次簡單的請求/返回,不需要建立連接,用 UDP 就足夠了。如果考慮希望傳輸足夠塊,就可能會用 UDP。
再比如 HTTP 協(xié)議,如果考慮請求/返回的可靠性,用 TCP 比較合適。
第一類:TCP 場景
遠程控制(SSH)
TELNET
File Transfer Protocol(FTP)
郵件(SMTP、IMAP)等
點對點文件傳出(微信等)
HTTP
第二類:UDP 場景
網(wǎng)絡(luò)游戲
音視頻傳輸
DNS
Ping
直播
TFTP
SNMP
第三類:模糊地帶(TCP、UDP 都可以考慮)
HTTP(目前以 TCP 為主)
文件傳輸
2.你知道的什么軟件是用tcp協(xié)議什么軟件是用UDP協(xié)議
3.TCP三次握手四次揮手的過程及狀態(tài), 三次握手?兩次會怎樣?四次揮手?3次會怎樣?TIME_WAIT出現(xiàn)在哪 為什么要有TIME_WAIT
三次握手:
默認情況下客戶端client和服務(wù)端sever的TCP進程都處于CLOSED(關(guān)閉)狀態(tài)。
服務(wù)端TCP服務(wù)進程先建立傳輸控制塊TCB,然后服務(wù)端進入LISTEN狀態(tài),等待客戶端連接請求。
- 第一次握手:客戶端TCP進程也先建立傳輸控制塊TCB,然后向服務(wù)端發(fā)送連接請求報文段,此時SYN=1,隨機選定一個初始序號seq=x,,此報文不能攜帶數(shù)據(jù),但是要消耗掉一個序號,發(fā)送完畢后,客戶端進入SYN-SENT(同步已發(fā)送)狀態(tài)
- 第二次握手:服務(wù)端收到客戶端請求連接報文段后,若同意建立連接,則發(fā)送確認報文,確認報文中SYN=1、ACK=1,確認號ack=x+1,同時隨機選定一個自己序號seq=y,確認報文段同樣不能攜帶數(shù)據(jù),但是也要消耗掉一個序號,發(fā)送完畢后服務(wù)端進入SYN-RCVD(同步收到)狀態(tài)
- 第三次握手:客戶端收到確認報文后,檢查ACK=1,ack=x+1是否正確,若正確,則向服務(wù)端發(fā)送確認報文,確認報文中ACK=1,ack=y+1,seq=x+1,發(fā)送后進入ESTAB-LISHED狀態(tài),服務(wù)端收到確認報文后,也進入ESTAB-LISHED狀態(tài),此時雙方TCP連接正式建立。
上面的連接建立過程就是TCP三次握手。
為什么是三次握手?
為什么client收到確認報文后,還要再發(fā)送一次確認報文給server呢?這主要是為了防止已失效的連接請求報文段突然又送到了Server端。
假設(shè)現(xiàn)在TCP連接是兩次握手機制,如下圖server在收到client的連接請求,確認后就進入ESTAB-LISHED狀態(tài),會存在這樣一種問題:
client發(fā)送連接請求報文,由于網(wǎng)絡(luò)原因,長時間阻塞在某個網(wǎng)絡(luò)節(jié)點上了,于是client重傳了一次請求連接報文,第二次請求報文正常達到server,連接正常建立,數(shù)據(jù)傳輸完畢后,釋放連接。但是假設(shè)此時第一次發(fā)送的請求報文并沒有丟失,而是延誤一段時間才到達server,這本是已失效的連接請求報文段,但是server收到后,會以為是client重新發(fā)送的連接請求,于是向client發(fā)送確認報文后,進入ESTAB-LISHED狀態(tài),但是client并沒有發(fā)出新建連接的請求,就會忽略server的確認報文,server卻在一直等待client發(fā)送數(shù)據(jù),導(dǎo)致server資源浪費嚴重。
四次揮手:
第一次揮手
TCP 發(fā)送一個 FIN(結(jié)束),用來關(guān)閉客戶到服務(wù)端的連接。
客戶端進程發(fā)出連接釋放報文,并且停止發(fā)送數(shù)據(jù)。釋放數(shù)據(jù)報文首部,FIN=1,其序列號為 seq=u(等于前面已經(jīng)傳送過來的數(shù)據(jù)的最后一個字節(jié)的序號加 1),此時,客戶端進入 FIN-WAIT-1(終止等待 1)狀態(tài)。TCP 規(guī)定,FIN 報文段即使不攜帶數(shù)據(jù),也要消耗一個序號。
第二次揮手
服務(wù)端收到這個 FIN,他發(fā)回一個 ACK(確認),確認收到序號為收到序號+1,和 SYN 一樣,一個 FIN 將占用一個序號。
服務(wù)器收到連接釋放報文,發(fā)出確認報文,ACK=1,ack=u+1,并且?guī)献约旱男蛄刑?seq=v,此時,服務(wù)端就進入了 CLOSE-WAIT(關(guān)閉等待)狀態(tài)。TCP 服務(wù)器通知高層的應(yīng)用進程,客戶端向服務(wù)器的方向就釋放了,這時候處于半關(guān)閉狀態(tài),即客戶端已經(jīng)沒有數(shù)據(jù)要發(fā)送了,但是服務(wù)器若發(fā)送數(shù)據(jù),客戶端依然要接受。這個狀態(tài)還要持續(xù)一段時間,也就是整個 CLOSE-WAIT 狀態(tài)持續(xù)的時間。
客戶端收到服務(wù)器的確認請求后,此時,客戶端就進入 FIN-WAIT-2(終止等待 2)狀態(tài),等待服務(wù)器發(fā)送連接釋放報文(在這之前還需要接受服務(wù)器發(fā)送的最后的數(shù)據(jù))。
第三次揮手
服務(wù)端發(fā)送一個 FIN(結(jié)束)到客戶端,服務(wù)端關(guān)閉客戶端的連接。
服務(wù)器將最后的數(shù)據(jù)發(fā)送完畢后,就向客戶端發(fā)送連接釋放報文,FIN=1,ack=u+1,由于在半關(guān)閉狀態(tài),服務(wù)器很可能又發(fā)送了一些數(shù)據(jù),假定此時的序列號為 seq=w,此時,服務(wù)器就進入了 LAST-ACK(最后確認)狀態(tài),等待客戶端的確認。
第四次揮手
客戶端發(fā)送 ACK(確認)報文確認,并將確認的序號+1,這樣關(guān)閉完成。
客戶端收到服務(wù)器的連接釋放報文后,必須發(fā)出確認,ACK=1,ack=w+1,而自己的序列號是 seq=u+1,此時,客戶端就進入了 TIME-WAIT(時間等待)狀態(tài)。注意此時 TCP 連接還沒有釋放,必須經(jīng)過 2*MSL(最長報文段壽命)的時間后,當客戶端撤銷相應(yīng)的 TCB 后,才進入 CLOSED 狀態(tài)。
服務(wù)器只要收到了客戶端發(fā)出的確認,立即進入 CLOSED 狀態(tài)。同樣,撤銷 TCB 后,就結(jié)束了這次的 TCP 連接。可以看到,服務(wù)器結(jié)束 TCP 連接的時間要比客戶端早一些。
思考:那么為什么是 4 次揮手呢?
為了確保數(shù)據(jù)能夠完成傳輸。
關(guān)閉連接時,當收到對方的 FIN 報文通知時,它僅僅表示對方?jīng)]有數(shù)據(jù)發(fā)送給你了;但未必你所有的數(shù)據(jù)都全部發(fā)送給對方了,所以你可能未必會馬上會關(guān)閉 SOCKET,也即你可能還需要發(fā)送一些數(shù)據(jù)給對方之后,再發(fā)送 FIN 報文給對方來表示你同意現(xiàn)在可以關(guān)閉連接了,所以它這里的 ACK 報文和 FIN 報文多數(shù)情況下都是分開發(fā)送的。
可能有人會有疑問,tcp 我握手的時候為何 ACK(確認)和 SYN(建立連接)是一起發(fā)送。揮手的時候為什么是分開的時候發(fā)送呢。
因為當 Server 端收到 Client 端的 SYN 連接請求報文后,可以直接發(fā)送 SYN+ACK 報文。其中 ACK 報文是用來應(yīng)答的,SYN 報文是用來同步的。但是關(guān)閉連接時,當 Server 端收到 FIN 報文時,很可能并不會立即關(guān)閉 SOCKET,所以只能先回復(fù)一個 ACK 報文,告訴 Client 端,"你發(fā)的 FIN 報文我收到了"。只有等到我 Server 端所有的報文都發(fā)送完了,我才能發(fā)送 FIN 報文,因此不能一起發(fā)送。故需要四步揮手。
?
time_wait狀態(tài)是什么
簡單來說:time_wait狀態(tài)是四次揮手中服務(wù)器向客戶端發(fā)送FIN終止連接后進入的狀態(tài)。
下圖為tcp四次揮手過程
可以看到time_wait狀態(tài)存在于客戶端收到服務(wù)器Fin并返回ack包時的狀態(tài)
當處于time_wait狀態(tài)時,我們無法創(chuàng)建新的連接,因為端口被占用。
4.http狀態(tài)碼
下面給出一些狀態(tài)碼的適用場景:
100:客戶端在發(fā)送POST數(shù)據(jù)給服務(wù)器前,征詢服務(wù)器情況,看服務(wù)器是否處理POST的數(shù)據(jù),如果不處理,客戶端則不上傳POST數(shù)據(jù),如果處理,則POST上傳數(shù)據(jù)。常用于POST大數(shù)據(jù)傳輸
206:一般用來做斷點續(xù)傳,或者是視頻文件等大文件的加載
301:永久重定向會緩存。新域名替換舊域名,舊的域名不再使用時,用戶訪問舊域名時用301就重定向到新的域名
302:臨時重定向不會緩存,常用 于未登陸的用戶訪問用戶中心重定向到登錄頁面
304:協(xié)商緩存,告訴客戶端有緩存,直接使用緩存中的數(shù)據(jù),返回頁面的只有頭部信息,是沒有內(nèi)容部分
400:參數(shù)有誤,請求無法被服務(wù)器識別
403:告訴客戶端禁止訪問該站點或者資源,如在外網(wǎng)環(huán)境下,然后訪問只有內(nèi)網(wǎng)IP才能訪問的時候則返回
404:服務(wù)器找不到資源時,或者服務(wù)器拒絕請求又不想說明理由時
503:服務(wù)器停機維護時,主動用503響應(yīng)請求或 nginx 設(shè)置限速,超過限速,會返回503
504:網(wǎng)關(guān)超時
5.http和https的區(qū)別 https的加密方式
? ? ?超文本傳輸協(xié)議HTTP協(xié)議被用于在Web瀏覽器和網(wǎng)站服務(wù)器之間傳遞信息,HTTP協(xié)議以明文方式發(fā)送內(nèi)容,不提供任何方式的數(shù)據(jù)加密,如果攻擊者截取了Web瀏覽器和網(wǎng)站服務(wù)器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協(xié)議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。
? ??為了解決HTTP協(xié)議的這一缺陷,需要使用另一種協(xié)議:安全套接字層超文本傳輸協(xié)議HTTPS,為了數(shù)據(jù)傳輸?shù)陌踩?#xff0c;HTTPS在HTTP的基礎(chǔ)上加入了SSL/TLS協(xié)議,SSL/TLS依靠證書來驗證服務(wù)器的身份,并為瀏覽器和服務(wù)器之間的通信加密。
? ? ? ? HTTPS協(xié)議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數(shù)據(jù)傳輸?shù)陌踩?#xff1b;另一種就是確認網(wǎng)站的真實性。
HTTPS和HTTP的主要區(qū)別
? ? ? ? 1、https協(xié)議需要到CA申請證書,一般免費證書較少,因而需要一定費用。
? ? ? ? 2、http是超文本傳輸協(xié)議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協(xié)議。
? ? ? ? 3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。
? ? ? ? 4、http的連接很簡單,是無狀態(tài)的;HTTPS協(xié)議是由SSL/TLS+HTTP協(xié)議構(gòu)建的可進行加密傳輸、身份認證的網(wǎng)絡(luò)協(xié)議,比http協(xié)議安全。
?
6.get,post區(qū)別
Get和post是表單提交數(shù)據(jù)的兩種基本方式,get請求數(shù)據(jù)通過域名后綴url傳送,用戶可見,不安全,post請求數(shù)據(jù)通過在請求報文正文里傳輸,相對比較安全。
get是通過url傳遞表單值,post通過url看不到表單域的值;
get傳遞的數(shù)據(jù)量是有限的,如果要傳遞大數(shù)據(jù)量不能用get,比如type=“file”上傳文章、type=“password”傳遞密碼或者< text area >發(fā)? Get和post是表單提交數(shù)據(jù)的兩種基本方式,get請求數(shù)據(jù)通過域名后綴url傳送,用戶可見,不安全,post請求數(shù)據(jù)通過在請求報文正文里傳輸,相對比較安全。
get是通過url傳遞表單值,post通過url看不到表單域的值;
get傳遞的數(shù)據(jù)量是有限的,如果要傳遞大數(shù)據(jù)量不能用get,比如type=“file”上傳文章、type=“password”傳遞密碼或者< text area >發(fā)表大段文章,post則沒有這個限制;
post會有瀏覽器提示重新提交表單的問題,get則沒有(加分的回答)
7.HTTP協(xié)議中,除了GET和POST還有什么請求?
HTTP/1.1協(xié)議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源:
OPTIONS:
這個方法可使服務(wù)器傳回該資源所支持的所有HTTP請求方法。用’*'來代替資源名稱,向Web服務(wù)器發(fā)送OPTIONS請求,可以測試服務(wù)器功能是否正常運作。
HEAD:
與GET方法一樣,都是向服務(wù)器發(fā)出指定資源的請求。只不過服務(wù)器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內(nèi)容的情況下,就可以獲取其中“關(guān)于該資源的信息”(元信息或稱元數(shù)據(jù))。
GET:
向指定的資源發(fā)出“顯示”請求。使用GET方法應(yīng)該只用在讀取數(shù)據(jù),而不應(yīng)當被用于產(chǎn)生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網(wǎng)絡(luò)蜘蛛等隨意訪問。參見安全方法
POST:
向指定資源提交數(shù)據(jù),請求服務(wù)器進行處理(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求本文中。這個請求可能會創(chuàng)建新的資源或修改現(xiàn)有資源,或二者皆有。
PUT:
向指定資源位置上傳其最新內(nèi)容。
DELETE:
請求服務(wù)器刪除Request-URI所標識的資源。
TRACE:
回顯服務(wù)器收到的請求,主要用于測試或診斷。
CONNECT:
HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器。通常用于SSL加密服務(wù)器的鏈接(經(jīng)由非加密的HTTP代理服務(wù)器)。
方法名稱是區(qū)分大小寫的。當某個請求所針對的資源不支持對應(yīng)的請求方法的時候,服務(wù)器應(yīng)當返回狀態(tài)碼405(Method Not Allowed),當服務(wù)器不認識或者不支持對應(yīng)的請求方法的時候,應(yīng)當返回狀態(tài)碼501(Not Implemented)。
8.cookie,session區(qū)別,應(yīng)用場景
cookie的執(zhí)行原理:就是當客戶端訪問服務(wù)器的時候(服務(wù)器運用了cookie),服務(wù)器會生成一份cookie傳輸給客戶端,客戶端會自動把cookie保存起來,以后客戶端每次訪問服務(wù)器,都會自動的攜帶著這份cookie。
Session是另一種記錄客戶狀態(tài)的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務(wù)器上。客戶端瀏覽器訪問服務(wù)器的時候,服務(wù)器把客戶端信息以某種形式記錄在服務(wù)器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態(tài)就可以了session是一種特殊的cookie。cookie是保存在客戶端的,而session是保存在服務(wù)端。
cookie和session的共同點
cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。
cookie和session區(qū)別
cookie是保存在客戶端的
cookie有大小限制
session是保存在服務(wù)器端
session更加安全
session會比較占用服務(wù)器性能,當訪問增多時應(yīng)用cookie
9.OSI七層模型
10.arp協(xié)議與arp攻擊
地址解析協(xié)議,即ARP(Address Resolution Protocol),是根據(jù)IP地址獲取物理地址mac的一個TCP/IP協(xié)議。主機發(fā)送信息時將包含目標IP地址的ARP請求廣播到局域網(wǎng)絡(luò)上的所有主機,并接收對應(yīng)主機返回的消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節(jié)約資源。
ARP是建立在網(wǎng)絡(luò)中各個主機互相信任的基礎(chǔ)上的,局域網(wǎng)絡(luò)上的主機可以自主發(fā)送ARP應(yīng)答消息,其他主機收到應(yīng)答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發(fā)送偽ARP應(yīng)答報文,使其發(fā)送的信息無法到達預(yù)期的主機或到達錯誤的主機,這就構(gòu)成了一個ARP欺騙(也稱為ARP攻擊)。
ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應(yīng)關(guān)系、添加或刪除靜態(tài)對應(yīng)關(guān)系等。
這里需要注意的是,ARP本身是沒有重試機制的,如果有重試,有可能是上層協(xié)議采取的處理方式。
11.瀏覽器請求,瀏覽器輸入一個連接,到展示到頁面,經(jīng)過了什么
1、DNS解析: 當用戶輸入一個網(wǎng)址并按下回車鍵的時候,瀏覽器得到一個域名,而在實際通信過程中,我們需要的是一個 IP地址,因此需要先把域名轉(zhuǎn)換成相應(yīng)的 IP地址。
2、TCP連接: 瀏覽器通過 DNS獲取到 Web服務(wù)器真正的 IP地址后,便向 Web服務(wù)器發(fā)起 TCP連接請求,通過 TCP三次握手建立好連接后,瀏覽器便可以將 HTTP請求數(shù)據(jù)發(fā)送給服務(wù)器了。
3、發(fā)送 HTTP請求: 瀏覽器向 Web服務(wù)器發(fā)起一個 HTTP請求,HTTP協(xié)議是建立在 TCP協(xié)議之上的應(yīng)用層協(xié)議,其本質(zhì)是建立起的 TCP連接中,按照 HTTP協(xié)議標準發(fā)送一個索要網(wǎng)頁的請求。在這一過程中,會涉及到負載均衡等操作。
4、處理請求并返回: 服務(wù)器獲取到客戶端的 HTTP請求后,會根據(jù) HTTP請求中的內(nèi)容決定如何獲取相應(yīng)的文件,并將文件發(fā)送給瀏覽器。
5、瀏覽器渲染: 瀏覽器根據(jù)響應(yīng)開始顯示頁面,首先解析 HTML文件構(gòu)建 DOM樹,然后解析 CSS文件構(gòu)建渲染樹,等到渲染樹構(gòu)建完成后,瀏覽器開始布局渲染樹并將其繪制到屏幕上。
樹并將其繪制到屏幕上。
6、斷開連接: 客戶端和服務(wù)器通過四次握手終止 TCP連接。
?
12.TCP與IP 協(xié)議的區(qū)別
1.TCP工作于傳輸層,提供面向連接、可靠的地數(shù)據(jù)傳輸服務(wù),PDU為報文。IP工作于網(wǎng)絡(luò)層,提供無連接的、不可靠的、盡最大努力交付的數(shù)據(jù)報服務(wù)。PDU為分組。
2.TCP提供應(yīng)用進程之間的通信,而IP提供主機之間的通信。
3.TCP以IP為基礎(chǔ),面向應(yīng)用層提供服務(wù)。IP協(xié)議為TCP提供服務(wù)。IP協(xié)議將數(shù)據(jù)從一臺主機發(fā)送至另一臺主機,TCP則保證了其傳輸可靠性。
?
Linux命令
1.查看進程,哪些進程占用了8080
ps aux?
(第二列是進程號)
netstat -tln | grep 8080
2.查看一個端口的占用情況,并殺死占用的進程
lsof ?-i : 端口號 用于查看某一端口的占用情況,比如查看8080端口使用情況,lsof ?-i:8080
結(jié)束進程直接 kill -9 進程號就可以了
3.統(tǒng)計字符串出現(xiàn)的次數(shù)
grep -c ‘object’ fileName
案例里使用的文件:aa.txt ,用來做統(tǒng)計的字符串:2
4.查找
find
5.新建文件
touch
6.查看文件
cat
7.修改文件
vim
8.查看日志
tail
9.修改文件權(quán)限
chmod 777 error.log?10.文件壓縮解壓
壓縮:
?zip?-r newfilename.zip filename ?
?tar?-cvf newfilename.tar filename
gzip filename.tar? filename.tar.gz
tar -zcvf newfilename.tar.gz filename
解壓:
?unzip?newfilename.zip
gzip -d filename.tar.gz?
tar?-xvf filename.tar??
?tar -zxvf filename.tar.gz
11.修改ip地址
vi /etc/sysconfig/network-scripts/ifcfg-eth0
數(shù)據(jù)庫與SQL
整理數(shù)據(jù)庫與SQL常見考點及真題答案戳鏈接?
1.創(chuàng)建表CREATE TABLE
2.創(chuàng)建視圖CREATE VIEW
視圖可以當做虛擬表格,與表格不同的是,表格中有實際存儲的資料,而視圖是建立在表格之上的一個架構(gòu),其本身不實際存儲資料。
CREATE VIEW “VIEW_NAME”AS “SQL語句”
3.創(chuàng)建索引CREATE INDEX
索引可以幫助快速查找資料。索引的存在,數(shù)據(jù)庫系統(tǒng)可以先從這個索引找出需要的資料在表格的位置,在進行抓取。
CREATE INDEX “INDEX_NAME”O(jiān)N “TABLE_NAME”(COLUMN_NAME)
4.更改表結(jié)構(gòu)ALTER TABLE
ALTER TABLE “TABLE_NAME”[改變方式]
具體操作可以包括:增加欄位ADD,刪除欄位DROP,改變欄位名稱CHANGE和改變欄位種類MODIFY。
alter table Student add name
5.刪除表格DROP TABLE
DROP TABLE “表格名”
drop table Student
6.修改表格UPDATE
使用UPDATA指令,可以修改表格中的資料。
UPDATE“表格名” SET “欄位1”=[新值] WHERE {條件}?
7.插入資料INSERT INTO
加入一些資料進入表格
INSERT INTO “表格名”(“欄位1”,“欄位2”,……)
VALUES(“值1”,“值2”,…)
8.刪除資料DELETE FROM
有時需要直接從數(shù)據(jù)庫中去除一些資料。可以使用DELETE FROM實現(xiàn)。
DELETE FROM “表格名”
WHERE{條件}
9.限制條件CONSTRAINT
NOT NULL:不允許一個欄位含有NULL值。
UNIQUE:保障一個欄位中的所有資料都是不一樣的值。
CHECK:限制保障一個欄位的所有資料符合某些條件。
PRIMARY KEY:主鍵
FOREIGN KEY:外鍵
10.select查詢
select (列名) from (表名)where (限制)
(1)ORDER BY
可以對獲取的資料進行排序,從小到大ASC,從大到小DESC
ORDER BY “欄目名” [ASC,DESC]
(2)LIKE
多在WHERE中使用,能根據(jù)特征模式獲取我們要的數(shù)據(jù)
SELECT “欄目名”
FROM “表格名”
WHERE “欄目名”LIKE{模式}
例:WHERE store_name LIKE ‘%AN%’
(3)BETWEEN
可以使我們通過一個范圍獲得數(shù)據(jù)庫中的值
SELECT “欄目名”
FROM “表格名”
WHERE “欄目名”BETWEEN ‘值一’AND‘值二’
例:WHERE Date BETWEEN ‘1919-02-02’ AND ‘2020-02-20’
(4)DISTINCT
在表中,有可能會包含重復(fù)值,DISTINCT 可以返回唯一不同的值。
SELECT DISTINCT 列 FROM 表
(5)GROUP BY
可以將表按照列屬性進行分組,進行分開處理
SELECT “欄位1”,SUM“欄位2”
FROM “表格名”
GROUP BY “欄位1”
(6)HAVING
實現(xiàn)對組的值的篩選,一般跟在GROUP BY的后面,一個含有HAVING字句的SQL并不一定有GROUP BY 子句。
SELECT “欄位1”
FROM “表格名”
GROUP BY “欄位1”
HAVING (函數(shù)條件)
(7)區(qū)別HAVING 和WHERE
①WHERE 和HAVING 都是用來篩選的
②HAVING 用來篩選組,WHERE 用來篩選記錄。where搜索條件在分組操作之前應(yīng)用,having搜索條件在進行分組操作之后應(yīng)用
③當一個查詢包含了where條件和聚合函數(shù),先執(zhí)行條件過濾,再進行聚合函數(shù),如:SELECT SUM(score) FROM sc WHERE score > 60 先過濾出score>60的記錄,再進行SUM求和
④having在聚合之后進行過濾,having在分組的時候會用,對分組結(jié)果進行過濾,通常分組里面包含聚合函數(shù),如:
SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) >60;
(8)集合函數(shù)
AVG 平均
COUNT 計數(shù)
SUM 求和
MAX 最大值
MIN 最小值
(9)連接
自然連接:比較兩個表的共同列,并保存共同的列值。
SELECT “欄位1”
FROM TABLE_A NATURAL JOIN TABLE_B
左連接:保留左表的全部列,和右表與左表相同的列值。
SELECT “欄位1”
FROM TABLE_A LEFT JOIN TABLE_B ON [A表值]=[B表值]
右連接:保留右表的全部列,和左表與右表相同的列值。
SELECT “欄位1”
FROM TABLE_A RIGHT JOIN TABLE_B ON [A表值]=[B表值]
11. sql主鍵
主鍵約束
PRIMARY KEY 約束唯一標識數(shù)據(jù)庫表中的每條記錄。
主鍵必須包含唯一的值。
主鍵列不能包含 NULL 值。
每個表都應(yīng)該有一個主鍵,并且每個表只能有一個主鍵。
12.sql外鍵
一、外鍵的定義
1. 外鍵是一種索引,是通過一張表中的一列指向另一張表的主鍵,使得這兩張表產(chǎn)生關(guān)聯(lián)
2. 是某個表中的一列,它包含在另一個表的主鍵中
3. 一張表中可以有一個外鍵也可以有多個外鍵
二、外鍵的作用
減少單張表的冗余信息
三、使用外鍵后想要刪除/更新主表的相關(guān)列會報錯,因為從表正在使用。使用外鍵后若想向從表中插入新列,但是外鍵值主表中沒有,會報錯,更新從表的外鍵值,但是值不在從表中會報錯。
13.視圖與表的區(qū)別
為什么要創(chuàng)建索引呢?這是因為,創(chuàng)建索引可以大大提高系統(tǒng)的性能。?
第一,通過創(chuàng)建唯一性索引,可以保證數(shù)據(jù)庫表中每一行數(shù)據(jù)的唯一性。?
第二,可以大大加快 數(shù)據(jù)的檢索速度,這也是創(chuàng)建索引的最主要的原因。?
第三,可以加速表和表之間的連接,特別是在實現(xiàn)數(shù)據(jù)的參考完整性方面特別有意義。?
第四,在使用分組和排序 子句進行數(shù)據(jù)檢索時,同樣可以顯著減少查詢中分組和排序的時間。?
第五,通過使用索引,可以在查詢的過程中,使用優(yōu)化隱藏器,提高系統(tǒng)的性能。
缺點:
第一,創(chuàng)建索引和維護索引要耗費時間,這種時間隨著數(shù)據(jù) 量的增加而增加。?
第二,索引需要占物理空間,除了數(shù)據(jù)表占數(shù)據(jù)空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。?
第三,當對表中的數(shù)據(jù)進行增加、刪除和修改的時候,索引也要動態(tài)的維護,這樣就降低了數(shù)據(jù)的維護速度。
?
手寫SQL
在原來的表上增加一列,創(chuàng)建時間列,并獲取當前系統(tǒng)時間
找出創(chuàng)建時間在某個時間范圍以內(nèi),并按照創(chuàng)建時間降序排列
在原來的表上增加一百條數(shù)據(jù),名字字段每條后邊加個0,比如第一個是name,下邊是name0,name00…(不會,求大神告知)
C++/Java/Python
C++
1.面向?qū)ο蟮娜筇匦?#xff0c;怎么解釋?
C++ 三大特性是:封裝,繼承,多態(tài)
封裝(encapsulation):封裝就是將抽象得到的數(shù)據(jù)和行為(或功能)相結(jié)合,形成一個有機的整體,也就是將數(shù)據(jù)與操作數(shù)據(jù)的源代碼進行有機的結(jié)合,形成“類”,其中數(shù)據(jù)和函數(shù)都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現(xiàn)細節(jié),而只是要通過 外部接口,一特定的訪問權(quán)限來使用類的成員。通過封裝使一部分成員充當類與外部的接口,而將其他的成員隱蔽起來,這樣就達到了對成員訪問權(quán)限的合理控制,使不同類之間的相互影響減少到最低限度,進而增強數(shù)據(jù)的安全性和簡化程序的編寫工作。
繼承:繼承是面向?qū)ο筌浖夹g(shù)當中的一個概念。如果一個類B繼承自另一個類A,就把這個B稱為A的子類,而把A稱為B的父類。**繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。**在令子類繼承父類的同時,可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。
多態(tài)(Polymorphisn):多態(tài)性是允許你將父對象設(shè)置成為和一個或更多的他的子對象相等的技術(shù),賦值之后,父對象就可以根據(jù)當前賦值給它的子對象的特性以不同的方式運作。簡單的說:允許將子類類型的指針賦值給父類類型的指針。多態(tài)性在C++中都是通過虛函數(shù)(Virtual Function)實現(xiàn)的。虛函數(shù)就是允許被其子類重新定義的成員函數(shù)。而子類重新定義父類虛函數(shù)的做法,稱為“覆蓋”或者稱為“重寫”(override)。
?
2.指針與數(shù)組的區(qū)別
1、概念
數(shù)組:存儲連續(xù)多個相同類型的數(shù)據(jù);
指針:變量,存的是地址
2、賦值
同類型的指針變量可以相互賦值,數(shù)組不行,只能一個一個元素的賦值或拷貝
3、存儲方式
數(shù)組:連續(xù)內(nèi)存空間。
指針:靈活,可以指向任意類型的數(shù)據(jù)。指向的是地址空間的內(nèi)存。
4、sizeof
數(shù)組的sizeof求的是占用的空間(字節(jié))。
在32位平臺下,無論指針的類型是什么,sizeof(指針名)都是4,在64位平臺下,無論指針的類型是什么,sizeof(指針名)都是8。
Python
Java
還會什么語言
14. shell腳本 awk切割文件 sed替換 改名字
15. C:\log.txt,查找文件中‘ABCD’出現(xiàn)的次數(shù). cat log.txt | grep -o ‘ABCD’|wc -l C語言實現(xiàn)會寫嗎?
數(shù)據(jù)結(jié)構(gòu)
軟件測試
1.黑盒白盒
從測試方法上分,軟件測試可分為白盒測試和黑盒測試。
(1)白盒
把程序看成裝在一個透明的白箱子里,測試者完全知道程序的結(jié)構(gòu)和算法。
白盒測試,又稱結(jié)構(gòu)測試,主要用于單元測試階段。
白盒測試根據(jù)軟件的內(nèi)部邏輯設(shè)計測試用例,常用的技術(shù)是邏輯覆蓋。
主要的覆蓋標準有 6 種:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合條件覆蓋和路徑覆蓋。
語句覆蓋:每個語句執(zhí)行一次
判定覆蓋:每個語句+每個可能結(jié)果執(zhí)行一次
條件覆蓋:每個語句+每個條件執(zhí)行一次
判定/條件覆蓋:判定覆蓋+條件覆蓋 每個條件的每個結(jié)果出現(xiàn)一次
條件組合覆蓋:每個條件結(jié)果的所有組合出現(xiàn)一次
路徑覆蓋:每個執(zhí)行到的路徑經(jīng)過一次
(2)黑盒
把軟件看作一個不透明的黑箱子,完全不考慮(或不了解)軟件的內(nèi)部結(jié)構(gòu)和處理算法,它只檢查軟件功能是否能按照軟件需求說明書的要求正常使用,軟件是否能適當?shù)亟邮蛰斎霐?shù)據(jù)并產(chǎn)生正確的輸出信息,軟件運行過程中能否保持外部信息(例如文件和數(shù)據(jù)庫)的完整性等。
黑盒測試,又稱功能測試,主要用于集成測試和確認測試階段。
常用的黑盒測試技術(shù)包括等價類劃分、邊值分析、錯誤推測和因果圖等。
等價類劃分:等價類就是輸入域的集合,等價類劃分就是對輸入域的劃分,分為有效和無效,分別用來檢測功能有效性和軟件容錯性。
邊值分析:測試用例在邊界附近
錯誤推測:人員自主推測,容易出錯的部分
因果圖:輸入與輸出的因果關(guān)系設(shè)計
2,軟件測試的流程
需求分析:分析客戶的需求可不可行。
編寫測試計劃。
編寫測試用例:測試用例就是指導(dǎo)測試的文檔。
執(zhí)行測試:提交bug,回歸測試。
編寫測試總結(jié)報告。
3.軟件測試的方法
1、從是否關(guān)心內(nèi)部結(jié)構(gòu)來看
(1)白盒測試。
(2)黑盒測試。
(3)灰盒測試:是一種綜合測試法,它將“黑盒”測試與“白盒”測試結(jié)合在一起,是基于程序運行時的外部表現(xiàn)又結(jié)合內(nèi)部邏輯結(jié)構(gòu)來設(shè)計用例。
2、從是否執(zhí)行代碼看
(1)靜態(tài)測試:指不運行被測程序本身,僅通過分析或檢查源程序的語法、結(jié)構(gòu)、過程、接口等來檢查程序的正確性。
(2)動態(tài)測試:是指通過運行被測程序,檢查運行結(jié)果與預(yù)期結(jié)果的差異,并分析運行效率、正確性和健壯性等性能指標。
3、從開發(fā)過程級別看
(1)單元測試:又稱模塊測試,是針對軟件設(shè)計的最小單位-程序模塊或功能模塊。其目的在于檢驗程序各模塊是否存在各種差錯,是否能正確地實現(xiàn)了其功能,滿足其性能和接口要求。
(2)集成測試:又叫組裝測試或聯(lián)合,是單元測試的多級擴展,是在單元測試的基礎(chǔ)上進行的一種有序測試。旨在檢驗軟件單元之間的接口關(guān)系,以期望通過測試發(fā)現(xiàn)各軟件單元接口之間存在的問題,最終把經(jīng)過測試的單元組成符合設(shè)計要求的軟件。
(3)系統(tǒng)測試:是為判斷系統(tǒng)是否符合要求而對集成的軟、硬件系統(tǒng)進行的測試活動、它是將已經(jīng)集成好的軟件系統(tǒng),作為基于整個計算機系統(tǒng)的一個元素,與計算機硬件、外設(shè)、某些支持軟件、人員、數(shù)據(jù)等其他系統(tǒng)元素結(jié)合在一起,在實際運行環(huán)境下,對計算機系統(tǒng)進行一系列的組裝測試和確認測試。
4、從執(zhí)行過程是否需要人工干預(yù)來看
(1)手工測試:就是測試人員按照事先為覆蓋被測軟件需求而編寫的測試用例,根據(jù)測試大綱中所描述的測試步驟和方法,手工地一個一個地輸入執(zhí)行,包括與被測軟件進行交互(如輸入測試數(shù)據(jù)、記錄測試結(jié)果等),然后觀察測試結(jié)果,看被測程序是否存在問題,或在執(zhí)行過程中是否會有一場發(fā)生,屬于比較原始但是必須執(zhí)行的一個步驟。
(2)自動化測試:實際上是將大量的重復(fù)性的測試工作交給計算機去完成,通常是使用自動化測試工具來模擬手動測試步驟,執(zhí)行用某種程序設(shè)計語言編寫的過程(全自動測試就是指在自動測試過程中,不需要人工干預(yù),由程序自動完成測試的全過程;半自動測試就是指在自動測試過程中,需要手動輸入測試用例或選擇測試路徑,再由自動測試程序按照人工指定的要求完成自動測試
5、從測試實施組織看
(1)開發(fā)測試:開發(fā)人員進行的測試
(2)用戶測試:用戶方進行的測試
(3)第三方測試:有別于開發(fā)人員或用戶進行的測試,由專業(yè)的第三方承擔的測試,目的是為了保證測試工作的客觀性
6、從測試所處的環(huán)境看
(1)阿爾法測試:是由一個用戶在開發(fā)環(huán)境下進行的測試,也可以是公司內(nèi)部的用戶在模擬實際操作環(huán)境下進行的測試
(2)貝塔測試:是用戶公司組織各方面的典型終端用戶在日常工作中實際使用貝塔版本,并要求用戶報告
7、其他測試類型
(1)回歸測試(regression testing)是指對軟件的新的版本測試時,重復(fù)執(zhí)行上一個版本測試時的用例。
(2)冒煙測試(smoke testing),是指在對一個新版本進行大規(guī)模的測試之前,先驗證一下軟件的基本功能是否實現(xiàn),是否具備可測性。
(3)隨機測試(random testing),是指測試中所有的輸入數(shù)據(jù)都是隨機生成的,其目的是模擬用戶的真實操作,并發(fā)現(xiàn)一些邊緣性的錯誤。
4.測試實例
1.登錄頁面測試
【功能測試】
1.輸入正確的用戶名密碼是否能夠正確登錄
用戶名存在、對應(yīng)密碼存在正確 彈框:登入成功、跳轉(zhuǎn)頁面
2.輸入錯誤的用戶名密碼是否會判斷錯誤
? ? ? ? 用戶名存在、對應(yīng)密碼存在不正確 彈框:密碼錯誤
? ? ? ? 用戶名不存在、密碼存在 彈框:用戶名或密碼錯誤
? ? ? ? 用戶名不存在、密碼不存在 彈框:用戶名或密碼錯誤
輸入相同賬號輸錯密碼三次以上需等待三分鐘再次輸入
3.登陸成功后能否跳到正確頁面
4.用戶名和密碼,如果太短或者太長,應(yīng)該怎么處理
用戶名或密碼輸入太短或太長 彈框:輸入不合法
5.用戶名和密碼,中有特殊字符,和其他非英文的情況
彈框:輸入不合法
6.驗證碼:隨機生成圖片;點擊可換取隨機生成圖片
7.輸入框可粘貼與粘貼長度:密碼框可粘貼長度不超過20,用戶賬號框粘貼長度不超過12
8.密碼是否以星號顯示
【界面測試(UI Test)】
布局是否合理,2個testbox 和一個按鈕是否對齊
testbox和按鈕的長度,高度是否復(fù)合要求
界面是否好看
圖片,顏色,字體,超鏈接,是否都顯示正確
【性能測試(performance test)】
打開登錄頁面,需要幾秒
輸入正確的用戶名和密碼后,登錄成功跳轉(zhuǎn)到新頁面,不超過5秒
能支持多少個用戶同時登陸
【安全性測試(Security test)】
登錄成功后生成的Cookie,是否是httponly (否則容易被腳本盜取)
用戶名和密碼是否通過加密的方式,發(fā)送給Web服務(wù)器
用戶名和密碼的驗證,應(yīng)該是用服務(wù)器端驗證, 而不能單單是在客戶端用javascript驗證
用戶名和密碼的輸入框,應(yīng)該屏蔽SQL 注入攻擊
用戶名和密碼的的輸入框,應(yīng)該禁止輸入腳本 (防止XSS攻擊)
錯誤登陸的次數(shù)限制(防止暴力破解)
【可用性測試(Usability Test)】
是否可以全用鍵盤操作,是否有快捷鍵
輸入用戶名,密碼后按回車,是否可以登陸
【兼容性測試(Compatibility Test)】
主流的瀏覽器下能否顯示正常已經(jīng)功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)
不同的平臺是否能正常工作,比如Windows, Mac
移動端ios、安卓
2.微信發(fā)紅包
一、功能
紅包封面:(1)不選擇會有默認封面;(2)是否可以選擇紅包封面
紅包描述:(1)在紅包描述中是否可以輸入漢字,英文,符號,表情,純數(shù)字,漢字英語符號emjo,動態(tài)表情以及現(xiàn)場拍攝的圖片等;(3)紅包描述中輸入自己的表情,搶紅包的人是否可以正常看見;(4)紅包描述中最多能有多少個字符(超過10個)。
紅包金額:(1)在紅包錢數(shù)和紅包個數(shù)輸入框中只能輸入數(shù)字(測試輸入紅包錢數(shù)是不是只能輸入數(shù)字);(2)紅包里最多和最少可以輸入的錢數(shù)(最多:200,最少:0.01);(3)如果直接輸入小數(shù)點,那么小數(shù)點之前應(yīng)該有一個0;(4)當紅包錢數(shù)超過最大范圍是不是有對應(yīng)的提示(一對一:200,群發(fā):20000);(5)輸入錢數(shù)為0,“塞錢進紅包”置灰;(6)發(fā)紅包金額和收到的紅包金額應(yīng)該匹配(分別測試一對一和群發(fā)的場景)。
塞錢進紅包,扣錢順序:(1)主動設(shè)置優(yōu)先級;(2)默認順序(從零錢開始支付;如果零錢不足,看那種方式付錢比較充足);(3)確認的時候,自己選擇付款方式。
余額不足:(1)銀行卡;(2)零錢;(3)零錢通。
支付驗證方式:(1)密碼;(2)指紋;(3)刷臉;(4)聲音;(5)免密支付。
取消發(fā)送:可以按取消鍵,取消發(fā)送紅包;
支付成功后,退回聊天界面;
發(fā)送紅包:(1)測試發(fā)送出去的紅包能否撤回(可以測試轉(zhuǎn)賬能否撤回);(2)發(fā)送的紅包別人是否可以領(lǐng)取,針對一對一場景,測試發(fā)的紅包自己是否可以領(lǐng)取,群發(fā)的是否可以正常領(lǐng)取。
領(lǐng)紅包:超過24小時沒有領(lǐng)取的紅包,是否還可以領(lǐng)取(不可以)。
紅包記錄:(1)在發(fā)紅包界面能否看到以前的收發(fā)紅包記錄;(2)紅包記錄里的信息與實際發(fā)紅包記錄是否匹配。
是否可以連續(xù)多次發(fā)紅包;
退款到賬的時間。
電腦(PC端)是否可以搶微信紅包。
二、性能
斷網(wǎng)時,無法搶紅包。
不同網(wǎng)速時,發(fā)紅包,搶紅包的時間。
發(fā)紅包和收紅包成功時的跳轉(zhuǎn)時間。
收發(fā)紅包時的耗電量。
三、兼容性
蘋果、安卓是否都可以發(fā)紅包,搶紅包。
四、界面
發(fā)紅包界面沒有錯別字。
搶完紅包界面沒有錯別字。
發(fā)紅包和收紅包界面排版是否合理。
發(fā)紅包和收紅包界面顏色搭配是否合理。
群發(fā)紅包后,紅包收取記錄界面。
五、安全性
紅包唄領(lǐng)取以后,發(fā)送紅包人的金額是否會減少,收紅包人的金額是否會增加。
發(fā)送紅包失敗,查看余額和銀行卡里的錢是否會變化。
紅包發(fā)送成功,是否會收到微信支付的通知。
六、易用性
紅包描述中,金額,紅包個數(shù)框里是否支持復(fù)制粘貼操作。
紅包描述,是否可以通過語音輸入。
是否可以指紋支付,密碼支付,或者免密,刷臉等。
3.對桌子測試(什么鬼問題
需求測試:查看國家相關(guān)標準。
?
功能:桌子是辦公,或者放置用的,首先考慮桌子的面積大小是否適度.抽屜夠不夠,高度合不合適。
?
界面:桌子的版面是否平滑,桌子有沒有凹凸不平的地方
?
安全:桌子肯定有它的支撐點,若支撐點不穩(wěn),容易摔壞物品,使用起來也不方便
?
易用:桌子的移動性好不.它的重量是否合適
?
可靠性:將桌子推倒后,再檢查桌子是否很容易被損壞.
?
性能:將很重的物品放在桌子上,看它最大承受的重量是多少...
總結(jié)
- 上一篇: 如何在unity中调用电脑或安卓自带的摄
- 下一篇: 加密狗破解原理和破解方法介绍