低层设计(LOW LEVEL DESIGN)面试指南


低层设计(LOW LEVEL DESIGN,简称LLD)面试很痛苦,如果您想破解 SDE 2,FAANGM 和所有其他 TOP STARTUPS 都要求您通过这一轮,与您分享一份完整指南,帮助您顺利破解这些 LLD:

什么是低级设计(LLD)?
在低层设计面试中,您将被要求设计和实现: 一项功能;或具有多种功能的系统。
从设计开始:

  • 1. 逐步解释功能/系统的整个工作过程。
  • 2. 所有组件将在那里以及它们在使功能/系统工作中的相应作用
  • 3. 所有组件如何相互作用或不相互作用

从实施实现开始:

  • 1. 实施将对应于系统组件及其交互方式的各种类和接口。
  • 2. 实现将执行系统/功能所需任务的每个类的各种方法

把这个话题分成两部分:

  • 1. 如何掌握底层设计概念及其应用。
  • 2. 练习完成后,如何专门准备面试。

如何掌握LLD概念及其应用
低层设计(LLD)只不过是就是编码,必须通过编码来解决问题。
但是,是什么让解决 LLD 问题与解决通常的 DS/算法问题不同呢?

  • DS/Algo 问题本质上主要是数学问题。而且它们是非常假设的,很像我们在高中时经常做的数学应用题。这可能很难解决,但它们大多是为您的脑力锻炼而创建的虚假场景。
  • 另一方面,低级设计问题本质上并不是数学问题。它们大多是与现实生活情况相关的问题,不像 DS/算法问题,在这些问题中你不知道解决它后实际会实现什么。

例如,如果有人说你要编写一个数据结构,该结构不断接收整数流,并且在每个实例中都告诉你到目前为止处理的最大 K 个整数是多少,这就变成了一个 DS/算法问题。
但是如果有人告诉你设计一个多人射击游戏的实时排行榜,其中排行榜的第一页将显示前 10 名最高分,那么它就变成了一个低级设计LLD问题。
在这两个中,您都将实现一个堆,只是在后一个中,您知道它的实际用例以及它正在完成的事情。

现在我们对 LLD 有了一个简要的了解,让我们尝试掌握它
1. 首先,选择一门编程语言并掌握它的语法!您发现实施 LLD 的难度在很大程度上取决于您选择的语言。我建议您选择这 4 个中的任何一个 -Java -Python -C++ -Js 

2.其次,我建议你学习软件设计原则,因为它们可以帮助你使你的代码变得更加冗长和可读。这是实现LLD的一个重要方面。
并尝试用你有限的语言知识来编写基本程序。

这些原则被分成3类。

  • 第一类(DRYYAGNIKISS等)。
  • 第二类(抽象性、可扩展性、内聚性)
  • 第三类(SOLID原则)--最重要的一条!!!。


3. 现在,我建议你深入地学习OOPS。每种编程语言可能都不一样,但核心概念是一样的。

  • - 继承
  • - 多态性
  • - 抽象
  • - 封装

此外,还要多研究一下你的语言所特有的OOPS概念。
例如,如果你选择了C++,你必须知道什么是虚拟函数这样的概念,或者如果你选择了Python,试着弄清楚它是否可以进行多重继承?
类似这样的问题很吸引人

4.练习OOPs问题。
尝试解决基本的OOPs问题,这些问题大多在你的编程语言书的练习部分给出。
例如,创建一个公司类,其中有雇员,方法是返回公司名称或年龄大于30岁的雇员,等等。

5.学习和练习设计模式!
它们是非常有用的工具,可以使你的代码为生产做好准备,松散耦合和冗长的。
在实施LLD的过程中,保持这些模式是非常重要的。

6.现在是练习LLD问题的时候了!
你只需要一次课程。
摸索面向对象的设计面试
这是一门野兽课程。你不需要其他任何东西。
你可以在这里得到它,它是完全上传的。

相信我,本课程中的问题就足够了。如果您每天做 1 个问题,您可能需要 15-20 天才能完成本课程!
本课程解释了尝试 LLD 问题的程序。深入学习和实践每一步,不要错过任何一步。了解 UML、类图、用例图、序列图和活动图。本课程中的所有内容都很重要!

面试官可能会以两种不同的方式提问: 1. 或者他们只会要求您实现一个执行某些功能的 API。2. 或者他们会以标准的方式问你——设计一个 XYZ 系统
无论哪种情况,面试官都会给你一个模糊的问题陈述。就问题的清晰度与他同步是你的工作。此外,面试官主要会根据你如何从那个模糊的问题中列举各种系统要求来判断你。