1. 程式人生 > >測試(測試開發)類相關面試題for網際網路

測試(測試開發)類相關面試題for網際網路

(1)你對測試的看法,有哪些測試方法?
測試就是為了保證可靠性,有白盒和黑盒測試,黑盒測試有邊界法等等方法。


(2)你在做效能測試的時候是怎樣進行測試的 請簡單描述一下測試的流程?
答:1.準備測試的環境(網路、範圍等) 2.計劃 設計 方案  3.測試執行,監控 4.問題分析,調優 5. 效能報告

測試流程

一般測試流程:
1.需求分析階段:只要就是對業務的學習,分析需求點。
2.測試計劃階段:測試組長就要根據SOW開始編寫《測試計劃》,其中包括人員,軟體硬體資源,測試點,整合順序,進度安排和風險識別等內容。
3.測試設計階段:測試方案一般由對需求很熟的高資深的測試工程師設計,測試方案要求根據
《SRS》
上的每個需求點設計出包括需求點簡介,測試思路和詳細測試方法三部分的方案。《測試方案》編寫完成後也需要進行評審。
4.測試方案階段:主要是對測試用例和規程的設計。測試用例是根據《測試方案》來編寫的,通過《測試方案》階段,測試人員對整個系統需求有了詳細的理解。這時開始編寫用例才能保證用例的可執行和對需求的覆蓋。測試用例需要包括測試項,用例級別,預置條件,操作步驟和預期結果。其中操作步驟和預期結果需要編寫詳細和明確。測試用例應該覆蓋測試方案,而測試方案又覆蓋了測試需求點,這樣才能保證客戶需求不遺漏。同樣,測試用例也需要評審。
5.測試執行階段:執行測試用例,及時提交有質量的Bug和測試日報,測試報告等相關文件。

(3)關於loadrunner,和抓包工具的題目

點選開啟連結  LoadRunner,是一種預測系統行為和效能的負載測試工具。通過以模擬上千萬使用者實施併發負載及實時效能監測的方式來確認和查詢問題,LoadRunner能夠對整個企業架構進行測試

LOADRUNNER的主要功能:

虛擬使用者
真實負載
定位效能
分析結果
重複測試

(4)PC端有哪些作業系統,如何測試PC端下的windows作業系統上的 qq.exe的安裝;tcp三次握手
1 Windows系列作業系統 由微軟公司生產;
2 Unix類作業系統 如SOLARIS,BSD系列(FREEBSD,openbsd,netbsd,pcbsd);
3 Linux類作業系統 如Ubuntu,Suse Linux,Fedora,等
4 Mac作業系統  由蘋果公司生產(Darwin),一般安裝於MAC電腦。


(5)問了下多型是怎麼實現的、java跟C++的區別、問測試一支筆

實現多型的主要手段有三種:1.虛方法virtual  2.抽象方法abstract 3.介面 interface 點選開啟連結

關於虛方法需要注意的幾點:虛方法必須有實現部分,哪怕是空實現。
1.父類中如果有方法需要讓子類重寫,則可以將該方法標記為virtual
2.虛方法在父類中必須有實現,哪怕是空實現。
3.虛方法子類可以重寫(override),也可以不重寫。

什麼是抽象類?通俗的說就是,光說不做的類,就是不能被例項化.

抽象類存在的意義:

1.抽象類不能被例項化,只能被其他類繼承

2.繼承抽象類的子類必須把抽象類中的所有抽象成員都重寫(實現)(除非子類也是抽象類。)

3.抽象類就是為了重寫→多型(程式碼重用)。

4.抽象類中可以有例項成員也可以有抽象成員。


虛方法和抽象方法的區別。
虛方法必須有實現,抽象方法必須沒有實現
抽象方法必須在抽象類中宣告,虛方法可以出現在抽象類中
抽象方法必須在子類中重寫,虛方法可以被重寫


什麼是介面?介面就是一種規範,協議(*),約定好遵守某種規範就可以寫通用的程式碼。
定義了一組具有各種功能的方法。(只是一種能力,沒有具體實現,像抽象方法一樣,“光說不做”)。

