騰訊測試崗(部分附答案)

騰訊測試崗面試經
軟件測試

  1. 你覺得測試是怎麼一個工作:保證軟件質量,是產品發佈的把關過程。主要工作爲在測試過程中發現問題,告知開發人員修改問題,並在測試報告中得出軟件的質量情況。

  2. 你對系統測試的基礎理論知識瞭解怎樣,有哪些【2次】:軟件測試過程包括單元測試(測試每個模塊的工作是否正常工作),集成測試(將已經測試過的模塊組裝起來進行測試,檢驗程序結構問題),確認測試(測試是否滿足功能要求)和系統測試(測試與系統其他部分是否協調工作,比如數據庫,硬件),驗收測試(站在用戶的角度檢驗產品質量)
    軟件測試的類型主要分爲功能測試(也叫黑盒測試,關注產品的所有功能),性能測試(負載測試和壓力測試,關注產品的穩定性和健壯性),界面測試(關注用戶的體驗)

  3. 怎麼看待軟件測試的潛力和挑戰:首先,軟件測試正在快速發展,隨着大數據的發展,傳統的測試技術可能不在適用,目前自動化測試軟件部分代替了傳統的手工測試方法,不過自動化測試工具的開發還需要大量的專業人士。站在測試人員的角度,需要深入瞭解場景並對不同的場景嘗試新的測試方法。同時還出現了敏捷測試,Develops
    敏捷測試和傳統測試的對比
    傳統測試 敏捷測試
    強調測試的計劃性,按照計劃進行 側重計劃的不斷調整以適應需求的變化
    具有階段性 強調持續測試、持續的質量反饋,模糊了階段性
    強調任何發現的缺陷要記錄下來,區分測試人員和開發人員的各自不同的責任 強調面對面的溝通、協作,強調團隊的責任,不太關注對缺陷的記錄與跟蹤
    更關注bug,圍繞bug開展一系列的活動 更關注產品本身,關注可以交付的客戶價值
    鼓勵自動化測試 基礎就是自動化測試
    強調測試的獨立性,將“開發人員”和“測試人員”角色分得比較清楚 測試人員需要參與全部開發活動,需要參與整個項目組的所有會議

  4. 你覺得軟件測試的核心競爭力是什麼:測試人員的核心競爭力在於提早發現問題,並能夠發現別人無法發現的問題。早發現問題:問題發現的越早,解決的成本越低。如果一個需求在還未實現的時候就能發現需求的漏洞,那麼這種問題的價值是最高的。發現別人無法發現的問題:所有人都能發現的問題,你發現了,那就證明你是可以被替代的。別人發現不了,而你可以發現,那麼你就是無法被替代。

  5. 哪些項目有過跟測試有過交互或者有過測試的思想:大規模迴歸測試用例分析

  6. 你覺得測試和開發需要怎麼的結合才能使軟件的質量得到更好的保障
    (1) 項目前期。測試跟進開發需求,充分理解功能需求
    (2) 項目開發階段。測試人員準備測試用例,測試數據,自動化等
    (3) 項目測試階段。測試執行
    (4) 驗收階段。準備環境給產品負責人驗收
    (5) 產品上線後。進行線上測試

  7. 你覺得單元測試可行嗎:可行,單元測試可以有效地測試某個程序模塊的行爲,是未來重構代碼的信心保證。事前可以保證質量,事後可以快速復現問題,並在修改代碼後做迴歸自測。可行性考慮的是要用一些可行的方法做到關鍵的代碼可測試,如通過邊界條件、等價類劃分、錯誤、因果,設計測試用例要覆蓋常用的輸入組合、邊界條件和異常。

  8. 怎麼設計測試用例
    測試用例包括測試編號,用例類型,前置條件,操作步驟,預期結果,實際結果等
    測試用例的特點:步驟清晰(按照執行測試的步驟一步一步編寫),結果唯一(一個測試用例只有一個測試結果),可操作性強(不同的平臺不同的測試人員測試結果相同)
    設計測試用例的方法:關鍵點(以最少的用例在合理地時間內發現最多的問題)

  1. 對黑盒測試技術:等價類劃分方法(測試每個等價類的代表性數據等同於測試該類的其他數據);邊界值(考慮輸入輸出的邊界值);錯誤猜測(列出所有可能出現的錯誤或者容易發生錯誤的清單);因果圖(窮舉條件獲得結果,對結果進行優化合並,得到策略表);正交實驗法(從正交表【均勻分佈,整齊劃一】中找出能以少數代替全面的測試用例);綜合策略
  2. 對白盒測試技術: 靜態分析方法(控制流分析技術、數據流分析技術、信息流分析技術);動態分析方法(邏輯覆蓋率測試(分支測試、路徑測試等),程序插裝等)
    設計測試用例的步驟:明確用戶需求,拆分需求,梳理業務邏輯,區分頁面測試和業務邏輯測試
  1. 安卓自動化測試工具
    Robotium(偏白盒):免費的Android UI測試工具,使用robotium需要知道package和acitivity這樣的細節,適用於爲不同的安卓版本和子版本測試自動化。爲了自動化測試還需要修改程序源代碼,不適合與系統軟件的交互,不能鎖定和解鎖智能手機或平板電腦,也沒有錄製回放功能,也不提供截圖。
    MoneyRunner(白盒):用於自動化功能測試,不必處理源代碼來做自動化測試,可以使用錄製工具來創建測試。它必須爲每個設備編寫腳本,每次測試程序的用戶界面變化都需要調整測試腳本。
    Appium: Appium利用WebDriver接口運行測試,它可以控制移動設備上的Safari和Chrome。沒有詳細的報告,減少了在移動設備上XPath支持。
    Ronaorex: 有詳細的截屏報告,能通過Wifi連接智能手機和平板電腦,可以不用XML數據格式來詳細編寫數據驅動的測試,可以詳細聲明額外的程序模塊,便於後期開發週期中測試更復雜的場景。搜索功能慢,只能在APK文件設備上工作。
    MobileTest(華爲): Android APK兼容性自動化遍歷測試,基於自動化真機測試,幫助開發者發現缺陷並定位問題。
  2. 兼容性測試怎麼測:人工測試(移動app選用不同的機型測試),藉助第三方工具測試(比如移動app的兼容性測試可以使用雲測平臺)
  3. 測試手機裏一個app
    測試移動app:內部測試(單個界面測試,界面之間的跳轉測試,啓動退出更新測試);硬件環境測試(訪問權限測試,機型測試);軟件環境測試(不同app頻繁切換的測試,不同的網絡環境的測試);性能測試(耗電量,網絡流量)
  4. 移動端有網情況下,從app提取DB速度很慢的原因怎麼測
  5. 項目中做過迴歸測試相關的
    迴歸測試:在軟件維護階段,對軟件進行修改之後進行的測試,目的是檢驗對軟件的修改是否正確
  6. 熟悉的自動化測試工具:selenium(將web操作封裝成類,用戶通過調用selenium提供的api來進行web操作)

