某500强后台工程师面试题:把文件从计算机A 复制到计算机B, 求程序或想法。


如果要求越快越好, 你怎么做?

如果计算机B是10000台机器,你怎么做?

如果要求绝对不能出错, 你怎么做?

如果要求断点续传,你怎么做?

请问在拷贝过程当中有可能出什么样的错误?

web 程序员 面试题 算法

miaofun 10 years, 10 months ago

这个题我觉得最重要的,就是要体现“渐进增强”这个思想特点。即规模小怎么干都行,随着要求一点点增多或者差异化的时候,再去一点点加以约束,寻找可行的做法。

越快越好:也要看具体是怎么个快。如果是追求绝对的传输速度,那么就是追究物理层速度和双方的缓存策略。如果是追求差分传输,就要上rsync了。

B是10000台机器:一主多从分发,并且这么大的范围往往是必须用互联网连接的。

绝对不能出错:hash等校验,并且话下的这么死,估计SHA-1都有点不够用。这句话还有个潜台词是“发现错了要有办法”,也就是说还要准备部分验证和部分重传的方案,其实多半也用rsync。

断点续传:如果只是要这个那就太灵活了。

可能出什么样的错误:其实大部分真真正正的传输错误,都在数据链路层就被控制了下来。所以错误往往更多的出在双方——通信一方无响应或意外中止传输,存储空间满,不一而足。
注意错误和设计缺欠并不一样。例如数据储存和处理速度不同步(这个的典型表现就是缓存区欠载或缓存区爆仓)这就是设计缺欠,而不是传输过程中出的错误。

zackxxx answered 10 years, 10 months ago

Your Answer