介面定義一種能力,子類繼承抽象類,實現介面。介面中的成員必須不能有實現。介面中的成員不能有訪問修飾符,隱式公開。介面中可以有屬性、方法、索引器等,但不能有欄位。介面中的所有程式必須被子類中全部實現。


介面存在的意義:多型。多型的意義:程式可擴充套件性。最終→節省成本,提高效率。
介面解決了類的多繼承的問題
介面解決了類繼承以後體積龐大的問題。
介面之間可以實現多繼承

總結:介面→抽象類→父類→具體類(在定義方法引數、返回值、宣告變數的時候能用抽象就不要用具體。)

能使用介面就不用抽象類,能使用抽象類就不用類,能用父類就不用子類。
避免定義“體積龐大的介面”、“多功能介面”,會造成“介面汙染”。只把相關聯的一組成員定義到一個介面中(儘量在介面中少定義成員)。單一職責原則,定義多個職責單一的介面(小介面)(組合使用)。


點選開啟連結Java並不僅僅是C++語言的一個變種,它們在某些本質問題上有根本的不同:
  (1)Java比C++程式可靠性更高。有人曾估計每50行C++程式中至少有一個BUG.姑且不去討論這個數字是否誇張,但是任何一個C++程式設計師都不得不承認C++語言在提供強大的功能的同時也提高了程式含BUG的可能性。Java語言通過改變語言的特性大大提高了程式的可靠性。
  (2)Java語言不需要程式對記憶體進行分配和回收。Java丟棄了C++ 中很少使用的、很難理解的、令人迷惑的那些特性,如操作符過載、多繼承、自動的強制型別轉換。特別地,Java語言不使用指標,並提供了自動的廢料收集,Examda提示: 在Java語言中,記憶體的分配和回收都是自動進行的,程式設計師無須考慮記憶體碎片的問題。
  (3)Java語言中沒有指標的概念,引入了真正的陣列。不同於C++中利用指標實現的“偽陣列”,Examda,Java引入了真正的陣列,同時將容易造成麻煩的指標從語言中去掉,這將有利於防止在c++程式中常見的因為陣列操作越界等指標操作而對系統資料進行非法讀寫帶來的不安全問題。
  (4)Java用介面(Interface)技術取代C++程式中的多繼承性。介面與多繼承有同樣的功能,但是省卻了多繼承在實現和維護上的複雜性。
  Java和C++各有各的優勢,無需爭論那種語言好,哪種語言不好,能夠存在就一定有它的優勢,只要你決定了要學程式設計就紮實的學好,程式語言都是相同的,學會一種,其他的學起來就很容易了。


(6)Linux下文件中的替換問題
答用vi命令中:%s//g


(7)如何實現播放器的測試例,怎麼搭建測試網路環境,怎麼模擬網路丟包環境,是否熟悉cdn,是否能從海量資料中提取top50的字 符串。
點選開啟連結
(8)面試過程:C/C++的基礎知識,記憶體洩漏、棧溢位、虛擬函式、 vector中的迭代器等;計算機網路:三次握手 ;資料結構:快速排序;測試:黑盒測試白盒測試

記憶體洩漏(Memory Leak)是指程式中己動態分配的堆記憶體由於某種原因程式未釋放或無法釋放,造成系統記憶體的浪費,導致程式執行速度減慢甚至系統崩潰等嚴重後果。 C++中記憶體洩漏的幾種情況記憶體洩漏

出現棧記憶體溢位的常見原因有2個:1> 函式呼叫層次過深,每呼叫一次,函式的引數、區域性變數等資訊就壓一次棧。2> 區域性靜態變數體積太大。

解決辦法大致說來也有兩種:

1> 增加棧記憶體的數目;增加棧記憶體方法如下,在vc6種依次選擇Project->Setting->Link,在Category中選擇output,在Reserve中輸入16進位制的棧記憶體大小如:0x10000000

2> 使用堆記憶體;具體實現由很多種方法可以直接把陣列定義改成指標,然後動態申請記憶體;也可以把區域性變數變成全域性變數,一個偷懶的辦法是直接在定義前邊加個static,呵呵,直接變成靜態變數(實質就是全域性變數)

