最新

Web 安全基础

1. HTML 转义(服务端渲染必须): 2. CSP(Content Security Policy): 3. HttpOnly Cookie:防止 JS 读取会话 Cookie: 4. 前端框架防护: 攻击者在第三方网站构造一个表单,诱导已登录用户提交,浏览器会自动携带目标站的 Cookie。 触发条件: 1. 用户已登录目标网站(Cookie 有效) 2. 目标 API 仅凭 Cookie 识别用户身份 3. 请求来源未验证 1. CSRF Token(推荐): 2. SameSite Cookie: 3. 验证 Origin/Referer 头:

By yellowdog

HTTP 协议深度指南

HTTP(HyperText Transfer Protocol)是 Web 的基础传输协议,基于 TCP/IP,采用请求/响应模型。 相关文档:Web安全基础(/web-an-quan-ji-chu/) FastAPI完全指南(/fastapi-wan-quan-zhi-nan/) Nginx完全指南(/nginx-wan-quan-zhi-nan/) 幂等性:多次执行相同请求,服务器状态结果相同。PUT /users/1 多次执行结果一致;POST /users 每次创建新资源,非幂等。 浏览器直接从本地缓存读取,不向服务器发送请求。 缓存命中时,状

By yellowdog

系统设计基础

SLA 对照表: 选择建议:无状态服务(Web 层、API 层)优先水平扩展;数据库初期垂直扩展,达到瓶颈后考虑分库分表或读写分离。 缓存穿透(查询不存在的 key,每次都打到 DB): 缓存击穿(热点 key 过期,瞬间大量请求打到 DB): 缓存雪崩(大量 key 同时过期,或缓存服务宕机): 令牌桶 Python 实现: Redis 实现分布式限流(滑动窗口): URL 命名规则: Cursor 分页响应格式: 雪花算法结构(64 bit): 定义:分布式系统不能同时满足以下三个特性: 在分布式环境中 P 是必须保证的,所以实际是 CP vs AP

By yellowdog

算法思路与模板

二分查找要求序列有序,每次将搜索范围缩减一半,时间复杂度 O(log n)。 两个指针从两端向中间收缩,常用于有序数组。 滑动窗口维护一个满足条件的区间 left, right,right 不断向右扩张,条件不满足时收缩 left。 滑动窗口通用框架: 1. 确定"子问题":原问题可以分解为哪些规模更小的同类问题 2. 定义 dpi 或 dpij 的含义,要足够清晰 3. 推导状态转移方程 4. 确定初始状态(边界条件) 5. 确定计算顺序(确保依赖的子问题先计算) 每件物品最多选一次。dpj = 容量为 j 时的最大价值,逆序遍历容量防止重复选取。 每

By yellowdog

数据结构完全参考

Python list 是动态数组(Dynamic Array): 推论:需要频繁头部操作时,用 collections.deque 替代 list。 循环链表将尾节点的 next 指向头节点。常见于约瑟夫环问题。使用时注意遍历终止条件应以初始节点为准,否则会无限循环。 栈遵循 LIFO(后进先出)原则。 队列遵循 FIFO(先进先出)原则。 Python heapq 是最小堆。实现最大堆时将值取反。 单调栈维护一个单调递增或递减的栈,用于求"下一个更大/更小元素"。 单调队列用于滑动窗口最值问题,队列中元素单调递减(求最大值)或单调递增(求最小值)。

By yellowdog

GoRouter 完全指南

go_router 是 Flutter 官方推荐的声明式路由库,基于 Navigator 2.0,支持深链接、Web URL 同步、嵌套路由。 ShellRoute 为子路由提供共享的外壳 Widget(通常是带 BottomNavigationBar 的 Scaffold)。切换 Tab 时子路由各自维护独立的 Navigator,但 Shell Widget 本身不会重建。 StatefulShellRoute 在 ShellRoute 基础上为每个分支维护独立的 Navigator 状态,切换 Tab 时不会销毁页面。 refreshListena

By yellowdog

Flutter 状态管理

运行代码生成: AsyncValue 常用方法: 在 build 方法中错误地使用 ref.read 会导致状态变化后 UI 不更新: 小组件用 StatefulWidget,应用级状态用 Riverpod:setState 适合局部 UI 状态(按钮选中、展开收起),跨页面共享状态改用 Riverpod 的 Provider/AsyncNotifier,避免 prop drilling。 Riverpod 优先用 AsyncNotifierProvider:异步数据(API 调用)统一用 AsyncNotifierProvider,自动处理 loadi

