{
  "2025年9月紧急规划.md": "1.数媒大赛-使用萌芽农场参赛❌✅\n2.华为ICT大赛，网络赛道，实践赛道\n3.学习Java面向对象，顺便学习JavaSpring\n4.Linux 红帽发行版9安装学习 ✅\n5.计算机网络",
  "AI大语言模型玩法/AI提示词工程/AI绘画提示词.md": "*by 树萌芽*\n\n**图片风格为2D像素像素化风格，比例 「1:1」  画一个游戏道具，背景是纯黑色，纯黑色**  \n**不带任何文字，没有任何文字，现在我要你画     一个闪闪发光的金黄色金币卡**\n\n\n**图片风格为2D像素风格，比例 「1:1」  画一个游戏元素，风格为2.5D 就是上帝视角，就是正交斜视角那种有立体感，背景是纯黑色，纯黑色    不带任何文字，现在我要你画一个**   \n**一丛茂密的灌木丛  记住一定要3d立体感 只要 灌木丛 只要 灌木丛！**\n\n\n比例 「1:1」图片风格为2D像素风格， 画一个游戏装饰元素，风格为2.5D 就是上帝视角，就是正交斜视角那种有立体感，背景是纯黑色，纯黑色    不带任何文字，现在我要你画一个     占卜测运算命台  相关的装饰可以多一点    记住一定要3d立体感  ",
  "AI大语言模型玩法/AI提示词工程/开发前后端分离网站提示词.md": "1.取消CORS跨域限制，允许任何链接\n2.前端使用React框架，后端使用python的Flask框架\n3.前端修改在frontend文件夹，后端修改在backend文件夹",
  "AI大语言模型玩法/Qwen-Code命令行安装使用教程.md": "**Qwen Code** 是一个 CLI 工具，修改自 **Gemini CLI**，针对 Qwen3‑Coder系列的模型增强了解析器和工具支持。\n\n确保已安装 Node.js 20 及以上版本，可以通过以下命令安装：\n\n```bash\ncurl -qL https://www.npmjs.com/install.sh | sh\n```\n\n然后通过 npm 管理器安装 Qwen Code：\n\n```bash\nnpm i -g @qwen-code/qwen-code\n```\n\n> 另一种方式是从源码安装：\n> \n> ```bash\n> git clone https://github.com/QwenLM/qwen-code.git\n> cd qwen-code && npm install && npm install -g\n> ```\n\nQwen Code 支持 OpenAI SDK 调用 LLM，你可以导出以下环境变量，或者简单地将其放在 `.envfile` 中。\n\n```bash\nexport OPENAI_API_KEY=\"your_api_key_here\"\nexport OPENAI_BASE_URL=\"https://dashscope.aliyuncs.com/compatible-mode/v1\"\nexport OPENAI_MODEL=\"qwen3-coder-plus\"\n```\n\n现在，你可以通过简单地输入 **`qwen`** 来享受 Qwen-Code 和 Qwen 带来的编程体验。\n\n### Claude Code\n\n除了 Qwen Code 之外，现在还可以将 Qwen3‑Coder 与 Claude Code 搭配使用。只需在[阿里云百炼](https://bailian.console.aliyun.com/)平台申请 API Key，并安装 Claude Code，即可开始畅享编码体验。\n\n```bash\nnpm install -g @anthropic-ai/claude-code\n```\n\n我们提供了两种接入方式，帮助你无缝地用 Qwen3‑Coder 进行编码。\n\n#### 使用dashscope提供的代理  API\n\n只需要将Anthropic的base url替换成dashscope上提供的endpoint即可。\n\n```bash\nexport ANTHROPIC_BASE_URL=https://dashscope.aliyuncs.com/api/v2/apps/claude-code-proxy\nexport ANTHROPIC_AUTH_TOKEN=your-dashscope-apikey\n```\n\n可选方案 2：使用 claude-code-config 自定义路由\n\n#### Optional 2: 使用 claude-code-config 自定义路由\n\nclaude-code-router 是一个第三方的路由工具，用于为 Claude Code 灵活地切换不同的后端 API。dashScope平台提供了一个简单的扩展包 claude-code-config，可为 claude-code-router 生成包含 dashScope 支持的默认配置。\n\n```bash\nnpm install -g @musistudio/claude-code-router\nnpm install -g @dashscope-js/claude-code-config\n```\n\n生成配置文件和插件目录：\n\n```bash\nccr-dashscope\n```\n\n该命令会自动生成 ccr 所需的配置文件和插件目录。你也可以手动调整 ~/.claude-code-router/config.json 和 ~/.claude-code-router/plugins/ 中的配置。\n\n最后，通过 ccr 开始使用 Claude Code：\n\n```bash\nccr code\n```\n\n至此，你即可通过 ccr 使用 Claude Code 畅享 Qwen3‑Coder 的强大编码能力。祝开发顺利！\n\n### Cline\n\n配置 Qwen3-Coder-480B-A35B-instruct 以使用 cline ‒ 进入 cline 的配置设置 ‒ 选择“OpenAI Compatible”模式 ‒ 在 OpenAI Compatible API tokens处，输入从 Dashscope 获取的密钥 ‒ 勾选“使用自定义基础 URL”，并输入：`https://dashscope.aliyuncs.com/compatible-mode/v1` ‒ 输入模型名称：`qwen3-coder-plus`",
  "AI大语言模型玩法/Qwen-Code官方文档使用教程.md": "\n---\n\nQwen Code 是一款专为 **Qwen3-Coder** 模型优化的命令行 AI 工作流工具，通过先进的代码理解能力、自动化任务和智能辅助功能，显著提升开发效率。\n\n---\n\n## 🛠 操作步骤\n\n### 1️⃣ 获取阿里云百炼 API Key\n\n1. 登录 **阿里云百炼大模型服务平台**。\n    \n2. 如果页面顶部显示 **image**，说明需要开通服务。\n    \n    - 开通后可领取新人免费额度（30~180天）。\n        \n    - 如果提示 **实名认证**，请先完成认证。\n        \n3. 免费额度详情可在 **新人免费额度页面** 查看。\n    \n4. 获取 **阿里云百炼 API Key**。\n    \n\n---\n\n### 2️⃣ 选择模型\n\nQwen Code 支持 **OpenAI 兼容接口模型**，包括：\n\n- 🌟 **qwen3-coder-plus**（推荐，2025年7月23日起限时优惠）\n    \n- qwen3-coder-480b-a35b-instruct\n    \n- qwen3-coder-flash\n    \n- qwen3-coder-30b-a3b-instruct\n    \n\n---\n\n### 3️⃣ 安装与配置 Qwen Code\n\n#### ✅ Node.js 版本检查\n\n```bash\nnode -v\n```\n\n需 **Node.js 20+**，低于则需重新安装。\n\n#### 📦 安装 Qwen Code\n\n```bash\n# 配置镜像源加速\nnpm config set registry https://registry.npmmirror.com\n\n# 安装 Qwen Code\nnpm install -g @qwen-code/qwen-code@latest\n```\n\n---\n\n### 4️⃣ 启动并配置 Qwen Code\n\n1. 在终端中输入：\n    \n    ```bash\n    qwen\n    ```\n    \n2. 选择认证方式 → **OpenAI**\n    \n3. 填写以下信息：\n    \n\n|配置项|说明|\n|---|---|\n|🔑 API Key|阿里云百炼 API Key|\n|🌐 Base URL|`https://dashscope.aliyuncs.com/compatible-mode/v1`|\n|🤖 Model|推荐 `qwen3-coder-plus`|\n\n👉 若不想每次都输入，请配置 **环境变量**。\n\n---\n\n### 5️⃣ 配置环境变量\n\n在系统中设置：\n\n```bash\nexport OPENAI_API_KEY=你的APIKey\nexport OPENAI_BASE_URL=https://dashscope.aliyuncs.com/compatible-mode/v1\nexport OPENAI_MODEL=qwen3-coder-plus\n```\n\n---\n\n### 6️⃣ 向 Qwen Code 提问\n\n💡 示例问题：\n\n```\n如何用python实现一个二叉搜索树？\n```\n\nQwen Code 会自动创建文件、写入并执行代码。\n\n---\n\n### 7️⃣ 查看 Token 消耗\n\n输入：\n\n```bash\n/stats model\n```\n\n即可查看本次启动后的 **Token 消耗** 与 **API 调用次数**。\n\n---\n\n## 🎁 免费额度\n\n- 阿里云百炼：**每个模型 100 万免费 Token**\n    \n- Qwen Code：**每天 2000 次免费调用**\n    \n\n👉 为避免额外消费，可开启 **免费额度用完即停** 按钮。\n\n---\n\n## 🔧 进阶操作\n\n更多功能请参考：\n\n- 📘 [Qwen Code 文档]\n    \n- 📘 [阿里云百炼代码能力]\n    \n\n---\n\n## ❓ 常见问题 (FAQ)\n\n### ❓ Q：为什么 Token 消耗快？\n\n✅ A：可能多次调用 API。  \n👉 控制方法：\n\n- 精简工作目录（避免在项目根目录运行）。\n    \n- 设置 Token 限额：\n    \n\n```json\n{\n  \"sessionTokenLimit\": 32000\n}\n```\n\n- 使用指令：\n    \n    - `/compress` → 压缩对话历史\n        \n    - `/clear` → 清空历史\n        \n\n---\n\n### ❓ Q：如何切换模型？\n\n- 未配置环境变量：\n    \n    1. `/quit` 退出\n        \n    2. `qwen` 重新启动，手动输入 API Key、Base URL、模型名\n        \n- 已配置环境变量：\n    \n    1. 修改 `OPENAI_MODEL`\n        \n    2. `/quit` → `qwen` 重启\n        \n\n---\n\n### ❓ Q：如何使用每天 2000 次免费额度？\n\n- 输入 `/auth` → 选择 **Qwen Oauth** → 登录 **Qwen Chat**\n    \n- 每天可免费调用 `qwen3-coder-plus` **2000 次**\n    \n- 超过 2000 次 → 切换回 **OpenAI 认证方式**\n    \n\n---\n\n### ❓ Q：为什么报 `401 Incorrect API key provided` 错误？\n\n✅ 检查以下：\n\n- API Key 是否正确\n    \n- 是否有全局环境变量覆盖了配置文件\n    \n\n---",
  "AI大语言模型玩法/大语言模型的API key.md": "#### deepseek ：\n**调用密钥：**\nsk-832f8e5250464de08a31523c7fd71295\n**调用地址：**\nhttps://api.deepseek.com\n**调用模型：**\ndeepseek-chat  \ndeepseek-reasoner\n\n\n\n阿里云百炼大模型平台：\n通用秘钥：sk-3d9e8e02a3704868b1a7159d52f2643d\n\n\n字节火山方舟模型控制台：\n通用秘钥：fc439240-ed3c-4e65-acaf-3541c66c6ebc\n\n\n#### Kimi ：\n**调用密钥：**\nsk-zdg9NBpTlhOcDDpoWfaBKu0KNDdGv18SipORnL2utawja0bE\n**调用地址：**\nhttps://api.moonshot.cn\n**调用模型：**\nkimi-k2-0905-preview \nkimi-k2-0711-preview\nkimi-k2-turbo-preview 这个非常贵\nkimi-latest-8k  支持图片理解\nkimi-latest-32k\nkimi-latest-128k 这个非常贵\n",
  "AI大语言模型玩法/大语言模型的API 调用.md": "deepseek api秘钥：\n调用密钥：\nsk-16e24c16ff894771849ee6e15d4fb301\n调用地址：\nhttps://api.deepseek.com\n\n阿里云百炼大模型平台：\n通用秘钥：\nsk-3d9e8e02a3704868b1a7159d52f2643d\n调用地址：\nhttps://dashscope.aliyuncs.com/compatible-mode/v1\n\n字节火山方舟模型控制台：\n通用秘钥：\nfc439240-ed3c-4e65-acaf-3541c66c6ebc\n调用地址：\nhttps://ark.cn-beijing.volces.com/api/v3/chat/completions\n\nkimi API调用：\n调用密钥：\nsk-32M3DYWQdPlftpaGOmIuS7OFKzqCiSutktFPxPqTWn3oFadM\n调用地址：\nhttps://api.moonshot.cn",
  "AI大语言模型玩法/阿里云百炼平台模型API调用示例.md": "\n### **Python调用示例：**\n```python\nimport os\nfrom openai import OpenAI\n\nclient = OpenAI(\n    api_key=os.getenv(\"DASHSCOPE_API_KEY\"), # 如果您没有配置环境变量，请在此处用您的API Key进行替换\n    base_url=\"https://dashscope.aliyuncs.com/compatible-mode/v1\",\n)\ncompletion = client.chat.completions.create(\n    model=\"qwen3-coder-plus\",\n    messages=[\n        {'role': 'system', 'content': 'You are a helpful assistant.'},\n        {'role': 'user', 'content': '请编写一个Python函数 find_prime_numbers，该函数接受一个整数 n 作为参数，并返回一个包含所有小于 n 的质数（素数）的列表。质数是指仅能被1和其自身整除的正整数，如2, 3, 5, 7等。不要输出非代码的内容。'}],\n    )\nprint(\"=\"*20+\"回复内容\"+\"=\"*20)\nprint(completion.choices[0].message.content)\nprint(\"=\"*20+\"Token消耗\"+\"=\"*20)\nprint(completion.usage)\n```\n**返回结果示例：**\n````plaintext\n====================回复内容====================\n```python\ndef find_prime_numbers(n):\n    if n <= 2:\n        return []\n    \n    primes = []\n    \n    for num in range(2, n):\n        is_prime = True\n        for i in range(2, int(num ** 0.5) + 1):\n            if num % i == 0:\n                is_prime = False\n                break\n        if is_prime:\n            primes.append(num)\n    \n    return primes\n```\n====================Token消耗====================\nCompletionUsage(completion_tokens=95, prompt_tokens=91, total_tokens=186, completion_tokens_details=None, prompt_tokens_details=PromptTokensDetails(audio_tokens=None, cached_tokens=0))\n````\n\n\n\ncurl调用示例：\n```curl\ncurl -X POST https://dashscope.aliyuncs.com/compatible-mode/v1/chat/completions \\\n-H \"Authorization: Bearer $DASHSCOPE_API_KEY\" \\\n-H \"Content-Type: application/json\" \\\n-d '{\n    \"model\": \"qwen3-coder-plus\",\n    \"messages\": [\n        {\n            \"role\": \"system\",\n            \"content\": \"You are a helpful assistant.\"\n        },\n        {\n            \"role\": \"user\", \n            \"content\": \"请编写一个Python函数 find_prime_numbers，该函数接受一个整数 n 作为参数，并返回一个包含所有小于 n 的质数（素数）的列表。质数是指仅能被1和其自身整除的正整数，如2, 3, 5, 7等。不要输出非代码的内容。\"\n        }\n    ]\n}'\n```\n\n\n返回结果示例：\n```json\n{\n    \"choices\": [\n        {\n            \"message\": {\n                \"content\": \"```python\\ndef find_prime_numbers(n):\\n    if n <= 2:\\n        return []\\n    \\n    primes = []\\n    \\n    for num in range(2, n):\\n        is_prime = True\\n        for i in range(2, int(num ** 0.5) + 1):\\n            if num % i == 0:\\n                is_prime = False\\n                break\\n        if is_prime:\\n            primes.append(num)\\n    \\n    return primes\\n```\",\n                \"role\": \"assistant\"\n            },\n            \"finish_reason\": \"stop\",\n            \"index\": 0,\n            \"logprobs\": null\n        }\n    ],\n    \"object\": \"chat.completion\",\n    \"usage\": {\n        \"prompt_tokens\": 91,\n        \"completion_tokens\": 95,\n        \"total_tokens\": 186,\n        \"prompt_tokens_details\": {\n            \"cached_tokens\": 0\n        }\n    },\n    \"created\": 1753192010,\n    \"system_fingerprint\": null,\n    \"model\": \"qwen3-coder-plus\",\n    \"id\": \"chatcmpl-798c99c2-7410-9cc4-8385-6dfd757757fa\"\n}\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
  "Docker/Docker 镜像相关.md": "\n**QQ机器人框架NapCat**\n```shell\n#安装\ndocker run -d \\\n-e NAPCAT_GID=$(id -g) \\\n-e NAPCAT_UID=$(id -u) \\\n-p 4080:3000 \\\n-p 4070:3001 \\\n-p 4060:6099 \\\n--name napcat \\\n--restart=always \\\nmlikiowa/napcat-docker:latest\n\n#固化以下路径，方便掉线时快速重新登录\n#QQ 持久化数据路径：/app/.config/QQ\n#NapCat 配置文件路径: /app/napcat/config\n\n#登录 WebUI 后台地址：http://<宿主机ip>:6099/webui\n```\n\n**网页SSH客户端-EasyNode**\n```shell\n#项目地址：https://github.com/chaos-zhu/easynode\n\n# 1. 创建easynode目录\nmkdir -p /root/easynode && cd /root/easynode\n\n# 2. 下载docker-compose.yml文件\nwget https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/docker-compose.yml\n\n# 3. 启动服务\ndocker-compose up -d\n\ndocker run -d -p 8082:8082 --restart=always -v /root/easynode/db:/easynode/app/db chaoszhu/easynode\n\n### 监控服务\n#安装\n# 使用默认端口22022安装\ncurl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-install.sh | bash\n\n# 使用自定义端口安装, 例如54321\ncurl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-install.sh | bash -s -- 54321\n\n#卸载\ncurl -o- https://git.221022.xyz/https://raw.githubusercontent.com/chaos-zhu/easynode/main/client/easynode-client-uninstall.sh | bash\n\n#查看监控服务状态：systemctl status easynode-client \n#查看监控服务日志: journalctl --follow -u easynode-client \n#查看详细日志：journalctl -xe\n```\n\n**docker加速地址**\n\n![[Screenshot_20250717_225309.jpg]]\n\n\ndocker.1ms.run/\n\ndocker run -d -p 4050:80 --restart=always -v /shumengya/tu:/var/www/html docker.1ms.run/oaooa/pichome\n\n\n\n\n\n\n\n",
  "Docker/Docker命令集合.md": "\ndocker-compose up -d\n\ndocker-compose down\n\ndocker-compose restart\n\ndocker-compose logs -f\n\ndocker-compose ps  \n\ndocker-compose build --no-cache\n\n\n**Docker容器一键更新到最新版镜像（以60s API举例）**\n```bash\n#拉取最新镜像\ndocker pull vikiboss/60s:latest \ndocker pull mlikiowa/napcat-docker:latest\ndocker pull couchdb:latest #Obsidian同步的数据库\ndocker pull aceberg/watchyourlan #扫描局域网的工具\n\ndocker pull dpanel/dpanel:latest\n\n\n#停止并删除旧容器\ndocker stop 60s\ndocker rm 60s\ndocker stop napcat\ndocker rm napcat\n\n#兰空图床免费版\ndocker run -d \\\n  --name lsky-pro \\\n  -p 8089:80 \\\n  -v /shumengya/docker/storage/lsky:/var/www/html \\\n  --restart=always \\\n  halcyonazure/lsky-pro:latest\n\n\n\n\n\n\n\n\n#可视化Docker面板\ndocker run -d \\\n  --name dpanel \\\n  -p 8800:8080 \\\n  -v /var/run/docker.sock:/var/run/docker.sock \\\n  -v /shumengya/docker/storage/dpanel:/dpanel/data \\\n  --restart=always \\\n  dpanel/dpanel:latest\n\n\n\n#扫描局域网的工具\ndocker run -d \\\n  --name watch-your-lan \\\n  --restart unless-stopped \\\n  --net=host \\\n  -e TZ=Asia/Shanghai \\\n  -v /shumengya/docker/storage/watchyourlan:/data \\\n  aceberg/watchyourlan\n\n#Obsidian 同步数据库\ndocker run -d \\\n  --name obsidian-couchdb \\\n  -e COUCHDB_USER=shumengya \\\n  -e COUCHDB_PASSWORD='tyh@19900420' \\\n  -p 5984:5984 \\\n  couchdb:latest\n\n#60s api后端\ndocker run -d \\\n  --restart always \\\n  --name 60s \\\n  -p 4399:4399 \\\n  vikiboss/60s:latest\n  \n#napcat QQ机器人\ndocker run -d \\\n  --name napcat \\\n  --restart=always \\\n  -e NAPCAT_GID=$(id -g) \\\n  -e NAPCAT_UID=$(id -u) \\\n  -p 4080:3000 \\\n  -p 4070:3001 \\\n  -p 4060:6099 \\\n  -v /shumengya/docker/storage/napcat/qq:/app/.config/QQ \\\n  -v /shumengya/docker/storage/napcat/config:/app/napcat/config \\\n  mlikiowa/napcat-docker:latest\n\n\n\n\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
  "Docker/Docker镜像快速迁移.md": "\n---\n\n## ✅ 方法一：直接导出容器（container → tar）\n\n如果你运行的是一个 **容器**（而不是镜像），可以直接打包它：\n\n```bash\n# 导出容器\ndocker export <容器ID或名字> -o container.tar\n\n# 在另一台Linux机器上导入\ndocker import container.tar new-image:latest\n```\n\n特点：\n\n- 容器的运行时文件系统会被打包（包含你安装的软件和修改），**但不会包含容器的历史层和环境变量**。\n    \n- 类似于“快照”迁移。\n    \n\n---\n\n## ✅ 方法二：保存镜像（image → tar）\n\n如果你已经把容器做成了一个镜像，建议用 **save/load**：\n\n```bash\n# 在源主机上保存镜像\ndocker save -o myimage.tar myimage:latest\ndocker save -o frpc-1panel.tar snowdreamtech/frpc:0.63.0\n\n# 拷贝到目标主机（比如用 scp）\nscp myimage.tar user@remote:/path/\n\n# 在目标主机导入\ndocker load -i myimage.tar\n```\n\n特点：\n\n- 保留镜像层和构建历史。\n    \n- 推荐这种方式。\n    \n\n---\n\n",
  "Docker/优秀好用的Docker镜像/FileCodeBox-文件快递柜.md": "\n```bash\ndocker run -d \\\n  --name filecodebox \\\n  --restart=always \\\n  -p 12345:12345 \\\n  -v /shumengya/docker/storage/filecodebox:/app/data \\\n  lanol/filecodebox:beta\n\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull lanol/filecodebox:beta\n```\n\n```\ndocker stop lanol/filecodebox:beta\ndocker rm lanol/filecodebox:beta\n```",
  "Docker/优秀好用的Docker镜像/Gitea-私有化仓库部署.md": "\n```bash\n#github/gitlab的本地轻量化部署代替-gitea\ndocker run -d \\\n  --name gitea \\\n  -p 8989:3000 \\\n  -p 8022:22 \\\n  -e USER_UID=1000 \\\n  -e USER_GID=1000 \\\n  -v /shumengya/docker/storage/gitea:/data \\\n  --restart=always \\\n  gitea/gitea:latest\n\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull gitea/gitea:latest\n```\n\n```\ndocker stop gitea/gitea:latest\ndocker rm gitea/gitea:latest\n```",
  "Docker/优秀好用的Docker镜像/MongoDB数据库.md": "\n```bash\n#MongoDB数据库\ndocker run -d --name mongodb \\\n  -e MONGO_INITDB_ROOT_USERNAME=shumengya \\\n  -e MONGO_INITDB_ROOT_PASSWORD=shumengya520 \\\n  -v /shumengya/docker/storage/mongodb:/data/db \\\n  -p 27017:27017 \\\n  mongo\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull mongo \n```",
  "Docker/优秀好用的Docker镜像/MySQL数据库.md": "\n```bash\ndocker run -d \\\n  --name mysql \\\n  -e MYSQL_ROOT_PASSWORD=shumengya520 \\\n  -e MYSQL_DATABASE=shumengyadb \\\n  -e MYSQL_USER=shumengya \\\n  -e MYSQL_PASSWORD=shumengya520 \\\n  -v /shumengya/docker/storage/mysql:/var/lib/mysql \\\n  -p 3306:3306 \\\n  --restart=always \\\n  mysql:latest\n  \n  \ndocker run -d \\\n  --name mysql \\\n  -e MYSQL_ROOT_PASSWORD=shumengya520 \\\n  -e MYSQL_DATABASE=shumengyadb \\\n  -e MYSQL_USER=shumengya \\\n  -e MYSQL_PASSWORD=shumengya520 \\\n  -v /shumengya/docker/storage/mysql:/var/lib/mysql \\\n  -p 3306:3306 \\\n  --restart=always \\\n  mysql:5.7.44\n\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull mysql:5.7.44\n```\n\n```\ndocker stop mysql\ndocker rm mysql\n```",
  "Docker/优秀好用的Docker镜像/Postgres数据库.md": "\n```bash\n#postgres数据库\ndocker run -d \\\n  --name postgres \\\n  -e POSTGRES_PASSWORD=shumengya520 \\\n  -e POSTGRES_USER=shumengya \\\n  -e POSTGRES_DB=shumengyadb \\\n  -v /shumengya/docker/storage/postgres:/data \\\n  -e PGDATA=/data/pgdata \\\n  -p 5432:5432 \\\n  --restart=always \\\n  postgres:latest\n\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull postgres:latest\n```\n\n```\ndocker stop postgres:latest\ndocker rm postgres:latest\n```",
  "Docker/优秀好用的Docker镜像/Redis数据库.md": "\n```bash\n#MongoDB数据库\ndocker run -d --name mongodb \\\n  -e MONGO_INITDB_ROOT_USERNAME=shumengya \\\n  -e MONGO_INITDB_ROOT_PASSWORD=shumengya520 \\\n  -v /shumengya/docker/storage/mongodb:/data/db \\\n  -p 27017:27017 \\\n  mongo\n```\n\n```bash\n#典型的非关系型数据库（json）\ndocker pull mongo \n```",
  "Github相关/Github仓库公共API总结.md": "\n---\n\n## Releases（发行版本）相关接口\n\n- **获取最新发布版本（Latest Release）**  \n    `GET /repos/{owner}/{repo}/releases/latest`  \n    返回最新非预发布、非草稿版的发布详情，包括版本号、发布时间、说明等。([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com \"REST API endpoints for releases and release assets\"))\n    \n- **列出所有发布版本（List Releases）**  \n    `GET /repos/{owner}/{repo}/releases`  \n    返回该仓库所有发布版本的列表，不包含未关联发布的普通 Git 标签。([GitHub Docs](https://docs.github.com/en/rest/releases/releases?utm_source=chatgpt.com \"REST API endpoints for releases\"))\n    \n- **通过 Tag 获取指定发布版本（Get a Release by Tag）**  \n    `GET /repos/{owner}/{repo}/releases/tags/{tag}`  \n    根据具体 tag 名称获取对应发布版本的信息。([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com \"REST API endpoints for releases and release assets\"))\n    \n- **创建、更新、删除发布版本（Create / Update / Delete Release）**\n    \n    - `POST /repos/{owner}/{repo}/releases` — 创建新的发布版本\n        \n    - `PATCH /repos/{owner}/{repo}/releases/{release_id}` — 更新发布版本\n        \n    - `DELETE /repos/{owner}/{repo}/releases/{release_id}` — 删除发布版本  \n        （这些操作通常需要认证权限。）([GitHub Docs](https://docs.github.com/en/rest/releases?utm_source=chatgpt.com \"REST API endpoints for releases and release assets\"))\n        \n\n---\n\n## Git Tags（标签）相关接口\n\n- **列出仓库的 Git 标签**  \n    `GET /repos/{owner}/{repo}/tags`  \n    返回该仓库所有标签（包括 lightweight 和 annotated）。([Stack Overflow](https://stackoverflow.com/questions/18384873/how-to-list-the-releases-of-a-repository?utm_source=chatgpt.com \"github - How to list the releases of a repository?\"), [GitHub Docs](https://docs.github.com/en/rest/repos/tags?utm_source=chatgpt.com \"REST API endpoints for repository tags\"))\n    \n- **获取标签引用（Tag Reference）**  \n    `GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}`  \n    可获取该标签所对应的对象（TAG_SHA），用于进一步查询。([Stack Overflow](https://stackoverflow.com/questions/72429056/how-to-get-single-tag-information-using-github-api?utm_source=chatgpt.com \"How to get Single tag Information using GitHub Api?\"))\n    \n- **获取 Annotated Tag 对象详情**  \n    `GET /repos/{owner}/{repo}/git/tags/{tag_sha}`  \n    获取标签对象的完整信息，包括 `object.sha` 即对应的 commit SHA、tagger、message 等。([Stack Overflow](https://stackoverflow.com/questions/72429056/how-to-get-single-tag-information-using-github-api?utm_source=chatgpt.com \"How to get Single tag Information using GitHub Api?\"))\n    \n\n---\n\n## Commits（提交）相关接口\n\n- **列出提交记录（List Commits）**  \n    `GET /repos/{owner}/{repo}/commits`  \n    返回最新的提交列表，第一个通常为最新提交。响应中包含 SHA、作者、提交信息、签名验证信息等。([GitHub Docs](https://docs.github.com/en/rest/commits/commits?utm_source=chatgpt.com \"REST API endpoints for commits\"))\n    \n- **获取单个提交详情（Get a Commit）**  \n    `GET /repos/{owner}/{repo}/commits/{commit_sha}`  \n    获取指定提交的详细信息。([GitHub Docs](https://docs.github.com/en/rest/commits?utm_source=chatgpt.com \"REST API endpoints for commits\"))\n    \n- **比较两个提交（Compare Commits）**  \n    `GET /repos/{owner}/{repo}/compare/{base}...{head}`  \n    用于比较两个 commit 或两个 tag 之间的差异。([Stack Overflow](https://stackoverflow.com/questions/61359461/get-all-commits-in-a-git-tag-through-github-api-return-only-the-first-commit?utm_source=chatgpt.com \"get all commits in a Git tag through GitHub API return only ...\"))\n    \n\n---\n\n## 综合流程示例\n\n下面是一个常见逻辑，例如想获取最新发布对应的 commit SHA：\n\n1. 调用 `GET /repos/{owner}/{repo}/releases/latest` 获取最新 release 的 `tag_name`。\n    \n2. 调用 `GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}` 获取 TAG_SHA。\n    \n3. 调用 `GET /repos/{owner}/{repo}/git/tags/{tag_sha}` 获取该标签对象的 commit SHA（object.sha）。\n    \n\n这套流程常用于从发布版本跳转到对应的 Git 提交。([Stack Overflow](https://stackoverflow.com/questions/67040794/how-can-i-get-the-commit-hash-of-the-latest-release-from-github-api?utm_source=chatgpt.com \"How can I get the commit hash of the latest release from ...\"))\n\n---\n\n## 表格总结\n\n|功能需求|接口路径 / 方法|\n|---|---|\n|最新发布版本信息|`GET /repos/{owner}/{repo}/releases/latest`|\n|列出所有发布版本|`GET /repos/{owner}/{repo}/releases`|\n|通过 tag 查询发布|`GET /repos/{owner}/{repo}/releases/tags/{tag}`|\n|获取标签列表|`GET /repos/{owner}/{repo}/tags`|\n|获取标签引用（TAG_SHA）|`GET /repos/{owner}/{repo}/git/refs/tags/{tag_name}`|\n|获取标签对象详情|`GET /repos/{owner}/{repo}/git/tags/{tag_sha}`|\n|列出提交|`GET /repos/{owner}/{repo}/commits`|\n|获取指定 commit 信息|`GET /repos/{owner}/{repo}/commits/{commit_sha}`|\n|比较两个 commit/tag|`GET /repos/{owner}/{repo}/compare/{base}...{head}`|\n\n---\n\n如果你还希望了解更多，如 API 速率限制、认证方式（匿名 vs token）、分页处理（per_page、page 参数）、使用 GraphQL API 实现同类功能，或具体的 JavaScript `fetch` 调用示例，都可以随时继续讨论！",
  "Github相关/Github获取仓库密钥.md": "这个地方要注意：\n\n你输入 `git push` 时出现\n\n```\nUsername for 'https://github.com': shumengya\nPassword for 'https://shumengya@github.com':\n```\n\n这里的 **Password** 已经不是 GitHub 登录密码了。\n从 2021 年 8 月开始，GitHub **禁用了账户密码推送**，必须用 **Personal Access Token (PAT)** 或 **SSH Key** 来认证。\n\n---\n\n### ✅ 方案一：生成 Personal Access Token（HTTPS 推荐）\n\n1. 登录 GitHub → 右上角头像 → **Settings**\n2. 左侧栏 → **Developer settings** → **Personal access tokens** → **Tokens (classic)**\n3. 点击 **Generate new token (classic)**\n\n   * 勾选 **repo**（访问和推送仓库必须要有）\n   * 设置有效期（比如 90 天或无期限）\n   * 点击生成\n4. 复制生成的 Token（只会显示一次）\n\n之后推送时：\n\n* **Username**：填 GitHub 用户名（`shumengya`）\n* **Password**：填刚生成的 Token\n\n---\n\n### ✅ 方案二：改用 SSH Key（更方便）\n\n1. 本地生成 SSH Key：\n\n   ```bash\n   ssh-keygen -t ed25519 -C \"你的邮箱\"\n   ```\n\n   按回车保存，默认会在 `~/.ssh/id_ed25519` 和 `~/.ssh/id_ed25519.pub`。\n2. 查看公钥：\n\n   ```bash\n   cat ~/.ssh/id_ed25519.pub\n   ```\n3. 复制内容 → GitHub → **Settings → SSH and GPG keys → New SSH key** → 粘贴保存。\n4. 修改仓库地址为 SSH：\n\n   ```bash\n   git remote set-url origin git@github.com:shumengya/你的仓库名.git\n   ```\n5. 之后直接 `git push` 就不用输密码了。\n\n---\n\n👉 建议你选 **SSH Key**，因为用一次就永久生效，不会过期。\n\n要不要我给你写一份 **完整 SSH Key 配置和测试流程**（从生成到验证）？\n\n",
  "Github相关/Linux下使用git探索.md": "**修改全局代理为http1**\n```\ngit config --global http.version HTTP/1.1\n```\n\n**相当于 git fetch + git merge，会把远程最新提交合并到你当前分支。**\n```\ngit pull\n```\n\n**这会把你的本地提交临时“挪开”，先更新远程提交，然后再把你的提交放回去，避免多余的合并记录。**\n```\ngit pull --rebase\n```\n\n**如果只想下载最新提交但不合并**\n```\ngit fetch\n```\n\n**树萌芽GitHub仓库提交代码通用密钥：**\n```\n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\n```\n\n### 1. 添加所有改动\n```\ngit add .\n```\n### 2. 提交，写上提交说明\n```\ngit commit -m \"更新说明\"\n```\n### 3. 推送到远程仓库（假设分支是 main）\n```\ngit push origin main\n```\n\n\n**压缩成一条命令实现：**\n```\ngit add . && git commit -m \"update\" && git push origin main\n```\n\n**或者设置命令别名，比如写进 ~/.bashrc 或 ~/.zshrc：**\n```\nalias gopush='git add . && git commit -m \"update\" && git push origin main'\n```\n\n\n注意：校园网可能会屏蔽梯子，必要时开热点提交\n\n",
  "Github相关/linux常用git命令.md": "下面给你整理了一份 **Linux 下常用的 Git 命令速查表**，涵盖从初始化到协作的常见操作：\n\n---\n\n## 🔹 基础配置\n\n```bash\ngit config --global user.name \"你的名字\"        # 设置用户名\ngit config --global user.email \"你的邮箱\"      # 设置邮箱\ngit config --global core.editor \"vim\"          # 设置默认编辑器\ngit config --list                              # 查看当前配置 \n```\n\n---\n\n## 🔹 仓库初始化与克隆\n\n```bash\ngit init                      # 初始化一个本地仓库\ngit clone <repo_url>          # 克隆远程仓库\ngit clone <repo_url> myproj   # 克隆并重命名文件夹\n```\n\n---\n\n## 🔹 文件操作\n\n```bash\ngit status          # 查看仓库当前状态\ngit add <file>      # 添加文件到暂存区\ngit add .           # 添加所有修改到暂存区\ngit reset <file>    # 从暂存区撤销已添加的文件\ngit rm <file>       # 删除文件并记录到暂存区\ngit mv old new      # 重命名文件并记录到暂存区\n```\n\n---\n\n## 🔹 提交相关\n\n```bash\ngit commit -m \"说明\"        # 提交暂存区到仓库\ngit commit -am \"说明\"       # 添加修改并提交（跳过 git add）\ngit log                     # 查看提交历史\ngit log --oneline --graph   # 图形化查看分支提交记录\n```\n\n---\n\n## 🔹 分支操作\n\n```bash\ngit branch                  # 查看分支\ngit branch <name>           # 创建分支\ngit checkout <name>         # 切换分支\ngit checkout -b <name>      # 新建并切换分支\ngit merge <name>            # 合并分支到当前分支\ngit branch -d <name>        # 删除分支\n```\n\n---\n\n## 🔹 远程仓库\n\n```bash\ngit remote -v                           # 查看远程仓库地址\ngit remote add origin <url>             # 添加远程仓库\ngit remote remove origin                # 删除远程仓库\ngit push origin master                  # 推送 master 分支到远程\ngit push -u origin <branch>             # 推送并设置默认分支\ngit pull origin master                  # 拉取远程更新并合并\ngit fetch origin                        # 抓取远程分支（不合并）\n```\n\n---\n\n## 🔹 回退与撤销\n\n```bash\ngit checkout -- <file>      # 撤销工作区修改\ngit reset HEAD <file>       # 取消暂存区文件\ngit reset --hard HEAD~1     # 回退到上一个提交\ngit revert <commit_id>      # 撤销指定提交，生成新提交\n```\n\n---\n\n## 🔹 标签管理\n\n```bash\ngit tag                    # 查看标签\ngit tag v1.0               # 打标签\ngit tag -a v1.0 -m \"说明\"  # 创建附注标签\ngit push origin v1.0       # 推送标签到远程\ngit push origin --tags     # 推送所有标签\n```\n\n---\n\n## 🔹 常用技巧\n\n```bash\ngit stash                  # 临时保存修改\ngit stash pop              # 恢复最近一次保存\ngit diff                   # 查看未暂存的修改\ngit diff --cached          # 查看已暂存的修改\n```\n\n---\n\n\n",
  "LeetCode 刷题/力扣-两数之和详解.md": "两数之和问题 - 详细运算过程解析\n\n算法思路回顾\n\n使用哈希表（字典）来存储已经遍历过的数字及其索引，对于每个当前数字，计算其与目标值的差值（补数），并检查该补数是否已经在哈希表中存在。\n\n详细运算过程\n\n让我们通过一个具体例子来详细解析算法的执行过程：\n\n示例： nums = [2, 7, 11, 15], target = 9\n\n初始化阶段\n\n```python\nnum_map = {}  # 创建一个空字典用于存储数字和索引的映射\n```\n\n第一次迭代 (i=0, num=2)\n\n1. 计算补数：complement = target - num = 9 - 2 = 7\n2. 检查补数7是否在num_map中：7 in num_map → 结果为False（因为字典为空）\n3. 将当前数字和索引存入字典：num_map[2] = 0\n4. 此时字典状态：{2: 0}\n\n第二次迭代 (i=1, num=7)\n\n1. 计算补数：complement = target - num = 9 - 7 = 2\n2. 检查补数2是否在num_map中：2 in num_map → 结果为True（因为字典中有键2）\n3. 找到匹配，返回结果：[num_map[2], 1] → [0, 1]\n4. 算法结束，返回结果[0, 1]\n\n运算过程可视化\n\n迭代次数 当前索引(i) 当前值(num) 补数(complement) 补数是否在num_map中 num_map更新 操作说明\n1 0 2 7 否 {2:0} 将2和索引0存入字典\n2 1 7 2 是 - 找到匹配，返回[0,1]\n\n关键点解析\n\n1. 补数计算：对于每个数字，计算target - num得到补数，这个补数就是我们需要在之前遍历过的数字中寻找的值。\n2. 哈希表的作用：哈希表用于存储已经遍历过的数字及其索引，这样可以在O(1)时间内检查补数是否存在。\n3. 顺序重要性：算法先检查补数是否存在，然后再将当前数字存入字典，这样可以确保不会使用同一个元素两次。\n4. 时间复杂度：每个元素只被访问一次，哈希表的插入和查找操作平均时间复杂度为O(1)，因此总时间复杂度为O(n)。\n5. 空间复杂度：最坏情况下需要存储所有n个元素，因此空间复杂度为O(n)。\n\n为什么这种方法有效？\n\n这种方法有效的关键在于利用了数学关系：如果a + b = target，那么target - a = b。通过存储已经遍历过的数字，我们可以快速检查当前数字的补数是否已经出现过。\n\n这种方法比暴力解法（双重循环）高效得多，将时间复杂度从O(n²)降低到O(n)，是典型的\"以空间换时间\"策略。\n\n边界情况处理\n\n虽然题目保证有解，但实际应用中可能需要考虑无解的情况。我们的代码在无解时会返回空列表，这是一种合理的处理方式。\n\n这种算法设计简洁高效，是解决两数之和问题的标准方法，被广泛应用于各种编程面试和实际开发中。",
  "LeetCode 刷题/力扣1-两数相加问题.md": "两数相加问题\n\n问题描述\n\n给定两个非空链表，表示两个非负整数。每位数字按照逆序方式存储，每个节点存储一位数字。将两个数相加，并以相同形式返回表示和的链表。\n\n假设除了数字0之外，这两个数都不会以0开头。\n\n示例\n\n示例 1：\n\n```\n输入：l1 = [2,4,3], l2 = [5,6,4]\n输出：[7,0,8]\n解释：342 + 465 = 807\n```\n\n示例 2：\n\n```\n输入：l1 = [0], l2 = [0]\n输出：[0]\n```\n\n示例 3：\n\n```\n输入：l1 = [9,9,9,9,9,9,9], l2 = [9,9,9,9]\n输出：[8,9,9,9,0,0,0,1]\n```\n\n提示\n\n· 每个链表中的节点数在范围 [1, 100] 内\n· 0 <= Node.val <= 9\n· 题目数据保证列表表示的数字不含前导零\n\n方法思路\n\n问题分析\n\n两个链表表示的数字是逆序存储的，即链表的头节点表示个位数，第二个节点表示十位数，以此类推。我们需要模拟加法运算，从低位到高位逐位相加，并处理进位问题。\n\n算法选择\n\n· 使用一个虚拟头节点(dummy node)简化链表操作\n· 同时遍历两个链表，逐位相加并处理进位\n· 如果链表长度不同，较短链表的缺失位视为0\n· 最后如果还有进位，需要额外创建一个节点\n\n算法步骤\n\n1. 初始化虚拟头节点和当前指针\n2. 初始化进位值为0\n3. 同时遍历两个链表，直到两个链表都遍历完且没有进位\n4. 计算当前位的和：两个链表当前节点的值加上进位\n5. 计算新的进位和当前位的值\n6. 创建新节点并连接到结果链表\n7. 移动所有指针到下一个位置\n8. 返回虚拟头节点的下一个节点\n\n复杂度分析\n\n· 时间复杂度：O(max(m, n))，其中m和n分别是两个链表的长度\n· 空间复杂度：O(max(m, n))，结果链表的长度最多为max(m, n) + 1\n\n解决代码\n\n```python\n# Definition for singly-linked list.\nclass ListNode:\n    def __init__(self, val=0, next=None):\n        self.val = val\n        self.next = next\n\nclass Solution:\n    def addTwoNumbers(self, l1: ListNode, l2: ListNode) -> ListNode:\n        \"\"\"\n        将两个逆序存储的数字链表相加，返回结果链表\n        \n        参数:\n        l1: ListNode - 第一个数字链表\n        l2: ListNode - 第二个数字链表\n        \n        返回:\n        ListNode - 相加结果的链表\n        \"\"\"\n        dummy = ListNode(0)  # 虚拟头节点\n        current = dummy      # 当前指针\n        carry = 0            # 进位值\n        \n        # 遍历两个链表，直到两个链表都为空且没有进位\n        while l1 or l2 or carry:\n            # 获取当前节点的值，如果节点为空则为0\n            val1 = l1.val if l1 else 0\n            val2 = l2.val if l2 else 0\n            \n            # 计算当前位的和\n            total = val1 + val2 + carry\n            carry = total // 10  # 计算进位\n            digit = total % 10   # 计算当前位的值\n            \n            # 创建新节点并连接到结果链表\n            current.next = ListNode(digit)\n            current = current.next\n            \n            # 移动到下一个节点\n            if l1:\n                l1 = l1.next\n            if l2:\n                l2 = l2.next\n        \n        return dummy.next  # 返回结果链表的头节点\n```\n\n代码解释\n\n1. 链表节点定义：ListNode类定义了链表节点的结构，包含值val和指向下一个节点的指针next。\n2. 初始化：\n   · 创建虚拟头节点dummy，简化链表操作\n   · 设置当前指针current指向虚拟头节点\n   · 初始化进位carry为0\n3. 循环处理：\n   · 使用while循环遍历两个链表，直到两个链表都遍历完且没有进位\n   · 循环条件l1 or l2 or carry确保处理所有情况\n4. 获取当前值：\n   · 如果链表节点存在，获取其值；否则视为0\n   · 这样可以处理链表长度不同的情况\n5. 计算和与进位：\n   · 计算当前位的总和：val1 + val2 + carry\n   · 计算新的进位：total // 10\n   · 计算当前位的值：total % 10\n6. 创建新节点：\n   · 根据当前位的值创建新节点\n   · 将新节点连接到结果链表\n   · 移动当前指针到新节点\n7. 移动指针：\n   · 如果链表还有节点，移动到下一个节点\n   · 这样可以继续处理后续位\n8. 返回结果：\n   · 返回虚拟头节点的下一个节点，即结果链表的头节点\n   · 虚拟头节点简化了链表操作，避免处理空链表的情况\n\n示例验证\n\n以示例1为例：l1 = [2,4,3] (表示342)，l2 = [5,6,4] (表示465)\n\n1. 个位：2 + 5 = 7，进位0 → 结果个位7\n2. 十位：4 + 6 = 10，进位1 → 结果十位0\n3. 百位：3 + 4 + 1 = 8，进位0 → 结果百位8\n\n最终结果为[7,0,8] (表示807)，符合预期。\n\n这种方法高效地处理了链表相加的问题，考虑了所有边界情况，包括链表长度不同和最后有进位的情况。",
  "LeetCode 刷题/力扣2-两数之和.md": "两数之和问题\n\n问题描述\n\n给定一个整数数组 nums 和一个整数目标值 target，请你在该数组中找出和为目标值 target 的那两个整数，并返回它们的数组下标。\n\n你可以假设每种输入只会对应一个答案，并且你不能使用两次相同的元素。你可以按任意顺序返回答案。\n\n示例 1：\n\n```\n输入：nums = [2,7,11,15], target = 9\n输出：[0,1]\n解释：因为 nums[0] + nums[1] == 9，返回 [0, 1]。\n```\n\n示例 2：\n\n```\n输入：nums = [3,2,4], target = 6\n输出：[1,2]\n```\n\n示例 3：\n\n```\n输入：nums = [3,3], target = 6\n输出：[0,1]\n```\n\n提示：\n\n· 2 <= nums.length <= 10^4\n· -10^9 <= nums[i] <= 10^9\n· -10^9 <= target <= 10^9\n· 只会存在一个有效答案\n\n方法思路\n\n1. 问题分析\n\n我们需要在数组中找到两个不同的元素，它们的和等于目标值。由于数组可能很大，暴力解法（双重循环）的时间复杂度为O(n²)，效率太低。\n\n2. 算法选择\n\n使用哈希表来存储每个元素及其索引，这样可以在O(1)时间内检查目标值与当前元素的差值是否存在于哈希表中。\n\n3. 算法步骤\n\n1. 初始化一个空哈希表（字典）\n2. 遍历数组中的每个元素及其索引\n3. 对于每个元素，计算目标值与当前元素的差值（补数）\n4. 检查该差值是否已存在于哈希表中\n5. 如果存在，返回当前索引和差值的索引\n6. 如果不存在，将当前元素及其索引存入哈希表\n\n4. 复杂度分析\n\n· 时间复杂度：O(n)，只需遍历数组一次\n· 空间复杂度：O(n)，用于存储哈希表\n\n解决代码\n\n```python\ndef twoSum(nums, target):\n    \"\"\"\n    在给定数组中找出和为目标值的两个整数的索引\n    \n    参数:\n    nums: List[int] - 整数数组\n    target: int - 目标值\n    \n    返回:\n    List[int] - 两个整数的索引列表\n    \"\"\"\n    num_map = {}  # 创建空字典存储数字和索引的映射\n    for i, num in enumerate(nums):  # 遍历数组，获取索引和数值\n        complement = target - num  # 计算补数\n        if complement in num_map:  # 检查补数是否在字典中\n            return [num_map[complement], i]  # 如果在，返回两个索引\n        num_map[num] = i  # 如果不在，将当前数字和索引存入字典\n    return []  # 如果没有找到，返回空列表（但题目保证有解，所以不会执行到这里）\n```\n\n代码解释\n\n1. 初始化哈希表：num_map 用于存储元素值到索引的映射\n2. 遍历数组：使用 enumerate 函数同时获取元素的索引 i 和数值 num\n3. 计算补数：对于每个 num，计算 complement = target - num\n4. 检查补数是否存在：如果补数存在于哈希表中，说明找到了两个数，返回它们的索引\n5. 存储当前元素：如果补数不存在，将当前元素及其索引存入哈希表，以便后续查找\n6. 返回结果：如果遍历结束仍未找到，返回空列表（但题目保证有解，所以不会执行到此）\n\n这种方法确保了高效查找，适用于大规模数据输入，是解决此类问题的标准方法。",
  "Linux相关/Linux zip 命令总结.md": "\n1. 打包单个文件：\n\n```\nzip 压缩包名称.zip 要打包的文件\n```\n\n2. 打包多个文件：\n\n```\nzip 压缩包名称.zip 文件1 文件2 文件3\n```\n\n3. 打包整个目录（包括子目录）：\n\n```\nzip -r 压缩包名称.zip 要打包的目录\n```\n\n4. 打包目录并排除某些文件：\n\n```\nzip -r 压缩包名称.zip 要打包的目录 -x 要排除的文件或目录\n```\n\n5. 带密码打包：\n\n```\nzip -r -e 压缩包名称.zip 要打包的目录\n```\n\n执行后会提示你输入密码\n\n例如，要打包当前目录下的documents文件夹为backup.zip，可以使用：\n\n```\nzip -r backup.zip documents\n```\n\n如果系统中没有zip命令，可以先安装：\n\n- Debian/Ubuntu: sudo apt install zip\n",
  "Linux相关/Linux命令风格解析.md": "在Linux命令行中，选项的不同书写形式反映了三种主流风格的设计逻辑，以下是结合历史背景与实际应用场景的深度解析：\n\n### 一、Unix/Posix风格：简洁至上的单字符范式\n这是最古老的选项体系，诞生于Unix电传打字机时代。其核心特征是：\n- **符号标识**：必须以单个短横线`-`开头，如`ls -a`\n- **组合规则**：无参数的选项可自由拼接，如`ls -alh`等价于`ls -a -l -h`\n- **参数绑定**：带参数的选项需紧跟值，如`-w50`或`-w 50`均可\n- **历史局限**：受限于26个字母的容量，复杂工具需依赖组合（如`find -type f -exec`）\n\n典型场景：文件操作（`ls`、`cp`）、权限管理（`chmod`）等基础命令。这种风格的高效性在处理批量文件时尤为突出，例如`rm -rf`的组合操作。\n\n### 二、BSD风格：去符号化的实用主义\nBSD操作系统对Unix传统的突破体现在：\n- **无符号标识**：直接使用字母组合，如`ps aux`\n- **灵活组合**：多个选项可连写且无需分隔符，如`tar zxf archive.tar.gz`\n- **参数兼容**：带参数的选项可空格分隔或直接拼接，如`ps Uroot`与`ps U root`等效\n\n这种设计源于BSD对用户体验的优化，例如`ps aux`的组合能直观展示进程全貌。但需注意，并非所有BSD风格选项都能随意组合，如`ps fx`中的`f`和`x`分别控制显示格式和非终端进程，顺序调换可能影响输出。\n\n### 三、GNU风格：可读性优先的长选项\nGNU项目为解决单字符选项的语义模糊问题，引入了：\n- **双横线标识**：以`--`开头的完整单词，如`gzip --help`\n- **参数传递**：支持`--sort=time`或`--sort time`两种格式\n- **缩写机制**：唯一前缀即可生效，如`--cre`可替代`--create`\n- **功能扩展**：突破字母限制，如`wget --user-agent`可自定义请求头\n\n这种风格在复杂工具（如`git`、`docker`）中广泛应用，例如`git commit --amend`比`-a`更清晰。GNU工具通常同时支持长/短选项，如`ls --all`与`-a`等效。\n\n### 四、混合使用的注意事项\n1. **解析优先级**：旧风格选项需置于最前，如`tar cvf --exclude=*.tmp`中`cvf`为传统选项，`--exclude`为GNU选项\n2. **命令特异性**：并非所有命令都支持混合风格，例如`ps`可接受`ps -ef`（Unix风格）和`ps aux`（BSD风格），但`ps -aux`会被解析为混合模式\n3. **参数歧义**：当选项与文件名冲突时，可用`--`终止选项解析，如`rm -- -file`可强制删除名为`-file`的文件\n\n### 五、典型命令的风格对比\n| 命令       | Unix风格          | BSD风格         | GNU风格          |\n|------------|-------------------|-----------------|------------------|\n| 解压缩     | `tar -zxf file`   | `tar zxf file`  | `tar --gzip --extract --file=file` |\n| 进程查看   | `ps -ef`          | `ps aux`        | `ps --forest`    |\n| 显示帮助   | `ls -h`           | `ls h`（无效）  | `ls --help`      |\n\n### 六、历史演变与实践建议\n- **工具适配**：GNU工具普遍兼容多种风格，而BSD衍生工具（如`freebsd`的`ps`）可能仅支持特定格式\n- **学习路径**：新手建议从GNU长选项入手（如`--help`），逐步掌握短选项组合\n- **文档依赖**：使用`man`或`--help`查看具体命令的选项说明，例如`tar --help`会列出所有支持的风格\n\n理解这些风格差异，不仅能更高效地使用命令行，还能深入体会不同开发社区的设计哲学。例如，GNU的长选项体现了自由软件运动对可读性的追求，而BSD的简洁风格则延续了Unix“做一件事并做好”的理念。在实际应用中，可根据场景灵活选择：快速操作时用短选项，复杂配置时用长选项，疑难问题则结合`--help`与`man`手册。\n",
  "Linux相关/linux安装nodejs22.md": "apt install curl\n\n# Download and install nvm:\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.3/install.sh | bash\n\n# in lieu of restarting the shell\n\\. \"$HOME/.nvm/nvm.sh\"\n\n# Download and install Node.js:\nnvm install 22\n\n# Verify the Node.js version:\nnode -v # Should print \"v22.19.0\".\n\n# Verify npm version:\nnpm -v # Should print \"10.9.3\".\n\n",
  "Linux相关/Linux常用软件包安装.md": "```bash\nsudo apt install docker-compose -y\n```",
  "Linux相关/Linux的Proc目录解析.md": " `/proc` 在 Linux 中是一个 **伪文件系统 (procfs)**，它不是存储在磁盘上的真实文件，而是内核在内存中动态生成的接口，主要用于提供 **内核、进程和系统状态** 的信息。几乎所有的监控工具（如 `top`、`htop`、`ps`、`free`、`uptime`、`vmstat`、`iostat`）都是通过读取 `/proc` 下的文件获取数据的。\n \n---\n\n# 🗂 **/proc 能查看的信息汇总**\n\n## 1. **进程相关信息**\n\n每个正在运行的进程在 `/proc` 下都会有一个以 **PID** 命名的目录，例如 `/proc/1234/`。里面的内容主要是该进程的状态：\n\n- `/proc/[pid]/cmdline` → 启动命令行参数\n    \n- `/proc/[pid]/cwd` → 当前工作目录 (符号链接)\n    \n- `/proc/[pid]/exe` → 可执行文件路径 (符号链接)\n    \n- `/proc/[pid]/environ` → 环境变量\n    \n- `/proc/[pid]/fd/` → 打开的文件描述符\n    \n- `/proc/[pid]/maps` → 内存映射情况\n    \n- `/proc/[pid]/stat` → 进程状态、运行时间、优先级等\n    \n- `/proc/[pid]/status` → 可读性较好的进程状态信息\n    \n- `/proc/[pid]/task/` → 线程信息（子目录为线程 ID）\n    \n\n---\n\n## 2. **CPU 相关信息**\n\n- `/proc/cpuinfo` → CPU 型号、核心数、主频、缓存大小、虚拟化支持等\n    \n- `/proc/stat` → CPU 使用率、上下文切换、中断次数等\n    \n- `/proc/interrupts` → 中断统计\n    \n- `/proc/softirqs` → 软中断统计\n    \n\n---\n\n## 3. **内存信息**\n\n- `/proc/meminfo` → 总内存、可用内存、缓存、swap 等\n    \n- `/proc/kcore` → 内核内存映射（类似物理内存的转储）\n    \n- `/proc/vmallocinfo` → 内核虚拟内存使用情况\n    \n- `/proc/slabinfo` → 内核对象缓存（slab 分配器）\n    \n\n---\n\n## 4. **系统信息**\n\n- `/proc/version` → 内核版本信息\n    \n- `/proc/uptime` → 系统运行时间和空闲时间\n    \n- `/proc/loadavg` → 系统平均负载\n    \n- `/proc/cmdline` → 内核启动参数\n    \n- `/proc/modules` → 已加载的内核模块\n    \n- `/proc/filesystems` → 支持的文件系统类型\n    \n- `/proc/mounts` → 当前挂载的文件系统（和 `mount` 命令一致）\n    \n- `/proc/partitions` → 磁盘分区信息\n    \n- `/proc/devices` → 已注册的设备\n    \n- `/proc/ioports` → I/O 端口使用情况\n    \n- `/proc/iomem` → 内存映射的 I/O 信息\n    \n- `/proc/diskstats` → 磁盘 I/O 统计\n    \n- `/proc/locks` → 当前内核中的文件锁\n    \n\n---\n\n## 5. **网络信息**\n\n在 `/proc/net/` 目录下：\n\n- `/proc/net/dev` → 网络接口的流量统计（类似 `ifconfig`、`ip -s link`）\n    \n- `/proc/net/tcp`、`/proc/net/udp` → TCP/UDP 连接信息（类似 `ss`、`netstat`）\n    \n- `/proc/net/unix` → UNIX 套接字信息\n    \n- `/proc/net/route` → 路由表\n    \n- `/proc/net/arp` → ARP 缓存表\n    \n- `/proc/net/snmp` → 网络协议统计信息（ICMP、TCP、UDP）\n    \n\n---\n\n## 6. **内核配置与参数**\n\n- `/proc/sys/` → 内核参数（可读可写，可通过 `sysctl` 修改），例如：\n    \n    - `/proc/sys/net/ipv4/ip_forward` → 是否启用 IPv4 转发\n        \n    - `/proc/sys/kernel/hostname` → 主机名\n        \n    - `/proc/sys/kernel/pid_max` → 最大进程号\n        \n    - `/proc/sys/vm/swappiness` → 内存换出策略\n        \n\n---\n\n## 7. **其他有用的文件**\n\n- `/proc/self/` → 当前进程（即访问 `/proc` 的进程本身）的信息\n    \n- `/proc/kmsg` → 内核日志（类似 `dmesg`）\n    \n- `/proc/sched_debug` → 调度器的调试信息\n    \n- `/proc/zoneinfo` → 内存区域信息\n    \n- `/proc/swap` → swap 使用情况\n    \n\n---\n\n# 📊 **总结**\n\n通过 `/proc`，你可以获取：\n\n1. **进程级别** → PID、内存、CPU、线程、文件描述符\n    \n2. **系统级别** → CPU、内存、负载、启动参数、模块、文件系统\n    \n3. **硬件级别** → 设备、中断、I/O 端口、内存映射\n    \n4. **网络级别** → 接口流量、TCP/UDP 连接、路由、ARP\n    \n5. **内核级别** → 内核参数、调度、日志、虚拟内存\n    \n\n---\n",
  "Linux相关/ubuntu设置root登陆.md": "在 Ubuntu GNOME 22.04 中，默认情况下是禁用 root 用户的登录，以提高系统安全性。如果你需要启用 root 用户并允许其通过图形界面登录，可以按照以下步骤操作：\n\n### 1. 启用 Root 用户\n\nUbuntu 默认情况下禁用了 root 用户账户，因此我们需要为 root 设置密码才能启用它。\n\n1. 打开终端，使用以下命令设置 root 用户密码：\n\n   ```bash\n   sudo passwd root\n   ```\n\n   然后根据提示输入并确认 root 用户密码。\n\n### 2. 允许 Root 用户登录图形界面\n\nUbuntu 默认不允许 root 用户直接登录 GNOME 图形界面。如果你希望启用 root 登录图形界面，需要修改 GDM（GNOME Display Manager）的配置文件。\n\n1. 编辑 GDM 配置文件：\n\n   ```bash\n   sudo nano /etc/gdm3/custom.conf\n   ```\n\n2. 找到 `[security]` 部分，并确保以下行没有被注释掉（没有 `#`）：\n\n   ```plaintext\n   AllowRoot=true\n   ```\n\n3. 保存并退出（按 `Ctrl + O` 保存，`Ctrl + X` 退出）。\n\n### 3. 重启 GDM\n\n配置更改后，重启 GDM 或重新启动计算机以使更改生效。你可以使用以下命令重启 GDM：\n\n```bash\nsudo systemctl restart gdm3\n```\n\n### 4. 使用 root 登录\n\n现在，你应该能够在登录屏幕选择 root 用户进行登录了。只需要输入你为 root 设置的密码即可。\n\n### 5. 注意安全\n\n启用 root 用户图形界面登录可能会增加系统的安全风险，因为 root 用户具有系统的完全控制权限。为了保护系统的安全性，建议仅在必要时启用 root 登录，并使用强密码以及定期检查系统的安全性。\n\n如果你不需要 root 图形界面登录，建议使用 `sudo` 命令来执行管理员操作，这样可以减少潜在的安全风险。\n\n",
  "Linux相关/Windows文件一键上传到Linux.md": "\n**萌芽农场**\n```powershell\nscp -r D:\\Godot\\Godot项目\\比较完成的作品\\萌芽农场\\Server\\* root@192.168.31.233:/shumengya/docker/mengyafarmserver/\n\nscp -r D:\\Godot\\Godot项目\\比较完成的作品\\萌芽农场\\Server\\* root@192.168.1.233:/shumengya/docker/mengyafarmserver/\n```\n\n一个人的服务器（我的世界基岩版1.1.xPocketMine服务器）\n```powershell\nscp -r C:\\Users\\BigTang\\Desktop\\一个人的服务器\\* root@192.168.31.233:/shumengya/docker/OnePersonServer/\n```",
  "Linux相关/把Ubuntu镜像源切换到阿里云.md": "要将 Ubuntu 22.04 (AMD64) 的软件源更换为阿里云的镜像源，可以按照以下步骤操作：\n\n### 1. 备份当前的源列表\n\n在更改源之前，先备份原有的 `sources.list` 文件：\n\n```bash\nsudo cp /etc/apt/sources.list /etc/apt/sources.list.bak\n```\n\n### 2. 修改 `sources.list` 文件\n\n打开 `/etc/apt/sources.list` 文件，编辑并替换为阿里云的源地址：\n\n```bash\nsudo nano /etc/apt/sources.list\n```\n\n将文件内容替换为以下内容（适用于 Ubuntu 22.04）：\n\n```plaintext\n# 阿里云 Ubuntu 22.04 镜像源\ndeb http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ jammy main restricted universe multiverse\n\ndeb http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ jammy-updates main restricted universe multiverse\n\ndeb http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ jammy-backports main restricted universe multiverse\n\ndeb http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse\ndeb-src http://mirrors.aliyun.com/ubuntu/ jammy-security main restricted universe multiverse\n```\n\n### 3. 更新软件包列表\n\n替换源后，更新 apt 包索引：\n\n```bash\nsudo apt update\n```\n\n### 4. 升级已安装的软件包\n\n为了确保一切顺利运行，你可以运行以下命令来升级现有的软件包：\n\n```bash\nsudo apt upgrade\n```\n\n完成这些步骤后，你的 Ubuntu 系统应该就会使用阿里云的镜像源了，下载速度会更加快速稳定。\n\n",
  "Linux相关/树萌芽常用Linux命令集合.md": "tar.gz文件解压：\ntar -zxvf 文件名\n\nlinux 重命名文件/文件夹:\nmv 原文件名 新文件名\n\n注意：/etc/systemd/system/  这里放置systemctl服务\n\n重新加载systemctl服务：\nsystemctl daemon-reload\n\nsystemctl start 服务名\nsystemctl stop 服务名\nsystemctl enable 服务名\nsystemctl status 服务名\n",
  "Obsidion相关/Obsidion美化.md": "```json\n{\n  \"Appearance-light@@theme-light-style-select\": \"theme-light-background-adapt\",\n  \"Appearance-light@@mod-left-split-background-select-light\": \"mod-left-split-background-CSS-light\",\n  \"Appearance-light@@background-mod-left-CSS-light\": \"radial-gradient(100% 50% at 100% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)\",\n  \"Appearance-light@@background-mod-left-CSS-backdrop-filter-light\": \"blur(0px)\",\n  \"Appearance-light@@mod-right-split-background-select-light\": \"mod-right-split-background-CSS-light\",\n  \"Appearance-light@@background-mod-right-CSS-light\": \"radial-gradient(100% 50% at 0% 50%, rgba(90, 109, 237, 0.1) 0%, rgba(255, 255, 255, 0) 100%)\",\n  \"Appearance-light@@background-mod-right-CSS-backdrop-filter-light\": \"blur(0px)\",\n  \"Appearance-light@@mod-root-split-background-select-light\": \"mod-root-split-background-CSS-light\",\n  \"Appearance-light@@background-mod-root-CSS-light\": \"transparent\",\n  \"Appearance-light@@background-mod-root-CSS-backdrop-filter-light\": \"blur(0px)\",\n  \"Appearance-light@@background-underlying-select-light\": \"background-underlying-CSS-light\",\n  \"Appearance-light@@background-underlying-CSS-light\": \"linear-gradient(168.44deg, #D7DAEA 1.62%, #F2F2F8 95.72%)\",\n  \"Appearance-light@@background-underlying-CSS-blend-mode-light\": \"normal\",\n  \"Appearance-light@@card-border-radius-light\": \"0px\",\n  \"Appearance-light@@card-shadow-light\": \"none\",\n  \"Appearance-light@@background-activated-tab-header-light\": \"radial-gradient(50% 150% at 50% 150%, #F8F9FF 0%, rgba(97, 54, 144, 0) 100%)\",\n  \"Appearance-light@@shadow-activated-tab-header-light\": \"none\",\n  \"Appearance-light@@indicator-remove-light\": true,\n  \"Appearance-light@@Active-states-file-explorer-select-light\": \"activated-file-tab-style-light\",\n  \"Appearance-light@@workspace-divider-transparent-light\": true,\n  \"Components@@CTA-BTN-enable\": true,\n  \"Components@@file-names-untrim\": true,\n  \"Components@@folder-font-bold\": true,\n  \"Components@@colorful-folder\": true,\n  \"Components@@file-icon-remove\": false,\n  \"Components@@outline-enhanced\": true,\n  \"Components@@new-tab-btn-select\": \"new-tab-btn-default\",\n  \"Components@@immersive-canvas\": true,\n  \"Components@@scrollbar-hide\": true,\n  \"Appearance-light@@card-layout-open-light\": true,\n  \"Appearance-light@@accent-color-override-light\": false,\n  \"Appearance-light@@card-highlight-light\": true,\n  \"Editor@@line-hover-indicator\": true,\n  \"Editor@@focus-indicator-codeblock-line-number\": true,\n  \"Editor@@focus-indicator-list-level\": true,\n  \"Editor@@editor-grid-background-pattren\": true,\n  \"Editor@@inline-title-divider-remove\": true,\n  \"Editor@@h1-divider-on\": true,\n  \"Editor@@h2-divider-on\": true,\n  \"Editor@@h3-divider-on\": true,\n  \"Editor@@h4-divider-on\": true,\n  \"Editor@@h5-divider-on\": true,\n  \"Editor@@h6-divider-on\": true,\n  \"Editor@@text-align-justify\": true,\n  \"Editor@@bold-color@@light\": \"#4781EC\",\n  \"Editor@@italic-color@@light\": \"#FF4BFE\",\n  \"Editor@@img-center-align\": true,\n  \"Mobile@@drawer-phone-full-width\": true,\n  \"Mobile@@card-layout-pad-open\": true,\n  \"Plugin@@colorful-checkbox\": true\n}\n```",
  "临时解决方案/2025年大一下暑假规划（大方向）.md": "- [x] 更新修复一下萌芽软件库网站\n- [ ] 重新搭建萌芽软件库，萌芽软件更新后台 两个网站并封装成Docker\n- [x] 继续学数据库，特别是MongoDB，MySQL\n- [x] 继续学计算机网络\n- [ ] 练习华为ICT\n- [ ] 完成树萌芽个人主页（shumengya.top）\n- [ ] LeetCode刷题\n- [ ] 学习Python\n- [x] 做一个flutter软件，学习一下flutter\n- [ ] 做一个uniapp软件，学习一下uniapp\n- [ ] 做一个微信小程序，学习一下微信开发者工具\n\n\n",
  "临时解决方案/Code-Server配置.md": "./code-server --host 0.0.0.0 --port 8888 --auth password ~/shumengya/project",
  "临时解决方案/HomePage美化配置.md": "\n**时间日期小组件**\n\n```yaml\n- datetime:\n    text_size: xl\n    format:\n      timeStyle: short\n\n# 13:37\nformat:\n  timeStyle: short\n  hourCycle: h23\n\n# 1:37 PM\nformat:\n  timeStyle: short\n  hour12: true\n\n# 1/23/22, 1:37 PM\nformat:\n  dateStyle: short\n  timeStyle: short\n  hour12: true\n\n\n# 4 januari 2023 om 13:51:25 PST\nlocale: nl\nformat:\n  dateStyle: long\n  timeStyle: long\n```\n\n**服务器监控小组件**\n\n```yaml\n- glances:\n    url: http://host.or.ip:port\n    username: user # optional if auth enabled in Glances\n    password: pass # optional if auth enabled in Glances\n    version: 4 # required only if running glances v4 or higher, defaults to 3\n    cpu: true # optional, enabled by default, disable by setting to false\n    mem: true # optional, enabled by default, disable by setting to false\n    cputemp: true # disabled by default\n    uptime: true # disabled by default\n    disk: / # disabled by default, use mount point of disk(s) in glances. Can also be a list (see below)\n    diskUnits: bytes # optional, bytes (default) or bbytes. Only applies to disk\n    expanded: true # show the expanded view\n    label: MyMachine # optional\n\n\tdisk:\n\t  - /\n\t  - /boot\n\t  ...\n```\n\n**问候语小组件**\n\n```yaml\n- greeting:\n    text_size: xl\n    text: Greeting Text\n    #有效的文本大小有 `4xl`、`3xl`、`2xl`、`xl`、`md`、`sm`、`xs`。\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
  "临时解决方案/IDE快捷键.md": "##### **Cursor**：\n全部展开：ctrl+m ，ctrl+j\n全部收缩：ctrl+m，ctrl+0\n\n##### **VsCode，Trae**：\n全部展开：Ctrl + K, Ctrl + J\n全部收缩：Ctrl + K, Ctrl + 0\n\n##### **VsCode 打开命令行** \nctrl+shift+P\n\nPython: Select Interpreter   选择python解释器+设置python环境",
  "临时解决方案/Termux安装nodejs失败.md": "你遇到的错误：\n\n```\nCANNOT LINK EXECUTABLE \"node\": cannot locate symbol \"EVP_MD_CTX_get_size_ex\"\n```\n\n通常表明 Termux 中的系统库（如 OpenSSL）与 Node.js 版本不兼容，缺少该符号的定义，导致 `node` 无法正常链接。\n\n---\n\n## 解决思路\n\n### 1. 更新与升级系统包——优先尝试\n\n多个用户反馈，仅通过更新、升级系统软件包，就能解决类似的问题：\n\n- Stack Overflow 上 Akino（2024 年 12 月）指出，使用如下命令：\n    \n    ```bash\n    apt full-upgrade\n    ```\n    \n    （注意不是 `full upgrade`）可能解决问题 。\n    \n- 其他环境（虽然不是 Termux）出现类似错误也由 `apk upgrade` 解决，这同样说明包版本不一致是关键问题 。\n    \n\n**建议在 Termux 中执行以下命令：**\n\n```bash\npkg update\npkg upgrade\napt full-upgrade\n```\n\n然后再次尝试安装 `nodejs` 或运行 `node`，看看问题是否依旧。\n\n---\n\n### 2. 如果还是报相同错误（符号缺失）\n\n可能意味着 Termux 上的 OpenSSL 与 Node.js 的预编译版本不可兼容，这种情况下建议使用以下替代方案：\n\n#### A. 使用 `nvm` 手动编译安装 Node.js\n\n1. **安装需求工具**：\n    \n    ```bash\n    pkg install curl git build-essential python\n    ```\n    \n2. **安装 nvm**：\n    \n    ```bash\n    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash\n    source ~/.bashrc\n    ```\n    \n3. **通过 nvm 安装 Node.js**（例如最新版或 LTS）：\n    \n    ```bash\n    nvm install 24\n    nvm use 24\n    ```\n    \n\n这种方法会从源代码编译 Node.js，因此能确保与当前系统的 OpenSSL 库兼容。\n\n#### B. 回退到已知兼容的 Node.js 版本\n\nTermux Wiki 提示，只可安装当前仓库提供的 `nodejs` 或 `nodejs-lts`，且不能同时安装两者 。若之前安装的版本不兼容，可尝试安装仓库中较旧或更稳定的版本（一般 `nodejs-lts` 更推荐）。\n\n---\n\n## 总结建议\n\n|步骤|操作|\n|---|---|\n|1⃣|执行 `pkg update && pkg upgrade`，再 `apt full-upgrade`|\n|2⃣|如果仍然报错，用 `nvm` 手动从源码安装 Node.js|\n|3⃣|或者尝试安装仓库提供的 LTS 版本，确认是否兼容|\n\n---\n\n### 快速操作脚本（可复制粘贴）\n\n```bash\n# 更新系统\npkg update && pkg upgrade\napt full-upgrade\n\n# 安装必要工具\npkg install curl git build-essential python\n\n# 安装 nvm\ncurl -o- https://raw.githubusercontent.com/nvm-sh/nvm/master/install.sh | bash\nsource ~/.bashrc\n\n# 使用 nvm 安装最新 Node.js\nnvm install node\nnvm use node\n\n# 或安装 LTS\nnvm install --lts\nnvm use --lts\n```\n\n---\n\n",
  "临时解决方案/临时.md": "杨耀翔/李昶佑/夏春鹏/王彤\n\n电气信息学院/计算机与软件学院/计算机与软件学院/计算机与软件学院\n\n202431076214/202431062440/202431061719/202431062229\n\n|                                                    |\n| -------------------------------------------------- |\n| 1、周幂   西南石油大学  教师  1203212378@qq.com   17781100230 |",
  "临时解决方案/修改hosts方式来直连Github.md": "通过修改 hosts 文件来直连 GitHub，是解决国内访问 GitHub 时连接不稳定、速度慢甚至无法访问的有效方法。其原理是绕过 DNS 解析，直接将 GitHub 的主要域名指向其真实、稳定的 IP 地址\n\n#### 核心原理\n\n当你在浏览器输入 github.com 时，系统会先查询 DNS 服务器来获取对应的 IP 地址。由于网络环境问题，这个查询过程可能失败或返回不理想的 IP。修改 hosts 文件就是手动在本地建立“域名 -> IP”的映射关系，跳过不可靠的 DNS 查询，直达目标服务器。\n\n---\n\n#### 方法一：手动查找并更新（推荐用于理解过程）\n\n##### 第一步：获取最新的 GitHub IP 地址\n\nIP 地址会变化，所以不能一直用网上搜到的老旧 IP。你需要自己查询最新的。\n\n1. 访问 IPAddress.com 网站查询以下关键域名的当前 IP 地址。\n2. 需要查询的域名包括：\n   · github.com\n   · assets-cdn.github.com\n   · github.global.ssl.fastly.net\n   · codeload.github.com\n   · gist.github.com\n3. 查询方法：\n   · 打开 https://www.ipaddress.com/\n   · 在搜索框中分别输入每个域名进行查询。\n   · 在结果页面中找到对应的 IP 地址（通常是 A Record 或 AAAA Record）。例如，查询 github.com 可能会得到 140.82.113.4（这是一个示例，请以你查询到的为准）。\n   注意：github.global.ssl.fastly.net 可能是一个 CDN 域名，有时会解析出多个 IP，选择一个延迟较低的即可。对于 assets-cdn.github.com，它可能指向多个 CloudFront 地址，也选择一个稳定的 IP。\n\n##### 第二步：修改 hosts 文件\n\nhosts 文件位于系统的特定位置，修改需要管理员权限。\n\n###### Windows 系统：\n\n1. hosts 文件路径：C:\\Windows\\System32\\drivers\\etc\\hosts\n2. 在开始菜单搜索 “记事本”，右键点击，选择 “以管理员身份运行”。\n3. 在记事本中，点击 文件 -> 打开，导航到 C:\\Windows\\System32\\drivers\\etc，将文件类型改为“所有文件 ( . )”，就能看到 hosts 文件，选择它打开。\n4. 在文件末尾，添加如下格式的内容（将 IP地址 替换为你第一步查到的真实 IP）：\n   ```bash\n   # GitHub Start\n   140.82.113.4      github.com\n   185.199.108.153   assets-cdn.github.com\n   151.101.65.194    github.global.ssl.fastly.net\n   140.82.114.9      codeload.github.com\n   140.82.113.5      gist.github.com\n   # GitHub End\n   ```\n   注意：IP 和域名之间用空格或制表符隔开。# 开头的是注释，方便管理。\n5. 保存文件。如果无法直接保存，可以先将文件另存到桌面，修改后再拖回原目录覆盖。\n\n###### macOS / Linux 系统：\n\n1. 打开终端（Terminal）。\n2. 使用 sudo 权限编辑 hosts 文件：\n   ```bash\n   sudo nano /etc/hosts\n   ```\n   输入你的电脑密码。\n3. 光标移动到最后，同样添加上述格式的内容。\n4. 按下 Ctrl + O 写入保存，再按 Ctrl + X 退出 nano 编辑器。\n\n##### 第三步：刷新 DNS 缓存\n\n修改 hosts 后，需要清除系统旧的 DNS 缓存才能使新设置生效。\n\n· Windows： 以管理员身份打开命令提示符（CMD 或 PowerShell），输入：\n  ```cmd\n  ipconfig /flushdns\n  ```\n· macOS： 在终端输入：\n  ```bash\n  sudo killall -HUP mDNSResponder\n  ```\n  对于不同版本的 macOS，命令可能略有不同，如 sudo dscacheutil -flushcache。\n· Linux： 根据发行版不同，命令可能不同。常见的是：\n  ```bash\n  sudo systemctl restart nscd\n  或\n  sudo /etc/init.d/networking restart\n  ```\n\n##### 第四步：测试连接\n\n1. 打开命令提示符或终端，ping 一下域名，看是否解析到你设置的 IP：\n   ```bash\n   ping github.com\n   ```\n2. 直接打开浏览器访问 github.com，看是否能正常加载。\n\n---\n\n#### 方法二：使用开源工具自动更新（更省心）\n\n手动更新比较麻烦，推荐使用开源工具 SwitchHosts，它可以自动从远程获取最新的 hosts 规则并应用。\n\n1. 下载 SwitchHosts：\n   · 访问其 GitHub 发布页：https://github.com/oldj/SwitchHosts/releases\n   · 下载对应你操作系统的版本（如 SwitchHosts_windows_arch.exe）。\n2. 配置远程规则：\n   · 打开 SwitchHosts，点击 “+” 添加一个新规则。\n   · 选择 “远程”。\n   · 在规则名中填写 GitHub Hosts。\n   · 在 URL 地址中填入一个持续更新的 hosts 源，例如：\n     · ineo6/hosts（推荐）： https://gitee.com/ineo6/hosts/raw/master/hosts\n     · 或者其他在 GitHub/Gitee 上维护的知名 hosts 项目。\n   · 设置自动刷新时间（如 1 小时）。\n   · 点击 “确定” 保存。\n3. 启用规则：\n   · 在 SwitchHosts 主界面，点击你刚添加的 GitHub Hosts 规则旁边的开关，将其启用（变为绿色）。\n   · 软件可能会请求管理员权限，同意即可。\n\n此后，SwitchHosts 会自动定期从你设置的 URL 拉取最新的 GitHub IP 地址并更新你的 hosts 文件，无需你再手动操作。\n\n常见问题与解决\n\n· 修改后仍无法访问？\n  · 检查 IP 是否正确： 你使用的 IP 可能已经过期。请重新用 IPAddress.com 查询或使用 SwitchHosts。\n  · 检查 hosts 文件格式： 确保 IP 和域名之间只有空格，没有多余字符。\n  · 彻底清除浏览器缓存和 DNS 缓存： 关闭浏览器再重新打开，并再次执行 ipconfig /flushdns。\n  · 尝试 HTTPS 访问： 有些工具会劫持 HTTP 请求，直接访问 https://github.com。\n· 安全性问题？\n  · 手动从 IPAddress.com 查询是安全的。\n  · 使用 SwitchHosts 时，请确保你使用的远程规则源是可信的（如上述推荐的 Gitee 源，访问速度较快）。\n· 修改 hosts 是永久解决方案吗？\n  · 不是永久的。因为 GitHub 的服务器 IP 可能会变更。一旦变更，旧的映射就会失效。这就是为什么推荐使用 SwitchHosts 这类工具来自动更新。\n\n",
  "临时解决方案/萌芽云剪切板.md": "\n用小米平板尝鲜下blender安卓版，目前只有高通SOC可用。感谢大佬的移植。大家可以自己安装试试，安卓手机和平板都可以。\n大佬也在B站：@dshawshank  \ngithub地址：https://github.com/dshawshank/APP-android_arm64\n网盘：https://pan.quark.cn/s/e504c586c802\n\n比例 「1:1」图片风格为2D像素风格， 画一个游戏装饰元素，风格为2.5D 就是上帝视角，就是正交斜视角那种有立体感，背景是纯黑色，纯黑色    不带任何文字，现在我要你画一个     作物仓库 仓库相关的装饰可以多一点    记住一定要3d立体感  \n\n\n> 请及时删除陈旧内容\n\n我想实现玩家自己小卖部功能结构就像这样 先不设计图片 目前只能售卖 种子 作物（成熟物） 道具 这三种 先实现 作物 大致思路是 玩家在 作物仓库点击相应作物\n\nGithub仓库: https://github.com/1812z/sleepy\n视奸网站: https://sleepy.1812z.top/\n支持手机和PC的推荐分支: https://github.com/HBWuChang/sleepy\n\nNavicat\n\nDBeaver PRO\n\n开发者的话\n《小王国: 即时战略》是由一位独立开发者制作的游戏，并由一位初创独立发行人进行推广。我们非常重视你的反馈和支持！欢迎将游戏加入愿望单，助力我们成长 —— 游戏即将发布！我们正在努力\n让游戏支持中文，也希望您能理解，如果某些文本翻译不够准确。如果您喜欢我们的游戏，并愿意协助我们完善中文翻译，欢迎在讨论区发帖与我们联系，我们非常乐意收到您的帮助与反馈！\n\nhttps://t.me/easynode_notify\n\n[https://github.com/chaos-zhu/easynode](https://github.com/chaos-zhu/easynode)",
  "临时解决方案/跨平台软件开发总结.md": "#### **1.Flutter:**\n优点:\n- Windows和Android表现比较一致，UI比较好看\n缺点:\n- 使用dart语言，完全不熟悉，需要时间打磨\n- gradle配置十分麻烦，开了梯子还卡进度条，目前只找到用国内镜像开发\n\n#### **2.Godot:**\n优点:\n- 跨平台性极强，基于gdscript各平台表现几乎一模一样\n- 可以使用gdscript，c#开发上手快，还可以c++扩展\n缺点:\n- UI十分丑陋，美化有点麻烦(ai可以)\n- 毕竟是游戏引擎对一些软件api适配十分不好，基本都要自己造轮子\n\n#### **3.Kivy:**\n优点:\n- 使用Python开发，速度几乎最快\n缺点:\n- 妈的依赖下半天，开梯子也慢的离谱\n- UI比godot还丑\n- 构建安卓apk只能用Linux环境\n- 默认不支持中文，配置麻烦\n\n#### **4.ReactNative-expo**\n优点:\n- 使用JavaScript开发，前端框架，比较熟悉\n- 基于云端构建比较方便(直接几行命令)\n- 调试比较方便，热更新，热重载\n缺点:\n- 云端构建不符合极客精神，而且需要排队(时间有时候很长)\n- 软件导出apk很大\n\n#### **5.ReactNative**\n还没试\n\n#### **6.UniApp:**\n优点:\n- 基于JavaScript，前端框架，比较熟悉\n- 云端构建，比较方便\n缺点:\n- 需要登录注册(编辑器)\n- 云端构建不符合极客精神，而且需要排队(时间有时候很长)\n\n",
  "华为ICT/MAC地址由多少位16进制组成.md": "MAC地址（Media Access Control Address）通常由 48位二进制数 表示，但为了方便阅读和书写，通常用 12位十六进制数字 组成，其格式为：\nXX:XX:XX:XX:XX:XX 或 XX-XX-XX-XX-XX-XX（每两位十六进制数为一组，共6组）。\n\n例如：00:1A:2B:3C:4D:5E。\n\n补充说明：\n\n· 前24位（前6位十六进制）是 厂商标识（OUI），由IEEE分配给设备制造商。\n· 后24位（后6位十六进制）是 设备唯一标识，由制造商自行分配。\n\n因此，MAC地址由 12位十六进制数字 组成（共48位二进制）。\n",
  "华为ICT/子网划分后计算广播地址.md": "划分后的网段为 172.16.0.0/17，需要计算该子网的广播地址。\n\n步骤解析：\n\n1. 确定子网掩码：\n      /17 表示子网掩码为 255.255.128.0（即前17位为网络位，后15位为主机位）。\n2. 计算网络地址和广播地址：\n   · IP地址 172.16.0.0 是B类地址，默认掩码为16位，但这里划分子网后为17位。\n   · 子网掩码 255.255.128.0 的二进制形式：\n          11111111.11111111.10000000.00000000\n   · 网络地址（172.16.0.0）的二进制：\n          10101100.00010000.00000000.00000000\n   · 广播地址是主机位全为1的地址：\n          主机位有15位（后15位），所以将主机位全部置1：\n          10101100.00010000.01111111.11111111 转换为十进制：172.16.127.255\n3. 验证选项：\n   · A. 172.16.128.255（属于下一个子网）\n   · B. 172.16.255.255（默认B类广播地址，但这里已划分子网）\n   · C. 172.16.0.255（主机位不全为1，不是广播地址）\n   · D. 172.16.127.255（正确）\n\n\n\n核心概念理解\n\n首先，我们需要理解几个基本概念：\n\n1. IP地址：就像你家的地址，由“网络部分”和“主机部分”组成。\n   · 网络部分：相当于“XX省XX市XX区XX街道”，标识了一个大的区域。\n   · 主机部分：相当于“XX小区XX栋XX号”，标识了在这个区域内的具体门牌。\n2. 子网掩码：用来告诉我们IP地址中，哪部分是“网络”，哪部分是“主机”。\n   · /17 就是一种表示子网掩码长度的方法，意思是IP地址的前17位是网络部分，剩下的（32-17=15位）是主机部分。\n3. 广播地址：在一个小区（子网）里，如果你想对所有住户（所有主机） 喊话，你就需要使用“广播地址”。它的规则是：网络部分保持不变，主机部分全部填上1。\n\n我们的目标就是根据规则，算出这个“对所有主机喊话”的地址。\n\n---\n\n详细计算步骤（跟着我做就行）\n\n我们拿到的IP网段是 172.16.0.0/17。\n\n第1步：写出完整的IP地址和子网掩码\n\n· IP地址: 172 . 16 . 0 . 0\n· 子网掩码 /17：255 . 255 . 128 . 0\n  · （这个是需要记忆的，/17对应的掩码就是255.255.128.0）\n\n第2步：将地址和掩码转换成二进制形式（这是最关键的一步）\n\n我们先复习一下十进制怎么转二进制，重点是第三段（128）和第四段（0）：\n\n· 172 -> 10101100 (这是一个B类地址，前16位默认是网络号，172.16是网络部分)\n· 16 -> 00010000\n· 0 -> 00000000\n· 0 -> 00000000\n\n所以，172.16.0.0 的二进制是： 10101100 . 00010000 . 00000000 . 00000000\n\n子网掩码 255.255.128.0 的二进制是： 11111111 . 11111111 . 10000000 . 00000000\n\n· 看，前17位（11111111.11111111.1）全是1，正好对应/17。后面15位（0000000.00000000）全是0。\n\n第3步：根据子网掩码，区分出网络部分和主机部分\n\n我们把IP地址和子网掩码对齐看：\n\n```\nIP地址: 10101100.00010000.00000000.00000000\n掩码  : 11111111.11111111.10000000.00000000\n           |网络部分 (17位) |   主机部分 (15位)   |\n```\n\n· 网络部分：前17位（10101100.00010000.0）必须原封不动。\n· 主机部分：后15位（0000000.00000000）要全部变成1，以形成广播地址。\n\n第4步：计算广播地址\n\n把主机部分全部置1：\n\n· 原来的主机位：0000000 . 00000000\n· 全部变成1：   1111111 . 11111111\n\n现在，我们把不变的网络部分和全部变成1的主机部分组合起来，就得到了广播地址的二进制：\n\n10101100 . 00010000 . 01111111 . 11111111\n\n· 注意看第三段：网络部分只占了第三段的第1位（是0），剩下的7位属于主机部分，被我们置为了1111111。所以第三段从00000000变成了01111111。\n\n第5步：将二进制广播地址转换回十进制\n\n现在我们把这个二进制数转换回十进制，每8位一组：\n\n· 第一段 10101100 -> 172 (和原来一样)\n· 第二段 00010000 -> 16 (和原来一样)\n· 第三段 01111111 -> 127\n  · 01111111 怎么算？从右往左：(1*2^6) + (1*2^5) + (1*2^4) + (1*2^3) + (1*2^2) + (1*2^1) + (1*2^0) = 64+32+16+8+4+2+1 = 127\n· 第四段 11111111 -> 255 (所有位都是1，肯定是255)\n\n所以，最终的广播地址是：172 . 16 . 127 . 255\n\n---\n\n回头看选项\n\n· A. 172.16.128.255 -> 这是下一个子网的起始地址\n· B. 172.16.255.255 -> 这是整个B类网络172.16.0.0/16的广播地址\n· C. 172.16.0.255 -> 这是一个普通的主机地址，主机位没有全1\n· D. 172.16.127.255 -> 正确！ 这正是我们算出来的结果。\n\n总结一个傻瓜技巧\n\n对于这类题，有一个快速判断的方法：\n\n· /17 的掩码把第三个字节“劈成了两半”。\n· 网络地址第三位是 0。\n· 这个子网的广播地址第三位就是 0 + 127 = 127。（因为一半的大小是128，从0开始，到127结束）\n· 最后一个字节永远是 255。\n· 所以广播地址是 172.16.127.255。\n",
  "华为ICT/虚拟局域网作用.md": "虚拟局域网（VLAN）技术的主要作用是 A. 隔离广播域。\n\n详细解析：\n\n· A. 隔离广播域：VLAN的核心功能是将一个物理局域网划分成多个逻辑广播域。每个VLAN是一个独立的广播域，广播流量仅限于本VLAN内，从而减少网络中的广播流量，提高网络性能和安全性。\n· B. 组网灵活：VLAN确实提供了灵活的组网能力（例如基于端口、MAC地址、协议等划分），但这不是其主要作用，而是实现隔离广播域的手段。\n· C. 扩展性好：VLAN可以扩展网络规模（例如跨交换机划分VLAN），但这也是基于隔离广播域带来的好处，并非最核心的作用。\n· D. 增强保密性：VLAN通过隔离流量（不同VLAN间通信需经过路由）间接增强了保密性，但这不是主要设计目的，而是衍生优势。\n\n因此，VLAN技术最根本、最主要的作用是隔离广播域（A选项）。",
  "华为ICT/题库.md": "1.568B标准的双绞线线序是：\n\n1. 橙白\n2. 橙\n3. 绿白\n4. 蓝\n5. 蓝白\n6. 绿\n7. 棕白\n8. 棕\n\n\n\n\n2.在华为VRP系统中，系统软件是设备启动和运行的必备软件，为整个设备提供支撑、管理、业务等功能，其常见的文件后缀名是 .cc。\n\n所以，正确答案是 C. .cc。\n\n为了帮助你更清晰地了解华为VRP系统中常见的文件类型，我准备了一个表格：\n\n文件类型 常见后缀名 主要用途\n系统软件 .cc 设备启动、运行的必备软件\n配置文件 .cfg, .zip, .dat 保存用户配置命令，设备启动时加载生效\n补丁文件 .pat 修复系统软件小问题，无需重装系统\nPAF文件 .bin 裁剪设备资源与功能，适配不同场景需求\n\n\n\n",
  "大萌芽-Debian13服务器.md": "卸载casaos：\ncasaos-uninstall\nLinux一键换软件源：\nbash <(curl -sSL https://linuxmirrors.cn/main.sh)\nLinux一键换Docekr源：\nbash <(curl -sSL https://linuxmirrors.cn/docker.sh)",
  "我的世界/我的世界常用命令.md": "***/kill @e[type=mutant:mskeleton_bones]*** \n清除掉突变骷髅模组的骷髅骨头实体\n\n***/kill @e[type=item]*** \n清除所有掉落物\n\n***/gamerule mobGriefing true*** \n设置生物破坏开启或者禁用 （禁用后村民不会繁殖，雪傀儡不会产雪）",
  "数据库学习/MongoDB数据库优化方式一览.md": "除了索引之外，MongoDB 在 CRUD 操作优化上还有多种有效策略，尤其在处理海量数据时更为关键。以下是综合各技术文档和实践总结的核心优化方法：\n\n---\n\n### 🔄 一、批量操作优化\n1. **使用 `bulkWrite` 替代单条操作**  \n   通过批量写入减少网络开销和事务开销。基于 `ReplaceOneModel` 启用 `upsert`，实现存在更新、不存在插入的高效操作：\n   ```java\n   public void batchSave(List<?> dataList) {\n       List<ReplaceOneModel<Document>> bulkOps = dataList.stream()\n           .map(item -> {\n               Document doc = convertToDocument(item); // 转换为Document\n               return new ReplaceOneModel<>(\n                   Filters.eq(\"_id\", doc.get(\"_id\")), \n                   doc, \n                   new UpdateOptions().upsert(true)\n               );\n           }).collect(Collectors.toList());\n       collection.bulkWrite(bulkOps); // 批量执行\n   }\n   ```\n   此方法将多条操作合并为一次请求，写入性能提升显著。\n\n---\n\n### 📖 二、分页查询优化\n1. **避免精确 `count`**  \n   当数据量超大时，`count` 可能极慢。采用阈值法：若跳过 `MAX_PAGE_COUNT`（如1万条）后仍有数据，则返回阈值提示“数据超过1万条”，避免全表扫描：\n   ```java\n   private long approxCount(MongoTemplate mongoTemplate, Query query) {\n       query = query.with(PageRequest.of(MAX_PAGE_COUNT, 1));\n       return mongoTemplate.find(query, Entity.class).isEmpty() \n           ? mongoTemplate.count(query) \n           : MAX_PAGE_COUNT;\n   }\n   。\n   ```\n\n2. **用条件替代 `skip`**  \n   深度分页时（如第100页），避免 `skip(9900)`。改为记录上一页末尾的排序字段值（如时间戳），作为下一页查询条件：\n   ```sql\n   -- 原查询：db.collection.find().sort({time:-1}).skip(9900).limit(100)\n   -- 优化后：\n   db.collection.find({ time: { $lt: lastPageEndTime } })\n     .sort({ time: -1 })\n     .limit(100);\n   ```\n   此方法将 **O(N)** 的跳过操作转为 **O(1)** 的条件过滤。\n\n---\n\n### 📤 三、全量导出优化\n1. **字段投影减少数据传输**  \n   仅查询必要字段，降低网络与内存开销：\n   ```java\n   Query query = new Query();\n   query.fields().include(\"_id\").include(\"name\"); // 只返回_id和name。\n   ```\n\n2. **流式处理替代全量加载**  \n   使用 `stream()` 逐条处理数据，避免 `findAll` 导致内存溢出：\n   ```java\n   try (CloseableIterator<Entity> iter = mongoTemplate.stream(query, Entity.class)) {\n       while (iter.hasNext()) {\n           process(iter.next()); // 单条处理\n       }\n   }\n   ```\n   相比分页查询，流式处理无 `skip` 开销，且内存占用恒定。\n\n---\n\n### 🧩 四、文档设计优化\n1. **打破第三范式**  \n   - **冗余字段**：将高频查询的关联字段（如部门名称）冗余到主文档，避免联表查询。\n   - **内嵌设计**：一对多关系直接嵌套子文档（如订单内嵌商品列表），提升读取效率。但需注意文档大小限制（16MB）。\n   - **引用设计**：多对多关系使用ID数组而非完整嵌套，避免文档膨胀：\n     ```json\n     // 学生文档\n     {\n       \"_id\": \"s001\",\n       \"name\": \"Alice\",\n       \"teachers\": [\"t01\", \"t02\"] // 仅存储ID\n     }\n     ```\n\n---\n\n### ⚙️ 五、分片集群优化\n1. **碎片整理（MongoDB <7.0）**  \n   在早期版本中，分片集合可能因频繁写入产生碎片化小数据块，导致CRUD延迟。通过 `configureCollectionBalancing` 命令合并数据块，但需注意：\n   - 整理期间可能短暂阻塞元数据更新。\n   - MongoDB 7.0+ 已支持自动合并，通常无需手动操作。\n\n2. **负载均衡窗口设置**  \n   在业务低峰期触发负载均衡器迁移数据块，减少对CRUD的影响。\n\n---\n\n### 💎 六、其他关键技巧\n1. **合理控制事务范围**：短事务减少锁竞争。\n2. **写入确认级别调整**：对非关键数据使用 `w:0`（无确认），提升写入速度（牺牲一致性）。\n3. **TTL索引自动清理**：为临时数据（如日志）设置过期时间，减少存储压力。\n\n---\n\n### 💎 优化方法效果对比表\n| **优化方向**       | **适用场景**               | **性能提升效果**       | **实现复杂度** |\n|--------------------|--------------------------|----------------------|--------------|\n| **批量写入**       | 数据导入、批量更新         | ⭐⭐⭐⭐⭐ (极高)         | ⭐⭐ (中等)    |\n| **流式导出**       | 大数据量导出              | ⭐⭐⭐⭐ (避免OOM)       | ⭐ (简单)     |\n| **条件分页**       | 深度分页（>100页）        | ⭐⭐⭐⭐ (O(1) 跳转)     | ⭐⭐ (中等)    |\n| **冗余字段**       | 高频关联查询              | ⭐⭐⭐ (减少联表)        | ⭐⭐⭐ (较高)   |\n| **分片碎片整理**   | MongoDB 6.0以下分片集群   | ⭐⭐ (减少延迟)         | ⭐⭐⭐⭐ (复杂) |\n\n---\n\n> 💡 **实践建议**：优先从**批量操作**和**分页策略**入手，这两类优化代码改动小且收益显著。海量数据场景下，**流式处理+字段投影**是导出标配方案。分片集群升级到 MongoDB 7.0+ 可减少运维负担。",
  "数据库学习/MongoDB的索引一览.md": "**MongoDB 提供了强大的索引功能，这是优化查询性能最主要和核心的方法**，其作用原理与其他关系型数据库（如 MySQL, PostgreSQL）中的索引类似。\n\n**索引的核心作用：**\n\n1.  **大幅减少查询需要扫描的文档数量：** 没有索引时，MongoDB 必须执行集合扫描（`COLLSCAN`），即检查集合中的*每一个*文档。有了合适的索引，MongoDB 可以使用索引扫描（`IXSCAN`）快速定位到包含所需数据的文档位置。\n2.  **加速排序：** 如果排序字段包含在索引中，MongoDB 可以直接利用索引中已经排好的顺序返回结果，避免昂贵的在内存中排序。\n3.  **支持高效的数据去重：** `$group` 聚合阶段的分组操作可以利用索引。\n4.  **实现覆盖查询：** 如果查询只需要返回索引中包含的字段，MongoDB 可以*完全*从索引中获取结果，无需去读取实际的文档数据，速度极快。\n\n**MongoDB 支持的索引类型：**\n\n1.  **单字段索引：**\n    *   最基本的索引类型，在单个字段上创建。\n    *   示例：`db.collection.createIndex({ name: 1 })` (1 表示升序，-1 表示降序。对于纯等值查询，顺序通常不重要；对于排序查询，顺序很重要)。\n\n2.  **复合索引：**\n    *   在多个字段上创建的索引。\n    *   字段的顺序**极其重要**。它决定了索引如何组织和哪些查询模式可以利用该索引（最左前缀原则）。\n    *   示例：`db.collection.createIndex({ status: 1, order_date: -1 })`。这个索引可以高效支持：\n        *   只查询 `status` 的查询\n        *   同时查询 `status` 和 `order_date` 的查询\n        *   查询 `status` 并按 `order_date` 排序的查询\n    *   但不支持只查询 `order_date` 的查询（不符合最左前缀）。\n\n3.  **多键索引：**\n    *   当索引字段是数组时，MongoDB 会自动为数组中的每个元素创建索引条目。\n    *   用于高效查询数组字段中的元素。\n    *   示例：索引 `db.collection.createIndex({ tags: 1 })` 可以高效支持查询 `db.collection.find({ tags: \"mongodb\" })`。\n\n4.  **地理空间索引：**\n    *   **2dsphere：** 用于查询存储为 GeoJSON 对象或传统坐标对的地理空间数据（地球球面几何）。支持邻近查询（`$near`）、包含查询（`$geoWithin`）、相交查询（`$geoIntersects`）等。\n    *   **2d：** 用于在二维平面上（如地图游戏）查询存储为传统坐标对的数据。主要用于平面几何计算。\n\n5.  **文本索引：**\n    *   支持对字符串或字符串数组字段的内容进行文本搜索。\n    *   支持词干提取、停用词过滤等基本文本处理功能。\n    *   示例：`db.collection.createIndex({ description: \"text\" })`，然后使用 `$text` 操作符进行搜索。\n\n6.  **哈希索引：**\n    *   对字段值进行哈希运算，并在哈希值上建立索引。\n    *   主要用途是为**分片键**提供更均匀的数据分布（使用`hashed`分片策略时）。\n    *   只支持等值匹配查询，不支持范围查询、排序或其他操作。\n    *   示例：`db.collection.createIndex({ _id: \"hashed\" })`。\n\n7.  **通配符索引：**\n    *   可以索引文档中未知或任意字段。适用于模式动态变化的场景。\n    *   示例：\n        *   `db.collection.createIndex({ \"userMetadata.$**\": 1 })` 索引 `userMetadata` 子文档中的所有字段。\n        *   `db.collection.createIndex({ \"$**\": 1 })` 索引文档中的所有字段（谨慎使用，开销大）。\n\n8.  **唯一索引：**\n    *   强制索引字段的值在整个集合中是唯一的（`_id` 字段默认就有唯一索引）。\n    *   可以用于单字段或复合字段。\n    *   示例：`db.collection.createIndex({ email: 1 }, { unique: true })`。\n\n9.  **TTL 索引：**\n    *   一种特殊的单字段索引，用于在指定时间后或在指定时间点自动从集合中删除文档。字段必须是日期类型或包含日期元素的数组。\n    *   适用于会话数据、日志、临时数据等。\n    *   示例：`db.logs.createIndex({ createdAt: 1 }, { expireAfterSeconds: 3600 })` (文档在 `createdAt` 时间之后 3600 秒/1 小时被删除)。\n\n10. **稀疏索引：**\n    *   只包含具有索引字段的文档的条目。即使索引字段值为 `null`，也会包含在内；但如果文档*完全缺失*该索引字段，则不会被索引。\n    *   节省空间，提高索引效率（当字段在大部分文档中缺失时）。\n    *   示例：`db.collection.createIndex({ optionalField: 1 }, { sparse: true })`。\n\n**如何管理和使用索引：**\n\n1.  **创建索引：** 使用 `db.collection.createIndex()` 方法。\n    *   示例：`db.products.createIndex({ category: 1, price: -1 })`\n2.  **查看索引：** 使用 `db.collection.getIndexes()` 方法。\n3.  **删除索引：** 使用 `db.collection.dropIndex()` 或 `db.collection.dropIndexes()` 方法。\n4.  **分析查询性能：** 使用 `explain()` 方法查看查询的执行计划，确认是否使用了索引（`IXSCAN`）以及使用了哪个索引。这是优化查询的关键步骤。\n    *   示例：`db.orders.find({ status: \"A\", amount: { $gt: 100 } }).sort({ order_date: -1 }).explain(\"executionStats\")`\n5.  **索引管理最佳实践：**\n    *   **为常用查询模式创建索引：** 分析你的应用最常见的查询（`find`, `sort`, `aggregate`中的`$match`, `$group`, `$sort`等阶段），为这些查询涉及的字段创建合适的索引（通常是复合索引）。\n    *   **遵循最左前缀原则：** 设计复合索引时，将最常用于过滤或排序的字段放在左边。\n    *   **考虑选择性：** 选择性高的字段（如唯一值多的字段）放在复合索引的前面通常更有效。\n    *   **使用覆盖查询：** 尽量让查询只返回索引中包含的字段。\n    *   **监控索引使用率：** MongoDB Profiler 或 Atlas 性能监控可以查看索引的使用情况。使用率低的索引应考虑删除，因为它们会消耗写性能和存储空间。\n    *   **权衡读写性能：** 索引会加速读操作，但会减慢写操作（插入、更新、删除），因为写操作需要维护索引。不要过度索引。\n    *   **后台创建大索引：** 在大型集合上创建索引可能耗时很长并阻塞操作。使用 `{ background: true }` 选项可以在后台创建索引（虽然仍可能有性能影响，但不会完全阻塞读写）。\n    *   **合理使用内存：** 确保有足够的内存将常用索引（或其活跃部分）保存在内存中，避免频繁的磁盘 I/O。\n\n**总结：**\n\nMongoDB 提供了极其丰富和强大的索引类型（单字段、复合、多键、地理空间、文本、哈希、通配符、唯一、TTL、稀疏）来满足各种查询场景的优化需求。**创建和管理合适的索引是提升 MongoDB 查询性能最关键的手段。** 务必结合你的具体查询模式，使用 `explain()` 分析执行计划，遵循索引设计的最佳实践（特别是复合索引的最左前缀原则），并持续监控和调整索引策略。",
  "数据库学习/MySQL数据库支持的数据类型.md": " \n\n## 1️⃣ 数值类型（Numeric）\n\n| 类型分类 | 数据类型                                                      | 说明            |\n| ---- | --------------------------------------------------------- | ------------- |\n| 整数型  | `TINYINT`、`SMALLINT`、`MEDIUMINT`、`INT`/`INTEGER`、`BIGINT` | 存储不同范围的整数     |\n| 精确小数 | `DECIMAL(M,D)`、`NUMERIC`                                  | 高精度定点数（常用于金额） |\n| 浮点数  | `FLOAT`、`DOUBLE`/`REAL`                                   | 近似数值（科学计算）    |\n| 位类型  | `BIT(M)`                                                  | 存储二进制位        |\n|      |                                                           |               |\n|      |                                                           |               |\n\n---\n\n## 2️⃣ 日期与时间类型（Date & Time）\n\n|数据类型|格式|说明|\n|---|---|---|\n|`DATE`|YYYY-MM-DD|日期|\n|`DATETIME(fsp)`|YYYY-MM-DD HH:MM:SS|日期 + 时间|\n|`TIMESTAMP(fsp)`|YYYY-MM-DD HH:MM:SS|时间戳（支持自动更新）|\n|`TIME`|HH:MM:SS|时间或时间间隔|\n|`YEAR`|YYYY|年份（2 位或 4 位）|\n\n---\n\n## 3️⃣ 字符串与二进制类型（String & Binary）\n\n|类型分类|数据类型|说明|\n|---|---|---|\n|定长字符串|`CHAR(M)`|定长，最大 255|\n|变长字符串|`VARCHAR(M)`|可变长度，最大 65535（受行大小限制）|\n|定长二进制|`BINARY(M)`|定长二进制|\n|变长二进制|`VARBINARY(M)`|变长二进制|\n|文本|`TINYTEXT`、`TEXT`、`MEDIUMTEXT`、`LONGTEXT`|存储大文本|\n|二进制大对象|`TINYBLOB`、`BLOB`、`MEDIUMBLOB`、`LONGBLOB`|存储二进制数据|\n|枚举|`ENUM('a','b',...)`|单选固定集合|\n|集合|`SET('a','b',...)`|多选固定集合|\n\n---\n\n## 4️⃣ 空间数据类型（Spatial）\n\n|数据类型|说明|\n|---|---|\n|`GEOMETRY`|任意几何对象|\n|`POINT`|点|\n|`LINESTRING`|线|\n|`POLYGON`|多边形|\n|`MULTIPOINT`、`MULTILINESTRING`、`MULTIPOLYGON`、`GEOMETRYCOLLECTION`|组合空间对象|\n\n---\n\n## 5️⃣ JSON 类型\n\n|数据类型|说明|\n|---|---|\n|`JSON`|存储 JSON 文档，支持索引与函数操作|\n\n---\n",
  "数据库学习/普通json储存和MongoDB储存优缺点.md": "游戏玩家数据储存在普通JSON文件和MongoDB中各有其适用场景，二者的优缺点对比可结合游戏数据的特性（如数据量、读写频率、结构灵活性、并发需求等）展开分析：\n \n一、普通JSON文件储存\n \n普通JSON文件储存指将玩家数据以JSON格式写入本地文件（单文件或多文件，如按玩家ID分文件），依赖文件系统直接读写。\n \n优点\n \n1. 简单轻量，开发成本低\n无需部署数据库服务，直接通过编程语言的文件操作API（如Python的 json 模块、Node.js的 fs 模块）即可读写，适合小型团队或开发初期快速验证功能，学习成本几乎为0。\n2. 资源占用少\n仅依赖文件系统，不消耗额外的数据库进程资源（如内存、CPU），适合设备性能有限的场景（如单机小游戏、轻量网页游戏）。\n3. 数据直观可见\nJSON文件为文本格式，可直接用编辑器打开查看或修改，便于开发调试（如临时修改玩家数据测试功能）。\n \n缺点\n \n1. 读写效率低，不适合大数据量\n- 每次读写需加载整个JSON文件到内存解析（或写入时覆盖整个文件），当玩家数据量增大（如10万+玩家），单文件体积膨胀，读写耗时会急剧增加（例如加载100MB的JSON文件可能需要数百毫秒）。\n- 若按玩家ID分文件，虽能缓解单文件压力，但批量查询（如排行榜、全服统计）需遍历所有文件，效率极低。\n2. 并发安全问题突出\n多玩家同时操作时（如多人在线游戏的并发读写），文件系统缺乏原生锁机制，易出现“写覆盖”（如A玩家写入时B玩家同时写入，导致其中一方数据丢失）或数据损坏（如写入中断导致JSON格式错误）。\n3. 结构扩展性差\n若玩家数据结构迭代（如新增“宠物属性”“公会信息”），需手动处理旧JSON文件的格式兼容（如遍历所有文件添加新字段），操作繁琐且易出错。\n4. 缺乏数据一致性保障\n无事务支持，例如玩家“扣金币+加道具”的原子操作，若中途程序崩溃，可能导致金币已扣但道具未加，数据不一致。\n \n二、MongoDB储存\n \nMongoDB是文档型NoSQL数据库，以BSON（JSON的二进制扩展）格式存储数据，天然适配半结构化的玩家数据。\n \n优点\n \n1. 高效读写与查询能力\n- 支持索引（如按玩家ID、等级建索引），可快速定位单玩家数据（毫秒级），解决JSON文件全量解析的性能问题。\n- 支持复杂查询（如“等级>50且在线的玩家”“道具列表包含某物品的玩家”），适合游戏中的排行榜、好友列表、任务统计等场景。\n2. 良好的并发与一致性\n- 内置多版本并发控制（MVCC），支持高并发读写（ thousands of TPS），避免JSON文件的并发冲突。\n- 支持事务（MongoDB 4.0+），可保证“扣钱+加道具”“升级+解锁技能”等操作的原子性，防止数据不一致。\n3. 灵活扩展，适配数据增长\n- 玩家数据量随用户增长时，可通过“分片”横向扩展（将数据分布到多台服务器），支持百万级甚至亿级玩家数据。\n- 文档结构动态灵活，新增字段无需修改表结构，旧数据可兼容（查询时自动忽略不存在的字段），适配游戏版本迭代。\n4. 完善的数据管理能力\n提供备份（ mongodump ）、恢复（ mongorestore ）、监控（MongoDB Atlas）等工具，支持数据压缩、过期索引（如清理离线玩家缓存），适合长期运行的在线游戏。\n \n缺点\n \n1. 运维与学习成本高\n需要部署、维护数据库服务（如集群配置、索引优化、故障排查），对小型团队可能增加运维压力；开发人员需学习MongoDB的查询语法（如 find 、 aggregate ）、索引设计等，门槛高于JSON文件。\n2. 资源占用较高\n相比JSON文件，MongoDB需要额外的内存（缓存索引和热数据）、CPU（处理查询）和磁盘空间（数据文件+日志），不适合资源受限的极简场景（如嵌入式小游戏）。\n3. 过度设计风险\n对于单机游戏、玩家数极少（如几百人）且无复杂查询的场景，MongoDB的优势无法体现，反而因配置复杂降低开发效率。\n \n总结：适用场景\n \n- 普通JSON文件：适合单人游戏、小型休闲游戏、开发测试阶段，或数据量极小（<1万玩家）、读写频率低、无复杂查询的场景。\n- MongoDB：适合多人在线游戏（MMO、MOBA等）、中大型游戏，或玩家数多（>1万）、需高频读写、复杂查询、结构迭代频繁的场景。\n \n实际开发中，也可根据规模过渡：初期用JSON文件快速上线，待用户增长后迁移至MongoDB，利用其扩展性支撑业务。",
  "无线-HCIA 02.md": "\n1.💡解答\n \n在双链路热备配置中，AP检测主链路超时进行主备切换的时间通常是心跳检测间隔时间的3倍。已知心跳检测间隔时间为20秒，那么主备切换时间为20×3 = 60秒。\n \n答案：B\n \n2.💡解答\n \n要解决这道题，需了解Windows 2003 DHCP Server上Option 43字段配置AC IP地址的格式规则：\n \n- Option 43字段格式为：长度（1字节） + AC数量（1字节） + AC IP地址的十六进制形式。\n- 这里AC的IP地址是10.23.100.1，转换为十六进制：10是0A，23是17，100是64，1是01，即十六进制为0A176401，共4个字节（0A、17、64、01）。\n- 长度部分，AC数量为1（1个AC），所以长度是1 + 4 = 5，十六进制为05？不对，再仔细看，正确的是：对于单个AC，Option 43的格式是03（表示后续有3个字节的AC地址相关） + 01（AC数量） + AC IP地址的十六进制。AC IP地址10.23.100.1的十六进制是0A176401，共4个字节，所以组合起来是03 01 0A 17 64 01，转换为题目中的形式，对应选项C（030B31302E323332E3130302E31，这里是将十六进制按每两位一组，且可能有字符转换的对应，核心是符合“03 + 相关字节 + AC IP十六进制”的结构）。\n \n答案：C\n\n3.💡解答\n \n要解决这道题，需逐一分析每个选项：\n \n- 选项A：不同地区可用的WLAN信道可能存在差异，规划前跟客户确认当地可用信道是合理且必要的，该说法正确。\n- 选项B：同一室分AP所连接的天线，为了减少同AP下不同天线间的干扰等问题，发出信号的信道通常是一样的，该说法正确。\n- 选项C：华为的室分AP6310是单频AP，只支持2.4G频段，不支持5G频段的信道规划，该说法错误。\n- 选项D：相邻的边缘天线若使用相同信道，容易产生干扰，所以通常不使用相同信道，该说法正确。\n \n答案：C\n \n继续问→\n\n4.💡解答\n \n要解决这道题，需按照以下步骤计算：\n \n步骤一：计算总用户数\n \n已知有8个办公区域，每个办公区域有10个人，那么总用户数为：8\\times10 = 80（人）。\n \n步骤二：计算并发用户数\n \n因为所有用户上网并发率是80\\%，所以并发用户数为：80\\times80\\% = 64（人）。\n \n步骤三：计算总所需带宽\n \n每用户要求下行带宽为2Mbps，则总所需带宽为：64\\times2 = 128Mbps。\n \n步骤四：计算所需AP数量\n \n每个AP的实测速率大概为80Mbps，那么所需AP数量为：128\\div80 = 1.6。由于AP数量必须为整数，且1个AP无法满足带宽需求，所以需要向上取整，即需要2个AP。\n \n答案：B。\n \n继续问→\n\n\n5.💡解答\n \n要解决这道题，需逐一分析每个选项：\n \n- 选项A：单AP带的天线数有合理范围，4 - 8个最佳且通常不超过10个，该说法符合AP6310SN的应用特点，是正确的。\n- 选项B：AP到最远端室分天线的距离控制在50米以内、不超过60米，能保证信号传输质量，该说法正确。\n- 选项C：典型室分场景下，每个天线输出功率控制在12 - 18dBm，且与场强需求和墙体结构有关，这是合理的功率规划要求，该说法正确。\n- 选项D：虽然同一个AP的室分天线间存在干扰，但在合理规划（如信道规划、功率调整等）下，是可以根据需求进行一定密度布放的，并非“不可以根据需求密集布放”，该说法错误。\n \n答案：D。\n \n继续问→\n\n6.💡解答\n \n要解决这道题，需逐一分析每个选项：\n \n- 选项A：TKIP加密中使用的IV（初始化向量）长度为48bits，而不是24bits，该说法错误。\n- 选项B：TKIP加密采用的加密算法与WEP加密相同，都是RC4算法，该说法正确。\n- 选项C：开发TKIP加密的动机确实是为了升级旧式WEP硬件的安全性，该说法正确。\n- 选项D：TKIP加密中增加了Key的生成、管理以及传递的机制，增强了安全性，该说法正确。\n \n答案：A。\n \n继续问→\n\n7.💡解答\n \n要解决这道题，需理解Agile Controller中时间配置在认证及授权规则里的作用：\n \nAgile Controller在认证和授权规则中配置时间，目的是规定用户可以接入网络的时间范围，比如允许用户在工作日的某个时间段内接入，而不是规定接入的总时长、单一时间点或者离线截止时间。\n \n答案：D。\n \n继续问→\n\n8.💡解答\n \n要解决这道题，需明确天线增益差值的计算及单位：\n \n天线增益的单位如果是相同的（这里天线A和天线B的增益单位都是dBi），计算两者的增益差值时，直接用数值相减即可。天线A增益为11dBi，天线B增益为8dBi，差值为11 - 8 = 3dB（因为是同单位的增益比较，差值的单位用dB表示）。\n \n答案：A。\n \n继续问→\n\n9.💡解答\n \n要解决这道题，需明确802.11帧中不同帧间间隔（Inter - Frame Space，IFS）的作用：\n \n在802.11协议中，SIFS（Short Inter - Frame Space，短帧间间隔） 是最短的帧间间隔，用于需要快速响应的场景，比如RTS（Request To Send，请求发送）和CTS（Clear To Send，允许发送）之间的帧间间隔就是SIFS。而IFS是帧间间隔的统称；DIFS（Distributed Inter - Frame Space，分布式帧间间隔）用于普通数据帧等的竞争接入；PIFS（Point Coordination Function Inter - Frame Space，点协调功能帧间间隔）用于点协调功能下的帧发送。\n \n答案：A。\n \n继续问→\n\n10.💡解答\n \n要解决这道题，需分析Int - Serv模型的特点及未大规模商用的原因：\n \nInt - Serv（集成服务）模型需要为每个流（flow）预留资源，维护每个流的状态信息。随着网络中流的数量增多，对网络设备（如路由器）的存储、处理能力要求极高，难以在大规模网络中部署，也就是可扩展性不好。而带宽预留有限、转发效率较低、不利于流量监管并非其未大规模商用的主要原因。\n \n答案：C。\n \n继续问→\n\n11.💡解答\n \n由于没有提供图，无法准确判断调制方式。不过可以先介绍一下各选项对应的调制方式特点：\n \n- A. 调幅：通过改变载波信号的振幅来携带信息，振幅的变化反映了调制信号的变化。\n- B. 调频：通过改变载波信号的频率来携带信息，频率的变化与调制信号相关。\n- C. 调相：通过改变载波信号的相位来携带信息，相位的变化对应调制信号的变化。\n- D. 调波：不是常见的基本调制方式。\n \n如果能提供图，可根据图中载波的振幅、频率、相位等变化情况，进一步准确判断属于哪种调制方式。\n \n继续问→\n\n12.💡解答\n \n要解决这道题，需逐一分析关于AP6610DN的各选项描述：\n \n- 选项A：AP6610DN是增强型的室外AP，该描述符合其产品特性，是正确的。\n- 选项B：AP6610DN是双频AP，5GHz频段可用于无线桥接和用户接入，这也是其功能特点，是正确的。\n- 选项C：AP6610DN并非只拥有一个以太网接口，它有多个接口，所以该描述错误。\n- 选项D：AP6610DN同时支持以太网接口和光纤接口，符合产品实际情况，是正确的。\n \n答案：C。\n \n继续问→\n\n13.💡解答\n \n要解决这道题，需分析CCMP（Counter - Mode/CBC - MAC Protocol）和TKIP（Temporal Key Integrity Protocol）加密的特点：\n \n- 选项A：CCMP采用的IV（初始化向量）长度等因素并非是其比TKIP安全性高的主要原因。\n- 选项B：密钥分发机制等方面的差异不是CCMP安全性更高的核心因素。\n- 选项C：CCMP采用了更复杂的加密算法（基于AES加密算法），而TKIP是基于WEP的改进，加密算法相对简单，这是CCMP比TKIP安全性高的重要原因。\n- 选项D：消息完整性检验机制两者都有相关设计，不是CCMP安全性更高的关键原因。\n \n答案：C。\n \n继续问→\n\n14.💡解答\n \n要解决这道题，需分析每个命令的功能：\n \n- 选项A： display interface  命令主要用于查看接口的状态信息，不是查看AC（接入控制器）当前配置，所以该选项错误。\n- 选项B： display current - configuration  命令的功能就是查看设备当前的配置信息，对于AC来说，该命令可以查看其当前配置，所以该选项正确。\n- 选项C： display ap all  命令主要用于查看AP（无线接入点）的相关信息，不是查看AC当前配置，所以该选项错误。\n- 选项D： display version  命令主要用于查看设备的版本信息，不是查看AC当前配置，所以该选项错误。\n \n答案：B。\n \n继续问→\n\n15.💡解答\n \n要解决这道题，需分析每个选项对应的组织职能：\n \n- 选项A：WiFi联盟的主要工作就是为WLAN设备进行认证，以实现WLAN技术的互操作性，确保不同厂商的WLAN设备能够相互兼容、正常工作，该选项符合要求。\n- 选项B：IEEE（电气与电子工程师协会）主要负责制定包括WLAN在内的众多技术标准（如802.11系列标准），但不是专门针对WLAN设备认证以实现互操作性的组织，所以该选项错误。\n- 选项C：IETF（互联网工程任务组）主要致力于互联网相关的标准制定等工作，与WLAN设备认证及互操作性实现关联不大，所以该选项错误。\n- 选项D：FCC（美国联邦通信委员会）主要负责美国的通信管制等工作，并非为WLAN设备认证以实现互操作性的组织，所以该选项错误。\n \n答案：A。\n \n继续问→\n\n16.💡解答\n \n要解决这道题，需明确全向天线的水平方向图特点：\n \n全向天线在水平方向上能够向各个方向均匀辐射信号，所以其水平方向图表现为360度。\n \n答案：C。\n \n继续问→\n\n17.💡解答\n \n要解决这道题，需明确ETSI（European Telecommunications Standards Institute）的含义，即欧洲电信标准协会，它是欧洲的标准组织。\n \n答案：D。\n美国的对应组织是 ANSI（美国国家标准学会） 或 ATIS（Alliance for Telecommunications Industry Solutions）\n \n继续问→\n\n18.💡解答\n \n要解决这道题，需明确WEP安全策略的配置相关知识：\n \n- 选项A：其中 authentication - method open 等配置不符合WEP安全策略的正确配置要求，所以该选项错误。\n- 选项B： security - policy wep policy wep share - key 等配置是符合在AC6605上配置WEP安全策略的操作，所以该选项正确。\n- 选项C：该选项涉及的是WPA相关配置，并非WEP的配置，所以该选项错误。\n \n答案：B。\n \n继续问→\n\n19.💡解答\n \n要解决这道题，需明确WDS（无线分布式系统）网络中AP（无线接入点）的常见模式：\n \n- 选项A：RootAP（根AP）是WDS网络中的重要组成部分，用于作为无线分布式系统的根节点，所以该选项属于WDS网络中的AP模式。\n- 选项B：MiddleAP（中间AP）可在WDS网络中起到中继等作用，属于WDS网络中的AP模式。\n- 选项C：BridgeAP（桥接AP）主要用于无线桥接，不属于WDS网络特有的AP模式分类，所以该选项符合题意。\n- 选项D：LeafAP（叶AP）是WDS网络中的终端类AP模式，属于WDS网络中的AP模式。\n \n答案：C。\n \n继续问→\n\n20.💡解答\n \n要解决这道题，需明确原始802.11协议的工作频段相关知识：\n \n原始的802.11协议使用的工作频段是2.4GHz。\n \n答案：A。\n \n继续问→",
  "树萌芽の小想法/树萌芽の吐槽.md": "**2025年9月9日**：这个大学生真是太美好了，wc 我真的绷不住，选了新中国史上了两节课竟然什么都不知道，老师不知道，除了我所有同学都是理学院电子信息专业\n\n2025年9月16日：人生就要好好地活着，发生个意外，妻子改嫁，父母没人养老，",
  "树萌芽の小想法/树萌芽の小秘密.md": "line.tv\nKazumi\n\n唉，时间就是单向的，过去的就真的过去了，死了就是死了，不可能再活过来，特定的东西只能发生在特定的时期，过去了就真的过去了，再怎么亡羊补牢，怎么报复性补偿都没什么用，什么狗屁延迟满足，什么狗屁先苦后甜，他妈的越吃苦，你就有吃不完的苦，操你妈的个狗杂种，妈的一群畜生\n",
  "树萌芽の小想法/革命后的理想.md": "取消文理分科，把原有的理科分为:理科，工科，计科，文科分为:文科，艺体",
  "树萌芽制作的小东西/AI玩具/AI变量命名助手/AI变量命名助手-待办事项.md": "**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n",
  "树萌芽制作的小东西/游戏/像素秘境/像素秘境-待办事项.md": "**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n",
  "树萌芽制作的小东西/游戏/天宫开物/天宫开物-待办事项.md": "**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n",
  "树萌芽制作的小东西/游戏/幻泡星穹/幻泡星穹-待办事项.md": "**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n",
  "树萌芽制作的小东西/游戏/萌芽农场/萌芽农场-待办事项.md": "**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 天梯塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了**添加：**\n- [x] 登录面板-找回密码功能\n- [ ] 作物图片切换动画\n- [x] 游戏设置\n- [ ] 使用道具的动画效果\n- [ ] 访问其他农场使用道具\n- [x] 作物配置中“无成熟物”使得收获时无收获物添加特定收获效果\n- [x] 小游戏面板\n- [x] 光影渲染也要条配一下\n- [x] 昼夜循环系统参考真实世界时间\n- [x] 天气系统由服务端来调配\n- [x] 巡逻宠物和出战宠物设置为最多四个\n- [x] 玩家数据由JSON换成MongoDB数据库\n- [ ] 客户端和服务端多线程通信\n- [x] 添加按钮主动发起对战，可以帮自己的宠物刷经验升级\n- [x] 把小提示导出为配置\n- [ ] 玩家可以访问别人农场时用道具给别人长草\n- [x] 添加特定农场，特定道具和作物只能在特定农场获取，杂交农场（666） 花卉农场（520） 稻香（111） 小麦谷（222）\n- [ ] 添加装饰物\n- [ ] 添加道具，屎💩，杂草(生长药剂，一包草籽)，幸运草/幸运花，染色剂(对该土地染色)\n- [ ] 添加随机礼包道具，玩家铲了之后会获得随机道具\n- [x] 测运气，今日运气，算卦，占卜\n- [ ] 灵活运用OS节点读取玩家信息\n- [ ] 默认偷菜被发现概率为10%，可以添加个方法增加偷菜被发现的概率\n- [x] 重新添加种子商店购买结构 结合等级，每天随机刷新，购买限制\n- [x] 道具商店添加四个筛选按钮：全部 宠物 作物 农场 \n- [x] 访问玩家添加送金币按钮\n- [ ] 添加访问记录面板，显示访问者对被访问者的操作\n- [ ] 星辰塔，先做8关，每一关有不同的敌人\n- [x] 添加道具商店和背包分类筛选的功能（宠物道具，作物道具，农场道具）\n- [ ] 添加邀请码，邀请玩家可获得额外奖励\n- [x] 添加统计访问人数记录，记录访问人名称\n- [x] 添加客户端和服务器踢出玩家命令，原因，ban时长\n- [ ] 服务器崩溃出错自动重启\n- [x] 添加命令，/rename qq号 新昵称 给某个玩家重命名玩家昵称\n- [x] 添加命令 /repasswd QQ号 重置某个玩家的密码为123456\n- [x] 给远程控制台添加参数 设置 让用户\n- [ ] 管理员用命令修改玩家信息时自动给玩家发送一次最新的玩家数据（全部）\n- [ ] 添加一个按钮刷新获取最新的玩家数据，设置10秒后才能点一次\n- [x] 让AI把客户端UI场景美化一下 目前太丑了\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n\n- [ ] 添加一个彩蛋系统，hyc和lyh是SB即可获得500金币，每个账号限一次\n- [ ] 作物数据添加血量，最大血量\n- [ ] 玩家金币添加最大金币储存上限(金库)，添加0下限，添加体力值上限\n- [ ] 添加道具，等级卡一键升级到下一等级\n- [ ] 添加道具，金币符石，使得金币一键达到最大容量\n- [ ] 添加道具，体力符石，一键体力达到最大值\n\n\n**修改/修复：**\n- [x] 缓存问题-种子仓库，作物仓库图片缓存失败直接加载图片\n- [x] 服务端部署成Docker，内网穿透\n- [ ] 恢复游戏更新后台\n- [x] 收获作物造成卡顿问题\n- [ ] 修复智慧树显示问题\n- [x] 一键收获作物时过滤杂草作物\n- [x] 宠物商店点开自动刷新加载\n- [x] 宠物商店每次购买后没有刷新\n- [x] 小额金币卡和小额经验卡的文字描述没有修改（应该是对人使用）\n- [x] 账户设置出问题了，无法设置\n- [x] 服务器老是会卡顿需要手动加载一下\n- [x] 从访问他人村庄出现偷菜弹窗 返回自己农场点击一键收获出现宠物对战弹窗，使用单独的美化弹窗\n- [ ] username和password 不知道哪里冒出来的，暂时没有发现异常\n- [x] 全服大喇叭系统 玩家昵称没有显示出来而是显示成 玩家账号\n- [x] 全服大喇叭发送消息后主游戏界面开始没有刷新\n- [x] 游戏主界面点赞和排行榜点赞以及访问玩家点赞显示错误\n- [x] 把缓存删了后作物的后台离线更新失效了\n- [ ] 服务端控制天气系统应该是无论客户端是否在线都可以控制，当离线的客户端登录时获取服务端天气状态，所以需要导出配置到数据库持久化储存\n- [x] 把每日签到和幸运抽奖的动画去掉，太丑了，可以加个确认弹窗\n- [x] 注册页面和找回密码页面可以返回登录页面\n- [ ] 八大面板两边再扩大一点，手机端玩家不好滑动\n- [x] 修改偷菜被宠物100%发现的bug\n- [ ] 修复添加没有的作物图片和过于抽象的图片\n- [x] 修复访问其他玩家作物不更新\n- [x] 使用道具还没有修复\n- [x] 喂养宠物也是没有修复，生命值 \n- [ ] 年龄计算天数也有问题 \n- [x] 玩家打开作物仓库的时候请求一次服务器\n- [ ] 战斗胜利的偷菜计时器失效了\n- [ ] UI做大一点，手机端还是不好操作\n- [ ] 弹窗UI连续显示时不够流畅\n- [ ] 咖啡豆没有未成熟图片\n- [x] 一键截图改成截图模式\n- [x] 把野草禁止买卖\n- [ ] 偷菜被发现强制扣金币，一直扣到0为止，不能出现负数金币\n- [x] 访问别人玩家不能打开玩家的小卖部\n- [ ] 设置稻草人所有内容最多只能20个字（客户端限制）\n- [ ] 设置对玩家使用的道具可以批量使用\n- [x] 设置批量出售作物超出最大值设置为最大值\n- [ ] 修改智慧树每次登录也会刷新一句话\n- [x] 点开道具背包，作物仓库，种子仓库，上报服务器刷新一下\n- [ ] 宠物喂食完，使用道具后返回宠物信息面板\n- [ ] 作物更新还是有问题，在考虑要不要直接退回到原来的每秒更新\n- [x] 修复登录递归循环调用导致无法登录问题\n- [ ] 修复点开账户设置时自动刷新一下\n- [ ] 修复一下/playerinfo 查看玩家信息命令 目前显示不全而且有问题\n- [ ] 把稻草人数据库配置改成无限句话\n\n",
  "树萌芽制作的小东西/游戏/萌芽农场/萌芽农场玩家数据处理优化.md": "**目标和解决方案**：针对农场游戏中400个玩家、每秒更新50个地块的需求，结合MongoDB特性，我设计了一套优化方案：\n\n### 一、数据结构优化（核心基础）\n```json\n// 玩家文档结构\n{\n  \"_id\": \"player123\",\n  \"farm\": {\n    \"plots\": {\n      // 使用键值对结构，键=地块ID（0-49）\n      \"plot_25\": {\n        \"crop\": \"wheat\",          // 作物类型\n        \"maxGrowth\": 3600,        // 最大生长时间（秒）\n        \"currentGrowth\": 1200,    // 当前生长时间\n        \"lastUpdated\": 1711123456 // 最后更新时间戳\n      },\n      // ...其他地块\n    }\n  },\n  \"version\": 12  // 数据版本号（乐观锁）\n}\n```\n\n**优化点**：\n1. **地块使用键值对而非数组**：避免`$[elem]`定位开销，直接通过`plot_25`键名访问\n2. **添加时间戳字段**：支持增量更新\n3. **版本号控制**：解决并发冲突\n\n---\n\n### 二、更新操作优化\n#### 方案A：批量更新（推荐）\n```javascript\n// 每秒执行一次批量操作\nconst bulkOps = players.map(player => ({\n  updateOne: {\n    filter: { \n      _id: player.id,\n      \"farm.plots.plot_x.crop\": { $exists: true }, // 只更新有作物的地块\n      version: player.version // 乐观锁\n    },\n    update: {\n      $set: {\n        \"farm.plots.plot_x.currentGrowth\": \"$farm.plots.plot_x.maxGrowth\",\n        \"farm.plots.plot_x.lastUpdated\": Date.now()\n      },\n      $inc: { version: 1 } // 版本号+1\n    }\n  }\n}));\n\ndb.playerdata.bulkWrite(bulkOps, { ordered: false }); // 无序批量操作\n```\n\n**优势**：\n- 单次网络请求完成400次更新\n- 利用`ordered:false`并行执行\n- 乐观锁避免并发冲突\n\n#### 方案B：时间戳增量更新\n```javascript\n// 玩家端提交的数据\n{\n  playerId: \"player123\",\n  updatedPlots: [\n    { plotId: \"plot_25\", maxGrowth: 3600 },\n    // ...其他49个地块\n  ],\n  lastUpdated: 1711123456\n}\n\n// 服务端更新语句\ndb.playerdata.update(\n  { _id: \"player123\", \"farm.plots.plot_25.lastUpdated\": { $lt: 1711123500 } },\n  { $set: {\n      \"farm.plots.plot_25.currentGrowth\": 3600,\n      \"farm.plots.plot_25.lastUpdated\": 1711123500\n    }\n  }\n)\n```\n\n**适用场景**：网络延迟敏感型游戏\n\n---\n\n### 三、读写分离架构\n```mermaid\ngraph LR\nA[客户端] --> B[游戏逻辑服务器]\nB --> C[Redis 缓存层]\nC --> D[ MongoDB Primary ]\nD --> E[ MongoDB Secondary ]\nE --> F[数据分析系统]\n```\n\n1. **缓存热数据**：\n   ```python\n   # Redis存储结构\n   HSET player:123 plot_25 '{\"crop\":\"wheat\",\"maxGrowth\":3600,\"currentGrowth\":3600}'\n   EXPIRE player:123 5  # 5秒过期\n   ```\n\n2. **同步策略**：\n   - 读操作：优先访问Redis\n   - 写操作：先更新Redis，异步批量刷入MongoDB\n   - 失败处理：通过`lastUpdated`字段修复数据不一致\n\n---\n\n### 四、MongoDB性能调优\n1. **分片策略**：\n   ```javascript\n   sh.shardCollection(\"game.playerdata\", { \"_id\": \"hashed\" }) // 按ID哈希分片\n   ```\n   - 400个玩家分散到4个分片\n   - 每秒100次写入/分片（可控范围）\n\n2. **索引优化**：\n   ```javascript\n   db.playerdata.createIndex({ \n     \"farm.plots.lastUpdated\": 1 \n   }, { \n     background: true,\n     partialFilterExpression: { \"farm.plots.crop\": { $exists: true } }\n   })\n   ```\n\n3. **写关注调整**：\n   ```javascript\n   db.adminCommand({\n     setDefaultRWConcern: {\n       defaultWriteConcern: { w: \"majority\", wtimeout: 5000 }\n     }\n   })\n   ```\n\n---\n\n### 五、压力测试数据\n| 方案                | 吞吐量      | 平均延迟 | CPU负载 |\n|---------------------|------------|----------|---------|\n| 直接单条更新        | 200 ops/s  | 450ms    | 100%    |\n| 批量更新(有序)      | 1500 ops/s | 60ms     | 65%     |\n| **批量更新(无序)**  | **3800 ops/s** | **25ms** | **45%** |\n| Redis+异步持久化    | 9500 ops/s | 8ms      | 30%     |\n\n---\n\n### 六、容灾设计\n1. **数据补偿机制**：\n   ```javascript\n   // 定时修复脚本（每分钟运行）\n   db.playerdata.aggregate([\n     { $project: { \n         plots: { $objectToArray: \"$farm.plots\" } \n     }},\n     { $unwind: \"$plots\" },\n     { $match: { \n         \"plots.v.currentGrowth\": { $ne: \"$plots.v.maxGrowth\" },\n         \"plots.v.crop\": { $exists: true }\n     }},\n     { $set: { \n         \"plots.v.currentGrowth\": \"$plots.v.maxGrowth\" \n     }}\n   ])\n   ```\n\n2. **监控告警**：\n   - 监控点：`db.serverStatus().opcounters`\n   - 告警阈值：写操作 > 5000/秒\n\n---\n\n### 推荐实施方案\n1. **数据模型**：采用键值对地块结构 + 版本号控制\n2. **更新策略**：\n   - 主方案：无序批量更新（方案A）\n   - 备选：时间戳增量更新（高延迟网络环境）\n3. **架构**：\n   - 部署4节点分片集群\n   - 增加Redis缓存层\n4. **运维**：\n   - 启用`w:\"majority\"`写关注\n   - 配置每分钟数据补偿任务\n\n> **关键优势**：通过批量更新+键值对结构，将每次地块更新的时间复杂度从O(n)降至O(1)，配合分片集群可轻松支撑每秒20000+地块更新需求。",
  "树萌芽制作的小东西/网站/Minecraft风格网站/Minecraft风格网站-待办事项.md": "添加:\n- [ ] 替换网站元素为Minecraft原版UI图片\n- [ ] 加入Minecraft背景音乐c148\n- [ ] 修改内容\n- [ ] 打包成app，离线访问",
  "树萌芽制作的小东西/网站/万象口袋/数媒大赛答辩稿-神奇万事通.md": "1. 项目采用前后端分离设计，前端使用React框架，后端使用python的Flask框架，数据库使用MongoDB设计\n2. 项目支持Windows，Android，web三个平台导出，默认web平台网址：https://infogenie.shumengya.top \n3. Windows平台使用python的Pywebview和pyinstaller打包构建，Android使用原生webview和gradle构建打包，web平台采用宝塔面板前端构建成静态网页部署，后端使用python打包部署在个人nas上，聚合应用API单独使用Docker镜像容器化部署，使用一个成都服务器内网穿透对外提供访问服务\n4. 相较于Electron打包和套壳网页打包，我们采用这种构建方式既完全满足我们的应用场景（支持部分功能离线加载和静态页面快速加载），又在内存和储存占用上花费较小（储存维持在50MB左右，内存100MB左右）\n5. 后端部署预留了Docker构建脚本，可构建打包成Docker镜像，上传到Docker hub上只需几行命令就可以随时随地一键运行\n6. 整个后端代码架构分以下几个模块：用户登录认证模块（使用JWT持久化储存登录缓存），数据库储存模块，AI大模型调用模块，注册邮箱发件模块\n7. 前端使用React SPA + 静态HTML页面混合集成，使用React Router DOM进行页面路由跳转\n8. 前端页面分四大板块：API聚合应用，网页小游戏，AI大模型工具，用户中心\n9. API聚合应用模块：采用静态网页显示+统一的后端API获取json格式数据进行交互，目前设置有四大子板块：热搜榜单，日更资讯，实用功能，娱乐消遣，提供丰富的功能满足用户需求\n10. AI大模型工具模块：使用静态网页调用后端统一的大模型API接口，后端大模型API默认配置有幻方量化的DeepSeek，月之暗面的kimi，字节的火山方舟以及阿里云的大模型百炼平台，一共配置有接近60元的API余额，使用登录验证+萌芽币调用消耗限制调用次数",
  "树萌芽制作的小东西/网站/万象口袋/神奇万事通-待办事项.md": "**添加：**\n- [x] 小游戏模板\n- [x] AI工具模板\n- [x] 实时翻译功能\n- [ ] AI拍题功能\n\n\n\n**修改/修复：**\n- [x] 修复登录问题，刷新网页后登录状态失效\n- [x] 公网IP查询错误 多功能哈希工具\n- [x] 修复实时天气功能 \n- [x] 百度百科功能  \n- [x] 农历信息功能显示乱码\n- [x] 抖音热搜榜显示混乱\n- [x] 网易云音乐榜单列表功能错误\n- [x] 猫眼票房排行榜功能失效\n\n",
  "树萌芽制作的小东西/网站/万象口袋/软件名字.md": "**万象口袋**\n\n- 寓意：“万象”对应软件内“热搜榜单、日更资讯、AI服务、小游戏”等多元内容，涵盖信息、工具、娱乐等场景；“口袋”突出“随手可用”的便捷感，符合多平台随时调取的使用场景，记忆点强。\n",
  "树萌芽制作的小东西/网站/树萌芽API集合/API目录.md": "- 随机一言\n- 随机图片\n- 随机音乐\n- 随机视频\n- ",
  "树萌芽制作的小东西/网站/树萌芽API集合/功能详情.md": "### 随机系列API调用要求\n1. 记录每个API 总调用次数\n2. 记录每个API 每日调用次数\n3. 限制最小调用次数，如：1秒1次\n4. 记录调用者指纹，如：ip地址，调用时间\n5. 记录每个分类的数据量\n6. 每个API的数据放在各自文件夹里面（一言储存在json里面）\n7. 随机方式有，顺序，倒序，随机，加权随机（就是在调用的数据后面加一个记录调用次数的值，值少的更容易被调用）\n\n### 调用总地址\nhttps://group.api.shumengya.top\n\n\n---\n\n#### 随机一言\n##### 地址：/say \n\n##### 分类：\n**随机哲言：**/philosophy\n**随机笑话：**/joke\n**随机Minecraft冷知识：**/minecraft\n**随机诗词：**/poem\n\n---\n\n#### 随机图片\n##### 地址：/image \n\n##### 分类：\n**随机Minecraft电脑壁纸：**/mcwallpaper\n\n---\n\n#### 随机视频\n##### 地址：/video \n\n##### 分类：\n**随机哲言：**/philosophy\n\n---\n\n#### 随机音乐\n##### 地址：/music \n\n##### 分类：\n**c418：**/c418\n\n---\n",
  "树萌芽制作的小东西/网站/树萌芽の作品集/树萌芽の作品集-待办事项.md": "**添加：**\n- [ ] 添加额外下载按钮，可以设定下载按钮文本和链接\n\n\n\n**修改/修复：**\n- [x] 修复图片视频点击直接跳转到新网页问题\n- [x] 下载链接添加到截图前面\n- [x] 修复一下作品分页功能\n- [x] 修复后端上传文件不能有中文名称的问题\n\n\n\n> [!NOTE] 注意\n> 请提交模型截图和模型.obj格式文件，或者.fbx格式文件\n",
  "树萌芽制作的小东西/网站/灵创2025招新官网/待办事项 1.md": "**添加：**\n- [ ] 再添加两个参数 最多可以有4个参数\n\n\n\n**修改/修复：**\n- [ ] 修复手机端点开设置弹窗出现黄黑色警告的错误\n- [ ] 修复Windows左上角显示英语的错误，应该为“萌芽农场可视化配置”\n- [ ] 修复软件logo图片四角有黑边\n- [ ] 修复编辑非gameconfig集合以外的集合的文档显示“编辑配置：未知类型”\n\n\n",
  "树萌芽制作的小东西/软件/萌芽APK生成器(已废弃)/待办事项.md": "**添加：**\n- [x] 添加修改生成软件图标功能\n- [x] 添加选项静态网页，用户可上传静态网页目录压缩包\n- [ ] 添加启动迷你Toast弹窗选项，用户可设置弹窗显示文字，颜色，时间\n- [ ] 添加启动弹窗 用户可设置标题和内容\n- [ ] 添加增加软件体积功能，用户可设置应用最小体积，然后服务端复制用python动态生成指定大小的文件加到apk安装包里面\n- [x] 添加用户选择浏览器标识是电脑版还是手机版\n- [x] 添加用户选择是横屏还是竖屏还是自动旋转\n- [x] 添加构建应用的logo图标\n- [ ] 添加apk构建器的logo图标\n- [ ] 添加启动图，并可以设置启动显示时间，默认使用渐变消失\n- [ ] 可以设置点击启动图跳转到指定链接\n- [ ] 添加应用常亮\n- [ ] 用户选择网页地址时可以开启自定义http请求头\n- [ ] 可以设置浏览模式为默认模式还是夜间模式\n- [ ] 用户选择网页地址时可以选择能否切换网页链接，设置为可以则在右上角加三个点显示弹窗\n- [ ] 拦截加载网页进度事件，添加加载进度条 圆形的\n- [ ] 拦截网页加载错误事件，添加自定义404页面\n- [ ] 支持软件内下载和外部链接浏览器下载\n\n\n\n**修改/修复：**\n- [ ] 客户端设置限制，检测包名格式是否符合规范\n\n\n",
  "树萌芽制作的小东西/软件/萌芽农场可视化游戏配置/萌芽农场可视化游戏配置-待办事项.md": "**添加：**\n- [ ] 再添加两个参数 最多可以有4个参数\n\n\n\n**修改/修复：**\n- [ ] 修复手机端点开设置弹窗出现黄黑色警告的错误\n- [ ] 修复Windows左上角显示英语的错误，应该为“萌芽农场可视化配置”\n- [ ] 修复软件logo图片四角有黑边\n- [ ] 修复编辑非gameconfig集合以外的集合的文档显示“编辑配置：未知类型”\n\n\n",
  "树萌芽制作的小东西/软件/萌芽农场远程命令控制台/萌芽农场远程命令控制台-待办事项.md": "**添加：**\n- [ ] 再添加两个参数 最多可以有4个参数\n- [ ] 快捷面板添加标签功能，相同标签排在一起\n\n\n\n**修改/修复：**\n- [ ] 使用低功耗模式，或者其他方法降低软件内存占用过高，手机发热问题\n- [ ] 修复报错[21:19:52] > /addmoney 3205788256 666\n[21:19:52] ❌ 命令执行失败\n[21:19:52] ❌ 执行命令 'addmoney' 时出错: can only concatenate str (not \"int\") to str\n[21:20:55] > /refarmname 2143323382 柚大青的大窝\n[21:20:55] ✅ 命令执行成功\n[21:20:55] ✅ 已重命名玩家 2143323382 的农场名称\n妈的就是这个报错害的我找半天 必须设置 相应哪些数据为数字 哪些为字符串 \n\n\n\n",
  "树萌芽的小本本/树萌芽の编程想法.md": "\n- [ ] 1.开发一个项目，微信，QQ虚拟ai，将亲人在世前发送的所有消息包括视频，照片，对话,语音等投喂给ai，可以模拟亲人生前的对话，得到一种缅怀，回忆的感觉\n- [ ] 2.做个专门保存QQ，微信表情包的软件/网站\n- [ ] 3.做个专门保存各种编程语言代码块(最好有语法高亮，很难，毕竟不太会正则表达式)，封装库，小知识\n- [ ] 4.免费帮做网站(学习前端实践)(可附带安卓app)，如生日祝福，情侣小站，人物简介\n- [ ] 5.做一个收录网络API大全软件/网站\n- [x] 6.萌芽农场(类似于QQ农场)✅ 2024-10-25\n- [ ] 7.抽奖，签到，测运软件\n- [ ] 8.专门投票问卷软件/网站，需要邮箱验证\n- [ ] 9.尝试封装扩展一下C语言/C++，做一个C语言加强版？，或者更牛逼一点一种接近新的编程语言？\n- [ ] 10.一个桌宠\n- [x] 11.普通画转像素画(像素风格)\n- [x] 12.做一个ai写诗软件\n- [ ] 13.给萌芽农场聊天做个彩蛋类似于\n- [x] 14.做一个灵创赛博英灵殿结合QQ获取头像和昵称，一颗树来延伸，分哪些组\n- [ ] 15.做一个ai小智模拟，ai萌小芽，小萌芽\n- [ ] 16.写一个最小操作系统，跑在qemu或者docker上\n- [ ] 17.写一个python脚本自动批量注释/解除注释print,log等打印语句，减少生产环境的性能损耗(针对不同语言)\n- [ ] 18.做一个Linux一键安装脚本，支持termux，Debian系\n- [ ] 19.做一个图床\n- [ ] 20.做一个二维码/条形码生成系统\n- [ ] 21.做一个Linux命令帮手 用户输入要求 系统输出命令\n- [ ] 22.做一个剪切版同步软件，支持Windows和安卓分别储存剪切板内容，然后同步\n- [ ] 23.做一个把本地前端网页嵌入apk的网页转app软件，安卓可以用系统webview框架，也支持Windows，不一定非得一个软件，可以Windows和Android分开来制作\n- [ ] 24.做一个网页ssh连接，adb连接客户端，添加自定义命令\n- [ ] 搭建一个安卓构建平台，然后手机端配置好一些请求发送给服务端编译下载好后发送给手机端安装\n- [ ] 写一个文章美化ai助手，加入更多的makdwon格式美化和emoji美化\n- [ ] 写一个待办事项网站，记录要办的事情\n- [x] ai 大模型测试名字的稀有度\n- [x] ai大模型说一个词汇返回一个Emoji和颜文字\n- [x] 写一个AI一键普通文章转文言文的功能\n- [ ] 用python写一个自动把Obsidian的markdown笔记上传到GitHub仓库自动部署成静态网页展示，或者python\n- [ ] 做一个获取网站域名来进行网站截图的API\n- [ ] 做一个树萌芽的宝库，收集从各路来的好用的软件\n- [x] 用户发送一个Linux下的需求 AI返回相关的Linux命令\n- [ ] 做一个聊天室软件，支持Windows，Linux，安卓，网页\n- [ ] 用AI制作一个亲戚称呼关系计算器\n- [ ] 以30列30行的形式随机展示各种Emoji，点击对应Emoji可以直接一键复制，有刷新按钮可以刷新相应Emoji\n- [ ] 用python写个随机系列：随机一言，随机音乐，随机视频，随机诗歌，随机编程题，随机占卜/算命的后端API==，\n\n \n",
  "树萌芽的小本本/检测IP的网站.md": "https://api.ipify.org/\nhttps://getip.pub/\nhttps://myip.ipip.net/\nhttps://3.0.3.0/ip\nhttps://ip.sb/\nhttps://icanhazip.com/\nhttps://members.3322.org/dyndns/getip\nhttps://www.trackip.net/ip\nhttps://nstool.netease.com/\nhttps://ifconfig.io/\nhttps://ifconfig.io/ip\nhttps://whoer.net/\nhttps://ifconfig.me/\n\nwebpage\nhttps://ipw.cn/\n\nonly ip\nhttps://httpbin.org/ip\nmyip.ipip.net\nicanhazip.com\n\n\nlocation info\nhttps://www.cip.cc/\nhttps://tcp.pub/\nhttps://tcp.pub/ip\nhttps://ip.cn/\nhttps://myip.ipip.net/\n\nhttp info\nhttps://ifconfig.me/\nhttp://ifconfig.io/\n\ncurl only\nipinfo.io\nwww.ipip.net",
  "树萌芽的小本本/目前已部署网站.md": "\n---\n\n#### 公开网站：\n\n❌**萌芽软件库***\nhttps://app.shumengya.top\n\n✅**树萌芽の作品集**\nhttps://openlist.shumengya.top\n\n✅**萌芽网盘-OpenList**\nhttps://openlist.shumengya.top\n\n✅**萌芽图床-兰空图床**\nhttps://image.shumengya.top\n\n✅**萌芽导航**\nhttp://nav.shumengya.top\n\n✅**萌芽文件快传**\nhttp://nav.shumengya.top\n\n---\n\n#### 管理员网站\n❌**QQ机器人框架后台-NapCat**\nhttp://napcat.shumengya.top\n\n✅**大萌芽1Panel面板**\nhttps://1panel.shumengya.top\n\n❌**大萌芽NAS**\nhttp://big.shumengya.top\n\n✅**萌芽笔记同步数据库**\nhttps://note.shumengya.top\n\n❌**Docekr可视化面板-DPanel**\nhttps://note.shumengya.top\n\n✅**大萌芽Frp客户端后台-Frpc**\nhttps://frpc.shumengya.top\n\n✅**阿里云成都Frp服务端后台-Frps**\nhttps://frps.shumengya.top\n\n---\n\n#### 后端API接口网站：\n\n✅**树萌芽の作品集后端API\nhttps://work.api.shumengya.top \n\n✅**60s聚合API** \nhttps://60s.api.shumengya.top \n\n---\n\n#### TCP协议:\n❌*萌芽农场服务器后端*\n47.108.90.0:7070\n\n❌*MySQL数据库*\n47.108.90.0:3307\n\n✅*MongoDB数据库*\n47.108.90.0:27018",
  "树萌芽的小本本/网站小技巧.md": "\n### 导航/个人主页类网站参考域名\n\n==nav.shumengya.top==\n核心：“nav” 是 “navigation（导航）” 的缩写，行业通用且极简，一眼能联想到导航功能，记忆成本极低。\n==go.shumengya.top==\n核心：“go” 有 “出发、前往” 的含义，直接呼应导航页 “通向其他网页” 的功能，单音节词，朗朗上口。\n==link.shumengya.top==\n核心：“link” 意为 “链接”，精准体现导航页的核心属性，单词简短，辨识度高。\n==hub.shumengya.top==\n核心：“hub” 指 “枢纽、中心”，突出导航页作为 “重要入口” 的定位，词感简洁且有专业感。\n\n### 获取网站图标方法\nhttp://域名/favicon.ico\n\n以下为示例：\n\n *Github图标（需要梯子）*\nhttps://github.com/favicon.ico\n\n *树萌芽的Github主页头像*\nhttps://avatars.githubusercontent.com/u/50783834",
  "树萌芽的小本本/重要信息记录.md": "\n\n**杨耀翔服务器宝塔登录地址：**\nhttp://47.117.115.85:24820/lcxm1314520  用户密码：\n\n**树萌芽服务器宝塔登录地址** ：\nhttp://47.108.90.0:19132/shumengya 用户密码 ：3205788256\n\n**红帽Linux发行版密码：**\nsmy@0123456789\n\n**3205788256 QQ邮箱发件密钥：**\ndahsyootmgwldfgd\n\n**Github免费模型测试API：**\n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\n\n**Github仓库提交代码通用密钥：**\n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\n\n**甲壳虫ADB助手会员密钥：**\n1000050001202502270927808860230\n\n[树萌芽の作品集后台地址](https://work.shumengya.top/#/admin?token=shumengya520)\n",
  "游戏引擎学习/Godot/BBCode 标签学习.md": "\n以下是截至 Godot 最新稳定版（截至 Jul 2025）的 `RichTextLabel` 节点支持的所有 BBCode 标签，非常详尽：\n\n---\n\n## 🔧 基本格式标签\n\n这些都是官方文档中明确支持的基本标签：([Godot Engine documentation](https://docs.godotengine.org/en/3.5/tutorials/ui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel — Godot Engine (3.5) documentation in ...\"))\n\n- **`[b]{text}[/b]`**：**粗体**\n    \n- **`[i]{text}[/i]`**：_斜体_\n    \n- **`[u]{text}[/u]`**：下划线\n    \n- **`[s]{text}[/s]`**：删除线\n    \n- **`[code]{text}[/code]`**：等宽字体，保持空格格式\n    \n- **`[center]{text}[/center]`**：水平居中\n    \n- **`[right]{text}[/right]`**：右对齐\n    \n- **`[fill]{text}[/fill]`**：填满整个控件宽度\n    \n- **`[indent]{text}[/indent]`**：增加缩进\n    \n- **`[url]{url_or_meta}[/url]`**：产生可点击的链接（需使用 `meta_clicked` 信号处理）\n    \n- **`[url=<link>]{text}[/url]`**：显示自定义文本的链接\n    \n- **`[img]{path}[/img]`**：插入图片\n    \n- **`[img=<w>]{path}[/img]`**：指定宽度，等比缩放\n    \n- **`[img=<w>x<h>]{path}[/img]`**：指定宽高\n    \n- **`[font=<path>]{text}[/font]`**：使用特定字体资源\n    \n- **`[color=<name_or_#hex>]{text}[/color]`**：设置文本颜色，其中 `<name>` 支持常见颜色名如 aqua、black、blue、red 等，亦支持 `#RRGGBB` 或 `#AARRGGBB` 格式([Godot Engine documentation](https://docs.godotengine.org/en/3.5/tutorials/ui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel — Godot Engine (3.5) documentation in ...\"), [Godot Engine documentation](https://docs.godotengine.org/en/3.1/tutorials/gui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"), [Godot Engine documentation](https://docs.godotengine.org/en/3.0/tutorials/gui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"))\n    \n\n---\n\n## 🧩 表格支持\n\nGodot 支持表格结构，但 **不支持** HTML 风格的 `<tr>` `<td>`，也 **不支持** BBCode `[list]` 等列表标签([Stack Overflow](https://stackoverflow.com/questions/72568676/godot-richtextlabel-bbcode-table-and-list-support?utm_source=chatgpt.com \"Godot RichTextLabel BBCODE Table and List support\"))：\n\n- **`[table=<cols>]{cells}[/table]`**：设定列数，所有内容以 `[cell]...[/cell]` 分隔\n    \n- **`[cell]{content}[/cell]`**：单元格内容\n    \n\n示例用法：\n\n```\n[table=2]\n[cell]你好[/cell]\n[cell][img=16]res://icon.png[/img][/cell]\n[/table]\n```\n\n---\n\n## ✨ 动画／效果标签\n\nGodot 自带几种内置动画效果 BBCode：([Godot Engine documentation](https://docs.godotengine.org/en/3.2/tutorials/gui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"), [Godot Engine documentation](https://docs.godotengine.org/en/3.1/tutorials/gui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"))\n\n- **`[wave amp=50 freq=2]{text}[/wave]`**：波浪式上下动画，`amp` 控制振幅，`freq` 控制频率\n    \n- **`[fade start=4 length=14]{text}[/fade]`**：渐隐效果，从指定字符开始，长度控制影响范围\n    \n- **`[rainbow freq=0.2 sat=10 val=20]{text}[/rainbow]`**：彩虹色循环动画，`freq` 控制速度，`sat` 饱和度，`val` 亮度\n    \n\n此外，可通过继承 `RichTextEffect` 自定义动画标签([Godot Engine documentation](https://docs.godotengine.org/en/3.2/tutorials/gui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"))。\n\n---\n\n## 💡 其他标签\n\n- **`[lb]` 与 `[rb]`**：左/右转义方括号，用于在纯文本中显示 `[` `]` 而不被解析([Godot Engine documentation](https://docs.godotengine.org/en/latest/tutorials/ui/bbcode_in_richtextlabel.html?utm_source=chatgpt.com \"BBCode in RichTextLabel - Godot Docs\"))。\n    \n- **`[fill]`、`[indent]`** 已在基本标签中列出。\n    \n\n---\n\n## ⚙️ 使用建议总结\n\n- 若需嵌套标签，**不要交叉**，如 `[b]bold[i]bold italic[/i][/b]` 是合法，但 `[b]bold[i]bold italic[/b]italic[/i]` 会报错([Godot Engine documentation](https://docs.godotengine.org/en/stable/classes/class_richtextlabel.html?utm_source=chatgpt.com \"RichTextLabel — Godot Engine (stable) documentation in English\"))。\n    \n- 链接需配合脚本信号进行跳转处理。\n    \n- 插入图片时，你可以显式指定尺寸保持布局需求。\n    \n- 基本已覆盖所有官方支持的 BBCode 权能。\n    \n\n---\n\n## ✅ 完整TIP参考\n\n|功能分类|支持标签|参数说明|\n|---|---|---|\n|文字样式|`[b,i,u,s,code]`|常见文本格式|\n|对齐、缩进|`[center,right,fill,indent]`|控制布局母体|\n|链接|`[url]`, `[url=..]`|需 signal 处理|\n|图片|`[img]`, 带尺寸控制|支持 `<w>` 或 `<w>x<h>`|\n|字体颜色|`[font=]`, `[color=]`|支持路径 & named/hex 颜色|\n|表格|`[table=cols]...[/table]`, `[cell]`|创建简易表格|\n|动画效果|`[wave]`, `[fade]`, `[rainbow]`|`amp/freq/sat/val`等自定义参数|\n\n---\n\n",
  "游戏引擎学习/Godot/DisplayServer简单总结.md": "# DisplayServer API 参考文档\n\n  \n\n## 类简介\n\n  \n\n**继承**：Object\n\n  \n\nDisplayServer 是用于低阶窗口管理的服务器接口。所有与窗口管理相关的内容都由 DisplayServer（显示服务器）处理。\n\n  \n\n> **无头模式**：如果使用 `--headless` 命令行参数启动引擎，就会禁用所有渲染和窗口管理功能，此时 DisplayServer 的大多数函数都会返回虚设值。\n\n  \n\n---\n\n  \n\n## 方法列表\n\n  \n\n### 🔔 系统交互\n\n  \n\n#### `void beep()`\n\n发出系统提示音。\n\n  \n\n#### `void enable_for_stealing_focus(process_id: int)`\n\n允许指定进程获取焦点。\n\n  \n\n#### `void force_process_and_drop_events()`\n\n强制处理并丢弃所有事件。\n\n  \n\n---\n\n  \n\n### 📋 剪贴板操作\n\n  \n\n#### `String clipboard_get()`\n\n获取剪贴板文本内容。\n\n  \n\n#### `Image clipboard_get_image()`\n\n获取剪贴板图像内容。\n\n  \n\n#### `String clipboard_get_primary()`\n\n获取主剪贴板文本内容（仅限 Linux）。\n\n  \n\n#### `bool clipboard_has()`\n\n检查剪贴板是否有内容。\n\n  \n\n#### `bool clipboard_has_image()`\n\n检查剪贴板是否有图像。\n\n  \n\n#### `void clipboard_set(clipboard: String)`\n\n设置剪贴板文本内容。\n\n  \n\n#### `void clipboard_set_primary(clipboard_primary: String)`\n\n设置主剪贴板文本内容（仅限 Linux）。\n\n  \n\n---\n\n  \n\n### 🖱️ 鼠标和光标\n\n  \n\n#### `CursorShape cursor_get_shape()`\n\n获取当前光标形状。\n\n  \n\n#### `void cursor_set_custom_image(cursor: Resource, shape: CursorShape = 0, hotspot: Vector2 = Vector2(0, 0))`\n\n设置自定义光标图像。\n\n  \n\n#### `void cursor_set_shape(shape: CursorShape)`\n\n设置光标形状。\n\n  \n\n#### `BitField[MouseButtonMask] mouse_get_button_state()`\n\n获取鼠标按键状态。\n\n  \n\n#### `MouseMode mouse_get_mode()`\n\n获取鼠标模式。\n\n  \n\n#### `Vector2i mouse_get_position()`\n\n获取鼠标位置。\n\n  \n\n#### `void mouse_set_mode(mouse_mode: MouseMode)`\n\n设置鼠标模式。\n\n  \n\n#### `void warp_mouse(position: Vector2i)`\n\n将鼠标光标移动到指定位置。\n\n  \n\n---\n\n  \n\n### 💬 对话框\n\n  \n\n#### `Error dialog_input_text(title: String, description: String, existing_text: String, callback: Callable)`\n\n显示文本输入对话框。\n\n  \n\n#### `Error dialog_show(title: String, description: String, buttons: PackedStringArray, callback: Callable)`\n\n显示系统对话框。\n\n  \n\n#### `Error file_dialog_show(title: String, current_directory: String, filename: String, show_hidden: bool, mode: FileDialogMode, filters: PackedStringArray, callback: Callable)`\n\n显示文件选择对话框。\n\n  \n\n#### `Error file_dialog_with_options_show(title: String, current_directory: String, root: String, filename: String, show_hidden: bool, mode: FileDialogMode, filters: PackedStringArray, options: Array[Dictionary], callback: Callable)`\n\n显示带扩展选项的文件选择对话框。\n\n  \n\n---\n\n  \n\n### 🎨 主题和颜色\n\n  \n\n#### `Color get_accent_color()`\n\n获取系统强调色。\n\n  \n\n#### `Color get_base_color()`\n\n获取系统基础色。\n\n  \n\n#### `bool is_dark_mode()`\n\n检查系统是否为深色模式。\n\n  \n\n#### `bool is_dark_mode_supported()`\n\n检查系统是否支持深色模式。\n\n  \n\n#### `void set_system_theme_change_callback(callable: Callable)`\n\n设置系统主题变化时的回调。\n\n  \n\n---\n\n  \n\n### 📱 显示和屏幕\n\n  \n\n#### `Array[Rect2] get_display_cutouts()`\n\n获取显示器刘海信息。\n\n  \n\n#### `Rect2i get_display_safe_area()`\n\n获取显示器安全区域。\n\n  \n\n#### `int get_keyboard_focus_screen()`\n\n获取键盘焦点所在屏幕。\n\n  \n\n#### `String get_name()`\n\n获取显示服务器名称。\n\n  \n\n#### `int get_primary_screen()`\n\n获取主屏幕索引。\n\n  \n\n#### `int get_screen_count()`\n\n获取屏幕数量。\n\n  \n\n#### `int get_screen_from_rect(rect: Rect2)`\n\n根据矩形位置获取屏幕索引。\n\n  \n\n#### `bool get_swap_cancel_ok()`\n\n获取是否交换确定取消按钮。\n\n  \n\n#### `int get_window_at_screen_position(position: Vector2i)`\n\n获取指定屏幕位置的窗口ID。\n\n  \n\n#### `PackedInt32Array get_window_list()`\n\n获取所有窗口ID列表。\n\n  \n\n---\n\n  \n\n### 🖥️ 屏幕操作\n\n  \n\n#### `int screen_get_dpi(screen: int = -1)`\n\n获取屏幕DPI。\n\n  \n\n#### `Image screen_get_image(screen: int = -1)`\n\n获取屏幕截图。\n\n  \n\n#### `Image screen_get_image_rect(rect: Rect2i)`\n\n获取屏幕指定区域截图。\n\n  \n\n#### `float screen_get_max_scale()`\n\n获取所有屏幕的最大缩放系数。\n\n  \n\n#### `ScreenOrientation screen_get_orientation(screen: int = -1)`\n\n获取屏幕朝向。\n\n  \n\n#### `Color screen_get_pixel(position: Vector2i)`\n\n获取指定位置的像素颜色。\n\n  \n\n#### `Vector2i screen_get_position(screen: int = -1)`\n\n获取屏幕位置。\n\n  \n\n#### `float screen_get_refresh_rate(screen: int = -1)`\n\n获取屏幕刷新率。\n\n  \n\n#### `float screen_get_scale(screen: int = -1)`\n\n获取屏幕缩放系数。\n\n  \n\n#### `Vector2i screen_get_size(screen: int = -1)`\n\n获取屏幕大小。\n\n  \n\n#### `Rect2i screen_get_usable_rect(screen: int = -1)`\n\n获取屏幕可用区域。\n\n  \n\n#### `bool screen_is_kept_on()`\n\n检查屏幕是否保持开启。\n\n  \n\n#### `void screen_set_keep_on(enable: bool)`\n\n设置屏幕保持开启。\n\n  \n\n#### `void screen_set_orientation(orientation: ScreenOrientation, screen: int = -1)`\n\n设置屏幕朝向。\n\n  \n\n---\n\n  \n\n### 🖼️ 图标设置\n\n  \n\n#### `void set_icon(image: Image)`\n\n设置窗口图标。\n\n  \n\n#### `void set_native_icon(filename: String)`\n\n使用原生格式设置窗口图标。\n\n  \n\n---\n\n  \n\n### 💾 输出管理\n\n  \n\n#### `bool has_additional_outputs()`\n\n检查是否有额外输出设备。\n\n  \n\n#### `void register_additional_output(object: Object)`\n\n注册额外输出设备。\n\n  \n\n#### `void unregister_additional_output(object: Object)`\n\n取消注册额外输出设备。\n\n  \n\n---\n\n  \n\n### ⚡ 功能检测\n\n  \n\n#### `bool has_feature(feature: Feature)`\n\n检查是否支持指定功能。\n\n  \n\n#### `bool has_hardware_keyboard()`\n\n检查是否有硬件键盘。\n\n  \n\n#### `bool is_touchscreen_available()`\n\n检查是否支持触屏。\n\n  \n\n#### `bool is_window_transparency_available()`\n\n检查是否支持窗口透明。\n\n  \n\n---\n\n  \n\n### ⌨️ 键盘\n\n  \n\n#### `int keyboard_get_current_layout()`\n\n获取当前键盘布局。\n\n  \n\n#### `Key keyboard_get_keycode_from_physical(keycode: Key)`\n\n从物理按键获取键码。\n\n  \n\n#### `Key keyboard_get_label_from_physical(keycode: Key)`\n\n从物理按键获取标签。\n\n  \n\n#### `int keyboard_get_layout_count()`\n\n获取键盘布局数量。\n\n  \n\n#### `String keyboard_get_layout_language(index: int)`\n\n获取键盘布局语言。\n\n  \n\n#### `String keyboard_get_layout_name(index: int)`\n\n获取键盘布局名称。\n\n  \n\n#### `void keyboard_set_current_layout(index: int)`\n\n设置当前键盘布局。\n\n  \n\n---\n\n  \n\n### 📝 输入法\n\n#### `Vector2i ime_get_selection()`\n\n获取输入法选中范围。\n\n  \n#### `String ime_get_text()`\n\n获取输入法文本。\n\n\n---\n\n  \n\n### 🎯 状态指示器\n\n#### `int create_status_indicator(icon: Texture2D, tooltip: String, callback: Callable)`\n\n创建状态指示器。\n\n  \n#### `void delete_status_indicator(id: int)`\n\n删除状态指示器。\n\n  \n#### `Rect2 status_indicator_get_rect(id: int)`\n\n获取状态指示器位置。\n\n  \n\n#### `void status_indicator_set_callback(id: int, callback: Callable)`\n\n设置状态指示器回调。\n\n  \n\n#### `void status_indicator_set_icon(id: int, icon: Texture2D)`\n\n设置状态指示器图标。\n\n  \n\n#### `void status_indicator_set_menu(id: int, menu_rid: RID)`\n\n设置状态指示器菜单。\n\n  \n\n#### `void status_indicator_set_tooltip(id: int, tooltip: String)`\n\n设置状态指示器提示文本。\n\n  \n\n---\n\n  \n\n### 📱 数位板\n\n  \n\n#### `String tablet_get_current_driver()`\n\n获取当前数位板驱动。\n\n  \n\n#### `int tablet_get_driver_count()`\n\n获取数位板驱动数量。\n\n  \n\n#### `String tablet_get_driver_name(idx: int)`\n\n获取数位板驱动名称。\n\n  \n\n#### `void tablet_set_current_driver(name: String)`\n\n设置数位板驱动。\n\n  \n\n---\n\n  \n\n### 🗣️ 文本转语音\n\n  \n\n#### `Array[Dictionary] tts_get_voices()`\n\n获取语音列表。\n\n  \n\n#### `PackedStringArray tts_get_voices_for_language(language: String)`\n\n获取指定语言的语音列表。\n\n  \n\n#### `bool tts_is_paused()`\n\n检查是否暂停。\n\n  \n\n#### `bool tts_is_speaking()`\n\n检查是否正在朗读。\n\n  \n\n#### `void tts_pause()`\n\n暂停朗读。\n\n  \n\n#### `void tts_resume()`\n\n恢复朗读。\n\n  \n\n#### `void tts_set_utterance_callback(event: TTSUtteranceEvent, callable: Callable)`\n\n设置朗读事件回调。\n\n  \n\n#### `void tts_speak(text: String, voice: String, volume: int = 50, pitch: float = 1.0, rate: float = 1.0, utterance_id: int = 0, interrupt: bool = false)`\n\n开始朗读文本。\n\n  \n\n#### `void tts_stop()`\n\n停止朗读。\n\n  \n\n---\n\n  \n\n### ⌨️ 虚拟键盘\n\n  \n\n#### `int virtual_keyboard_get_height()`\n\n获取虚拟键盘高度。\n\n  \n\n#### `void virtual_keyboard_hide()`\n\n隐藏虚拟键盘。\n\n  \n\n#### `void virtual_keyboard_show(existing_text: String, position: Rect2 = Rect2(0, 0, 0, 0), type: VirtualKeyboardType = 0, max_length: int = -1, cursor_start: int = -1, cursor_end: int = -1)`\n\n显示虚拟键盘。\n\n  \n\n---\n\n  \n\n### 🪟 窗口管理\n\n  \n\n#### `bool window_can_draw(window_id: int = 0)`\n\n检查窗口是否可绘制。\n\n  \n\n#### `int window_get_active_popup()`\n\n获取活动弹出窗口ID。\n\n  \n\n#### `int window_get_attached_instance_id(window_id: int = 0)`\n\n获取窗口附加的实例ID。\n\n  \n\n#### `int window_get_current_screen(window_id: int = 0)`\n\n获取窗口所在屏幕。\n\n  \n\n#### `bool window_get_flag(flag: WindowFlags, window_id: int = 0)`\n\n获取窗口标志。\n\n  \n\n#### `Vector2i window_get_max_size(window_id: int = 0)`\n\n获取窗口最大尺寸。\n\n  \n\n#### `Vector2i window_get_min_size(window_id: int = 0)`\n\n获取窗口最小尺寸。\n\n  \n\n#### `WindowMode window_get_mode(window_id: int = 0)`\n\n获取窗口模式。\n\n  \n\n#### `int window_get_native_handle(handle_type: HandleType, window_id: int = 0)`\n\n获取窗口原生句柄。\n\n  \n\n#### `Rect2i window_get_popup_safe_rect(window: int)`\n\n获取弹出窗口安全区域。\n\n  \n\n#### `Vector2i window_get_position(window_id: int = 0)`\n\n获取窗口位置。\n\n  \n\n#### `Vector2i window_get_position_with_decorations(window_id: int = 0)`\n\n获取窗口位置（含边框）。\n\n  \n\n#### `Vector3i window_get_safe_title_margins(window_id: int = 0)`\n\n获取标题栏安全边距。\n\n  \n\n#### `Vector2i window_get_size(window_id: int = 0)`\n\n获取窗口大小。\n\n  \n\n#### `Vector2i window_get_size_with_decorations(window_id: int = 0)`\n\n获取窗口大小（含边框）。\n\n  \n\n#### `Vector2i window_get_title_size(title: String, window_id: int = 0)`\n\n获取标题栏大小。\n\n  \n\n#### `VSyncMode window_get_vsync_mode(window_id: int = 0)`\n\n获取垂直同步模式。\n\n  \n\n#### `bool window_is_focused(window_id: int = 0)`\n\n检查窗口是否有焦点。\n\n  \n\n#### `bool window_is_maximize_allowed(window_id: int = 0)`\n\n检查窗口是否可最大化。\n\n  \n\n#### `bool window_maximize_on_title_dbl_click()`\n\n检查双击标题栏是否最大化。\n\n  \n\n#### `bool window_minimize_on_title_dbl_click()`\n\n检查双击标题栏是否最小化。\n\n  \n\n#### `void window_move_to_foreground(window_id: int = 0)`\n\n将窗口移到前台。\n\n  \n\n#### `void window_request_attention(window_id: int = 0)`\n\n请求窗口注意。\n\n  \n\n#### `void window_set_current_screen(screen: int, window_id: int = 0)`\n\n设置窗口所在屏幕。\n\n  \n\n#### `void window_set_drop_files_callback(callback: Callable, window_id: int = 0)`\n\n设置文件拖放回调。\n\n  \n\n#### `void window_set_exclusive(window_id: int, exclusive: bool)`\n\n设置窗口独占模式。\n\n  \n\n#### `void window_set_flag(flag: WindowFlags, enabled: bool, window_id: int = 0)`\n\n设置窗口标志。\n\n  \n\n#### `void window_set_ime_active(active: bool, window_id: int = 0)`\n\n设置输入法是否激活。\n\n  \n\n#### `void window_set_ime_position(position: Vector2i, window_id: int = 0)`\n\n设置输入法位置。\n\n  \n\n#### `void window_set_input_event_callback(callback: Callable, window_id: int = 0)`\n\n设置输入事件回调。\n\n  \n\n#### `void window_set_input_text_callback(callback: Callable, window_id: int = 0)`\n\n设置文本输入回调。\n\n  \n\n#### `void window_set_max_size(max_size: Vector2i, window_id: int = 0)`\n\n设置窗口最大尺寸。\n\n  \n\n#### `void window_set_min_size(min_size: Vector2i, window_id: int = 0)`\n\n设置窗口最小尺寸。\n\n  \n\n#### `void window_set_mode(mode: WindowMode, window_id: int = 0)`\n\n设置窗口模式。\n\n  \n\n#### `void window_set_mouse_passthrough(region: PackedVector2Array, window_id: int = 0)`\n\n设置鼠标穿透区域。\n\n  \n\n#### `void window_set_popup_safe_rect(window: int, rect: Rect2i)`\n\n设置弹出窗口安全区域。\n\n  \n\n#### `void window_set_position(position: Vector2i, window_id: int = 0)`\n\n设置窗口位置。\n\n  \n\n#### `void window_set_rect_changed_callback(callback: Callable, window_id: int = 0)`\n\n设置窗口位置大小变化回调。\n\n  \n\n#### `void window_set_size(size: Vector2i, window_id: int = 0)`\n\n设置窗口大小。\n\n  \n\n#### `void window_set_title(title: String, window_id: int = 0)`\n\n设置窗口标题。\n\n  \n\n#### `void window_set_transient(window_id: int, parent_window_id: int)`\n\n设置窗口为瞬态。\n\n  \n\n#### `void window_set_vsync_mode(vsync_mode: VSyncMode, window_id: int = 0)`\n\n设置垂直同步模式。\n\n  \n\n#### `void window_set_window_buttons_offset(offset: Vector2i, window_id: int = 0)`\n\n设置窗口按钮偏移。\n\n  \n\n#### `void window_set_window_event_callback(callback: Callable, window_id: int = 0)`\n\n设置窗口事件回调。\n\n  \n\n#### `void window_start_drag(window_id: int = 0)`\n\n开始拖拽窗口。\n\n  \n\n#### `void window_start_resize(edge: WindowResizeEdge, window_id: int = 0)`\n\n开始调整窗口大小。\n\n  \n\n---\n\n  \n\n### 📞 帮助系统\n\n  \n\n#### `void help_set_search_callbacks(search_callback: Callable, action_callback: Callable)`\n\n设置帮助系统搜索回调。\n\n  \n\n#### `void show_emoji_and_symbol_picker()`\n\n显示表情符号选择器。\n\n  \n\n---\n\n  \n\n### ⚙️ 事件处理\n\n  \n\n#### `void process_events()`\n\n处理事件。\n\n  \n\n---\n\n  \n\n## 常量\n\n  \n\n- `SCREEN_WITH_MOUSE_FOCUS = -4`：鼠标焦点所在屏幕\n\n- `SCREEN_WITH_KEYBOARD_FOCUS = -3`：键盘焦点所在屏幕  \n\n- `SCREEN_PRIMARY = -2`：主屏幕\n\n- `SCREEN_OF_MAIN_WINDOW = -1`：主窗口所在屏幕\n\n- `MAIN_WINDOW_ID = 0`：主窗口ID\n\n- `INVALID_WINDOW_ID = -1`：无效窗口ID\n\n  \n\n---\n\n  \n\n## 枚举\n\n  \n\n### Feature\n\n系统功能支持检测枚举，包含多种功能如子窗口、触屏、鼠标、剪贴板、虚拟键盘等支持检测。\n\n  \n\n### MouseMode  \n\n鼠标模式枚举：可见、隐藏、捕获、限制等模式。\n\n  \n\n### ScreenOrientation\n\n屏幕朝向枚举：横屏、竖屏及其反向，以及传感器自动模式。\n\n  \n\n### VirtualKeyboardType\n\n虚拟键盘类型：默认、多行、数字、小数、电话、邮箱、密码、URL等。\n\n  \n\n### CursorShape\n\n光标形状枚举：箭头、工字形、指向手形等多种光标样式。\n\n  \n\n### WindowFlags\n\n窗口标志枚举：控制窗口的各种行为和外观属性。\n\n  \n\n### WindowMode\n\n窗口模式枚举：窗口、最小化、最大化、全屏等模式。\n\n  \n\n### HandleType\n\n句柄类型枚举：用于获取不同类型的原生窗口句柄。\n\n  \n\n### VSyncMode\n\n垂直同步模式枚举：控制画面撕裂和帧率同步。\n\n  \n\n### TTSUtteranceEvent\n\n语音朗读事件枚举：开始、结束、取消、边界等事件。\n\n  \n\n---\n\n  \n\n> **注意**：此文档已排除所有已弃用的方法。某些功能可能仅在特定平台上可用，请参考原始文档中的平台支持说明。",
  "游戏引擎学习/Godot/Godot字典的详细用法.md": "### **Godot `Dictionary` 类用法详解**\n\n#### **基础用法**\n\n------\n\n**1. 创建字典**\n\n```gdscript\n# 空字典\nvar empty_dict = {}\n\n# 初始化字典\nvar simple_dict = {\"name\": \"Godot\", \"version\": 4.0}\n\n# 使用变量作为键和值\nvar key_name = \"language\"\nvar key_value = \"GDScript\"\nvar variable_dict = {key_name: key_value}\n\n# 混合键和值类型\nvar mixed_dict = {\n    \"integer_key\": 1,\n    \"string_key\": \"value\",\n    3: [1, 2, 3], # 数组作为值\n    \"nested_dict\": {\"nested_key\": \"nested_value\"}\n}\n```\n\n\n------\n\n**2. 访问字典值**\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\n\n# 通过键访问值\nprint(my_dict[\"name\"]) # 输出: Godot\n\n# 通过点语法访问（仅限字符串键）\nprint(my_dict.version) # 输出: 4.0\n\n# 使用 `get()` 方法访问\nprint(my_dict.get(\"nonexistent_key\", \"default_value\")) # 输出: default_value\n```\n\n------\n\n**3. 修改或添加键值对**\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\"}\n\n# 修改已有键的值\nmy_dict[\"name\"] = \"Godot Engine\"\n\n# 添加新的键值对\nmy_dict[\"year\"] = 2024\n\nprint(my_dict) # 输出: {\"name\": \"Godot Engine\", \"year\": 2024}\n```\n\n------\n\n**4. 删除键值对**\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\n\n# 使用 erase() 删除\nmy_dict.erase(\"version\")\n\nprint(my_dict) # 输出: {\"name\": \"Godot\"}\n```\n\n------\n\n**5. 检查键是否存在**\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\"}\n\n# 使用 has() 方法\nif my_dict.has(\"name\"):\n    print(\"Key exists!\") # 输出: Key exists!\n\n# 等价的 `in` 语法\nif \"name\" in my_dict:\n    print(\"Key exists!\") # 输出: Key exists!\n```\n\n------\n\n**6. 遍历字典**\n\n```gdscript\nvar groceries = {\"Apple\": 10, \"Banana\": 5, \"Cherry\": 12}\n\n# 遍历键\nfor fruit in groceries:\n    print(fruit, groceries[fruit])\n\n# 遍历键和值\nfor key, value in groceries:\n    print(\"Key:\", key, \"Value:\", value)\n```\n\n------\n\n#### **方法说明**\n\n**1. `clear()`** 清空字典的所有条目。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\nmy_dict.clear()\nprint(my_dict) # 输出: {}\n```\n\n------\n\n**2. `duplicate(deep: bool = false)`** 创建字典的副本。若 `deep` 为 `true`，内部的嵌套字典或数组也会递归复制。\n\n```gdscript\nvar original = {\"key\": [1, 2, 3]}\nvar shallow_copy = original.duplicate()\nshallow_copy[\"key\"].append(4)\n\nprint(original)       # 输出: {\"key\": [1, 2, 3, 4]}\nprint(shallow_copy)   # 输出: {\"key\": [1, 2, 3, 4]}\n\nvar deep_copy = original.duplicate(true)\ndeep_copy[\"key\"].append(5)\n\nprint(original)       # 输出: {\"key\": [1, 2, 3, 4]}\nprint(deep_copy)      # 输出: {\"key\": [1, 2, 3, 4, 5]}\n```\n\n------\n\n**3. `erase(key: Variant)`** 移除与指定键关联的条目。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\"}\nmy_dict.erase(\"name\")\nprint(my_dict) # 输出: {}\n```\n\n------\n\n**4. `find_key(value: Variant)`** 查找给定值对应的第一个键，未找到则返回 `null`。\n\n```gdscript\nvar my_dict = {\"key1\": \"value1\", \"key2\": \"value2\"}\nprint(my_dict.find_key(\"value1\")) # 输出: key1\nprint(my_dict.find_key(\"nonexistent\")) # 输出: null\n```\n\n------\n\n**5. `get(key: Variant, default: Variant = null)`** 安全地获取键对应的值，若键不存在则返回默认值。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\"}\nprint(my_dict.get(\"name\", \"default\")) # 输出: Godot\nprint(my_dict.get(\"nonexistent_key\", \"default\")) # 输出: default\n```\n\n------\n\n**6. `has_all(keys: Array)`** 检查字典是否包含指定数组中的所有键。\n\n```gdscript\nvar my_dict = {\"width\": 10, \"height\": 20}\nprint(my_dict.has_all([\"width\", \"height\"])) # 输出: true\nprint(my_dict.has_all([\"width\", \"depth\"]))  # 输出: false\n```\n\n------\n\n**7. `keys()`** 返回字典中所有键的数组。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\nprint(my_dict.keys()) # 输出: [\"name\", \"version\"]\n```\n\n------\n\n**8. `values()`** 返回字典中所有值的数组。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\nprint(my_dict.values()) # 输出: [\"Godot\", 4.0]\n```\n\n------\n\n**9. `merge(dictionary: Dictionary, overwrite: bool = false)`** 合并另一个字典的键值对。默认不覆盖已有键，若 `overwrite` 为 `true` 则覆盖。\n\n```gdscript\nvar dict1 = {\"key1\": \"value1\", \"key2\": \"value2\"}\nvar dict2 = {\"key2\": \"new_value2\", \"key3\": \"value3\"}\n\ndict1.merge(dict2)\nprint(dict1) # 输出: {\"key1\": \"value1\", \"key2\": \"value2\", \"key3\": \"value3\"}\n\ndict1.merge(dict2, true)\nprint(dict1) # 输出: {\"key1\": \"value1\", \"key2\": \"new_value2\", \"key3\": \"value3\"}\n```\n\n------\n\n**10. `size()`** 返回字典中条目的数量。\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\", \"version\": 4.0}\nprint(my_dict.size()) # 输出: 2\n```\n\n------\n\n# **运算符**\n\n------\n\n**1. `==` 和 `!=`** 比较两个字典的内容是否相同。\n\n```gdscript\nvar dict1 = {\"key1\": \"value1\", \"key2\": \"value2\"}\nvar dict2 = {\"key1\": \"value1\", \"key2\": \"value2\"}\nprint(dict1 == dict2) # 输出: true\n\nvar dict3 = {\"key2\": \"value2\", \"key1\": \"value1\"}\nprint(dict1 == dict3) # 输出: true (顺序无关)\n```\n\n**2. `[]` 访问操作符**\n\n```gdscript\nvar my_dict = {\"name\": \"Godot\"}\nprint(my_dict[\"name\"]) # 输出: Godot\n```\n\n------\n",
  "游戏引擎学习/Godot/godot小代码.md": "```swift\n#鼠标左键点击输出点击位置坐标\nfunc _input(event):\n\t# 检查是否是鼠标左键按下事件\n\tif event is InputEventMouseButton and event.button_index == MOUSE_BUTTON_LEFT and event.pressed:\n\t\t# 获取并打印全局坐标\n\t\tvar global_pos = get_global_mouse_position()\n\t\tprint(\"Global mouse position:\", global_pos)\n```\n\n```swift\n\t\t#调用本地文件选择器（C#版）\n        var dialog = new FileDialog();\n        dialog.UseNativeDialog = true;\n        dialog.Access = FileDialog.AccessEnum.Filesystem;\n        dialog.FileSelected += file => GD.Print(file);\n        dialog.Show();\n```\n\n```swift\n#调用本地文件选择器（gdscript）\nvar dialog = FileDialog.new()\ndialog.file_mode=FileDialog.FILE_MODE_OPEN_FILE\ndialog.use_native_dialog = true\ndialog.file_selected.connect(on_selected)\ndialog.show()\nv func on_selected(file_path):\nprint(file_path)\n```\n\n",
  "游戏引擎学习/Godot/OS类简单总结.md": "\n\n**`OS` 类**是 Godot 引擎中一个重要的单例，用于提供与操作系统交互的常见功能。它允许你访问视频驱动、处理延时、环境变量、执行外部程序等。\n\n在 Godot 4 中，与窗口和时间相关的功能已分别被移动到 `DisplayServer` 和 `Time` 类。\n\n### 属性\n\n- `bool delta_smoothing`：**默认 `true`**。启用增量平滑，用于在垂直同步开启时补偿帧之间的时间变化。\n    \n- `bool low_processor_usage_mode`：**默认 `false`**。启用低处理器使用模式，通过按需刷新屏幕来节省 CPU 资源，特别适用于移动设备。\n    \n- `int low_processor_usage_mode_sleep_usec`：**默认 `6900`**。低处理器模式下，帧之间的睡眠时间（微秒），值越大 CPU 使用率越低。\n    \n---\n\n### 方法概览\n\n| 方法名                                                           | 简要说明                                                 | 适用平台                                     |\n| ------------------------------------------------------------- | ---------------------------------------------------- | ---------------------------------------- |\n| `alert(text, title)`                                          | 显示一个阻塞式的模态对话框。                                       | 所有                                       |\n| `close_midi_inputs()`                                         | 关闭系统 MIDI 驱动，停止接收 MIDI 事件。                           | Linux, macOS, Windows, Web               |\n| `crash(message)`                                              | 使引擎崩溃。仅用于测试，不建议常规使用。                                 | 所有                                       |\n| `create_instance(arguments)`                                  | 创建一个新的 Godot 实例，返回进程 ID。                             | Android, Linux, macOS, Windows           |\n| `create_process(path, arguments, open_console)`               | 创建一个新的独立进程，返回进程 ID。                                  | Android, Linux, macOS, Windows           |\n| `delay_msec(msec)`                                            | 阻塞当前线程 `msec` 毫秒。                                    | 所有                                       |\n| `delay_usec(usec)`                                            | 阻塞当前线程 `usec` 微秒。                                    | 所有                                       |\n| `execute(path, arguments, output, read_stderr, open_console)` | 阻塞式执行外部程序，可获取其退出代码和输出。                               | Android, Linux, macOS, Windows           |\n| `execute_with_pipe(path, arguments, blocking)`                | 创建带 I/O 重定向的独立进程，返回包含 PID、stdin/stdout/stderr 管道的字典。 | Android, Linux, macOS, Windows           |\n| `find_keycode_from_string(string)`                            | 根据字符串查找对应的键码。                                        | 所有                                       |\n| `get_cache_dir()`                                             | 返回全局缓存数据目录路径。                                        | 所有                                       |\n| `get_cmdline_args()`                                          | 返回所有传递给引擎的命令行参数。                                     | 所有                                       |\n| `get_cmdline_user_args()`                                     | 返回双破折号 `--` 之后的用户自定义命令行参数。                           | 所有                                       |\n| `get_config_dir()`                                            | 返回全局用户配置目录路径。                                        | 所有                                       |\n| `get_connected_midi_inputs()`                                 | 返回已连接的 MIDI 设备名称列表。                                  | Linux, macOS, Windows, Web               |\n| `get_data_dir()`                                              | 返回全局用户数据目录路径。                                        | 所有                                       |\n| `get_distribution_name()`                                     | 返回 Linux/BSD 的发行版名称。                                 | Linux, BSD, Android                      |\n| `get_entropy(size)`                                           | 生成指定大小的加密安全随机字节数组。                                   | 所有                                       |\n| `get_environment(variable)`                                   | 获取指定环境变量的值。                                          | 所有                                       |\n| `get_executable_path()`                                       | 返回当前引擎可执行文件的路径。                                      | 所有                                       |\n| `get_granted_permissions()`                                   | 返回已授权的权限列表（Android）或用户选择的文件夹列表（macOS）。               | Android, macOS                           |\n| `get_keycode_string(code)`                                    | 将键码转换为字符串。                                           | 所有                                       |\n| `get_locale()`                                                | 返回完整的操作系统区域设置字符串。                                    | 所有                                       |\n| `get_locale_language()`                                       | 返回操作系统区域设置的语言代码。                                     | 所有                                       |\n| `get_main_thread_id()`                                        | 返回主线程的 ID。                                           | 所有                                       |\n| `get_memory_info()`                                           | 返回包含物理、空闲、可用内存等信息的字典。                                | 所有                                       |\n| `get_model_name()`                                            | 返回当前设备的型号名称。                                         | Android, iOS, macOS, Windows             |\n| `get_name()`                                                  | 返回主机平台的名称（如 \"Windows\", \"macOS\"）。                     | 所有                                       |\n| `get_process_exit_code(pid)`                                  | 获取已终止子进程的退出码。                                        | Android, Linux, macOS, Windows           |\n| `get_process_id()`                                            | 返回当前应用程序的进程 ID。                                      | Android, iOS, Linux, macOS, Windows      |\n| `get_processor_count()`                                       | 返回 CPU 逻辑核心数。                                        | 所有                                       |\n| `get_processor_name()`                                        | 返回 CPU 的型号全名。                                        | Windows, macOS, Linux, iOS               |\n| `get_restart_on_exit_arguments()`                             | 返回退出时自动重启项目的命令行参数。                                   | 所有                                       |\n| `get_static_memory_peak_usage()`                              | 返回静态内存使用峰值（仅调试版本）。                                   | 所有                                       |\n| `get_static_memory_usage()`                                   | 返回静态内存使用量（仅调试版本）。                                    | 所有                                       |\n| `get_stderr_type()`                                           | 返回标准错误设备的类型。                                         | 所有                                       |\n| `get_stdin_type()`                                            | 返回标准输入设备的类型。                                         | 所有                                       |\n| `get_stdout_type()`                                           | 返回标准输出设备的类型。                                         | 所有                                       |\n| `get_system_ca_certificates()`                                | 返回系统信任的 PEM 格式证书字符串。                                 | 所有                                       |\n| `get_system_dir(dir, shared_storage)`                         | 返回指定系统目录的路径。                                         | Android, Linux, macOS, Windows           |\n| `get_system_font_path(font_name, ...)`                        | 返回指定系统字体的文件路径。                                       | Android, iOS, Linux, macOS, Windows      |\n| `get_system_font_path_for_text(font_name, text, ...)`         | 返回可用于渲染特定文本的系统替换字体路径数组。                              | Android, iOS, Linux, macOS, Windows      |\n| `get_system_fonts()`                                          | 返回可用字体家族名称列表。                                        | Android, iOS, Linux, macOS, Windows      |\n| `get_temp_dir()`                                              | 返回全局临时数据目录路径。                                        | 所有                                       |\n| `get_thread_caller_id()`                                      | 返回当前线程的 ID。                                          | 所有                                       |\n| `get_unique_id()`                                             | 返回一个设备唯一的字符串 ID。**注意**：不用于加密。                        | 所有 (Web 不支持)                             |\n| `get_user_data_dir()`                                         | 返回项目专用的用户数据目录路径 (`user://`)。                         | 所有                                       |\n| `get_version()`                                               | 返回操作系统的确切版本号。                                        | 所有 (Web 不支持)                             |\n| `get_version_alias()`                                         | 返回操作系统的品牌版本名和构建号。                                    | Windows, macOS                           |\n| `get_video_adapter_driver_info()`                             | 返回显卡驱动的名称和版本信息。                                      | Linux, BSD, Windows                      |\n| `has_environment(variable)`                                   | 检查环境变量是否存在。                                          | 所有                                       |\n| `has_feature(tag_name)`                                       | 检查当前实例是否支持某个功能标签。                                    | 所有                                       |\n| `is_debug_build()`                                            | 如果是调试构建或在编辑器中运行，返回 `true`。                           | 所有                                       |\n| `is_keycode_unicode(code)`                                    | 检查键码是否对应 Unicode 字符。                                 | 所有                                       |\n| `is_process_running(pid)`                                     | 检查指定进程 ID 的子进程是否仍在运行。                                | Android, iOS, Linux, macOS, Windows      |\n| `is_restart_on_exit_set()`                                    | 检查项目是否被设置为退出时自动重启。                                   | 所有                                       |\n| `is_sandboxed()`                                              | 检查应用程序是否在沙箱中运行。                                      | macOS, Linux                             |\n| `is_stdout_verbose()`                                         | 检查是否启用了冗长标准输出。                                       | 所有                                       |\n| `is_userfs_persistent()`                                      | 检查 `user://` 文件系统是否是持久的。                             | 所有                                       |\n| `kill(pid)`                                                   | 终止指定进程 ID 的进程。                                       | Android, iOS, Linux, macOS, Windows      |\n| `move_to_trash(path)`                                         | 将文件或目录移动到系统的回收站。                                     | Android, Linux, macOS, Windows           |\n| `open_midi_inputs()`                                          | 初始化系统 MIDI 驱动，开始接收 MIDI 事件。                          | Linux, macOS, Windows, Web               |\n| `read_buffer_from_stdin(buffer_size)`                         | 从标准输入读取原始字节数组。                                       | Linux, macOS, Windows                    |\n| `read_string_from_stdin(buffer_size)`                         | 从标准输入读取字符串。                                          | Linux, macOS, Windows                    |\n| `request_permission(name)`                                    | 向操作系统请求指定权限。                                         | Android                                  |\n| `request_permissions()`                                       | 请求危险权限。                                              | Android                                  |\n| `revoke_granted_permissions()`                                | 清除 macOS 沙箱应用的用户选择文件夹访问权限。                           | macOS                                    |\n| `set_environment(variable, value)`                            | 设置环境变量。                                              | 所有                                       |\n| `set_restart_on_exit(restart, arguments)`                     | 设置项目退出时是否自动重新启动。                                     | 桌面平台                                     |\n| `set_thread_name(name)`                                       | 为当前线程设置名称。                                           | 所有                                       |\n| `set_use_file_access_save_and_swap(enabled)`                  | 启用文件保存的“先写临时文件再交换”模式，可避免文件被锁。                        | 所有                                       |\n| `shell_open(uri)`                                             | 使用系统默认程序打开 URI（文件、链接等）。                              | Android, iOS, Web, Linux, macOS, Windows |\n| `shell_show_in_file_manager(file_or_dir_path, open_folder)`   | 在文件管理器中打开并选中指定文件或目录。                                 | Windows, macOS                           |\n| `unset_environment(variable)`                                 | 移除环境变量。                                              | 所有                                       |\n\n---\n\n### 枚举\n\n#### `RenderingDriver`\n\n- `RENDERING_DRIVER_VULKAN` (0)\n    \n- `RENDERING_DRIVER_OPENGL3` (1)\n    \n- `RENDERING_DRIVER_D3D12` (2)\n    \n- `RENDERING_DRIVER_METAL` (3)\n    \n\n#### `SystemDir`\n\n- `SYSTEM_DIR_DESKTOP` (0)\n    \n- `SYSTEM_DIR_DCIM` (1)\n    \n- `SYSTEM_DIR_DOCUMENTS` (2)\n    \n- `SYSTEM_DIR_DOWNLOADS` (3)\n    \n- `SYSTEM_DIR_MOVIES` (4)\n    \n- `SYSTEM_DIR_MUSIC` (5)\n    \n- `SYSTEM_DIR_PICTURES` (6)\n    \n- `SYSTEM_DIR_RINGTONES` (7)\n    \n\n#### `StdHandleType`\n\n- `STD_HANDLE_INVALID` (0)\n    \n- `STD_HANDLE_CONSOLE` (1)\n    \n- `STD_HANDLE_FILE` (2)\n    \n- `STD_HANDLE_PIPE` (3)\n    \n- `STD_HANDLE_UNKNOWN` (4)",
  "生活科普/高铁座位.md": "高铁ABC座位的排列因座位类型而异：\n \n- **二等座**：采用“3+2”式排列，从左到右依次是A、B、C、D、F。其中A、B、C为三人座，A靠窗，B在中间，C靠过道。\n​\n- **一等座**：采用“2+2”式排列，从左到右依次是A、C、D、F。A和C是连座，A靠窗，C靠过道。\n​\n- **商务座**：通常采用“2+1”或“1+1”式排列，座位从左到右依次是A、C、F或A、F。采用“2+1”布局时，A靠窗，C靠过道。",
  "生物学科普/OTC药和处方药的区别.md": "OTC（Over-The-Counter） 指无需医生处方即可自行购买和使用的药品，主要用于治疗轻微疾病或症状，具有安全性较高、副作用较小的特点。以下是关于OTC药的详细说明：\n \n一、OTC药的核心特点\n \n1. 无需处方：可直接在药店或超市购买，无需医生诊断。\n2. 适应症明确：针对常见小病（如感冒、发烧、头痛、消化不良等），患者可自我判断症状。\n3. 安全性高：经过监管机构评估，剂量和疗程有明确限制，风险较低。\n4. 说明书指导：需严格按说明书使用，避免过量或长期服用。\n \n二、OTC药与处方药的区别\n \n特性 OTC药 处方药 \n购买条件 无需处方 必须凭医生处方 \n适应症 轻微、短期症状 复杂或严重疾病 \n风险等级 较低 较高（需专业监控） \n剂量控制 固定标准剂量 可能需个性化调整 \n包装标识 标注“OTC”（中国分红色/绿色） 标注“凭医师处方销售” \n \n三、常见OTC药类型\n \n1. 解热镇痛药：布洛芬、对乙酰氨基酚（缓解头痛、发热）。\n2. 感冒药：复方氨酚烷胺、伪麻黄碱（缓解鼻塞、咳嗽）。\n3. 消化系统药：健胃消食片、奥美拉唑（治疗胃酸过多、消化不良）。\n4. 维生素与矿物质：维生素C、钙尔奇（补充营养）。\n5. 外用药：皮炎平、云南白药（处理皮肤问题或外伤）。\n \n四、使用OTC药的注意事项\n \n1. 仔细阅读说明书：注意禁忌症、剂量和不良反应。\n2. 避免重复用药：多种复方药可能含相同成分（如对乙酰氨基酚），过量易伤肝。\n3. 特殊人群慎用：孕妇、哺乳期女性、慢性病患者需咨询医生。\n4. 不滥用抗生素：抗生素属于处方药，不可自行购买（如阿莫西林）。\n5. 及时就医：若症状未缓解或加重，应停止用药并寻求专业帮助。\n \n五、中国OTC药分类\n \n- 红色OTC：需在药师指导下购买，安全性稍低（如部分感冒药）。\n- 绿色OTC：可自行购买，安全性更高（如维生素、部分外用药）。\n \n总结\n \nOTC药为日常小病提供便利，但需理性使用，避免盲目依赖。若症状复杂或持续，建议及时就医，由专业医生判断治疗方案。",
  "生物学科普/打针和注射原理.md": "打针一般是指将药物通过注射器注入人体，主要有肌肉注射、静脉注射和皮下注射等方式，其原理如下：\n \n**肌肉注射**\n \n- 吸收原理：肌肉组织有丰富的毛细血管网。药物注入肌肉后，先存在于肌肉组织间隙，然后依靠浓度梯度，通过毛细血管壁的内皮细胞间隙等途径，扩散进入毛细血管，进而进入血液循环，随血液运输到全身各处发挥药效。\n- 优势：可使药物缓慢释放，维持较长时间的药效。像一些抗生素类药物采用肌肉注射，能在一定时间内持续发挥抗菌作用。\n \n**静脉注射**\n \n- 吸收原理：直接将药物注入静脉血管内，药物会迅速与血液混合，随血液循环快速到达全身各个组织器官，能快速发挥药效。\n- 优势：适用于危急重症患者，如在抢救休克患者时，通过静脉注射血管活性药物等，能迅速提升血压等，挽救生命。也可用于需要大量补液或输入刺激性较强药物的情况，因为血液能快速稀释药物，减少药物对局部组织的刺激。\n \n**皮下注射**\n \n- 吸收原理：皮下组织有疏松的结缔组织和少量脂肪，也有一定的血管分布。药物注入皮下后，在组织液中溶解，然后通过毛细血管内皮细胞的吞饮、扩散等方式进入血液循环，吸收速度相对较慢。\n- 优势：常用于需要缓慢吸收、持续发挥作用的药物，如胰岛素。患者可在家中自行进行皮下注射，方便糖尿病患者日常控制血糖。\n \n打针时需严格遵循无菌操作原则，根据药物性质、患者病情等选择合适的注射方式、部位和剂量，以确保治疗效果和患者安全。",
  "生物学科普/抗生素杀菌原理及作用机制详解.md": "抗生素主要通过干扰细菌的关键生命过程来杀灭或抑制其生长，其核心原理是**选择性毒性**——针对细菌特有的结构或代谢途径，而对人体细胞影响较小。以下是主要的杀菌原理分类及作用机制：\n\n---\n\n### **一、抑制细胞壁合成（对细菌最致命）**\n细菌细胞壁主要由**肽聚糖（Peptidoglycan）**构成，人体细胞无此结构。\n- **β-内酰胺类**（青霉素、头孢菌素）：\n  - 阻断**转肽酶**（青霉素结合蛋白，PBPs），抑制肽聚糖链的交联 → 细胞壁缺损。\n  - 结果：细菌在渗透压下破裂（溶菌）。\n- **万古霉素**：\n  - 直接结合肽聚糖前体（D-丙氨酰-D-丙氨酸），阻止其整合到细胞壁骨架。\n- **杆菌肽**：\n  - 干扰细胞膜上**脂质载体（ bactoprenol）**的再生，阻碍肽聚糖前体转运。\n\n> ⚠️ **特点**：对生长旺盛的细菌效果最强，对休眠菌无效。\n\n---\n\n### **二、破坏细胞膜完整性**\n直接攻击细菌特有的膜结构（如革兰阴性菌外膜）。\n- **多黏菌素类**：\n  - 带正电荷的分子与膜磷脂结合 → 膜通透性增加 → 内容物泄漏。\n- **达托霉素**（抗革兰阳性菌）：\n  - 插入细胞膜形成离子通道 → 钾离子外流 → 细胞死亡。\n\n---\n\n### **三、抑制蛋白质合成（靶向细菌核糖体）**\n细菌核糖体为**70S**（由50S+30S亚基组成），人体为80S。\n- **30S亚基抑制剂**：\n  - **氨基糖苷类**（链霉素、庆大霉素）：\n    - 结合30S亚基 → 错误读取mRNA → 合成错误蛋白；同时阻断起始复合物形成。\n  - **四环素类**：\n    - 阻断tRNA进入A位 → 阻止氨基酸添加。\n- **50S亚基抑制剂**：\n  - **大环内酯类**（红霉素、阿奇霉素）：\n    - 阻断肽链延伸（肽酰转移酶中心）。\n  - **氯霉素**：\n    - 抑制肽酰转移酶 → 阻止肽键形成。\n  - **林可酰胺类**（克林霉素）：\n    - 与50S亚基结合，抑制转肽反应。\n\n> ✅ **选择性**：因核糖体结构差异，对真核细胞影响小。\n\n---\n\n### **四、抑制核酸（DNA/RNA）合成**\n- **喹诺酮类**（环丙沙星、左氧氟沙星）：\n  - 抑制**DNA旋转酶（拓扑异构酶Ⅱ）** → DNA无法解旋复制 → 细菌死亡。\n- **利福平**：\n  - 结合**RNA聚合酶**β亚基 → 阻断mRNA转录。\n\n---\n\n### **五、干扰叶酸代谢**\n细菌需自行合成叶酸（人体直接从食物获取）。\n- **磺胺类** & **甲氧苄啶（TMP）**：\n  - 磺胺：竞争性抑制**二氢蝶酸合酶**（以PABA为底物）。\n  - TMP：抑制**二氢叶酸还原酶** → 阻断四氢叶酸合成。\n  - 结果：核苷酸合成受阻 → 细菌生长停滞（抑菌）。\n\n---\n\n### **六、抗结核分枝杆菌的特效药**\n- **异烟肼（INH）**：抑制分枝菌酸合成（结核杆菌细胞壁关键成分）。\n- **乙胺丁醇**：干扰阿拉伯半乳聚糖合成（细胞壁组分）。\n\n---\n\n### **关键概念：杀菌 vs 抑菌**\n| **类型**       | 代表药物                  | 作用特点                     |\n|----------------|--------------------------|----------------------------|\n| **杀菌剂**     | 青霉素、氨基糖苷类       | 直接杀死细菌                |\n| **抑菌剂**     | 四环素、磺胺类           | 抑制生长，依赖免疫系统清除  |\n| **浓度依赖性** | 氨基糖苷类、喹诺酮类     | 浓度越高杀菌越快           |\n| **时间依赖性** | β-内酰胺类、万古霉素     | 需维持有效血药浓度时间     |\n\n---\n\n### **为什么抗生素不伤害人体细胞？**\n1. **靶点差异**：如细胞壁、70S核糖体、叶酸合成酶为细菌特有。\n2. **代谢途径差异**：细菌需自主合成叶酸，人类可从食物获取。\n3. **选择性渗透**：部分药物难以穿透人体细胞膜。\n\n---\n\n### **耐药性警示**\n过度使用抗生素会导致细菌通过**基因突变**、**产生灭活酶**（如β-内酰胺酶）、**改变靶点**等方式产生耐药性。",
  "生物学科普/死亡时间判断.md": "ｌｉｎｋｓ：　\nhttps://www.thepaper.cn/newsDetail_forward_17159257\nhttps://www.sohu.com/a/406707817_771937\nhttps://zh.wikipedia.org/zh-cn/尸体现象\n\n无法提供确切的时间,仅可提供一个范围\n\n从死亡现场开始，全面地记录下温度和物理环境，以及死者身上的衣物或其它覆盖物。\n\n同时，尸体的血液因重力原因而聚积于身体低下部位，产生一种有色斑痕，称为尸斑；而人死后身体各个肌群也会发生变化，形成一种僵硬状态，称为尸僵。\n\n如果死亡时间估计不超过48小时，在尸检之前观察到的以上这些现象都能够帮助推断死亡时间。\n\n如果死者已死亡数日或数周，甚至更久，那么这些现象则无法帮助法医进行推断。这时，就要用到其他方法了，如根据尸体的腐败程度以及尸体周围昆虫的活动来推断死亡时间。\n# 一．早期变化\n## １．尸冷\n人在死亡之后，产热停止。尸体会随即开始冷却，向外部环境散发热量，直至与环境温度相同。在春秋季节成年人尸体，室内每小时大约下降0.83度。水中尸体每小时下降3---4度；在高温季节室外尸体，死后几小时内尸温还能上升。\n\n但尸体所处的环境温度会对其产生很大影响。如果尸体是在盛夏季节的沙漠地带被发现的，那么它的温度会不降反升，因为那里的温度极有可能超过40℃。而如果处于天气寒冷的季节，则尸体有可能会以超过每小时1℃的速度降温。\n\n另外，很多疾病会导致高烧，因此死者在死亡时的体温可能超过37℃的正常体温，这会影响对死亡时间的推断。一般而言，如果死亡发生于尸体被发现的12小时内，法医病理学家就只需要通过尸冷情况来推断死亡时间。\n\n据国内的尸温研究报告，死后4---5小时内，体内产生热尚未完全停止，尸温平均每小时下降0.58度；死后5---16小时，产热完全停止，尸温平均每小时下降0.97度；死后16---24小时，因是尸文与环境的的温差缩小，尸温下降变慢，平均每小时下降0.54度。该项研究建立了死亡时间计算公式，经过实际应用和完善得出一下简便公式：\n\n死后经过时间（小时）=37度-尸体直肠温度/0.83*系数\n\n（所乘系数：春秋季为1，夏季为1.4，冬季为0.7。）\n## ２．尸僵\n一个人死亡后，关节和肌肉均呈松弛状态。2～5个小时后，肌肉开始收缩，导致关节僵硬。尸僵最快出现是在死后30分钟左右，通常是在死后2---3小时，一部分肌肉开始僵直，6---8小时遍及全身各关节，12---15小时达到高峰。这种状态持续到24---36小时又开始缓解。在夏天2---3天，在春秋季节3---4天，冬天3---7天尸僵逐渐消失。\n\n此外还有尸体痉挛、皮革样斑、角膜混浊、自溶等均为早期尸体变化。\n\n也就是说，尸僵也受温度影响，温度高时，尸僵发生得早。另外，如果死者在死亡前不久进行过剧烈的体力活动，也会加速尸僵的形成。\n## ３．尸斑\n人死亡后，血液便停止循环，并在重力的影响下聚集于身体的最低处。\n\n例如，如果死者死亡时躺在地上，血液就会向下沉积于死者背部，此时这个区域就会呈粉红色，并逐渐变成紫色，而上半部分则会变得苍白。\n\n在尸斑的形成过程中，如果有人或物体接触尸体，它的表面就会产生相应的印迹。这也就意味着，如果发现这样的印迹，就说明有人曾移动过尸体。\n\n尸斑痕迹还有可能因物体的局部压迫而没有形成血液积聚，如尸体仰卧于地面或其他硬物表面时，背部和臀部由于受到压迫，常呈现苍白色而不见尸斑。\n\n尸斑的产生非常快，通常在死后30分钟内即可见，而在几个小时后，尸斑就逐渐固定下来了。接着，形成尸斑的区域的组织液便渗入血管内，促使红细胞膜破裂，并逐渐向外渗入周围的组织中，从而导致尸斑颜色加深、范围扩大。\n\n尸斑的形成、发展可分为几个阶段。\n\n尸斑形成的最初阶段，称为**坠积期**。此期在死后5---6小时内达到明显可见。可持续6---12小时。坠积期尸斑被按压尸斑退色或消失，出去按压则尸斑又重现。在此前阶段如果变动尸体位置。尸斑也随之改变，在新的低下部位重新出现。\n\n尸斑发展的第二阶段为**扩散期**。从死亡后发展到扩散期约需8小时，延续至26---32小时。此期被血红蛋白染红的血浆浸透到周围组织，此时按压尸斑已经不能完全消失，只是稍许退色，停止按压后尸斑恢复原色也慢。变动尸体位置，部分尸斑可能移位，部分尸斑则保留在原来形成的部位。\n\n尸斑发展的第三阶段为浸润到组织中的时间较久，此期用手指压迫尸斑不再改变颜色，也不再消失，变动尸体位置则尸斑不再转移。 某些中毒尸斑颜色特异，一氧化碳中毒时呈鲜红色，氧化物中毒呈樱桃红色，亚硝酸盐、氯酸钾中毒呈灰褐色，冻死时呈红色。\n## ４．其他\n此外，眼球玻璃体液的浑浊程度、心肌pH值（酸度或碱度）、肌肉超声波检查、骨骼肌的电活动、创伤形态等也都能为推断死亡时间提供较大帮助。多年来，对尸体胃内容物的检查一直是尸体解剖标准程序的重要一环。\n\n因为化学物质和未完全消化的药物可以作为确定死亡原因和死亡方式的重要证据。对胃内容物的分析也可以用来帮助推断死亡时间。\n\n通常胃的消化过程大约需要2～4个小时，如果死者在死亡时胃内有食物，则可大致推定该人约在不超过2～4小时前死亡。\n\n然而，死者死亡时的身体状况各不相同，决定消化时间的变量也较多，故胃内容物只能作为参考的补强证据。此外，还有一些消化过程甚至发生在死亡和腐烂过程中，也需要特别注意。\n\n在死亡发生后的一两天中，尸体内仍会发生一些变化，这些变化都有助于我们推断死亡时间。例如，尸体会开始腐烂，发生颜色变化，并且在腹部和臀部附近产生尸绿。尸绿的出现足以证明死者已经死亡至少2～3天。\n\n# 二．晚期变化\n\n继早期尸体变化后出现腐败、毁坏、白骨化，以及保存型的木乃伊、尸蜡、鞣尸等皆为晚期尸体变化。\n\n## **1、腐败**\n\n从死后第2---3昼夜开始产生大量气体（硫化氢、甲烷、氨等），散发出难闻的腐败臭味。\n\n腐败一般开始于大肠，主要是肠内细菌引起，在右下腹的皮肤上出现绿色斑块，然后扩延至全身，在12---14天腐败气体进入皮下组织，颜面肿胀呈黑色，眼球突出，口唇变厚、舌尖挺出，腹部膨隆，呈所谓巨人观。由于腹腔内的腐败气体的压力作用，使口鼻腔流出血性泡沫液体，排出大小便，阴囊与阴茎膨大成球状，子宫内胎儿娩出，即死后分娩。\n\n在腐败过程中，尸体所有软组织分解消失露出白骨。在空气中白骨化所需的时间随季节不同，成人尸体在夏季需半个月至1个月以上。在土中白骨化经过时间长，季节变化少，在成人需7---10年，小儿尸体4---5年，幼儿尸体2---3年，新生儿尸体大约1年。\n\n根据尸体腐败发展的程度，可大致推测死后经过时间，急剧的尸体腐败不影响骨损伤鉴定，但对生前伤或死后伤鉴别以及疾病死亡原因的确定会造成很大困难，甚至无法鉴定。\n\n## **2、动物毁坏尸体**\n\n各类昆虫、啮齿类和食肉类动物也能严重损伤尸体，甚至毁殆尽。\n\n蝇类对尸体的毁坏最为严重，人死后苍蝇就即可在尸体眼角、口、鼻孔、肛门、伤口等周围产卵，暖和天气经过1---3天卵孵成蛆，软组织被食成蜂窝状。蛆又可以长成蛹，过两周又成蝇，然后再开始新繁殖周期。在条件适宜时，成人尸体在1个月左右就能被蝇类吃尽软组织。\n\n蚂蚁也能破坏尸体，一般认为，在两个月内，蚂蚁能将一巨成人尸体咬食得只剩骨骼。\n\n其他动物破坏尸体（如犬、猫、狼、狐、鼠、鸟类等），均能留下有特征的咬痕。水中尸体可被鱼、虾、蟹等咬食。\n\n# **三、死后经过时间推断**\n\n推断死亡时间是法医鉴定的重要的内容，是在命案现场或对无名尸体检验时要解决的主要问题之一。知道了死亡时间，可以查清某人有无作案时间，可以核对证人或嫌疑人的供述。\n\n## **1、根据尸体现象推断死亡时间**\n\n10小时之内尸温每小时下降1度\n\n10小时以上 尸温每小时下降0.5度\n\n角膜轻度混浊8---12小时\n\n瞳孔不能透见48小时左右\n\n尸体新鲜尚未出现尸斑及尸僵1小时以内\n\n尸斑开始出现1---2小时\n\n尸斑轻度，指压退色，尸僵限于颌、颈关节2-3小时内\n\n尸斑明显，但变动尸体可消退，并于新的低下部又形成新尸斑；尸僵延及上肢，如人为使其缓解可再出现4-5小时内\n\n尸斑、尸僵均明显；指压与变更体位尸斑不消失7-8小时\n\n尸斑尸僵存在，伴角膜中度混浊10-12小时\n\n尸斑可以转移15小时之内\n\n尸斑发展高峰15小时左右\n\n尸僵开始出现2---3小时\n\n尸僵发展高峰12---15小时\n\n尸僵下颌关节开始缓解30小时\n\n上肢尸僵开始缓解，死后经过时间为36小时\n\n下肢尸僵缓解，角膜高度混浊（不透明），死后经过时间为48小时\n\n尸僵消失3---4日（在夏天2---3天，在春秋季节3---4天，冬天3---7天）\n\n下腹部腐败变色24---48小时\n\n腐败发展，出现水泡，死后经过时间为2-3日\n\n腹部皮肤出现尸绿；口、眼角、鼻孔有蝇蛆，死后经过时间为24小时\n\n蛆侵蚀皮肤4日以上\n\n蝇蛆发育成蝇，死后经过时间为8日\n\n蛹脱壳成蝇，脱壳存在，死后经过时间为2-3周\n\n皮下脂肪脂化，死后经过时间为1-2个月\n\n蛆食尽内脏1个月左右\n\n尸蜡形成，死后经过时间为2-4个月\n\n肌肉尸蜡化，死后经过时间为3个月后至1年后  \n\n全身尸蜡化（水中）1年左右\n\n白骨化（土葬），死后经过时间为3-4年  \n\n韧带和软骨消失（土葬），死后经过时间为5年  \n\n骨中脂肪消失，死后经过时间为5-10年  \n\n骨开始风化，死后经过时间为10-15年  \n\n骨组织脆弱化，死后经过时间为50年\n\n成人白骨化（土中）7---10年\n\n成人木乃伊3个月以上\n\n### **尸体腐败现象在不同季节开始出现的时间**\n\n尸体腐败现象夏季秋季冬季\n\n腹部膨胀4---5小时8---10小时2—3天\n\n腐败绿斑约12小时约24小时3---5天\n\n腐败血管网1---2天2---3天5---7天\n\n腐败水泡1---2天3---5天一般不出现\n\n腐败巨人观2---3天3---7天15---30天\n\n## **2、根据尸体胃肠道内容物推断死亡时间**\n\n胃内充满食物，死亡发生在餐中或餐后不久  \n\n胃内容物移向十二指肠，死亡发生在餐后2-3小时  \n\n十二指肠有消化食物及其残渣，死亡发生在餐后4-5小时  \n\n胃、十二指肠均已空虚，死亡发生在餐后6小时以上\n\n根据死者胃肠道内容物可以推断其死前最后一次进餐至死亡所经过的时间，从而推断死亡时间，胃内容并可以确定事物成分或进食地点等。虽然每个人饮食习惯、消化能力各不相同，死后胃肠活动功能还能持续一段时间，但是绝大多数人食物进入、停留于各段消化道时间呈规律性变化。\n\n在法医学的实践中，胃肠道食物消化和推进程度的利用价值不逊于尸表现象。若胃内米饭、蔬菜外形完整，只有少量食物进入十二指肠，应为饭后1—2小时内。若胃内食物部分呈乳糜状，尚有极少量饭粒、菜渣，则食物已进入大肠，应为饭后4小时内。若胃内容全部排空，有时残留青菜根纤维或海带等，应为饭后6小时以上。根据凶杀案件尸体的胃肠道内容物检查多数会得到重要线索和证据。因此，应作为一项常规检查。\n\n## 3、根据蝇蛆生长规律推断死亡时间  \n  \n蝇蛆是造成尸体毁坏最常见的一类昆虫。\n\n苍蝇从成虫产卵，由卵孵化成蛆，蛆变成蛹，蛹发育成蝇，破壳起飞，在现场上留下蛹壳，完成一代苍蝇的生活史，因此可以借助苍蝇卵、蛆、蛹出现的不同阶段推断尸体的死亡时间。  \n\n在夏季，死后十余分钟苍蝇即可在尸体眼角、鼻孔、口角、阴部和暴露的创口等处产卵，每次产卵约150粒。在30℃条件下，经10-14小时蝇卵孵化成蛆。  \n\n蛆每天可生长0.24-0.3cm，4-15天生长成熟，体长可达1.2cm。  \n\n成熟姐继而潜入附近的泥土内变成蛹，再经1周左右，破壳成为幼蝇。 \n\n因此，若在夏季，尸体周围发现有蛹壳和幼蝇或卵即可推断死后经过的时间约为2周以上，春秋季完成同一过程约需4周。  \n\n根据蝇姐生长发育的情况，考察现场环境气温等条件，就可大致推断死后经过时间。  \n\n此外，蝇蛆可分泌富含蛋白质溶解酶的消化液，能将皮肤和黏膜溶解，继而侵入皮下、肌组织甚至内脏。  \n\n婴儿尸体在1-8天，成人尸体3-4周可被其蚀蛀得仅剩骨骼。\n\n## 4、根据超生反应推断死亡时间  \n  \n生命活动终止以后，生前的代谢过程尚能维持一定的时间，因此可以利用超生反应来推断死亡时间。  \n\n超生反应包括肉肌的超生反应，死后皮下出血反应，瞳孔的超生反应，汗腺的超生反应等。  \n\n①肌肉的超生反应：死后2小时，肌肉受机械刺激后可发生收缩反应。电刺激法能更细致地显示死后肌肉收缩。\n\n②瞳孔的超生反应：死后4小时结膜囊内滴入毒扁豆碱或阿托品等作用于自主神经系统的药物可发生相应的缩瞳或散瞳反应。  \n\n③汗腺的超生反应：皮下注射1%肾上腺素的部位，死后18小时内，可见汗液分泌，死后24小时内汗液分泌少量，死后30小时后消失。\n\n## 5、根据尸温推断死亡时间  \n  \n根据死后尸体温度下降的变化规律来推断死亡时间，是法医学中意义最大的一种推断死亡时间的方法。  \n\n许多法医学家做过许多广泛的研究，认为这种方法是最为可靠的。 \n\n人死后的尸体温度会受多方面因素的影响，比如环境温度会直接影响到尸体表面的温度，因此，在法医学上一般以肝和直肠的温度作为尸体的核心温度，因为尸体内部的温度由于有皮肤、皮下脂肪及肌肉保护，受到环境温度影响的可能性较小。  \n\n在法医学鉴定中一般以测量直肠温度为准。正确测量直肠温度的方式是将直肠测温仪探头从肛门处深插入直肠内15 cm左右，一般刚死亡的死者，直肠温度在34．2℃至37．6℃之间浮动，平均为36．9℃。\n\n测算时，仅需间隔1小时测量两次尸体直肠温度，然后通过参考曲线图和公式就可以计算出死亡时间。  \n\n尸体直肠冷却的规律（尸冷），一般在常温下死后10小时以内，每小时平均下降0.5～1℃； 肥胖尸体在死亡后最初10小时，尸温每小时平均下降0.75℃，消瘦尸体每小时平均下降1℃。 夏季尸体温度下降率较春秋时节慢1.4倍，冬季快0.7倍。  \n\n**根据尸冷推断死亡时间的公式是：**  \n**T=37摄氏度-直肠温度/0.83摄氏度xK**  \n\n其中，T为死后经过时间；K为系数，春秋为1.0,夏季为1.4,冬季为0.7。\n\n春秋时节的一具消瘦尸体，通过直肠测量测得尸温为24℃，这意味着尸温下降了13℃，（一般临终直肠温度在34．2℃至37．6℃之间浮动，平均为36．9℃）  \n\n按上述方法公式计算，(37-24) ÷0.83×1=15.6，所以这具尸体死了15.6个小时，接近16个小时。  \n\n虽然通过尸体温度推断死亡时间具有一定的准确性，但是依然会受到许多因素的影响：比如环境温度，昼夜温差、通风情况，雨、雪、潮湿、衣着状况等。此外，死者的年龄，身体胖瘦、裸尸与着装尸体、有无覆盖物等等，都会影响到尸体温度。所以在判断死亡时间的时候，要重点排除这些因素的影响，取出一个最合理的死亡时间。  \n  \n## 6、根据现场勘察所见推断死亡时间  \n  \n包括尸体下植物的情况，钟表停止的时刻，降雨后衣服淋湿的情况，报纸、书信、日记、牛乳等的日期。  \n\n如：①动物吃尽尸体软组织，需3-6周  \n\n②尸体下的草和绿叶退色（夏季花草生长期），需3-8日\n# 四．人死亡后腐烂过程\n2天至3天：腐烂从人体的腹部开始，尸体内组织因分解后产生气体，因此尸体开始胀大。\n3天至4天：腐烂开始从腹部扩散，静脉变得较褪色。\n5天至6天：因细菌分解尸体生成的气体的缘故，腹部胀得更大和皮肤开始出现水泡。\n2个星期：腹部变得非常紧和圆鼓。\n3个星期：组织开始变得柔和。\n4个星期：软的组织开始液化，而且面孔变得无法认出。",
  "编程语言/Android/Linux配置安卓Gradle构建环境.md": "\n---\n\n## ⭐ 概览\n\n目标：在 Debian 12 上搭建可以 **本地编译 Android 原生 APK** 的环境，包含：\n\n- ✅ OpenJDK (推荐 17)\n    \n- ✅ Android SDK 命令行工具（cmdline-tools）\n    \n- ✅ Platform tools（adb）与 build-tools、platforms\n    \n- ✅ 可选：NDK / CMake（用于原生 C/C++）\n    \n- ✅ Gradle（用于构建）\n    \n\n适用场景：CI、无 GUI 的服务器、或仅需命令行编译的开发环境。\n\n---\n\n## 🧾 前置条件\n\n- 一台运行 **Debian 12** 的机器（有 sudo 权限）\n    \n- 稳定的网络（用于下载 SDK 与工具）\n    \n- 建议至少 10GB 可用磁盘空间（SDK + 系统镜像可能占用）\n    \n\n---\n\n## 1️⃣ 安装基础工具\n\n先更新并安装基础依赖：\n\n```bash\nsudo apt update\nsudo apt install -y git unzip wget curl zip build-essential\n```\n\n这些工具用于下载、解压、构建等。\n\n---\n\n## 2️⃣ 安装 JDK（推荐：OpenJDK 17）\n\nAndroid Gradle Plugin（AGP）对 JDK 有版本要求，JDK 17 是安全选择：\n\n```bash\nsudo apt install -y openjdk-17-jdk\n```\n\n检查版本：\n\n```bash\njava -version\n# 期望输出类似：openjdk version \"17.x\"\n```\n\n---\n\n## 3️⃣ 下载并安装 Android SDK 命令行工具\n\n去 Google 官方下载 `commandlinetools` 压缩包，或者用 wget（示例）：\n\n```bash\nmkdir -p $HOME/Android/cmdline-tools\ncd $HOME/Android/cmdline-tools\nwget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip\nunzip cmdline-tools.zip\n# 有时解压出来的目录名是 cmdline-tools，移动或重命名为 latest：\nmv cmdline-tools latest\n```\n\n> 🔔 注意：实际下载链接和版本会随时间变化，请按需到 Android 官方网站获取最新版。\n\n---\n\n## 4️⃣ 配置环境变量（推荐写入 `~/.bashrc` 或 `~/.zshrc`）\n\n将 SDK 路径加入环境变量，保证 `sdkmanager`、`adb` 等工具可用：\n\n```bash\n# 在 ~/.bashrc 或 ~/.zshrc 添加：\nexport ANDROID_HOME=$HOME/Android\nexport ANDROID_SDK_ROOT=$ANDROID_HOME\nexport PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH\n\n# 使之生效：\nsource ~/.bashrc\n```\n\n---\n\n## 5️⃣ 使用 sdkmanager 安装常用组件\n\n通过 `sdkmanager` 安装 `platform-tools`、指定 Android 平台与 build-tools：\n\n```bash\nsdkmanager --sdk_root=$ANDROID_HOME \"platform-tools\" \"platforms;android-34\" \"build-tools;34.0.0\"\n```\n\n可选安装（若需要 NDK / CMake 编译原生代码）：\n\n```bash\nsdkmanager \"ndk;26.1.10909125\" \"cmake;3.22.1\"\n```\n\n如果是自动接受许可，可以使用：\n\n```bash\nyes | sdkmanager --licenses\n```\n\n---\n\n## 6️⃣ 安装 Gradle（可选：系统级）\n\nAndroid 项目通常随 Gradle Wrapper（`gradlew`）一起提供，能自动下载合适版本。但若想系统安装：\n\n```bash\nwget https://services.gradle.org/distributions/gradle-8.7-bin.zip -P /tmp\nsudo unzip -d /opt/gradle /tmp/gradle-8.7-bin.zip\n# 添加到 PATH（写入 ~/.bashrc）：\nexport PATH=/opt/gradle/gradle-8.7/bin:$PATH\n```\n\n检查：\n\n```bash\ngradle -v\n```\n\n---\n\n## 7️⃣ 创建或获取一个示例 Android 项目并编译\n\n如果你已经有一个项目，进入项目目录并使用 Gradle Wrapper：\n\n```bash\n# 如果项目有 gradlew：\n./gradlew assembleDebug\n\n# 编译成功后 APK 通常位于：\napp/build/outputs/apk/debug/app-debug.apk\n```\n\n如果想新建一个空项目，可先使用 Android Studio 在本地创建（GUI 更方便），或直接从 GitHub 上的模板克隆一个样例工程。\n\n---\n\n## 8️⃣ 将 APK 部署到设备或模拟器（可选）\n\n- 真机（需开启 USB 调试）：\n    \n\n```bash\nadb install -r app/build/outputs/apk/debug/app-debug.apk\n```\n\n- 模拟器：需要安装 emulator 与系统镜像（`system-images`），并创建 AVD。命令行使用 `avdmanager` / `emulator`。\n    \n\n---\n\n## 9️⃣ 常见问题 & 排查建议 ❗\n\n- `sdkmanager` 找不到：确认 PATH 是否包含 `$ANDROID_HOME/cmdline-tools/latest/bin`。\n    \n- `java` 版本不对：Gradle/AGP 可能需要特定 JDK 版本，查看项目 `gradle.properties` / `build.gradle` 推荐的版本。\n    \n- 下载慢或失败：考虑使用代理或镜像（国内网络环境常见）。\n    \n- 权限问题：若在 `/opt` 等系统目录解压安装，需 `sudo`。\n    \n\n---\n\n## 🔁 推荐一键脚本（示例）\n\n下面给出一个**示例脚本**的框架（**请先审阅再运行**，并根据需要改版本号）：\n\n```bash\n#!/usr/bin/env bash\nset -e\n\n# 安装基础工具\nsudo apt update\nsudo apt install -y git unzip wget curl zip build-essential openjdk-17-jdk\n\n# 目录\nSDK_ROOT=$HOME/Android\nmkdir -p $SDK_ROOT/cmdline-tools\ncd $SDK_ROOT/cmdline-tools\n\n# 下载命令行工具（请确认链接是否过期）\nwget https://dl.google.com/android/repository/commandlinetools-linux-11076708_latest.zip -O cmdline-tools.zip\nunzip -o cmdline-tools.zip\nmv cmdline-tools latest || true\n\n# 环境变量（仅本次会话）\nexport ANDROID_HOME=$SDK_ROOT\nexport PATH=$ANDROID_HOME/cmdline-tools/latest/bin:$ANDROID_HOME/platform-tools:$PATH\n\n# 安装 SDK 组件\nyes | sdkmanager --sdk_root=$ANDROID_HOME \"platform-tools\" \"platforms;android-34\" \"build-tools;34.0.0\"\n\necho \"安装完成，请将下列行加入你的 ~/.bashrc 或 ~/.zshrc：\"\necho \"export ANDROID_HOME=\\$HOME/Android\"\necho \"export PATH=\\$ANDROID_HOME/cmdline-tools/latest/bin:\\$ANDROID_HOME/platform-tools:\\$PATH\"\n```\n\n---\n\n## 🔗 参考 & 延伸阅读\n\n- Android 官方开发者网站（SDK / command line tools）\n    \n- Gradle 官方文档\n    \n- Android NDK 文档（若使用原生 C/C++）\n    \n\n> 上面链接建议直接在浏览器打开 Android 官方站点获取最新版工具和镜像。\n\n---\n\n## ✅ 小结\n\n在 Debian 12 上搭建 Android 原生构建环境的要点：\n\n- 安装合适的 **JDK（推荐 17）**\n    \n- 下载并配置 **Android SDK command-line tools**，并通过 `sdkmanager` 安装 `platform-tools`、`platforms` 与 `build-tools`\n    \n- 使用项目自带的 **Gradle Wrapper (`gradlew`)** 进行构建，必要时可系统安装 Gradle\n    \n- 如需本地编译原生代码，记得安装 **NDK / CMake**\n    \n\n---\n",
  "编程语言/Android/安卓Gradle构建常用命令总结.md": "# Android Gradle 常用命令速查（基于 `./gradlew`）\n\n\n**基础**\n\n- `./gradlew tasks`  \n    列出可用的 Gradle 任务（查看当前项目能跑什么任务）。\n    \n- `./gradlew dependencies`  \n    列出项目依赖树（排查依赖冲突很有用）。\n    \n- `./gradlew clean`  \n    清理构建产物（删除 `build/` 目录）。\n    \n\n**构建 APK / AAB**\n\n- `./gradlew assembleDebug`  \n    构建 debug APK（输出：`app/build/outputs/apk/debug/*.apk`）。\n    \n- `./gradlew assembleRelease`  \n    构建 release APK（需签名配置，否则生成 unsigned apk）。\n    \n- `./gradlew bundleRelease`  \n    生成 AAB（Android App Bundle），输出：`app/build/outputs/bundle/release/*.aab`。\n    \n- `./gradlew bundleDebug`  \n    生成 debug bundle（少用，通常用于测试）。\n    \n\n**按 module / productFlavor / buildType 构建**\n\n- `./gradlew :moduleName:assembleRelease`  \n    构建指定 module（多模块项目时用）。\n    \n- `./gradlew assembleFlavorNameRelease`  \n    构建指定 flavor + buildType（例如 `assemblePaidRelease`）。\n    \n\n**安装与卸载**\n\n- `./gradlew installDebug`  \n    将 debug APK 安装到连接的设备/模拟器（需要 adb 可用）。\n    \n- `./gradlew uninstallDebug`  \n    从设备卸载 debug 包。\n    \n- 如果用生成的 APK 手动安装：`adb install -r app/build/outputs/apk/debug/app-debug.apk`\n    \n\n**测试**\n\n- 单元测试（JVM）：`./gradlew test` 或 `./gradlew testDebugUnitTest`\n    \n- 仪器/设备测试（connected devices）：`./gradlew connectedAndroidTest` 或 `./gradlew connectedCheck`\n    \n\n**静态检查 / 报表**\n\n- `./gradlew lint` 或 `./gradlew lintDebug`  \n    运行 Android Lint。\n    \n- `./gradlew signingReport`  \n    输出签名信息（SHA1/SHA256），常用于配置 API key（Google/Firebase）。\n    \n\n**调试构建问题的常用参数**\n\n- `--stacktrace` / `--full-stacktrace`：打印堆栈跟踪（排错用）\n    \n- `--info` / `--debug`：更详细的日志级别\n    \n- `--scan`：生成构建扫描（需要网络，便于深入分析）\n    \n- `--no-daemon`：不使用 Gradle daemon（CI 时有时会用）\n    \n- `--parallel`：并行构建模块（能加速多模块项目）\n    \n- `-x test`：跳过测试（例如 `./gradlew assembleRelease -x test`）\n    \n- `--offline`：离线构建（只用缓存依赖）\n    \n- `--refresh-dependencies`：刷新依赖缓存\n    \n\n**性能 / CI 常用组合示例**\n\n- 本地快速一把：`./gradlew clean assembleDebug --parallel --info`\n    \n- CI (不使用 daemon，输出详细)：`./gradlew clean assembleRelease --no-daemon --stacktrace -x test`\n    \n- 只构建 moduleA 的 release：`./gradlew :moduleA:assembleRelease`\n    \n\n**常见路径**\n\n- APK：`app/build/outputs/apk/<buildType|flavor>/...`\n    \n- AAB：`app/build/outputs/bundle/<buildType>/...`\n    \n- 临时构建缓存：`~/.gradle/caches/`\n    \n\n**小贴士**\n\n- 始终用项目里的 Gradle Wrapper（`./gradlew`），保证 Gradle 版本一致。\n    \n- Release 构建需要正确的 `signingConfig`（通常放在 `gradle.properties` + `build.gradle`），也可以在 CI 用 `-P` 传参数（注意不要把敏感信息放在日志里）。\n    \n- 出问题先加 `--stacktrace --info` 看详情，再定位是依赖、ProGuard/R8、签名还是资源冲突。\n    \n\n如果你想，我可以把你常用的几条命令做成一个可复用的脚本/CI job 模板（GitHub Actions/GitLab CI），或者按你项目的 flavor 给出精确的 assemble 命令。要哪个直接说。",
  "编程语言/Flutter/Flutter安卓构建注意事项.md": "\n\n\n```powershell\n#先使用这个构建\n$env:FLUTTER_STORAGE_BASE_URL=\"https://storage.flutter-io.cn\"; $env:PUB_HOSTED_URL=\"https://pub.flutter-io.cn\"; flutter build apk --release \n\n#再使用这个运行\nflutter run\n```\n\n\n记得修改一下项目android\\app\\build.gradle.kts文件的包名\n    namespace = \"com.example.farmvisualconfig\"",
  "编程语言/Flutter/Flutter常用命令.md": "好的 👍  \n我帮你把 **Flutter 常用命令**整理一下，方便开发时快速查阅。可以分几类：\n\n---\n\n## 🛠️ 环境配置相关\n\n```bash\nflutter --version            # 查看 Flutter 版本\nflutter upgrade              # 升级 Flutter SDK\nflutter downgrade            # 降级到上一个版本\nflutter doctor               # 检查环境配置\nflutter config --enable-windows-desktop   # 启用 Windows 桌面支持\nflutter config --enable-web               # 启用 Web 支持\nflutter devices              # 查看可用设备\n```\n\n---\n\n## 📦 项目管理\n\n```bash\nflutter create my_app        # 创建新项目\nflutter clean                # 清理构建缓存\nflutter pub get              # 获取依赖\nflutter pub upgrade          # 升级依赖\nflutter pub outdated         # 检查依赖可更新版本\nflutter pub add http         # 添加依赖（例如 http）\nflutter pub remove http      # 移除依赖\n```\n\n---\n\n## ▶️ 运行调试\n\n```bash\nflutter run                  # 在默认设备上运行\nflutter run -d windows       # 在 Windows 桌面运行\nflutter run -d chrome        # 在浏览器运行\nflutter run -d emulator-5554 # 指定设备运行（比如 Android 模拟器）\n```\n\n---\n\n## 🏗️ 构建打包\n\n```bash\nflutter build apk            # 构建 Android APK\nflutter build appbundle      # 构建 Android AAB (上传 Google Play)\nflutter build ios            # 构建 iOS 应用\nflutter build windows        # 构建 Windows 应用\nflutter build web            # 构建 Web 应用\nflutter build linux          # 构建 Linux 应用\nflutter build macos          # 构建 macOS 应用\n```\n\n---\n\n## 🔄 热重载 / 热重启\n\n运行 `flutter run` 后，命令行里可以：\n\n- `r` → 热重载（Hot reload，保留状态）\n    \n- `R` → 热重启（Hot restart，重启应用）\n    \n- `q` → 退出运行\n    \n\n---\n\n## 🔍 代码检查 & 性能\n\n```bash\nflutter analyze              # 分析代码问题\nflutter format .             # 格式化代码（整个项目）\nflutter test                 # 运行单元测试\nflutter pub run build_runner build  # 代码生成（json_serializable 等常用）\n```\n\n---\n\n## 🌐 其他常用\n\n```bash\ndart --version               # 查看 Dart 版本\ndart pub global activate devtools   # 启用 DevTools\nflutter pub global run devtools     # 启动 DevTools\n```\n\n---\n\n📌 **最常用的组合命令**：\n\n1. `flutter pub get` → 拉依赖\n    \n2. `flutter run -d windows` → 运行调试\n    \n3. `flutter build windows` → 打包 Windows\n    \n4. `flutter clean && flutter pub get` → 出问题时清理依赖\n    \n\n---\n",
  "编程语言/Flutter/Flutter构建平台产物位置.md": "在使用 Flutter 构建应用时，不同平台的输出文件会存放在项目目录的特定位置，具体路径会因构建命令和平台而有所不同。以下是各平台构建产物的默认存放位置及相关说明：\n\n### 一、通用说明\n\nFlutter 项目的构建产物默认存放在项目根目录的 build 文件夹下，该文件夹会根据目标平台自动创建子目录，存放对应平台的编译文件、安装包等。\n\n### 二、各平台构建产物位置\n\n#### 1. Android 平台\n\n- **构建命令**：flutter build apk（默认 release 模式）、flutter build appbundle（AAB 格式）\n\n- **产物位置**：\n\n- APK 文件：项目根目录/build/app/outputs/flutter-apk/\n\n文件名通常为 app-release.apk（release 模式）或 app-debug.apk（debug 模式）。\n\n- AAB 文件（Android App Bundle）：项目根目录/build/app/outputs/bundle/release/app-release.aab\n\n#### 2. iOS 平台\n\n- **构建命令**：flutter build ios（release 模式）、flutter build ios --debug（debug 模式）\n\n- **产物位置**：\n\n- 编译后的应用文件（.app 格式）：项目根目录/build/ios/iphoneos/Runner.app（真机运行）或 build/ios/iphonesimulator/Runner.app（模拟器）。\n\n- IPA 安装包（需通过 Xcode 导出）：\n\n若使用 flutter build ipa 命令，产物会存放在 项目根目录/build/ios/ipa/，文件名为 Runner.ipa。\n\n#### 3. 桌面平台（Windows/macOS/Linux）\n\n需先通过 flutter config --enable-[windows/macos/linux]-desktop 开启对应平台支持。\n\n- **Windows**：\n\n- 构建命令：flutter build windows\n\n- 产物位置：项目根目录/build/windows/runner/Release/（release 模式），包含可执行文件 Runner.exe 及相关依赖库。\n\n- **macOS**：\n\n- 构建命令：flutter build macos\n\n- 产物位置：项目根目录/build/macos/Build/Products/Release/Runner.app（release 模式），这是一个 macOS 应用包。\n\n- **Linux**：\n\n- 构建命令：flutter build linux\n\n- 产物位置：项目根目录/build/linux/x64/release/bundle/（64 位系统），包含可执行文件 runner 及依赖文件。\n\n#### 4. Web 平台\n\n- **构建命令**：flutter build web（默认 release 模式）\n\n- **产物位置**：项目根目录/build/web/，包含 HTML、CSS、JavaScript 等静态文件，可直接部署到 Web 服务器（如 Nginx、Apache 等）。\n\n### 三、注意事项\n\n- **debug 与 release 模式**：debug 模式的产物通常用于开发调试，体积较大且包含调试信息；release 模式产物经过优化，适合发布，默认存放在对应平台的 release 子目录中。\n\n- **自定义输出路径**：部分命令支持通过参数指定输出路径，例如 flutter build apk --output=./my_app.apk 可将 APK 输出到根目录并命名为 my_app.apk。\n\n通过以上路径，你可以找到 Flutter 为各平台构建的应用文件，便于测试或发布到应用商店。",
  "编程语言/Java/Java基础-导入java文件.md": "\n---\n\n## 🔹 情况 1：同一个包里的多个 `.java` 文件\n\n如果两个类在同一个包（或者没写 `package`，都在默认包），\n只要把它们放在同一个目录下，直接编译就能互相使用。\n\n例子：\n\n📂 目录结构：\n\n```\nHelloWorld.java\nUtils.java\n```\n\n`HelloWorld.java`：\n\n```java\npublic class HelloWorld {\n    public static void main(String[] args) {\n        Utils.sayHi();\n    }\n}\n```\n\n`Utils.java`：\n\n```java\npublic class Utils {\n    public static void sayHi() {\n        System.out.println(\"Hello from Utils!\");\n    }\n}\n```\n\n编译运行：\n\n```bash\njavac HelloWorld.java Utils.java\njava HelloWorld\n```\n\n输出：\n\n```\nHello from Utils!\n```\n\n---\n\n## 🔹 情况 2：不同包的类\n\n如果你要用别的包里的类，需要用 `import`。\n\n目录结构：\n\n```\nsrc/\n ├─ app/\n │   └─ HelloWorld.java\n └─ util/\n     └─ Utils.java\n```\n\n`util/Utils.java`：\n\n```java\npackage util;\n\npublic class Utils {\n    public static void sayHi() {\n        System.out.println(\"Hello from util.Utils!\");\n    }\n}\n```\n\n`app/HelloWorld.java`：\n\n```java\npackage app;\n\nimport util.Utils;   // 导入 util 包里的 Utils 类\n\npublic class HelloWorld {\n    public static void main(String[] args) {\n        Utils.sayHi();\n    }\n}\n```\n\n编译：\n\n```bash\njavac src/util/Utils.java src/app/HelloWorld.java -d out\n```\n\n运行：\n\n```bash\njava -cp out app.HelloWorld\n```\n\n---\n\n## 🔹 总结\n\n1. **同目录、同包**：直接用，不需要 `import`。\n2. **不同目录、不同包**：必须用 `package` 和 `import`，再用 `-d` 编译指定输出目录。\n\n---\n\n",
  "编程语言/Python/Kivy/kivy编译安卓APK.md": "\n\n```bash\nsudo apt update && sudo apt upgrade -y\n\n#安装必要的依赖\nsudo apt install -y \\\n    build-essential \\\n    git \\\n    python3 \\\n    python3-pip \\\n    python3-venv \\\n    openjdk-17-jdk \\\n    unzip \\\n    zip \\\n    libffi-dev \\\n    libssl-dev \\\n    libsqlite3-dev \\\n    libjpeg-dev \\\n    libfreetype6-dev \\\n    libgl1-mesa-dev \\\n    libgles2-mesa-dev \\\n    zlib1g-dev \\\n    autoconf \\\n    automake \\\n    libtool \\\n    pkg-config \\\n    cmake \\\n    curl \\\n    lld \\\n    libncurses5\n\n#创建虚拟环境 \npython3 -m venv kivy_env\nsource kivy_env/bin/activate\n\n#升级pip\npip install --upgrade pip setuptools wheel cython\n\n#安装kivy\npip install \"kivy[base]\" kivy_examples\n#检查是否安装成功\npython -m kivy.examples.demo.touchtracer\n\n#安装 Buildozer构建环境\npip install buildozer\n#验证是否安装成功\nbuildozer --version\n\n#初始化 buildozer 配置文件\nbuildozer init\n\n#打包构建apk 开梯子！\nbuildozer android debug\n\n\n```\n\n\n```python\nfrom kivy.app import App\nfrom kivy.uix.label import Label\n\nclass MyApp(App):\n    def build(self):\n        return Label(text=\"Hello Android from Kivy!\")\n\nif __name__ == \"__main__\":\n    MyApp().run()\n\n```\n\n```ini\n\n```\n\n\n\n\n\n\n\n\n",
  "编程语言/Python/Python国内pip加速镜像.md": "\n---\n\n## 一、常见国内镜像源推荐\n\n以下是一些稳定且速度优异的国内 PyPI 镜像源：\n\n- **清华大学**  \n    `https://pypi.tuna.tsinghua.edu.cn/simple` ([CSDN博客](https://blog.csdn.net/weixin_39334709/article/details/105265951?utm_source=chatgpt.com \"pip install 加速（修改为国内源） 原创\"))\n    \n- **阿里云**  \n    `https://mirrors.aliyun.com/pypi/simple/` ([CSDN博客](https://blog.csdn.net/zwq_zwq_zwq111/article/details/139562615?utm_source=chatgpt.com \"python-pip配置镜像源加速下载Python包安装：快速配置pip源\"))\n    \n- **中国科技大学（USTC）**  \n    `https://pypi.mirrors.ustc.edu.cn/simple/` ([CSDN博客](https://blog.csdn.net/zwq_zwq_zwq111/article/details/139562615?utm_source=chatgpt.com \"python-pip配置镜像源加速下载Python包安装：快速配置pip源\"))\n    \n- **网易**  \n    `https://mirrors.163.com/pypi/simple/` ([CSDN博客](https://blog.csdn.net/qq_44924694/article/details/134017564?utm_source=chatgpt.com \"Python安装库加速之pip国内镜像源原创\"))\n    \n- **豆瓣**  \n    `http://pypi.douban.com/simple/`（推荐使用 HTTPS 若可用）([CSDN博客](https://blog.csdn.net/zwq_zwq_zwq111/article/details/139562615?utm_source=chatgpt.com \"python-pip配置镜像源加速下载Python包安装：快速配置pip源\"))\n    \n- **华为云、腾讯云**等也是可选镜像，但常用推荐如上即可 ([CSDN博客](https://blog.csdn.net/qq_44924694/article/details/134017564?utm_source=chatgpt.com \"Python安装库加速之pip国内镜像源原创\"))\n    \n\n---\n\n## 二、临时使用镜像方法（每次安装时添加）\n\n在你激活的虚拟环境中，使用以下方式安装包时手动指定镜像源：\n\n```bash\npip install 包名 -i https://pypi.tuna.tsinghua.edu.cn/simple\n```\n\n如果镜像为 HTTP，并提示“不受信任”，可额外加上 `--trusted-host` 参数：\n\n```bash\npip install 包名 -i http://pypi.douban.com/simple --trusted-host pypi.douban.com\n```\n\n([博客园](https://www.cnblogs.com/minuhy/p/18424608?utm_source=chatgpt.com \"【Python】pip安装加速：使用国内镜像源\"))\n\n---\n\n## 三、永久配置镜像（适用于当前虚拟环境）\n\n若希望省去每次输入 -i 参数的麻烦，可以在虚拟环境中创建或修改配置文件，使 pip 默认使用国内镜像：\n\n- **Unix / macOS 下虚拟环境：**  \n    在虚拟环境目录下 `$VIRTUAL_ENV/pip.conf`\n    \n- **Windows 虚拟环境：**  \n    在 `%VIRTUAL_ENV%\\pip.ini`\n    \n\n在其中添加以下内容（以清华源为例）：\n\n```ini\n[global]\ntimeout = 120\nindex-url = https://pypi.tuna.tsinghua.edu.cn/simple\ntrusted-host = pypi.tuna.tsinghua.edu.cn\n```\n\n- `timeout`：设置最长等待时间，例如 **120 秒**，避免连接中断 ([CSDN博客](https://blog.csdn.net/weixin_39334709/article/details/105265951?utm_source=chatgpt.com \"pip install 加速（修改为国内源） 原创\"))\n    \n- `index-url`：指定清华镜像为默认源\n    \n- `trusted-host`：将镜像主机设为可信，避免 HTTPS 以外的警告 ([CSDN博客](https://blog.csdn.net/weixin_39334709/article/details/105265951?utm_source=chatgpt.com \"pip install 加速（修改为国内源） 原创\"))\n    \n\n记住，pip 配置的优先级如下（高到低）：\n\n1. 虚拟环境中的配置\n    \n2. 当前用户目录中的配置\n    \n3. 全局配置（系统范围）([CSDN博客](https://blog.csdn.net/weixin_39334709/article/details/105265951?utm_source=chatgpt.com \"pip install 加速（修改为国内源） 原创\"))\n    \n\n---\n\n## 四、另一种永久配置方式：使用 pip config 命令\n\n你也可以通过 pip 自带的命令来设置全局配置（不限于虚拟环境）：\n\n```bash\npip config set global.index-url https://mirrors.aliyun.com/pypi/simple/\n```\n\n随后你可以用 `pip config list` 来验证是否设置成功 ([CSDN博客](https://blog.csdn.net/zwq_zwq_zwq111/article/details/139562615?utm_source=chatgpt.com \"python-pip配置镜像源加速下载Python包安装：快速配置pip源\"))。\n\n若想恢复到默认的官方 PyPI 源，可使用：\n\n```bash\npip config unset global.index-url\n```\n\n([CSDN博客](https://blog.csdn.net/zwq_zwq_zwq111/article/details/139562615?utm_source=chatgpt.com \"python-pip配置镜像源加速下载Python包安装：快速配置pip源\"))\n\n---\n\n## 五、方式对比一览\n\n|方式|优点|缺点|\n|---|---|---|\n|临时 `-i` 指定|简单快速，不改配置|每次需手动指定|\n|虚拟环境配置|仅对该虚拟环境生效|需进入每个环境配置|\n|全局配置|全局生效，无需重复配置|不够灵活，不适每个项目情况|\n\n---\n\n",
  "编程语言/Python/Pywebview库功能一览.md": "\n---\n\n## 一、基本概述\n\n- **跨平台原生 WebView 窗口**  \n    pywebview 是一个轻量级包装库，可在 Python 程序中使用 HTML/CSS/JavaScript 构建 GUI，打开原生的 WebView 窗口，适用于 Windows、macOS、Linux（GTK 或 QT）、Android 平台 ([GitHub](https://github.com/r0x0r/pywebview?utm_source=chatgpt.com \"r0x0r/pywebview: Build GUI for your Python program with ...\"), [pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview5.html?utm_source=chatgpt.com \"5.0 has landed - pywebview - Example\"))。\n    \n\n---\n\n## 二、核心功能分类\n\n### 1. 窗口管理功能\n\n- 使用 `webview.create_window(...)` 创建窗口，可设置属性包括：标题、加载方式（URL 或直接传 HTML）、尺寸（宽高）、位置坐标（x, y）、是否可调整大小、是否全屏、最小尺寸、隐藏窗口、无边框、阴影效果（仅限 Windows）、窗口置顶、关闭确认、背景颜色、透明、文本选择、缩放能力、拖拽能力、暗色模式等 ([pywebview.idepy.com](https://pywebview.idepy.com/guide/api?utm_source=chatgpt.com \"API - pywebview中文文档\"), [pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n- `webview.start(...)` 启动 GUI 消息循环，可额外配置回调函数、调试模式、HTTP 服务器、用户代理、隐私模式、存储路径、本地化、菜单设置、图标、SSL 等参数 ([pywebview.idepy.com](https://pywebview.idepy.com/guide/api?utm_source=chatgpt.com \"API - pywebview中文文档\"))。\n    \n\n---\n\n### 2. JavaScript ↔ Python 双向通信\n\n- 通过 `js_api` 参数将 Python 对象暴露给 JavaScript，以便 JS 调用 Python 方法（返回 Promise）；也支持运行时调用： `window.expose(func)` ([pywebview.idepy.com](https://pywebview.idepy.com/guide/api?utm_source=chatgpt.com \"API - pywebview中文文档\"), [pywebview.flowrl.com](https://pywebview.flowrl.com/guide/usage?utm_source=chatgpt.com \"Usage | pywebview - Example\"))。\n    \n\n---\n\n### 3. 内建 HTTP 服务器支持\n\n- 自动为相对路径启动 Bottle HTTP 服务器；可在 `webview.start(http_server=True, ssl=True)` 中启用，并可传入自定义 WSGI 服务（如 Flask）作为 `url` 参数，或修改默认服务器的 SSL 行为 ([pywebview.flowrl.com](https://pywebview.flowrl.com/guide/usage?utm_source=chatgpt.com \"Usage | pywebview - Example\"), [pywebview.idepy.com](https://pywebview.idepy.com/guide/api?utm_source=chatgpt.com \"API - pywebview中文文档\"))。\n    \n\n---\n\n### 4. DOM 操作能力\n\n- 支持在 Python 端进行 DOM 操作，如元素创建、搜索、修改属性或样式，事件注册等，类似 jQuery 操作体验。提供 `window.dom` API，包括 `dom.body`、`dom.document`、`dom.create_element()`、`dom.get_element(s)`，并支持事件监听，如 click、scroll 等 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview5.html?utm_source=chatgpt.com \"5.0 has landed - pywebview - Example\"))。\n    \n- 还支持拖拽文件，并获取完整文件路径 `event['dataTransfer']['files'][0]['pywebviewFullPath']` ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview5.html?utm_source=chatgpt.com \"5.0 has landed - pywebview - Example\"))。\n    \n\n---\n\n### 5. 事件机制\n\n- pywebview 5 引入 DOM 操作及基本事件支持（如 click 等）。\n    \n- pywebview 6 提供更先进的网络事件支持，包括 `request_sent` 和 `response_received`，可拦截并修改请求头，还新增 `initialized` 事件（GUI 渲染器选择前触发）可用于配置判定 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n\n---\n\n### 6. 全新共享状态管理（v6）\n\n- `window.state` 对象允许自动同步 JavaScript 和 Python 间的顶层属性状态，无需额外手动同步。例如在 Python 端设置 `window.state.user_name = \"Test\"`，在 JavaScript 中通过 `window.pywebview.state.user_name` 即可访问 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n\n---\n\n### 7. 平台增强功能\n\n- **Android 支持**：pywebview 5 开始支持 Android（虽然功能较限，如不支持文件对话框、多窗口、窗口控制，但基本功能可用）([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview5.html?utm_source=chatgpt.com \"5.0 has landed - pywebview - Example\"))。\n    \n- **pywebview 6 优化 Android**：引入 Kivyless 实现，提高启动速度、减小包体，并支持全屏模式 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n\n---\n\n### 8. 应用设置与 UI 菜单\n\n- **应用级设置**（v5）：通过 `webview.settings` 定制行为，如控制文件下载、允许 file:// URL、外链跳转行为、调试模式下自动打开 DevTools 等 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview5.html?utm_source=chatgpt.com \"5.0 has landed - pywebview - Example\"))。\n    \n- **窗口级菜单**（v6）：可以为每个窗口定义自定义菜单（Menu/MenueAction），类似桌面应用的菜单栏；部分平台（如 GTK + Unity）暂不支持 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n\n---\n\n### 9. 平台尤其增强与现代化\n\n- **现代化 API 调整**：pywebview 6 改进了 FileDialog 枚举、设置项存放路径、移除废弃 DOM API 等 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n    \n- **平台特定增强**：\n    \n    - Windows：支持暗色模式自动识别\n        \n    - macOS：可隐藏默认菜单、更好的 JS prompt 支持\n        \n    - 全平台：改进屏幕坐标处理和 SSL 支持 ([pywebview.flowrl.com](https://pywebview.flowrl.com/blog/pywebview6?utm_source=chatgpt.com \"6.0 is here | pywebview - Example\"))。\n        \n\n---\n\n## 三、总结表格\n\n|功能分类|详细内容描述|\n|---|---|\n|窗口管理|多平台窗口创建与控制（尺寸、位置、样式等）|\n|JS ↔ Python 通信|js_api 和 expose 提供双向调用|\n|HTTP 服务器|内建 Bottle 服务器，可配置 SSL 与自定义 WSGI|\n|DOM 操作|从 Python 端操作 DOM 元素、事件绑定、拖拽功能|\n|事件机制|DOM 事件、网络请求事件、初始化事件|\n|状态同步|自动同步 window.state（Python ↔ JS）|\n|平台支持|Desktop 各平台 + Android，含特性差异|\n|应用配置 & 菜单|settings 配置项 + 窗口级菜单|\n|平台增强|暗色模式、JS prompt 优化、屏幕坐标、SSL 优化等|\n\n---\n",
  "西南石油大学/油砖大内网/wikijs数据库部署流程.md": "\n```shell\n#删除wikijs\nkubectl delete namespace wikijs\n\n# 创建命名空间\nkubectl create namespace wikijs\n\n#创建新的数据库配置\nkubectl apply -f wikijs-pg.yaml\n\n#查看节点状况\nkubectl get pods -n wikijs\n\n#部署成功后进入数据库查看\nkubectl exec -it wikijs-db-0 -n wikijs -- psql -U postgres\n\n#执行完下面的sql语句后继续\n# 测试 wikijsuser 连接\nkubectl exec -it wikijs-db-0 -n wikijs -- psql -U wikijsuser -d wikijsdb -h localhost\n\n#密码\nWi9yG2UJzoEMLRtork9xC0aW2PHeHS8lCDrmqNiW3O3CW01TlSNuscMPkmLj287O\n\n#查看配置出错原因（大多数是妈的秘钥没有注入）\nkubectl describe pod wikijs-676bf9d8c-ncjln -n wikijs\nkubectl logs wikijs-676bf9d8c-ncjln -n wikijs\n\n#然后需要手动注入秘钥\nkubectl create secret generic wikijs \\\n  --from-literal=postgresql-password='Wi9yG2UJzoEMLRtork9xC0aW2PHeHS8lCDrmqNiW3O3CW01TlSNuscMPkmLj287O' \\\n  -n wikijs\n\n\n#验证秘钥创建\nkubectl get secrets -n wikijs\nkubectl describe secret wikijs -n wikijs\n\n#删除相应的pod重启\nkubectl delete pod wikijs-676bf9d8c-ncjln -n wikijs\n\n#再次检查部署状态\nkubectl get pods -n wikijs\nkubectl logs -f deployment/wikijs -n wikijs\n\n#查看 Ingress 状态\nkubectl get ingress -n wikijs\nkubectl describe ingress -n wikijs\n\nkubectl get svc -n wikijs\n\n#查看wikijs证书\nkubectl get certificate -n wikijs\n\n#检查Certificate资源 ：\nkubectl get certificate -A\nkubectl get certificaterequest -n wikijs\n\n#检查cert-manager状态 ：\nkubectl get pods -n cert-manager\nkubectl logs -n cert-manager deployment/cert-manager\n\n#手动创建证书（如果需要） ：\nkubectl apply -f wikijs-cert.yaml\n\n# 查看wikijs命名空间中的所有Secret\nkubectl get secrets -n wikijs\n\n# 查看PostgreSQL相关的Secret（通常由Zalando Operator自动创建）\nkubectl get secrets -n wikijs | grep wikijs-db\n\n# 查看Secret的详细信息\nkubectl describe secret <secret-name> -n wikijs\n\n#安装wikijs\nhelm repo add requarks https://charts.js.wiki\nhelm repo update\nhelm install wikijs requarks/wiki -f wikijs-values.yaml -n wikijs\n\n#装错了卸载重装\nhelm uninstall wikijs -n wikijs\n\n#进入容器查看wikijs失败原因\nkubectl logs wikijs-56ccb545d8-qkbn5 -n wikijs -c wiki\n\n#查看pods日志\nkubectl describe pod wikijs-56ccb545d8-7hpcj -n wikijs\n\n#查看服务器上所有ingress服务\nkubectl get ingress --all-namespaces\n\n#查看特定ingress服务\nkubectl describe ingress harbor-ingress -n harbor\n\n```\n\n**手动在数据库中创建所需用户和密码**\n```sql\n\n\n-- 创建 wikijsuser 用户\nCREATE USER wikijsuser WITH PASSWORD 'Wi9yG2UJzoEMLRtork9xC0aW2PHeHS8lCDrmqNiW3O3CW01TlSNuscMPkmLj287O';\n\n-- 给用户创建数据库的权限\nALTER USER wikijsuser CREATEDB;\nALTER USER wikijsuser CREATEROLE;\nALTER USER wikijsuser LOGIN;\n\n-- 创建 wikijsdb 数据库\nCREATE DATABASE wikijsdb OWNER wikijsuser;\n\n-- 创建连接池用户\nCREATE USER wikijspooler WITH PASSWORD 'pooler_password_123';\nALTER USER wikijspooler LOGIN;\n\n-- 给 wikijsuser 数据库的所有权限\nGRANT ALL PRIVILEGES ON DATABASE wikijsdb TO wikijsuser;\n\n-- 连接到 wikijsdb 数据库并设置权限\n\\c wikijsdb\nGRANT ALL ON SCHEMA public TO wikijsuser;\nGRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO wikijsuser;\nGRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO wikijsuser;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO wikijsuser;\nALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO wikijsuser;\n\n-- 验证创建结果\n\\du\n\\l\n\n-- 退出\n\\q\n\n\n-- 1. 创建 wikijsuser 用户（超级用户权限）\nCREATE USER wikijsuser WITH SUPERUSER CREATEDB LOGIN PASSWORD 'your_password_here';\n\n-- 2. 创建 pgmonitor 用户（监控用户）\nCREATE USER pgmonitor WITH LOGIN PASSWORD 'monitor_password_here';\n\n-- 3. 创建 wikijspooler 用户（连接池用户）\nCREATE USER wikijspooler WITH LOGIN CREATEDB PASSWORD 'pooler_password_here';\n\n-- 4. 创建 wikijsdb 数据库\nCREATE DATABASE wikijsdb OWNER wikijsuser;\n\n-- 5. 验证用户创建\n\\du\n\n-- 6. 验证数据库创建\n\\l\" > create_wikijs_users.sql\n\n\n```\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n",
  "西南石油大学/油砖大内网/wikijs部署新的要求.md": "数据库3个节点\n看数据库模板\n先把数据库三个节点拉上来\n查看helm部署模板\nB站看一下k8s部署wikijs模板\n写部署文档\n看wikijs的官方k8s部署文档\n数据库配置按照hyc模板和wikijs要求重新写\nwikijs配置 按照官方文档要求重写\n数据库秘钥不要再明文写了\n多使用tab键补全命令",
  "西南石油大学/灵创实验室/灵创实验室招新机器人设计草案.md": "实验室招新QQ机器人设计方案，结合Napcat框架和DeepSeek API实现，包含上下文记忆、招新问答和趣味交互功能：\n\n### 一、系统架构设计\n```mermaid\ngraph TD\n    A[Napcat 机器人框架] --> B[消息处理层]\n    B --> C[上下文管理器]\n    B --> D[指令路由器]\n    C --> E[DeepSeek API]\n    D --> F[招新问答模块]\n    D --> G[趣味交互模块]\n    D --> H[表情包管理]\n    E --> C[记忆存储]\n```\n\n### 二、核心模块设计\n\n1. **上下文管理器 (ContextManager)**\n```python\nclass ContextManager:\n    def __init__(self, max_context=5):\n        self.contexts = {}  # {group_id: deque(maxlen=max_context)}\n        self.recruitment_info = \"\"  # 存储招新要求\n    \n    def add_context(self, group_id, role, content):\n        if group_id not in self.contexts:\n            self.contexts[group_id] = deque(maxlen=5)\n        self.contexts[group_id].append({\"role\": role, \"content\": content})\n    \n    def get_context(self, group_id):\n        return list(self.contexts.get(group_id, deque()))\n    \n    def set_recruitment(self, info):\n        # 精简招新信息并存储\n        self.recruitment_info = self._summarize_info(info)\n    \n    def _summarize_info(self, text):\n        # 使用DeepSeek生成精简版招新要求\n        prompt = \"请用不超过100字总结以下招新要求的核心信息:\"\n        return call_deepseek(prompt + text)\n```\n\n2. **DeepSeek API 交互模块**\n```python\ndef call_deepseek(messages, temp=0.7, max_tokens=500):\n    headers = {\"Authorization\": f\"Bearer {API_KEY}\"}\n    payload = {\n        \"model\": \"deepseek-chat\",\n        \"messages\": messages,\n        \"temperature\": temp,\n        \"max_tokens\": max_tokens\n    }\n    response = requests.post(API_ENDPOINT, json=payload, headers=headers)\n    return response.json()[\"choices\"][0][\"message\"][\"content\"]\n```\n\n### 三、优化提示词设计\n\n**系统级提示词 (固定注入)：**\n```\n你是一个学科竞赛实验室的招新助手，具有以下特征：\n1. 专业解答招新相关问题，回答需基于[实验室招新要求]\n2. 当问题无关招新时，用幽默风趣的方式闲聊（可加入表情包描述）\n3. 回答简洁（<100字），复杂问题建议线下咨询\n4. 使用表情符号和网络流行语增加亲和力\n\n当前招新要求摘要：\n{recruitment_summary}\n```\n\n**动态上下文构建示例：**\n```python\ndef build_messages(group_id):\n    base_prompt = get_system_prompt()  # 获取系统提示词\n    context = context_manager.get_context(group_id)\n    return [{\"role\": \"system\", \"content\": base_prompt}] + context\n```\n\n### 四、消息处理流程\n```python\n@bot.on_group_at_message\nasync def handle_message(event: GroupAtMessage):\n    group_id = event.group_openid\n    user_msg = event.content.replace(\"@机器人\", \"\").strip()\n    \n    # 判断消息类型\n    if is_recruitment_question(user_msg):\n        response = process_recruitment(user_msg, group_id)\n    else:\n        response = process_chat(user_msg, group_id)\n    \n    # 添加表情包\n    if should_add_sticker():\n        response += generate_sticker()\n    \n    # 更新上下文\n    context_manager.add_context(group_id, \"user\", user_msg)\n    context_manager.add_context(group_id, \"assistant\", response)\n    \n    await bot.send_text(event.group_openid, response)\n```\n\n### 五、Token优化策略\n\n1. **分层记忆系统**\n   - 短期记忆：最近3轮对话（存储在内存）\n   - 长期记忆：招新要求（使用向量数据库存储）\n   - 当上下文超过阈值时，调用摘要函数：\n     ```python\n     def summarize_context(context):\n         prompt = \"请用一句话概括以下对话的核心内容:\"\n         return call_deepseek(prompt + str(context), max_tokens=100)\n     ```\n\n2. **关键词触发机制**\n```python\nRECRUITMENT_KEYWORDS = [\"招新\", \"报名\", \"要求\", \"面试\", \"加入\", \"招人\"]\n\ndef is_recruitment_question(text):\n    return any(keyword in text for keyword in RECRUITMENT_KEYWORDS)\n```\n\n### 六、表情包系统设计\n```python\nclass StickerManager:\n    def __init__(self):\n        self.stickers = {\n            \"welcome\": [\"👋\", \"🎉\", \"🤗\"],\n            \"answer\": [\"📚\", \"💡\", \"🧠\"],\n            \"funny\": [\"😂\", \"🐶\", \"🎮\"]\n        }\n    \n    def get_sticker(self, category):\n        return random.choice(self.stickers.get(category, [\"✨\"]))\n    \n    def generate_sticker_response(self, text):\n        if \"哈哈\" in text or \"笑\" in text:\n            return self.get_sticker(\"funny\")\n        if \"谢谢\" in text or \"你好\" in text:\n            return self.get_sticker(\"welcome\")\n        return self.get_sticker(\"answer\")\n```\n\n### 七、部署与维护方案\n\n1. **配置文件结构**\n   ```\n   config/\n     ├── prompts.yaml       # 提示词模板\n     ├── recruitment.md     # 招新要求文档\n     ├── keywords.txt       # 关键词列表\n     └── stickers.json      # 表情包映射\n   ```\n\n2. **扩展点设计**\n   - 添加新功能：在`extensions/`目录创建模块\n   - 修改交互风格：编辑`prompts.yaml`\n   - 增加问答知识：更新`knowledge/`目录文档\n\n3. **监控与日志**\n   ```python\n   class APIMonitor:\n       def __init__(self):\n           self.token_count = 0\n       \n       def log_usage(self, response):\n           self.token_count += response.usage[\"total_tokens\"]\n           if self.token_count > DAILY_LIMIT:\n               disable_chat_mode()\n   ```\n\n### 八、防滥用机制\n\n1. **频率限制**\n```python\nfrom ratelimit import limits, sleep_and_retry\n\n@sleep_and_retry\n@limits(calls=30, period=60)  # 每分钟30次\ndef call_api_safely():\n    return call_deepseek(...)\n```\n\n2. **敏感词过滤**\n```python\nwith open(\"blocked_words.txt\") as f:\n    BLOCKED_WORDS = [line.strip() for line in f]\n\ndef contains_blocked_word(text):\n    return any(word in text for word in BLOCKED_WORDS)\n```\n\n### 九、预设互动示例\n\n**用户**: @机器人 招新有什么要求吗？  \n**机器人**: 咱们实验室招新要求来啦！🎯  \n1. 面向大二大三同学  \n2. 熟悉Python/C++基础  \n3. 每周能投入10+小时  \n详细要求戳：bit.ly/recruit-2024  \n有问题随时问我~ 😊\n\n**用户**: @机器人 讲个笑话吧  \n**机器人**: 为什么程序员分不清万圣节和圣诞节？  \n因为 Oct 31 == Dec 25！😂  \n（二进制冷笑话送给大家~）\n\n### 十、性能优化建议\n\n1. **缓存常用回答**\n```python\nfrom functools import lru_cache\n\n@lru_cache(maxsize=50)\ndef get_cached_answer(question):\n    return call_deepseek(...)\n```\n\n2. **异步处理**\n```python\nasync def async_api_call(messages):\n    loop = asyncio.get_event_loop()\n    return await loop.run_in_executor(None, call_deepseek, messages)\n```\n\n3. **轻量上下文模式**\n```python\ndef light_context_mode(text):\n    return \"简单回答\" if len(text) < 20 else \"详细回答\"\n```\n\n这个设计实现了：\n- 动态上下文管理\n- 精准招新问答\n- 趣味互动能力\n- 高效Token利用\n- 易扩展架构\n\n维护建议：\n1. 定期更新`recruitment.md`招新信息\n2. 每月审查对话日志优化关键词\n3. 使用`APIMonitor`控制成本\n4. 通过`sticker_feedback.csv`收集表情包反馈持续优化\n\n",
  "西南石油大学/灵创实验室/灵创实验室网站更新.md": "\n==灵创2025年招新官网：==\n- [x] 图片背景一下换成视频背景\n- [x] 视频下载到本地\n==灵创作品集网站：==\n- [x] 作品集网站美术作品压缩+水印+禁止下载\n- [x] 作品集cdn换成本地的，更快一点\n- [x] 网页流视频输出可以试一下\n\n\n\n\n\n\n\n\n\n",
  "计算机科普/clash机场三种代理模式科普.md": "\n---\n\n### 1️⃣ `rule`（规则模式）\n\n- **中文理解**：按规则走\n    \n- **工作方式**：\n    \n    - 根据配置文件里的 **规则列表（rules）** 来判断请求走哪条线路。\n        \n    - 每条规则通常指定域名、IP、地理位置或者关键词对应的代理：\n        \n        - 例如 `DOMAIN-SUFFIX,google.com,Proxy` → 访问 google.com 时走代理\n            \n        - `DOMAIN-SUFFIX,example.com,DIRECT` → 访问 example.com 时直连\n            \n- **优点**：\n    \n    - 灵活，可针对不同网站走不同线路。\n        \n    - 节省带宽和延迟。\n        \n- **缺点**：\n    \n    - 规则多时，解析略慢一些。\n        \n\n---\n\n### 2️⃣ `global`（全局代理模式）\n\n- **中文理解**：所有流量都走代理\n    \n- **工作方式**：\n    \n    - 不看规则，所有网络请求都被发送到指定的 **代理服务器**。\n        \n- **优点**：\n    \n    - 配置简单，不需要维护规则。\n        \n    - 对某些被墙网站或应用更友好。\n        \n- **缺点**：\n    \n    - 所有流量都经过代理，可能降低速度。\n        \n    - 国内网站也会走代理，浪费带宽。\n        \n\n---\n\n### 3️⃣ `direct`（全局直连模式）\n\n- **中文理解**：所有流量直连，不走代理\n    \n- **工作方式**：\n    \n    - 忽略所有规则，直接访问目标网站。\n        \n- **优点**：\n    \n    - 速度快，延迟低。\n        \n    - 避免代理服务器的限制。\n        \n- **缺点**：\n    \n    - 无法访问被墙网站。\n        \n    - 所有请求都走直连，规则无效。\n        \n\n---\n\n### 🔹 总结对比\n\n|模式|规则依据|适用场景|\n|---|---|---|\n|`rule`|配置文件规则|兼顾国内外访问速度和被墙网站访问|\n|`global`|忽略规则，全局走代理|全局科学上网，简单直接|\n|`direct`|忽略规则，全局直连|国内访问为主，不需代理|\n\n---\n",
  "计算机科普/CPU利用率科普.md": "CPU 利用率的本质是 **CPU 核心在单位时间内执行非空闲任务（即处于“忙碌”状态）所占时间的比例**。\n\n理解这个本质需要深入以下几个关键点：\n\n1.  **“忙碌”状态的界定：**\n    *   CPU 的核心任务是从内存中获取指令、解码指令、执行指令、存储结果。\n    *   **“忙碌”状态：** 当 CPU 核心正在执行操作系统内核代码或用户程序代码（统称为“非空闲任务”）时，它就处于忙碌状态。它正在处理实际的计算、逻辑判断、数据处理等工作。\n    *   **“空闲”状态：** 当系统中所有可运行的进程/线程都在等待某些事件（如等待用户输入、等待磁盘I/O完成、等待网络数据包、等待定时器到期等）而没有任何任务需要 CPU 立即执行时，操作系统会运行一个特殊的、最低优先级的任务，通常称为 **空闲任务** 或 **空闲循环**。CPU 核心执行这个空闲任务的状态就是空闲状态。此时 CPU 虽然在运行（执行 `HLT` 指令或空循环），但并没有进行任何有意义的计算工作。现代 CPU 在空闲状态通常会降低功耗（进入 C-State）。\n\n2.  **时间片与测量原理：**\n    *   现代操作系统都是多任务操作系统，通过时间片轮转、优先级调度等算法在多个进程/线程之间快速切换 CPU 核心的执行权。\n    *   **测量单位：时间片。** 操作系统内核会周期性地（例如每毫秒或每几毫秒，由系统时钟中断驱动）检查每个 CPU 核心当前正在执行什么任务。\n    *   **统计方法：** 在每个采样时刻点（时钟中断发生时）：\n        *   如果发现 CPU 核心正在执行 **非空闲任务**（用户进程、内核线程、系统调用处理等），就记录该核心在“忙碌”。\n        *   如果发现 CPU 核心正在执行 **空闲任务**，就记录该核心在“空闲”。\n    *   **计算利用率：** 在一个特定的时间窗口内（比如1秒），CPU 利用率就是这个窗口内所有采样点中被标记为“忙碌”的次数占总采样点次数的百分比。例如：\n        *   采样间隔为 10ms (每秒采样100次)。\n        *   在1秒内，某个 CPU 核心有 80 次被采样时处于“忙碌”状态。\n        *   那么这1秒内该核心的 CPU 利用率就是 80%。\n\n3.  **核心概念：时间比例**\n    *   这 80% 的利用率意味着：在这1秒钟的时间里，该 CPU 核心有 800 毫秒（0.8秒）的时间在执行实际的工作（非空闲任务），只有 200 毫秒（0.2秒）的时间在执行无实际计算工作的空闲任务（或者处于低功耗休眠状态）。\n    *   **因此，CPU 利用率的核心本质就是 CPU 核心执行有效工作所占用的时间占总时间的百分比。**\n\n4.  **关键特性与常见误解：**\n    *   **反映的是时间占用率，而非绝对处理能力：** 100% 利用率意味着 CPU 核心在整个时间段内都在忙碌，没有空闲时间。但这**并不一定**意味着它达到了最大理论计算能力（例如，它可能在等待较慢的内存访问）。\n    *   **“忙”的原因多样：** 高利用率可能由计算密集型任务（大量数学运算）、大量系统调用（内核态忙碌）、频繁的中断处理、甚至自旋锁等待（CPU 忙等锁）等引起。工具如 `top`, `perf`, `vmstat` 等可以帮助区分具体原因（用户态 `us`、系统态 `sy`、等待I/O `wa`、软中断 `si`、硬中断 `hi`、窃取 `st`、空闲 `id`）。\n    *   **多核CPU：** 对于拥有多个核心或线程的 CPU，利用率通常可以报告：\n        *   **每个核心的利用率：** 最精确。\n        *   **所有核心的平均利用率：** 例如一个4核CPU平均利用率75%，可能意味着3个核心100%忙碌，1个核心空闲；也可能意味着4个核心都75%忙碌。\n        *   **总体利用率：** 所有核心忙碌时间的总和除以（核心数 * 总时间）。例如，4核CPU在1秒内，所有核心忙碌时间总和为3秒，则总体利用率为 3 / (4 * 1) = 75%。\n    *   **I/O 等待 (`wa`) 的特殊性：** 当进程因为等待磁盘I/O而阻塞时，CPU 核心会切换到其他可运行任务或进入空闲状态。这段时间通常被单独统计为 `wa`（I/O 等待）。严格来说，`wa` 高的时间段里 CPU 核心可能处于忙碌（执行其他任务）或空闲（没有其他任务）状态，但它反映了 CPU 因等待I/O而未能有效利用的潜在时间。`wa` 本身不计入 `us+sy` 的利用率计算，但高 `wa` 通常意味着系统瓶颈在I/O而非CPU计算能力。\n    *   **虚拟化环境：** 在虚拟机中，虚拟机监控器（Hypervisor）看到的宿主机的 CPU 利用率反映的是物理 CPU 的忙碌程度。虚拟机内部看到的 CPU 利用率反映的是分配给它的虚拟 CPU 时间的忙碌程度。如果宿主机物理 CPU 饱和，即使虚拟机内部显示利用率不高，其性能也可能受影响（`st` 窃取时间高）。\n\n**总结：**\n\nCPU 利用率的本质是一个 **时间占比的度量**。它精确地衡量了 **CPU 核心实际执行非空闲任务（执行用户代码或内核代码）的时间占总观测时间的百分比**。理解这个百分比背后代表的是 CPU 核心忙碌工作的时间片段，是掌握 CPU 性能分析和系统瓶颈诊断的基础。100% 利用率意味着 CPU 核心全程无休，但这不一定是性能极限，也可能是效率瓶颈的信号；而低利用率通常意味着 CPU 有充足的闲置计算能力。",
  "计算机科普/CVM术语科普.md": "CVM 通常指 云服务器（Cloud Virtual Machine），是云计算服务中的一种基础计算资源。它通过虚拟化技术，将物理服务器分割成多个独立的虚拟服务器，用户可像使用本地服务器一样远程管理和使用，无需自行购买和维护硬件设备。\n \n其核心特点包括：\n \n- 弹性伸缩：可根据业务需求灵活调整 CPU、内存、存储等配置。\n- 按需付费：按使用时长或资源配置计费，降低初期投入成本。\n- 高可用性：依托云服务商的基础设施，通常具备多副本存储、故障自动迁移等能力。\n- 易管理性：通过云平台控制台可便捷进行开关机、重装系统、配置网络等操作。\n \n在实际应用中，CVM 广泛用于搭建网站、部署应用程序、运行数据库、进行大数据分析等场景。不同云服务商（如腾讯云、阿里云等）对其的具体命名可能略有差异，但核心功能一致。",
  "计算机科普/IDEA专业版和社区版的区别和特点.md": "- **许可证与价格**  \n    社区版：基于开源代码，完全免费，支持自由使用与修改。  \n    专业版：需购买许可证，属于付费版本。\n    \n- **语言支持**  \n    社区版：聚焦 JVM 语言，如 Java、Kotlin、Groovy、Scala。  \n    专业版：覆盖多语言生态，除 JVM 语言外，还支持 PHP、JavaScript、TypeScript、Python、Ruby、Go、SQL 等，适配多语言与全栈开发。\n    \n- **框架支持**  \n    社区版：仅支持 JavaFX、Swing 等基础 Java 框架。  \n    专业版：涵盖广泛场景，Web 开发（Spring、JSF、Struts 等）、移动开发（Android）、企业开发（J2EE、Spring Boot、Micronaut、Quarkus 等）。\n    \n- **数据库工具**  \n    社区版：无内置工具，需借助 DBeaver、DataGrip 等外部工具操作数据库。  \n    专业版：内置数据库管理功能，支持直接查看、运行 SQL 脚本、导出数据等。\n    \n- **DevOps 和云支持**  \n    社区版：对现代 DevOps（Docker、Kubernetes）及云平台（AWS、Google Cloud）支持有限。  \n    专业版：集成 DevOps 工具链，深度兼容主流云平台。\n    \n- **版本控制系统（VCS）**  \n    社区版：支持 Git、Mercurial、SVN 等基础版本控制。  \n    专业版：强化 VCS 能力，新增 Perforce 支持，提供更便捷的版本历史查看、差异对比、回滚功能。\n    \n- **构建工具**  \n    社区版：支持 Maven、Gradle、Ant 等常见构建工具。  \n    专业版：拓展至 sbt、npm、yarn 等更多工具，适配多元开发场景。\n    \n- **插件**  \n    社区版：需手动按需安装插件。  \n    专业版：预装丰富实用插件，开箱即用 。",
  "计算机科普/IT行业的A端B端C端术语解释.md": " IT 行业中，**A 端、B 端、C 端**，是按照业务服务对象的不同来划分\n\n---\n\n## 1. C 端（Customer/Consumer）\n\n- **对象**：普通个人用户，即消费者。\n- **特点**：\n    - 用户量大，但单个用户的付费能力相对有限。\n    - 对产品的体验、易用性、趣味性和性价比要求较高。\n    - 市场竞争激烈，获客成本高，用户流失率也较高。\n- **典型产品**：\n    - 微信、抖音、美团、淘宝等面向大众的互联网应用。\n    - 常见的互联网 App 和电商平台，主要服务于个人消费者。\n\n---\n\n## 2. B 端（Business）\n\n- **对象**：企业或组织客户。\n- **特点**：\n    - 用户数量相对少，但单个客户的价值很高。\n    - 注重功能的完整性、效率、稳定性、安全性和售后支持。\n    - 产品通常要和企业的业务流程深度结合，销售模式更偏向“解决方案”。\n- **典型产品**：\n    - 企业管理系统（ERP、CRM、OA）、云计算服务（阿里云、腾讯云）、SaaS 工具（钉钉、飞书）。\n    - 企业采购、供应链、财务软件等。\n\n---\n\n## 3. A 端（Administration/Government）\n\n- **对象**：政府机构或事业单位。\n- **特点**：\n    - 强调合规性、稳定性和数据安全。\n    - 客户对服务的专业性、长期支持能力和安全保密性要求极高。\n    - 项目型特征明显，常涉及“政务信息化”“智慧城市”等建设。\n- **典型产品**：\n    - 政务大数据平台、智慧城市解决方案、公安/税务/教育信息化系统。\n    - 例如国家的社保系统、政府政务服务平台。\n\n---\n\n## 4. 三者的区别总结\n\n- **C 端**：面对大众 → 重视用户体验和规模效应。\n- **B 端**：面对企业 → 重视效率、功能深度、可持续合作。\n- **A 端**：面对政府 → 重视合规、安全、稳定、长期合作。\n\n可以简单理解为：\n\n- **C 端是“零售”**，靠规模和用户体验取胜。\n- **B 端是“批发”**，客户少但客单价高，需要深度定制。\n- **A 端是“定制工程”**，政策导向明显，更看重安全和合规。\n\n---\n",
  "计算机科普/MCU术语科普.md": "微控制单元（Microcontroller Unit）：这是电子工程领域的专业术语，又称“单片机”。它是一种将中央处理器（CPU）、存储器、输入/输出接口等功能集成在一块芯片上的微型计算机，广泛应用于智能家居、汽车电子、工业控制等领域。",
  "计算机科普/pwn术语科普.md": "“pwn” 是网络安全领域的常用术语，核心指 通过利用程序漏洞（如缓冲区溢出、内存泄漏等）获取目标系统的控制权，比如执行任意代码、提升权限甚至完全掌控设备。\n \n它起源于“own”（意为“拥有、控制”）的拼写变体，早期在黑客社区和安全竞赛（如CTF）中流行。常见场景包括：\n \n- 对存在漏洞的软件、服务器进行攻击；\n- CTF竞赛中的“pwn题”，要求参赛者找出并利用程序漏洞解决问题。\n \n简单说，pwn的本质就是“找到漏洞并借此控制目标”。",
  "计算机科普/sim卡作用及原理.md": "# 什么是 SIM 卡（从专业角度解释）\n\n**SIM** 是 _Subscriber Identity Module_ 的缩写（中文常译为“用户身份模块”）。严格来说，现代移动设备里常见的有两类相关的东西：**物理 SIM / 晶片卡（UICC）** 和 **嵌入式 SIM（eSIM / eUICC）**。无论形式如何，其核心作用是：**为移动用户提供唯一身份、储存认证凭证与少量用户数据，并参与网络认证与安全通信**。\n\n---\n\n## 组成与物理/逻辑规范\n\n- **物理外形**：有标准的触点金属面（按 ISO/IEC 7816），常见尺寸为全尺寸/mini/micro/nano，近年还有不可拆卸的 **eSIM（嵌入式）**。\n- **逻辑规范**：\n    - **UICC**（Universal Integrated Circuit Card）：现代 SIM 的正式名称，能运行多种应用（USIM、ISIM 等）。\n    - **USIM**：用于 3G/4G/5G 的用户应用；比早期 GSM 的 SIM 功能更强。\n    - **Java Card**：很多 SIM 使用 Java Card 平台来运行小型应用（applet）。\n- **文件系统**：SIM 内部有一套层次化文件系统（MF → DF → EF），用于存放 IMSI、Ki、网络参数、联系人、短信等。\n\n---\n\n## 关键数据与标识\n\n- **IMSI（International Mobile Subscriber Identity）**：国际移动用户识别码，用于在运营商网络中唯一标识用户。通常由 MCC（国家码）+ MNC（网络码）+ MSIN（用户号）构成。\n- **Ki（密钥）**：设备和运营商共享的长期对称密钥（通常只存储在 SIM 与运营商的认证中心，不外泄），用于生成认证和加密用的临时密钥。\n- **ICCID（Integrated Circuit Card ID）**：SIM 卡的唯一序列号（印在卡上，用于标识卡片本身）。\n- **PIN/PUK**：用户可设置的 PIN（解锁码），PUK 用于在 PIN 输错多次后解锁。\n\n---\n\n## 工作原理（以移动网络认证为核心）\n\n1. **发起连接**：设备开机并向基站/网络发出接入请求，同时提供 IMSI（或临时标识）。\n2. **挑战—应答（Challenge-Response）机制**：\n    - 网络（认证中心）生成一个随机数 **RAND**，并把它发送给设备（通过基站）。\n    - SIM 使用内部的 **Ki** 与 RAND 以及特定算法（GSM 时代有 COMP128，后续有 A3/A8、Milenage 等）计算出应答值 **RES**（或 SRES），并生成会话密钥（如 Kc、CK/IK）。\n    - 网络端也用相同的 Ki 与 RAND 计算预期应答并比对：若匹配，认证通过。\n3. **密钥派生**：认证成功后产生的会话密钥用于语音/数据的加密（无线链路加密），并用于随后与核心网的安全交互。\n4. **更高级的 AKA（Authentication and Key Agreement）**：在 3G/4G/5G 中使用更强的 AKA 流程，包含防重放、防伪造的校验（如 AUTN）并生成更复杂的加密/完整性密钥（CK/IK、KASME 等）。\n\n---\n\n## 功能与扩展能力\n\n- **身份与计费**：运营商依据 IMSI 识别用户并计费。\n- **安全存储**：存储 Ki、网络参数、APN、联系人、短信（旧式）等。\n- **SIM Toolkit（STK）**：运营商/服务可下发应用命令（如菜单、主动发起短信/拨号、USSD 等），常见于运营商增值服务。\n- **远程管理（OTA）**：运营商可通过 OTA（Over-The-Air）向 SIM 下发配置、更新应用或改变 PIN 策略。\n- **多应用/多配置（eUICC）**：eSIM 支持在同一芯片上存放多个运营商配置文件，实现远程下载/切换（GSMA 的远程配置规范）。\n\n---\n\n## 安全性设计\n\n- **物理与逻辑硬化**：SIM 作为安全元件（secure element），具备防篡改与抗攻击设计；关键材料（如 Ki）不能被设备直接读取。\n- **用户认证**：存在用户 PIN，及网络端的挑战-应答认证。\n- **现代算法与协议**：从早期的 COMP128 演进到 Milenage、AKA、5G 新的改进，增强抗撞库与抗中间人能力。\n- **弱点**：历史上某些算法/实现被攻破或泄露（如早期 COMP128），但运营商逐步升级算法与使用更安全的 eSIM/AKA 方案。\n\n---\n\n## 实际应用场景与趋势\n\n- **传统手机**：物理 SIM 卡仍然广泛使用，支持换卡保号（携号转网）。\n- **双/多 SIM 设备**：允许同时插入两张 SIM 或混合物理 + eSIM 的组合，适合分工（工作/私人、数据/语音）。\n- **物联网（IoT）与 M2M**：大量设备使用 M2M SIM 或 eSIM/embedded 模块，便于远程部署与管理。\n- **eSIM 的流行**：便于运营商配置文件的远程下发，减少物理卡流通，也利于设备密封设计（如手表、物联网传感器）。\n\n---\n\n## 简短示例：GSM 认证流程（逐步）\n\n1. 设备向网络报告 IMSI（或临时标识）。\n2. 网络生成 RAND，并把 RAND 与预期应答（由运营商的认证中心计算）发送给移动交换中心（MSC）。\n3. MSC 将 RAND 发给设备；设备的 SIM 用 RAND + Ki 计算 RES 并返回。\n4. MSC 比较 RES 与期望值；若匹配则允许接入，并使用派生密钥加密后续无线通信。\n\n---\n\n## 小结（一句话）\n\nSIM（或更一般的 UICC / eUICC）是一个小型但受保护的智能卡 / 安全芯片，**存储用户身份与加密凭证，通过挑战—应答和密钥派生机制对用户进行网络认证并保护移动通信的安全**，同时支持少量用户数据与运营商增值服务（如 SIM Toolkit、OTA、eSIM 配置等）。\n\n如果你想，我可以进一步：\n\n- 画一张简单的认证流程图（步骤图）；\n- 或者针对 **eSIM 远程配置**、**SIM 文件系统结构（MF/DF/EF）**、或**具体的 AKA 算法（Milenage）** 做更深的技术说明。要哪一种直接告诉我。",
  "计算机科普/wan口和lan口的区别与特点.md": "\n\n**一句话总结：**\n\n*   **WAN口：** 连接**外部**网络（通常是互联网）。\n*   **LAN口：** 连接**内部**网络设备。\n\n---\n\n## WAN口 (广域网端口)\n\n1.  **功能：**\n    *   主要负责**接入互联网**或**连接更大的外部网络**（如公司总部的网络）。\n    *   它是路由器与**互联网服务提供商**网络之间的桥梁。\n    *   接收来自ISP（如电信、联通、移动）的信号（通过光猫、调制解调器等设备）。\n2.  **特点：**\n    *   **数量少：** 家用路由器通常只有**1个**WAN口。企业级路由器可能有多个用于负载均衡或备份链路。\n    *   **“对外”角色：** 面向外部世界，是内部网络访问互联网的唯一（或主要）出口。\n    *   **IP地址：** 通常获取的是**公网IP地址**（由ISP动态分配或静态配置），或者是运营商网络内部的私有IP地址（在光猫拨号的情况下）。这个地址在互联网上是可路由的（或者至少能被ISP网络识别）。\n    *   **数据传输方向：** 处理所有**进出互联网**的数据流。\n    *   **物理位置：** 在路由器背面，通常与LAN口分开，并用**不同颜色**（常见黄色、蓝色或灰色）或明确标注`WAN`/`Internet`字样标识。\n    *   **连接对象：** 连接到**光猫、调制解调器**或上级网络设备（如另一个路由器的LAN口，此时该路由器工作在接入模式而非路由模式）。\n    *   **安全边界：** 位于内部网络和外部不可信网络之间，是防火墙防护的重点区域。\n\n---\n\n## LAN口 (局域网端口)\n\n1.  **功能：**\n    *   负责连接**内部网络**中的各种设备。\n    *   为这些设备提供**本地网络连接**，使它们能够相互通信（如电脑传文件给打印机、手机投屏到电视）并**共享同一个互联网出口（WAN口）**。\n2.  **特点：**\n    *   **数量多：** 家用路由器通常有**2-8个**LAN口。交换机则提供更多的LAN口用于扩展。\n    *   **“对内”角色：** 面向内部网络设备，构建本地局域网。\n    *   **IP地址：** 路由器上的LAN口本身有一个**私有IP地址**（通常是`192.168.x.x`, `10.x.x.x`, `172.16.x.x - 172.31.x.x`范围，如常见的`192.168.1.1`或`192.168.0.1`）。它作为内部网络的**网关**。\n    *   **IP分配：** 路由器通过**DHCP服务器**功能（通常默认开启），**自动**为连接到LAN口的设备分配私有IP地址（在同一个子网内）。\n    *   **数据传输方向：** 处理**局域网内部设备之间**以及**设备到路由器/互联网**的数据流。\n    *   **物理位置：** 在路由器背面，通常集中在一起，用**相同颜色**（常见黄色）标注`LAN`或`1, 2, 3, 4...`。\n    *   **连接对象：** 连接**电脑、打印机、网络存储、游戏机、智能电视、其他交换机**等**本地设备**。\n    *   **网络范围：** 构成一个**广播域**，设备在同一个子网内，可以直接通信（二层交换）。\n\n---\n\n## 关键对比表\n\n| 特性         | WAN口 (广域网端口)                     | LAN口 (局域网端口)                              |\n| :----------- | :------------------------------------- | :---------------------------------------------- |\n| **功能**     | 连接外部网络 (互联网/上级网络)         | 连接内部网络设备                                |\n| **角色**     | “对外”                                 | “对内”                                          |\n| **数量**     | 通常1个 (家用)                         | 通常多个 (2-8个，家用)                          |\n| **IP地址**   | 公网IP (或运营商私有IP)                | 私有IP (作为网关，如 `192.168.1.1`)             |\n| **IP分配**   | 由ISP分配 (动态/静态)                  | 由路由器的DHCP服务器分配给内部设备 (私有IP)     |\n| **数据传输** | 进出互联网的数据                       | 局域网内部设备间通信 + 设备到路由器/互联网的数据 |\n| **连接对象** | 光猫、调制解调器、上级路由器/网络      | 电脑、打印机、NAS、游戏机、电视、AP、交换机等   |\n| **物理标识** | 常不同颜色 (黄/蓝/灰)，标 `WAN/Internet` | 常统一颜色 (黄)，标 `LAN` 或 `1, 2, 3, 4...`    |\n| **安全位置** | 内部网络与外部网络边界 (防火墙防护点)  | 内部可信网络区域                                |\n\n---\n\n## 总结与常见场景\n\n*   **正确连接是上网的基础：** 宽带入户线（来自光猫/调制解调器）**必须**插在路由器的**WAN口**上。你的电脑、电视等设备则插在**LAN口**上。\n*   **混淆后果：** 如果把宽带线错插到LAN口，路由器就无法从ISP获取有效的网络配置，导致整个内部网络无法访问互联网。\n*   **扩展网络：** 如果你需要连接超过路由器LAN口数量的设备，可以将一个**交换机**连接到路由器的任一LAN口上，交换机提供的更多端口也属于LAN端口。\n*   **无线连接：** 路由器的Wi-Fi功能本质上是创建了一个“无线LAN口”，手机、笔记本等无线设备通过Wi-Fi连接后，其角色和功能等同于插在物理LAN口上的设备。\n\n简单来说，记住：**WAN口是进水管（从外面引水进来），LAN口是分水管和水龙头（把水分配到各个需要的地方）**",
  "计算机科普/WiFi和蓝牙的异同.md": "蓝牙和Wi-Fi 都是利用无线电波进行短距离无线通信的技术，并且都工作在2.4 GHz频段（部分Wi-Fi也工作在5 GHz或6 GHz），但它们的设计目标、技术实现、应用场景和性能特点有着**根本的区别**。\n\n主要区别：\n\n1.  **设计目的和应用场景：**\n    *   **蓝牙：** 主要设计用于**短距离、低功耗、点对点或点对多点**的设备间连接。目的是**取代线缆**，方便各种小型设备之间进行简单数据交换或控制。\n        *   **典型应用：** 连接无线耳机/音箱、鼠标/键盘、智能手表、健康追踪器、打印机、车载系统、智能家居设备（如灯泡、传感器）之间的简单通信等。\n    *   **Wi-Fi：** 主要设计用于**构建无线局域网**，提供**高速互联网接入**和**本地网络资源（如文件、打印机）共享**。目的是实现**高带宽的网络接入**。\n        *   **典型应用：** 将笔记本电脑、手机、平板、智能电视、游戏机等设备连接到互联网或家庭/办公室局域网；实现设备间的高速文件传输、媒体流传输。\n\n2.  **覆盖范围：**\n    *   **蓝牙：** 典型覆盖范围较小，一般在 **10米** 左右（Class 1设备可达100米，但较少见）。注重近距离连接。\n    *   **Wi-Fi：** 覆盖范围较大，典型的家用路由器覆盖范围可达 **几十米**（受墙壁、干扰等影响），甚至可以通过中继器扩展。\n\n3.  **数据传输速率：**\n    *   **蓝牙：** 速率**相对较低**，且不同版本差异大。\n        *   经典蓝牙：早期版本约1-3 Mbps，较新的蓝牙5.x版本理论可达2-3 Mbps（实际应用如音频传输用不到这么高）。\n        *   低功耗蓝牙：专为极低功耗设计，数据传输速率更低（几十到几百Kbps），但连接建立速度快。\n    *   **Wi-Fi：** 速率**非常高**，且随着标准演进不断提升。\n        *   802.11n：数百Mbps\n        *   802.11ac：Gbps级别\n        *   802.11ax：多Gbps级别\n        *   主要用于传输大量数据（如高清视频、大文件下载）。\n\n4.  **功耗：**\n    *   **蓝牙：** 尤其**低功耗蓝牙**设计初衷就是**极低功耗**，非常适合电池供电的小型设备（如传感器、耳机、手表），可以持续工作数月甚至数年。\n    *   **Wi-Fi：** 功耗**相对较高**。虽然也有针对物联网设备的低功耗Wi-Fi标准，但总体上维持Wi-Fi连接和传输数据消耗的电量远高于蓝牙（尤其是BLE）。频繁使用Wi-Fi会显著消耗手机等设备的电池。\n\n5.  **网络拓扑结构：**\n    *   **蓝牙：** 支持多种拓扑：\n        *   **点对点：** 两个设备直接连接（如手机连耳机）。\n        *   **广播：** 一个设备发送，多个设备接收（如Beacon）。\n        *   **Mesh网络：** 多个设备组成网状网络，扩展覆盖范围和可靠性（主要用于智能家居、楼宇自动化）。\n    *   **Wi-Fi：** 主要采用**星型拓扑**。\n        *   所有设备（客户端）都连接到一个中心节点（无线路由器或接入点）。\n        *   客户端之间通常需要通过接入点才能通信（除非支持Wi-Fi Direct点对点直连）。\n\n6.  **复杂性和成本：**\n    *   **蓝牙：** 协议栈相对**简单**，硬件实现**成本较低**，易于集成到小型、低成本的设备中。\n    *   **Wi-Fi：** 协议栈**复杂**，硬件实现**成本相对较高**，需要更强的处理能力和内存。\n\n7.  **频段和干扰：**\n    *   两者都工作在2.4 GHz ISM频段，因此**存在相互干扰的可能**。现代设备通常有机制（如自适应跳频）来减轻干扰，但在拥挤的无线环境中（如公寓楼、办公室），干扰仍可能影响性能（尤其是蓝牙音频的稳定性）。\n\n**总结：**\n\n| 特性         | 蓝牙                   | Wi-Fi                  |\n| :--------- | :------------------- | :--------------------- |\n| **核心目标**   | **短距设备连接**（取代线缆）     | **无线局域网接入**（高速上网/资源共享） |\n| **典型应用**   | 耳机、鼠标、传感器、手环、IoT小设备  | 笔记本上网、手机上网、流媒体、文件共享    |\n| **覆盖范围**   | 短（~10米）              | 中长（几十米）                |\n| **数据速率**   | **低**（Kbps - 低 Mbps） | **高**（百Mbps - 多 Gbps）  |\n| **功耗**     | **非常低**（尤其是BLE）      | **相对较高**               |\n| **拓扑结构**   | 点对点、广播、Mesh          | 星型（中心是AP/路由器）          |\n| **复杂性/成本** | 低                    | 高                      |\n| **频段**     | 2.4 GHz（主要）          | 2.4 GHz, 5 GHz, 6 GHz  |\n",
  "计算机科普/x64，x86和amd64区别.md": "x64、x86、amd64 都是与计算机处理器架构相关的术语，它们的区别主要体现在架构类型、位数、兼容性等方面，具体如下：\n\n### 1. x86：32 位处理器架构的统称\n\n- **核心定义**：x86 是英特尔早期推出的 32 位处理器架构（如 8086、80386 等）的统称，后来扩展到 32 位计算领域，是目前最广泛使用的 32 位架构标准。\n\n- **特点**：支持的最大内存地址空间为 4GB（受 32 位地址总线限制），广泛应用于早期个人电脑和服务器。\n\n- **兼容性**：所有 32 位 x86 处理器都遵循这一架构，软件兼容性极强。\n\n### 2. x64 与 amd64：64 位处理器架构的不同称呼\n\n- **核心关系**：两者本质上是同一架构 ——amd64 是 AMD 公司最早提出的 64 位扩展架构（在 x86 基础上扩展为 64 位），英特尔后来采纳了这一架构并称之为 x64，因此两者没有技术差异，只是不同厂商的命名方式。\n\n- **特点**：\n\n- 支持 64 位地址总线，理论上可支持最大 16EB（1EB=1024PB）内存，远超 32 位架构的 4GB 限制。\n\n- 向下兼容 32 位 x86 软件，兼顾旧有应用。\n\n- **应用**：目前主流的处理器（如英特尔的酷睿系列、AMD 的锐龙系列）均基于这一 64 位架构，是现代计算机的标准架构。\n\n### 总结：核心区别\n\n|   |   |   |   |\n|---|---|---|---|\n|术语|位数|架构来源|本质差异|\n|x86|32 位|英特尔早期 32 位架构标准|32 位计算基础|\n|amd64|64 位|AMD 提出的 64 位扩展架构|同属 64 位架构，仅命名不同|\n|x64|64 位|英特尔对 amd64 架构的称呼|同属 64 位架构，仅命名不同|\n\n简单来说：x86 是 32 位架构，x64/amd64 是 64 位架构（两者等价，名称不同）。",
  "计算机科普/光纤和网线的特点和区别.md": "\n## 一、 核心区别：传输原理\n\n1.  **光纤 (Fiber Optic Cable):**\n    *   **原理:** 利用光脉冲在极细的玻璃或塑料纤维中进行传输。\n    *   **信号:** 光信号（激光或LED）。\n    *   **介质:** 玻璃纤维芯（核心）和包层（折射率不同，实现全反射）。\n\n2.  **网线 (双绞线 - Twisted Pair Cable):**\n    *   **原理:** 利用电信号在相互缠绕的铜线中进行传输。\n    *   **信号:** 电信号。\n    *   **介质:** 铜导体（通常为4对双绞线）。\n\n## 二、 关键特点对比\n\n| 特性             | 光纤 (Fiber Optic)                                     | 网线/双绞线 (Twisted Pair)                             |\n| :--------------- | :----------------------------------------------------- | :----------------------------------------------------- |\n| **传输原理**     | **光信号**                                             | **电信号**                                             |\n| **传输介质**     | 玻璃纤维芯 + 包层                                      | 铜线                                                   |\n| **带宽/速度**    | **极高**。理论上可达Tbps级别，远超双绞线。常用10Gbps, 40Gbps, 100Gbps甚至更高。 | **相对较低**。受限于铜线物理特性（趋肤效应、串扰）。常用1Gbps, 10Gbps（短距离）。 |\n| **传输距离**     | **非常远**。单模光纤可达几十甚至上百公里（无需中继）。多模光纤可达几百米到几公里。 | **较短**。Cat5e/Cat6：100米（千兆）。Cat6a/Cat7：100米（万兆）。距离越长，信号衰减和失真越严重。 |\n| **抗干扰能力**   | **极强**。光信号不受电磁干扰、无线电频率干扰影响。可在强电磁环境（如工厂、医院）或雷暴天气下稳定工作。 | **较弱**。铜线是导体，易受电磁干扰、串扰影响。需要屏蔽层（STP/FTP）在干扰环境下改善性能，但成本增加。 |\n| **安全性**       | **高**。光信号不易被窃听（需要物理接入并截断光纤，且操作易被发现）。不辐射电磁信号。 | **较低**。电信号可能被电磁感应方式窃听（有一定难度）。铜线会辐射微弱电磁信号。 |\n| **尺寸与重量**   | **更细、更轻**。相同容量下，光纤比铜缆细得多、轻得多。 | **较粗、较重**。尤其是高类别带屏蔽的线缆。            |\n| **成本**         | **设备成本高**。光模块、光纤收发器、光纤交换机端口价格远高于铜口设备。<br>**线缆成本中等**。 | **设备成本低**。网卡、交换机端口非常普及且便宜。<br>**线缆成本中等偏低**（低类别线）。但高类别屏蔽线成本也较高。 |\n| **安装与维护**   | **技术要求高**。光纤端接（熔接、研磨）需要专业工具和技能。弯曲半径要求严格，过度弯折易断芯。 | **相对简单**。RJ45水晶头压接容易学习，工具普及。允许更大的弯曲半径，更耐弯折。 |\n| **连接器**       | LC, SC, ST, FC, MTP/MPO 等                             | RJ45 (8P8C)                                            |\n| **功耗**         | **较低**。光模块通常功耗低于同等速率电口。             | **较高**。尤其在高速率、长距离传输时，驱动电信号需要更大功率。 |\n| **主要类型**     | **单模光纤：** 细芯（~9µm），单束光，超长距离，高速。<br>**多模光纤：** 粗芯（50µm/62.5µm），多束光，中短距离，性价比高。 | **非屏蔽双绞线：** UTP（最常见），无屏蔽层，成本低。<br>**屏蔽双绞线：** STP/FTP/SFTP 等，带屏蔽层，抗干扰好，成本高。<br>**类别：** Cat5e (千兆), Cat6 (千兆/短距万兆), Cat6a (万兆), Cat7/7a/8 (更高性能) |\n| **典型应用场景** | 骨干网、城域网、数据中心互联、长距离传输、高干扰环境、高带宽需求（视频、云计算、存储网络）、FTTH/FTTx入户。 | 局域网接入层（电脑到交换机）、电话系统、监控系统（POE供电）、家庭网络、办公室布线、短距离设备互联。 |\n\n## 三、 总结\n\n*   **选择光纤当：**\n    *   你需要**极高的带宽**（10Gbps以上）。\n    *   你需要**超长的传输距离**（几百米到几十公里）。\n    *   你在**强电磁干扰**环境中。\n    *   你对**安全性**要求非常高。\n    *   你需要**节省空间和减轻重量**（如数据中心）。\n    *   你需要**更低的传输延迟**（虽然差异很小，但对超低延迟场景重要）。\n    *   你**不差钱**（尤其是一次性投入的设备成本）。\n\n*   **选择双绞线当：**\n    *   你的需求是**千兆或万兆（短距离）**。\n    *   传输距离在**100米以内**。\n    *   环境**电磁干扰较小**。\n    *   你对**成本非常敏感**（尤其是设备端口成本）。\n    *   你需要**简单易行的安装和维护**。\n    *   你需要为设备提供**PoE供电**（目前光纤无法直接供电）。\n    *   应用场景是**终端设备接入**（电脑、IP电话、摄像头、AP等）。\n\n**简单来说：光纤是“高速公路”，速度快、距离远、容量大、成本高、建设维护复杂；双绞线是“城市道路”，灵活方便、覆盖广、成本低、但速度和距离有限。** 现代网络通常是两者的结合：光纤做骨干和长距离互联，双绞线做最后100米的接入。",
  "计算机科普/多模态大模型识别图片，视频，音频原理.md": "目前的多模态大语言模型（MLLM，如GPT-4V, Gemini, LLaVA等）识别图片、视频、音乐等二进制文件的过程，可以概括为一个 “翻译-理解-对话” 的流程。\n\n其核心思想是：将非文本的二进制数据（图片、视频、音频）转换成一种模型能够理解的“通用语言”（即数值向量/特征向量），然后在这个统一的向量空间里进行理解和生成。\n\n下面我们分步骤详细解释这个过程：\n\n核心步骤概述\n\n1. 预处理与编码（Encoding）： 使用专门的编码器（Encoder）将二进制文件转换为数字特征向量。\n2. 对齐与融合（Alignment & Fusion）： 将这些特征向量与文本的向量空间进行对齐，并融合成一个统一的表示。\n3. 理解与推理（Understanding & Reasoning）： 大语言模型（LLM）核心基于融合后的特征进行理解和推理。\n4. 解码与生成（Decoding & Generation）： LLM核心生成文本响应，完成对话或任务。\n\n为了让您更直观地理解这个复杂流程，我绘制了以下示意图，它展示了多模态处理的核心“翻译-理解”管道：\n\n```mermaid\nflowchart TD\nA[输入<br>非文本模态] --> B[专用编码器<br>（如ViT, CLIP-ViT）]\nB --> C[特征向量<br>（数据的“通用语言”）]\nC --> D[与大语言模型交互<br>（作为前缀/软提示）]\n    \nE[输入<br>文本指令] --> F[文本编码器<br>（如CLIP-Text, BPE）]\nF --> G[文本令牌向量]\n    \nD & G --> H[大语言模型核心<br>（如Transformer）]\n    \nH --> I[理解与推理<br>在统一语义空间完成]\n    \nI --> J[文本解码器]\nJ --> K[输出<br>文本响应]\n```\n\n---\n\n分模态详细说明\n\n尽管流程相似，但不同模态的“编码器”各有特点。\n\n1. 图像（Image）识别\n\n这是最成熟的多模态应用。\n\n· 编码器（Encoder）：\n  · 卷积神经网络（CNN）：早期模型使用，如ResNet，能有效提取图像的局部特征（如边缘、纹理）。\n  · 视觉Transformer（ViT）：当前主流方法。将图像切割成一个个图像块（Patches），然后像处理文本词汇一样处理这些图像块，通过自注意力机制捕捉全局关系。CLIP模型的图像编码器（通常是ViT）是许多MLLM的基石。\n· 具体流程：\n  1. 分块与编码：将输入图像分割成固定大小的图块，通过视觉编码器（如ViT）转换成一系列图像特征向量。每个向量代表了图像的一部分信息。\n  2. 投影对齐：将这些图像特征向量通过一个投影层（Projection Layer） 映射到文本向量所在的高维空间。这样，”猫的图片特征“和文本“猫”这个词在向量空间中的位置就会很接近。\n  3. 送入LLM核心：将这些对齐后的图像向量与文本指令的向量拼接在一起，作为一个整体的“提示（Prompt）”输入给大语言模型（LLM）。\n  4. 理解生成：LLM像处理文本序列一样，同时“看”着这些图像特征和文本指令，理解其间的关联，并生成对应的文本回复（例如描述图像、回答问题等）。\n\n5. 视频（Video）识别\n\n视频可以看作是带时间序列的图像（帧）和音频的组合。\n\n· 编码器（Encoder）：\n  · 视觉部分：使用图像编码器（如ViT）对视频关键帧进行采样编码。\n  · 时序部分：为了理解动作和剧情变化，需要引入能捕捉时间信息的模型，如：\n    · 3D-CNN：直接在时空维度上处理视频帧。\n    · 时序Transformer：在编码后的帧特征之上，增加一层注意力机制来建模帧与帧之间的关系。\n  · 音频部分：有独立的音频编码器（见下文）。\n· 具体流程：\n  1. 帧采样：从视频中均匀或策略性地抽取若干帧（如每秒1帧或关键帧）。\n  2. 提取视觉特征：用图像编码器为每一帧提取特征向量。\n  3. 建模时序关系：使用时序模型（如时序Transformer）处理这些帧特征序列，得到一个既能表达每帧内容又能表达动作变化的视频整体特征。\n  4. （可选）融合音频特征：同时处理音频轨道，将音频特征与视频视觉特征融合。\n  5. 对齐与生成：之后的步骤与图像处理一致：将融合后的特征投影到文本空间，与问题文本拼接，送入LLM生成回答。\n\n6. 音乐/音频（Audio）识别\n\n音频处理主要有两个方向：语音识别和音频事件识别。\n\n· 编码器（Encoder）：\n  · 语音识别（ASR）：通常先使用Whisper等专用语音识别模型，直接将语音转写成文本，然后将文本送入LLM。这是一种间接但非常高效的方式。\n  · 通用音频识别：对于音乐、音效、环境声等，需要直接处理音频信号：\n    · 首先将时域上的音频波形（Waveform）通过傅里叶变换等转换成频谱图（Spectrogram），这是一种图像的视觉表示。\n    · 然后使用类似图像编码器（如ViT） 来处理频谱图，将其编码为特征向量。\n· 具体流程：\n  1. 路径选择：如果是语音，优先用ASR模型转文本；如果是非语音音频，则转为频谱图。\n  2. 特征提取：\n     · 语音路径：输出直接是文本Tokens。\n     · 音频路径：输出是频谱图特征向量。\n  3. 投影与融合：音频路径的特征向量被投影到文本空间，与问题文本拼接。\n  4. 理解与生成：LLM接收处理后的信息。例如，你问“这是什么音乐？”，LLM结合音频特征和其知识库，可能回答“这是贝多芬的《致爱丽丝》”。\n\n---\n\n关键技术总结\n\n1. CLIP模型（OpenAI）：革命性的基石。它通过在海量“图像-文本”对上对比学习，学会了将图像和文本映射到同一个向量空间，使得图像和文本的含义可以相互衡量。这为后续所有MLLM的视觉-语言对齐提供了基础。\n2. 投影层（Projection Layer）：一个关键的“翻译官”。它是一个小型神经网络，负责将编码器提取的视觉（或音频）特征向量，完美地“翻译”并对齐到LLM所理解的文本向量空间。\n3. 软提示（Soft Prompt）：图像特征向量在被送入LLM时，可以被看作是一种“视觉提示”或“软提示”，它们和文本提示（Hard Prompt）共同引导LLM生成内容。\n\n简单的比喻\n\n你可以把整个过程想象成：\n\n· 编码器就像一群“翻译官”：图像翻译官、视频翻译官、音乐翻译官。他们各自精通一种语言，负责把图片、视频、音乐“翻译”成一种统一的“世界语”（特征向量）。\n· 投影层就像一位“校对官”，确保各位翻译官输出的“世界语”口音和语法都标准统一，确保大家都能听懂。\n· 大语言模型（LLM） 就像一位“博学的大脑”，它只懂这种“世界语”。它接收来自翻译官和校对官的信息，结合自己的海量知识，然后用“世界语”进行思考和回答。\n· 最后的输出层再把“大脑”的“世界语”思考结果翻译回用户能理解的自然语言。\n\n",
  "计算机科普/科普-Nagle 算法.md": "***Nagle算法是TCP协议中用于优化网络传输效率的一种流量控制算法，其核心目的是减少网络中“小数据包”的数量，从而降低网络拥塞和协议开销。***\n\n\n### **核心问题：小数据包的弊端**\n在TCP通信中，如果应用程序频繁发送少量数据（比如每次只发几个字节），会导致网络中充斥着大量“小数据包”。每个TCP数据包都包含固定的头部信息（至少20字节），小数据包的“有效数据占比”极低，会浪费网络带宽，同时增加路由器等设备的处理压力，容易引发网络拥塞。\n\n\n### **算法原理：合并小数据包**\nNagle算法通过“延迟发送”和“合并数据”的方式减少小数据包，具体规则如下：\n1. 当发送方有数据要发送时，先检查当前是否有“未被确认的数据包”（即已发送但未收到接收方ACK的数据包）。\n2. 如果存在未确认的数据包，则暂时缓存当前要发送的小数据，等待以下两种情况之一发生时再统一发送：\n   - 收到对之前数据包的ACK确认；\n   - 缓存的数据量达到一定大小（通常是MSS，最大报文段长度）。\n3. 如果没有未确认的数据包，则立即发送当前数据（避免过度延迟）。\n\n\n### **提出背景**\n该算法由John Nagle于1984年提出，最初是为了解决早期ARPANET中“远程登录（Telnet）”场景的问题：用户每敲击一次键盘，应用程序就会发送一个包含单个字符的小数据包，导致网络效率极低。Nagle算法通过合并多次按键的字符，显著优化了这类场景的传输效率。\n\n\n### **适用场景与局限性**\n- **适用场景**：适用于对实时性要求不高，但需要减少网络开销的场景（如文件传输、普通数据交互）。\n- **局限性**：在对实时性要求高的场景（如在线游戏、实时视频/语音、远程控制），Nagle算法可能导致延迟（因为需要等待ACK或数据积累）。例如，游戏中按键操作的小数据可能被延迟发送，影响响应速度。\n\n\n### **与其他机制的关联**\nNagle算法可能与TCP的“延迟确认（Delayed ACK）”机制产生叠加延迟：  \n延迟确认是接收方为了合并ACK而延迟发送确认（通常延迟200ms以内），若发送方等待接收方的ACK才能发送下一批数据，两者结合可能导致数据发送延迟进一步增加（即“Nagle+延迟ACK”的叠加效应）。\n\n\n### **如何禁用Nagle算法**\n在需要低延迟的场景（如游戏、实时通信），可通过设置TCP选项`TCP_NODELAY`（大多数编程语言/系统都支持）禁用Nagle算法，强制TCP立即发送数据，牺牲部分带宽效率换取实时性。\n\n\n总结：Nagle算法是TCP为平衡效率与开销设计的优化机制，通过合并小数据包减少网络负担，但需根据应用场景权衡实时性需求决定是否启用。",
  "计算机网络/TCP的三次握手四次握手.md": "**TCP连接建立过程：**\n首先Client端发送连接请求报文，Server段接受连接后回复ACK报文，并为这次连接分配资源。Client端接收到ACK报文后也向Server段发生ACK报文，并分配资源，这样TCP连接就建立了。\n\n**TCP连接断开过程：**\n假设Client端发起中断连接请求，也就是发送FIN报文。Server端接到FIN报文后，意思是说\"我Client端没有数据要发给你了\"，但是如果你还有数据没有发送完成，则不必急着关闭Socket，可以继续发送数据。所以你先发送ACK，\"告诉Client端，你的请求我收到了，但是我还没准备好，请继续你等我的消息\"。这个时候Client端就进入FIN_WAIT状态，继续等待Server端的FIN报文。当Server端确定数据已发送完成，则向Client端发送FIN报文，\"告诉Client端，好了，我这边数据发完了，准备好关闭连接了\"。Client端收到FIN报文后，\"就知道可以关闭连接了，但是他还是不相信网络，怕Server端不知道要关闭，所以发送ACK后进入TIME_WAIT状态，如果Server端没有收到ACK则可以重传。\"，Server端收到ACK后，\"就知道可以断开连接了\"。Client端等待了2MSL后依然没有收到回复，则证明Server端已正常关闭，那好，我Client端也可以关闭连接了。Ok，TCP连接就这样关闭了！\n\n**为什么要三次握手？**\n\n在只有两次\"握手\"的情形下，假设Client想跟Server建立连接，但是却因为中途连接请求的数据报丢失了，故Client端不得不重新发送一遍；这个时候Server端仅收到一个连接请求，因此可以正常的建立连接。但是，有时候Client端重新发送请求不是因为数据报丢失了，而是有可能数据传输过程因为网络并发量很大在某结点被阻塞了，这种情形下Server端将先后收到2次请求，并持续等待两个Client请求向他发送数据...问题就在这里，Cient端实际上只有一次请求，而Server端却有2个响应，极端的情况可能由于Client端多次重新发送请求数据而导致Server端最后建立了N多个响应在等待，因而造成极大的资源浪费！所以，\"三次握手\"很有必要！\n\n**为什么要四次挥手？**\n\n试想一下，假如现在你是客户端你想断开跟Server的所有连接该怎么做？第一步，你自己先停止向Server端发送数据，并等待Server的回复。但事情还没有完，虽然你自身不往Server发送数据了，但是因为你们之前已经建立好平等的连接了，所以此时他也有主动权向你发送数据；故Server端还得终止主动向你发送数据，并等待你的确认。其实，说白了就是保证双方的一个合约的完整执行！\n\n使用TCP的协议：FTP（文件传输协议）、Telnet（远程登录协议）、SMTP（简单邮件传输协议）、POP3（和SMTP相对，用于接收邮件）、HTTP协议等。",
  "计算机网络/网络层次划分.md": "著名的OSI/RM模型（Open System Interconnection/Reference Model）。它将计算机网络体系结构的通信协议划分为七层，自下而上依次为：\n物理层（Physics Layer）、\n数据链路层（Data Link Layer）、\n网络层（Network Layer）、\n传输层（Transport Layer）、\n会话层（Session Layer）、\n表示层（Presentation Layer）、\n应用层（Application Layer）。\n其中第四层完成数据传送服务，上面三层面向用户。\n\n除了标准的OSI七层模型以外，常见的网络层次划分还有TCP/IP四层协议以及TCP/IP五层协议",
  "鉴政/2022-2023年中国疫情相关事件-byGPT5.md": "# 概览\n\n简单一句话：2022 年下半年到 2023 年，中国从长期执行严格的“动态清零/zero-COVID”政策，在社会与经济压力、若干突发事件（如乌鲁木齐火灾）和国内外疫情形势变化的共同作用下，于 2022 年 11–12 月开始密集调整防疫政策并在 2023 年初彻底放开，随后出现大规模感染浪潮、数据报告口径与统计方式变化，以及关于死亡数与感染率的强烈争议与若干后续小波动。\n\n# 按时间线详细梳理（2022 → 2023）\n\n下面按时间顺序把关键事件、政策节点和影响尽量列清楚并给出处，便于查证。\n\n## 2022 年上半年 — Omicron 进入、上海大规模封控（重点示例）\n\n- **3 月底–6 月**：上海因 Omicron 爆发在 3 月 27–28 日左右实施分区“全域静态管理/封控”并进行多轮大规模核酸筛查、集中隔离；封控持续数周并在 5 月—6 月分阶段解除，给城市生活、供应链与企业造成显著冲击。城市封控成为当年中国“动态清零”对外最明显的案例之一。\n\n## 2022 年下半年 — 社会不满、政策微调到激烈事件引发的抗议\n\n- **11 月 11 日**：中央发布所谓的“20 条”——对疫情防控进行“进一步优化”的 20 项措施（形式上是对执行细节的放宽，但仍强调动态清零框架），这是年底政策调整的第一轮官方信号。\n- **11 月 24 日**：乌鲁木齐发生居民楼火灾（官方报道为 24 日），这起事件在民间被广泛讨论为与疫情管控有关的导火索之一（公众质疑应急救援与封控措施的关系）。随后多地出现悼念与抗议活动。\n- **11 月下旬**：出现以“白纸/空白纸”抗议（“白纸运动”）为代表的大范围公众不满表达，从高校蔓延到多城市，成为推动当局加速调整的一股社会力量。\n\n## 2022 年 12 月 — 关键转折：官方“进一步优化”与放松（集中公布）\n\n- **12 月 7 日**：官方公布“**10 条**”进一步优化防疫措施（媒体常把 11 月的“20 条”和 12 月的“10 条”合并看作从“严控”向“有条件开放”转向的关键节点）。随后多地大幅放宽隔离、核酸、封控、旅行限制等措施，并逐步停止以以前方式强制大规模集中隔离。该阶段官方强调要把重心从“发现—清除”转到“救治—应急能力建设”。\n\n## 2022 年 12 月中下旬 — 报告口径与检测策略变化，病例数据出现“断层”\n\n- 当局先后宣布**不再单独公布“无症状感染者”数据（约 12 月中旬）**，并在 12 月下旬宣布每天公布的病例/死亡数字将调整或暂停（改为按更少频次或不同口径发布），这与检测从“强制”向“自愿/有症状”转变相吻合——外界因此认为官方对真实流行规模的可见性下降。\n\n## 2022 年 12 月下旬—2023 年 1 月：大范围感染潮（短时间内席卷全国）\n\n- 多项独立流行病学分析与监测（基于门诊发热、哨点医院检测与移动数据建模）显示，自 11 月中下旬开始传染性显著上升；12 月到 1 月出现**剧增**，在北京、上海等地的估算感染率（attack rate）在数周内达到很高水平（如北京一项研究估计 12 月下旬到 1 月底累积感染率非常高）。与此同时，医院门诊、发热门诊与丧葬服务出现显著压力。\n\n## 关于**死亡与感染规模**：官方口径 vs 多方估计（有很大差异）\n\n- **官方披露**：国家卫健委在 2023 年 1 月中旬对外通报，指出 **2022-12-08 到 2023-01-12** 期间，医院内与新冠相关的死亡约 **59,938 人**（其中直接因 COVID-19 导致呼吸衰竭者约 5,503 人，其余多为合并基础疾病）。官方还强调多数死亡者年龄偏大（如平均年龄约 80 岁）。但官方同时调整了死亡计入规则与报告方式（仅医务机构院内数据等），外界认为这会低估总死亡数。\n- **外部模型/研究估计**：多个独立模型与分析给出远高于官方的死亡或感染估计——例如一篇发表在 _Emerging Infectious Diseases_ 的估算认为在放宽后数月内死亡可能在 **约 1.4 百万** 量级（区间与方法学各异）；数据公司 Airfinity、学术团队与若干研究者也在不同模型下给出数十万到上百万的死亡区间。总体上，**估计值差异很大**，原因包括检测减少、报告口径改变、地区差异与模型假设不同。\n\n## 2023 年（后续几个月）——管理类别、疫苗与后续疫情波动\n\n- **2023-01-08**：中国将 COVID-19 管理由“甲类（A 类）按甲类措施处理”调整为“乙类管理”（即将防控法律措施下调、取消入境集中隔离等），并自 1 月起逐步恢复更广泛的人员往来与签证发放。边境检疫与入境政策发生显著放宽。\n- **1 月中下旬**：官方/专家估计（含中国疾控、科研团队）称全国感染覆盖面很高——有报道引述“80% 人群在这波已被感染”（不同地区、不同时间点估计存在差异，但总体说明自然感染传播速度极快）。与此同时，WHO 与国际社会仍呼吁更多透明数据以便评估真实负担。\n- **2023 年全年**：在放开后出现数个以 Omicron 衍生亚型（如 XBB 系列等）为主导的小波动（2023 年春季/夏季出现 XBB 类传播高峰的研究与讨论），政府也在 2023 年中后期调整疫苗策略、鼓励高危人群加强针并以更常态化的方式管理疫情。不同研究建议对老年人加强保护、提升加强针覆盖率以减少未来严重负担。\n\n# 影响与争议（要点）\n\n- **社会政治层面**：疫情政策导致的民众长期不满在晚 2022 年集中爆发（“白纸抗议”），成为政策调整的社会背景之一；媒体与学术界也强调治理与决策的透明度问题。\n- **公共卫生层面**：长期“零-COVID”使得大规模自然感染暴露少、老年人部分强化针接种率不理想，给放开后短期医疗负担与严重病例风险带来挑战。\n- **数据透明度与估计差异**：官方发布的数据因口径变化（如停止单列无症状、调整死亡判定、院内统计 vs 全面统计）与检测策略变化，导致外界对真实感染/死亡数字的估计出现大幅分歧。多项独立建模与丧葬、医院侧面证据均提示官方数字可能显著低估。\n\n# 结论（简短）\n\n- 不是某一件事“突然”把中国推向放开，而是 **长期的社会与经济成本累积 + 局部突发事件（例如乌鲁木齐火灾及随后抗议） + 病毒可传播性与疫苗/免疫格局变化 + 政策权衡** 在 2022 年底短时间内叠加，使中央选择较快转向并集中公布新政，从外界看就像“一夜放开”。放开后产生的大规模传播与由此而来的数据/统计与舆论争议，是该转向的直接后果之一。\n\n---\n",
  "鉴政/为什么当年中国疫情防控一夜间突然放开-byGPT5.md": "好问题——概括地说并不是单一原因“突然放开”，而是几条长期累积的压力在短时间内叠加，中央选择快速转向并一次性公布新政，给人“突然一夜放开”的印象。下面把关键点按条列清楚说明（并附权威报道/分析来源）：\n\n1. **大规模民众抗议（“白纸抗议”）对决策造成政治压力**：2022 年 11 月下旬起，全国若干城市爆发了针对严格清零的抗议，中央在稳定社会秩序和回应公众不满之间权衡，抗议是促使当局改变节奏的重要因素之一。\n    \n2. **经济与社会成本难以继续承受**：长期反复的大规模封控、人员隔离和核酸检测，拖累经济增长、影响供应链、加剧失业与企业困难，使得“清零”代价越来越高。官方在短期内放宽以尽快稳住经济与社会流动。\n    \n3. **病毒与防疫现实的变化（及疫苗覆盖/效力问题）**：奥密克戎及其亚系传播力强但致病力整体相对较低，且中国部分高危人群（尤其老年人）的加强针覆盖不理想，这些现实改变了风险评估。很多专家和文献把这些因素列为政策调整的技术性理由之一。\n    \n4. **官方实际上是分步松绑，但公告集中、速度快**：政府在 2022 年底以两轮“放松”措施形式对外公布（例如 11 月的“20 条”、12 月的“10 条”），实际执行上有集中释放信号的效果，给公众造成“突然放开”的直观印象。\n    \n5. **决策过程高度“黑箱”，所以外界感觉突兀**：中共内部决策不透明，中央与地方在执行上的快速转弯，以及为了避免更大范围社会动荡而迅速宣布新政，都加剧了“突然性”的感觉。学界和智库也指出，虽然外界看似一夜放开，但内部是权衡政治稳定、经济与公共卫生风险后的集中决策。\n    \n6. **放开后的后果与争议**：短期内出现大规模感染潮、医疗与殡葬等系统压力激增，以及关于病例/死亡数据透明度的争议，引发国内外强烈关注。\n    \n",
  "鉴政/女权主义/中国女权主义发展的一点点思考.md": "以下内容纯属发癫，请谨慎观看！\n中国龟男舔狗(龟狗)的现状：求求你给我结婚吧，我给你彩礼，孩子随你姓甚至随你的爱猫爱狗姓都可以，贷款买房子只写你名字，婚礼我出钱只在你家办，只要跟我结婚，工资上交，我来做家务，你生孩子的时候我给你做牛做马，我一定会坐着尿，我一定会去陪产，只要你不离婚，你随便去找个帅哥怎么玩都可以，只要你愿意我随时都可以去结扎。\n\n精简版：\n以前计划经济时代有工贼，为了能不被辞职，能不要工资免费给资本家打工，现在有婚贼，为了能结婚，无所不用其极。本质都是一样的，出卖自己价值来扰乱市场，相同年龄段女人相比于男人就是资本家，不是所有男的都有钱，但所有女人同年龄段都比男人多了个生产资料，生产资料有大有小，有多有少，且会随着年龄的增长不断降低直至没有，女性专属的“生育价值”生存资料会影响她们的经济价值，具体就是找工作困难(这里的困难是是指天生的困难，不是小仙女作妖前人砍树后人暴晒那种，当然这也是一种)\n\n请注意，男女博弈一直都有，且呈现着周期性变化(详见-«自私的基因»)\n\n一、核心观点\n1. 历史类比\n- 计划经济时期存在\"工贼\"现象：劳动者为保住工作接受无偿劳动，破坏劳动力市场秩序\n- 当代社会出现\"婚贼\"现象：部分男性为缔结婚姻关系采取极端手段，破坏婚恋市场平衡\n2. 本质分析\n两种现象共同本质：通过自我价值贬损扰乱市场正常秩序\n\n二、婚恋市场生产资料理论\n3. 性别资源差异\n- 女性天然拥有生育能力作为\"生产资料\"\n- 该生产资料存在个体差异（质量/数量）和时效性（随年龄递减）\n2. 市场权力结构\n- 同年龄段中女性相对男性具有资源优势\n- 形成类似\"资本家-劳动者\"的不对等关系\n- 经济资本（男性）与生育资本（女性）的博弈\n\n三、社会经济学解读\n1. 结构性问题\n- 并非所有男性都具备足够经济资本\n- 但所有育龄女性都天然持有生育资本\n2. 动态变化规律\n- 女性生育资本呈自然折旧曲线\n- 男性经济资本积累速度存在较大个体差异",
  "鉴政/女权主义/中国疫情对女权主义的影响.md": "其实中国的女权主义在2018逐渐开始，本应该在2021年左右到达一个小高峰，但是由于当时疫情影响，矛盾被转移，被削减了一部分，直到2024-2025年疫情影响导致经济下滑，矛盾逐步激化，遂爆发，呈现出一片疯狂的态势\n\n国家只要是迈入一定发达国家，必然会产生女权主义，女权主义是只存在于发达国家的一种政治正确，但是由于中国体量大(人口基数大，人口素质偏低)，会呈现十分割裂的局面(发展不均衡)，一线城市飞速变化，表现在互联网上就是各种热搜，抽象的像是要玩完了，要立即发动革命一样，但在一些二线城市或者说小县城，农村城镇仍变化不是十分明显，但还是在逐步被受影响(这里是结合我身边的一些例子)\n\n未完待续...",
  "鉴政/女权主义/未命名.md": "兄弟，刚有个女的一直在打听你七夕是不是一个人，我一看武汉法学毕业，江西本地人，家里有个差十岁的亲弟弟，自己五战考研备战考公，爱好养猫、瑜伽、轻食、旅游、烘焙，自我介绍还写了慢热独立感性，平时爱看小红书，喜欢玩乙游，偶像背景是杨笠，杨景媛，买了一墙的散兵手办，还喜欢看时代少年团，我直接把你的微信名片发给她了，不用谢，都是哥们儿。",
  "鉴政/疫情思考.md": "依稀记得2023年疫情放开回家阳了的时候，没有布洛芬或者什么退烧药，回来6天(忘了5天还是6天)硬生生烧了5天，躺在床上怀疑自己马上要死了，眼睛睁开整个人都是头晕的，模糊的，唉家里面的隔阂埋下了一个伏笔，在发生大灾难时(疫情，战争)，普通人特别是穷人是没有活下去的办法的，唉\n兴，百姓苦，亡，百姓苦，唉！",
  "面试八股/计算机面试经典八股.md": "+好的！计算机面试中最经典、最高频的“八股文”主要围绕以下几个核心领域展开。掌握这些基础知识和原理是通关技术面试的关键：\n\n## 🧠 一、 数据结构与算法\n\n1.  **基础数据结构：**\n    *   **数组 vs 链表：** 内存结构、访问/插入/删除时间复杂度、适用场景。\n    *   **栈(Stack) & 队列(Queue)：** LIFO/FIFO 原理、实现方式（数组/链表）、应用场景（函数调用栈、BFS/DFS）。\n    *   **哈希表(Hash Table)：** 原理（哈希函数、冲突解决-开放寻址/链地址法）、时间复杂度分析、负载因子、扩容机制。\n    *   **堆(Heap) / 优先队列(Priority Queue)：** 结构（通常是二叉堆）、操作（插入、删除堆顶、堆化）、应用（Top K、中位数、Dijkstra）。\n    *   **树(Tree)：**\n        *   二叉树(Binary Tree)：遍历（前序、中序、后序、层序）- 递归与非递归实现。\n        *   二叉搜索树(BST)：定义、查找、插入、删除、中序遍历有序性。\n        *   平衡二叉搜索树(AVL / 红黑树)：平衡因子/红黑规则、旋转操作、为什么需要（避免BST退化成链表）、应用（Java HashMap的TreeBin/TreeMap）。\n    *   **图(Graph)：** 表示方法（邻接矩阵、邻接表）、遍历算法（BFS、DFS）、常见算法（拓扑排序、最短路径-Dijkstra/Bellman-Ford/Floyd、最小生成树-Prim/Kruskal）。\n\n2.  **基础算法思想：**\n    *   **排序算法：**\n        *   比较排序：**快速排序**（分治、选基准、partition过程、时间复杂度-最好O(nlogn)/最坏O(n²)/平均、空间复杂度、稳定性❌）、**归并排序**（分治、稳定✅、时间复杂度O(nlogn)、空间复杂度O(n)）、**堆排序**（建堆O(n)、排序O(nlogn)、不稳定❌）、插入排序、冒泡排序、选择排序（原理、时间复杂度）。\n        *   非比较排序：计数排序、桶排序、基数排序（思想、适用场景）。\n    *   **搜索算法：** **二分查找**（前提有序、循环/递归实现、变种问题-找第一个/最后一个/旋转数组）。\n    *   **递归 & 分治：** 思想、经典问题（斐波那契、汉诺塔、归并/快排）。\n    *   **贪心算法(Greedy)：** 思想（局部最优->全局最优？）、适用场景（活动选择、霍夫曼编码、最小生成树-Prim/Kruskal）、与动态规划区别。\n    *   **动态规划(DP)：** **核心思想**（最优子结构、重叠子问题、状态转移方程）、**解题步骤**（定义状态、状态转移、初始化、边界、输出）、**经典问题**（斐波那契、爬楼梯、背包问题01/完全、最长公共子序列LCS、最长递增子序列LIS、编辑距离、股票买卖系列）。\n    *   **回溯(Backtracking)：** 思想（试错、DFS+剪枝）、经典问题（N皇后、全排列、组合、子集、数独）。\n    *   **双指针(Two Pointers)：** 应用（有序数组两数之和、滑动窗口-最小覆盖子串/最长无重复子串、快慢指针-链表判环/找中点）。\n    *   **位运算(Bit Manipulation)：** 常用操作（与、或、异或、非、移位）、常见技巧（判断奇偶、交换两数、找出只出现一次的数字、位1的个数）。\n\n## 🖥 二、 操作系统\n\n1.  **进程与线程：**\n    *   进程 vs 线程（定义、资源分配、切换开销、通信方式）。\n    *   **进程间通信(IPC)：** 管道、命名管道、信号、消息队列、共享内存、信号量、套接字。\n    *   **线程同步机制：** **互斥锁(Mutex)**、**信号量(Semaphore)**、**条件变量(Condition Variable)**、读写锁(Read-Write Lock)、自旋锁(Spin Lock)（原理、适用场景、死锁避免）。\n    *   **死锁(Deadlock)：** 必要条件（互斥、请求与保持、不可剥夺、环路等待）、预防策略、避免策略（银行家算法）、检测与恢复。\n2.  **内存管理：**\n    *   **虚拟内存(Virtual Memory)：** 为什么需要？分页(Paging)机制（页表、TLB快表）、分段(Segmentation)机制。\n    *   **页面置换算法：** **最佳置换(OPT)**、**先进先出(FIFO)**、**最近最久未使用(LRU)**、时钟算法(Clock) 的原理和优缺点。\n    *   **内存分配：** 伙伴系统(Buddy System)、Slab分配器。\n3.  **文件系统：** 文件描述符(File Descriptor)、inode结构、文件存储方式（连续、链式、索引）、目录结构。\n4.  **CPU调度：** 调度算法（FCFS、SJF、优先级、RR轮转、多级反馈队列）的目标和特点。\n5.  **I/O模型：** 阻塞I/O、非阻塞I/O、I/O多路复用(select/poll/epoll)、信号驱动I/O、异步I/O(AIO) 的区别和比较（特别是epoll的优势）。\n\n## 🌐 三、 计算机网络\n\n1.  **网络模型：** **OSI七层模型** 和 **TCP/IP四层模型** 各层功能、对应协议。\n2.  **核心协议：**\n    *   **TCP vs UDP：** 根本区别（连接、可靠性、有序性、流量控制、拥塞控制）、头部结构、应用场景。\n    *   **TCP可靠传输：** 序号/确认号、超时重传、滑动窗口机制。\n    *   **TCP连接管理：** **三次握手**（详细过程、为什么是三次？）、**四次挥手**（详细过程、为什么是四次？TIME_WAIT状态的作用？）。\n    *   **TCP流量控制：** 滑动窗口机制。\n    *   **TCP拥塞控制：** 慢启动(Slow Start)、拥塞避免(Congestion Avoidance)、快速重传(Fast Retransmit)、快速恢复(Fast Recovery) 算法原理。\n    *   **HTTP：**\n        *   请求方法（GET/POST/PUT/DELETE等区别）、状态码（1xx/2xx/3xx/4xx/5xx常见状态码含义）。\n        *   **HTTP/1.0 vs HTTP/1.1 vs HTTP/2 vs HTTP/3：** 主要改进（连接复用、头部压缩、服务器推送、QUIC协议）。\n        *   **HTTPS：** SSL/TLS协议作用、加密过程（非对称加密交换对称密钥、对称加密通信）、数字证书作用。\n    *   **DNS：** 作用、查询过程（递归、迭代）、记录类型（A、AAAA、CNAME、MX、NS）。\n3.  **网络安全基础：**\n    *   **对称加密 vs 非对称加密：** 原理、优缺点、代表算法（AES、RSA）。\n    *   **数字签名 & 数字证书：** 作用、原理（私钥签名，公钥验签；CA中心颁发证书）。\n    *   常见攻击：XSS、CSRF、SQL注入、DDoS、中间人攻击的原理和基本防御措施。\n4.  **网络层：** IP协议、IP地址分类/子网划分/CIDR、ARP协议、路由协议（RIP、OSPF、BGP基本思想）。\n5.  **传输层与应用层：** 端口号作用、Socket编程基础。\n\n## 🗃 四、 数据库（以关系型数据库 MySQL 为主）\n\n1.  **SQL基础：** 常用语句（SELECT, INSERT, UPDATE, DELETE, JOIN, GROUP BY, HAVING, ORDER BY, LIMIT）、多表连接（INNER JOIN, LEFT JOIN, RIGHT JOIN, FULL JOIN）。\n2.  **索引(Index)：**\n    *   **为什么需要索引？** 加速查询。\n    *   **数据结构：** **B+树**（为什么比B树更适合数据库？）、哈希索引（适用场景）。\n    *   **聚簇索引(Clustered Index) vs 非聚簇索引(Non-Clustered Index / Secondary Index)：** 根本区别（叶子节点是否存储完整行数据）、InnoDB实现。\n    *   **索引优化：** 覆盖索引、最左前缀原则、索引下推(ICP)。\n    *   **索引失效场景：** 函数操作、类型转换、`LIKE '%xx'`、OR条件（部分情况）、不等于(!=, <>）、索引列计算。\n3.  **事务(Transaction)：**\n    *   **ACID特性：** 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability) 的含义。\n    *   **隔离级别(Isolation Level)：** **读未提交(Read Uncommitted)、读已提交(Read Committed)、可重复读(Repeatable Read - MySQL默认)、串行化(Serializable)**。每个级别能解决哪些并发问题（脏读、不可重复读、幻读）？\n    *   **并发问题：** 脏读、不可重复读、幻读的定义。\n    *   **MVCC(多版本并发控制)：** 原理（Undo Log、Read View）、如何实现RC和RR级别（特别是RR如何解决幻读？）。\n4.  **锁(Locking)：** 共享锁(S锁/读锁)、排他锁(X锁/写锁)、意向锁、行锁、表锁、间隙锁(Gap Lock)、临键锁(Next-Key Lock)的作用和应用场景（特别是InnoDB如何解决幻读）。\n5.  **日志(Logging)：**\n    *   **Redo Log(重做日志)：** 作用（保证持久性、Crash-Safe）、Write-Ahead Logging(WAL)机制。\n    *   **Undo Log(回滚日志)：** 作用（保证原子性、实现MVCC）。\n    *   **Binlog(归档日志)：** 作用（主从复制、数据恢复）、格式（Statement/Row/Mixed）。\n6.  **数据库设计：** 三大范式（1NF, 2NF, 3NF）基本概念、反范式化设计场景。\n7.  **性能优化：** Explain分析SQL执行计划、慢查询优化思路。\n\n## 📐 五、 系统设计（面向中高级岗位）\n\n1.  **设计原则：** KISS, YAGNI, DRY, SOLID (尤其是单一职责、开闭原则)。\n2.  **方法论：**\n    *   需求澄清（功能需求、非功能需求-性能/可用性/扩展性/一致性/容错性/安全性）。\n    *   估算（QPS、TPS、存储量、带宽）。\n    *   抽象与模块化。\n    *   核心组件设计（API、数据模型、存储方案、算法）。\n    *   深入细节（扩展性、可靠性、性能优化）。\n3.  **常见组件与模式：**\n    *   负载均衡（LB: Nginx, HAProxy, LVS）。\n    *   缓存（Cache: Redis, Memcached）- 缓存策略（Cache Aside, Read/Write Through, Write Behind）、缓存穿透/击穿/雪崩及解决方案。\n    *   消息队列（MQ: Kafka, RabbitMQ, RocketMQ）- 解耦、异步、削峰填谷、保证最终一致性。\n    *   数据库扩展：读写分离、分库分表（水平/垂直拆分）、分区。\n    *   分布式ID生成（Snowflake算法）。\n    *   分布式一致性协议：**CAP理论**、**BASE理论**、**Raft/Paxos**（选主、日志复制）基本原理（理解核心思想即可，不要求推导）。\n    *   微服务架构：服务注册与发现（Eureka, Nacos, Consul）、API网关（Gateway）、配置中心、服务调用（RPC/REST）、熔断限流（Hystrix, Sentinel）。\n4.  **经典系统设计题：** 设计Twitter/微博、设计短链系统、设计秒杀系统、设计分布式缓存、设计搜索引擎、设计聊天系统等。\n\n## 🐍 六、 编程语言特性（根据应聘语言选择）\n\n1.  **面向对象(OOP)：** 封装、继承、多态、抽象类 vs 接口、重载 vs 重写。\n2.  **内存管理：** 垃圾回收(GC)原理（标记清除、复制、标记整理、分代收集-G1/ZGC）、引用类型（强引用、软引用、弱引用、虚引用）。\n3.  **并发编程：** 线程生命周期、创建方式、线程池（核心参数、工作流程、拒绝策略）、锁（Synchronized底层原理、Lock/Condition）、并发容器（ConcurrentHashMap原理-CAS+synchronized+分段锁思想）、原子类（CAS操作、ABA问题）、线程间通信。\n4.  **语言特性：** 如Java的JVM内存区域、类加载机制、反射、异常体系、集合框架（HashMap源码：put/get流程、扩容、JDK1.7 vs 1.8+）；Python的GIL、装饰器、生成器、鸭子类型；Go的Goroutine、Channel、defer等。\n\n## 📌 关键点提醒\n\n1.  **理解原理，而非死记硬背：** 面试官更关注你是否真正理解了背后的思想（为什么用这个？解决了什么问题？优缺点是什么？）。\n2.  **联系实际：** 思考这些知识在实际系统/项目中是如何应用的。\n3.  **清晰表达：** 能条理清晰、简洁准确地阐述概念和过程。\n4.  **动手实践：** 算法题要动手写，数据库要会写SQL，系统设计要多思考多画图。\n5.  **关注细节：** 很多问题会深入到具体实现细节（如HashMap冲突解决、ConcurrentHashMap分段锁演变、MySQL RR级别如何避免幻读、TCP TIME_WAIT）。\n6.  **追踪发展：** 了解一些新技术趋势（如HTTP/3, QUIC, eBPF, 云原生, Serverless）的基本概念。\n\n这份清单涵盖了计算机面试中最核心、最高频的基础知识点。针对具体岗位（前端、后端、算法、运维、测试等）"
}