編程語言

  1. c++和c的主要區別
    C++是面向對象的語言,而C是面向過程的結構化編程語言
    語法上:
    C++具有封裝、繼承和多態三種特性
    C++相比C,增加多許多類型安全的功能,比如強制類型轉換、
    C++支持範式編程,比如模板類、函數模板等
  2. 多態怎麼實現
    多態性
    (1)什麼是多態性(注意:多態與多態性是兩種概念)
    多態性是指具有不同功能的函數可以使用相同的函數名,這樣就可以用一個函數名調用不同內容的函數。在面向對象方法中一般是這樣表述多態性:向不同的對象發送同一條消息,不同的對象在接收時會產生不同的行爲(即方法)。總而言之就是在不考慮對象的類型的情況下直接使用對象。
    (1)增加了程序的靈活性
      以不變應萬變,不論對象千變萬化,使用者都是同一種形式去調用,如func(animal)
    (2)增加了程序額可擴展性
      通過繼承animal類創建了一個新的類,使用者無需更改自己的代碼,還是用func(animal)去調用
  3. 會Python嗎?問的較多【2次】
  4. 具體的開發語言是什麼?java?(趕緊說是Python,然後介紹了一波各種Python包)
  5. 自我評價對Python和java的理解程度
  6. 知道哪些設計模式說一下
    創建型模式,共5種:工廠方法模式、抽象工廠模式、單例模式、建造者模式、原型模式。
    結構型模式,共7種:適配器模式、裝飾器模式、代理模式、外觀模式、橋接模式、組合模式、享元模式。
    行爲型模式,共11種:策略模式、模板方法模式、觀察者模式、迭代子模式、責任鏈模式、命令模式、備忘錄模式、狀態模式、訪問者模式、中介者模式、解釋器模式。
  7. jvm內存管理,垃圾回收
    確定某個對象是需要被回收的: 通過引用計數來判斷一個對象是否可以被回收,但是若某些對象循環引用,即使將對象賦值爲null也不能回收,採用可達性分析解決這個問題
    典型的垃圾回收算法
  1. Mark-Sweep(標記-清除)算法
  2. Copying(複製)算法
  3. Mark-Compact(標記-整理)算法
  4. Generational Collection(分代收集)算法
    典型的垃圾收集器
  5. Serial/Serial Old
  6. ParNew
  7. Parallel Scavenge
  8. Parallel Old
  9. CMMS
  10. G1
    數據庫
  1. 數據庫三範式
    第一範式:當關系模式R的所有屬性都不能在分解爲更基本的數據單位時,稱R是滿足第一範式的,簡記爲1NF。滿足第一範式是關係模式規範化的最低要求,否則,將有很多基本操作在這樣的關係模式中實現不了。
    第二範式:如果關係模式R滿足第一範式,並且R得所有非主屬性都完全依賴於R的每一個候選關鍵屬性,稱R滿足第二範式,簡記爲2NF。
    第三範式:設R是一個滿足第一範式條件的關係模式,X是R的任意屬性集,如果X非傳遞依賴於R的任意一個候選關鍵字,稱R滿足第三範式,簡記爲3NF.
  2. 數據庫的內連接與外鏈接
    內連接:指連接結果僅包含符合連接條件的行,參與連接的兩個表都應該符合連接條件。
    外連接:連接結果不僅包含符合連接條件的行同時也包含自身不符合條件的行。包括左外連接、右外連接和全外連接。
    左外連接:左邊表數據行全部保留,右邊表保留符合連接條件的行。
    右外連接:右邊表數據行全部保留,左邊表保留符合連接條件的行。
    全外連接:左外連接 union 右外連接。
  3. 數據庫的事務
    特性:原子性、一致性、隔離性、持久性
  4. 如果數據庫裏有1000萬個數據,查詢時怎麼優化
    1) 在數據庫設計方面:建立索引;分區(MySQL,比如按時間分區);儘量使用固定長度的字段;限制字段長度;
    2) 在數據庫I/O方面:增加緩衝區;如果涉及表的級聯,不同的表存儲在不同的磁盤上,以增加I/O速度;
    3) 在SQL語句方面:優化SQL語句,減少比較次數;限制返回的條目數(MySQL中用limit);
    4) 在Java方面:如果是反覆使用的查詢,使用PrepaerdStatement減少查詢次數。

