IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

最新文章

采集自各技术站点的近期文章。

IT 算法/ 2026-06-03 09:03:23 / 累计浏览 40

算法模式:前缀和

前缀和是一种高效的数组预处理技术,用于解决区间和查询问题。其核心思想是预先计算数列前n项的累计和,生成一个前缀和数组,使得任意区间的和可以通过简单的减法运算快速获得。这种方法将每次查询的时间复杂度从O(n)降低到O(1),代价是需要额外的O(n)空间存储前缀和。在具体应用中,例如LeetCode 303题“区域和检索 - 数组不可变”,要求对给定数组频繁执行区间求和操作。通过初始化时构建前缀和数组(其中prefix[0]为0,prefix[i]表示原数组前i-1项的和),sumRange(left, right)方法可以直接返回prefix[right+1] - prefix[left],避免了重复遍历数组的开销。该模式特别适合数据不可变且查询密集的场景,是优化动态规划或滑动窗口等问题的常见辅助手段。掌握前缀和有助于提升算法效率,尤其在处理大数据集或实时查询时,能显著减少计算成本。

本机暂存
IT 算法/ 2026-06-03 09:03:23 / 累计浏览 45

算法模式:并查集

并查集是一种用于解决动态连通性问题的数据结构,能够高效管理节点间的连接关系并快速判断任意两点是否属于同一连通分量。其核心操作包括`union`(合并两个节点所属的集合)和`connected`(查询两个节点是否连通)。初始化时每个节点自成一组,通过`parent`数组记录节点的父节点,最终形成树状结构。 判断连通性时需向上查找各自根节点并比较是否相同。为提升查询效率,可应用路径压缩技术:在查找根节点过程中,将路径上所有节点直接指向根节点,从而大幅降低后续操作的时间复杂度。文章通过图示和Java代码示例展示了并查集的基本实现,包括查找、合并、连通分量计数等功能,体现了其在处理动态集合合并与连通性查询场景下的实用性。

本机暂存
IT 算法/ 2026-06-03 09:03:23 / 累计浏览 36

算法模式:子集

在上一篇文章 算法模式:回溯 介绍一种“一步三回头”、“落棋有悔”的算法模式:回溯。本篇文章,介绍一种无需“一步三回头”,无需“落棋有悔”也可以解决排列组合问题的算法模式:子集。

子集

超级多的编程面试问题都会涉及到排列和组合问题。一般都是使用回溯来解决该类问题,回溯法属于 深度优先搜索。子集问题模式讲的是用 广度优先搜索 来处理这些问题。子集模式适用于子集与全排列。下面分别介绍:

处理子集问题

举例来说明一下这个模式:

给一组数字 [1, 5, 3]

  1. 我们从空集开始:[[]]

  2. 把第一个数 1,加到之前已经存在的集合中:[[], [1]];

  3. 把第二个数 5,加到之前的集合中得到:[[], [1], [5], [1,5]];

  4. 再加第三个数 3,则有:[[], [1], [5], [1,5], [3], [1,3], [5,3], [1,5,3]].

如果原有集合中存在重复元素,那么就需要针对这种情况特殊处理一下。流程如下:

给一组数字 [5, 1, 5]

  1. 先对原有集合进行排序: [1, 5, 3]

  2. 从空集开始:[[]]

  3. 把第一个数 1,加到之前已经存在的集合中:[[], [1]];

  4. 把第二个数 5,加到之前的集合中得到:[[], [1], [5], [1,5]];

  5. 处理第三个数,也是 5 时需要注意:

    1. 如果还是按照上述方案处理,那么就会得到如下结果: [[], [1], [5], [1,5], [5], [1, 5], [5, 5], [1,5, 5]]。这里出现了重复子集: [5], [1, 5]。该方案不通过,❌

    2. 观察最后生成的所有子集与重复的子集,会发现重复的子集,在处理第二个数时,已经处理过 [], [1],如果再次处理 5,那么就会出现重复。所以,只需要处理在处理上一个相同的数时新增加的子集即可。上一个相同数新增的子集是 [5], [1,5],只需要在这些子集后面增加当前数字即可。这样最后的子集就是:[[], [1], [5], [1,5], [5, 5], [1,5, 5]]。方案通过 ✅

