☰
LLD面试实战指南:五步法拆解任意一道设计题
2026/11/4 2:21:16 网站建设 项目流程

LLD面试实战指南:五步法拆解任意一道设计题

【免费下载链接】The-Complete-FAANG-PreparationDive into this repository, a comprehensive resource covering Data Structures, Algorithms, 450 DSA by Love Babbar, Striver DSA sheet, Apna College DSA Sheet, and FAANG Questions! 🚀 That's not all! We've got Technical Subjects like Operating Systems, DBMS, SQL, Computer Networks, and Object-Oriented Programming, all waiting for you.项目地址: https://gitcode.com/gh_mirrors/th/The-Complete-FAANG-Preparation

本文基于 The-Complete-FAANG-Preparation 项目,只讲一件事:LLD(低层设计)面试怎么答。不复述概念,从澄清范围到类设计、原则自检,给你一套五步工作流,最后用经典电梯题完整走一遍,方法可直接照搬。

面试官为什么爱考设计题:实际在考三件事

设计题考的不是你背过几张类图,而是三种能力:

  1. 能不能把模糊需求变清晰——“设计一个电梯”本身就是不完整需求,面试官要看你敢不敢问。
  2. 能不能把需求映射成对象——从一段业务描述里提出类、划分职责、理清关系。
  3. 能不能讲清取舍——每个选择都能回答“为什么不这么做”。

经典题库相对固定:设计电梯系统、设计停车场、设计在线音乐播放器。方法通了,题目只是素材。

💡 一套五步工作流,拆解任意 LLD 设计题

记住一句话:先管住范围,再画对象,最后校验设计。

  1. 澄清范围。问最多 3 个问题,把系统边界钉死,写下全部假设,并告诉面试官你这次设计什么。人话:别设计全世界,只设计约好的那部分。
  2. 领域建模。从需求里圈出核心名词,它们就是你的候选类。人话:先找对象,别急着写方法。
  3. 类设计。每个类先给 1~3 条职责,再补属性和方法。说不出一句话职责的类,就该拆。
  4. 模式选型。遇到重复问题——全局唯一实例、可替换的算法、一对多通知——再上模式,对照下面的选型表。
  5. 原则自检。动笔前用 SOLID 清单过一遍,把大部分设计缺陷拦在草稿阶段。

把 OOP 四大核心能力当设计工具:一个场景讲透

四大支柱不是考试名词,而是你动手设计时用的四件工具。

  • 封装——管住状态变更的入口。停车场里只有车位对象自己能改“占用”状态,外部只能提交停车请求。效果:没有人能绕过计费流程直接把车位置空。
  • 继承——复用“是一种”的关系。票务系统里 Ticket 是基类,月票、年卡、访客票是子类,共享到期日等字段。新票种只加子类,老代码不动。
  • 多态——调用方在扩展时不用改。一次 charge() 调用按票的自身类型派发到对应计价算法(人话:编译期看重载,运行期看虚函数)。以后加票种,计费模块一行不改。
  • 抽象——对外只暴露约定。调度器只依赖 ElevatorService 接口,不关心背后是单梯还是梯组实现。以后换实现,外部无感。

设计模式怎么选:一张表说清楚

模式按问题形状选,不按背过的数量选。

你碰到的问题该用的模式换来的效果
全局需要一个共享实例(如计费器)单例状态唯一且一致,不会重复 new
按输入选具体类,创建逻辑散落各处工厂创建集中一处,新增类型只改一个地方
一个状态变化,多处要知情(电梯到层 → 显示屏、门控)观察者知情方注册订阅,模块间不再互相硬调用
一组可按场景换的算法(计费、调度策略)策略新算法加成新类,旧代码不动
对象构造字段多、顺序易错建造者分步构建,构建过程即文档
老组件要接入新系统,老代码改不动适配器中间包一层翻译,两边都不用动

提醒一句:说不出模式解决什么问题,就别用——过度设计是扣分项。

完整走查:五步设计一个电梯系统

题目:“设计一个电梯调度系统”。按上面的方法过一遍。

第一步,澄清范围。单梯还是多梯?门与安全要不要处理?计不计费?假设:单部电梯、N 层、只有上下呼梯、不涉及计费。向面试官声明:先按这个范围做,多梯留作扩展讨论。

