2010-01-27 64 views
2

我在準備技術面試,並想知道我怎麼能去簡單地解釋有關的方法來設計下列程序面試官沒有進入不必要的細節4程序設計面試問題

1. Program that lets people play tic tac toe with each other over the internet?    
2. A suitable data structure for a photo editor or text editor? Why? 
3. Implementing code to operate the elevators? 
4. Implementing the rendering engine of a web browser? 

我可以拿出以下內容:

  1. 該方案主要有2個部分。其中一個涉及棋盤顯示的渲染。另一個是實際的引擎包含方法來找到獲勝的移動,AI,遊戲完成等。然後,將會有與網絡相關的代碼。

  2. 字符串的鏈接列表似乎適用於文本編輯器,因爲主要元素是文本和相關操作。對象的鏈接列表是否適合照片編輯器?

  3. 這又涉及電梯的顯示器渲染以及資源同步。

  4. 對於如何解決這個問題沒有太多線索。

足夠了嗎?我是否在處理這些問題時忽略了一些重要的細節。

+0

這看起來像功課... – 2010-01-27 00:45:44

+0

不,我正在準備技術面試。而且,我也試圖提供解決這些問題的方法。 – Epitaph 2010-01-27 00:48:54

+0

關於4,一些建議將涉及在渲染本身之前創建一個css和html解析器(一旦它不是一個真正的答案,我正在發表評論) – 2010-01-27 00:55:13

回答

4

照片編輯器是一個有趣的。

你需要考慮的照片編輯器的要求:(?16M +)的數兆字節的數據結構的一部分

  • 快速選擇,解碼和顯示
  • 的用戶操作的響應顯示油漆工具 - 刷子不應該滯後,即使刷過整個圖像
  • 縮小時可以有效地操作油漆工具嗎?
  • 有效保存爲常見格式
  • 考慮所有這些數據對CPU高速緩存和帶寬的影響 - 請注意,訪問主內存的時間可能比訪問高速緩存的時間長100倍。你如何讓大多數操作發生在緩存中?
  • 什麼共同的特點就現有的編輯們 - 撤消,圖層,效果,實時混合模式,在最終顯示通伽馬變換

我建議持有多個縮放級別較低的分辨率和比特深度(像mipmaps),以允許在不同縮放級別進行高效操作,將修改編碼爲基礎圖像的修補,而不是直接編輯基礎(即分別對每個修改分層)。這些補丁可以編碼爲一個網格,只有塗有正方形的內存分配給它們。在渲染到像素之前,編輯可以被編碼爲動作(例如,工具,鼠標向下,移動,鼠標向上) - 這允許在當前的mipmap級別上以廉價油漆作爲補丁完成並快速顯示,而後臺線程創建補丁在其他mipmap級別。