一、簡答(30分)
1、extern “C”{}是什么含義?用來解決什么問題。(10分)
2、至少說出兩種經典設計模式,并舉例說明使用場景,有偽代碼更加.(10分)
3、TCP連接的time_wait是什么狀態,描述其發生的場景,說明它存在的好處壞處。(10分)
二、算法與程序設計(40分)
1.有一個任務執行器,每天需要定時執行很多任務(任務數N<1000),任務執行器每次只能執行一個任務而任務之間存在依賴關系,如A任務需要依賴于B任務完成后才能進行,雖然各個任務之間依賴關系復雜但是各個任務之間卻沒有循環依賴的問題。給出一個合適的任務執行順序。請詳細描述你的算法思路(如需要,可給出偽代碼來輔助描述),并分析其時間和空間復雜度。(20分)
2.編寫函數:
統計在某段英文文本完整句子的數目,文本只包括大小寫英文字母、空格、點(.)、逗號(,)。
完整句子必須包含至少一個字母并以點結束。要求:請給出完整代碼,在達到目標的情況下盡量高效,簡介。(20分)
三、系統設計題(30分)
某流量監控系統每天生成大量的數據記錄,每條記錄 包括url,訪問IP,時間,這些數據記錄需要進行存儲和維護,并提供查詢。請設計一個系統能夠存儲和維護1000億條數據,實現實時監控,并能支持一下兩種查詢:
1.指定任意一個時間段(精確到分鐘)和某個ip,查出該時段內該ip的總訪問量。
2.指定任意一個時間段(精確到分鐘)和某個url,查出該時段內對該url的總訪問量。下面是當時筆試的一些思路,具體細節不太記得了。
1.很多地方都見到這道題,extern “c”是指將該段代碼以C語言形式進行編譯、鏈接。由于C不支持函數重載,C與C++對于同一函數進行編譯后在符號表中保存的函數名存在差異,故當進行C、C++混編時會出現一些問題。
2.記得上學期還特意去借了一本《設計模式》書來看,翻是翻了幾下,結果啥也沒記住,這題直接空了。對于設計模式記得最深的一句就是“過分在意設計模式會阻礙你的創新思維”。
3.前段時間騰訊筆試時有道選擇題也是考TCP的幾個狀態,當時做錯了。回來后看了下TCP的連接和釋放,這次還真用上了。time_wait是TCP釋放四次握手中的一個狀態,當第三次握手完成時,即客戶端收到來自服務器的FIN后,再發送一個ACK,客戶便開始了time_wait狀態。
同時一個記時器開始記時,當達到2倍一個報文段在因特網中最大的生存期時代表超時。如果在超時前客戶端再次收到FIN,則表示是服務器重發的FIN,客戶端需重發送ACK。
4.依題目得知是求有向圖的一個拓撲序列。
5.直接掃描一遍。
int count_Pfect_sentence(string str) { int i = 0, cnt = 0, hasOneLetter = 0; while(str[i]) { if(str[i] == '.') { if(hasOneLetter) cnt++; hasOneLetter = 0; } else if(isalpha(str[i])) hasOneLetter = 1; i++; } return cnt; }
6.海量數據處理題,當時花了很長時間在想這兩題,感覺沒有想到什么好的思路。這樣的系統應當是實時性優先吧,在時間空間上首先考慮時間。
a、建個二維映射Map[time].bitset\, time代表某一時間點,將時間點表示為
時間秒差數字作為映射索引。第二維考慮bitset的方式, 建立一個2^32(整型的最大位數)的數組(bitset),每一個bit位0或1代表該位上代表的IP整數是否訪問過. 統計時枚舉每個時間點,再按位和indexIP進行與運算進行統計,時間效率應該不差。以保存30天為例,空間為(30243600)(2^32)bit = 2^50B = 1000TB = 1PB
b、時間以分鐘為單位,第二維直接為IP, 映射值為該分鐘訪問量。(302460)(2^32)B= 2^50B = 1000TB = 1PB
7、映射Map[url][time],將url進行字符串hash,再進行枚舉統計。
這兩題如果做成兩維映射,內存吃不消,既然兩題中的一維是已經指定的,變化的只是時間段,因此可以用一維表示,先預處理,再進行統計。
閱讀了本文,本站思而學教育網(cnrencai)筆試頻道,還為你提供以下可能你會感興趣的筆試題相關文章:
愛立信技術類筆試真題
華邦軟件工程師筆試真題
測試反應能力的筆試題