软件工程术语库·编码与设计篇

软件工程术语库·编码与设计篇

术语定位:术语 = 你和 AI 的共享词汇表,用公认术语写 prompt 比自造词高效得多。

本篇目录

  • 〇、为什么要有这份术语库
  • 一、代码质量与重构
    • [1.1 代码坏味道类(Code Smells)](#1.1 代码坏味道类(Code Smells) "#s1-1")
    • [1.2 复杂度类](#1.2 复杂度类 "#s1-2")
    • [1.3 质量度量类](#1.3 质量度量类 "#s1-3")
    • [1.4 原则类](#1.4 原则类 "#s1-4")
    • [1.5 通用编程基础](#1.5 通用编程基础 "#s1-5")
  • 二、软件架构与设计模式
    • [2.1 架构原则类](#2.1 架构原则类 "#s2-1")
    • [2.2 设计模式类(GoF 经典)](#2.2 设计模式类(GoF 经典) "#s2-2")
    • [2.3 面向对象与模块化类](#2.3 面向对象与模块化类 "#s2-3")
    • [2.5 分层对象模型](#2.5 分层对象模型 "#s2-4")
    • [2.4 数据与状态类](#2.4 数据与状态类 "#s2-5")
  • 八、并发与多线程
  • 十三、数据结构与算法

〇、为什么要有这份术语库

写命令/Skill 时,检查维度用一个「公认术语词」就够(如 ComplexityDuplication),因为 AI 脑子里已经有这些概念 ------你只需说对术语,它就能调动已有知识去查,比自造词高效。 关键

  • 用「公认术语」→ Claude 的完整理解去查 → 更全面(模糊的正确)
  • 用「自造词」→ 理解有歧义 → 效果差
  • 用「具体规则」→ 会漏掉规则没写到的场景(精确的错误) 来源:公认术语来自软件工程的经典知识(代码坏味道、SOLID、架构评估框架、各领域官方规范),不是发明,是行业标准。

一、代码质量与重构

1.1 代码坏味道类(Code Smells)

  • Code Smell:代码的表层信号,暗示更深层设计问题。==
  • Duplicated Code(重复代码):相同逻辑在多个地方出现。需求变更时漏改一处就产生不一致 bug,是最常见、重构收益最大的坏味道。
  • Long Method(长方法):方法过长、承载多个职责(常见阈值 >20-30 行)。越长越难理解与测试,标准重构是 Extract Method。
  • Large Class(大类):单个类承载过多字段与职责(阈值 >300 行或 >5 项职责)。违反单一职责、难以复用,重构是 Extract Class。
  • Feature Envy(特性依恋):一个方法对另一类的数据「兴趣」超过自己所在类。说明方法放错归属、推高耦合,重构是 Move Method。
  • God Object(上帝对象):一个类集中了过多互不相关的职责。严重违反 SRP、极难测试维护;判断法------说不清它做什么而不用「和」字,就是做太多。
  • Spaghetti Code(意大利面条代码):控制流被 goto/标志位/深层嵌套搅乱、依赖缠结。极难阅读调试演进,必须系统重构。
  • Magic Number(魔数):代码中直接出现无语义的数字(86400、0.15)。语义不明、改一处易漏多处,应替换为具名常量。
  • Dead Code(死代码):不再被执行的代码(未用变量/导入/分支/类)。白白增加阅读维护成本、误导读者,删除是零风险收益。
  • Shotgun Surgery(散弹式修改):改一个需求要改许多分散的类。高耦合典型症状,一处改动波及全系统。
  • Long Parameter List(长参数列表):方法参数超过 3-4 个。调用易错、难维护,重构为参数对象或方法对象。
  • Primitive Obsession(基本类型偏执):过度使用基本类型表示领域概念(如用 String 表示手机号、金额)。缺失类型校验、业务逻辑散落,应封装为值对象。
  • Comments(过多注释) :用注释解释代码在做什么。注释会和代码漂移,好代码应自解释,注释只说「为什么」不说「是什么」。

1.2 复杂度类

  • Cyclomatic Complexity(圈复杂度):用「决策点数 + 1」度量线性独立路径数量。客观、可自动计算、与缺陷率正相关,团队质量阈值通常 <10。
  • Cognitive Complexity(认知复杂度):度量读懂代码的脑力成本,对嵌套层数叠加惩罚。比圈复杂度更贴近人读代码的真实体验,业界常双指标并用(圈 <10、认知 <15)。
  • Big-O Notation(大 O 记号):描述算法运行时间/内存随输入规模增长的上界(O(1)/O(n)/O(n²)...)。提供与硬件无关的性能语言,用于选数据结构和算法。
  • Coupling(耦合):模块间相互依赖的程度。高耦合使系统脆弱、改动牵连广,低耦合是良好设计标志。
  • Cohesion(内聚):模块内部元素共同服务单一职责的程度。高内聚模块健壮、可复用、行为可预测,与低耦合共同构成设计质量基石。
  • N+1 Query Problem:先查 N 条主记录、再对每条各发一次关联查询,共 N+1 次 SQL。最常见性能坏味道,用 eager loading/join 消除。
  • Nesting Depth(嵌套深度):if/循环的嵌套层数。深嵌套是认知复杂度主要来源,需早返回或提取方法化解。
  • Circular Dependency(循环依赖):模块 A 依赖 B、B 又反向依赖 A。破坏模块边界、难理解难测试,依赖卫生必须清除。
  • Dependency Direction(依赖方向):模块间依赖箭头应指向稳定/抽象层。方向错误导致底层改动向上游连锁扩散。
  • Dependency Hygiene(依赖卫生) :依赖整洁度检查(import 是否都用、有无循环依赖、版本是否冲突)。冗余依赖拖慢构建、加大变更风险。

1.3 质量度量类

  • Code Coverage(代码覆盖率) :白盒度量,测试执行期间代码行/分支被运行的比例。衡量「代码被执行多少」,但不衡量测试质量------高覆盖是必要非充分条件。
  • Test Coverage(测试覆盖率):广义度量,包含需求覆盖、场景覆盖、代码覆盖,不局限于代码执行比例。保证「该测的功能测了」,与代码覆盖率互补。
  • Technical Debt(技术债):为短期交付写的「不太对」的代码像借债,不偿还要付「利息」。不是坏代码别名,而是有意的速度-质量权衡,关键要定期偿还。
  • Code Review(代码审查):人对代码 diff 做人工评审。提供静态分析给不了的上下文判断,是缺陷进入主干前的人工防线。
  • Static Analysis(静态分析):不执行程序、解析源码找问题(SAST)。每次提交规模化、零成本发现已知坏模式(SQL 注入/死代码/硬编码密钥),但有误报、无法评估业务意图。
  • Dynamic Analysis(动态分析):运行程序时收集执行信息找问题(如内存泄漏、性能瓶颈)。能发现静态分析无法覆盖的运行时问题。
  • Maintainability(可维护性):代码易被修改、扩展、修复的程度。软件生命周期 80% 成本在维护阶段,是最重要质量维度之一。
  • Code Readability(代码可读性):代码被他人快速理解的程度。可读的代码才敢改、少出错。
  • Self-Documenting Code(自解释代码):代码本身清晰到无需额外注释说明逻辑。减少注释与代码漂移失配。
  • Naming Convention(命名规范) :标识符(类/方法/变量)的统一命名规则。命名是代码可读性的基础,统一规范降低团队沟通成本。

1.4 原则类

  • DRY(Don't Repeat Yourself):每份知识必须在系统中只有单一、权威的表示。重复是需求变更时漏改的 bug 温床(违反的英文叫 WET)。
  • KISS(Keep It Simple, Stupid):多数系统简单才能工作得最好。简单代码易读易改,不必要的复杂是缺陷与成本的来源。
  • YAGNI(You Aren't Gonna Need It):只在真正需要时才实现,绝不提前做。超前功能白付开发测试文档成本,且大概率永远用不上。
  • SOLID:架构判断提供统一词汇(SRP/OCP/LSP/ISP/DIP)。
  • Single Responsibility(SRP):一个类只有一个职责、只有一个变更理由。职责单一使模块更小更易测,是消除 God Object 的依据。
  • Open/Closed(OCP):对扩展开放、对修改关闭。不改旧代码就不引入新 bug。
  • Liskov Substitution(LSP):子类应能无副作用替换父类。违反导致多态失效(经典反例:Square 继承 Rectangle)。
  • Interface Segregation(ISP):胖接口应拆成客户端专属小接口。不强迫使用者实现用不到的方法。
  • Dependency Inversion(DIP):高层不依赖低层,都依赖抽象。用抽象隔开高低层,使核心不被底层实现绑架。
  • Law of Demeter(迪米特法则/最少知识原则) :对象只与「直接的朋友」交谈。防止 a.getB().getC().doX() 链式穿透,实现低耦合。
  • Separation of Concerns(SoC,关注点分离):把不同职责分到独立模块,一次只处理一个关注点。降低耦合提升复用,分层架构的根基。
  • Least Privilege(最小权限原则):只授予完成任务所需的最小权限。缩小攻击面,降低误操作影响。
  • Fail Fast(快速失败):错误发生时立即暴露、终止,不允许带病运行。问题早发现早修复,避免错误扩散到下游。
  • Composition Over Inheritance(组合优于继承) :优先用对象组合实现复用,少用类继承。继承是强耦合,组合更灵活、更易测试。

1.5 通用编程基础

  • Serialization / Deserialization(序列化/反序列化):把对象转成可存储/传输的字节流/JSON,反序列化是反向还原。跨进程通信、存储、网络传输的基础。
  • Generics(泛型):参数化类型,让类/方法可以适配多种类型而不牺牲类型安全。代码复用、类型检查在编译期完成,避免强制类型转换。
  • Reflection(反射):程序在运行时可以获取类信息、调用方法、访问字段。框架实现的基础(DI、JSON序列化、注解处理),但性能低、破坏封装。
  • Annotation(注解):给代码加元数据标记,可在编译期或运行时读取处理。框架配置、代码生成、静态检查的基础(如@Override、@Inject)。
  • Lambda Expression(Lambda表达式):匿名函数,可作为参数传递。函数式编程的基础,简化回调、集合操作代码。
  • Closure(闭包):函数可以捕获其定义时所在作用域的变量。回调、函数式编程的核心特性。
  • Exception(异常):程序运行时的错误事件,分受检异常(必须捕获)和非受检异常(运行时异常)。统一错误处理机制,避免错误被忽略。
  • Callback(回调):把函数作为参数传入,事件发生时被调用。异步编程的基础,但多层回调会导致回调地狱。
  • Immutable Object(不可变对象):创建后状态不能修改的对象。天生线程安全、可共享、无副作用,是并发编程最佳实践。
  • First-Class Function(一等函数):函数可以作为参数传递、作为返回值、赋值给变量。函数式编程的基础特性。
  • Type System(类型系统):静态类型在编译期检查,动态类型在运行时检查。静态类型提前发现错误、IDE支持好;动态类型灵活、开发快。
  • Garbage Collection(GC,垃圾回收):运行时自动回收不再使用的内存。避免手动内存管理的泄漏、野指针问题,但会有STW停顿。
  • Memory Leak(内存泄漏):不再使用的对象仍被引用无法回收。长期运行会导致OOM,是服务端和移动端常见问题。
  • Stack Overflow(栈溢出):调用栈超过最大深度,通常是无限递归导致。递归代码必须设置终止条件。

二、软件架构与设计模式

2.1 架构原则类

  • Architecture(架构):系统高级结构------组件及其关系的设计。架构选错是最高成本的技术债,后期重构代价指数级增长。
  • Layered Architecture(分层架构):按职责分横向层级(表现层/业务层/数据层),依赖单向向下。结构直观、职责清晰,最普遍的分层方式;缺点是易导致业务依赖数据层,难满足依赖倒置。
  • Onion Architecture(洋葱架构):领域模型在最内层,外层只能向内依赖,核心不依赖任何外部框架。核心不受基础设施更换影响,测试性极强。
  • Hexagonal Architecture(六边形架构/端口适配器):核心业务居中,端口定义接口、适配器连接外部(数据库/API/UI)。与洋葱架构同源思想------核心零外部依赖、独立演进,天然支持 TDD。
  • Clean Architecture(整洁架构):融合洋葱/六边形思想,依赖规则永远指向内层抽象。统一了分层架构的依赖方向,是后端架构的主流指导思想。
  • Module Boundaries(模块边界):模块间明确定义的依赖与交互接口。边界画错,后期拆成微服务改造成本极高。
  • Microservices(微服务):拆成一组小型独立服务,独立部署、独立伸缩、围绕业务能力组织。独立部署/故障隔离/团队自治;代价是分布式复杂度(网络延迟、数据一致性、运维成本)显著上升,符合康威定律。
  • Modular Monolith(模块化单体):单个部署单元,但内部按业务模块严格划分边界、模块间仅通过接口通信。兼顾单体的简单和微服务的边界清晰,是中小团队的最优架构选择,未来可平滑拆分微服务。
  • Monolith(单体架构):所有组件打包成一个可部署单元。项目初期开发速度最快;规模增长后易形成大泥球,成为迭代瓶颈。
  • Event-Driven Architecture(EDA,事件驱动架构):组件响应事件通知,发布者不关心谁接收。松耦合、可伸缩、一对多扇出;代价是难调试、引入最终一致性。
  • Client-Server(客户端-服务器):客户端发起请求、服务器响应。最基础的分布式交互模型,简单可预测(REST 是典型实现)。
  • Progressive Disclosure(渐进式披露):UX 领域术语,先展示核心信息,按需加载细节;在 LLM 工程中指按需加载知识、不一次性全量注入。LLM 场景可显著节省 token,避免上下文干扰。
  • Pipeline(流水线架构):任务拆成串行阶段,每阶段输出是下阶段输入。分解复杂任务、便于编排与责任隔离,是 CI/CD 和多 Agent 工作流的基础。
  • CQRS(命令查询职责分离):将写操作(命令)和读操作(查询)用不同模型实现。读写性能可分别优化,适合读写比悬殊的场景;代价是增加复杂度。
  • Event Sourcing(事件溯源):不存对象当前状态,存所有状态变更事件,通过重放事件得到当前状态。完整审计轨迹、可回溯任意时间点状态;适合金融、账务系统。
  • Conway's Law(康威定律) :系统设计的结构,会复制组织的沟通结构。设计架构前先设计团队结构,微服务边界应和团队边界对齐。

2.2 设计模式类(GoF 经典)

  • Singleton(单例模式):确保一个类只有一个实例,提供全局访问点。适合共享唯一资源(配置、连接池);但滥用会造成全局可变状态、难以测试,现代工程优先用 DI 容器管理单例。
  • Factory Method(工厂方法):定义创建对象的接口,让子类决定实例化哪个类。解耦「创建」与「使用」,符合开闭原则。
  • Abstract Factory(抽象工厂):提供接口创建一系列相关对象,无需指定具体类。适合跨平台、多产品族的对象创建。
  • Builder(建造者模式):将复杂对象的构建与表示分离,分步构建对象。解决长参数列表问题,适合构建配置复杂的对象。
  • Observer(观察者模式):一对多依赖,被观察对象变化时自动通知所有依赖者。实现事件/发布-订阅解耦(前端 Hooks、事件总线都是此思想)。
  • Strategy(策略模式):定义一族可互换算法,封装起来使它们可互相替换。运行时切换行为而不改调用方,消除大量 if-else。
  • Adapter(适配器模式):把一个类的接口转换成客户端期望的另一个接口。不修改已有代码即可复用能力,解决接口不兼容问题。
  • Decorator(装饰器模式):动态给对象附加新职责,不改变其结构。避免「子类爆炸」,可组合叠加可选功能(如 Java IO 流、Python 装饰器)。
  • Facade(外观模式):为复杂子系统提供统一的简化接口。降低客户端耦合、隐藏内部复杂度。
  • Proxy(代理模式):为其他对象提供代理以控制访问。实现延迟加载、权限控制、日志增强(AOP、RPC 客户端都是此模式)。
  • Chain of Responsibility(责任链模式):把请求处理者连成一条链,请求沿链传递直到被处理。解耦发送者和处理者,可动态添加处理者(中间件、拦截器都是此模式)。
  • Template Method(模板方法模式):父类定义算法骨架,子类实现具体步骤。复用公共流程,子类只改差异部分。
  • State Pattern(状态模式):把对象的每个状态封装成类,状态改变时改变行为。消除大量状态判断if-else,符合开闭原则。
  • Command Pattern(命令模式):把请求封装成对象,可排队、撤销、日志记录。实现操作撤销、任务队列、宏命令。
  • Repository Pattern(仓储模式):用类集合接口在领域层和数据层之间做中介,封装数据访问逻辑。隔离数据库细节、集中查询逻辑、便于单元测试 mock。
  • Unit of Work(工作单元模式):跟踪一个业务事务内的所有对象变更,一次性提交。保证事务一致性,避免多次数据库提交。
  • Dependency Injection(DI,依赖注入):把对象的依赖从外部传入,而非内部创建。实现松耦合与可测试性,是现代框架的核心能力。
  • Inversion of Control(IoC,控制反转) :把程序流程控制权交给框架(「Don't call us, we'll call you」)。框架的本质(Claude Code Hooks、Spring 容器都是 IoC 实现);DI 是 IoC 最常见的实现方式。

2.3 面向对象与模块化类

  • Module(模块):高内聚、对外暴露清晰接口的程序单元。让代码可独立开发、测试、替换。
  • Package(包):相关程序单元的集合与命名空间容器。逻辑分组、防命名冲突、控制可见性。
  • Namespace(命名空间):一组名称的容器,用于隔离标识符。大型系统防同名冲突。
  • Abstraction(抽象):只暴露必要特征、隐藏无关实现细节。让开发者聚焦本质,降低复杂度。
  • Encapsulation(封装):把数据与操作数据的方法捆绑成类,隐藏内部状态。内部实现可独立改动而不影响调用方。
  • Inheritance(继承):子类继承父类的属性和方法,实现代码复用。OO 三大特性之一,但强耦合,现代工程优先用组合。
  • Polymorphism(多态):不同类型对同一接口呈现不同行为。让代码面向抽象编程,符合开闭原则。
  • Cross-cutting Concerns(横切关注点):跨越多个模块的通用功能(鉴权/日志/限流/事务)。需用中间件/AOP 集中处理,否则会散落在业务代码中造成重复。
  • Value Object(值对象):通过属性值定义身份、不可变的对象(如金额、日期)。避免基本类型偏执,封装业务校验,线程安全。
  • Aggregate(聚合) :DDD 概念,一组相关对象的集合,作为数据修改的单元。保证业务一致性边界,聚合内强一致,聚合间最终一致。

2.5 分层对象模型

  • POJO(Plain Old Java Object):普通Java对象,没有继承特殊类、实现特殊接口。简单、可测试,是所有分层对象的基础。
  • PO(Persistent Object,持久化对象):和数据库表一一对应的对象,DAO层使用。隔离数据库表结构和业务层。
  • DTO(Data Transfer Object,数据传输对象):跨进程/跨层传输数据的对象,只包含字段没有业务逻辑。减少接口调用次数、隔离内部领域模型。
  • VO(View Object/Value Object):展示层对象,对应前端页面需要的数据;也可指值对象。封装展示数据,不暴露内部字段。
  • BO(Business Object,业务对象):业务层对象,封装业务逻辑。业务逻辑的载体,可组合多个PO。
  • DAO(Data Access Object,数据访问对象) :数据访问层对象,提供数据库CRUD接口。隔离业务层和数据库实现,便于替换和测试。

2.4 数据与状态类

  • State Management(状态管理):应用状态的存储、更新、订阅机制,分客户端状态(UI 本地态)和服务端状态(API 数据)。混用两类状态是前端最常见的架构错误。
  • Caching(缓存):把昂贵计算或查询的结果暂存到高速存储。性能优化头号手段;代价是引入一致性和缓存失效问题。
  • TTL(Time-To-Live,存活时间):缓存/数据的有效时长,过期自动失效。实现最终一致性的简单机制。
  • Cache Invalidation(缓存失效):数据变更后更新或删除对应缓存,保证数据正确。缓存正确性完全取决于失效策略,是缓存最难的部分。
  • Cache Penetration(缓存穿透):查询不存在的数据,请求直接打到数据库。恶意攻击可拖垮数据库,需用布隆过滤器或空值缓存解决。
  • Cache Avalanche(缓存雪崩):大量缓存同时过期,所有请求打到数据库。会导致数据库压力骤增甚至宕机,需过期时间加随机值解决。
  • Idempotency(幂等性):同一操作重复执行多次,结果与执行一次相同。网络不可靠时幂等使重试无害(支付、webhook 必须保证幂等)。
  • Race Condition(竞态条件):并发访问共享资源且无同步,结果取决于执行时序。产生随机错误且极难复现调试。
  • Deadlock(死锁):两个或多个线程互相等待对方持有的资源,永久阻塞。必须同时满足互斥、持有并等待、不可剥夺、循环等待四个条件才会发生。
  • Dead Letter Queue(死信队列):多次消费失败的消息移入的专用队列。防止坏消息无限重试阻塞主队列,便于事后排查。
  • Transaction(事务):把多步读写操作捆绑为原子单元,满足 ACID 特性。保证多步操作的数据一致性;跨服务事务需用 Saga 模式,牺牲强一致性换取可用性。
  • Optimistic Locking(乐观锁):假设冲突很少,更新时检查版本号,冲突则重试。无锁、性能高,适合读多写少场景。
  • Pessimistic Locking(悲观锁):假设冲突经常发生,操作前先加锁。保证强一致,适合写多冲突多场景,但性能低。

八、并发与多线程

  • Thread(线程):操作系统调度的最小执行单元,一个进程包含多个线程。并发执行任务,提升 CPU 利用率。
  • Process(进程):资源分配的最小单位,有独立内存空间,进程间不共享内存。进程隔离保证一个进程崩溃不影响其他进程。
  • Coroutine(协程):用户态轻量级线程,由程序调度,不依赖操作系统内核。创建切换成本极低,可轻松创建上万个,是现代异步编程的主流方案。
  • Context Switch(上下文切换):CPU 切换执行线程时保存/恢复寄存器状态的过程。线程太多会导致大量时间花在切换上,反而降低性能。
  • Mutex/Lock(互斥锁):保证同一时间只有一个线程访问共享资源。解决竞态条件,但使用不当会导致死锁。
  • Deadlock(死锁):见 2.4 节。
  • Race Condition(竞态条件):见 2.4 节。
  • Thread Safety(线程安全):多线程环境下代码能正确执行,没有竞态问题。并发代码的核心质量要求。
  • Immutable Object(不可变对象):创建后状态不能修改的对象。天生线程安全,无需加锁,是并发编程的最佳实践之一。
  • Synchronized(同步):保证方法/代码块同一时间只有一个线程执行。最基础的线程安全手段,但性能较低。
  • Volatile:保证变量的可见性和有序性,不保证原子性。一个线程写、多个线程读的场景下无需加锁。
  • Atomic Operation(原子操作):不可中断的操作,要么全完成要么全不完成。无锁实现线程安全,性能高于加锁。
  • Thread Pool(线程池):预先创建一组线程,复用执行任务,避免频繁创建销毁。降低线程创建开销,控制并发数,防止资源耗尽。
  • Future/Promise:表示异步计算结果的占位符,可在未来获取结果。异步任务结果传递的标准抽象。
  • Async/Await:协程/JS 的异步语法,用同步写法写异步代码。避免回调地狱,异步代码可读性接近同步代码。
  • Memory Barrier(内存屏障):保证指令可见性和有序性的硬件/软件机制。理解 Java/Kotlin 内存模型、volatile 原理的基础。
  • Happens-Before:Java 内存模型的偏序规则,保证一个操作的结果对另一个操作可见。判断并发代码是否正确的理论基础。

十三、数据结构与算法

  • Array(数组):连续内存存储的同类型元素集合,随机访问 O(1)。最基础的数据结构,是其他结构的基础。
  • Linked List(链表):节点通过指针连接,内存不连续,插入删除 O(1),访问 O(n)。实现队列、栈、哈希表冲突链的基础。
  • Stack(栈):后进先出(LIFO)的数据结构。函数调用、表达式求值、括号匹配、深度优先搜索的基础。
  • Queue(队列):先进先出(FIFO)的数据结构。任务调度、消息队列、广度优先搜索的基础。
  • Hash Table(哈希表/散列表):通过哈希函数把 key 映射到数组位置,平均查找 O(1)。最常用的数据结构,键值查询性能极高,是字典、Map 的底层。
  • Tree(树):分层的非线性数据结构,有根节点、子节点。文件系统、数据库索引、DOM 的基础结构。
  • Binary Tree(二叉树):每个节点最多两个子节点的树。二叉搜索树、平衡树的基础。
  • Binary Search Tree(BST,二叉搜索树):左子树 < 根 < 右子树,查找平均 O(log n)。有序数据的快速查找,平衡 BST 是 TreeMap/TreeSet 的底层。
  • Balanced Tree(平衡树):AVL、红黑树等,自动保持树高平衡,避免退化成链表。保证最坏情况 O(log n) 性能,是有序 Map 的标准实现。
  • Heap(堆):完全二叉树,分大顶堆和小顶堆,取最大/最小值 O(1)。优先队列、Top K 问题、堆排序的基础。
  • Graph(图):由顶点和边组成的非线性结构,表示多对多关系。社交网络、路径规划、依赖关系的建模基础。
  • Trie(前缀树/字典树):专门处理字符串匹配的树,公共前缀共享节点。搜索提示、敏感词过滤、IP 路由最长前缀匹配。
  • Bloom Filter(布隆过滤器):空间效率极高的概率型数据结构,判断元素「一定不存在或可能存在」。解决缓存穿透、海量数据去重,有极低误判率。
  • LRU Cache(最近最少使用缓存):缓存满时淘汰最久没访问的数据。最常用的缓存淘汰策略。
  • Sorting Algorithm(排序算法):冒泡、插入、选择、快排、归并、堆排等。最基础的算法,不同场景选不同算法,工程中常用语言内置排序。
  • Binary Search(二分查找):有序数组中每次折半查找,O(log n)。有序数据查找的最优算法,思想可用于各种二分问题。
  • Recursion(递归):函数调用自身,把大问题拆成小问题。树、图、分治算法的基础,但要注意栈溢出和重复计算;尾递归可被编译器优化,避免栈溢出。
  • Dynamic Programming(动态规划):把大问题拆成重叠子问题,存储子问题结果避免重复计算。最优解问题的核心思想,如背包、最长公共子序列。
  • Greedy Algorithm(贪心算法):每一步选当前最优,期望得到全局最优。简单高效,但需要证明贪心选择性质。
  • Divide and Conquer(分治法):把问题分成子问题递归解决,再合并结果。快排、归并排序、MapReduce 的核心思想。
  • BFS(广度优先搜索):图/树按层遍历,用队列实现。最短路径、层序遍历的基础。
  • DFS(深度优先搜索):图/树一条路走到底再回溯,用栈/递归实现。连通性、拓扑排序、回溯算法的基础。
  • Backtracking(回溯法):试探性搜索,走不通就回退。排列组合、N 皇后、解数独等问题的标准解法。
  • Time Complexity(时间复杂度):算法运行时间随输入规模增长的趋势。评估算法效率的核心指标。
  • Space Complexity(空间复杂度):算法运行需要的额外内存随输入规模增长的趋势。评估算法内存占用。
  • Skip List(跳表):多层有序链表,查找/插入/删除平均O(log n)。Redis有序集合的底层实现,比平衡树实现简单。
  • Bitmap(位图):用bit位表示数据是否存在,极省空间。海量数据去重、签到、布隆过滤器的基础。
  • Sliding Window(滑动窗口):双指针维护一个窗口,在数组/字符串上滑动。解决子串、子数组问题的经典思路,O(n)时间。
  • Two Pointers(双指针):两个指针在数组上移动,相向或同向。有序数组两数之和、去重、链表环检测等问题的最优解。

相关推荐
leeyi34 分钟前
微前端:14 个子应用是怎么做到不散架的——DeepFlux 前端工程拆解(第102篇)
前端·aigc·agent
全栈弄潮儿1 小时前
真实案例:用 AI 快速定位一次代码问题
aigc·openai·ai编程
9i编程1 小时前
6. 对SKILL进行一次全新尝试,改为框架+细节方式的实践及验证:admin-web联调与bug修复
人工智能·openai·ai编程
Lambert2811 小时前
同一个 Agent,用 Spring AI 2.0 和 AgentScope Java 各实现一遍:差的不止代码量
openai·ai编程
桃西西呀1 小时前
AI 为什么一本正经地胡说八道?3 个底层原因 + 2 个防坑法
人工智能·llm·ai编程
天空1101 小时前
Claude Code 怎么换用 Claude Fable 5.1:配置步骤、端点验证方法,以及缓存降价 75% 到底省了多少(2026 年 9 月)
人工智能·ai编程
宋哥转AI1 小时前
深入理解 AI Agent:从黑盒到全链路——生产级 Agent 的可观测性体系怎么建
人工智能·agent·ai编程
打呵欠的猫1 小时前
前端接口超时从 15s 改到动态值后,用户投诉降了 60%——AI 帮我分析出的方案
前端·ai编程
AI工具测评家1 小时前
2026 知网 & 维普 AIGC 检测底层逻辑解析|快降重 / 笔过 AI / 快将 AI 改写技术差异对比
人工智能·aigc·降重·ai检测·查重·降ai