網易測試開發工程師筆試體會(秋招)


題型1(單選題20*3)(2016年9月12日19:00-21:00)

不太難(涉及軟件工程、測試理論、java程序代碼、操作系統、計算機網絡等內容)

題型2(簡答題2*20)

1.一個簡單的論壇系統,以數據庫儲存如下數據: 用戶名,email,主頁,電話,聯系地址,發帖標題,發帖內容,回復標題,回復內容。每天論壇訪問量300萬左右,更新帖子10萬左右。 請給出數據庫表結構設計,並結合范式簡要說明設計思路。

參考:

一 分割思想:

1   數據庫切分:用戶庫、主題庫、回復庫

2   數據表水平切分:用戶庫1-n、主題庫1-n、回復庫1-n (比如按時間分)
3   分布式數據庫:每台計算機中都有DBMS的一份完整拷貝副本,並具有自己局部的數據庫,位於不同地點的許多計算機通過網絡互相連接,共同組成一個完整的、全局的大型數據庫。

4   論壇功能可以進行分隔,不同的服務器負責不同的功能

5  用主從數據庫,master是寫, slave是讀
6  把內容與其它信息分開,好處就是可以讓每個表的文件最小化,對數據庫操作壓力會減小,這樣保證每張表數據量很小,操作速度會快,也可以在這里使用緩存

二 索引:

針對是否建立索引有着一定的分歧:

我覺得建立索引還是很有必要的。理由如下:

1)建立索引可以加快檢索速度,對於論壇讀和寫的比例相差很大,用戶體驗當然是讀多寫少,所以綜合考慮還是要用索引,而且是加在常用的讀關鍵字上。

2)索引之所以會降低更新的速度,是因為更新還包括對索引的更新,從更新帖子10萬左右,這句話是說,我們可能對發帖標題,發帖內容,回復標題,回復內容這4個字段做更新。需要注意的是,這四個字段並不是用來建立表連接的字段,為了優化查詢速度我們不會在這四個字段上建立索引,所以從這道題目出發,我們建立的索引不會影響更新帖子的性能。只要被索引的列(例如回復表的標題ID)不被頻繁更新,即使索引所在地行的其它列被頻繁update,索引也不會被更新從而產生性能消耗,一張表一天30萬次的索引更新,因它引起的性能消耗小到即使數據庫安裝在奔騰3單核CPU下都能輕松承擔下來。

3)對於更新的速度慢的問題,我們有解決的方法,你提交更新了后,前台可以讓程序返回一個正確結果,后台開個線程異步慢慢跟新數據庫就是了,反正更新成功的前提就是假設數據庫連接永遠正確並處於可靠狀態。在數據庫和用戶之間建立一個緩沖區。(如,將更新的數據放到內存中,達到一定數量的時候再統一更新數據庫。假如以100條為例,一旦內存中達到100條數據量將這100條數據統一入庫。減少insert操作)

三 緩沖: 

讀的時候的緩沖:緩存路由表

                                主題緩存表(這個取每個區的前面100條記錄),一般來說負載最大的就是主題的第一頁,所以緩存表是個小表。 

                                另外使用hibernate,在數據庫上面加了一層緩存。

                                 生成靜態頁,緩存最熱,最新的帖子。

                                對於經常更新的數據都設計成單獨表 ,這樣可以最大程度的利用hibernate緩存

                                 緩存常用的數據和表,利用緩存來將經常被訪問的帖子留在內存中,為每條緩存的記錄添加一個訪問時間,如果長時間沒被訪問就從緩存中刪除掉,

                                避免內存過大,每次用戶看帖的時候,首先檢索緩存中時候有需要的帖子,沒有的話再訪問數據庫,然后將數據庫返回的帖子信息存儲到緩存中。

寫的時候的緩沖:數據庫和用戶之間建立緩存,將更新的數據放在內存中,異步操作的。所有的寫貼操作 放到一個隊列然后批量執行插入數據庫操作。 

預估計的緩沖:假如用戶第一次打開某標題,那將此標題的相關的前100條數據緩存到客戶斷。這樣避開對數據庫的直接查詢,減少數據庫壓力。

四 代碼優化 

1盡量避免表的連接約束通過代碼來實現約束 例如用戶id的驗證在用戶登錄時驗證這樣就可以把帖子表的用戶id外鍵去掉這樣就成了單表操作、查詢 而連接可以通過觸發來實現這樣最多是查詢了3個表而不是連接中的笛卡爾笛卡爾積  回復表的查詢限定每次查詢的記錄數例如限定10條其它的通過點擊觸發來操作"注代碼優化容易出現bug 原因有些開發工具本身有優化" 

五 數據庫性能調優 

盡量用硬件來代替軟件優化 原則就是能用硬件的盡量用硬件 比如磁盤陣列 RAID0 有條件用RAID10 加大內存 .避免小表上建索引 對論壇來說數據帖子和回復不是很重要 可以定期刪除一些垃圾帖子 樓主說的幾百萬條記錄的論壇對現在的數據庫管理系統和計算機來說永不着刻意的優化,定期維護打包備份數據庫就可以了