本机暂存
IT 数据库/ 2026-06-03 09:03:23 / 累计浏览 66

如何在本地打包 StarRocks 发行版

本文针对 StarRocks 用户在等待官方版本发布周期时,需要快速应用修复 PR(如物化视图重启导致全量刷新、excluded_refresh_tables 参数跨数据库失效等)的场景,介绍了本地打包发行版的完整流程。核心方法是利用社区提供的统一 Docker 镜像(starrocks/dev-env-ubuntu)简化构建环境,避免复杂的本地环境配置。具体步骤包括:拉取对应版本的 Docker 镜像,克隆 StarRocks 仓库并手动合并修复代码到分支,将宿主机源码目录挂载到容器中运行构建脚本(build.sh)生成前端(FE)和后端(BE)的产物。构建完成后,推荐使用更稳妥的方式替换镜像:以官方 FE 镜像为基础,仅替换新生成的 starrocks-fe.jar 文件来构建修复版本的 Docker 镜像,从而确保运行时的兼容性和最小化镜像修改。整个过程依赖官方文档和 GitHub 资源,适用于需要紧急部署定制修复版本的运维和开发场景。

本机暂存
IT 开发者/ 2026-06-03 09:03:23 / 累计浏览 57

我的 CodeReview 实战经验

背景

Code Review 是大家日常开发过程中很常见的流程,当然也不排除一些团队为了快速上线,只要功能测试没问题就直接省去了 Code Review。

我个人觉得再忙的团队 Code Review 还是很有必要的(甚至可以事后再 Review),好处很多:

  • 跳出个人开发的思维误区,更容易发现问题
  • 增进团队交流,提高整体的技术氛围
  • 团队水平检测器,不管是审核者还是被审核的,review 几次后大概就知道是什么水平了

通常 Code Review 有两种场景,一种是公司内部,还有就是开源社区。

开源社区

先说开源社区,最近也在做 cim 项目里做 Review,同时也在 Pulsar、OpenTelemetry、StarRocks 这些项目里做过 Reviewer。

以下是一些我参与 Code Review 的一些经验:

先提 issue

在提交 PR 进行 Code Review 之前最好先提交一个 issue 和社区讨论下,你的这个改动社区是否接受。

我见过一些事前没有提前沟通,然后提交了一个很复杂的 PR,会导致维护者很难 Review,同时也会打击参与者的积极性。

所以强烈建议一些复杂的修改一定先要提前和社区沟通,除非这是一些十拿九稳的问题。

个人 CI

一些大型项目往往都有完善的 CI 流程来保证代码质量,通常都有以下的校验:

  • 各种测试流程(单元测试、集成测试)
  • 代码 Code Style 检测
  • 安全、依赖检测等

如果一个 PR 连 CI 都没跑过,其实也没有提前 Review 的必要了,所以在提 PR 之前都建议先在自己的 repo 里将主要的 CI 都跑过再提交 PR。

这个在 Pulsar 的官方贡献流程里也有单独提到。

同时在 PR 模板里也有提到,建议先在自己的 fork 的 repo 里完成 CI 之后再提交到 upstream

这个其实也很简单,我们只要给自己的 repo 提交一个 PR,然后在 repo 设置中开启 Action,之后就会触发 CI 了。

如果自己的 PR 还需要频繁的提交修改,那建议可以先修改为 draft,这样可以提醒维护者稍后再做 Review。

同时也不建议提交一个过大的 PR,尽量控制在 500 行改动以内,这样才方便 Review。

Review 代码

Github 有提供代码对比页面,但也只是简单的代码高亮,没法像 IDE 这样提供函数跳转等功能。

所以对于 Reviewer 来说,最好是在本地 IDE 中添加 PR 的 repo,这样就可以直接切换到 PR 的分支,然后再本地跟代码,也更好调试。

有相关的修改建议可以直接在 github 页面上进行评论,这样两者结合起来 Review,效率会更高。

Review 代码其实不比写代码轻松,所以对免费帮你做 Review 的要多保持一些瑞思拜。

AI Review

现在 Github 已经支持 copilot 自动 Review 了,它可以帮我们总结变更,同时对一些参加的错误提供修改建议。

使用它还是可以帮我们省不少事情,推荐开启。

企业内部