第二步,领域建模。圈名词:楼层、呼梯请求、电梯、调度器、显示屏、门。核心三个:Elevator、Call、Controller,其余是配角。

第三步,类设计。职责先行,代码随后:

class Call { int floor; Direction dir; } // 一次呼梯请求 class Elevator { int curFloor; Direction dir; void run(List<Call> calls) { Call next = strategy.next(calls); // 由策略决定下一个目标 while (curFloor != next.floor) moveOneStep(); } }

Elevator 只管自己所在的层与方向;Controller 只决定哪个请求先被处理。

第四步,模式选型。调度算法抽成 Strategy(电梯算法与最短剩余时间只是两个策略);显示屏用 Observer 订阅楼层变化;若全楼共享一个计费器,则用 Singleton。

第五步,自检与讲取舍。SRP:电梯不决定顺序,调度器不动电梯;OCP:新调度算法以新策略类加入。讲取舍时主动说明:多梯难点在跨电梯分配请求,面试中留作扩展点即可,不必当场展开。

✅ 一份设计原则自检清单

写代码前过一遍,收口前再过一遍:

  • 每个类能否一句话说清职责?说不清就拆(SRP)
  • 加新需求时,能否靠新增类而不改老类?(OCP)
  • 子类放到父类的位置上,会不会出异常?(LSP)
  • 接口是否小而专注,客户端只用它需要的方法?(ISP)
  • 高层模块依赖的是接口,不是具体类?(DIP)
  • 用到的每个模式,能否一句话说清它解决什么问题?
  • 核心类能否先写出测试?(可测试性)

⏱ 面试时间管理与 LLD 题的五个常见坑

45 分钟可以这样切:0-5 分钟澄清并写下假设,5-15 分钟建模与类职责,15-35 分钟写核心流程,35-45 分钟自检并讲扩展。

五个高频坑:

  1. 不澄清就开写代码——面试官在考“你能不能管理模糊性”,抢跑就是扣分。
  2. 一个类干所有事——上帝类是清单第一条,看到就当场拆。
  3. 有相关就继承——继承表达“是一种”,是“有”的关系请用组合。
  4. 一口气堆三个模式——模式解决具体问题,不是炫技。
  5. 不讲取舍——结尾主动说清“没做什么、为什么”,这往往是加分项。

学习路径:从 OOP 笔记到真实项目

  • 先打 OOP 地基:OOP 笔记目录/) 里有 OOP 笔记和 C++ 教程,封装、继承、多态、抽象都有系统讲解。
  • 再攒自己的 LLD 题集:LLD 章节目录 是框架目录,建议用五步法画出的类图把它填起来,一道题一页。
  • 最后拿真实项目反推设计题:Projects 模块有一个完整的文件共享项目,真实界面如下。可以把它反推成一道设计题:谁管理文件列表?共享权限怎么控制?更新如何通知界面?

[![低层设计练手题参考:文件共享平台真实界面截图(Projects模块项目)](https://raw.gitcode.com/gh_mirrors/th/The-Complete-FAANG-Preparation/raw/a11d117688e845cd749a17368b664f3387eabba5/4]. Projects/Blockchain Development/Data Sharing platform/privex/docs/screenshot-dashboard.png?utm_source=gitcode_repo_files)](https://link.gitcode.com/i/f46bfbd73c7c4109023b5f503190196a)

收尾动作:45 分钟计时,每天一道题,每道配一份自检清单。

总结

LLD 面试的目标不是完美系统,而是让面试官看见你的思路有结构:先澄清、再建模、后设计、勤校验、讲取舍。五步法在手,电梯、停车场、音乐播放器都只是换素材的拼装练习。🚀

今晚就从“电梯、停车场、音乐播放器”里挑一道,用五步法写出一份完整设计——这是进步最快的方式。

【免费下载链接】The-Complete-FAANG-PreparationDive into this repository, a comprehensive resource covering Data Structures, Algorithms, 450 DSA by Love Babbar, Striver DSA sheet, Apna College DSA Sheet, and FAANG Questions! 🚀 That's not all! We've got Technical Subjects like Operating Systems, DBMS, SQL, Computer Networks, and Object-Oriented Programming, all waiting for you.项目地址: https://gitcode.com/gh_mirrors/th/The-Complete-FAANG-Preparation

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

需要专业的网站建设服务?

联系我们获取免费的网站建设咨询和方案报价,让我们帮助您实现业务目标

立即咨询