1.容器的iterator型別
每種容器型別都定義了自己的迭代器型別,如vector:vector<int> ::iterator iter;變數名為iter。
2.begin和end操作
每種容器都定義了一隊命名為begin和end的函式,用於返回迭代器。如果容器中有元素的話,由begin返回的元素指向第一個元素。vector<int>::iterator iter=v.begin();若v不為空,iter指向v[0]。由end返回的迭代器指向最後一個元素的下一個,不存在,若v為空,begin和end返回的相同。
*iter=0;
iter++即將迭代器向前移動一個位置,即將v[0]賦值為0,由end返回的不允許進行解操作。==和!=操作符來比較兩個迭代器,若兩個迭代器指向同一個元素,則它們相等,否則不想等。
迭代器使用舉例:將vector中的元素全部賦值為0;
for(vector<int>::iterator iter=v.begin();iter!=v.end();iter++)
    *iter=0;

白盒測試:是通過程式的原始碼進行測試而不使用使用者介面。這種型別的測試需要從程式碼句法發現內部程式碼在演算法,溢位,路徑,條件等等中的缺點或者錯誤,進而加以修正。
黑盒測試:是通過使用整個軟體或某種軟體功能來嚴格地測試, 而並沒有通過檢查程式的原始碼或者很清楚地瞭解該軟體的原始碼程式具體是怎樣設計的。測試人員通過輸入他們的資料然後看輸出的結果從而瞭解軟體怎樣工作。在測試時,把程式看作一個不能開啟的黑盆子,在完全不考慮程式內部結構和內部特性的情況下,測試者在程式介面進行測試,它只檢查程式功能是否按照需求

(9)等價類劃分-答點陣圖

(10)STL資料結構相關,vector、map的底層實現,vector的擴容機制

map是無序的儲存元素,只是通過它提供的介面對裡面的元素進行訪問,底層都是採用紅黑樹實現。對映,相當於字典,把一個值對映成另一個值,可以建立字典。優點:查詢某一個數的時間為O(logn)、遍歷時採用iterator,效果不錯;缺點:每次插入值的時候,都需要調整紅黑樹,效率有一定影響;

----------------------------------------------------------------

vector是動態陣列,在堆中分配記憶體,元素連續存放,有保留記憶體,如果減少大小後,記憶體也不會釋放;如果新值大於當前大小時才會重新分配記憶體。

特點:擁有一段連續的記憶體空間,並且起始地址不變,因此能夠非常好的支援隨機存取;對頭部和中間進行新增刪除元素操作需要移動記憶體;對任何元素的訪問時間都是O(1);對最後元素操作最快(在後面新增刪除元素最快)。

總結:
1)需要經常隨機訪問且不用經常對中間元素刪除插入時使用vector;
2)如果元素是結構或類,最好將結構或類的指標放入vector中,這樣不僅能夠節省空間,而且可避免移動時構造和析構操作;
3)刪除元素時採用後面的元素覆蓋前面的元素的方法可以提高效率;


1)新增元素:Vector通過一個連續的陣列存放元素,如果集合已滿,在新增資料的時候,就要分配一塊更大的記憶體,將原來的資料複製過來,釋放之前的記憶體,在插入新增的元素;
2)對vector的任何操作,一旦引起空間重新配置,指向原vector的所有迭代器就都失效了 ;
3)初始時刻vector的capacity為0,塞入第一個元素後capacity增加為1;
4)不同的編譯器實現的擴容方式不一樣,VS2015中以1.5倍擴容,GCC以2倍擴容。

為什麼要成倍的擴容而不是一次增加一個固定大小的容量呢?採用成倍方式擴容,可以保證常數的時間複雜度,而增加指定大小的容量只能達到O(n)的時間複雜度,因此,使用成倍的方式擴容。


為什麼是以兩倍的方式擴容而不是三倍四倍,或者其他方式呢?根據查閱的資料顯示,考慮可能產生的堆空間浪費,成倍增長倍數不能太大,使用較為廣泛的擴容方式有兩種,以2倍的方式擴容,或者以1.5倍的方式擴容。
以2倍的方式擴容,導致下一次申請的記憶體必然大於之前分配記憶體的總和,導致之前分配的記憶體不能再被使用,所以最好倍增長因子設定為(1,2)之間。