在企业内部做 Code Review 流程上要简单许多,毕竟沟通成本要低一些,往往都是达成一致之后才会开始开发,所以重点就是 Review 的过程了。

既然是在公司内部,那就要发挥线下沟通的优势了;当然在开始前还是建议在内部的代码工具里比如说 gitlab 中提交一个 MR,先让参会人员都提前看看大概修改了哪些内容,最好是提前在 gitlab 中评论,带着问题开会讨论。

实际 Review 过程应该尽量关注业务逻辑与设计,而不是代码风格、格式等细枝末节的问题。

提出修改意见的时候也要对事不对人,我见过好几次在 Review 现场吵起来的场景,就是代入了一些主观情绪,被 Review 的觉得自己能力被质疑,从而产生了一些冲突。

Code Review 做得好的话整个团队都会一起进步,对个人来说参与一些优质开源项目的 Code Review 也会学到很多东西。

本机暂存
IT 数据库/ 2026-06-03 09:03:23 / 累计浏览 62

StarRocks 物化视图创建与刷新全流程解析

本文详细解析了StarRocks物化视图从创建到刷新的完整技术流程。在创建阶段,系统首先对SQL语句进行语义分析与校验,随后通过本地元数据服务完成一系列核心操作,包括验证数据库与视图的存在性、初始化列定义与刷新策略(如异步定时刷新)、根据存算一体或分离架构创建对象、处理分区映射逻辑,以及将关键数据序列化至元数据中以支持重启恢复。元数据通过FE集群的checkpoint机制定期快照,确保一致性。创建完成后,刷新流程会立即触发,其核心步骤在于同步物化视图与基础表的分区状态。对于常见的Range分区,系统通过特定分区器计算分区差异,并执行删除旧分区与添加新分区的操作,以确保物化视图的数据范围与基础表保持一致,随后基于此差异计算并执行具体的数据刷新任务。整个流程紧密围绕分区管理和元数据持久化展开,是理解StarRocks物化视图机制的关键。

本机暂存
IT AI/ 2026-06-03 09:03:23 / 累计浏览 72

微博 × MCP:社交媒体新玩法解锁

这篇从作者的个人经历切入,讲的是如何将一个失败的AI产品蜕变为基于MCP协议的实用工具。受Twitter Personality启发,他曾开发微博性格报告,用提示工程分析用户画像,但后来被互动性更强的“评论罗伯特”类账号击败。代码先变为Agent插件,随着MCP协议爆火,最终以mcp-server-weibo形式重生——一个Model Context Protocol服务器,让大模型能直接获取微博数据。 项目提供了7个工具,比如通过search_users搜索用户、get_feeds抓取动态、get_trendings获取热搜,支持uid或关键词操作,并兼容stdio和streamable-http。它能在VS Code、Cursor等客户端使用,方便开发者集成。 作者认为AI更像一面镜子,从多角度观察人类,而MCP协议解锁了社交媒体分析的新玩法。这个复盘不仅展示了技术迁移的韧性,还为读者带来了一个可直接上手的工具,探索大模型与社交数据的结合。

本机暂存
IT 安全/ 2026-06-03 09:03:23 / 累计浏览 39

离线授权码设计思路

本文系统性地探讨了软件产品的离线授权码设计思路与实现方案。文章首先区分了软件层面与硬件层面的授权方式,并聚焦于更灵活、低成本的软件授权码机制。设计核心在于授权码需具备设备绑定性、安全性、可验证性、可复现性等特征。实现的关键步骤包括获取设备的唯一稳定标识(如CPUID、主板UUID等),并在此基础上构建授权码。 文章详细剖析了两种主流技术方案:对称加密方案与非对称加密方案。对称方案通过将机器码、项目名、有效期与盐值拼接后进行哈希(如MD5)生成签名,并采用36进制编码等技巧优化用户体验,使其便于手动输入,但密钥需内置于客户端,存在一定逆向风险。非对称方案基于RSA算法,可签发包含丰富授权信息(如功能模块、有效期)的JSON格式许可证,安全性更高但授权数据较长。此外,文中也简要介绍了基于标准JWT的实现途径。 最后,文章指出了离线授权的安全局限性,并针对“时钟回拨”这一常见破解手段,提出了记录安全时间戳、与业务数据关联等实用的缓解措施。整体而言,文章提供了从基础设计到具体实现的多维度技术参考。

