題型1(單選題20*3)(2016年9月12日19:00-21:00)java
不太難(涉及軟件工程、測試理論、java程序代碼、操做系統、計算機網絡等內容)數據庫
題型2(簡答題2*20)編程
1.一個簡單的論壇系統,以數據庫儲存以下數據: 用戶名,email,主頁,電話,聯繫地址,發帖標題,發帖內容,回覆標題,回覆內容。天天論壇訪問量300萬左右,更新帖子10萬左右。 請給出數據庫表結構設計,並結合範式簡要說明設計思路。緩存
參考:服務器
一 分割思想:網絡
1 數據庫切分:用戶庫、主題庫、回覆庫異步
2 數據表水平切分:用戶庫1-n、主題庫1-n、回覆庫1-n (好比按時間分)
3 分佈式數據庫:每臺計算機中都有DBMS的一份完整拷貝副本,並具備本身局部的數據庫,位於不一樣地點的許多計算機經過網絡互相鏈接,共同組成一個完整的、全局的大型數據庫。編輯器
4 論壇功能能夠進行分隔,不一樣的服務器負責不一樣的功能分佈式
5 用主從數據庫,master是寫, slave是讀
6 把內容與其它信息分開,好處就是可讓每一個表的文件最小化,對數據庫操做壓力會減少,這樣保證每張表數據量很小,操做速度會快,也能夠在這裏使用緩存ide
二 索引:
針對是否創建索引有着必定的分歧:
我以爲創建索引仍是頗有必要的。理由以下:
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.
更多的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.不記得了