2015-09-23 19 views
1

我想確認這次面試的問題基本上是不可能:寫入調度程序是否可以使用未決寫入,總寫入和寫入的總字節進行優化?

這個項目的目標是創建一個設備 ,可以將文件寫入到一個目錄,然後設計一個寫的實現 爲一組設備調度系統。寫調度程序系統 應由一個名爲WriteScheduler的接口和至少兩個它的具體實現組成。第一個應該是一個公平的循環調度程序,第二個應該是一個寫調度程序,它使用某些 待定寫入,總寫入和寫入的總字節數 的組合來以某種方式優化寫入。該項目的所有代碼應該是 是線程安全的。

鑑於一個未指定的接口,調度程序如何才能用這些數據進行優化?

+0

我要去猜他們期望你以合理公正的方式在各個設備上分割寫入內容? –

回答

1

它說「...以某種方式優化」。

所以正是你試圖優化顯然取決於你。對於這個問題,你的企圖優化高度(或完全)成功可能並不是特別重要。

如果我不得不猜測,我會說他們可能最基本的想法是有趣的,你可以定義一個抽象接口,然後編寫一個接口的實現,它至少在一些半有意義的方式(但仍然符合界面的規範)。

+0

聽起來像他們正在尋找你描述一些戰略模式: http://www.dofactory.com/net/strategy-design-pattern –

1

我認爲,標籤C++是一個錯誤?

好了,到了話題:

我可以想像從你提供給我們,因爲這一個接口...

的iDevice:這個界面甚至可以空接口

設備:

  • 必須實現的iDevice接口,
  • 構造消耗IWriteScheduler instannce,
  • 必須是線程明年OPS安全,
  • 方法打開(字符串路徑),
  • meth OD創建(字符串路徑),
  • 方法讀(出字節[]緩衝液,INT attempt_read_n),
  • 方法寫(在字節[]緩衝液),
  • 方法關閉(),
  • 裝置將放置鎖定周圍的所有公共方法,
  • 所有方法將可能阻塞,

現在IWriteScheduler:

  • 任務WriteAsync(i設備裝置,INT尺寸,動作writing_task)

設備行爲:

  • 設備中的寫操作是要創建具有操作 的動作把數據寫入到一個文件中,
  • 調用IWriteScheduler的一個實例: IWriteScheduler.WriteAsync(此,41561,動作),然後就可以等待,
  • 或設備可以返回任務回寫操作的調用者, 讓它決定是否等待是合適的,
  • 這是所有,

WriteScheduler:

  • 將實施IWriteScheduler,
  • 有可能對WriteAsync操作的鎖,
  • 私人類DevicesData {IDevice,total_bytes,pending_writes,total_writes,任務last_task} 初始last_task必須task_completed,可以在之下創建老年人。淨版本,
  • 必須實現的字典,
  • 虛擬WriteAsync方法,默認的實現將是 循環賽, 是什麼意思,在BlockingWrite方法,調度將根據辭典鍵的iDevice更新 正確DeviceData並用last_task的DeviceData的 開始通過鏈接基於ContinueWith下一個,
  • 簡單任務的鏈接是要確保循環調度,

其他調度方法只需從WriteScheduler繼承,覆蓋:虛擬任務WriteAsync(IDevice設備,int大小,動作writing_task);

任務鏈允許甚至延遲寫操作和更多的技巧。

對於scheduiling基於對pending_writes,total_writes和TOTAL_BYTES,也有很多的方式來安排和建立具體的規則,這樣的數據結構可以處理:

  • 有可能是每秒寫入,
  • 有可能是每秒字節數,
  • 這些可以幫助保持硬盤燒壞:),
  • 都可以用數據結構,通過插入與 任務的Thread.Sleep什麼工作來處理,但竟被d是可怕的:),
  • 一個更好的解決方案是延遲的Thread.Timer將在DeviceData 之內的Thread.Timer和一個寫入任務隊列。

我希望這是有幫助的,我對接口的實現和一些想法調度方案中提供的分析...

/IP/