阿尔法色色之屋
type: channel
link: https://www.alphah.top/
description: 阿尔法色色之屋
items: 终端 AI 工具安装与使用指南
items: IDE AI 插件安装与使用指南
items: Node.js 介绍与环境配置
items: 【vate】N355 核显配置以及硬件加速
items: 2024.07.19 心「秦亚」
items: 2024.07.04 语「音乐之路」
items: 【vate】把 Jellyfin 更新消息推送到QQ
items: 【vate】计算机二级练习留档
items: 【vate】常用六大排序算法的实现
items: 【vate】手把手教你在 Debian/Ubuntu 上二进制安装MySQL

终端 AI 工具安装与使用指南
type: item
date: 2026-03-16T14:37:32+08:00
description: 终端 AI 工具安装与使用指南前言除了 IDE 插件外，终端（命令行）中的 AI 工具也能大幅提升开发效率。它们可以帮你：快速理解复杂命令的含义自动生成 Shell 脚本解释错误信息并提供解决方案直接在终端内与 AI 对话解决问题本教程将介绍几个常用的终端 AI 工具。Claude Code - 智谱AI开放文档快速开始--火山方舟大模型服务平台-火山引擎一、Claude Code 终端工具Claude Code 是什么Claude Code 是 Anthropic 官方推出的命令行 AI 编程助手，可以直接在终端中与 Claude 对话，进行代码开发、文件编辑、调试等操作。安装前准备Claude Code 需要 Node.js 环境。如果你还没有安装 Node.js，请参考《1.nodejs介绍.md》进行安装。Claude Code 安装教程方式一：使用 npm 安装# 全局安装 Claude Code npm install -g @anthropic-ai/claude-code # 验证安装 claude --version方式二：使用官方安装脚本（推荐）macOS / Linux:curl -fsSL https://claude.ai/install.sh | bashWindows (PowerShell):powershell -Command "iwr -useb https://claude.ai/install.ps1 | iex"配置 Claude Code1. 获取 API Key访问 https://console.anthropic.com/注册/登录 Anthropic 账号进入 API Keys 页面点击 "Create Key" 创建新的 API Key复制生成的 API Key（格式类似 sk-ant-...）2. 配置 API Key方式一：通过环境变量配置# Windows (CMD) set ANTHROPIC_API_KEY=sk-ant-your-api-key-here # Windows (PowerShell) $env:ANTHROPIC_API_KEY="sk-ant-your-api-key-here" # macOS / Linux (bash/zsh) export ANTHROPIC_API_KEY="sk-ant-your-api-key-here" # 永久保存（添加到 ~/.bashrc 或 ~/.zshrc） echo 'export ANTHROPIC_API_KEY="sk-ant-your-api-key-here"' >> ~/.zshrc source ~/.zshrc方式二：通过配置文件Claude Code 首次运行时会引导你配置 API Key：claude按照提示粘贴你的 API Key 即可。Claude Code 基础使用启动 Claude Code# 在当前目录启动 claude # 指定工作目录 claude /path/to/your/project启动后，你会看到一个交互式界面，可以直接输入问题或指令。常用功能示例1. 解释代码请解释一下这个函数的作用： def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right)2. 生成代码帮我写一个 Python 脚本，遍历当前目录下的所有 .txt 文件， 统计每个文件的行数，并输出行数最多的文件名。3. 调试问题我运行这段代码时报错了：ModuleNotFoundError: No module named 'requests' 请问如何解决？4. 重构代码这段代码可以优化吗？请让它更简洁易读： result = [] for i in range(len(items)): if items[i] is not None: result.append(process_item(items[i]))Claude Code 高级功能文件操作Claude Code 可以直接操作工作目录中的文件：# 列出当前目录的文件 列出当前目录的文件 # 读取某个文件 读取 src/main.py 文件 # 创建新文件 创建一个名为 utils.py 的文件，包含常用的工具函数 # 编…