本机暂存
IT 数据库/ 2026-06-03 09:03:23 / 累计浏览 49

SQLite + zstd:定时任务日志压缩优化实践

针对定时任务日志系统的性能与存储压力问题,我们重构了原有基于MySQL的Webcron系统。原系统因日志查询与主业务共用数据库,导致页面加载严重超时;同时高频任务产生的海量日志数据急剧膨胀,占用大量磁盘空间。为此,我们采用SQLite替代MySQL作为独立的日志存储引擎,以消除对主业务的影响。核心优化在于应用zstd压缩算法,针对大于150字节的日志内容进行压缩,相比明文存储和gzip,实现了更优的压缩比与性能平衡。我们设计了按月分库的存储策略,将每月日志存入独立的SQLite文件,既简化了数据清理,也保证了查询性能的稳定。最终方案使用Go语言结合GORM与zstd库实现,达到每10万条日志仅占约10MB的压缩效果,并在数百万条日志中实现了毫秒级查询。此实践证明,对于中小型系统,SQLite配合压缩技术是一种轻量、高效且易于维护的日志管理方案。未来可探索DuckDB及动态字典等方向进一步优化。

本机暂存
IT 后端/ 2026-06-03 09:03:23 / 累计浏览 44

解析到本地127的神奇域名

本文探讨了 Web 本地开发中,除 `127.0.0.1` 与 `localhost` 外,可专门解析到本地回环地址的实用域名及其应用场景。作者梳理了多个稳定可用的选项:**localhost** 及其子域名作为 IETF 官方规范,通用性最强;**lvh.me** 因其极短长度和泛域名支持,成为日常开发优选;**nip.io** 及其 **local.gd** 服务则提供了基于 IP 生成域名的灵活方案;此外还有如 **fbi.com** 等趣闻域名。这些本地域名主要解决了使用纯 IP 地址开发时面临的局限:它们能更好地模拟真实环境,支持 **Cookie 的子域名共享**;满足 OAuth 等服务商要求必须使用域名作为回调地址的强制规定;在同时开发多项目或多租户系统时,能通过清晰的子域名(如 `project-a.lvh.me`)进行区分,避免端口号混乱;同时也有助于构建与生产环境一致的多模块(如 admin、api)访问结构,实现代码逻辑的无缝迁移。

本机暂存
IT DevOps/ 2026-06-03 09:03:23 / 累计浏览 41

Linux 桌面系统故障排查指南(四) - 多媒体处理与中文支持

本文聚焦Linux桌面多媒体处理的技术核心与故障排查要点。文章首先阐释了PipeWire作为现代统一媒体框架的关键地位,它通过统一模型整合音频与视频流,解决了传统PulseAudio与视频处理组件割裂导致的同步困难、权限混乱等问题。针对Wayland环境,重点分析了PipeWire与xdg-desktop-portal协同实现安全、高效屏幕共享的机制,这区别于X11的直接访问模式。文中提供了具体的音频路由、视频设备管理命令及配置示例,涵盖从硬件识别到性能优化的实践路径。对于中文支持部分,文章指出了涉及的fontconfig与fcitx5等组件,但未展开细节。整体而言,文章旨在帮助用户理解多媒体子系统的协同原理,并掌握关键的配置与诊断方法。

本机暂存
IT DevOps/ 2026-06-03 09:03:23 / 累计浏览 44

Linux 桌面系统故障排查指南(五) - 网络

这篇文章系统性地剖析了Linux桌面网络的完整架构与故障排查方法,涵盖从硬件驱动到应用层的全链路。核心内容围绕现代网络管理组件systemd-networkd、iwd和systemd-resolved展开,详细说明了有线与无线连接的建立流程,并提供了具体的命令行工具进行状态查看与管理。 文章深入讲解了IPv4/IPv6双栈的工作机制与配置验证,特别指出了glibc的getaddrinfo()函数及/etc/gai.conf配置文件如何决定协议优先级。针对网络故障,提供了一套从检查网卡驱动、链路状态到验证IP配置、DNS解析的系统化诊断流程,并列举了常见问题的解决方案。 此外,文章介绍了基于nftables的现代防火墙配置,通过具体的规则集示例展示了如何设置网络访问策略。整体内容层次清晰,将复杂的网络系统分解为可操作的排查步骤,为解决桌面网络问题提供了实用的技术参考。