(11) 1. select socket 2.執行緒同步 3. 堆排序

select函式的作用:點選開啟連結

      select()在SOCKET程式設計中還是比較重要的,可是對於初學SOCKET的人來說都不太愛用select()寫程式,他們只是習慣寫諸如 conncet()、accept()、recv()或recvfrom這樣的阻塞程式(所謂阻塞方式block,顧名思義,就是程序或是執行緒執行到這些函式時必須等待某個事件發生,如果事件沒有發生,程序或執行緒就被阻塞,函式不能立即返回)。可是使用select()就可以完成非阻塞(所謂非阻塞方式non-block,就是程序或執行緒執行此函式時不必非要等待事件的發生,一旦執行肯定返回,以返回值的不同來反映函式的執行情況。如果事件發生則與阻塞方式相同,若事件沒有發生則返回一個程式碼來告知事件未發生,而程序或執行緒繼續執行,所以效率高)方式工作的程式,它能夠監視我們需要監視的檔案描述符的變化情況——讀寫或是異常。

第十七章 優於select的epoll

關於作業系統必知必會-程序與執行緒執行緒同步的幾種方式  執行緒同步的方式主要有:  臨界區(Critical Section)、互斥量(Mutex)、訊號量(Semaphore)、事件(Event)。
1)臨界區:通過對多執行緒的序列化來訪問公共資源或一段程式碼,速度快,適合控制資料訪問。在任意時刻只允許一個執行緒對共享資源進行訪問, 如果有多個執行緒試圖訪問公共資源,那麼在有一個執行緒進入後,其他試圖訪問公共資源的執行緒將被掛起,並一直等到進入臨界區的執行緒離開,臨界區在被釋放後,其他執行緒才可以搶佔。
2)互斥量:採用互斥物件機制。 只有擁有互斥物件的執行緒才有訪問公共資源的許可權,因為互斥物件只有一個,所以能保證公共資源不會同時被多個執行緒訪問。互斥不僅能實現同一應用程式的公共資源安全共享,還能實現不同應用程式的公共資源安全共享。
3)訊號量:它允許多個執行緒在同一時刻訪問同一資源,但是需要限制在同一時刻訪問此資源的最大執行緒數目。
4)事 件: 通過通知操作的方式來保持執行緒的同步,還可以方便實現對多個執行緒的優先順序比較的操作。

(12)比較經典的資料在棧,堆,常量池中資料是如何分配儲存的。

全域性變數(區域性的靜態變數本質也屬於此範圍)儲存於堆記憶體,該段記憶體較大,一般不會溢位;函式地址、函式引數、區域性變數等資訊儲存於棧記憶體,VC6中棧記憶體預設大小為1M,對於當前日益擴大的程式規模而言,稍有不慎就可能出問題。(動態申請的記憶體即new出來的記憶體不在棧中)

