Skip to content

程序员知识库

用 Obsidian 搭建程序员专属的知识管理系统——不只是笔记,更是你的技术第二大脑。

知识库结构

text
dev-kb/
├── til/                  # Today I Learned (每日学到的技巧)
├── snippets/             # 代码片段
├── cheatsheets/          # 速查表(自建)
├── architecture/         # 技术方案与架构决策
├── troubleshooting/      # 问题排查记录
├── books/                # 读书笔记(技术书)
├── projects/             # 项目相关笔记
├── interviews/           # 面试准备
├── daily/                # 工作日志
└── templates/            # 模板

代码片段管理

使用 ```代码块 + Front Matter 管理可复用的代码片段:

markdown
---
type: snippet
language: typescript
tags: [React, Hook, 代码片段]
source: "React 官方文档"
created: {{date}}
---

# useDebounce — 防抖 Hook

```ts
import { useState, useEffect } from 'react';

export function useDebounce<T>(value: T, delay: number): T {
  const [debouncedValue, setDebouncedValue] = useState(value);

  useEffect(() => {
    const timer = setTimeout(() => setDebouncedValue(value), delay);
    return () => clearTimeout(timer);
  }, [value, delay]);

  return debouncedValue;
}

使用场景

搜索输入防抖,避免频繁请求。


### 按语言/标签检索

```dataview
TABLE language as "语言", tags as "标签"
FROM "snippets/"
WHERE type = "snippet"
SORT language ASC

TIL 工作流

每天记录一个小知识点——坚持 3 个月效果惊人。

TIL 模板

markdown
---
type: til
date: &#123;&#123;date&#125;&#125;
tags: [TIL, 前端]
source: ""
---

# &#123;&#123;title&#125;&#125;

## 一句话总结

> 一句话说清楚这个知识点

## 详细说明

## 代码示例 / 实战演示

## 参考资料

TIL 仪表板

dataview
TABLE tags as "标签"
FROM "til/"
WHERE type = "til"
SORT date DESC
LIMIT 7

技术方案记录

ADR(架构决策记录)

markdown
---
type: adr
id: ADR-001
project: "用户系统重构"
status: accepted
date: &#123;&#123;date&#125;&#125;
tags: [架构, 后端]
---

# ADR-001: 选用 PostgreSQL 替代 MySQL

## 背景
当前系统使用 MySQL 5.7,遇到以下问题:
1. JSON 查询性能差
2. 全文搜索支持不足
3. 扩展性受限

## 方案

| 方案 | 优点 | 缺点 |
|------|------|------|
| PostgreSQL | JSONB、全文搜索、扩展丰富 | 团队需学习 |
| MySQL 8.0 | 团队熟悉、迁移成本低 | JSON 仍不如 PG |
| MongoDB | 文档模型灵活 | 事务支持弱 |

## 决策
选择 PostgreSQL。

## 后果
- 需要编写数据迁移脚本
- 团队培训 PostgreSQL 特性
- 预计迁移工期 2 周

## 参考
- [[MySQL 性能优化记录]]

问题排查记录

排查模板

markdown
---
type: troubleshooting
date: &#123;&#123;date&#125;&#125;
severity: P2
system: "订单服务"
solved: true
tags: [排查, 后端]
---

# &#123;&#123;title&#125;&#125;

## 现象

> 用户下单后订单状态不更新

## 影响范围
- 影响用户:约 50 人
- 持续时间:30 分钟

## 排查过程

1. 检查订单服务日志 → 发现大量超时
2. 检查数据库连接池 → 连接数耗尽
3. 检查上游调用 → 支付回调接口慢查询

## 根因

支付回调接口的 SQL 未走索引,全表扫描导致连接池耗尽。

## 解决方案

1. 紧急:增加 `idx_payment_order_id` 索引
2. 长期:增加慢查询监控告警

## 预防措施

- [ ] 上线前检查 SQL 执行计划
- [ ] 连接池监控接入 Prometheus

排查知识库索引

dataview
TABLE severity as "严重级别", system as "系统", solved as "已解决"
FROM "troubleshooting/"
WHERE type = "troubleshooting"
SORT date DESC

技术书阅读笔记

与普通读书笔记不同,技术书笔记强调可操作性:

markdown
---
type: book
title: "《 Designing Data-Intensive Applications 》"
author: Martin Kleppmann
tags: [分布式, 数据库, 系统设计]
status: reading
rating: 5
---

# Designing Data-Intensive Applications

## 核心概念

每章 3 个核心概念 + 1 个行动项:

### Ch1: 可靠性、可扩展性、可维护性

- **可靠性**:容忍硬件/软件/人为错误
- **可扩展性**:描述负载 → 定义性能指标
- **可维护性**:可运维、简单、可演化

**行动项**:梳理当前系统的故障模式清单

## 实际应用

这本书的知识如何应用到我的项目中:
- 第 5 章 复制策略 → 优化订单服务的读写分离
- 第 7 章 事务 → 重构支付流程的事务边界

工作日志

日报模板

markdown
---
type: daily-report
date: &#123;&#123;date&#125;&#125;
project: ""
---

# &#123;&#123;date&#125;&#125;

## 今日完成

- [x]
- [x]

## 遇到的问题

## 明日计划

- [ ]

## 学到的新东西

-

周报自动汇总

dataview
TABLE
  file.tasks.text as "本周完成"
FROM "daily/"
WHERE type = "daily-report"
  AND date >= date(today) - dur(7 days)
  AND contains(file.tasks.checked, true)

快速输入利器

QuickAdd 配置

配置一键创建各类笔记:

yaml
QuickAdd 宏:
  ⌘+T   →  新建 TIL
  ⌘+S   →  新建代码片段
  ⌘+D   →  新建日报
  ⌘+B   →  新建排查记录

Shell 命令集成

绑定终端到 Obsidian:

bash
# 安装 Shell Commands 插件后
# 在终端执行 → 自动创建笔记
obsidian://new?vault=dev-kb&file=til/&#123;&#123;date&#125;&#125;-&#123;&#123;title&#125;&#125;

面试准备

markdown
---
type: interview-prep
company: ""
position: ""
date: &#123;&#123;date&#125;&#125;
tags: [面试]
---

# &#123;&#123;company&#125;&#125; 面试准备

## 公司调研

## 岗位要求分析

## 常见问题准备

| 问题 | 我的回答要点 |
|------|-------------|

## 系统设计练习

## 算法练习

- [ ] LeetCode Hot 100
- [ ] 手写 Promise
- [ ] 实现 LRU Cache

## 反问清单

1.
2.
3.

相关资源