操作系統

  1. 說說Java多線程間的通信Wait(),notify(),notifyAll(),鎖等
    notify()方法是隨機喚醒一個線程
    notifyAll()方法是喚醒所有線程
    JDK5之前無法喚醒指定的一個線程
    如果多個線程之間通信, 需要使用notifyAll()通知所有線程, 用while來反覆判斷條件
    Java多線程開發中,我們常用到wait()和notify()方法來實現線程間的協作,簡單的說步驟如下:
  2. A線程取得鎖,執行wait(),釋放鎖;
  3. B線程取得鎖,完成業務後執行notify(),再釋放鎖;
  4. B線程釋放鎖之後,A線程取得鎖,繼續執行wait()之後的代碼;
  5. 多進程、多線程,操作系統層面的差別和聯繫

計算機網絡

  1. 什麼時候用TCP ,什麼時候用 UDP(我提到了QQ用的是UDP)
    兩種協議都是傳輸層協議,爲應用層提供信息載體。TCP協議是基於連接的可靠協議,有流量控制和差錯控制,也正因爲有可靠性的保證和控制手段,所以傳輸效率比UDP低;UDP協議是基於無連接的不可靠協議,沒有控制手段,僅僅是將數據發送給對方,因此效率比TCP要高。
    TCP一般用於文件傳輸(FTP HTTP 對數據準確性要求高,速度可以相對慢),發送或接收郵件(POP IMAP SMTP 對數據準確性要求高,非緊急應用),遠程登錄(TELNET SSH 對數據準確性有一定要求,有連接的概念)等等。
    UDP一般用於即時通信(QQ聊天 對數據準確性和丟包要求比較低,但速度必須快),在線視頻(RTSP 速度一定要快,保證視頻連續,但是偶爾花了一個圖像幀,人們還是能接受的),網絡語音電話(VoIP 語音數據包一般比較小,需要高速發送,偶爾斷音或串音也沒有問題)等等。
  2. 爲什麼QQ用UDP,QQ如何保證信息傳輸安全的
    使用UDP協議的軟件,通過應用程序本身來保證傳輸的正確性,而且即使是UDP協議,現在的網絡需要重傳的數據包時很少的。
    首先每一個 QQ 客戶端實際上都適合服務器交互,再由服務器轉發給正在通信的用戶,如果每一個 QQ 從一上線到下線的這段時間全部採用 tcp 長連接,這對服務器的負擔很大,而如果採用 tcp 短連接,頻繁的連接斷開也會造成網絡負擔,而採用 udp 則可以避開上述麻煩,減少服務器的負擔。
    不管 udp 還是 tcp,最終登陸成功之後,QQ 都會有一個 tcp 連接來保持在線狀態。這個 tcp 連接的遠程端口一般是80,採用 udp 方式登陸的時候,端口是8000。 udp 協議是無連接方式的協議,它的效率高,速度快,佔資源少,但是其傳輸機制爲不可靠傳送,必須依靠輔助的算法來完成傳輸控制。QQ 採用的通信協議以 udp 爲主,輔以 tcp 協議。由於 QQ 的服務器設計容量是海量級的應用,一臺服務器要同時容納十幾萬的併發連接,因此服務器端只有採用 udp 協議與客戶端進行通訊才能保證這種超大規模的服務。  
    QQ 客戶端之間的消息傳送也採用了 udp 模式,因爲國內的網絡環境非常複雜,而且很多用戶採用的方式是通過代理服務器共享一條線路上網的方式,在這些複雜的情況下,客戶端之間能彼此建立起來 tcp 連接的概率較小,嚴重影響傳送信息的效率。而udp 包能夠穿透大部分的代理服務器,因此 QQ 選擇了 udp 作爲客戶之間的主要通信協議。採用 udp 協議,通過服務器中轉方式。因此,現在的 IP 偵探在你僅僅跟對方發送聊天消息的時候是無法獲取到IP的。
  3. socket套接字的建立過程【2次】
    服務器端程序的編寫步驟:
    第一步:調用socket()函數創建一個用於通信的套接字。
    第二步:給已經創建的套接字綁定一個端口號,這一般通過設置網絡套接口地址和調用bind()函數來實現。
    第三步:調用listen()函數使套接字成爲一個監聽套接字。
    第四步:調用accept()函數來接受客戶端的連接,這是就可以和客戶端通信了。
    第五步:處理客戶端的連接請求。
    第六步:終止連接。
    客戶端程序編寫步驟:、
    第一步:調用socket()函數創建一個用於通信的套接字。
    第二步:通過設置套接字地址結構,說明客戶端與之通信的服務器的IP地址和端口號。
    第三步:調用connect()函數來建立與服務器的連接。
    第四步:調用讀寫函數發送或者接收數據。
    第五步:終止連接。
  4. 三次握手四次揮手
    第一次握手:建立連接時,客戶端發送syn包(syn=j)到服務器,並進入SYN_SENT狀態,等待服務器確認;SYN:同步序列編號(Synchronize Sequence Numbers)。
    第二次握手:服務器收到syn包,必須確認客戶的SYN(ack=j+1),同時自己也發送一個SYN包(syn=k),即SYN+ACK包,此時服務器進入SYN_RECV狀態;
    第三次握手:客戶端收到服務器的SYN+ACK包,向服務器發送確認包ACK(ack=k+1),此包發送完畢,客戶端和服務器進入ESTABLISHED(TCP連接成功)狀態,完成三次握手。
    1)客戶端進程發出連接釋放報文,並且停止發送數據。釋放數據報文首部,FIN=1,其序列號爲seq=u(等於前面已經傳送過來的數據的最後一個字節的序號加1),此時,客戶端進入FIN-WAIT-1(終止等待1)狀態。 TCP規定,FIN報文段即使不攜帶數據,也要消耗一個序號。
    2)服務器收到連接釋放報文,發出確認報文,ACK=1,ack=u+1,並且帶上自己的序列號seq=v,此時,服務端就進入了CLOSE-WAIT(關閉等待)狀態。TCP服務器通知高層的應用進程,客戶端向服務器的方向就釋放了,這時候處於半關閉狀態,即客戶端已經沒有數據要發送了,但是服務器若發送數據,客戶端依然要接受。這個狀態還要持續一段時間,也就是整個CLOSE-WAIT狀態持續的時間。
    3)客戶端收到服務器的確認請求後,此時,客戶端就進入FIN-WAIT-2(終止等待2)狀態,等待服務器發送連接釋放報文(在這之前還需要接受服務器發送的最後的數據)。
    4)服務器將最後的數據發送完畢後,就向客戶端發送連接釋放報文,FIN=1,ack=u+1,由於在半關閉狀態,服務器很可能又發送了一些數據,假定此時的序列號爲seq=w,此時,服務器就進入了LAST-ACK(最後確認)狀態,等待客戶端的確認。
    5)客戶端收到服務器的連接釋放報文後,必鬚髮出確認,ACK=1,ack=w+1,而自己的序列號是seq=u+1,此時,客戶端就進入了TIME-WAIT(時間等待)狀態。注意此時TCP連接還沒有釋放,必須經過2∗∗MSL(最長報文段壽命)的時間後,當客戶端撤銷相應的TCB後,才進入CLOSED狀態。
    6)服務器只要收到了客戶端發出的確認,立即進入CLOSED狀態。同樣,撤銷TCB後,就結束了這次的TCP連接。可以看到,服務器結束TCP連接的時間要比客戶端早一些。
  5. 四次揮手時,其中兩次等待分別是什麼時候,TIME_WAIT爲什麼要等待兩個時間週期
    雖然按道理,四個報文都發送完畢,我們可以直接進入CLOSE狀態了,但是我們必須假象網絡是不可靠的,有可以最後一個ACK丟失。所以TIME_WAIT狀態就是用來重發可能丟失的ACK報文。在Client發送出最後的ACK回覆,但該ACK可能丟失。Server如果沒有收到ACK,將不斷重複發送FIN片段。所以Client不能立即關閉,它必須確認Server接收到了該ACK。Client會在發送出ACK之後進入到TIME_WAIT狀態。Client會設置一個計時器,等待2MSL的時間。如果在該時間內再次收到FIN,那麼Client會重發ACK並再次等待2MSL。所謂的2MSL是兩倍的MSL(Maximum Segment Lifetime)。MSL指一個片段在網絡中最大的存活時間,2MSL就是一個發送和一個回覆所需的最大時間。如果直到2MSL,Client都沒有再次收到FIN,那麼Client推斷ACK已經被成功接收,則結束TCP連接。
  6. 瀏覽一個網頁,從客戶端開始用到了哪些協議
    上網肯定離不開TCP/IP協議,訪問網頁應該是HTTP超文本傳輸協議。涉及到上傳下載還要用到FTP文件傳輸協議。
    TCP/IP協議又名網絡通訊協議,是Internet最基本的協議、Internet國際互聯網絡的基礎,由網絡層的IP協議和傳輸層的TCP協議組成。TCP/IP 定義了電子設備如何連入因特網,以及數據如何在它們之間傳輸的標準。協議採用了4層的層級結構,每一層都呼叫它的下一層所提供的協議來完成自己的需求。通俗而言:TCP負責發現傳輸的問題,一有問題就發出信號,要求重新傳輸,直到所有數據安全正確地傳輸到目的地。而IP是給因特網的每一臺聯網設備規定一個地址。
    超文本傳輸協議(HTTP)是互聯網上應用最爲廣泛的一種網絡協議。所有的WWW文件都必須遵守這個標準。設計HTTP最初的目的是爲了提供一種發佈和接收HTML頁面的方法。
    FTP 是File Transfer Protocol的英文簡稱,而中文簡稱爲“文傳協議”。用於Internet上的控制文件的雙向傳輸。同時,它也是一個應用程序。基於不同的操作系統有不同的FTP應用程序,而所有這些應用程序都遵守同一種協議以傳輸文件。在FTP的使用當中,用戶經常遇到兩個概念:“下載”(Download)和"上傳"(Upload)。"下載"文件就是從遠程主機拷貝文件至自己的計算機上;"上傳"文件就是將文件從自己的計算機中拷貝至遠程主機上。用Internet語言來說,用戶可通過客戶機程序向(從)遠程主機上傳(下載)文件。
  7. qq是怎麼實現在線大文件的傳輸的
    通過“md5(‘文件內容’)”生成“唯一標識符”,然後根據這個標識符去判斷服務器上是否已經存在這個文件,如果存在,則不需要再次上傳。此外,md5(‘文件內容’)還可以校驗文件的完整性和文件內容是否被修改過。
    爲何根據文件內容生成唯一的標識符沒有效率問題:實驗證明,不存在效率問題,487M的文件,只用了3.29秒