IDE AI 插件安装与使用指南
type: item
date: 2026-03-16T14:36:24+08:00
description: IDE AI 插件安装与使用指南前言AI 编程助手可以大幅提升开发效率，帮助你自动补全代码、解释代码、生成单元测试、重构代码等。本教程将介绍如何在常用 IDE 中安装和配置 AI 插件。一、JetBrains 全家桶插件安装指南JetBrains 系列 IDE（IntelliJ IDEA、PyCharm、WebStorm、GoLand 等）都支持相同的插件安装方式。下面以 PyCharm 为例进行讲解。推荐 AI 插件列表插件名称功能描述Github CopilotGitHub 官方 AI 编程助手，代码补全能力强CodeGeeX智谱 AI 出品，支持多语言，免费额度充足通义灵码阿里巴巴出品，支持多种模型TRAE字节跳动出品，深度适配中文场景CODEX/cloude老牌 AI 补全工具，支持本地模型详细安装步骤（以 PyCharm 为例）步骤 1：打开插件市场启动 PyCharm点击菜单栏 File → Settings（Windows/Linux）或 PyCharm → Settings（macOS）在左侧菜单中选择 Plugins或者使用快捷键：Windows/Linux: Ctrl + Alt + S → PluginsmacOS: Cmd + , → Plugins步骤 2：搜索并安装插件在插件市场的搜索框中输入插件名称（如 "Github Copilot"）点击搜索结果中的插件点击 Install 按钮开始安装安装完成后，点击 Restart IDE 重启 IDE步骤 3：配置插件重启后，通常需要登录或配置 API Key：以 GitHub Copilot 为例：重启后，IDE 右下角会出现 Copilot 图标点击图标，选择 Sign in to GitHub在浏览器中完成 GitHub 账号授权授权成功后回到 IDE 即可使用以 TRAE 为例：打开 Settings → Tools → TRAE手机号登入即可使用实际使用示例1. 代码自动补全在编写代码时，Copilot 会自动根据上下文提供补全建议：def calculate_fibonacci(n): # 输入到这里时，Copilot 会自动补全后续代码 if n <= 0: return [] elif n == 1: return [0] fib = [0, 1] while len(fib) < n: fib.append(fib[-1] + fib[-2]) return fib按 Tab 键接受建议按 Esc 键忽略建议按 Alt + [ 或 Alt + ] 查看上一个/下一个建议2. 使用注释生成代码你可以通过注释告诉 AI 你想要什么：# 编写一个函数，输入是一个列表，返回列表中的偶数 def get_even_numbers(numbers): return [num for num in numbers if num % 2 == 0] # 编写一个快速排序函数 def quicksort(arr): if len(arr) <= 1: return arr pivot = arr[len(arr) // 2] left = [x for x in arr if x < pivot] middle = [x for x in arr if x == pivot] right = [x for x in arr if x > pivot] return quicksort(left) + middle + quicksort(right)3. 选中文本进行对话选中一段代码或文本右键点击，选择 AI 插件的相关菜单（如 "TRAE: 解释代码"）或者使用快捷键（具体快捷键查看插件设置）二、VS Code 插件安装指南VS Code 拥有最丰富的 AI 插件生态，配置也更加灵活。推荐 AI 插件列表插件名称开发者功能描述GitHub CopilotGitHub代码补全、聊天CloudeCloude对话式编程助手通义灵码阿里巴巴支持多种模型豆包 TRAE字节跳动中文友好CodeXOpenAI免费额度多GLM Assistant智谱 AIGLM 模型官方插件详细安装步骤步骤 1：打开扩展市场启动 VS Code点击左侧活动栏的 扩展图标（四个方块的图标）或者使用快捷键 Ctrl + Shift + X（Windows/Linux）或 Cmd + Shift + X（macOS）步骤 2：搜索并安装插件在扩展市场搜索框中输入插件名称点击搜索结果中的插件点击 Install 按钮安装步骤 3：配置插件安装完成后，通常需要进行配置：GitHub Copilot 配置：点击 VS Code 底部状态栏的 Sign in to GitHub在浏览器中完成授权回…