By yellowdog

Flutter 打包发布

按提示填写密钥库密码、姓名、组织等信息。生成后妥善保管 .jks 文件,丢失无法恢复。 在 android/ 目录下创建 key.properties(不要提交到 Git): 将 key.properties 加入 .gitignore: 编辑 android/app/build.gradle: flutter build appbundle --release 默认启用 R8 混淆。如果第三方库需要保留特定类,在 android/app/proguard-rules.pro 中添加规则: 在 build.gradle 中引用: 1. 在 Google

By yellowdog

Kafka 完全指南

Apache Kafka 是一个分布式流处理平台,以高吞吐量、持久化存储和消息回放著称。 KafkaProducer 参数: producer.send 参数: KafkaConsumer 参数: acks 控制生产者认为消息发送成功所需的 Broker 确认数量: 生产环境金融/订单类消息应使用 acks="all" + retries=3。 注意:auto_offset_reset 只在该 Consumer Group 从未提交过 offset 时生效(新 group 或 offset 已过期被删除)。已有提交记录的情况下,从上次提交的 offset

By yellowdog

机器学习

scikit-learn 完全指南

scikit-learn 是 Python 最成熟的机器学习库,提供监督学习、无监督学习、模型选择与评估的完整工具链,所有算法遵循统一的 fit/predict/transform 接口。 与其他框架的对比: 适合场景:结构化(表格)数据的分类、回归、聚类;需要快速建立 baseline;特征工程 Pipeline 构建;模型选择与超参调优。 不适合场景:图像/音频/文本深度学习(用 PyTorch完全指南(/pytorchwan-quan-zhi-nan/) 或 HuggingFace Transformers完全指南(/huggingface-tra

By yellowdog

机器学习

LangChain 完全指南

LangChain 是构建 LLM 应用的开源框架,核心价值在于:提供统一抽象层连接各家 LLM API,并通过 LCEL(LangChain Expression Language)将提示词、模型、解析器、记忆、检索器等组件像搭积木一样组合成链(Chain)。 对比主要替代方案: 适合场景:RAG(检索增强生成)应用、多步骤 Agent、LLM 应用原型快速验证、需要接入多种模型提供商并保持可替换性。不适合场景:只需一次 LLM 调用的简单场景(直接用 SDK 更轻量)、需要精细状态管理的复杂 Agent(用 LangGraph)。 LangChain

By yellowdog

机器学习

HuggingFace Transformers 完全指南

HuggingFace Transformers 是目前最主流的预训练模型工具库,提供数千个在 Hugging Face Hub 上发布的预训练模型,覆盖 NLP、计算机视觉、语音、多模态等任务。它的核心价值在于:一套统一 API 驯服从 BERT 到 LLaMA 的所有主流架构,无需了解每种架构的内部细节。 对比主要替代方案: 适合场景:需要在本地运行开源模型(Llama、Mistral、Qwen)、Fine-tuning 已有模型、使用 BERT 类模型做文本分类 / NER / 问答。不适合场景:只需调用 GPT-4 等闭源 API(用 OpenA

By yellowdog

数据库

数据库设计规范

相关文档:MySQL基础完全指南(/mysql-ji-chu-wan-quan-zhi-nan/) | MySQL高级优化(/mysql-gao-ji-you-hua/) | Redis完全指南(/redis-wan-quan-zhi-nan/) 定义:表中每一列都是不可再分的原子值,不允许多值列或嵌套结构。 违反示例: 修正:将多值列拆为单独的行(order_items 表)。 坏处:查询、更新单个值需要字符串解析;无法建立外键约束;无法索引。 定义:在满足 1NF 的基础上,非主键列必须完全依赖于整个主键,不允许部分依赖(仅针对复合主键)。 违反示例

By yellowdog

数据库

SQLite 完全指南

SQLite 是一个无服务器、单文件的关系型数据库引擎,整个数据库(包括表、索引、数据)存储在一个 .db 文件中。 sqlite3 是 Python 标准库模块,无需安装,遵循 DB-API 2.0 规范(PEP 249)。 sqlite3.connect() 返回 Connection 对象,代表一个数据库连接。 Cursor 是执行 SQL 语句和获取结果的核心对象。 始终使用参数绑定,严禁用字符串拼接构造 SQL,防止 SQL 注入。 Python 3.12 新增,与命名参数等价,此处不展开。 默认情况下,查询结果的每行是元组。设置 row_fa

By yellowdog

数据库

PostgreSQL 完全指南

相关文档:MySQL基础完全指南(/mysql-ji-chu-wan-quan-zhi-nan/) SQLAlchemy完全指南(/sqlalchemy-wan-quan-zhi-nan/) SQLModel完全指南(/sqlmodel-wan-quan-zhi-nan/) 始终使用 TIMESTAMPTZ 而非 TIMESTAMP:TIMESTAMP 不存储时区,跨时区系统会出现时间错乱。TIMESTAMPTZ 内部统一存储为 UTC,读取时按连接时区自动转换。 用 JSONB 而非 JSON:JSON 存储原始文本,每次访问都需解析;JSONB 存储

By yellowdog

数据库

MySQL 高级优化

生产环境要求:至少达到 range,核心查询要求 ref 及以上。 JSON 输出中重点关注: 输出示例(树状格式): actual time=开始..结束 单位为毫秒,loops 为该节点执行次数。 联合索引 INDEX idx_abc (a, b, c) 的命中规则: 规律:从索引最左列开始,遇到范围查询(>、<、BETWEEN、LIKE 'prefix%')则后续列失效。 查询所需的列全部包含在索引中,无需回表读取行数据,EXPLAIN 的 Extra 显示 Using index。 设计覆盖索引的思路:将 SELECT 列表中频繁出现的列追加到联

By yellowdog

数据库

MySQL 基础完全指南

常用约束 注意:视图不存储数据,每次查询都会执行底层 SELECT。包含 GROUP BY、DISTINCT、聚合函数、UNION 的视图通常不可更新。 pymysql.connect() 参数表 游标方法参数表 PooledDB 参数表 MySQL 的 utf8 最多只支持 3 字节,无法存储 emoji 和部分汉字(需要 4 字节)。应始终使用 utf8mb4。 EXPLAIN 先于优化:每次优化查询前用 EXPLAIN 确认执行计划,不凭直觉加索引,重点关注 type(ALL 为全表扫描)、key(实际使用的索引)、rows(估算扫描行数)。 复合

By yellowdog

数据库

MongoDB 完全指南

相关文档:MySQL基础完全指南(/mysql-ji-chu-wan-quan-zhi-nan/) Redis完全指南(/redis-wan-quan-zhi-nan/) Scrapy分布式采集(/scrapy-fen-bu-shi-cai-ji-wan-quan-zhi-nan/) 聚合管道是 MongoDB 最强大的查询能力,通过一系列阶段(Stage)对数据进行变换: 嵌入 vs 引用:一对少用嵌入,一对多用引用:嵌入文档(subdocument)读取一次 IO 就能拿到所有数据,适合一对少(如用户地址、商品规格);引用(_id 外键 + $loo

By yellowdog

数据库

Elasticsearch 完全指南

相关文档:PostgreSQL完全指南(/postgresql-wan-quan-zhi-nan/) MongoDB完全指南(/mongodb-wan-quan-zhi-nan/) Redis完全指南(/redis-wan-quan-zhi-nan/) Elasticsearch 是基于 Apache Lucene 的分布式全文搜索引擎,RESTful API 驱动,支持近实时搜索和分析。 Mapping 定义字段类型,一旦设置不可更改(只能新增字段)。 聚合类似 SQL 的 GROUP BY + 统计函数。 Mapping 提前定义,不依赖动态映射:E

By yellowdog

数据库

DuckDB 完全指南

DuckDB 是一个嵌入式列式 OLAP 数据库,无需独立服务进程,像 SQLite 一样嵌入应用内部运行,但专门针对分析型查询(大量数据扫描、聚合、连接)进行了优化。 与主要替代方案的对比: 适合的场景: 不适合的场景: DuckDB 有三种连接模式: duckdb.sql() 等模块级函数使用一个全局默认连接,等效于 duckdb.connect(":default:")。单文件脚本直接用模块级函数即可;需要隔离或多线程时才创建独立连接。 duckdb.sql() 等方法返回 DuckDBPyRelation,它是一个惰性求值的符号查询节点——不会立

By yellowdog