Linux

  1. Linux的熟悉程度?軟鏈接瞭解嗎?
    軟鏈接:linux軟連接、類似window的快捷方式可以跨磁盤塊(硬連接不可以)。
    所以貌似軟連接更屌也更常用,硬連接唯一的特性就是刪掉任意一個其他的還存在,不過我感覺這個特性貌似並沒有什麼卵用,反而容易被濫用
  2. Linux下查看內存使用情況的命令,設置定時任務的命令
    cat /proc/meminfo
    sudo atop
    free –h

代碼和算法

  1. 字符串的逆序 手寫代碼
  2. 二叉樹遍歷
  3. 怎麼求兩條鏈表的交點
  4. 怎麼判斷鏈表環【之前看過】
  5. 快速排序原理,平均複雜度,最壞最好情況時間複雜度且數組滿足什麼要求
  6. 測試用例設計(考察邊界、邏輯)一串數字,閏年的判別
  7. 給出一些輸入樣例,關於是否是閏年的測試用例

其他

  1. 深度學習的一些應用:
  2. 語音識別——語音轉義
  3. 圖像處理——人臉識別、豬臉識別、運動監測、
  4. 自然語言領域——神經機器翻譯,問答系統,文摘生成
  5. 深度強化學習——Alpha Go
  6. 項目的架構圖 邊畫邊講述
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章