{"success":true,"data":[{"id":"85","slug":"oauth-2-0-1774162634719","title":"OAuth 2.0 认证流程详解","summary":"OAuth 2.0 认证流程详解","contentMd":"# OAuth 2.0 认证流程\n\n第三方登录的标准协议。\n\n## 授权码模式\n\n1. 用户跳转到授权服务器\n2. 用户同意授权\n3. 获取授权码\n4. 用授权码换取 access token\n\n## 代码示例\n\n```javascript\n// 1. 跳转授权\nwindow.location.href = `https://auth.example.com/oauth/authorize?client_id=xxx&redirect_uri=xxx&response_type=code`;\n\n// 2. 交换 token\nconst res = await fetch('/oauth/token', {\n  method: 'POST',\n  body: new URLSearchParams({ code, client_secret })\n});\n```\n\n## 安全注意事项\n\n- 使用 PKCE\n- 验证 state 参数\n- 短有效期 token\n\n你用过哪些 OAuth 提供商？","contentHtml":"<h1>OAuth 2.0 认证流程</h1>\n<p>第三方登录的标准协议。</p>\n<h2>授权码模式</h2>\n<ol>\n<li>用户跳转到授权服务器</li>\n<li>用户同意授权</li>\n<li>获取授权码</li>\n<li>用授权码换取 access token</li>\n</ol>\n<h2>代码示例</h2>\n<pre><code class=\"language-javascript\">// 1. 跳转授权\nwindow.location.href = `https://auth.example.com/oauth/authorize?client_id=xxx&amp;redirect_uri=xxx&amp;response_type=code`;\n\n// 2. 交换 token\nconst res = await fetch(&#39;/oauth/token&#39;, {\n  method: &#39;POST&#39;,\n  body: new URLSearchParams({ code, client_secret })\n});\n</code></pre>\n<h2>安全注意事项</h2>\n<ul>\n<li>使用 PKCE</li>\n<li>验证 state 参数</li>\n<li>短有效期 token</li>\n</ul>\n<p>你用过哪些 OAuth 提供商？</p>\n","contentText":" OAuth 2.0 认证流程\n\n第三方登录的标准协议。\n\n 授权码模式\n\n1. 用户跳转到授权服务器\n2. 用户同意授权\n3. 获取授权码\n4. 用授权码换取 access token\n\n 代码示例\n\njavascript\n// 1. 跳转授权\nwindow.location.href = https://auth.example.com/oauth/authorize?client_id=xxx&redirect_uri=xxx&response_type=code;\n\n// 2. 交换 token\nconst res = await fetch('/oauth/token', {\n  method: 'POST',\n  body: new URLSearchParams({ code, client_secret })\n});\n\n\n 安全注意事项\n\n- 使用 PKCE\n- 验证 state 参数\n- 短有效期 token\n\n你用过哪些 OAuth 提供商？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/oauth-2-0-1774162634719.html","createdAt":"2026-03-22T06:57:14.721Z","updatedAt":"2026-03-22T06:57:48.606Z","lastActivityAt":"2026-03-22T06:57:48.605Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"85","tagId":"73","tag":{"id":"73","name":"安全","description":null,"createdAt":"2026-03-22T06:57:03.283Z"}},{"threadId":"85","tagId":"87","tag":{"id":"87","name":"OAuth","description":null,"createdAt":"2026-03-22T06:57:14.726Z"}}],"comments":[{"id":"153","threadId":"85","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:57:47.888Z","updatedAt":"2026-03-22T06:57:47.888Z"},{"id":"154","threadId":"85","parentId":null,"authorId":"6","contentMd":"谢谢博主的分享，干货满满！","contentHtml":"谢谢博主的分享，干货满满！","contentText":"谢谢博主的分享，干货满满！","status":"published","createdAt":"2026-03-22T06:57:48.603Z","updatedAt":"2026-03-22T06:57:48.603Z"}],"_count":{"votes":0}},{"id":"84","slug":"ci-cd-1774162633572","title":"CI/CD 流水线搭建指南","summary":"CI/CD 流水线搭建指南","contentMd":"# CI/CD 流水线搭建\n\n自动化部署的最佳实践。\n\n## GitHub Actions\n\n```yaml\nname: Deploy\non: [push]\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - run: npm install\n      - run: npm test\n      - run: npm run build\n```\n\n## GitLab CI\n\n```yaml\ndeploy:\n  stage: deploy\n  script:\n    - echo \"Deploying...\"\n  only:\n    - main\n```\n\n## 最佳实践\n\n- 自动化测试\n- 环境隔离\n- 回滚机制\n\n你的 CI/CD 流程是怎样的？","contentHtml":"<h1>CI/CD 流水线搭建</h1>\n<p>自动化部署的最佳实践。</p>\n<h2>GitHub Actions</h2>\n<pre><code class=\"language-yaml\">name: Deploy\non: [push]\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - run: npm install\n      - run: npm test\n      - run: npm run build\n</code></pre>\n<h2>GitLab CI</h2>\n<pre><code class=\"language-yaml\">deploy:\n  stage: deploy\n  script:\n    - echo &quot;Deploying...&quot;\n  only:\n    - main\n</code></pre>\n<h2>最佳实践</h2>\n<ul>\n<li>自动化测试</li>\n<li>环境隔离</li>\n<li>回滚机制</li>\n</ul>\n<p>你的 CI/CD 流程是怎样的？</p>\n","contentText":" CI/CD 流水线搭建\n\n自动化部署的最佳实践。\n\n GitHub Actions\n\nyaml\nname: Deploy\non: push\njobs:\n  deploy:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v2\n      - run: npm install\n      - run: npm test\n      - run: npm run build\n\n\n GitLab CI\n\nyaml\ndeploy:\n  stage: deploy\n  script:\n    - echo \"Deploying...\"\n  only:\n    - main\n\n\n 最佳实践\n\n- 自动化测试\n- 环境隔离\n- 回滚机制\n\n你的 CI/CD 流程是怎样的？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/ci-cd-1774162633572.html","createdAt":"2026-03-22T06:57:13.574Z","updatedAt":"2026-03-22T06:57:47.133Z","lastActivityAt":"2026-03-22T06:57:47.132Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"84","tagId":"69","tag":{"id":"69","name":"DevOps","description":null,"createdAt":"2026-03-22T06:56:04.879Z"}},{"threadId":"84","tagId":"86","tag":{"id":"86","name":"CI/CD","description":null,"createdAt":"2026-03-22T06:57:13.578Z"}}],"comments":[{"id":"151","threadId":"84","parentId":null,"authorId":"6","contentMd":"有相关的文档或教程推荐吗？","contentHtml":"有相关的文档或教程推荐吗？","contentText":"有相关的文档或教程推荐吗？","status":"published","createdAt":"2026-03-22T06:57:46.419Z","updatedAt":"2026-03-22T06:57:46.419Z"},{"id":"152","threadId":"84","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:57:47.130Z","updatedAt":"2026-03-22T06:57:47.130Z"}],"_count":{"votes":0}},{"id":"83","slug":"graphql-api-1774162632443","title":"GraphQL API 设计最佳实践","summary":"GraphQL API 设计最佳实践","contentMd":"# GraphQL API 设计\n\n比 REST 更灵活的 API 方案。\n\n## Schema 设计\n\n```graphql\ntype Query {\n  user(id: ID!): User\n  users(limit: Int): [User]\n}\n\ntype User {\n  id: ID!\n  name: String!\n  email: String!\n}\n```\n\n## 性能优化\n\n- DataLoader 批量查询\n- 查询复杂度限制\n- 字段缓存\n\n## 工具链\n\n- Apollo Server\n- GraphQL Code Generator\n\nGraphQL 适合什么场景？","contentHtml":"<h1>GraphQL API 设计</h1>\n<p>比 REST 更灵活的 API 方案。</p>\n<h2>Schema 设计</h2>\n<pre><code class=\"language-graphql\">type Query {\n  user(id: ID!): User\n  users(limit: Int): [User]\n}\n\ntype User {\n  id: ID!\n  name: String!\n  email: String!\n}\n</code></pre>\n<h2>性能优化</h2>\n<ul>\n<li>DataLoader 批量查询</li>\n<li>查询复杂度限制</li>\n<li>字段缓存</li>\n</ul>\n<h2>工具链</h2>\n<ul>\n<li>Apollo Server</li>\n<li>GraphQL Code Generator</li>\n</ul>\n<p>GraphQL 适合什么场景？</p>\n","contentText":" GraphQL API 设计\n\n比 REST 更灵活的 API 方案。\n\n Schema 设计\n\ngraphql\ntype Query {\n  user(id: ID!): User\n  users(limit: Int): User\n}\n\ntype User {\n  id: ID!\n  name: String!\n  email: String!\n}\n\n\n 性能优化\n\n- DataLoader 批量查询\n- 查询复杂度限制\n- 字段缓存\n\n 工具链\n\n- Apollo Server\n- GraphQL Code Generator\n\nGraphQL 适合什么场景？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/graphql-api-1774162632443.html","createdAt":"2026-03-22T06:57:12.445Z","updatedAt":"2026-03-22T06:57:45.636Z","lastActivityAt":"2026-03-22T06:57:45.635Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"83","tagId":"66","tag":{"id":"66","name":"后端","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}},{"threadId":"83","tagId":"85","tag":{"id":"85","name":"GraphQL","description":null,"createdAt":"2026-03-22T06:57:12.449Z"}}],"comments":[{"id":"149","threadId":"83","parentId":null,"authorId":"6","contentMd":"能否详细解释一下？","contentHtml":"能否详细解释一下？","contentText":"能否详细解释一下？","status":"published","createdAt":"2026-03-22T06:57:44.846Z","updatedAt":"2026-03-22T06:57:44.846Z"},{"id":"150","threadId":"83","parentId":null,"authorId":"6","contentMd":"感觉这个方向很有前景。","contentHtml":"感觉这个方向很有前景。","contentText":"感觉这个方向很有前景。","status":"published","createdAt":"2026-03-22T06:57:45.633Z","updatedAt":"2026-03-22T06:57:45.633Z"}],"_count":{"votes":0}},{"id":"82","slug":"typescript-1774162631290","title":"TypeScript 高级类型技巧","summary":"TypeScript 高级类型技巧","contentMd":"# TypeScript 高级类型\n\n掌握这些技巧让你的代码更安全！\n\n## 泛型约束\n\n```typescript\nfunction identity<T extends { id: number }>(arg: T): T {\n  return arg;\n}\n```\n\n## 条件类型\n\n```typescript\ntype IsString<T> = T extends string ? true : false;\n```\n\n## 映射类型\n\n```typescript\ntype Readonly<T> = {\n  readonly [P in keyof T]: T[P];\n};\n```\n\n你用 TypeScript 多久了？有什么心得？","contentHtml":"<h1>TypeScript 高级类型</h1>\n<p>掌握这些技巧让你的代码更安全！</p>\n<h2>泛型约束</h2>\n<pre><code class=\"language-typescript\">function identity&lt;T extends { id: number }&gt;(arg: T): T {\n  return arg;\n}\n</code></pre>\n<h2>条件类型</h2>\n<pre><code class=\"language-typescript\">type IsString&lt;T&gt; = T extends string ? true : false;\n</code></pre>\n<h2>映射类型</h2>\n<pre><code class=\"language-typescript\">type Readonly&lt;T&gt; = {\n  readonly [P in keyof T]: T[P];\n};\n</code></pre>\n<p>你用 TypeScript 多久了？有什么心得？</p>\n","contentText":" TypeScript 高级类型\n\n掌握这些技巧让你的代码更安全！\n\n 泛型约束\n\ntypescript\nfunction identity<T extends { id: number }(arg: T): T {\n  return arg;\n}\n\n\n 条件类型\n\ntypescript\ntype IsString<T = T extends string ? true : false;\n\n\n 映射类型\n\ntypescript\ntype Readonly<T = {\n  readonly P in keyof T: TP;\n};\n\n\n你用 TypeScript 多久了？有什么心得？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/typescript-1774162631290.html","createdAt":"2026-03-22T06:57:11.291Z","updatedAt":"2026-03-22T06:57:44.094Z","lastActivityAt":"2026-03-22T06:57:44.094Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"82","tagId":"64","tag":{"id":"64","name":"前端","description":null,"createdAt":"2026-03-22T06:56:03.210Z"}},{"threadId":"82","tagId":"84","tag":{"id":"84","name":"TypeScript","description":null,"createdAt":"2026-03-22T06:57:11.296Z"}}],"comments":[{"id":"147","threadId":"82","parentId":null,"authorId":"6","contentMd":"感觉这个方向很有前景。","contentHtml":"感觉这个方向很有前景。","contentText":"感觉这个方向很有前景。","status":"published","createdAt":"2026-03-22T06:57:43.380Z","updatedAt":"2026-03-22T06:57:43.380Z"},{"id":"148","threadId":"82","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:44.091Z","updatedAt":"2026-03-22T06:57:44.091Z"}],"_count":{"votes":0}},{"id":"81","slug":"-1774162630139","title":"深度学习中的注意力机制解析","summary":"深度学习中的注意力机制解析","contentMd":"# 注意力机制深度解析\n\nTransformer 架构的核心就是注意力机制。\n\n## 自注意力 (Self-Attention)\n\n```python\ndef attention(Q, K, V):\n    scores = torch.matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)\n    weights = softmax(scores)\n    return torch.matmul(weights, V)\n```\n\n## 多头注意力\n\n多个注意力头并行工作，捕捉不同特征。\n\n## 应用场景\n\n- 机器翻译\n- 文本摘要\n- 图像识别\n\n你对注意力机制有什么疑问？","contentHtml":"<h1>注意力机制深度解析</h1>\n<p>Transformer 架构的核心就是注意力机制。</p>\n<h2>自注意力 (Self-Attention)</h2>\n<pre><code class=\"language-python\">def attention(Q, K, V):\n    scores = torch.matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)\n    weights = softmax(scores)\n    return torch.matmul(weights, V)\n</code></pre>\n<h2>多头注意力</h2>\n<p>多个注意力头并行工作，捕捉不同特征。</p>\n<h2>应用场景</h2>\n<ul>\n<li>机器翻译</li>\n<li>文本摘要</li>\n<li>图像识别</li>\n</ul>\n<p>你对注意力机制有什么疑问？</p>\n","contentText":" 注意力机制深度解析\n\nTransformer 架构的核心就是注意力机制。\n\n 自注意力 (Self-Attention)\n\npython\ndef attention(Q, K, V):\n    scores = torch.matmul(Q, K.transpose(-2, -1)) / sqrt(d_k)\n    weights = softmax(scores)\n    return torch.matmul(weights, V)\n\n\n 多头注意力\n\n多个注意力头并行工作，捕捉不同特征。\n\n 应用场景\n\n- 机器翻译\n- 文本摘要\n- 图像识别\n\n你对注意力机制有什么疑问？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/-1774162630139.html","createdAt":"2026-03-22T06:57:10.141Z","updatedAt":"2026-03-22T06:57:42.636Z","lastActivityAt":"2026-03-22T06:57:42.635Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"81","tagId":"62","tag":{"id":"62","name":"AI","description":null,"createdAt":"2026-03-22T04:38:14.751Z"}},{"threadId":"81","tagId":"83","tag":{"id":"83","name":"深度学习","description":null,"createdAt":"2026-03-22T06:57:10.145Z"}}],"comments":[{"id":"144","threadId":"81","parentId":null,"authorId":"6","contentMd":"赞！内容很专业。","contentHtml":"赞！内容很专业。","contentText":"赞！内容很专业。","status":"published","createdAt":"2026-03-22T06:57:41.176Z","updatedAt":"2026-03-22T06:57:41.176Z"},{"id":"145","threadId":"81","parentId":null,"authorId":"6","contentMd":"这个角度很有意思，我之前没想过。","contentHtml":"这个角度很有意思，我之前没想过。","contentText":"这个角度很有意思，我之前没想过。","status":"published","createdAt":"2026-03-22T06:57:41.884Z","updatedAt":"2026-03-22T06:57:41.884Z"},{"id":"146","threadId":"81","parentId":null,"authorId":"6","contentMd":"学习了！收藏了。","contentHtml":"学习了！收藏了。","contentText":"学习了！收藏了。","status":"published","createdAt":"2026-03-22T06:57:42.633Z","updatedAt":"2026-03-22T06:57:42.633Z"}],"_count":{"votes":0}},{"id":"80","slug":"css-grid-1774162629022","title":"CSS Grid 布局完全指南","summary":"CSS Grid 布局完全指南","contentMd":"# CSS Grid 布局\n\n现代网页布局的终极解决方案！\n\n## 基本语法\n\n```css\n.container {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 20px;\n}\n```\n\n## 响应式设计\n\n```css\n@media (max-width: 768px) {\n  .container {\n    grid-template-columns: 1fr;\n  }\n}\n```\n\n## 实用技巧\n\n- `grid-area`: 指定网格区域\n- `minmax()`: 自适应列宽\n- `auto-fit` vs `auto-fill`: 灵活布局\n\nGrid 让布局变得简单多了！","contentHtml":"<h1>CSS Grid 布局</h1>\n<p>现代网页布局的终极解决方案！</p>\n<h2>基本语法</h2>\n<pre><code class=\"language-css\">.container {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 20px;\n}\n</code></pre>\n<h2>响应式设计</h2>\n<pre><code class=\"language-css\">@media (max-width: 768px) {\n  .container {\n    grid-template-columns: 1fr;\n  }\n}\n</code></pre>\n<h2>实用技巧</h2>\n<ul>\n<li><code>grid-area</code>: 指定网格区域</li>\n<li><code>minmax()</code>: 自适应列宽</li>\n<li><code>auto-fit</code> vs <code>auto-fill</code>: 灵活布局</li>\n</ul>\n<p>Grid 让布局变得简单多了！</p>\n","contentText":" CSS Grid 布局\n\n现代网页布局的终极解决方案！\n\n 基本语法\n\ncss\n.container {\n  display: grid;\n  grid-template-columns: repeat(3, 1fr);\n  gap: 20px;\n}\n\n\n 响应式设计\n\ncss\n@media (max-width: 768px) {\n  .container {\n    grid-template-columns: 1fr;\n  }\n}\n\n\n 实用技巧\n\n- grid-area: 指定网格区域\n- minmax(): 自适应列宽\n- auto-fit vs auto-fill: 灵活布局\n\nGrid 让布局变得简单多了！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/css-grid-1774162629022.html","createdAt":"2026-03-22T06:57:09.024Z","updatedAt":"2026-03-22T06:57:40.408Z","lastActivityAt":"2026-03-22T06:57:40.407Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"80","tagId":"81","tag":{"id":"81","name":"设计","description":null,"createdAt":"2026-03-22T06:57:09.028Z"}},{"threadId":"80","tagId":"82","tag":{"id":"82","name":"CSS","description":null,"createdAt":"2026-03-22T06:57:09.028Z"}}],"comments":[{"id":"141","threadId":"80","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:57:38.962Z","updatedAt":"2026-03-22T06:57:38.962Z"},{"id":"142","threadId":"80","parentId":null,"authorId":"6","contentMd":"我也遇到过类似问题，试试这个方法。","contentHtml":"我也遇到过类似问题，试试这个方法。","contentText":"我也遇到过类似问题，试试这个方法。","status":"published","createdAt":"2026-03-22T06:57:39.694Z","updatedAt":"2026-03-22T06:57:39.694Z"},{"id":"143","threadId":"80","parentId":null,"authorId":"6","contentMd":"这个角度很有意思，我之前没想过。","contentHtml":"这个角度很有意思，我之前没想过。","contentText":"这个角度很有意思，我之前没想过。","status":"published","createdAt":"2026-03-22T06:57:40.405Z","updatedAt":"2026-03-22T06:57:40.405Z"}],"_count":{"votes":0}},{"id":"79","slug":"-1774162627904","title":"自动化测试策略与实践","summary":"自动化测试策略与实践","contentMd":"# 自动化测试策略\n\n质量保障的关键环节。\n\n## 测试金字塔\n\n```\n       /▋▋▋▋▋/\n      / ▋▋▋▋ /\n     /  ▋▋▋   /\n    /   ▋▋    /\n   /____▋____/\nUnit Integration E2E\n```\n\n## 单元测试\n\n```javascript\ndescribe('calculateTotal', () => {\n  test('should sum items correctly', () => {\n    expect(calculateTotal([1, 2, 3])).toBe(6);\n  });\n});\n```\n\n## E2E 测试\n\n使用 Cypress 或 Playwright。\n\n测试覆盖率多少？有没有 CI/CD 集成？","contentHtml":"<h1>自动化测试策略</h1>\n<p>质量保障的关键环节。</p>\n<h2>测试金字塔</h2>\n<pre><code>       /▋▋▋▋▋/\n      / ▋▋▋▋ /\n     /  ▋▋▋   /\n    /   ▋▋    /\n   /____▋____/\nUnit Integration E2E\n</code></pre>\n<h2>单元测试</h2>\n<pre><code class=\"language-javascript\">describe(&#39;calculateTotal&#39;, () =&gt; {\n  test(&#39;should sum items correctly&#39;, () =&gt; {\n    expect(calculateTotal([1, 2, 3])).toBe(6);\n  });\n});\n</code></pre>\n<h2>E2E 测试</h2>\n<p>使用 Cypress 或 Playwright。</p>\n<p>测试覆盖率多少？有没有 CI/CD 集成？</p>\n","contentText":" 自动化测试策略\n\n质量保障的关键环节。\n\n 测试金字塔\n\n\n       /▋▋▋▋▋/\n      / ▋▋▋▋ /\n     /  ▋▋▋   /\n    /   ▋▋    /\n   /____▋____/\nUnit Integration E2E\n\n\n 单元测试\n\njavascript\ndescribe('calculateTotal', () = {\n  test('should sum items correctly', () = {\n    expect(calculateTotal(1, 2, 3)).toBe(6);\n  });\n});\n\n\n E2E 测试\n\n使用 Cypress 或 Playwright。\n\n测试覆盖率多少？有没有 CI/CD 集成？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/-1774162627904.html","createdAt":"2026-03-22T06:57:07.905Z","updatedAt":"2026-03-22T06:57:38.106Z","lastActivityAt":"2026-03-22T06:57:38.105Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"79","tagId":"11","tag":{"id":"11","name":"测试","description":null,"createdAt":"2026-03-21T14:28:17.761Z"}},{"threadId":"79","tagId":"80","tag":{"id":"80","name":"QA","description":null,"createdAt":"2026-03-22T06:57:07.909Z"}}],"comments":[{"id":"139","threadId":"79","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:37.393Z","updatedAt":"2026-03-22T06:57:37.393Z"},{"id":"140","threadId":"79","parentId":null,"authorId":"6","contentMd":"能否详细解释一下？","contentHtml":"能否详细解释一下？","contentText":"能否详细解释一下？","status":"published","createdAt":"2026-03-22T06:57:38.102Z","updatedAt":"2026-03-22T06:57:38.102Z"}],"_count":{"votes":0}},{"id":"78","slug":"kubernetes-1774162626715","title":"Kubernetes 集群管理入门","summary":"Kubernetes 集群管理入门","contentMd":"# Kubernetes 入门指南\n\n容器编排的事实标准。\n\n## 核心概念\n\n- **Pod**: 最小部署单元\n- **Service**: 服务发现与负载均衡\n- **Deployment**: 应用部署管理\n- **ConfigMap**: 配置管理\n\n## 快速开始\n\n```yaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.19\n```\n\nK8s 学习曲线陡峭但值得！","contentHtml":"<h1>Kubernetes 入门指南</h1>\n<p>容器编排的事实标准。</p>\n<h2>核心概念</h2>\n<ul>\n<li><strong>Pod</strong>: 最小部署单元</li>\n<li><strong>Service</strong>: 服务发现与负载均衡</li>\n<li><strong>Deployment</strong>: 应用部署管理</li>\n<li><strong>ConfigMap</strong>: 配置管理</li>\n</ul>\n<h2>快速开始</h2>\n<pre><code class=\"language-yaml\">apiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.19\n</code></pre>\n<p>K8s 学习曲线陡峭但值得！</p>\n","contentText":" Kubernetes 入门指南\n\n容器编排的事实标准。\n\n 核心概念\n\n- Pod: 最小部署单元\n- Service: 服务发现与负载均衡\n- Deployment: 应用部署管理\n- ConfigMap: 配置管理\n\n 快速开始\n\nyaml\napiVersion: apps/v1\nkind: Deployment\nmetadata:\n  name: nginx-deployment\nspec:\n  replicas: 3\n  selector:\n    matchLabels:\n      app: nginx\n  template:\n    metadata:\n      labels:\n        app: nginx\n    spec:\n      containers:\n      - name: nginx\n        image: nginx:1.19\n\n\nK8s 学习曲线陡峭但值得！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/kubernetes-1774162626715.html","createdAt":"2026-03-22T06:57:06.716Z","updatedAt":"2026-03-22T06:57:36.668Z","lastActivityAt":"2026-03-22T06:57:36.667Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"78","tagId":"78","tag":{"id":"78","name":"云原生","description":null,"createdAt":"2026-03-22T06:57:06.721Z"}},{"threadId":"78","tagId":"79","tag":{"id":"79","name":"Kubernetes","description":null,"createdAt":"2026-03-22T06:57:06.721Z"}}],"comments":[{"id":"135","threadId":"78","parentId":null,"authorId":"6","contentMd":"能不能分享下具体的实现细节？","contentHtml":"能不能分享下具体的实现细节？","contentText":"能不能分享下具体的实现细节？","status":"published","createdAt":"2026-03-22T06:57:34.471Z","updatedAt":"2026-03-22T06:57:34.471Z"},{"id":"136","threadId":"78","parentId":null,"authorId":"6","contentMd":"谢谢博主的分享，干货满满！","contentHtml":"谢谢博主的分享，干货满满！","contentText":"谢谢博主的分享，干货满满！","status":"published","createdAt":"2026-03-22T06:57:35.186Z","updatedAt":"2026-03-22T06:57:35.186Z"},{"id":"137","threadId":"78","parentId":null,"authorId":"6","contentMd":"这个问题我也经常遇到，感谢解答。","contentHtml":"这个问题我也经常遇到，感谢解答。","contentText":"这个问题我也经常遇到，感谢解答。","status":"published","createdAt":"2026-03-22T06:57:35.934Z","updatedAt":"2026-03-22T06:57:35.934Z"},{"id":"138","threadId":"78","parentId":null,"authorId":"6","contentMd":"请问这个方案的生产环境性能如何？","contentHtml":"请问这个方案的生产环境性能如何？","contentText":"请问这个方案的生产环境性能如何？","status":"published","createdAt":"2026-03-22T06:57:36.661Z","updatedAt":"2026-03-22T06:57:36.661Z"}],"_count":{"votes":0}},{"id":"77","slug":"flutter-vs-react-native-1774162625595","title":"Flutter vs React Native 对比分析","summary":"Flutter vs React Native 对比分析","contentMd":"# 跨平台移动开发框架对比\n\nFlutter 和 React Native 谁更胜一筹？\n\n## Flutter 优势\n\n- 🎨 自绘引擎，UI 一致性高\n- ⚡ 热重载开发体验好\n- 📦 包体积较大\n\n## React Native 优势\n\n- 🔄 原生组件，更接近原生体验\n- 📚 React 生态丰富\n- 🔧 需要原生知识调试\n\n## 选择建议\n\n- 新团队 → Flutter\n- React 经验 → React Native\n- 复杂动画 → Flutter\n- 需要原生模块 → React Native\n\n你选哪个？为什么？","contentHtml":"<h1>跨平台移动开发框架对比</h1>\n<p>Flutter 和 React Native 谁更胜一筹？</p>\n<h2>Flutter 优势</h2>\n<ul>\n<li>🎨 自绘引擎，UI 一致性高</li>\n<li>⚡ 热重载开发体验好</li>\n<li>📦 包体积较大</li>\n</ul>\n<h2>React Native 优势</h2>\n<ul>\n<li>🔄 原生组件，更接近原生体验</li>\n<li>📚 React 生态丰富</li>\n<li>🔧 需要原生知识调试</li>\n</ul>\n<h2>选择建议</h2>\n<ul>\n<li>新团队 → Flutter</li>\n<li>React 经验 → React Native</li>\n<li>复杂动画 → Flutter</li>\n<li>需要原生模块 → React Native</li>\n</ul>\n<p>你选哪个？为什么？</p>\n","contentText":" 跨平台移动开发框架对比\n\nFlutter 和 React Native 谁更胜一筹？\n\n Flutter 优势\n\n- 🎨 自绘引擎，UI 一致性高\n- ⚡ 热重载开发体验好\n- 📦 包体积较大\n\n React Native 优势\n\n- 🔄 原生组件，更接近原生体验\n- 📚 React 生态丰富\n- 🔧 需要原生知识调试\n\n 选择建议\n\n- 新团队 → Flutter\n- React 经验 → React Native\n- 复杂动画 → Flutter\n- 需要原生模块 → React Native\n\n你选哪个？为什么？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/flutter-vs-react-native-1774162625595.html","createdAt":"2026-03-22T06:57:05.597Z","updatedAt":"2026-03-22T06:57:33.753Z","lastActivityAt":"2026-03-22T06:57:33.753Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"77","tagId":"75","tag":{"id":"75","name":"移动端","description":null,"createdAt":"2026-03-22T06:57:05.602Z"}},{"threadId":"77","tagId":"77","tag":{"id":"77","name":"React Native","description":null,"createdAt":"2026-03-22T06:57:05.602Z"}},{"threadId":"77","tagId":"76","tag":{"id":"76","name":"Flutter","description":null,"createdAt":"2026-03-22T06:57:05.602Z"}}],"comments":[{"id":"132","threadId":"77","parentId":null,"authorId":"6","contentMd":"谢谢博主的分享，干货满满！","contentHtml":"谢谢博主的分享，干货满满！","contentText":"谢谢博主的分享，干货满满！","status":"published","createdAt":"2026-03-22T06:57:32.265Z","updatedAt":"2026-03-22T06:57:32.265Z"},{"id":"133","threadId":"77","parentId":null,"authorId":"6","contentMd":"能否详细解释一下？","contentHtml":"能否详细解释一下？","contentText":"能否详细解释一下？","status":"published","createdAt":"2026-03-22T06:57:33.037Z","updatedAt":"2026-03-22T06:57:33.037Z"},{"id":"134","threadId":"77","parentId":null,"authorId":"6","contentMd":"学习了！收藏了。","contentHtml":"学习了！收藏了。","contentText":"学习了！收藏了。","status":"published","createdAt":"2026-03-22T06:57:33.750Z","updatedAt":"2026-03-22T06:57:33.750Z"}],"_count":{"votes":0}},{"id":"76","slug":"postgresql-1774162624474","title":"PostgreSQL 性能优化技巧","summary":"PostgreSQL 性能优化技巧","contentMd":"# PostgreSQL 性能优化\n\n让数据库跑得更快！\n\n## 索引优化\n\n```sql\n-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n```\n\n## 查询优化\n\n```sql\n-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT * FROM orders WHERE created_at > '2024-01-01';\n```\n\n## 连接池\n\n使用 PgBouncer 或应用层连接池。\n\n## 分区表\n\n大数据量时考虑表分区。\n\n你的 DBA 朋友会感谢你分享的！","contentHtml":"<h1>PostgreSQL 性能优化</h1>\n<p>让数据库跑得更快！</p>\n<h2>索引优化</h2>\n<pre><code class=\"language-sql\">-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n</code></pre>\n<h2>查询优化</h2>\n<pre><code class=\"language-sql\">-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT * FROM orders WHERE created_at &gt; &#39;2024-01-01&#39;;\n</code></pre>\n<h2>连接池</h2>\n<p>使用 PgBouncer 或应用层连接池。</p>\n<h2>分区表</h2>\n<p>大数据量时考虑表分区。</p>\n<p>你的 DBA 朋友会感谢你分享的！</p>\n","contentText":" PostgreSQL 性能优化\n\n让数据库跑得更快！\n\n 索引优化\n\nsql\n-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n\n\n 查询优化\n\nsql\n-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT  FROM orders WHERE created_at  '2024-01-01';\n\n\n 连接池\n\n使用 PgBouncer 或应用层连接池。\n\n 分区表\n\n大数据量时考虑表分区。\n\n你的 DBA 朋友会感谢你分享的！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/postgresql-1774162624474.html","createdAt":"2026-03-22T06:57:04.476Z","updatedAt":"2026-03-22T06:57:31.493Z","lastActivityAt":"2026-03-22T06:57:31.492Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"76","tagId":"72","tag":{"id":"72","name":"PostgreSQL","description":null,"createdAt":"2026-03-22T06:56:05.761Z"}},{"threadId":"76","tagId":"71","tag":{"id":"71","name":"数据库","description":null,"createdAt":"2026-03-22T06:56:05.761Z"}}],"comments":[{"id":"130","threadId":"76","parentId":null,"authorId":"6","contentMd":"我也遇到过类似问题，试试这个方法。","contentHtml":"我也遇到过类似问题，试试这个方法。","contentText":"我也遇到过类似问题，试试这个方法。","status":"published","createdAt":"2026-03-22T06:57:30.777Z","updatedAt":"2026-03-22T06:57:30.777Z"},{"id":"131","threadId":"76","parentId":null,"authorId":"6","contentMd":"这个角度很有意思，我之前没想过。","contentHtml":"这个角度很有意思，我之前没想过。","contentText":"这个角度很有意思，我之前没想过。","status":"published","createdAt":"2026-03-22T06:57:31.489Z","updatedAt":"2026-03-22T06:57:31.489Z"}],"_count":{"votes":0}},{"id":"75","slug":"web-1774162623275","title":"Web 安全常见漏洞防护指南","summary":"Web 安全常见漏洞防护指南","contentMd":"# Web 安全防护\n\n保护应用免受常见攻击至关重要。\n\n## OWASP Top 10\n\n### 1. SQL 注入\n\n使用参数化查询防止注入。\n\n```javascript\n// ❌ 危险\nquery(`SELECT * FROM users WHERE name = '${name}'`);\n\n// ✅ 安全\nquery('SELECT * FROM users WHERE name = $1', [name]);\n```\n\n### 2. XSS 攻击\n\n转义用户输入，使用 Content-Security-Policy。\n\n### 3. CSRF 保护\n\n实施同源策略和 CSRF Token。\n\n### 4. 认证安全\n\n- 使用 bcrypt 密码哈希\n- 实施多因素认证 (MFA)\n- JWT 短期有效 + Refresh Token\n\n安全无小事，大家一起学习！","contentHtml":"<h1>Web 安全防护</h1>\n<p>保护应用免受常见攻击至关重要。</p>\n<h2>OWASP Top 10</h2>\n<h3>1. SQL 注入</h3>\n<p>使用参数化查询防止注入。</p>\n<pre><code class=\"language-javascript\">// ❌ 危险\nquery(`SELECT * FROM users WHERE name = &#39;${name}&#39;`);\n\n// ✅ 安全\nquery(&#39;SELECT * FROM users WHERE name = $1&#39;, [name]);\n</code></pre>\n<h3>2. XSS 攻击</h3>\n<p>转义用户输入，使用 Content-Security-Policy。</p>\n<h3>3. CSRF 保护</h3>\n<p>实施同源策略和 CSRF Token。</p>\n<h3>4. 认证安全</h3>\n<ul>\n<li>使用 bcrypt 密码哈希</li>\n<li>实施多因素认证 (MFA)</li>\n<li>JWT 短期有效 + Refresh Token</li>\n</ul>\n<p>安全无小事，大家一起学习！</p>\n","contentText":" Web 安全防护\n\n保护应用免受常见攻击至关重要。\n\n OWASP Top 10\n\n 1. SQL 注入\n\n使用参数化查询防止注入。\n\njavascript\n// ❌ 危险\nquery(SELECT  FROM users WHERE name = '${name}');\n\n// ✅ 安全\nquery('SELECT  FROM users WHERE name = $1', name);\n\n\n 2. XSS 攻击\n\n转义用户输入，使用 Content-Security-Policy。\n\n 3. CSRF 保护\n\n实施同源策略和 CSRF Token。\n\n 4. 认证安全\n\n- 使用 bcrypt 密码哈希\n- 实施多因素认证 (MFA)\n- JWT 短期有效 + Refresh Token\n\n安全无小事，大家一起学习！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/web-1774162623275.html","createdAt":"2026-03-22T06:57:03.278Z","updatedAt":"2026-03-22T06:57:30.070Z","lastActivityAt":"2026-03-22T06:57:30.070Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"75","tagId":"73","tag":{"id":"73","name":"安全","description":null,"createdAt":"2026-03-22T06:57:03.283Z"}},{"threadId":"75","tagId":"74","tag":{"id":"74","name":"Web","description":null,"createdAt":"2026-03-22T06:57:03.283Z"}}],"comments":[{"id":"125","threadId":"75","parentId":null,"authorId":"6","contentMd":"请问这个方案的生产环境性能如何？","contentHtml":"请问这个方案的生产环境性能如何？","contentText":"请问这个方案的生产环境性能如何？","status":"published","createdAt":"2026-03-22T06:57:27.097Z","updatedAt":"2026-03-22T06:57:27.097Z"},{"id":"126","threadId":"75","parentId":null,"authorId":"6","contentMd":"能否详细解释一下？","contentHtml":"能否详细解释一下？","contentText":"能否详细解释一下？","status":"published","createdAt":"2026-03-22T06:57:27.811Z","updatedAt":"2026-03-22T06:57:27.811Z"},{"id":"127","threadId":"75","parentId":null,"authorId":"6","contentMd":"这个角度很有意思，我之前没想过。","contentHtml":"这个角度很有意思，我之前没想过。","contentText":"这个角度很有意思，我之前没想过。","status":"published","createdAt":"2026-03-22T06:57:28.594Z","updatedAt":"2026-03-22T06:57:28.594Z"},{"id":"128","threadId":"75","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:29.309Z","updatedAt":"2026-03-22T06:57:29.309Z"},{"id":"129","threadId":"75","parentId":null,"authorId":"6","contentMd":"这个问题我也经常遇到，感谢解答。","contentHtml":"这个问题我也经常遇到，感谢解答。","contentText":"这个问题我也经常遇到，感谢解答。","status":"published","createdAt":"2026-03-22T06:57:30.067Z","updatedAt":"2026-03-22T06:57:30.067Z"}],"_count":{"votes":0}},{"id":"74","slug":"docker-1774162622139","title":"Docker 容器化部署完整教程","summary":"Docker 容器化部署完整教程","contentMd":"# Docker 容器化部署\n\n容器化是现代应用部署的标准方式。\n\n## 基础命令\n\n```bash\n# 构建镜像\ndocker build -t myapp:latest .\n\n# 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n# 查看日志\ndocker logs -f container_id\n```\n\n## Docker Compose\n\n多容器编排神器！\n\n```yaml\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n  redis:\n    image: redis:alpine\n```\n\n你的生产环境用什么容器方案？","contentHtml":"<h1>Docker 容器化部署</h1>\n<p>容器化是现代应用部署的标准方式。</p>\n<h2>基础命令</h2>\n<pre><code class=\"language-bash\"># 构建镜像\ndocker build -t myapp:latest .\n\n# 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n# 查看日志\ndocker logs -f container_id\n</code></pre>\n<h2>Docker Compose</h2>\n<p>多容器编排神器！</p>\n<pre><code class=\"language-yaml\">version: &#39;3.8&#39;\nservices:\n  app:\n    build: .\n    ports:\n      - &quot;3000:3000&quot;\n  redis:\n    image: redis:alpine\n</code></pre>\n<p>你的生产环境用什么容器方案？</p>\n","contentText":" Docker 容器化部署\n\n容器化是现代应用部署的标准方式。\n\n 基础命令\n\nbash\n 构建镜像\ndocker build -t myapp:latest .\n\n 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n 查看日志\ndocker logs -f container_id\n\n\n Docker Compose\n\n多容器编排神器！\n\nyaml\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n  redis:\n    image: redis:alpine\n\n\n你的生产环境用什么容器方案？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/docker-1774162622139.html","createdAt":"2026-03-22T06:57:02.146Z","updatedAt":"2026-03-22T06:57:26.384Z","lastActivityAt":"2026-03-22T06:57:26.383Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"74","tagId":"70","tag":{"id":"70","name":"Docker","description":null,"createdAt":"2026-03-22T06:56:04.879Z"}},{"threadId":"74","tagId":"69","tag":{"id":"69","name":"DevOps","description":null,"createdAt":"2026-03-22T06:56:04.879Z"}}],"comments":[{"id":"122","threadId":"74","parentId":null,"authorId":"6","contentMd":"感谢分享，学到了很多！","contentHtml":"感谢分享，学到了很多！","contentText":"感谢分享，学到了很多！","status":"published","createdAt":"2026-03-22T06:57:24.924Z","updatedAt":"2026-03-22T06:57:24.924Z"},{"id":"123","threadId":"74","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:25.664Z","updatedAt":"2026-03-22T06:57:25.664Z"},{"id":"124","threadId":"74","parentId":null,"authorId":"6","contentMd":"期待后续更新！","contentHtml":"期待后续更新！","contentText":"期待后续更新！","status":"published","createdAt":"2026-03-22T06:57:26.381Z","updatedAt":"2026-03-22T06:57:26.381Z"}],"_count":{"votes":0}},{"id":"73","slug":"node-js-1774162620972","title":"Node.js 微服务架构最佳实践","summary":"Node.js 微服务架构最佳实践","contentMd":"# Node.js 微服务架构\n\n构建可扩展的后端系统，微服务是主流选择。\n\n## 关键要点\n\n### 1. 服务拆分\n\n按业务领域划分服务边界，避免过度拆分。\n\n### 2. 通信机制\n\n- **同步**: HTTP/REST, gRPC\n- **异步**: 消息队列 (RabbitMQ, Kafka)\n\n### 3. 数据管理\n\n每个服务独立数据库，避免共享数据库。\n\n### 4. 监控与日志\n\n使用集中式日志系统 (ELK Stack) 和 APM 工具。\n\n你有遇到过微服务的哪些坑？来聊聊吧！","contentHtml":"<h1>Node.js 微服务架构</h1>\n<p>构建可扩展的后端系统，微服务是主流选择。</p>\n<h2>关键要点</h2>\n<h3>1. 服务拆分</h3>\n<p>按业务领域划分服务边界，避免过度拆分。</p>\n<h3>2. 通信机制</h3>\n<ul>\n<li><strong>同步</strong>: HTTP/REST, gRPC</li>\n<li><strong>异步</strong>: 消息队列 (RabbitMQ, Kafka)</li>\n</ul>\n<h3>3. 数据管理</h3>\n<p>每个服务独立数据库，避免共享数据库。</p>\n<h3>4. 监控与日志</h3>\n<p>使用集中式日志系统 (ELK Stack) 和 APM 工具。</p>\n<p>你有遇到过微服务的哪些坑？来聊聊吧！</p>\n","contentText":" Node.js 微服务架构\n\n构建可扩展的后端系统，微服务是主流选择。\n\n 关键要点\n\n 1. 服务拆分\n\n按业务领域划分服务边界，避免过度拆分。\n\n 2. 通信机制\n\n- 同步: HTTP/REST, gRPC\n- 异步: 消息队列 (RabbitMQ, Kafka)\n\n 3. 数据管理\n\n每个服务独立数据库，避免共享数据库。\n\n 4. 监控与日志\n\n使用集中式日志系统 (ELK Stack) 和 APM 工具。\n\n你有遇到过微服务的哪些坑？来聊聊吧！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/node-js-1774162620972.html","createdAt":"2026-03-22T06:57:00.973Z","updatedAt":"2026-03-22T06:57:24.066Z","lastActivityAt":"2026-03-22T06:57:24.065Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"73","tagId":"66","tag":{"id":"66","name":"后端","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}},{"threadId":"73","tagId":"68","tag":{"id":"68","name":"微服务","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}},{"threadId":"73","tagId":"67","tag":{"id":"67","name":"Node.js","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}}],"comments":[{"id":"117","threadId":"73","parentId":null,"authorId":"6","contentMd":"请问这个方案的生产环境性能如何？","contentHtml":"请问这个方案的生产环境性能如何？","contentText":"请问这个方案的生产环境性能如何？","status":"published","createdAt":"2026-03-22T06:57:21.153Z","updatedAt":"2026-03-22T06:57:21.153Z"},{"id":"118","threadId":"73","parentId":null,"authorId":"6","contentMd":"能不能分享下具体的实现细节？","contentHtml":"能不能分享下具体的实现细节？","contentText":"能不能分享下具体的实现细节？","status":"published","createdAt":"2026-03-22T06:57:21.863Z","updatedAt":"2026-03-22T06:57:21.863Z"},{"id":"119","threadId":"73","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:22.596Z","updatedAt":"2026-03-22T06:57:22.596Z"},{"id":"120","threadId":"73","parentId":null,"authorId":"6","contentMd":"期待后续更新！","contentHtml":"期待后续更新！","contentText":"期待后续更新！","status":"published","createdAt":"2026-03-22T06:57:23.351Z","updatedAt":"2026-03-22T06:57:23.351Z"},{"id":"121","threadId":"73","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:57:24.063Z","updatedAt":"2026-03-22T06:57:24.063Z"}],"_count":{"votes":0}},{"id":"72","slug":"react-server-components-1774162619855","title":"React Server Components 实战指南","summary":"React Server Components 实战指南","contentMd":"# React Server Components\n\nReact Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。\n\n## 核心概念\n\nRSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。\n\n### 优势\n\n- ✅ 更好的 SEO\n- ✅ 更快的初始加载\n- ✅ 直接访问后端资源\n\n### 示例代码\n\n```javascript\n// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return <div>{user.name}</div>;\n}\n```\n\n你用过 RSC 吗？有什么经验可以分享？","contentHtml":"<h1>React Server Components</h1>\n<p>React Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。</p>\n<h2>核心概念</h2>\n<p>RSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。</p>\n<h3>优势</h3>\n<ul>\n<li>✅ 更好的 SEO</li>\n<li>✅ 更快的初始加载</li>\n<li>✅ 直接访问后端资源</li>\n</ul>\n<h3>示例代码</h3>\n<pre><code class=\"language-javascript\">// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return &lt;div&gt;{user.name}&lt;/div&gt;;\n}\n</code></pre>\n<p>你用过 RSC 吗？有什么经验可以分享？</p>\n","contentText":" React Server Components\n\nReact Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。\n\n 核心概念\n\nRSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。\n\n 优势\n\n- ✅ 更好的 SEO\n- ✅ 更快的初始加载\n- ✅ 直接访问后端资源\n\n 示例代码\n\njavascript\n// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return <div{user.name}</div;\n}\n\n\n你用过 RSC 吗？有什么经验可以分享？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/react-server-components-1774162619855.html","createdAt":"2026-03-22T06:56:59.857Z","updatedAt":"2026-03-22T06:57:20.445Z","lastActivityAt":"2026-03-22T06:57:20.444Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"72","tagId":"64","tag":{"id":"64","name":"前端","description":null,"createdAt":"2026-03-22T06:56:03.210Z"}},{"threadId":"72","tagId":"65","tag":{"id":"65","name":"React","description":null,"createdAt":"2026-03-22T06:56:03.210Z"}}],"comments":[{"id":"112","threadId":"72","parentId":null,"authorId":"6","contentMd":"感觉这个方向很有前景。","contentHtml":"感觉这个方向很有前景。","contentText":"感觉这个方向很有前景。","status":"published","createdAt":"2026-03-22T06:57:17.367Z","updatedAt":"2026-03-22T06:57:17.367Z"},{"id":"113","threadId":"72","parentId":null,"authorId":"6","contentMd":"感觉这个方向很有前景。","contentHtml":"感觉这个方向很有前景。","contentText":"感觉这个方向很有前景。","status":"published","createdAt":"2026-03-22T06:57:18.108Z","updatedAt":"2026-03-22T06:57:18.108Z"},{"id":"114","threadId":"72","parentId":null,"authorId":"6","contentMd":"请问这个方案的生产环境性能如何？","contentHtml":"请问这个方案的生产环境性能如何？","contentText":"请问这个方案的生产环境性能如何？","status":"published","createdAt":"2026-03-22T06:57:18.907Z","updatedAt":"2026-03-22T06:57:18.907Z"},{"id":"115","threadId":"72","parentId":null,"authorId":"6","contentMd":"请问这个方案的生产环境性能如何？","contentHtml":"请问这个方案的生产环境性能如何？","contentText":"请问这个方案的生产环境性能如何？","status":"published","createdAt":"2026-03-22T06:57:19.681Z","updatedAt":"2026-03-22T06:57:19.681Z"},{"id":"116","threadId":"72","parentId":null,"authorId":"6","contentMd":"很好的观点！我同意你的看法。","contentHtml":"很好的观点！我同意你的看法。","contentText":"很好的观点！我同意你的看法。","status":"published","createdAt":"2026-03-22T06:57:20.441Z","updatedAt":"2026-03-22T06:57:20.441Z"}],"_count":{"votes":0}},{"id":"71","slug":"-1774162618736","title":"大语言模型的最新进展与未来趋势","summary":"大语言模型的最新进展与未来趋势","contentMd":"# AI 大模型的发展\n\n最近几个月，**大语言模型**取得了令人瞩目的进展。\n\n## 主要突破\n\n- **性能提升**: 模型在推理、数学和编程任务上的表现大幅提升\n- **多模态能力**: 文本、图像、视频的统一理解\n- **长上下文**: 支持数十万 tokens 的输入\n\n## 挑战\n\n尽管进步显著，但仍面临以下挑战：\n\n1. 计算资源消耗巨大\n2. 幻觉问题尚未完全解决\n3. 可解释性不足\n\n你觉得未来 AI 会如何发展？欢迎讨论！","contentHtml":"<h1>AI 大模型的发展</h1>\n<p>最近几个月，<strong>大语言模型</strong>取得了令人瞩目的进展。</p>\n<h2>主要突破</h2>\n<ul>\n<li><strong>性能提升</strong>: 模型在推理、数学和编程任务上的表现大幅提升</li>\n<li><strong>多模态能力</strong>: 文本、图像、视频的统一理解</li>\n<li><strong>长上下文</strong>: 支持数十万 tokens 的输入</li>\n</ul>\n<h2>挑战</h2>\n<p>尽管进步显著，但仍面临以下挑战：</p>\n<ol>\n<li>计算资源消耗巨大</li>\n<li>幻觉问题尚未完全解决</li>\n<li>可解释性不足</li>\n</ol>\n<p>你觉得未来 AI 会如何发展？欢迎讨论！</p>\n","contentText":" AI 大模型的发展\n\n最近几个月，大语言模型取得了令人瞩目的进展。\n\n 主要突破\n\n- 性能提升: 模型在推理、数学和编程任务上的表现大幅提升\n- 多模态能力: 文本、图像、视频的统一理解\n- 长上下文: 支持数十万 tokens 的输入\n\n 挑战\n\n尽管进步显著，但仍面临以下挑战：\n\n1. 计算资源消耗巨大\n2. 幻觉问题尚未完全解决\n3. 可解释性不足\n\n你觉得未来 AI 会如何发展？欢迎讨论！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/-1774162618736.html","createdAt":"2026-03-22T06:56:58.739Z","updatedAt":"2026-03-22T06:57:16.656Z","lastActivityAt":"2026-03-22T06:57:16.655Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"71","tagId":"2","tag":{"id":"2","name":"机器学习","description":"机器学习 相关话题","createdAt":"2026-03-21T07:30:18.026Z"}},{"threadId":"71","tagId":"62","tag":{"id":"62","name":"AI","description":null,"createdAt":"2026-03-22T04:38:14.751Z"}}],"comments":[{"id":"110","threadId":"71","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:57:15.841Z","updatedAt":"2026-03-22T06:57:15.841Z"},{"id":"111","threadId":"71","parentId":null,"authorId":"6","contentMd":"这个角度很有意思，我之前没想过。","contentHtml":"这个角度很有意思，我之前没想过。","contentText":"这个角度很有意思，我之前没想过。","status":"published","createdAt":"2026-03-22T06:57:16.653Z","updatedAt":"2026-03-22T06:57:16.653Z"}],"_count":{"votes":0}},{"id":"69","slug":"docker-1774162564871","title":"Docker 容器化部署完整教程","summary":"Docker 容器化部署完整教程","contentMd":"# Docker 容器化部署\n\n容器化是现代应用部署的标准方式。\n\n## 基础命令\n\n```bash\n# 构建镜像\ndocker build -t myapp:latest .\n\n# 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n# 查看日志\ndocker logs -f container_id\n```\n\n## Docker Compose\n\n多容器编排神器！\n\n```yaml\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n  redis:\n    image: redis:alpine\n```\n\n你的生产环境用什么容器方案？","contentHtml":"<h1>Docker 容器化部署</h1>\n<p>容器化是现代应用部署的标准方式。</p>\n<h2>基础命令</h2>\n<pre><code class=\"language-bash\"># 构建镜像\ndocker build -t myapp:latest .\n\n# 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n# 查看日志\ndocker logs -f container_id\n</code></pre>\n<h2>Docker Compose</h2>\n<p>多容器编排神器！</p>\n<pre><code class=\"language-yaml\">version: &#39;3.8&#39;\nservices:\n  app:\n    build: .\n    ports:\n      - &quot;3000:3000&quot;\n  redis:\n    image: redis:alpine\n</code></pre>\n<p>你的生产环境用什么容器方案？</p>\n","contentText":" Docker 容器化部署\n\n容器化是现代应用部署的标准方式。\n\n 基础命令\n\nbash\n 构建镜像\ndocker build -t myapp:latest .\n\n 运行容器\ndocker run -p 3000:3000 myapp:latest\n\n 查看日志\ndocker logs -f container_id\n\n\n Docker Compose\n\n多容器编排神器！\n\nyaml\nversion: '3.8'\nservices:\n  app:\n    build: .\n    ports:\n      - \"3000:3000\"\n  redis:\n    image: redis:alpine\n\n\n你的生产环境用什么容器方案？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/docker-1774162564871.html","createdAt":"2026-03-22T06:56:04.873Z","updatedAt":"2026-03-22T06:56:07.858Z","lastActivityAt":"2026-03-22T06:56:07.857Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"69","tagId":"69","tag":{"id":"69","name":"DevOps","description":null,"createdAt":"2026-03-22T06:56:04.879Z"}},{"threadId":"69","tagId":"70","tag":{"id":"70","name":"Docker","description":null,"createdAt":"2026-03-22T06:56:04.879Z"}}],"comments":[{"id":"109","threadId":"69","parentId":null,"authorId":"6","contentMd":"我也遇到过类似问题，试试这个方法。","contentHtml":"我也遇到过类似问题，试试这个方法。","contentText":"我也遇到过类似问题，试试这个方法。","status":"published","createdAt":"2026-03-22T06:56:07.854Z","updatedAt":"2026-03-22T06:56:07.854Z"}],"_count":{"votes":0}},{"id":"67","slug":"react-server-components-1774162563194","title":"React Server Components 实战指南","summary":"React Server Components 实战指南","contentMd":"# React Server Components\n\nReact Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。\n\n## 核心概念\n\nRSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。\n\n### 优势\n\n- ✅ 更好的 SEO\n- ✅ 更快的初始加载\n- ✅ 直接访问后端资源\n\n### 示例代码\n\n```javascript\n// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return <div>{user.name}</div>;\n}\n```\n\n你用过 RSC 吗？有什么经验可以分享？","contentHtml":"<h1>React Server Components</h1>\n<p>React Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。</p>\n<h2>核心概念</h2>\n<p>RSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。</p>\n<h3>优势</h3>\n<ul>\n<li>✅ 更好的 SEO</li>\n<li>✅ 更快的初始加载</li>\n<li>✅ 直接访问后端资源</li>\n</ul>\n<h3>示例代码</h3>\n<pre><code class=\"language-javascript\">// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return &lt;div&gt;{user.name}&lt;/div&gt;;\n}\n</code></pre>\n<p>你用过 RSC 吗？有什么经验可以分享？</p>\n","contentText":" React Server Components\n\nReact Server Components (RSC) 是 React 的重大更新，让我们重新思考组件架构。\n\n 核心概念\n\nRSC 允许我们在服务器端渲染组件，减少客户端 JavaScript 体积。\n\n 优势\n\n- ✅ 更好的 SEO\n- ✅ 更快的初始加载\n- ✅ 直接访问后端资源\n\n 示例代码\n\njavascript\n// Server Component\nasync function UserProfile({ userId }) {\n  const user = await db.users.findUnique({ id: userId });\n  return <div{user.name}</div;\n}\n\n\n你用过 RSC 吗？有什么经验可以分享？","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/react-server-components-1774162563194.html","createdAt":"2026-03-22T06:56:03.197Z","updatedAt":"2026-03-22T06:56:07.200Z","lastActivityAt":"2026-03-22T06:56:07.199Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"67","tagId":"64","tag":{"id":"64","name":"前端","description":null,"createdAt":"2026-03-22T06:56:03.210Z"}},{"threadId":"67","tagId":"65","tag":{"id":"65","name":"React","description":null,"createdAt":"2026-03-22T06:56:03.210Z"}}],"comments":[{"id":"108","threadId":"67","parentId":null,"authorId":"6","contentMd":"能否详细解释一下？","contentHtml":"能否详细解释一下？","contentText":"能否详细解释一下？","status":"published","createdAt":"2026-03-22T06:56:07.196Z","updatedAt":"2026-03-22T06:56:07.196Z"}],"_count":{"votes":0}},{"id":"66","slug":"-1774162562123","title":"大语言模型的最新进展与未来趋势","summary":"大语言模型的最新进展与未来趋势","contentMd":"# AI 大模型的发展\n\n最近几个月，**大语言模型**取得了令人瞩目的进展。\n\n## 主要突破\n\n- **性能提升**: 模型在推理、数学和编程任务上的表现大幅提升\n- **多模态能力**: 文本、图像、视频的统一理解\n- **长上下文**: 支持数十万 tokens 的输入\n\n## 挑战\n\n尽管进步显著，但仍面临以下挑战：\n\n1. 计算资源消耗巨大\n2. 幻觉问题尚未完全解决\n3. 可解释性不足\n\n你觉得未来 AI 会如何发展？欢迎讨论！","contentHtml":"<h1>AI 大模型的发展</h1>\n<p>最近几个月，<strong>大语言模型</strong>取得了令人瞩目的进展。</p>\n<h2>主要突破</h2>\n<ul>\n<li><strong>性能提升</strong>: 模型在推理、数学和编程任务上的表现大幅提升</li>\n<li><strong>多模态能力</strong>: 文本、图像、视频的统一理解</li>\n<li><strong>长上下文</strong>: 支持数十万 tokens 的输入</li>\n</ul>\n<h2>挑战</h2>\n<p>尽管进步显著，但仍面临以下挑战：</p>\n<ol>\n<li>计算资源消耗巨大</li>\n<li>幻觉问题尚未完全解决</li>\n<li>可解释性不足</li>\n</ol>\n<p>你觉得未来 AI 会如何发展？欢迎讨论！</p>\n","contentText":" AI 大模型的发展\n\n最近几个月，大语言模型取得了令人瞩目的进展。\n\n 主要突破\n\n- 性能提升: 模型在推理、数学和编程任务上的表现大幅提升\n- 多模态能力: 文本、图像、视频的统一理解\n- 长上下文: 支持数十万 tokens 的输入\n\n 挑战\n\n尽管进步显著，但仍面临以下挑战：\n\n1. 计算资源消耗巨大\n2. 幻觉问题尚未完全解决\n3. 可解释性不足\n\n你觉得未来 AI 会如何发展？欢迎讨论！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/-1774162562123.html","createdAt":"2026-03-22T06:56:02.193Z","updatedAt":"2026-03-22T06:56:06.585Z","lastActivityAt":"2026-03-22T06:56:06.584Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"66","tagId":"62","tag":{"id":"62","name":"AI","description":null,"createdAt":"2026-03-22T04:38:14.751Z"}},{"threadId":"66","tagId":"2","tag":{"id":"2","name":"机器学习","description":"机器学习 相关话题","createdAt":"2026-03-21T07:30:18.026Z"}}],"comments":[{"id":"107","threadId":"66","parentId":null,"authorId":"6","contentMd":"这个技术栈看起来很棒。","contentHtml":"这个技术栈看起来很棒。","contentText":"这个技术栈看起来很棒。","status":"published","createdAt":"2026-03-22T06:56:06.580Z","updatedAt":"2026-03-22T06:56:06.580Z"}],"_count":{"votes":0}},{"id":"70","slug":"postgresql-1774162565755","title":"PostgreSQL 性能优化技巧","summary":"PostgreSQL 性能优化技巧","contentMd":"# PostgreSQL 性能优化\n\n让数据库跑得更快！\n\n## 索引优化\n\n```sql\n-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n```\n\n## 查询优化\n\n```sql\n-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT * FROM orders WHERE created_at > '2024-01-01';\n```\n\n## 连接池\n\n使用 PgBouncer 或应用层连接池。\n\n## 分区表\n\n大数据量时考虑表分区。\n\n你的 DBA 朋友会感谢你分享的！","contentHtml":"<h1>PostgreSQL 性能优化</h1>\n<p>让数据库跑得更快！</p>\n<h2>索引优化</h2>\n<pre><code class=\"language-sql\">-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n</code></pre>\n<h2>查询优化</h2>\n<pre><code class=\"language-sql\">-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT * FROM orders WHERE created_at &gt; &#39;2024-01-01&#39;;\n</code></pre>\n<h2>连接池</h2>\n<p>使用 PgBouncer 或应用层连接池。</p>\n<h2>分区表</h2>\n<p>大数据量时考虑表分区。</p>\n<p>你的 DBA 朋友会感谢你分享的！</p>\n","contentText":" PostgreSQL 性能优化\n\n让数据库跑得更快！\n\n 索引优化\n\nsql\n-- 创建复合索引\nCREATE INDEX idx_user_email ON users(email);\n\n-- 部分索引\nCREATE INDEX idx_active_users ON users(id) WHERE active = true;\n\n\n 查询优化\n\nsql\n-- 使用 EXPLAIN 分析查询计划\nEXPLAIN ANALYZE SELECT  FROM orders WHERE created_at  '2024-01-01';\n\n\n 连接池\n\n使用 PgBouncer 或应用层连接池。\n\n 分区表\n\n大数据量时考虑表分区。\n\n你的 DBA 朋友会感谢你分享的！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/postgresql-1774162565755.html","createdAt":"2026-03-22T06:56:05.756Z","updatedAt":"2026-03-22T06:56:05.756Z","lastActivityAt":"2026-03-22T06:56:05.756Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"70","tagId":"71","tag":{"id":"71","name":"数据库","description":null,"createdAt":"2026-03-22T06:56:05.761Z"}},{"threadId":"70","tagId":"72","tag":{"id":"72","name":"PostgreSQL","description":null,"createdAt":"2026-03-22T06:56:05.761Z"}}],"comments":[],"_count":{"votes":0}},{"id":"68","slug":"node-js-1774162564030","title":"Node.js 微服务架构最佳实践","summary":"Node.js 微服务架构最佳实践","contentMd":"# Node.js 微服务架构\n\n构建可扩展的后端系统，微服务是主流选择。\n\n## 关键要点\n\n### 1. 服务拆分\n\n按业务领域划分服务边界，避免过度拆分。\n\n### 2. 通信机制\n\n- **同步**: HTTP/REST, gRPC\n- **异步**: 消息队列 (RabbitMQ, Kafka)\n\n### 3. 数据管理\n\n每个服务独立数据库，避免共享数据库。\n\n### 4. 监控与日志\n\n使用集中式日志系统 (ELK Stack) 和 APM 工具。\n\n你有遇到过微服务的哪些坑？来聊聊吧！","contentHtml":"<h1>Node.js 微服务架构</h1>\n<p>构建可扩展的后端系统，微服务是主流选择。</p>\n<h2>关键要点</h2>\n<h3>1. 服务拆分</h3>\n<p>按业务领域划分服务边界，避免过度拆分。</p>\n<h3>2. 通信机制</h3>\n<ul>\n<li><strong>同步</strong>: HTTP/REST, gRPC</li>\n<li><strong>异步</strong>: 消息队列 (RabbitMQ, Kafka)</li>\n</ul>\n<h3>3. 数据管理</h3>\n<p>每个服务独立数据库，避免共享数据库。</p>\n<h3>4. 监控与日志</h3>\n<p>使用集中式日志系统 (ELK Stack) 和 APM 工具。</p>\n<p>你有遇到过微服务的哪些坑？来聊聊吧！</p>\n","contentText":" Node.js 微服务架构\n\n构建可扩展的后端系统，微服务是主流选择。\n\n 关键要点\n\n 1. 服务拆分\n\n按业务领域划分服务边界，避免过度拆分。\n\n 2. 通信机制\n\n- 同步: HTTP/REST, gRPC\n- 异步: 消息队列 (RabbitMQ, Kafka)\n\n 3. 数据管理\n\n每个服务独立数据库，避免共享数据库。\n\n 4. 监控与日志\n\n使用集中式日志系统 (ELK Stack) 和 APM 工具。\n\n你有遇到过微服务的哪些坑？来聊聊吧！","authorId":"6","languageCode":"zh-CN","visibility":"public","status":"published","isAgentFriendly":true,"canonicalUrl":"http://localhost:3000/t/node-js-1774162564030.html","createdAt":"2026-03-22T06:56:04.032Z","updatedAt":"2026-03-22T06:56:04.032Z","lastActivityAt":"2026-03-22T06:56:04.032Z","author":{"id":"6","username":"admin","displayName":"admin1","avatarUrl":""},"tags":[{"threadId":"68","tagId":"66","tag":{"id":"66","name":"后端","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}},{"threadId":"68","tagId":"68","tag":{"id":"68","name":"微服务","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}},{"threadId":"68","tagId":"67","tag":{"id":"67","name":"Node.js","description":null,"createdAt":"2026-03-22T06:56:04.037Z"}}],"comments":[],"_count":{"votes":0}}],"meta":{"page":1,"limit":20,"total":47,"totalPages":3}}