一、簡答題(本題共30分)
1. 當前計算機系統一般會採用層次結構來存儲數據,請介紹下典型的計算機存儲系統一般分爲哪幾個層次,爲什麼採用分層存儲數據能有效提高程序的執行效率?(10分)
2. Unix/Linux系統中殭屍進程是如何產生的?有什麼危害?如何避免?(10分)
3. 簡述Unix/Linux系統中使用socket庫編寫服務器端程序的流程,請分別用對應的socket通信函數表示(10分)
二、算法與程序設計題(本題共45分)
1. 使用C/C++編寫函數,實現字符串反轉,要求不使用任何系統函數,且時間複雜度最小,函數原型:char* reverse_str(char* str)。(15分)
2. 給定一個如下格式的字符串,(1,(2,3),(4,(5,6),7))括號內的元素可以是數字,也可以是另一個括號,請實現一個算法消除嵌套的括號,比如把上面的表達式變成:(1,2,3,4,5,6,7),如果表達式有誤請報錯。(15分)
3. (見下圖)
三、系統設計題(本題共25分)
在企業中,對生產數據進行分析具有很重要的意義,但是生產數據通常不能直接用於數據分析,通常需要進行抽取、轉換和加載,也就是通常說的ETL。
爲了便於開發和維護,並提高數據實時性,通常將一個完整的ETL過程分爲多個任務,組成流水線,如下圖所示:
假設任務定義和任務之間的依賴關係都保存在文件中,文件格式分別如下:
問題:
1. 下面是ETL調度系統的模塊圖,請描述各個模塊呃主要職責,以及各個線條的 含義。(10分)
2. 添加依賴關係時要避免出現環,假設系統同一個時刻只允許一個人添加任務依賴,請實現一個函數來檢查新的依賴是否導致環,依賴的上游存在環會導致非正常的調度,因此也希望能避免。(10分)
a) 函數名:checkCycle
b) 輸入:pairs,已存在的依賴關係((pre,post)……), newPair新的依賴關係(pre,post)
c) 輸出:True: 不存在環,False: 存在環
3. 如果調度時,某個任務在其依賴的任務之前執行,必然導致錯誤,請實現調度算法,確保任務按照依賴順序執行?(10分)
a) 函數名:schedule
b) 輸入1:tasks,整數數組;
c) 輸入2:task-relation,二元組數組,每個二元組表示一組關係;
d) 輸出:task id序列,並行執行的用","分隔,其他的用";"分隔;
4. 給定一個任務,如何計算出他的最晚完成時間?(10分)
a) 函數名:calMaxEndTime
b) 輸入1:tasks,3元組數組,(task_id, start_time, max_run_time);
c) 輸入2:task-relations,二元組數組,每個二元組表示一組關係;
d) 輸入3:task-id
e) 輸出:最晚完成時間;
本文從我另一篇博文搬來http://www.cnblogs.com/dwf07223/p/3336458.html