当您面试软件开发工作时,您可能会遇到一些系统设计问题。
特别是如果您正在寻求高级职位。
像许多软件开发一样,面试问题与现实完全不同。
面试是什么样的
面试官给你一个服务的抽象描述。您应该自己设计答案。
在面试中,你需要提问。基本上,收集需求。
- 该应用程序应该做什么?
- 人们将如何使用它?
- 有多少人会使用它?
- 应用程序是否有高负载?
通常,面试官对于他们希望看到的解决方案有一些想法。
您需要提出可以满足要求的技术和实施策略的组合。
这是一次令人生畏的交流。基本上,您必须在短短几分钟的讨论/思考中设计出一个高性能服务。
光是时间限制是不现实的。
现实世界中的系统设计
您的应用程序运行缓慢或无法很好地扩展。
那里有现有代码,您需要了解它是如何工作的。需求收集是一个弄清楚谁在使用现有服务以及它有什么问题的过程。
歧义比比皆是。您花费大量时间了解问题所在以及现有部分如何组合在一起。
现在,您需要提出一个建议的计划。所以,你写了一份设计文件。通常,您有几天或几周的时间来研究、计划和写下您的想法。
在那些日子和几周里,您将与其他工程师讨论他们的想法。有没有人有比你更好的解决方案?有没有你没有考虑过的方法?
编写设计文档后,您将与团队共享。大家都懂设计吗?有什么顾虑?我们如何改进它?
现在,您需要规划实施设计的工作。新变化的测试计划是什么?我们如何确保更改是零停机时间?其他团队需要了解和审查此设计的哪些内容?
面试与现实
现实与面试有很大不同。
让我们总结一下差异:
- 面试是全新的,抽象的新问题。现实是在现有的应用程序和依赖项中工作。
- 面试要求收集是简单的问题。现实情况是您必须清除旧代码并与了解它的高级开发人员/其他团队交谈。
- 面试需要几分钟,时间有限。现实需要数天/数周才能提出可行的系统设计。
- 在面试中你一个人工作。实际上,系统设计是高度协作的,实际上需要与许多利益相关者交谈。
- 在面试中,有一个口头计划,也许还有一两个图表。实际上,您需要能够清楚地写出设计文档并整合反馈。
- 面试期望一个完美的想法,当场。现实承认总会有权衡取舍,您需要时间和多个贡献者才能找到最佳解决方案。
- 面试相对不太关心测试计划、回填现有数据、迁移期间不丢失数据以及零停机部署。实际上,这些是最难的部分。
学习系统设计
我听到许多被系统设计吓倒的软件工程师。“我知道得不够多,我担心我会因为不知道而被解雇!”
这是真相……
您可能需要了解系统设计的要点才能通过面试阶段。这里有一些资源可以帮助系统设计面试。
但不要被吓倒并认为这份工作实际上就是那样。
相反,设计一种新方法更加微妙和协作。没有人会期望您当场为新建筑产生天才的想法。
所以,深吸一口气。你不会因为系统设计而被解雇。
每日清单
我每天早上都会为软件开发人员写一些新东西。
如果你喜欢我的文章,点赞,关注,转发!
标签:需要,系统,现实,想法,面试,设计 From: https://blog.51cto.com/u_12409319/6110901