4个程序设计面试问题

时间:2010-01-27 00:43:06

标签: algorithm data-structures

我正准备进行技术面试,并想知道如何在不涉及不必要的细节的情况下,简单地向采访者简要介绍设计以下程序的方法

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. 该计划主要有两个部分。一个处理板显示的渲染。另一个是实际的引擎,包含找到获胜动作,AI,游戏完成等的方法。然后,将有与网络相关的代码。

  2. 字符串的链接列表似乎适用于文本编辑器,因为主要元素是文本和相关操作。链接的对象列表是否适合照片编辑器?

  3. 这再次涉及电梯的显示渲染以及资源同步。

  4. 关于如何处理这个问题,没有太多线索。

  5. 足够了吗?在解决这些问题时,我是否遗漏了一些重要细节。

1 个答案:

答案 0 :(得分:4)

照片编辑器非常有趣。

您需要考虑照片编辑器的要求:

  • 快速选择,解码和显示部分多兆字节数据结构(16M?+)
  • 响应显示绘画工具的用户操作 - 刷子不应该滞后,即使刷过整个图像
  • 你可以在缩小时有效地操作绘画工具吗?
  • 有效保存为常见格式
  • 考虑所有这些数据对CPU缓存和带宽的影响 - 请注意,访问主内存比访问缓存需要花费100倍的时间。如何在缓存中进行大多数操作?
  • 现有编辑器具有哪些常见功能 - 撤消,图层,效果,实时混合模式,最终显示传递中的伽马转换

我建议一次在内存中保持较低分辨率和位深度(如mipmap)的多个缩放级别,以便在不同的缩放级别进行高效操作,将更改编码为基本图像的补丁,而不是直接编辑基础(即图层)每个变化单独)。这些补丁可以编码为一个网格,只有绘制的正方形,分配给它们的内存。编辑可以在渲染为像素之前编码为动作(例如工具,鼠标按下,移动,鼠标向上) - 这允许在当前mipmap级别上作为补丁进行廉价绘制并快速显示,而后台线程创建补丁在其他mipmap级别。