本机暂存
IT DevOps/ 2026-06-03 09:03:23 / 累计浏览 58

Linux 桌面系统故障排查指南(六) - 系统关机与电源管理

本文详细解析Linux桌面系统中systemd管理的关机完整流程及电源管理功能。关机过程分为四个关键阶段:首先进行用户会话清理,通知应用程序保存数据并回收设备权限;随后按依赖关系逆向停止系统服务,卸载非根文件系统;接着内核释放资源,包括同步文件系统数据、终止剩余进程并清理硬件状态;最终通过ACPI指令进入硬件断电状态。文章同时涵盖休眠与挂起功能的配置要点,提供了针对服务停止超时、文件系统卸载失败、设备占用等常见关机故障的排查命令与优化建议,例如调整TimeoutStopSec参数、使用lsof检查进程占用等。作为系列的终篇,它从技术层面系统阐述了从优雅关闭到强制关机的电源管理机制,帮助用户理解底层流程并解决实际桌面使用中的相关问题。

本机暂存
IT AI/ 2026-06-03 09:03:23 / 累计浏览 40

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

本文详细记录了在Mac系统上搭建ESP-IDF开发环境并编译运行小智AI固件的完整流程。作者通过四个核心步骤完成环境配置:首先使用Homebrew安装cmake等前置依赖;随后克隆指定版本(v5.4.1)的ESP-IDF仓库;接着运行install脚本安装ESP32-S3的工具链;最后通过修改shell配置文件设置快捷环境变量。在环境就绪后,文章展示了如何获取小智AI固件源码,通过一系列命令完成固件的编译、烧录和监控。整个过程为需要定制化开发ESP32-S3智能设备的开发者提供了清晰的实践参考,并推荐使用VSCode的ESP-IDF扩展进行后续的开发与调试。

本机暂存
IT 后端/ 2026-06-03 09:03:23 / 累计浏览 36

Java|FreeMarker 复用 layout

在 FreeMarker 项目中,页面布局的重复代码会随着页面增多而扩散,导致维护困难。常规的 include 指令可以提取公共头部和底部等元素,但每个页面仍需手动组合完整结构,一旦布局变更,修改成本较高。为消除这种重复,可以通过抽象布局模板来优化:利用 FreeMarker 的 macro 功能,定义一个统一的页面布局文件,其中包含固定组件并接收页面内容和脚本作为参数。具体页面只需导入该模板,并通过变量分配填充内容,从而实现布局与内容的分离。进一步,借助编辑器的代码片段功能,如 VSCode 的 code

本机暂存
IT 算法/ 2026-06-03 09:03:23 / 累计浏览 45

IP匹配的一些小tips

文章分享了在数据分析中进行IP匹配的实用技巧。针对基础匹配,可使用`IN`列表或`LIKE`语句处理单个IP或C段地址,但面对如`/22`、`/19`等较大CIDR网段时,逐条匹配写法繁琐且性能不佳。推荐的高效方案有两种:其一是将IP地址转换为整数,同时计算出网段对应的起止整数范围,通过整数区间的`BETWEEN`判断进行匹配,这种方法性能最优,适合大规模数据;其二是组合使用`LIKE`与数值范围判断,在网段数量有限时是一种折衷方案。此外,文章提供了一个Python脚本示例,该脚本能读取CIDR列表,合并重叠网段,并自动生成适用于Hive的整数区间匹配SQL条件,大大简化了预处理工作。整体内容聚焦于解决实际场景中的IP网段匹配效率问题。

本机暂存
IT DevOps/ 2026-06-03 09:03:23 / 累计浏览 60

基坑工程地下水监控常用方法和设备