程式執行時,有六個地方都可以儲存資料:

  1、 暫存器:這是最快的儲存區域,因為它位於和其他所有儲存方式不同的地方:處理器內部。然而,暫存器的數量十分有限,所以暫存器是根據需要由編譯器分配。我們對此沒有直接的控制權,也不可能在自己的程式裡找到暫存器存在的任何蹤跡。
  2、 堆疊:存放基本型別的資料和物件的引用,但物件本身不存放在棧中,而是存放在堆中(new 出來的物件)。駐留於常規RAM(隨機訪問儲存器)區域。但可通過它的“堆疊指標”獲得處理的直接支援。堆疊指標若向下移,會建立新的記憶體;若向上移,則會釋放那些記憶體。這是一種特別快、特別有效的資料儲存方式,僅次於暫存器。建立程式時,java編譯器必須準確地知道堆疊內儲存的所有資料的“長度”以及“存在時間”。這是由於它必須生成相應的程式碼,以便向上和向下移動指標。這一限制無疑影響了程式的靈活性,所以儘管有些java資料要儲存在堆疊裡——特別是物件控制代碼,但java物件並不放到其中。
  3、 堆:存放用new產生的資料。一種常規用途的記憶體池(也在RAM區域),其中儲存了java物件。和堆疊不同:“記憶體堆”或“堆”最吸引人的地方在於編譯器不必知道要從堆裡分配多少儲存空間,也不必知道儲存的資料要在堆裡停留多長的時間。因此,用堆儲存資料時會得到更大的靈活性。要求建立一個物件時,只需用new命令編制相碰的程式碼即可。執行這些程式碼時,會在堆裡自動進行資料的儲存。當然,為達到這種靈活性,必然會付出一定的代價:在堆裡分配儲存空間時會花掉更長的時間
  4、 靜態域:存放在物件中用static定義的靜態成員。這兒的“靜態”是指“位於固定位置”。程式執行期間,靜態儲存的資料將隨時等候呼叫。可用static關鍵字指出一個物件的特定元素是靜態的。但java物件本身永遠都不會置入靜態儲存空間。
  5、 常量池:存放常量。常數值通常直接置於程式程式碼內部。這樣做是安全的。因為它們永遠都不會改變,有的常數需要嚴格地保護,所以可考慮將它們置入只讀儲存器(ROM)。
  6、 非RAM儲存:硬碟等永久儲存空間。若資料完全獨立於一個程式之外,則程式不執行時仍可存在,並在程式的控制範圍之外。其中兩個最主要的例子便是“流式物件”和“固定物件”。對於流式物件,物件會變成位元組流,通常會發給另一臺機器,而對於固定物件,物件儲存在磁碟中。即使程式中止執行,它們仍可保持自己的狀態不變。對於這些型別的資料儲存,一個特別有用的技藝就是它們能存在於其他媒體中,一旦需要,甚至能將它們恢復成普通的、基於RAM的物件。

(13)平衡二叉樹、tcp與udp的區別、編譯原理、設計模式、物件的概念、c++與c的區別、最短路徑演算法、快排演算法、圖的深度/廣度遍歷、最大堆、作業系統的2個程序間的通訊方式等等

百度……

(14) 二分查詢,最長公共子序列等

相關推薦

測試(測試開發)相關試題for網際網路

(1)你對測試的看法,有哪些測試方法? 測試就是為了保證可靠性,有白盒和黑盒測試,黑盒測試有邊界法等等方法。 (2)你在做效能測試的時候是怎樣進行測試的 請簡單描述一下測試的流程? 答:1.準備測試的環境(網路、範圍等) 2.計劃 設計 方案  3.測試執行,監控 4.問題

介面測試相關試題(壹)

1 做介面測試當請求引數多時tps下降明顯,此介面根據引數從redis中獲取資料,每個引數與redis互動一次,當一組引數是tps5133,五組引數是tps1169,多次互動影響了處理效能,請詳細闡述如何改進增進效果的方案。2 介面的加密測試中對稱加密與非對稱加密有什麼區別? 如何開展測試? 請詳解對稱加密是

java關於(內部類,外部類,匿名)的相關試題

一個“.java”原始檔中是否可以包含多個類(不是內部類)?有什麼限制? 答:可以,但一個原始檔中最多隻能有一個公開類(public class)而且檔名必須和公開類的類名完全保持一 致。 Anonymous Inner Class(匿名內部類)是否可以繼承其它類?是否可以實現介面

測試用例設計經典試題——電梯,杯子,筆,桌子,洗衣機

         首先說明的是,遇到這樣的測試題目,首先應該反問面試官,需求是什麼樣的,比如是測什麼樣的杯子。        因為設計測試用例的規則應該是根據需求分析文件設計用例,客戶需求什麼,就測試什麼。但是在沒有需求分析文件的前提下, 來設計測試用例,可以考查一個測試人

每天五個java相關試題(8)--spring篇

ioc 簡單 組件 print 提交數據 常常 spring容器 效果 用戶 首先呢,假設有從事前端開發的大神或者準備從事前端開發的小夥伴無意看到我這篇博客看到這段文字歡迎加我的QQ:【 845415745 】。即將走入社會的菜鳥大學生有關於前端開發的職