Node.js 介绍与环境配置
type: item
date: 2026-03-16T14:25:32+08:00
description: Node.js 介绍与环境配置一、什么是 Node.jsNode.js 是一个基于 Chrome V8 引擎的 JavaScript 运行环境，可以让 JavaScript 在服务端运行。为什么介绍Nodejs？*nodejs有优秀的 跨平台、易安装的特性。现在的AI终端工具（以及openclaw）都是基于Nodejs 开发。掌握Nodejs 基础，有益于在安装的时候排错。主要特点事件驱动 - 采用事件驱动、非阻塞 I/O 模型单线程 - JavaScript 执行是单线程的，但底层通过 libuv 实现多线程 IO跨平台 - 支持 Windows、macOS、Linux 等多种操作系统应用场景Web 服务器开发（Express、Koa、Nest.js）前端构建工具（Webpack、Vite、Rollup）命令行工具（CLI）开发 （claude code/ datax / ）实时应用（WebSocket、聊天应用）二、Node.js 跨平台特性跨平台优势Node.js 基于 libuv 库实现跨平台，同一套代码可以在不同操作系统上运行。Node.js 缺点*版本上下兼容差，如果要运行多个不同版本的nodejs项目，建议安装版本管理器。安装方式（不推荐直接安装）Windows 安装略macOS 安装方式一：官网 pkg 安装# 同 Windows，下载 pkg 安装包即可方式二：Homebrew 安装（推荐）brew install nodeLinux 安装# Ubuntu/Debian sudo apt update sudo apt install nodejs npm # CentOS/RHEL sudo yum install nodejs npm三、包管理器介绍Node.js 生态有多个包管理器，各有优缺点。包管理类似于python的pip *1. npm（Node Package Manager）npm 是 Node.js 官方自带的包管理器，安装 Node.js 时自动安装。常用命令：# 初始化项目 npm init npm init -y # 快速初始化，使用默认配置 # 安装依赖 npm install <package-name> # 本地安装 npm install -g <package-name> # 全局安装 npm install <package-name> --save-dev # 开发依赖 # 卸载依赖 npm uninstall <package-name> # 更新依赖 npm update <package-name> # 运行脚本 npm run <script-name> # 查看已安装包 npm list npm list -g --depth=0 # 查看全局安装的顶层包2. pnpm（Performant npm）pnpm 是一个快速、节省磁盘空间的包管理器。特点：利用硬链接和符号链接节省磁盘空间安装速度比 npm 快 2-3 倍严格的依赖管理，避免幽灵依赖安装方式：# 使用 npm 安装 npm install -g pnpm # 或者使用官方脚本 curl -fsSL https://get.pnpm.io/install.sh | sh常用命令：pnpm install <package-name> # 安装 pnpm add <package-name> # 同上 pnpm add -D <package-name> # 开发依赖 pnpm remove <package-name> # 卸载 pnpm update # 更新 pnpm list # 查看3. YarnYarn 是 Facebook 推出的包管理器，注重安全性和稳定性。安装方式：npm install -g yarn常用命令：yarn init # 初始化 yarn add <package-name> # 安装 yarn add --dev <package-name> yarn remove <package-name> yarn upgrade <package-name> yarn list包管理器对比*特性npmpnpmyarn速度⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐磁盘占用高低中官方支持✅❌❌学习成本低低低推荐使用场景：新项目：推荐使用 pnpm大型 monorepo：推荐使用 pnpm 或 yarn berry老项目：保持原有的包管理器四、NVM - Node.js 版本管理器*在实际开发中，不同项目可能需要不同版本的 Node.js，这时候就需要版本管理工具了！官方仓库 nvm-sh/nvm: Node Version Manager - POSIX-compliant bash script to …

