我已经面试过数百名工程师,并在系统设计面试方面写了大量文章,以下是我的一些实用建议,以帮助你成功拿到offer:
提问澄清问题我们不能缺乏专注力。提问澄清问题可以帮助我们和面试官关注正确的事情。
从面试官的角度来看,不问澄清问题通常是不予录用的信号。
以下是提问时需要考虑的一些要点。这些问题的主要目的是消除误解、混淆和模糊不清。
利用这些问题来确定功能和非功能需求。将它们作为工具,使需求保持简单和易管理。利用它们来对规模和性能限制有一个明确的认识。
专注于核心设计没有太多时间去涉及与核心设计无关的组件。跳过本问题中非特别的常见组件。
例如,在高级设计中不必包括DNS服务器,也无需在深度研究中讨论负载均衡器的内部运作。把带宽预留给在需求收集中达成一致的核心部分。
抵制展示我们广泛知识的冲动。不要被非核心功能分心。
专注于展示我们在严格时间限制下提供高质量设计的能力。让面试官们有充足的理由为我们吹嘘。
不要过早优化在会谈的早期就过度操心优化是一个警讯。
优化是复杂且昂贵的。它们需要有力的理由来说明增加的复杂性。增加的复杂性会让面试官分心,阻止他们理解高级设计。
专注于手头的任务。如果你发现自己被优化想法分心,就把它们放在一边。在深入研究部分,列出要回顾的想法。
解决深度研究问题深度研究是我们发挥自己长处的地方。利用这个机会展示我们识别问题并开发解决方案的能力,以及我们在权衡取舍时的合理论证。
到达深度研究环节时,我们应该已经积累了一份在高级设计过程中发现的可能的深度研究主题的清单。
根据重要性对清单中的主题进行排名。主题越重要,越适合深入研究。
以下是一些解决主题的建议。
- 清楚地阐述这是什么问题,解决它为什么重要。
- 提出解决方案。在面试环境中,通常两个就足够了。
- 讨论权衡。
- 挑选一个解决方案,并以强大的技术理由支持我们的决定。与面试官交流,解决任何分歧。