Java 泛型概念相關試題

老版本 string 語言 值類型 新特性 exce cep bsp 組類型 問:Java 的泛型是什麽?有什麽好處和優點?JDK 不同版本的泛型有什麽區別? 答:泛型是 Java SE 1.5 的新特性,泛型的本質是參數化類型,這種參數類型可以用在類、接口和方法的創建中

第3章 Android基礎相關試題

sch str adapt div 再次 點擊 相關 發現 amp 1、Activity問題講解   a) Activity的生命周期     1.Activity的4種狀態       running / paused / stopped / kil

promise 以及相關試題

blog vda 異步操作 quest function cti AS AR reject https://www.cnblogs.com/lvdabao/p/es6-promise-1.html#!comments 特別好 Question:有一個url數組var ur

Java數據型——試題

精確 賦值 數據 向下轉型 down 類型 ring 1.7 不可 1、short s1 = 1; s1 = s1 + 1;有什麽錯? short s1 = 1; s1 +=1;有什麽錯? 答:對於short s1=1;s1=s1+1來說,在s1+1運算時會自動提升表達式的

Java基礎-數據試題整理

span 通過 str code 版權 內存 不變 法律 字節數組                   Java基礎-數據類型面試題整理                                   作者:尹正傑 版權聲明:原創作品,謝絕轉載!否則將追究法律責任。

《STL源碼剖析》相關試題總結

stl簡介 ash 看書 網上 散列 最大化 num 同時 自動調整 一、STL簡介 STL提供六大組件,彼此可以組合套用: 容器容器就是各種數據結構,我就不多說,看看下面這張圖回憶一下就好了,從實現角度看,STL容器是一種class template。 算法各種常見算法

hibernate相關試題(不看後悔,一看必懂)

概述 hibernate框架應用在dao層,,hibernate的底層程式碼是jdbc,它是一個開源的輕量級的框架. hibernate通過orm思想對資料庫進行crud操作.orm中文翻譯過來就是物件關係對映,它讓實體類(就是通常所說的pojo)和資料庫表對應,讓實體類的欄位和表裡的欄

百度開發工程師的試題(導航部門)

1. 程式改錯題: #include "string.h" #define TONUM(x) x - '0' int matoi(char* p)  { int i ; int res;  for (i = 0; i < strlen(p);i

各大公司資料庫相關試題集合NO2

✎✎✎第一小節>>   1. 舉出兩個判斷DDL改動的方法? 解答:你可以使用 Logminer 或 Streams   2.Coalescing做了什麼? 解答:Coalescing針對於字典管理的tablespace進行碎片整理,

各大公司資料庫相關試題集合NO1

✎✎✎第一小節>>   1.你一定得利用備份恢復資料庫,但是你沒有控制檔案,該如何解決問題呢? 解答:重建控制檔案,用帶backup control file 子句的recover命令恢復資料庫。   2.如何轉換init.ora到spfile?

連結串列相關試題

連結串列的基本操作在連結的部落格中已經有實現https://blog.csdn.net/Damn_Yang/article/details/83689944 下面我們來看看連結串列相關的面試題,非常重要 下面的題目都會一個一個實現 #include<stdio.h> type

Java 異常相關試題

問:java 異常有哪幾種,特點是什麼? 答:異常是發生在程式執行過程中阻礙程式正常執行的錯誤操作,只要在 Java 語句執行中產生異常則一個異常物件就會被建立。Throwable 是所有異常的父類,它有兩個直接子類 Error 和 Exception,其中 Exception 又被繼續劃分為被

Java 字串相關試題

問:下面程式的執行結果是什麼? String s1 = "abc"; StringBuffer s2 = new StringBuffer(s1); System.out.println(s1.equals(s2));    //1,false StringBuffer s3

Java clone 相關試題

問:為什麼需要克隆? 答:因為在程式設計中會遇到一種情況,有一個 DemoBean 的物件例項 demo1 在某一時刻已經包含了一些有效值,此時可能會需要一個和 demo1 完全相同的新物件 demo2 且此後對 demo1 的任何改動都不影響到 demo1 中的值,在 Java 中用簡單的賦值