【vate】N355 核显配置以及硬件加速
type: item
date: 2025-05-12T16:09:00+08:00
description: 文章首发 vate，授权 阿尔法色色之屋 转载。转载需标明出处，禁止未经授权转载。买了个N355，装了最新的Debian12.10，发现无法调用核显，发现是Linux内核太低了用不了。# lspci -nn |grep VGA 00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [Intel Graphics] [8086:46d3]定位问题安装官网说，要先查看设备的id，然后才能确定需要的内核版本https://dgpu-docs.intel.com/driver/client/overview.html#ubuntu-22.04英特尔再这个页面提供的是Ubuntu的软件包，debian用不了，PAA源加不上解决PAA报错 apt-get install python3-launchpadlib https://askubuntu.com/questions/1480616/adding-opencpn-repository-attributeerror-nonetype-object-has-no-attribute经查询要内核版本最低为：46d3 ，对应6.13# lspci -nn |grep VGA 00:02.0 VGA compatible controller [0300]: Intel Corporation Alder Lake-N [Intel Graphics] [8086:46d3]寻找解决办法debian官方的内核版本较低，得尝试使用其他方式升级内核。查找 debian 官网，查看内核的更新计划。发现目前debian12.10（最新）的系统默认内核是6.1，最高能用apt升级到6.12版本。包括还没发布的debian13 也是时候Linux 6.12 内核。但是核显要求Linux内核最低6.13https://www.debian.org/releases/testing/release-notes/whats-new.zh_CN.html如图46d3对应的是6.13内核解决问题找朋友求助（感谢朋友），经过搜索最后决定用xanmod对内核进行升级https://xanmod.org/顺利的话只要图片上的三个步骤就能完成安装了。N355在内的N系列处理器现在都是 Intel 12th Gen (Alder Lake) 架构。twin 架构算在alder架构里apt升级报错之前乱装驱动，导致apt升级内核的时候报错，解决办法是把报错的软件用apt删了就好。我这里是多装了给intel-i915-dkms的包drivers/misc/mei/pxp/mei_pxp.o: warning: objtool: init_module(): not an indirect call target drivers/misc/mei/pxp/mei_pxp.o: warning: objtool: cleanup_module(): not an indirect call target In file included from /var/lib/dkms/intel-i915-dkms/1.25.1.17.250113.16/build/backport-include/linux/moduleparam.h:29, from /usr/src/linux-headers-6.14.6-x64v3-xanmod1/include/linux/module.h:22, from /var/lib/dkms/intel-i915-dkms/1.25.1.17.250113.16/build/backport-include/linux/module.h:3, from drivers/vfio/pci/i915/main.c:9: drivers/vfio/pci/i915/main.c:440:18: error: expected ‘,’ or ‘;’ before ‘I915’ 440 | MODULE_IMPORT_NS(I915); | ^~~~ /usr/src/linux-headers-6.14.6-x64v3-xanmod1/include/linux/moduleparam.h:26:61: note: in definition of macro ‘__MODULE_INFO’ 26 | = __MODULE_INFO_PREFIX __stringify(tag) "=" info | ^~~~ /usr/src/linux-headers-6.14.6-x64v3-xanmod1/include/l…

2024.07.19 心「秦亚」
type: item
date: 2024-07-19T18:15:00+08:00
description: 夜幕降下，脑内再一次拨弄着朦胧的意识。熟悉的场景、熟悉的思绪，涌上心头。曾经习以为常的风景，在这里多了一抹新奇。那是谁？会是谁？将是谁？流落在现实中的「我」啊，内心孤寂的角落，渴望奇迹降临。驻足在梦境中的「我」啊，世界孤寂的各处，渴望与人相伴。两人不愿瞥开视线，想将各自的所有，印入到记忆深处。下一次再见，又会是什么时候。回望曾经见面的地点，最美的奇迹可能早已在身边。「我」，便是「我」生命中迸发的奇迹。[photo][/photo]

2024.07.04 语「音乐之路」
type: item
date: 2024-07-04T02:30:00+08:00
description: 一部伟大的作品，这首承载了10年回忆的歌曲，在现今的技术革新后重新焕发了生机。重音Teto曾是愚人节玩笑的产物，但过程中每个人都带着不羁的畅想进行创作，反而体现出了那时候人们最纯粹的想象力与创造力。这也是生活在新时代的我们所逐渐丢失的东西。在AI迅猛发展的如今，人们面临着新的机遇与挑战。对过去美好回忆的执念、对当下浮躁风气的焦虑，把我们困在了一个又一个选择的交叉路口中。也许，我们不必彷徨。音乐是心灵的明灯，无关形式，无关风格，无关载体。至少于我而言，每当重音的复苏之声响起，我将不再徘徊，我将继续倾听，用这连通了过去与现在的歌声，向着未来骄傲地前行！[timeline-item] [btn href="http://www.bilibili.com/video/BV1Fh4y1J721" type="default"]bilibili原视频地址[/btn] [/timeline-item][dplayer src="https://oss.alphah.top/Dream/2024.07.04.mp4"/]

【vate】把 Jellyfin 更新消息推送到QQ
type: item
date: 2024-06-10T12:02:00+08:00
description: 思路让 Jellyfin 使用 LLOneBot onebot-11 协议的API接口，把更新推送到QQ。在部署好支持OneBot协议的的QQ机器人后，就已经具备收发QQ消息的能力了。一. 调用 onebot-11 API先把 LLOneBot 部署好，Linux 无 GUI 可以用 NapCatQQ项目。设置API端口打开HTTP服务，并设置端口LLOneBot 设置方法：NapCatQQ 设置方法：{ "httpHost": "", "enableHttp": false, "httpPort": 3000, ............略.................... } 测试API浏览器访问下面的连接，就可以测试消息是否能正常发送：需要保证端口，和上一步设置的端口一致send_group_msg , send_group_msg 顾名思义分别对应私聊消息和群聊消息#群聊消息 http://127.0.0.1:3000/send_group_msg?group_id=群号&message="hello"&auto_escape=false #私聊消息： http://127.0.0.1:3000/send_private_msg?user_id=QQ号&message="hello"&auto_escape=false有条件的，可以构造POST请求进行测试：#私聊消息： curl -X POST "http://127.0.0.1:3000/send_private_msg" \ -H "Content-Type: application/json" \ -d '{ "user_id": QQ号, "message": "hello post json" }' #群聊消息 curl -X POST "http://127.0.0.1:3000/send_group_msg" \ -H "Content-Type: application/json" \ -d '{ "group_id": 群号, "message": "hello post json" }'二. 设置 Jellyfin webhook 插件先安装好Webhook插件，并点击进行设置在Server Url里输入jellyfin服务的访问地址，然后点击 Add Generic Destination名字自己随便取，Url 需要注意一下，私聊消息接口用: send_private_msg 群聊用: send_group_msgItem Type 默认是全选，可以根据自己需要进行勾选在最下方 Template空白处填入指定代码，最后在点save就大功告成了注：私聊消息用到是user_id，并填写qq号。群聊要改成group_id {{#if_equals NotificationType 'ItemAdded'}} { "user_id": qq号, "message": "{{{SeriesName}}} 更新拉！\n[CQ:image,file={{ServerUrl}}/Items/{{SeasonId}}/Images/Primary]\n{{#if_equals ItemType 'Episode'}}S{{SeasonNumber00}}E{{EpisodeNumber00}} {{{Name}}}\n{{else}}名称：{{{Name}}} ({{Year}})\n{{/if_equals}}时长：{{RunTime}}" } {{/if_equals}}三. 结果演示：小提示：jellyfin 的推送不是实时的，最好在定时任务里把 “扫描媒体库”开了。

【vate】计算机二级练习留档
type: item
date: 2023-08-25T17:36:00+08:00
description: 前言：之前做算法复建时写的，写道比较拉，黑历史.....具体题目信息在网站上，懒得拷贝了https://www.dotcpp.com/oj/train/1002/no1平均值计算// no1-average.cpp : 此文件包含 "main" 函数。程序执行将在此处开始并结束。 // #include <stdio.h> int main() { int a[9], sum = 0,b=0; for (int i = 0; i < 10; i++) { scanf("%d", &a[i]); sum += a[i]; } float ave = sum / 10; for (int i = 0; i < 10; i++) if (a[i] > ave) { b++; } printf("%d", b); } no2计算素数和#include<stdio.h> #include<math.h> bool isprime(int x) { if (x<=3) { return x > 1; } if (x%6!=1&&x%6!=5) { return false; } for (int i = 5; i <=sqrt(x) ; i+=6) { if (x%i==0||x%(i+2)==0) { return false; } } return true; } int main(){ int n, m,ans=0; scanf("%d%d",&m,&n); for (int i = m; i <=n; i++) { if (isprime(i)) ans += i; } printf("%d",ans); return 0; } no3公约公倍#include<stdio.h> #pragma warning (disable: 4996) int f(int min, int max) { if (max%min==0) { return min; } else { f(max % min, min); } } int main() { int m, n; int max, min; int a, b; scanf("%d%d", &m, &n); if (m>n) { max = m; min = n; } else { max = n; min = m; } a=f(min, max); b = max * min / a; printf("%d\n%d",a,b); return 0; }no4温度转换#include<stdio.h> int main() { float a, b; scanf("%f", &a); b = 5 * (a - 32)/9; printf("%.2f",b); return 0; }no5分段函数#include<stdio.h> int main() { float x,y; scanf("%f", &x); if (x<1) { y = x; } else if (x<10) { y = 2 * x - 1; } else { y = 3 * x - 11; } printf("%.2f", y); return 0; } no6求偶数和#include<stdio.h> int main() { int n, sum = 0,a; scanf("%d", &n); for (int i = 0; i < n; i++) { scanf("%d", &a); if (a%2==0) { sum += a; } } printf("%d", sum); return 0; }no7等差数列#include<stdio.h> int main() { int n,sum; scanf("%d", &n); sum = (n * 2 + n * (n - 1) / 2 * 3); printf("%d", sum); return 0; }no8同因查找#include<stdio.h> int main() { for (int i = 10; i <=1000 ; i++) { if (i % (2*3*7) == 0) { printf("%d\n", i); } } return 0; }no9计负均正#include<stdio.h> int main() { int a[20], sum = 0, count = 0; double average = 0; for (int i = 0; i < 20; i++) { scanf("%d", &a[i]); if (a[i]<0) { count++; } else { sum += a[i]; } } average = (d…

【vate】常用六大排序算法的实现
type: item
date: 2023-08-25T17:15:00+08:00
description: 非原创，协会里爬的插入排序(insertion_sort)#include<iostream> #include<algorithm> #include<vector> using namespace std; // 插入排序 void insertion_sort(vector<int>& a) { for(int i=0;i<a.size();i++)// 从第一个开始做插入 { int t=a[i],j;// 存储数据 for(j=i-1;j>=0;j--)// 从前一个数开始作比较 if(t<a[j]) a[j+1]=a[j]; // 若前一个数比当前数大，则后一个数放前一个数 else break;// 否则退出 a[j+1]=t; // 后一个数放存储的数值，这个插入操作必须放在循环外面 } } int main() { int n; vector<int> a; cin>>n; for(int i=0,t;i<n;i++) { cin>>t; a.push_back(t); } insertion_sort(a); for(int i=0;i<n;i++)cout<<a[i]<<" "; return 0; }堆排序(heap_sort)#include<iostream> #include<algorithm> #include<vector> using namespace std; int n,m; vector<int> heap; // 从小到大排序建大根堆，因为根节点要放到最后面 // 从大到小排序建小根堆 //堆中，默认下标0弃置，下标1的元素为根节点 //大根堆，下沉操作 void push_down(vector<int>& heap,int size,int u) { int t=u,left=u*2,right=u*2+1; if(left<=size && heap[left]>heap[t])t=left;//不越界，并且左子树较大 if(right<=size && heap[right]>heap[t])t=right;//不越界，并且右子树较大 if(t!=u)//如果存在更大的值 { swap(heap[u],heap[t]);//交换 push_down(heap,size,t);//下沉 } } //大根堆，上浮操作 void push_up(vector<int>& heap,int u) { while(u/2 && heap[u/2]<heap[u])//如果没有越界，并且父节点更小 { swap(heap[u/2],heap[u]);//交换 u/=2;//上移 } } //堆排序 void heap_sort(vector<int>& heap,int size) { int n=size; for(int i=1;i<=n;i++)push_up(heap,i);//建堆，像插入一样、上浮 //堆排序 for(int i=1;i<=n;i++)//排序n次 { swap(heap[1],heap[size]);//将根节点（最大的数）放到最后面 size--;//数量-- push_down(heap,size,1); } } int main() { cin>>n>>m; heap.resize(n+1); for(int i=1;i<=n;i++)cin>>heap[i]; heap_sort(heap,n);//排序堆中的前n个数 for(int i=1;i<=m;i++)cout<<heap[i]<<' '; return 0; } 归并排序(merge_sort)#include<iostream> #include<algorithm> #include<vector> using namespace std; void merge_sort(vector<int>& a,int l,int r) { if(l>=r)return;//此处的=号可以解决边界问题 int mid=(l+r)/2; // 去中间值 merge_sort(a,l,mid);//递归 merge_sort(a,mid+1,r); static vector<int> st; st.clear(); int i=l,j=mid+1; while(i<=mid && j<=r)//归并 if(a[i]<a[j])st.push_back(a[i++]); else st.push_back(a[j++]); //处理剩余元素 while(i<=mid)st.push_back(a[i++]); while(j<=r)st.push_back(a[j++]); // 此处建议像如下…

