日常问题汇总
2026.05.09 vscode在右下角选择python解释器只在终端生效,代码提示和运行不生效 Crtl+Shift+P,找到Python: Select interpreter再选择一次即可生效 2026.04.01 mac本地shell 语言是en_US.UTF-8,ssh的机器语言是zh_CN.UTF-8,并且没有en_US.UTF-8语言文件,会报错 bash: warning: setlocale: LC_CTYPE: cannot change locale (en_US.UTF-8): No such file or directory 生成对应语言文件 sudo sed -i 's/# en_US.UTF-8/en_US.UTF-8/' /etc/locale.gen sudo locale-gen 2026.02.27 同一个appleid的apple支付的origin_trans_id是相同的,但是可能对应产品的多个用户uid 解决ubuntu CUDA Toolkit和gcc...
文件系统如何操作硬盘
操作系统如何识别和控制硬盘 硬盘交给系统的是一段块地址 对操作系统来说,硬盘不是一堆文件,而是一长串按编号排好的块。每个块大小一样,从 0 开始编号。机械硬盘和 SSD 都一样,系统看到的是这些块,不是盘片或闪存颗粒。 系统向硬盘发起读写时,只给出两个信息:从第几个块开始,读或写多少个块。硬盘不需要知道这些块属于哪个文件。例如: 从第 100000 块开始,读 8 个块 100000 是起始块号,8 是长度。起始块号乘以块大小,就是字节偏移;8 乘以块大小,就是这次读写的长度。硬盘只认这个起始位置和长度。 文件系统要做的事,就是在这串块上建立结构:哪些块存文件名、目录、文件位置这些信息,哪些块存文件内容。 块大小不止一个 机械硬盘和 SSD 的块大小是多少?这个问题没有单一答案,“块”在不同层有不同含义: 单位 典型大小 谁在用 设备逻辑块 512 B 或 4096 B 主机寻址,LBA 设备物理块/扇区 4096 B(HDD 常见) 设备读写、纠错 NAND 页 4–16 KiB SSD 编程 NAND 擦除块 数百个页 SSD 擦除 文件系统块 ...
Unraid 虚拟机里 perf 计数为 0 排查
Unraid 虚拟机里 perf 计数为 0 在 Unraid 的 Ubuntu 虚拟机里跑 perf stat,task-clock 有数,cycles 和 instructions 却一直是 0。加了 sudo,换成持续计算的 Python 程序,结果也一样。 这次的环境是 i3-12100、Unraid 7.3.2,宿主内核 6.18.38-Unraid,Ubuntu 内核 7.0.0-34-generic。虚拟 CPU 用的是 host-passthrough,宿主的 enable_pmu 也是 Y。 先用计算任务确认问题,命令在 Ubuntu 内执行: sudo taskset -c 0 perf stat \ -e task-clock,cpu_core/cycles/,cpu_core/instructions/ -- \ python3 -c 'sum(range(100000000))' 输出中的关键三行: 552.10 msec task-clock 0 cpu_core...
为什么 cgo 会有性能开销
为什么 cgo 会有性能开销 很多人第一次听到这件事,直觉都会有点不服。 Go 调 C,明明还在同一个进程里,没有网络,没有磁盘,没有系统调用风暴,为什么就会比普通 Go 函数调用贵这么多? 如果把这个问题说得更尖一点,就是下面这句: 同样是“调用一个函数”,为什么 goFunc() 可以快到几乎看不见,而 C.func() 一下子就有了明显的固定成本? 我的结论先放前面: cgo 慢,不是因为“跨语言”这四个字自带魔法,而是因为 Go runtime 在进入 C 代码之前,要先把调度器、栈、ABI 和指针规则都安顿好。真正贵的,不是那次函数跳转本身,而是跳转前后的整套交接手续。 这也是为什么很多人会把 cgo 的性能问题看偏。真正需要盯住的,往往不是“C 语言是不是比 Go 快”,而是“你是不是在高频小调用里反复穿越这条边界”。 先看一个数字 我在 Apple M4 Pro、macOS arm64、Go 1.25.12 上做了一个最小基准:一边是 //go:noinline 的 Go 加法函数,一边是 __attribute__((noinline)) 的 C 加法函数。 结果...
milvus教程1: 从零开始理解向量数据库
什么是 Milvus? Milvus 是一个开源的高性能向量数据库,专为 AI 应用的海量非结构化数据检索而设计。 想象一下:你想在几百万张图片中找到"与这张猫最相似的 100 张",或者在千万篇文档里搜索"与这段文字语义最接近的内容"——传统数据库做不到,而 Milvus 可以。 它把文本、图片、视频等非结构化数据转换成向量(一长串数字),然后通过高效的**近似最近邻搜索(ANNS)**算法,在亿级数据中毫秒级找到最相似的结果。 Milvus 用 Go 和 C++ 编写,支持 CPU/GPU 硬件加速,采用计算与存储分离的分布式架构,可以水平扩展到数十亿向量。同时也提供单机模式(Standalone)和Milvus Lite(pip install 即可用),一套 API 从小项目无缝切换到企业级。 想零配置体验?Zilliz Cloud ☁️ 是 Milvus 的全托管云服务,免费额度即可上手。 架构概览 下图展示了 Milvus 的完整代码架构,从用户请求到硬件加速,共 10 层: flowchart TB clien...
面经-linux
长连接网关服务器参数设置 进程文件描述符数量限制,单次使用ulimit -n 65536 看了几个C++网络库实现,listen的参数基本直接使用内核的#define SOMAXCONN 4096 TCP读写缓冲区大小设置 net.ipv4.tcp_rmem net.ipv4.tcp_wmem 内核netfiter可以同时处理的任务数net.nf_conntrack_max 半连接队列和全连接队列大小设置 https://cloud.tencent.com.cn/developer/article/1638042?policyId=1003
高并发之rcu(Read-Copy-Update)
最近在看envoy的时候,里面有提到一个RCU的概念,发现这种同步机制在前前公司的项目中经常使用在前前公司的项目中,有配置读取这样多读少写的情况,删减之后的核心代码如下: 最新的配置直接使用原子变量指针,由于只有一个线程写入,访问old_server_config_ 无需加锁 每次GetServerConfig时,都是获取的最新配置,旧的配置内存没被回收,也可以继续访问 这种实现形式避免了加互斥锁或者读写锁,基本对读性能没有影响 template <typename Config> class ServerConfigManager { public: virtual ~ServerConfigManager() { std::for_each(old_server_config_.begin(), old_server_config_.end(), [](Config*& config) { delete config; }); d...
从drogon编译学习cmake查找库的过程find_package
背景 最近把ubuntu系统从2404升级到了2604,发现使用drogon框架的一个http服务启动不了,原因是本地的jsoncpp库由libjsoncpp.so.25升级到了libjsoncpp.so.26 因此想把jsoncpp改成链接静态库 解决过程 修改USE_STATIC_LIBS_ONLY变量 查看drogon的CMakeLists.txt文件,发现有如下代码: option(USE_STATIC_LIBS_ONLY "Use only static libraries as dependencies" OFF) # jsoncpp find_package(Jsoncpp REQUIRED) target_link_libraries(${PROJECT_NAME} PUBLIC Jsoncpp_lib) 在自己的CMakeLists.txt文件中,将USE_STATIC_LIBS_ONLY设置为ON,编译之后,发现还是链接的jsoncpp动态库,USE_STATIC_LIBS_ONLY并没有影响到jsoncpp的链接方式...
MCP协议遇到的坑
client 问题 请求head需要定义{"Accept", "application/json, text/event-stream"} 如果使用自签证书,需要在openclaw等agent环境变量中配置NODE_TLS_REJECT_UNAUTHORIZED=0,或者在操作系统中配置自签证书 nodejs默认会验证证书有效性,报错为TypeError: fetch failed structuredContent格式问题 在给一个服务增加mcp协议时,遇到一个问题,tool返回的structuredContent字段的格式是数组,而不是对象 mcp client会解析报错搜索谷歌找到SEP-2106: Tools inputSchema & outputSchema Conform to JSON Schema 2020-12 这个提案截止到2026-05-25还只是草稿 当前最新的schema定义是2025-11-25
Kubernetes和有状态服务
最近在学习Kubernetes,发现Kubernetes支持部署有状态服务,在之前的工作中一直在做长连接和有状态服务相关的工作,使用裸机部署服务。换工作之后,新公司后端的服务使用aws的ecs部署,但是长连接服务还是使用的裸机部署。长连接和有状态服务,频繁重启会影响用户体验,也可能会在造成数据错误,使用k8s或者类似的弹性容器编排平台,运维成本会很高。 在k8s上部署的服务,ip地址和运行的实际物理节点可能是不同的,所以网络和存储都需要远程管理,依赖另外的基础设施。所以云原生架构图如下: Todo 有状态服务如何部署及管理? 依赖的注册中心/DNS/ETCD可以部署在k8s集群中? 参考资料 k8s实践(13)–有状态服务StatefulSet详解
Openclaw使用及LandscapeRoute接入
Openclaw不直接支持mcp,需要通过mcporter接入MCP Server 可以在openclawdashboad页面Skill里安装,也可以使用npm安装 npm install -g mcporter Warning https://jishuzhan.net/article/2026151995774664706 这篇文章里openclaw mcp命令根本没有,纯纯误导,不知道是版本更新之后没了,还是文章就写错了。 v2026.5.22 版本已经原生支持mcp协议
Dify部署
dify可以分成两部分部署,核心服务+中间件 difyapi服务器,使用.env和docker-compose.yaml dify web dify api dify worker dify workerbeat 定时器服务 启动命令 sudo docker compose down && sudo docker compose up -d Dify 依赖的中间件服务器,使用middleware.env和docker-compose.middleware.yaml 数据库 postgres:15-alpine redis:6-alpine emitechnologies/weaviate:1.27.0 langgenius/dify-sandbox:0.2.12 用于python代码执行 langgenius/dify-plugin-daemon:0.5.1-local 插件相关 启动命令 sudo docker compose -f docker-compose.middleware.yaml --profile ...