日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

测试开发工程师面经

發布時間:2024/8/1 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 测试开发工程师面经 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

一面(30min-1h)

主要考察對測試的理解以及計算機基礎、算法與邏輯思維。

  • 自我介紹?你介紹的決定接下來問的,提前打個草稿很重要;
  • 項目經歷
  • 計算機基礎?包括Linux命令、數據庫與SQL、C++/Java/Python、算法與數據結構
  • 編程題(可能會有智力題);
  • 測試的相關?實習經歷?,測試的理解/測試的相關知識, 設計測試用例
  • 游戲經歷(游戲測開)
  • 你有什么問題
    • 平常看過那些技術性網站,在github看過什么項目,有沒有自己實現過

    二面/三面(不一定有)(30min-1h)

    主要考察項目相關以及編程能力。相關知識能說多少說多少,面試官不會打斷你,主要看技術深度?。
    編程題手寫有困難的情況下,必須介紹分析思路、準備用什么方法

  • 項目經歷
  • 計算機基礎?包括Linux命令、數據庫與SQL、C++/Java/Python、算法與數據結構
  • 編程題(可能會有智力題);
  • 設計測試用例
  • HR面(30-45min)

    一般不會掛人。

  • 為什么要選擇XX公司/部門/崗位
  • 對前兩面的面試評價
  • 能否接受高壓/加班?;
  • 有沒有男/女朋友?,興趣愛好?;
  • 幾個offer,如果發offer會不會來
  • 職業生涯規劃?;
  • 薪資要求
  • 游戲經歷及對游戲行業的理解(游戲測開)
  • 有什么需要問我的
  • 其他
    • 對公司的技術氛圍和工作氛圍有沒有什么要求
    • 有沒有遇到什么特別有壓力/挑戰的事情
    • 過去幾年最有成就感的事情
    • 你比別人的優勢在哪里
    • 實習的經歷,遇到的困難和挑戰
    • 當學習一個新技術得時候你會怎么做
    • 拿到一個項目得一個大體需求 你會怎么擴展
    • 做項目時會有總結嗎
    • 做項目時有什么難點,有的話怎么解決

    測試崗/測試開發崗面試真題

    來源與網易、網易互娛、360、頭條、商湯等公司面試真題,整理自牛客網link。

    自我介紹

  • 項目中負責什么?
  • 團隊幾個人?合作情況
  • 為什么要讀研
  • 項目/實習介紹

  • 項目中負責什么?
  • 團隊幾個人?合作情況
  • 項目的方法怎么改進,和別人方法相比的優缺點
  • 項目收獲
  • 計算機網絡

    1.tcp、udp屬于哪層,區別,應用

    屬于傳輸層

    TCP與UDP基本區別

    應用:
    TCP 每個數據封包都需要確認,因此天然不適應高速數據傳輸場景,比如觀看視頻(流媒體應用)、網絡游戲(TCP 有延遲)等。具體來說,如果網絡游戲用 TCP,每個封包都需要確認,可能會造成一定的延遲;再比如音、視頻傳輸天生就允許一定的丟包率;
    Ping 和 DNS Lookup,這類型的操作只需要一次簡單的請求/返回,不需要建立連接,用 UDP 就足夠了。如果考慮希望傳輸足夠塊,就可能會用 UDP。
    再比如 HTTP 協議,如果考慮請求/返回的可靠性,用 TCP 比較合適。

    第一類:TCP 場景
    遠程控制(SSH)
    TELNET
    File Transfer Protocol(FTP)
    郵件(SMTP、IMAP)等
    點對點文件傳出(微信等)
    HTTP

    第二類:UDP 場景
    網絡游戲
    音視頻傳輸
    DNS
    Ping
    直播
    TFTP
    SNMP

    第三類:模糊地帶(TCP、UDP 都可以考慮)
    HTTP(目前以 TCP 為主)
    文件傳輸


    2.你知道的什么軟件是用tcp協議什么軟件是用UDP協議

    3.TCP三次握手四次揮手的過程及狀態, 三次握手?兩次會怎樣?四次揮手?3次會怎樣?TIME_WAIT出現在哪 為什么要有TIME_WAIT

    三次握手:

    默認情況下客戶端client和服務端sever的TCP進程都處于CLOSED(關閉)狀態。
    服務端TCP服務進程先建立傳輸控制塊TCB,然后服務端進入LISTEN狀態,等待客戶端連接請求。

    • 第一次握手:客戶端TCP進程也先建立傳輸控制塊TCB,然后向服務端發送連接請求報文段,此時SYN=1,隨機選定一個初始序號seq=x,,此報文不能攜帶數據,但是要消耗掉一個序號,發送完畢后,客戶端進入SYN-SENT(同步已發送)狀態
    • 第二次握手:服務端收到客戶端請求連接報文段后,若同意建立連接,則發送確認報文,確認報文中SYN=1、ACK=1,確認號ack=x+1,同時隨機選定一個自己序號seq=y,確認報文段同樣不能攜帶數據,但是也要消耗掉一個序號,發送完畢后服務端進入SYN-RCVD(同步收到)狀態
    • 第三次握手:客戶端收到確認報文后,檢查ACK=1,ack=x+1是否正確,若正確,則向服務端發送確認報文,確認報文中ACK=1,ack=y+1,seq=x+1,發送后進入ESTAB-LISHED狀態,服務端收到確認報文后,也進入ESTAB-LISHED狀態,此時雙方TCP連接正式建立。

    上面的連接建立過程就是TCP三次握手

    為什么是三次握手?

    為什么client收到確認報文后,還要再發送一次確認報文給server呢?這主要是為了防止已失效的連接請求報文段突然又送到了Server端。
    假設現在TCP連接是兩次握手機制,如下圖server在收到client的連接請求,確認后就進入ESTAB-LISHED狀態,會存在這樣一種問題:
    client發送連接請求報文,由于網絡原因,長時間阻塞在某個網絡節點上了,于是client重傳了一次請求連接報文,第二次請求報文正常達到server,連接正常建立,數據傳輸完畢后,釋放連接。但是假設此時第一次發送的請求報文并沒有丟失,而是延誤一段時間才到達server,這本是已失效的連接請求報文段,但是server收到后,會以為是client重新發送的連接請求,于是向client發送確認報文后,進入ESTAB-LISHED狀態,但是client并沒有發出新建連接的請求,就會忽略server的確認報文,server卻在一直等待client發送數據,導致server資源浪費嚴重。

    四次揮手:

    第一次揮手

    TCP 發送一個 FIN(結束),用來關閉客戶到服務端的連接。

    客戶端進程發出連接釋放報文,并且停止發送數據。釋放數據報文首部,FIN=1,其序列號為 seq=u(等于前面已經傳送過來的數據的最后一個字節的序號加 1),此時,客戶端進入 FIN-WAIT-1(終止等待 1)狀態。TCP 規定,FIN 報文段即使不攜帶數據,也要消耗一個序號。

    第二次揮手

    服務端收到這個 FIN,他發回一個 ACK(確認),確認收到序號為收到序號+1,和 SYN 一樣,一個 FIN 將占用一個序號。

    服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,并且帶上自己的序列號 seq=v,此時,服務端就進入了 CLOSE-WAIT(關閉等待)狀態。TCP 服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處于半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個 CLOSE-WAIT 狀態持續的時間。

    客戶端收到服務器的確認請求后,此時,客戶端就進入 FIN-WAIT-2(終止等待 2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最后的數據)。

    第三次揮手

    服務端發送一個 FIN(結束)到客戶端,服務端關閉客戶端的連接。

    服務器將最后的數據發送完畢后,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由于在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號為 seq=w,此時,服務器就進入了 LAST-ACK(最后確認)狀態,等待客戶端的確認。

    第四次揮手

    客戶端發送 ACK(確認)報文確認,并將確認的序號+1,這樣關閉完成。

    客戶端收到服務器的連接釋放報文后,必須發出確認,ACK=1,ack=w+1,而自己的序列號是 seq=u+1,此時,客戶端就進入了 TIME-WAIT(時間等待)狀態。注意此時 TCP 連接還沒有釋放,必須經過 2*MSL(最長報文段壽命)的時間后,當客戶端撤銷相應的 TCB 后,才進入 CLOSED 狀態。

    服務器只要收到了客戶端發出的確認,立即進入 CLOSED 狀態。同樣,撤銷 TCB 后,就結束了這次的 TCP 連接。可以看到,服務器結束 TCP 連接的時間要比客戶端早一些。

    思考:那么為什么是 4 次揮手呢?

    為了確保數據能夠完成傳輸。

    關閉連接時,當收到對方的 FIN 報文通知時,它僅僅表示對方沒有數據發送給你了;但未必你所有的數據都全部發送給對方了,所以你可能未必會馬上會關閉 SOCKET,也即你可能還需要發送一些數據給對方之后,再發送 FIN 報文給對方來表示你同意現在可以關閉連接了,所以它這里的 ACK 報文和 FIN 報文多數情況下都是分開發送的。

    可能有人會有疑問,tcp 我握手的時候為何 ACK(確認)和 SYN(建立連接)是一起發送。揮手的時候為什么是分開的時候發送呢。

    因為當 Server 端收到 Client 端的 SYN 連接請求報文后,可以直接發送 SYN+ACK 報文。其中 ACK 報文是用來應答的,SYN 報文是用來同步的。但是關閉連接時,當 Server 端收到 FIN 報文時,很可能并不會立即關閉 SOCKET,所以只能先回復一個 ACK 報文,告訴 Client 端,"你發的 FIN 報文我收到了"。只有等到我 Server 端所有的報文都發送完了,我才能發送 FIN 報文,因此不能一起發送。故需要四步揮手。
    ?

    time_wait狀態是什么
    簡單來說:time_wait狀態是四次揮手中服務器向客戶端發送FIN終止連接后進入的狀態。

    下圖為tcp四次揮手過程


    可以看到time_wait狀態存在于客戶端收到服務器Fin并返回ack包時的狀態
    當處于time_wait狀態時,我們無法創建新的連接,因為端口被占用。

    4.http狀態碼

    下面給出一些狀態碼的適用場景:

    100:客戶端在發送POST數據給服務器前,征詢服務器情況,看服務器是否處理POST的數據,如果不處理,客戶端則不上傳POST數據,如果處理,則POST上傳數據。常用于POST大數據傳輸

    206:一般用來做斷點續傳,或者是視頻文件等大文件的加載

    301:永久重定向會緩存。新域名替換舊域名,舊的域名不再使用時,用戶訪問舊域名時用301就重定向到新的域名

    302:臨時重定向不會緩存,常用 于未登陸的用戶訪問用戶中心重定向到登錄頁面

    304:協商緩存,告訴客戶端有緩存,直接使用緩存中的數據,返回頁面的只有頭部信息,是沒有內容部分

    400:參數有誤,請求無法被服務器識別

    403:告訴客戶端禁止訪問該站點或者資源,如在外網環境下,然后訪問只有內網IP才能訪問的時候則返回

    404:服務器找不到資源時,或者服務器拒絕請求又不想說明理由時

    503:服務器停機維護時,主動用503響應請求或 nginx 設置限速,超過限速,會返回503

    504:網關超時

    5.http和https的區別 https的加密方式

    ? ? ?超文本傳輸協議HTTP協議被用于在Web瀏覽器和網站服務器之間傳遞信息,HTTP協議以明文方式發送內容,不提供任何方式的數據加密,如果攻擊者截取了Web瀏覽器和網站服務器之間的傳輸報文,就可以直接讀懂其中的信息,因此,HTTP協議不適合傳輸一些敏感信息,比如:信用卡號、密碼等支付信息。

    ? ??為了解決HTTP協議的這一缺陷,需要使用另一種協議:安全套接字層超文本傳輸協議HTTPS,為了數據傳輸的安全,HTTPS在HTTP的基礎上加入了SSL/TLS協議,SSL/TLS依靠證書來驗證服務器的身份,并為瀏覽器和服務器之間的通信加密。

    ? ? ? ? HTTPS協議的主要作用可以分為兩種:一種是建立一個信息安全通道,來保證數據傳輸的安全;另一種就是確認網站的真實性。

    HTTPS和HTTP的主要區別
    ? ? ? ? 1、https協議需要到CA申請證書,一般免費證書較少,因而需要一定費用。

    ? ? ? ? 2、http是超文本傳輸協議,信息是明文傳輸,https則是具有安全性的ssl/tls加密傳輸協議。

    ? ? ? ? 3、http和https使用的是完全不同的連接方式,用的端口也不一樣,前者是80,后者是443。

    ? ? ? ? 4、http的連接很簡單,是無狀態的;HTTPS協議是由SSL/TLS+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議,比http協議安全。
    ?

    6.get,post區別

    Get和post是表單提交數據的兩種基本方式,get請求數據通過域名后綴url傳送,用戶可見,不安全,post請求數據通過在請求報文正文里傳輸,相對比較安全。

    get是通過url傳遞表單值,post通過url看不到表單域的值;

    get傳遞的數據量是有限的,如果要傳遞大數據量不能用get,比如type=“file”上傳文章、type=“password”傳遞密碼或者< text area >發? Get和post是表單提交數據的兩種基本方式,get請求數據通過域名后綴url傳送,用戶可見,不安全,post請求數據通過在請求報文正文里傳輸,相對比較安全。

    get是通過url傳遞表單值,post通過url看不到表單域的值;

    get傳遞的數據量是有限的,如果要傳遞大數據量不能用get,比如type=“file”上傳文章、type=“password”傳遞密碼或者< text area >發表大段文章,post則沒有這個限制;

    post會有瀏覽器提示重新提交表單的問題,get則沒有(加分的回答)

    7.HTTP協議中,除了GET和POST還有什么請求?

    HTTP/1.1協議中共定義了八種方法(也叫“動作”)來以不同方式操作指定的資源:

    OPTIONS:

    這個方法可使服務器傳回該資源所支持的所有HTTP請求方法。用’*'來代替資源名稱,向Web服務器發送OPTIONS請求,可以測試服務器功能是否正常運作。

    HEAD:

    與GET方法一樣,都是向服務器發出指定資源的請求。只不過服務器將不傳回資源的本文部分。它的好處在于,使用這個方法可以在不必傳輸全部內容的情況下,就可以獲取其中“關于該資源的信息”(元信息或稱元數據)。

    GET:

    向指定的資源發出“顯示”請求。使用GET方法應該只用在讀取數據,而不應當被用于產生“副作用”的操作中,例如在Web Application中。其中一個原因是GET可能會被網絡蜘蛛等隨意訪問。參見安全方法

    POST:

    向指定資源提交數據,請求服務器進行處理(例如提交表單或者上傳文件)。數據被包含在請求本文中。這個請求可能會創建新的資源或修改現有資源,或二者皆有。

    PUT:

    向指定資源位置上傳其最新內容。

    DELETE:

    請求服務器刪除Request-URI所標識的資源。

    TRACE:

    回顯服務器收到的請求,主要用于測試或診斷。

    CONNECT:

    HTTP/1.1協議中預留給能夠將連接改為管道方式的代理服務器。通常用于SSL加密服務器的鏈接(經由非加密的HTTP代理服務器)。

    方法名稱是區分大小寫的。當某個請求所針對的資源不支持對應的請求方法的時候,服務器應當返回狀態碼405(Method Not Allowed),當服務器不認識或者不支持對應的請求方法的時候,應當返回狀態碼501(Not Implemented)。

    8.cookie,session區別,應用場景

    cookie的執行原理:就是當客戶端訪問服務器的時候(服務器運用了cookie),服務器會生成一份cookie傳輸給客戶端,客戶端會自動把cookie保存起來,以后客戶端每次訪問服務器,都會自動的攜帶著這份cookie。

    Session是另一種記錄客戶狀態的機制,不同的是Cookie保存在客戶端瀏覽器中,而Session保存在服務器上。客戶端瀏覽器訪問服務器的時候,服務器把客戶端信息以某種形式記錄在服務器上。這就是Session。客戶端瀏覽器再次訪問時只需要從該Session中查找該客戶的狀態就可以了session是一種特殊的cookie。cookie是保存在客戶端的,而session是保存在服務端。

    cookie和session的共同點
    cookie和session都是用來跟蹤瀏覽器用戶身份的會話方式。

    cookie和session區別
    cookie是保存在客戶端的
    cookie有大小限制
    session是保存在服務器端
    session更加安全
    session會比較占用服務器性能,當訪問增多時應用cookie

    9.OSI七層模型

    10.arp協議與arp攻擊

    地址解析協議,即ARP(Address Resolution Protocol),是根據IP地址獲取物理地址mac的一個TCP/IP協議。主機發送信息時將包含目標IP地址的ARP請求廣播局域網絡上的所有主機,并接收對應主機返回的消息,以此確定目標的物理地址;收到返回消息后將該IP地址和物理地址存入本機ARP緩存中并保留一定時間,下次請求時直接查詢ARP緩存以節約資源。
    ARP是建立在網絡中各個主機互相信任的基礎上的,局域網絡上的主機可以自主發送ARP應答消息,其他主機收到應答報文時不會檢測該報文的真實性就會將其記入本機ARP緩存;由此攻擊者就可以向某一主機發送偽ARP應答報文,使其發送的信息無法到達預期的主機或到達錯誤的主機,這就構成了一個ARP欺騙(也稱為ARP攻擊)
    ARP命令可用于查詢本機ARP緩存中IP地址和MAC地址的對應關系、添加或刪除靜態對應關系等。
    這里需要注意的是,ARP本身是沒有重試機制的,如果有重試,有可能是上層協議采取的處理方式。

    11.瀏覽器請求,瀏覽器輸入一個連接,到展示到頁面,經過了什么

    1、DNS解析: 當用戶輸入一個網址并按下回車鍵的時候,瀏覽器得到一個域名,而在實際通信過程中,我們需要的是一個 IP地址,因此需要先把域名轉換成相應的 IP地址。

    2、TCP連接: 瀏覽器通過 DNS獲取到 Web服務器真正的 IP地址后,便向 Web服務器發起 TCP連接請求,通過 TCP三次握手建立好連接后,瀏覽器便可以將 HTTP請求數據發送給服務器了。

    3、發送 HTTP請求: 瀏覽器向 Web服務器發起一個 HTTP請求,HTTP協議是建立在 TCP協議之上的應用層協議,其本質是建立起的 TCP連接中,按照 HTTP協議標準發送一個索要網頁的請求。在這一過程中,會涉及到負載均衡等操作。

    4、處理請求并返回: 服務器獲取到客戶端的 HTTP請求后,會根據 HTTP請求中的內容決定如何獲取相應的文件,并將文件發送給瀏覽器。

    5、瀏覽器渲染: 瀏覽器根據響應開始顯示頁面,首先解析 HTML文件構建 DOM樹,然后解析 CSS文件構建渲染樹,等到渲染樹構建完成后,瀏覽器開始布局渲染樹并將其繪制到屏幕上。

    樹并將其繪制到屏幕上。

    6、斷開連接: 客戶端和服務器通過四次握手終止 TCP連接。
    ?

    12.TCP與IP 協議的區別

    1.TCP工作于傳輸層,提供面向連接、可靠的地數據傳輸服務,PDU為報文。IP工作于網絡層,提供無連接的、不可靠的、盡最大努力交付的數據報服務。PDU為分組。

    2.TCP提供應用進程之間的通信,而IP提供主機之間的通信。

    3.TCP以IP為基礎,面向應用層提供服務。IP協議為TCP提供服務。IP協議將數據從一臺主機發送至另一臺主機,TCP則保證了其傳輸可靠性。
    ?

    Linux命令

    1.查看進程,哪些進程占用了8080
    ps aux?
    (第二列是進程號)
    netstat -tln | grep 8080

    2.查看一個端口的占用情況,并殺死占用的進程
    lsof ?-i : 端口號 用于查看某一端口的占用情況,比如查看8080端口使用情況,lsof ?-i:8080
    結束進程直接 kill -9 進程號就可以了

    3.統計字符串出現的次數
    grep -c ‘object’ fileName
    案例里使用的文件:aa.txt ,用來做統計的字符串:2

    4.查找
    find

    5.新建文件
    touch

    6.查看文件
    cat

    7.修改文件
    vim

    8.查看日志
    tail

    9.修改文件權限

    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

    數據庫與SQL

    整理數據庫與SQL常見考點及真題答案戳鏈接?

  • SQL使用having
  • 數據庫外鍵
  • 創建索引、索引的分類
  • 索引的作用,索引何時無效
  • 索引和存儲過程
  • 數據庫增刪查改
  • Drop和Delete的區別
  • MYSQL關系型和非關系的有什么區別
  • MYSQL 查詢語句 where 兩張表的連接 降序排序 MySQL熟悉哪些函數
  • MYSQL索引作用是什么,建立索引的原則,索引失效,索引建的越多越好嗎,索引的底層結構
  • 1.創建表CREATE TABLE

    2.創建視圖CREATE VIEW

    視圖可以當做虛擬表格,與表格不同的是,表格中有實際存儲的資料,而視圖是建立在表格之上的一個架構,其本身不實際存儲資料。

    CREATE VIEW “VIEW_NAME”AS “SQL語句”

    3.創建索引CREATE INDEX

    索引可以幫助快速查找資料。索引的存在,數據庫系統可以先從這個索引找出需要的資料在表格的位置,在進行抓取。

    CREATE INDEX “INDEX_NAME”ON “TABLE_NAME”(COLUMN_NAME)

    4.更改表結構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

    有時需要直接從數據庫中去除一些資料。可以使用DELETE FROM實現。

    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中使用,能根據特征模式獲取我們要的數據

    SELECT “欄目名”

    FROM “表格名”

    WHERE “欄目名”LIKE{模式}

    例:WHERE store_name LIKE ‘%AN%’

    (3)BETWEEN

    可以使我們通過一個范圍獲得數據庫中的值

    SELECT “欄目名”

    FROM “表格名”

    WHERE “欄目名”BETWEEN ‘值一’AND‘值二’

    例:WHERE Date BETWEEN ‘1919-02-02’ AND ‘2020-02-20’

    (4)DISTINCT

    在表中,有可能會包含重復值,DISTINCT 可以返回唯一不同的值。

    SELECT DISTINCT 列 FROM 表

    (5)GROUP BY

    可以將表按照列屬性進行分組,進行分開處理

    SELECT “欄位1”,SUM“欄位2”

    FROM “表格名”

    GROUP BY “欄位1”

    (6)HAVING

    實現對組的值的篩選,一般跟在GROUP BY的后面,一個含有HAVING字句的SQL并不一定有GROUP BY 子句。

    SELECT “欄位1”

    FROM “表格名”

    GROUP BY “欄位1”

    HAVING (函數條件)

    (7)區別HAVING 和WHERE

    ①WHERE 和HAVING 都是用來篩選的

    ②HAVING 用來篩選組,WHERE 用來篩選記錄。where搜索條件在分組操作之前應用,having搜索條件在進行分組操作之后應用

    ③當一個查詢包含了where條件和聚合函數,先執行條件過濾,再進行聚合函數,如:SELECT SUM(score) FROM sc WHERE score > 60 先過濾出score>60的記錄,再進行SUM求和

    ④having在聚合之后進行過濾,having在分組的時候會用,對分組結果進行過濾,通常分組里面包含聚合函數,如:

    SELECT sid,AVG(score) FROM sc GROUP BY sid HAVING AVG(score) >60;

    (8)集合函數

    AVG 平均

    COUNT 計數

    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 約束唯一標識數據庫表中的每條記錄。

    主鍵必須包含唯一的值。

    主鍵列不能包含 NULL 值。

    每個表都應該有一個主鍵,并且每個表只能有一個主鍵。

    12.sql外鍵

    一、外鍵的定義

    1. 外鍵是一種索引,是通過一張表中的一列指向另一張表的主鍵,使得這兩張表產生關聯

    2. 是某個表中的一列,它包含在另一個表的主鍵中

    3. 一張表中可以有一個外鍵也可以有多個外鍵

    二、外鍵的作用

    減少單張表的冗余信息

    三、使用外鍵后想要刪除/更新主表的相關列會報錯,因為從表正在使用。使用外鍵后若想向從表中插入新列,但是外鍵值主表中沒有,會報錯,更新從表的外鍵值,但是值不在從表中會報錯。

    13.視圖與表的區別

    為什么要創建索引呢?這是因為,創建索引可以大大提高系統的性能。?
    第一,通過創建唯一性索引,可以保證數據庫表中每一行數據的唯一性。?
    第二,可以大大加快 數據的檢索速度,這也是創建索引的最主要的原因。?
    第三,可以加速表和表之間的連接,特別是在實現數據的參考完整性方面特別有意義。?
    第四,在使用分組和排序 子句進行數據檢索時,同樣可以顯著減少查詢中分組和排序的時間。?
    第五,通過使用索引,可以在查詢的過程中,使用優化隱藏器,提高系統的性能。

    缺點:

    第一,創建索引和維護索引要耗費時間,這種時間隨著數據 量的增加而增加。?
    第二,索引需要占物理空間,除了數據表占數據空間之外,每一個索引還要占一定的物理空間,如果要建立聚簇索引,那么需要的空間就會更大。?
    第三,當對表中的數據進行增加、刪除和修改的時候,索引也要動態的維護,這樣就降低了數據的維護速度。


    ?

    手寫SQL

  • 建立一個表,id,name,id自增長,且為主鍵
    在原來的表上增加一列,創建時間列,并獲取當前系統時間
    找出創建時間在某個時間范圍以內,并按照創建時間降序排列
    在原來的表上增加一百條數據,名字字段每條后邊加個0,比如第一個是name,下邊是name0,name00…(不會,求大神告知)
  • 從一張用戶信息表中統計出年齡最大的10個人(limit+order by)
  • 三門課總成績大于85的學生
  • 數據庫里面選出語文最高分
  • C++/Java/Python

    C++

    1.面向對象的三大特性,怎么解釋?

    C++ 三大特性是:封裝,繼承,多態

    封裝(encapsulation):封裝就是將抽象得到的數據和行為(或功能)相結合,形成一個有機的整體,也就是將數據與操作數據的源代碼進行有機的結合,形成“類”,其中數據和函數都是類的成員。封裝的目的是增強安全性和簡化編程,使用者不必了解具體的實現細節,而只是要通過 外部接口,一特定的訪問權限來使用類的成員。通過封裝使一部分成員充當類與外部的接口,而將其他的成員隱蔽起來,這樣就達到了對成員訪問權限的合理控制,使不同類之間的相互影響減少到最低限度,進而增強數據的安全性和簡化程序的編寫工作。

    繼承:繼承是面向對象軟件技術當中的一個概念。如果一個類B繼承自另一個類A,就把這個B稱為A的子類,而把A稱為B的父類。**繼承可以使得子類具有父類的各種屬性和方法,而不需要再次編寫相同的代碼。**在令子類繼承父類的同時,可以重新定義某些屬性,并重寫某些方法,即覆蓋父類的原有屬性和方法,使其獲得與父類不同的功能。

    多態(Polymorphisn):多態性是允許你將父對象設置成為和一個或更多的他的子對象相等的技術,賦值之后,父對象就可以根據當前賦值給它的子對象的特性以不同的方式運作。簡單的說:允許將子類類型的指針賦值給父類類型的指針。多態性在C++中都是通過虛函數(Virtual Function)實現的。虛函數就是允許被其子類重新定義的成員函數。而子類重新定義父類虛函數的做法,稱為“覆蓋”或者稱為“重寫”(override)。
    ?

    2.指針與數組的區別

    1、概念

    數組:存儲連續多個相同類型的數據;

    指針:變量,存的是地址

    2、賦值

    同類型的指針變量可以相互賦值,數組不行,只能一個一個元素的賦值或拷貝

    3、存儲方式

    數組:連續內存空間。

    指針:靈活,可以指向任意類型的數據。指向的是地址空間的內存。

    4、sizeof

    數組的sizeof求的是占用的空間(字節)。

    在32位平臺下,無論指針的類型是什么,sizeof(指針名)都是4,在64位平臺下,無論指針的類型是什么,sizeof(指針名)都是8。

  • 對類的理解
  • 對多態的理解,動態和靜態,編譯時多態和運行時多態
  • C++的內存管理,堆,棧,自由存儲區,靜態存儲區
  • STL的核心以及vector的實現(內存擴展)
  • struct和class的區別
  • 重寫與重載,function不想被重寫, 怎么辦?
  • 函數參數怎么入棧?為什么會這樣?
  • 并行(多線程,多進程,強行介紹mmap,volatile)
  • 線程與進程,進程和線程的區別,線程之間共享數據的方式
  • 什么時候使用多線程,什么時候使用多進程?那如果有很多任務,創建線程越多越好嗎?那有沒有優化的方式呢?很多線程任務,怎么解決呢
  • 進程調度有哪些常用的算法
  • 進程狀態了解嗎?
  • 進程同步方式
  • 你如何保證線程安全?(答:樂觀鎖,悲觀鎖) 用代碼實現了一個你上述說的鎖?(不是底層,怎么用volitale和Synchronized就行,當時就撿了個簡單的寫)
  • 死鎖是啥,死鎖產生的條件是什么
  • 臨界區是啥
  • 空指針,野指針(兩個指針的區別)
  • Python

  • python的一些高級特性,知不知道設計模式啊。
  • Python數據結構講下,元組和列表的區別
  • Python中可變與不可變
  • Java

  • 查詢線程使用情況
  • 查詢虛擬機使用情況
  • Tomcat了解嗎?使用Tomcat遇到的問題
  • 重寫與重載
  • Java線程池的了解情況
  • thread的run和start
  • Spring框架知道多少,說一說
  • 說說一個頁面是怎么傳到用戶面前的,著重說說spring的處理方式
  • 知道Java類嗎,里面可以類套類嗎,有這么寫過嗎?
  • Java里的權限
  • 垃圾回收算法
  • 熟悉Java的哪些數據結構==>Arraylist是數組還是鏈表==>為什么是可變長度
  • java中單例模式和靜態類的關系
  • 還會什么語言
    14. shell腳本 awk切割文件 sed替換 改名字
    15. C:\log.txt,查找文件中‘ABCD’出現的次數. cat log.txt | grep -o ‘ABCD’|wc -l C語言實現會寫嗎?

    數據結構

  • 數據結構會哪些?
  • 單鏈表是怎么回事?我要是查中間的一個節點怎么查?
  • hashmap是不是線程安全的?為什么不是?
  • HashMap原理
  • String stringbuffer stringbuilder
  • String是可變的嗎,說說底層源碼,為什么是不可變的
  • 那你說說B樹,B樹和B+樹有什么區別
  • 軟件測試

    1.黑盒白盒

    從測試方法上分,軟件測試可分為白盒測試和黑盒測試。
    (1)白盒
    把程序看成裝在一個透明的白箱子里,測試者完全知道程序的結構和算法。
    白盒測試,又稱結構測試,主要用于單元測試階段。
    白盒測試根據軟件的內部邏輯設計測試用例,常用的技術是邏輯覆蓋。
    主要的覆蓋標準有 6 種:語句覆蓋、判定覆蓋、條件覆蓋、判定/條件覆蓋、組合條件覆蓋和路徑覆蓋。
    語句覆蓋:每個語句執行一次
    判定覆蓋:每個語句+每個可能結果執行一次
    條件覆蓋:每個語句+每個條件執行一次
    判定/條件覆蓋:判定覆蓋+條件覆蓋 每個條件的每個結果出現一次
    條件組合覆蓋:每個條件結果的所有組合出現一次
    路徑覆蓋:每個執行到的路徑經過一次
    (2)黑盒
    把軟件看作一個不透明的黑箱子,完全不考慮(或不了解)軟件的內部結構和處理算法,它只檢查軟件功能是否能按照軟件需求說明書的要求正常使用,軟件是否能適當地接收輸入數據并產生正確的輸出信息,軟件運行過程中能否保持外部信息(例如文件和數據庫)的完整性等。

    黑盒測試,又稱功能測試,主要用于集成測試和確認測試階段。
    常用的黑盒測試技術包括等價類劃分、邊值分析、錯誤推測和因果圖等。
    等價類劃分:等價類就是輸入域的集合,等價類劃分就是對輸入域的劃分,分為有效和無效,分別用來檢測功能有效性和軟件容錯性。
    邊值分析:測試用例在邊界附近
    錯誤推測:人員自主推測,容易出錯的部分
    因果圖:輸入與輸出的因果關系設計

    2,軟件測試的流程

    需求分析:分析客戶的需求可不可行。
    編寫測試計劃。
    編寫測試用例:測試用例就是指導測試的文檔。
    執行測試:提交bug,回歸測試。
    編寫測試總結報告。

    3.軟件測試的方法

    1、從是否關心內部結構來看

    (1)白盒測試。

    (2)黑盒測試。

    (3)灰盒測試:是一種綜合測試法,它將“黑盒”測試與“白盒”測試結合在一起,是基于程序運行時的外部表現又結合內部邏輯結構來設計用例。

    2、從是否執行代碼看

    (1)靜態測試:指不運行被測程序本身,僅通過分析或檢查源程序的語法、結構、過程、接口等來檢查程序的正確性。

    (2)動態測試:是指通過運行被測程序,檢查運行結果與預期結果的差異,并分析運行效率、正確性和健壯性等性能指標。

    3、從開發過程級別看

    (1)單元測試:又稱模塊測試,是針對軟件設計的最小單位-程序模塊或功能模塊。其目的在于檢驗程序各模塊是否存在各種差錯,是否能正確地實現了其功能,滿足其性能和接口要求。

    (2)集成測試:又叫組裝測試或聯合,是單元測試的多級擴展,是在單元測試的基礎上進行的一種有序測試。旨在檢驗軟件單元之間的接口關系,以期望通過測試發現各軟件單元接口之間存在的問題,最終把經過測試的單元組成符合設計要求的軟件。

    (3)系統測試:是為判斷系統是否符合要求而對集成的軟、硬件系統進行的測試活動、它是將已經集成好的軟件系統,作為基于整個計算機系統的一個元素,與計算機硬件、外設、某些支持軟件、人員、數據等其他系統元素結合在一起,在實際運行環境下,對計算機系統進行一系列的組裝測試和確認測試。

    4、從執行過程是否需要人工干預來看

    (1)手工測試:就是測試人員按照事先為覆蓋被測軟件需求而編寫的測試用例,根據測試大綱中所描述的測試步驟和方法,手工地一個一個地輸入執行,包括與被測軟件進行交互(如輸入測試數據、記錄測試結果等),然后觀察測試結果,看被測程序是否存在問題,或在執行過程中是否會有一場發生,屬于比較原始但是必須執行的一個步驟。

    (2)自動化測試:實際上是將大量的重復性的測試工作交給計算機去完成,通常是使用自動化測試工具來模擬手動測試步驟,執行用某種程序設計語言編寫的過程(全自動測試就是指在自動測試過程中,不需要人工干預,由程序自動完成測試的全過程;半自動測試就是指在自動測試過程中,需要手動輸入測試用例或選擇測試路徑,再由自動測試程序按照人工指定的要求完成自動測試

    5、從測試實施組織看

    (1)開發測試:開發人員進行的測試

    (2)用戶測試:用戶方進行的測試

    (3)第三方測試:有別于開發人員或用戶進行的測試,由專業的第三方承擔的測試,目的是為了保證測試工作的客觀性

    6、從測試所處的環境看

    (1)阿爾法測試:是由一個用戶在開發環境下進行的測試,也可以是公司內部的用戶在模擬實際操作環境下進行的測試

    (2)貝塔測試:是用戶公司組織各方面的典型終端用戶在日常工作中實際使用貝塔版本,并要求用戶報告

    7、其他測試類型

    (1)回歸測試(regression testing)是指對軟件的新的版本測試時,重復執行上一個版本測試時的用例

    (2)冒煙測試(smoke testing),是指在對一個新版本進行大規模的測試之前,先驗證一下軟件的基本功能是否實現,是否具備可測性。

    (3)隨機測試(random testing),是指測試中所有的輸入數據都是隨機生成的,其目的是模擬用戶的真實操作,并發現一些邊緣性的錯誤。

    4.測試實例

    1.登錄頁面測試

    【功能測試】
    1.輸入正確的用戶名密碼是否能夠正確登錄
    用戶名存在、對應密碼存在正確 彈框:登入成功、跳轉頁面
    2.輸入錯誤的用戶名密碼是否會判斷錯誤
    ? ? ? ? 用戶名存在、對應密碼存在不正確 彈框:密碼錯誤
    ? ? ? ? 用戶名不存在、密碼存在 彈框:用戶名或密碼錯誤
    ? ? ? ? 用戶名不存在、密碼不存在 彈框:用戶名或密碼錯誤

    輸入相同賬號輸錯密碼三次以上需等待三分鐘再次輸入
    3.登陸成功后能否跳到正確頁面
    4.用戶名和密碼,如果太短或者太長,應該怎么處理
    用戶名或密碼輸入太短或太長 彈框:輸入不合法
    5.用戶名和密碼,中有特殊字符,和其他非英文的情況
    彈框:輸入不合法
    6.驗證碼:隨機生成圖片;點擊可換取隨機生成圖片

    7.輸入框可粘貼與粘貼長度:密碼框可粘貼長度不超過20,用戶賬號框粘貼長度不超過12
    8.密碼是否以星號顯示

    【界面測試(UI Test)】
    布局是否合理,2個testbox 和一個按鈕是否對齊
    testbox和按鈕的長度,高度是否復合要求
    界面是否好看
    圖片,顏色,字體,超鏈接,是否都顯示正確

    【性能測試(performance test)】
    打開登錄頁面,需要幾秒
    輸入正確的用戶名和密碼后,登錄成功跳轉到新頁面,不超過5秒
    能支持多少個用戶同時登陸

    【安全性測試(Security test)】
    登錄成功后生成的Cookie,是否是httponly (否則容易被腳本盜取)
    用戶名和密碼是否通過加密的方式,發送給Web服務器
    用戶名和密碼的驗證,應該是用服務器端驗證, 而不能單單是在客戶端用javascript驗證
    用戶名和密碼的輸入框,應該屏蔽SQL 注入攻擊
    用戶名和密碼的的輸入框,應該禁止輸入腳本 (防止XSS攻擊)
    錯誤登陸的次數限制(防止暴力破解)

    【可用性測試(Usability Test)】
    是否可以全用鍵盤操作,是否有快捷鍵
    輸入用戶名,密碼后按回車,是否可以登陸

    【兼容性測試(Compatibility Test)】
    主流的瀏覽器下能否顯示正常已經功能正常(IE,6,7,8,9, Firefox, Chrome, Safari,等)
    不同的平臺是否能正常工作,比如Windows, Mac
    移動端ios、安卓

    2.微信發紅包

    一、功能

    紅包封面:(1)不選擇會有默認封面;(2)是否可以選擇紅包封面
    紅包描述:(1)在紅包描述中是否可以輸入漢字,英文,符號,表情,純數字,漢字英語符號emjo,動態表情以及現場拍攝的圖片等;(3)紅包描述中輸入自己的表情,搶紅包的人是否可以正常看見;(4)紅包描述中最多能有多少個字符(超過10個)。
    紅包金額:(1)在紅包錢數和紅包個數輸入框中只能輸入數字(測試輸入紅包錢數是不是只能輸入數字);(2)紅包里最多和最少可以輸入的錢數(最多:200,最少:0.01);(3)如果直接輸入小數點,那么小數點之前應該有一個0;(4)當紅包錢數超過最大范圍是不是有對應的提示(一對一:200,群發:20000);(5)輸入錢數為0,“塞錢進紅包”置灰;(6)發紅包金額和收到的紅包金額應該匹配(分別測試一對一和群發的場景)。
    塞錢進紅包,扣錢順序:(1)主動設置優先級;(2)默認順序(從零錢開始支付;如果零錢不足,看那種方式付錢比較充足);(3)確認的時候,自己選擇付款方式。
    余額不足:(1)銀行卡;(2)零錢;(3)零錢通。
    支付驗證方式:(1)密碼;(2)指紋;(3)刷臉;(4)聲音;(5)免密支付。
    取消發送:可以按取消鍵,取消發送紅包;
    支付成功后,退回聊天界面;
    發送紅包:(1)測試發送出去的紅包能否撤回(可以測試轉賬能否撤回);(2)發送的紅包別人是否可以領取,針對一對一場景,測試發的紅包自己是否可以領取,群發的是否可以正常領取。
    領紅包:超過24小時沒有領取的紅包,是否還可以領取(不可以)。
    紅包記錄:(1)在發紅包界面能否看到以前的收發紅包記錄;(2)紅包記錄里的信息與實際發紅包記錄是否匹配。
    是否可以連續多次發紅包;
    退款到賬的時間。
    電腦(PC端)是否可以搶微信紅包。
    二、性能

    斷網時,無法搶紅包。
    不同網速時,發紅包,搶紅包的時間。
    發紅包和收紅包成功時的跳轉時間。
    收發紅包時的耗電量。
    三、兼容性

    蘋果、安卓是否都可以發紅包,搶紅包。
    四、界面

    發紅包界面沒有錯別字。
    搶完紅包界面沒有錯別字。
    發紅包和收紅包界面排版是否合理。
    發紅包和收紅包界面顏色搭配是否合理。
    群發紅包后,紅包收取記錄界面。
    五、安全性

    紅包唄領取以后,發送紅包人的金額是否會減少,收紅包人的金額是否會增加。
    發送紅包失敗,查看余額和銀行卡里的錢是否會變化。
    紅包發送成功,是否會收到微信支付的通知。
    六、易用性

    紅包描述中,金額,紅包個數框里是否支持復制粘貼操作。
    紅包描述,是否可以通過語音輸入。
    是否可以指紋支付,密碼支付,或者免密,刷臉等。

    3.對桌子測試(什么鬼問題

    需求測試:查看國家相關標準。
    ?
    功能:桌子是辦公,或者放置用的,首先考慮桌子的面積大小是否適度.抽屜夠不夠,高度合不合適。
    ?
    界面:桌子的版面是否平滑,桌子有沒有凹凸不平的地方
    ?
    安全:桌子肯定有它的支撐點,若支撐點不穩,容易摔壞物品,使用起來也不方便
    ?
    易用:桌子的移動性好不.它的重量是否合適
    ?
    可靠性:將桌子推倒后,再檢查桌子是否很容易被損壞.
    ?
    性能:將很重的物品放在桌子上,看它最大承受的重量是多少...

    總結

    以上是生活随笔為你收集整理的测试开发工程师面经的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。