【vate】手把手教你在 Debian/Ubuntu 上二进制安装MySQL
type: item
date: 2023-08-25T09:55:00+08:00
description: 时隔几个月后，又重新装了一遍 MySQL 思路比之前清晰多了。虽然还有不足之处，但比之前好多了，写个教程备忘一下。此教程已经写的尽量详细了，但读者最好还是有一点点 Linux 基础。如果想省事情，可以直接选择用包管理器一键安装。apt install mysql yum install mysql文件准备下载文件官方下载地址确认glibc 版本确保自己的 glibc 版本高于 软件包标识的版本 比如，我图里安装包的glibc 版本是2.12。那么系统的glibc必须高于 2.12。如果系统的glibc 太低就不要下了。建议换个新一点的系统，或者找旧一点的二进制包。#查看 glibc 版本 $> ldd --version#下载安装包： $> wget https://downloads.mysql.com/archives/get/p/23/file/mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz解压文件#解压之前下载的MySQL二进制文件 $> tar -xvf mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz #文件夹名改成mysql $> mv mysql-8.0.30-linux-glibc2.12-x86_64 mysql #将下载的包移到指定目录 $> mv mysql /usr/local/mysql #打扫一下战场，把压缩包删了 $> rm -f mysql-8.0.30-linux-glibc2.12-x86_64.tar.xz #进入刚刚解压出来的 MySQL 文件夹 $> cd /usr/local/mysql 环境准备解决依赖问题：#先进到mysql/bin目录里 $> cd /usr/local/mysql/bin #查看缺少的依赖，如果没输出就说明都不缺 $> ldd mysqld mysql | grep "not found" libnuma.so.1 => not found libtinfo.so.5 => not found我这里缺了 libnuma libtinfo 这俩个依赖，这里拿我缺少的俩个依赖举一下例子，大家要根据实际情况缺什么补什么。解决 llibnuma.so.1 缺少问题#搜索一下包 $> apt search libnuma libnuma1/stable 2.0.12-1+b1 amd64 #可以看到搜索到的包名叫libnuma1 #根据搜索到底结果安装 $> apt install libnuma1 同理：解决 libtinfo.so.5 缺少问题#没有的话就找一下包 $> apt search libtinfo libtinfo5/stable 6.2+20201114-2 amd64 libtinfo6/stable,now 6.2+20201114-2 amd64 [installed] #可以看到搜索到的包有libtinfo5 和libtinfo6 #我们缺少libtinfo.so.5 就安装 libtinfo5 apt install libtinfo5创建用户和文件目录规划要确保mysql用户有对应文件夹的权限（都放在一起是为了好找、好删，不太规范，不要学我）目录/文件作用/etc/my.cnfMySQL全局配置文件/usr/local/mysqlbasedir(MySQL主程序目录)/usr/local/mysql/data/datadirdatadir(数据目录)/usr/local/mysql/data/binlogbinary logs（顾名思义，binlog文件目录）/usr/local/mysql/data/backup备份文件目录/tmp/mysqltmpdir（临时文件目录)/usr/local/mysql/data/mysql.socksocket (socke文件地址,登录用的)/usr/local/mysql/data/error.loglog_error(错误日志)/usr/lib/systemd/system/mysqld.service存放进程守护配置文件创建mysql用户创建mysql用户组和mysql用户#创建 MySQL 用户组 $> groupadd mysql #创建 MySQL 用户 $> useradd -r -g mysql -s /bin/false -d /dev/null mysql 创建文件夹创建存数据的文件夹，并赋权！！！赋权很重要。权限不够初始化会失败#创建用来存放数据的文件夹 $> mkdir -p /usr/local/mysql/data/binlog /usr/local/mysql/data/backup /usr/l…