提高速度的關鍵: 
1.建立合理的索引並在查詢時充分利用; 
2.避免使用關聯,這樣避免整表掃描;使用關聯不如多次使用主鍵查詢來的快; 
3.一些處理的功能盡可能放到內存中來做,比如組織主題和回復; 
4.海量緩存(使用靜態頁面也是個不錯的做法)

5 定期對表進行轉儲


 2.你經常使用那些自動化測試工具,說出它們的特點?

1)QTP

 

1)QTP是一個側重於功能的回歸自動化測試工具;提 QTP(6張)供了很多插件,如:.NET的,Java的,SAP的,Terminal Emulator的等等,分別用於各自類型的產品測試。默認提供Web,ActiveX和VB。

2)QTP支持的腳本語言是VBScript,這對於測試人員來說,感覺要“舒服”得多(如相比SilkTest采用C語言)。VBScript畢竟是一種松散的、非嚴格的、普及面很廣的語言。

3)QTP支持錄制和回放的功能。錄制產生的腳本,可以拿來作為自己編寫腳本的template。錄制時,還支持一種lower level 功能,這個對於QTP不容易識別出來的對象有用,不過它是使用坐標來標識的,對於坐標位置頻繁變動的對象,采用這種方式不可行。另外,QTP的編輯器支持兩種視圖:Keyword模式和Expert模式。Keyword模式想法是好的,提供一個 描述近似於原始測試用例的、跟代碼無關的視圖(我基本很少用,除了查看、管理當前test中各個action的完整流程),而Expert就是代碼視圖,一般編寫腳本都在這個區域。

4)一個有用的工具:Object Spy,可以用來查看Run-time object和Test object屬性和方法。

5)QTP通過三類屬性來識別對象:a)Mandatory; b)Assistive; c)Ordinal identifiers。大部分情況下,通過對象的一些特定屬性值就可以識別對象(類型a)。這些屬性可以通過Tools->Object Identification 定義。

6)Object Repository(OR)是QTP存儲對象的地方。測試腳本運行后,QTP根據測試腳本代碼,從這個對象庫中查找相應對象。每個Action可以對應有一個或者多個OR,也可以設置某個OR為 sharable的,這樣可以供其他Action使用。注意,使用QTP錄制功能時,默認將被測對象放在local OR中,可以通過 Resources->Object Respository,選擇Local查看。

7)說到QTP的要點,不得不說Action。Action是QTP組織測試用例的具體形式,擁有自己的DataTable和Object Repository,支持Input和output參數。Action可以設置為share類型的,這樣可以被其他test中的Action調用(注意:QTP是不支持在一個test中調用另外一個test的,只有通過sharable action來調用)。

8)如3)所述,一個test中,多個action的流程組織,只有通過Keyword視圖查看和刪除,在Expert視圖中沒有辦法看到。

9)調用Action可以通過菜單Insert->Call to *** 來實現。QTP提供三種類型的調用方式:a)call to new Action,在當前test中創建一個新的Action;b)call to Copy of Action;c)call to existing action,調用一個re-usable action,如果這個re-usable action來自另外一個test,將以只讀的方式插入到當前test中。

10)QTP提供excel 形式的數據表格DataTable,可以用來存放測試數據或參數。DataTable有兩種類型:global 和local。QTP為DataTable提供了許多方法供存取數據,在對測試代碼進行參數化的時候,這些方法非常有用。

11)環境變量(Environment Variables)。在一個test中,環境變量可以被當前test中所有action共享。環境變量也有兩種類型:build in 和user defined。用戶自定義的環境變量可以指向一個XML文件,這樣可以實現在眾多test之間共享變量。

12)QTP可以引用外部的VBS代碼庫,通過Settings-》Resource加入,也可以ExecuteFile命令在代碼中直接執行。這種VBS庫可以為所有action和test共享。

13)QTP默認為每個test提供一個測試結果,包括Passed,Failed,Done,Warning和information幾種狀態類型,可以進行對結果Filter。但是,只能為每個test產生一個testing result,不能為多個testing產生一個總的testing result.

 

 2)postman
特點:

 

  • 更多的Http方法:Postman除了支持GET、POST、PUT、PATCH、DELETE、HEAD、OPTIONS這些常用Http方法,還支持COPY、LINK、UNLINK、PURGE。

  • 集合(Collection)功能:Postman可以管理Http請求的集合,在做完單個測試時,可以將該請求存入特定集合內。這樣在后繼的重復測試,無需重新輸入Http請求,就可以快速測試並獲得結果。集合支持輸入或導出,便於團隊共享。

  • 設置環境變量(Environment):Postman可以管理環境變量。一般我們有可能有多種環境:development、staging或local,每種環境下的請求URL有可能各不相同。通過環境變量,在切換環境測試時無需重寫Http請求

3)火狐開發者工具(fireBug)

 

 題型3.編程題2道(2*20)

1.有一袋6個的蘋果和一袋8個的蘋果,不能拆開,為了便於攜帶,購買袋數最少的,若跟購買的總數n不一致則不購買

例如:輸入20

輸出:3

2.不記得了

 

 


 


 

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM