Fivk博客
type: channel
link: https://blog.fivk.cn/
description: 欢迎走进我的博客，记录日常，分享技术趣事，2025，相伴同行！
items: 【Fivk】文章归档
items: adb常用命令
items: 【Docker】使用 Docker 安装 PostgreSQL + pgvector 向量数据库（基于 pgvector/pgvector:pg16）
items: 【知识总结】Maven国内镜像
items: 【知识总结】使用 OpenVPN 实现按需分流：避免全局代理泄露隐私
items: 【Pyenv使用教程】轻松管理Python版本的入门与进阶指南
items: 【知识总结】常用Linux应用安装
items: Python源码安装与卸载指南
items: 【MySQL】深入实践：10个提升MySQL生产力的高阶技巧
items: 【Git】Fork仓库与原仓库同步指南：告别代码冲突的终极解决方案
items: 使用 MongoDB 实现分页查询与条件查询中的注意事项

【Fivk】文章归档
type: item
date: 2022-04-13T11:50:00+08:00
description: [scode type="share" size=""]前言：此归档汇聚了我精心创作的一系列技术学习类文章，内容涵盖算法解析、前后端开发要点，以及丰富详实的项目实战经验分享 。[/scode][button color="info" icon="" url="https://blog.fivk.cn/github.html" type=""]我的开源项目[/button][button color="info" icon="" url="https://blog.fivk.cn/archives/1468.html" type=""]SSM开发常用模板[/button][button color="info" icon="" url="https://blog.fivk.cn/archives/1820.html" type=""]SpringBoot开发常用模板[/button]算法笔记包括从上大学开始写的C语言笔记和学习的一些算法技巧。[button color="success" icon="" url="https://blog.fivk.cn/category/C/" type=""]C/C++[/button][button color="success" icon="" url="https://blog.fivk.cn/category/data-structure/" type=""]数据结构[/button][button color="success" icon="" url="https://blog.fivk.cn/category/algorithm/" type=""]算法基础[/button][post cid="1075" cover="" size=""/][post cid="1028" cover="" size=""/]前端开发[post cid="1869" cover="" size=""/][post cid="2125" cover="" size=""/][post cid="2195" cover="" size=""/][post cid="2220" cover="" size=""/][post cid="2256" cover="" size=""/]尚硅谷Vue2+Vue3全家桶：https://github.com/emmmua/study_vue[post cid="2297" cover="" size=""/][post cid="3303" cover="" size=""/]后端开发包括JavaSE、JavaWeb、以及主流框架，我走的是Java路线，主要看黑马程序员的视频，所以文章上会有很多黑马程序员的内容，b站上都有，强力推荐。1. Linux[post cid="1109" cover="" size=""/][post cid="3468" cover="" size=""/][post cid="6610" cover="" size=""/]2. JavaSE[post cid="804" cover="" size=""/]3. JavaWeb[post cid="1201" cover="" size=""/]4. 基础框架[post cid="1327" cover="" size=""/]5. 微服务技术栈[post cid="1614" cover="" size=""/][post cid="3337" cover="" size=""/]项目实战一些自学的项目、b站黑马的、知识星球的，做一个记录。1. 瑞吉外卖做一个外卖平台的项目，2022-06-08现在开始！！！[post cid="1427" cover="" size=""/]2. 探花交友又是黑马的一大项目，练习微服务基础前端：flutter + android + 环信SDK + redux + shared_preferences + connectivity + iconfont + webview + sqflite后端：Spring Boot + SpringMVC + Mybatis + MybatisPlus + DubboElasticsearch geo 实现地理位置查询MongoDB 实现海量数据的存储Redis 数据的缓存Spark + MLlib 实现智能推荐第三方服务 环信即时通讯第三方服务 阿里云 OSS 、 短信服务第三方服务 虹软开放平台 / 阿里云[post cid="1643" cover="" size=""/]3.短链接系统[scode type="blue" size="simple"]当时上班需要，然后找了知识星球-马丁的短…

adb常用命令
type: item
date: 2025-11-12T18:13:30+08:00
description: ### adb 命令 adb devices # 列出 adb 设备 adb reboot # 重启设备 adb reboot bootloader # 重启到 fastboot 模式 adb reboot recovery # 重启到 recovery 模式 adb reboot edl # 重启到 edl(9008)模式 ### fastboot 命令 fastboot devices # 列出 fastboot 设备 fastboot reboot # 重启设备 fastboot reboot-bootloader # 重启到 fastboot 模式 fastboot reboot recovery # 重启到 Recovery 模式 fastboot flash <分区名称> <镜像文件名> # 刷写分区 fastboot oem reboot-<模式名称> # 重启到相应模式 fastboot oem device-info # 查看解锁状态 fastboot oem edl # 重启到 edl(9008)模式 fastboot --disable-verity --disable-verification flash vbmeta # 禁用 vbmeta 校验

【Docker】使用 Docker 安装 PostgreSQL + pgvector 向量数据库（基于 pgvector/pgvector:pg16）
type: item
date: 2025-06-30T21:57:00+08:00
description: 随着大模型（LLM）和向量检索（RAG、Embedding）应用兴起，向量数据库变得越来越重要。其中，PostgreSQL + pgvector 成为非常流行的一种组合方案，既能保留关系数据库的强大特性，又能高效地进行向量检索。本篇文章将手把手教你如何 使用 Docker + Docker Compose 部署 PostgreSQL 16 + pgvector 插件。1. 创建项目目录与配置文件我们建议将项目文件组织在一个单独目录下：mkdir pgvector-demo && cd pgvector-demo然后在其中创建一个 docker-compose.yml 文件，内容如下：version: '3.8' services: db: image: pgvector/pgvector:pg16 container_name: pgvector-db environment: POSTGRES_USER: myuser POSTGRES_PASSWORD: mypassword POSTGRES_DB: mydb ports: - "5432:5432" volumes: - pgdata:/var/lib/postgresql/data volumes: pgdata:说明：使用 pgvector/pgvector:pg16 镜像，内置 PostgreSQL 16 + pgvector 插件。数据保存在 Docker 卷 pgdata 中，重启不会丢失。监听宿主机端口 5432，可用本地工具如 pgAdmin, DBeaver, psql 连接。2. 启动服务在 docker-compose.yml 所在目录下运行：docker-compose up -d查看容器状态：docker ps输出应包含一个名为 pgvector-db 的容器，状态为 Up。3. 验证 pgvector 安装成功进入 PostgreSQL 容器：docker exec -it pgvector-db psql -U myuser -d mydb启用 pgvector 插件：CREATE EXTENSION IF NOT EXISTS vector; \dx你应该能看到如下输出： List of installed extensions Name | Version | Schema | Description ----------+---------+------------+---------------------------------------------- vector | 0.X | public | vector data type and distance functions (1 row)4. 插入并查询向量数据（示例）-- 创建表，包含一个向量字段（维度为3） CREATE TABLE items ( id SERIAL PRIMARY KEY, embedding vector(3) ); -- 插入向量数据 INSERT INTO items (embedding) VALUES ('[1,1,1]'), ('[2,2,2]'), ('[1,0,0]'); -- 查询与 [1,1,1] 最接近的向量（基于欧几里得距离） SELECT id, embedding FROM items ORDER BY embedding <-> '[1,1,1]' LIMIT 3;5. 常用 Docker 管理命令功能命令启动服务docker-compose up -d停止并移除容器docker-compose down查看日志docker-compose logs -f进入容器终端docker exec -it pgvector-db bash进入 psqldocker exec -it pgvector-db psql -U myuser -d mydb6. 延伸建议可以在此基础上结合 OpenAI、HuggingFace、LangChain 等工具，将 Embedding 数据写入 vector 字段。推荐使用 pgvector-py（Python SDK）或 psycopg 操作数据库。可加入 pgAdmin4 服务进行可视化管理。总结通过本教程完成了：在 Ubuntu 上使用 Docker 安装 PostgreSQL + pgvector；使用 docker-compose.yml 实现服务编排和数据持久化；插入和查询向量数据，验证向量检索功能。这个方案适用于开发环境、测试向量检索应用，甚至可在生产环境中扩展为向量增强的知识库（RAG 系统）或语义搜索平台。

【知识总结】Maven国内镜像
type: item
date: 2025-05-11T14:52:33+08:00
description: 阿里云：http://maven.aliyun.com/中央仓库：https://repo1.maven.org/maven2/网易：http://maven.netease.com/repository/public/华为云：https://repo.huaweicloud.com/repository/maven/tencent：https://mirrors.cloud.tencent.com/repository/maven/中国科技大学：http://mirrors.ustc.edu.cn/maven/maven2/南京大学：http://maven.nju.edu.cn/repository/清华大学：https://repo.maven.apache.org/maven2/北京理工大学：http://mirror.bit.edu.cn/maven/东软信息学院：https://mirrors.neusoft.edu.cn/maven2/中国科学院开源协会：http://maven.opencas.cn/maven/北京交通大学：http://maven.bjtu.edu.cn/maven2/<mirrors> <mirror> <id>aliyun</id> <url>http://maven.aliyun.com/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>central</id> <url>https://repo1.maven.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>netease</id> <url>http://maven.netease.com/repository/public/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>huaweicloud</id> <url>https://repo.huaweicloud.com/repository/maven/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>tencent</id> <url>https://mirrors.cloud.tencent.com/repository/maven/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>ustc</id> <url>http://mirrors.ustc.edu.cn/maven/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>nju</id> <url>http://maven.nju.edu.cn/repository/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>tsinghua</id> <url>https://repo.maven.apache.org/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>bit</id> <url>http://mirror.bit.edu.cn/maven/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>neusoft</id> <url>https://mirrors.neusoft.edu.cn/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>opencas</id> <url>http://maven.opencas.cn/maven/</url> <mirrorOf>central</mirrorOf> </mirror> <mirror> <id>bjtu</id> <url>http://maven.bjtu.edu.cn/maven2/</url> <mirrorOf>central</mirrorOf> </mirror> </mirrors>

【知识总结】使用 OpenVPN 实现按需分流：避免全局代理泄露隐私
type: item
date: 2025-05-06T22:30:00+08:00
description: 1. 背景介绍在远程办公或访问公司内网时，很多企业会通过 OpenVPN 提供一个 .ovpn 配置文件，供员工连接公司 VPN。默认情况下，一旦连接 VPN，电脑上所有的网络流量都会被强制通过 VPN 隧道转发。虽然这可以保障公司内部资源的安全访问，但也带来了如下问题：所有网络流量可能会被公司服务器监控；上网速度下降，外网访问受限；一些敏感应用（网银、邮箱）可能识别 VPN 并限制访问。因此，我希望仅让访问公司指定的内网 IP（如 10.*.*.*）走 VPN，而其他 IP（如外网、私有服务等）继续通过本地网络连接，从而既保证公司业务需求，也保护个人隐私和网络自由。2. 需求说明我的使用场景如下：使用公司提供的 .ovpn 文件连接 VPN；VPN 服务地址为 dev.****.com；公司内部需要访问的服务器 IP 为 10.12.13.226；希望只有访问 10.12.13.226 时才通过 VPN；所有其他流量（百度、邮箱、个人服务等）不经过 VPN，直接走本地网络。3. 实现方案3.1 屏蔽全局代理设置默认的 .ovpn 配置文件中，可能存在如下行：redirect-gateway def1这会导致所有网络流量都走 VPN，需要注释掉或删除：# redirect-gateway def1为了防止服务端强制推送这个设置，我们还可以添加：pull-filter ignore "redirect-gateway"这表示客户端忽略服务端强制下发的全局代理策略。3.2 添加分流路由规则接下来，只配置我们希望走 VPN 的 IP 地址。例如：route 10.12.13.226 255.255.255.255这表示只有访问该 IP 的流量会通过 VPN，其余流量依然通过本地网络直连。如果有多个内网 IP 或网段，可以继续添加多条 route 语句，例如：route 10.0.0.0 255.0.0.0 route 172.16.0.0 255.240.0.03.3 最终配置示例这是我最终使用的 .ovpn 文件关键配置部分（已脱敏处理）：client dev tun proto udp remote dev.****.com 11204 resolv-retry infinite nobind persist-key persist-tun remote-cert-tls server cipher AES-256-CBC auth SHA256 verb 3 # 不使用全局 VPN pull-filter ignore "redirect-gateway" # 指定要通过 VPN 的目标 IP，所有 10.12.13.* 的访问都会走 VPN route 10.12.13.0 255.255.255.0 route 10.xx.xx.xx 255.255.255.0 <ca> ...（证书内容）... </ca> <cert> ...（证书内容）... </cert> <key> ...（私钥内容）... </key>配置完成后，重新导入 OpenVPN 客户端即可使用。4. 如何验证是否分流成功可以使用操作系统提供的路由表查看命令：Windows 用户执行：route printmacOS / Linux 用户执行：netstat -rn检查是否只有访问 10.12.13.226 的数据走 VPN 网关，其他如 114.*.*.*、8.8.8.8 等仍然走默认本地网关即可。也可以通过浏览器访问 ip.sb 等站点，确认访问外网时出口 IP 并未变化。5. 总结通过修改 .ovpn 配置文件，可以实现 OpenVPN 的“分流”功能，仅将特定流量导向 VPN，从而避免因全局代理导致的隐私泄露、访问缓慢等问题。本方案简单易行，不依赖第三方工具，适用于所有希望在使用 VPN 时同时保护隐私和效率的用户。

【Pyenv使用教程】轻松管理Python版本的入门与进阶指南
type: item
date: 2025-03-20T11:35:00+08:00
description: [scode type="blue" size="simple"]在日常开发中，我们往往需要在同一台机器上安装和切换多个 Python 版本。pyenv 正是为此而生的一款工具，它能帮助我们方便地安装、管理和切换 Python 版本，让开发环境更加灵活。本文将详细介绍 pyenv 的安装、配置、常用命令及注意事项，帮助你快速上手并高效使用 pyenv。[/scode]1. 什么是 pyenv？pyenv 是一个轻量级的 Python 版本管理工具，它允许用户在同一台机器上安装和管理多个 Python 版本。无论你是要切换全局版本，还是为项目设置局部版本，pyenv 都能轻松实现。通过简单的命令，你可以：查看已安装的 Python 版本列表安装新版本的 Python设置全局或局部的默认 Python 版本快速切换不同项目的 Python 环境2. 安装 pyenv自动安装最便捷的安装方式是使用官方推荐的自动安装脚本。打开终端，运行以下命令：curl https://pyenv.run | bash该脚本会自动下载并安装 pyenv 以及相关插件（如 pyenv-virtualenv、pyenv-update 等）。手动安装如果你更倾向于手动安装，可以按照以下步骤操作：克隆 pyenv 仓库到本地（假设安装在 ~/.pyenv）：git clone https://github.com/pyenv/pyenv.git ~/.pyenv根据需要安装其他插件，比如 pyenv-virtualenv：git clone https://github.com/pyenv/pyenv-virtualenv.git ~/.pyenv/plugins/pyenv-virtualenv3. 环境配置安装完成后，需要将 pyenv 的可执行文件添加到系统 PATH 中，并在 shell 初始化时加载 pyenv。以 bash 为例，可以在 ~/.bashrc 或 ~/.bash_profile 文件中添加如下配置：# 将 pyenv 添加到 PATH export PATH="$HOME/.pyenv/bin:$PATH" # 初始化 pyenv eval "$(pyenv init --path)" eval "$(pyenv init -)"如果你使用 zsh，则需要在 ~/.zshrc 中做相同的配置。完成后，重新加载配置文件或重启终端即可。4. 使用 pyenv 安装 Python 版本安装好 pyenv 后，就可以开始安装所需的 Python 版本了。查看可用的 Python 版本列表：pyenv install --list安装特定版本，例如安装 Python 3.9.2：pyenv install 3.9.2安装过程可能需要一些编译依赖，请根据提示安装相应的依赖库。如果遇到问题，请参考官方文档中的依赖说明。5. 切换与管理 Python 版本设置全局默认版本安装完成后，可以使用 pyenv global 命令设置全局默认的 Python 版本：pyenv global 3.9.2这会让所有未单独指定 Python 版本的终端会话默认使用 3.9.2。设置局部版本在项目目录下，你可以使用 pyenv local 命令为该目录（及其子目录）指定特定的 Python 版本：pyenv local 3.8.10这会在项目目录中生成一个 .python-version 文件，记录当前目录使用的 Python 版本。列出已安装的版本使用以下命令查看当前已安装的所有 Python 版本：pyenv versions快速切换你可以临时使用特定版本运行 Python 脚本，而无需改变全局或局部设置：pyenv shell 3.7.9 python --version6. 常见问题及解决方案依赖问题在安装某些 Python 版本时，可能会提示缺少编译依赖。请参考系统的包管理工具安装缺少的依赖项（如 libssl-dev、zlib1g-dev 等）。命令未生效如果在配置了环境变量后仍无法使用 pyenv，请确认配置文件已正确加载，并尝试重启终端或执行 source ~/.bashrc。权限问题如果安装或运行过程中遇到权限问题，建议检查当前用户是否有足够的权限来修改相应目录，或者考虑使用 sudo 安装相关依赖，但一般不建议对 pyenv 本身使用 sudo。7. 总结pyenv 为 Python 开发者提供了一个便捷的版本管理工具，通过简单的命令可以轻松安装、切换和管理多个 Python 版本。无论你是在开发不同项目，还是需要测试不同版本的兼容性，pyenv 都能大大简化你的工作流程。希望这篇教程能帮助你快速上手，享受灵活高效的 Python 开发体验。更…

【知识总结】常用Linux应用安装
type: item
date: 2025-03-20T11:23:00+08:00
description: [post cid="6607" cover="" size=""/][post cid="6611" cover="" size=""/]

Python源码安装与卸载指南
type: item
date: 2025-03-20T11:18:00+08:00
description: [scode type="blue" size="simple"]在开发和运维过程中，我们经常需要在不同的 Linux 发行版上安装特定版本的 Python。由于各发行版的包管理器及依赖名称不同，直接利用系统自带的软件包有时无法满足需求。本文介绍一种通用的方法：通过源码编译安装 Python，同时附上卸载步骤。这种方式基本适用于 CentOS 和 Ubuntu，并能支持大部分 Python 版本（无论是 2.x 还是 3.x），只要对应版本的源码可用。[/scode]1. 为什么选择源码安装？通用性高：源码编译的方式独立于系统自带包管理器，适用于大多数 Linux 发行版；版本自由：无论你需要最新版本还是历史版本，都可以从 Python 官方网站或镜像站点获取源码；定制性强：可通过编译选项进行优化、定制安装目录，避免干扰系统默认的 Python 环境。提示： 如果你对编译过程不是很熟悉，也可以考虑 pyenv 来管理多个 Python 版本，但本文将重点介绍源码编译方法。2. 环境准备不同系统的依赖包名称有所不同，下面分别列出 CentOS 和 Ubuntu 的依赖安装步骤。在 Ubuntu 上执行以下命令安装编译所需依赖：sudo apt-get update sudo apt-get upgrade sudo apt-get install build-essential libssl-dev libffi-dev zlib1g-dev \ libncurses5-dev libncursesw5-dev libreadline-dev libsqlite3-dev \ libgdbm-dev libdb5.3-dev libbz2-dev libexpat1-dev liblzma-dev tk-dev在 CentOS 上对于 CentOS 系统，首先安装开发工具组及常用依赖：sudo yum groupinstall "Development Tools" sudo yum install openssl-devel bzip2-devel libffi-devel zlib-devel ncurses-devel \ readline-devel sqlite-devel gdbm-devel db4-devel libpcap-devel xz-devel tk-devel注意：依赖包名称可能因 CentOS 版本而略有差异，请根据实际情况调整。3. 下载与编译 Python1.下载源码从 Python 官方下载页面 或国内镜像站下载你需要安装的 Python 源码包。例如，下载 Python 3.7.17：wget https://www.python.org/ftp/python/3.7.17/Python-3.7.17.tgz2.解压源码包tar -xf Python-3.7.12.tgz cd Python-3.7.123.配置与编译配置时建议指定安装目录，并开启优化选项。为了避免覆盖系统默认 Python，使用 altinstall：./configure --prefix=/usr/local/python3.7.17 --enable-optimizations make -j$(nproc) sudo make altinstall[collapse status="false" title="【点击展开】make install与make altinstall的区别"] 在 Linux 系统上使用 make altinstall代替make install 主要是为了避免覆盖系统默认的 Python 版本。make install vs. make altinstallmake install默认会安装 Python，并创建或覆盖 /usr/bin/python 这个符号链接（symlink）。可能会影响系统的默认 Python 版本，从而导致某些系统工具（如 yum、dnf 等）出问题。make altinstall不会创建 /usr/bin/python 符号链接。只会安装 pythonX.Y（比如 python3.9），但不会覆盖 python 的默认版本。适用于多版本共存，比如安装 Python 3.9，但仍然保留 Python 2.7 作为默认版本。示例./configure --enable-optimizations make -j$(nproc) sudo make altinstall执行后：python3.9 可用（如果编译的是 3.9）。python 仍指向系统默认的 Python 版本（如 2.7 或 3.6）。如何切换 Python 版本如果需要使用新安装的 Python…

【MySQL】深入实践：10个提升MySQL生产力的高阶技巧
type: item
date: 2025-03-07T09:27:00+08:00
description: [scode type="blue" size="simple"]在日常开发中，SQL语句的优化和高效使用往往是提升数据库性能的关键。本文将分享10个容易被忽视但极具实用价值的MySQL技巧，涵盖从函数使用到查询优化的多个层面。[/scode]1. 字符处理的精准控制测试数据准备CREATE TABLE text_samples ( id INT PRIMARY KEY, content VARCHAR(100) ); INSERT INTO text_samples VALUES (1, 'Hello World'), (2, '数据库'), (3, ' 前后空格 ');对比函数演示SELECT id, content, LENGTH(content) AS byte_len, -- 字节长度 CHAR_LENGTH(content) AS char_len, -- 字符个数 TRIM(content) AS trimmed, -- 去前后空格 LENGTH(TRIM(content)) AS trimmed_byte_len FROM text_samples;执行结果idcontentbyte_lenchar_lentrimmedtrimmed_byte_len1Hello World1111Hello World112数据库93数据库93前后空格128前后空格8关键点：处理多字节字符时，CHAR_LENGTH() 比 LENGTH() 更准确反映实际字符数2. 窗口函数实战：销售分析测试数据准备CREATE TABLE sales ( sale_date DATE, product VARCHAR(50), amount DECIMAL(10,2) ); INSERT INTO sales VALUES ('2023-01-05', '手机', 5000), ('2023-01-05', '耳机', 300), ('2023-01-06', '手机', 4800), ('2023-01-07', '平板', 2500);复杂窗口函数应用SELECT sale_date, product, amount, SUM(amount) OVER(PARTITION BY product ORDER BY sale_date) AS product_total, RANK() OVER(ORDER BY amount DESC) AS amount_rank, LAG(amount, 1) OVER(PARTITION BY product ORDER BY sale_date) AS prev_amount FROM sales;执行结果sale_dateproductamountproduct_totalamount_rankprev_amount2023-01-05手机500050001NULL2023-01-06手机48009800250002023-01-07平板250025003NULL2023-01-05耳机3003004NULL业务价值：无需临时表即可实现：按产品累计销售额全品类销售额排名同类产品上次销售金额3. 递归CTE实战：企业组织架构全展开与优化本文将通过完整可执行的集团组织架构案例，深入演示递归CTE的进阶应用，涵盖：多级部门展开、层级路径生成、循环检测、性能优化等关键场景。所有示例基于MySQL 8.0+验证通过。3.1 测试环境搭建（含循环数据）部门表结构设计-- 创建带深度限制的部门表 CREATE TABLE departments ( dept_id INT PRIMARY KEY, dept_name VARCHAR(50) NOT NULL, parent_id INT DEFAULT NULL, hierarchy_level TINYINT NOT NULL DEFAULT 1, INDEX idx_parent (parent_id), CONSTRAINT fk_parent FOREIGN KEY (parent_id) REFERENCES departments(dept_id) ON DELETE CASCADE ) ENGINE=InnoDB; -- 插入测试数据（含循环风险数据） INSERT INTO departments VALUES (1, '集团公司', NULL, 1), (2, '华东事业部', 1, 2), (3, '上海分公司', 2, 3), (4, '技术研发中心', 3, 4), (5, '前端开发部', 4, 5), (6, '后端开发部', 4, 5), (7, 'HR共享中心', 1, 2), (8, '财务审计部', 1, 2), (9,…

【Git】Fork仓库与原仓库同步指南：告别代码冲突的终极解决方案
type: item
date: 2025-03-01T15:39:00+08:00
description: 引言：每个开发者都会遇到的困境[scode type="blue" size="simple"]当你满怀信心地提交PR时，突然发现原仓库早已更新迭代，这种"代码时差"的尴尬场景相信很多开发者都经历过。本文将手把手教你搭建自动化同步通道，让你fork的仓库与原仓库实时保持同步，从此告别合并冲突的烦恼。[/scode]一、建立双通道通信（配置远程仓库）1.1 诊断当前连接状态git remote -v # 典型输出示例 # origin https://github.com/yourname/repo.git (fetch) # origin https://github.com/yourname/repo.git (push)1.2 配置上游通道# 格式：git remote add upstream 原仓库地址 git remote add upstream https://github.com/original/repo.git # 验证配置 git remote -v # 现在应该看到两个remote： # origin https://github.com/yourname/repo.git (fetch) # origin https://github.com/yourname/repo.git (push) # upstream https://github.com/original/repo.git (fetch) # upstream https://github.com/original/repo.git (push)技术贴士：upstream是约定俗成的命名，但你可以自定义任何名称，保持团队统一即可二、构建同步流水线（代码同步操作）2.1 获取上游更新git fetch upstream # 输出示例： # remote: Enumerating objects: 75, done. # remote: Counting objects: 100% (75/75), done. # remote: Compressing objects: 100% (32/32), done. # remote: Total 43 (delta 28), reused 34 (delta 19) # Receiving objects: 100% (43/43), 8.21 KiB | 8.21 MiB/s, done. # Resolving deltas: 100% (28/28), completed with 12 local objects.2.2 切换主战场git checkout main # 或 master，根据仓库分支命名 # 成功提示：Switched to branch 'main' # Your branch is up to date with 'origin/main'.2.3 智能合并策略git merge upstream/main # 成功合并提示： # Updating a1b2c3d..e4f5g6h # Fast-forward # README.md | 2 +- # 1 file changed, 1 insertion(+), 1 deletion(-)高级技巧：推荐使用git rebase upstream/main保持提交历史线性三、冲突解决锦囊当看到以下提示时：CONFLICT (content): Merge conflict in file.txt Automatic merge failed; fix conflicts and then commit the result.3.1 四步解决法：使用git status定位冲突文件在编辑器中手动解决冲突（VSCode用户推荐使用内置的合并工具）标记已解决：git add <file>完成合并：git commit -m "Merge upstream changes"四、同步到你的fork仓库git push origin main # 输出示例： # Enumerating objects: 15, done. # Counting objects: 100% (15/15), done. # Delta compression using up to 8 threads # Compressing objects: 100% (8/8), done. # Writing objects: 100% (8/8), 1.01 KiB | 1.01 MiB/s, done. # Total 8 (delta 6), reused 0 (delta 0) # remote: Resolving deltas: 100% …

使用 MongoDB 实现分页查询与条件查询中的注意事项
type: item
date: 2025-01-10T23:10:00+08:00
description: 引言[scode type="share" size="simple"]在基于Spring Data MongoDB的开发中，分页与条件查询是高频操作，但其实现细节中存在诸多易错点。本文结合代码实例与典型场景，深入剖析五大核心问题及优化方案，并补充性能优化与设计规范。[/scode]一、基础代码示例与问题背景Pageable pageable = PageRequest.of(page-1, size, Sort.by("orderNumber").descending()); Query query = new Query(); // 动态条件构建 if (orderNumber != null) { query.addCriteria(Criteria.where("orderNumber").is(Long.parseLong(orderNumber))); } if (consignee != null) { query.addCriteria(Criteria.where("consignee").regex(consignee, "i")); } if (beginTime != null || endTime != null) { handleDateRange(query, beginTime, endTime); // 日期范围处理封装 } // 总条数与分页结果查询 long total = mongoTemplate.count(query, OrderEntity.class); query.with(pageable); List<OrderEntity> entities = mongoTemplate.find(query, OrderEntity.class);二、核心问题与解决方案1. 分页操作污染总条数计算问题现象若先调用query.with(pageable)再执行count()，分页限制（如skip/limit）会导致总条数统计错误。解决方案严格分离统计与分页阶段：// 阶段一：统计总数（未分页） long total = mongoTemplate.count(query, Order.class); // 阶段二：应用分页参数 query.with(pageable); List<Order> data = mongoTemplate.find(query, Order.class);2. 类型不匹配导致查询失效典型场景数据库字段类型为Long，但Java条件传递String类型值时，因MongoDB类型强校验导致匹配失败。优化建议使用统一类型转换工具：public void addLongCriteria(Query query, String field, String value) { if (StringUtils.isNotEmpty(value)) { try { query.addCriteria(Criteria.where(field).is(Long.parseLong(value))); } catch (NumberFormatException e) { throw new IllegalArgumentException("字段["+field+"]必须为数字类型"); } } }3. 正则表达式大小写敏感问题技术细节Criteria.regex()默认大小写敏感，需显式添加"i"修饰符实现模糊匹配。扩展方案支持动态大小写控制：String regexOptions = caseSensitive ? "" : "i"; criteria.regex(value, regexOptions);4. 日期范围查询条件冲突错误示例// 错误：多次添加createdAt条件 if (beginTime != null) query.addCriteria(Criteria.where("createdAt").gte(beginTime)); if (endTime != null) query.addCriteria(Criteria.where("createdAt").lte(endTime));正确实践单条件链式构建：Criteria dateCriteria = new Criteria(); if (beginTime != null) dateCriteria.gte(beginTime); if (endTime != null) dateCriteria.lte(endTime); if (beginTime != null || endTime != null) { query.addCriteria(dateCriteria); }5. 动…