地下水监控是深基坑工程安全保障的核心环节,其数据直接关系到基坑稳定性评估与风险预警。监控的核心参数为地下水位与孔隙水压力:地下水位在潜水层为自由水面,在承压层则体现为测压管水头;孔隙水压力则反映土体孔隙中水的实际压力状态,二者共同影响土体有效应力、抗剪强度及渗透稳定性。基坑开挖引起的渗流、基底隆起、管涌流土等风险,以及支护结构所受侧向水土压力,均与这两个参数的变化密切相关。因此,准确监测能为优化设计、评估降水或隔水措施效果、预警周边环境影响提供关键依据。 监测设备主要分为直接测量水位的开口测压管与自动化水位计,以及测量水压力的孔隙水压力计。自动化设备(如投入式压力传感器、超声波水位计等)能实现实时、远程监测,已成为主流趋势。孔隙水压力测量则广泛应用振弦式、气压式及电阻式传感器,其中振弦式精度高、稳定性好。为确保监测的有效性,设备布设需遵循规范并结合地质条件,重点覆盖基坑周边敏感区域、复杂水文地质段及目标含水层,并注重安装、饱和与保护,以形成能真实反映水力状态的监测网络。

本机暂存
IT 算法/ 2026-06-03 09:03:23 / 累计浏览 51

几种通过 FFmpeg 无损压缩视频的方法

本文针对视频文件体积过大问题,介绍了几种基于 FFmpeg 工具进行有效压缩的技术方法。核心思路是通过调整编码参数或改变文件属性来减小体积,同时尽量保持画质。主要方法包括:使用 CRF(恒定速率因子)参数,通过设置较低的数值(如18)在视觉无损的前提下控制画质与文件大小的平衡;通过命令直接更改文件的封装格式而不重新编码,实现便捷转换;通过降低视频分辨率来显著减少数据量,适用于画质要求不高的场景;通过降低视频比特率来压缩文件,在保持原始分辨率的同时减少体积;以及采用更高效的 HEVC (H.265) 编码格式,它相比传统 H.264 在同等画质下能生成更小的文件。每种方法均附有具体的命令示例和原理说明,用户可根据对画质、兼容性及处理速度的需求进行选择。

本机暂存
IT 后端/ 2026-06-03 09:03:23 / 累计浏览 67

MinIO 社区版 Web 管理界面被删事件全解析

MinIO社区版近期通过删除11万行代码,移除了其Web管理界面的核心功能。更新后,界面仅保留基础对象浏览能力,用户无法再通过浏览器进行用户管理、策略配置等关键运维操作,所有管理任务被强制迁移至mc命令行工具。 官方解释此举是为了减轻同时维护社区版与商业版图形界面的成本负担。然而,社区普遍质疑这一决定缺乏事先沟通,认为其本质是通过削弱开源版本功能来引导用户转向付费产品的商业策略。此举显著增加了非技术用户和团队的管理门槛,引发了用户不满与生态信任危机。 事件发生后,社区迅速行动,发起了OpenMaxIO等分支项目以尝试恢复被移除的功能,同时SeaweedFS、Garage等其他对象存储方案也获得了更多关注。这一事件凸显了开源项目在商业化进程中平衡社区利益与商业目标所面临的挑战。对于现有用户,如需继续使用Web界面,可暂时回退至部署镜像标签为 minio/minio:RELEASE.2025-04-22T22-12-26Z 的旧版本。

本机暂存
IT 前端/ 2026-06-03 09:03:23 / 累计浏览 31

TailwindCSS v4 全新颜色系统与主题切换

TailwindCSS v4 对颜色系统进行了重大重构,核心解决了此前通过 CSS 变量自定义颜色时遇到的痛点。旧方法在变量中存储分离的 RGB 分量字符串,不仅导致编辑器无法识别颜色预览,更严重的问题是当颜色自身带有透明度时,`/` 语法会完全失效,因为无法二次应用透明度。 v4 的关键改进是引入了 `color-mix()` 函数来处理透明度调整。它允许将任意颜色(包括本身带透明度的)与 `transparent` 进行混合,通过控制混合比例来实现最终的透明效果,从而彻底解决了上述限制。 此外,v4 利用原生的 CSS `@layer` 机制,将颜色定义统一收拢在 `@layer theme` 中。这使得主题配置不再依赖 JavaScript,而是纯粹通过 CSS 实现,极大地提升了灵活性。通过覆写 `@layer theme` 内的变量,可以轻松实现 light/dark 模式切换以及基于 `data-theme` 等属性的自定义主题(如“可爱”风格)切换,并且每套主题都能良好适配暗色模式。整个系统在开发时即可直观预览颜色,体验远优于以往。

本机暂存