后端
数据结构
数据结构比较
| 特性 | 数组 | 链表 | 栈 | 队列 |
|---|---|---|---|---|
| 存储方式 | 连续内存 | 分散内存,通过指针连接 | 基于数组或链表实现 | 基于数组或链表实现 |
| 访问方式 | 随机访问(通过索引) | 顺序访问(必须遍历) | 仅限栈顶(LIFO,后进先出) | 仅限队头(FIFO,先进先出) |
| 插入/删除效率 | 尾部快,中间/头部慢(需移动元素) | 已知位置时快(只需改指针) | 栈顶操作,O(1) | 队尾入队,队头出队,O(1) |
| 大小 | 固定(静态数组) | 动态 | 动态 | 动态 |
| 主要应用 | 快速查找、固定集合 | 频繁插入删除、不确定大小 | 函数调用、回溯、括号匹配 | 任务调度、缓冲、BFS(广度优先搜索) |
| 选择场景 | 需要快速随机访问,且数据量已知 | 需要频繁在任意位置插入/删除,数据量变化大 | 需要实现"撤销"或反向处理顺序 | 需要按"先来后到"顺序处理任务 |
数据结构分类
数据结构分类树
数据结构
├── 线性结构(一对一)
│ ├── 数组
│ ├── 链表
│ ├── 栈
│ ├── 队列
│ └── 字符串
├── 树形结构(一对多)
│ ├── 二叉树
│ ├── B树
│ ├── 堆
│ └── 字典树
├── 图形结构(多对多)
│ ├── 有向图
│ ├── 无向图
│ └── 网图
└── 散列结构(键值映射)
├── 哈希表(字典/Map)
└── 集合| 类别 | 核心关系 | 典型代表 | 直观理解 |
|---|---|---|---|
| 线性结构 | 一对一 | 数组、链表、栈、队列、字符串 | 像排队,有明确的先后顺序 |
| 树形结构 | 一对多 | 二叉树、B树、堆、字典树 | 像倒过来的树,从根向下分叉 |
| 图形结构 | 多对多 | 有向图、无向图、网图 | 像地图/社交网络,节点间互相连接 |
| 散列结构 | 键值映射 | 哈希表(字典/Map)、集合 | 像查字典,key直接定位value |
数据结构与算法对应关系
算法分类树
算法分类
├── 线性结构算法
│ ├── 快速排序
│ ├── 二分查找
│ ├── 双指针
│ ├── 滑动窗口
│ └── 前缀和
├── 栈结构算法
│ ├── 括号匹配算法
│ ├── 单调栈
│ └── 表达式求值
├── 队列结构算法
│ ├── BFS 广度优先遍历
│ └── 滑动窗口最大值
├── 哈希结构算法
│ ├── 哈希统计
│ ├── 哈希去重
│ └── 哈希查找
├── 树形结构算法
│ ├── DFS 深度优先遍历
│ ├── BFS 层序遍历
│ └── 堆排序 / 优先队列
└── 图形结构算法
├── DFS 图遍历
├── BFS 最短路径
├── 并查集(Union-Find)
└── 拓扑排序| 数据结构分类 | 典型结构 | 具体常用算法(实战向) | 核心用途 |
|---|---|---|---|
| 线性结构 | 数组、链表、字符串 | 快速排序 | 通用数据排序 |
| 二分查找 | 有序数组快速查找 | ||
| 双指针 | 两数之和、去重、回文判断 | ||
| 滑动窗口 | 最长子串、区间问题 | ||
| 前缀和 | 区间和快速计算 | ||
| 栈结构 | 栈 | 括号匹配算法 | 语法校验、标签匹配 |
| 单调栈 | 下一个更大/更小元素 | ||
| 表达式求值 | 简易计算器 | ||
| 队列结构 | 队列、双端队列 | BFS 广度优先遍历 | 层序遍历、最短路径 |
| 滑动窗口最大值 | 区间极值统计 | ||
| 哈希结构 | 字典(dict)、集合(set) | 哈希统计 | 词频/计数统计 |
| 哈希去重 | 列表/序列去重 | ||
| 哈希查找 | O(1) 存在性判断 | ||
| 树形结构 | 二叉树、堆、多叉树 | DFS 深度优先遍历 | 目录遍历、表达式解析 |
| BFS 层序遍历 | 按层展示、平铺结构 | ||
| 堆排序 / 优先队列 | TopK、任务优先级调度 | ||
| 图形结构 | 图 | DFS 图遍历 | 连通性、路径搜索 |
| BFS 最短路径 | 无权图最短路 | ||
| 并查集(Union-Find) | 朋友圈、网络连通分组 | ||
| 拓扑排序 | 任务依赖调度 |
哈希算法用法
| 算法/用法 | 一句话作用 |
|---|---|
| 哈希查找 | 判断有没有,O(1) 速度 |
| 哈希统计 | 计数、词频、次数 |
| 哈希去重 | 列表快速去重 |
| 键值映射 | 翻译、替换、配置 |
| 哈希缓存 | 存结果避免重复计算 |
| 哈希反转 | key 和 value 互换 |
| 默认值处理 | 不存在就给默认值 |
设计模式解释
设计模式分类树
设计模式
├── 创建型模式
│ ├── 单例模式
│ ├── 工厂模式
│ └── 建造者模式
├── 结构型模式
│ ├── 适配器模式
│ ├── 装饰器模式
│ ├── 外观模式
│ └── 代理模式
└── 行为型模式
├── 观察者模式
├── 策略模式
├── 模板方法模式
├── 迭代器模式
└── 命令模式| 设计模式名称 | 大白话核心解释(贴合你的理解) |
|---|---|
| 单例模式 | 一个类只造一个对象,全局就这一份,反复共用 |
| 工厂模式 | 提供统一创建接口,批量造不同对象,支持多样化对象设计 |
| 建造者模式 | 像前端从页眉到页脚,按步骤一步步拼装复杂对象 |
| 适配器模式 | 接口不兼容时,加个转换层,让不同模块能适配使用 |
| 装饰器模式 | 不改动原有代码,给对象/函数额外叠加功能,就是 Python 常用的 @装饰器 |
| 外观模式 | 把复杂操作打包,对外只留一个简单调用入口,简化使用 |
| 代理模式 | 创建一个辅助类包在外面当替身,类似装饰器挂外面,用来控制、权限、延迟、日志 |
| 观察者模式 | 一个触发,多端连携响应,一个对象变动,关联对象自动同步更新 |
| 策略模式 | 一种情况对应一种解法,同一功能,多套算法实现,随时切换 |
| 模板方法模式 | 固定整体执行流程,具体细节部分自定义填充 |
| 迭代器模式 | 统一数据遍历方式,不用关心数据内部存储结构,就是 Python 常用迭代器 |
| 命令模式 | 把操作/动作打包成对象,可实现撤销、重做、排队执行,和命令行无关 |
前后端对比
| 项目 | 前端 | 后端 |
|---|---|---|
| 本质 | 带界面的网站文件 | 无界面、纯逻辑的后台脚本 |
| 运行位置 | 用户浏览器里 | 服务器(24小时开机的电脑) |
| 本地地址 | localhost:5173 / 8080 | localhost:3000 |
| 上线地址 | www.xxx.com | api.xxx.com(子域名) |
| 主要工作 | 页面展示、交互、发请求 | 接收请求、业务逻辑、操作数据库 |
| 常见请求方式 | 用 POST/GET 发数据 | 监听接口、处理并返回 JSON |
| 有无UI界面 | 有(页面、按钮、样式) | 无UI,只返回数据 |
| 本质形象理解 | 门店门面 | 仓库+后台管理 |
| 底层真相 | 一堆 .html/.css/.js 文件 | 一堆 .js/.java/.py 代码文件 |
