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

最新文章

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

IT 算法/ 2026-06-03 09:03:24 / 累计浏览 44

如何手搓一辆公路车

本文详细记录了一名程序员出于兴趣,从零开始手工组装一辆碳纤维公路车的完整过程。作者基于前一辆车(迪卡侬Triban RC500)的使用体验进行迭代,核心目标是打造一辆几何舒适、以耐用性为主的机械变速公路车。选件阶段,作者通过bikeinsights等工具对比车架几何,最终选择了与旧车STR值相近的Seka Spear车架,并针对性地调整了把立长度(110mm)、曲柄长度(165mm)等参数以优化人机工程。套件选择以兼容性和学习成本为优先,采用了Shimano 105机械变速套件,但将中轴、飞轮、链条等关键传动部件升级至更高等级以提升耐用性。 装车过程耗时约一周,遭遇了多项挑战:一体把内走线穿管(四根硬质线管)极为困难;车架为电变设计,导致机械前拨安装需要自制垫片解决兼容性问题;还遇到后碟片尺寸不匹配、夹器螺丝过短等零件问题。作者通过打磨线管出口、魔改垫片、使用穿线引导器及清洁剂处理碟片油污等方法逐一解决。整个安装遵循从内到外的顺序,强调了认真阅读说明书、使用扭力扳手、工具定点存放的重要性。 最终完成的车辆在轻量化、滤震性和换挡精准度上相比旧车有显著提升,验证了作者前期配置选择的正确性。作者总结认为,自组公路车过程复杂且需应对大量细节问题,普通用户更适合购买整车或请专业车店组装;但对于爱好者而言,从想法到实机的过程带来了巨大成就感。

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

我让 Linux REAPER 实现了输入法的功能

Linux REAPER 长期缺乏输入法支持,作者自2017年起持续尝试解决这一问题,早期仅能通过复制粘贴或第三方输入框输入中文。2022年,作者在Fcitx输入法框架的讨论组获得开发者csslayer指导,明确了通过修改REAPER开源图形库SWELL来实现输入法功能的方向。这一突破得益于输入法框架的技术支持和Steam在Linux平台解决类似问题的启示。 实现方法基于编译或替换SWELL库文件。用户需先确保REAPER能显示CJK字符(通过fontconfig配置)并设置正确的输入法环境变量。安装可选择下载预编译的libSwell.so文件替换原有文件,或从源码编译,编译时必须启用SWELL_SUPPORT_IM=1选项,并配合SWELL_SUPPORT_GTK=1。该方案为Linux REAPER提供了基本的中文输入能力。 已知问题包括窗口重启后输入法候选框位置异常(如Media Explorer窗口未关闭时)以及不同DPI下候选框位置适配问题。作者建议手动调整编译参数以优化显示。该项目解决了Linux REAPER用户的中文输入需求,但仍存在部分交互细节待改进。

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

PostgreSQL Docker镜像大版本升级

针对PostgreSQL 14官方支持即将到期及所用PostGIS镜像版本(14-3.2)的后续维护问题,本文详述了如何在Docker环境中将数据库从14版本升级至17版本。作者澄清了Docker容器内同样可以使用pg_upgrade工具进行大版本升级。升级流程主要分为三个阶段:首先进行周密准备,包括停止旧容器、打包备份旧数据卷、从旧容器中拷贝出PostgreSQL 14的二进制文件(lib与share目录),并使用新版本镜像初始化空的新数据目录。核心的升级步骤是通过一条挂载了旧数据、新数据以及旧版二进制目录的Docker命令,以postgres用户运行目标版本镜像中的pg_upgrade工具,指定新旧数据目录和二进制路径来执行升级。升级完成后,需要执行清理与优化工作,包括重命名新数据目录、启动新版本容器、运行vacuumdb命令分析优化数据库统计信息,确认无误后方可删除旧容器及相关的数据、二进制备份文件。整个过程提供了一套可在容器化部署中安全完成数据库跨大版本升级的可操作方案。

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

AI时代的效率悖论:当生产力提升反而带来疲惫

人工智能技术显著提升了信息处理与任务自动化的能力,使个体与组织的生产力得到跃升。然而这种提升并非没有代价,工具带来的效率增益往往转化为更高的产出预期与更密集的工作节奏。例如自动摘要、代码生成等功能虽节省单次耗时,却促使使用者承接更多并行任务,模糊了工作与休息的边界。 深层原因在于技术赋能与制度设计的脱节。现有评估体系仍延续工业时代的计量逻辑,将AI节省的时间重新填充为更多指标,导致“效率红利”被即时消化。同时,智能工具常通过实时反馈与多任务处理界面,持续分割注意力,引发认知负荷累积与情绪耗竭。 这种悖论提示我们需要重新定义效率:不仅是单位时间产出的增加,更应关注可持续性与人的整体福祉。技术设计需引入疲劳监测与自主节奏控制机制,组织管理也应从“时间占用”转向“价值创造”的评估维度,让生产力提升真正服务于人的发展而非异化。

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

AI 时代下的技术博客、文档驱动开发与头脑风暴实践

在人工智能深度融入开发流程的当下,技术内容的创作与协作范式正在经历深刻变革。文章聚焦于三个核心实践领域的演进:首先,AI辅助技术博客写作不仅提升了内容生产效率,更通过自动化校验、风格优化与多模态生成,帮助作者将精力集中于核心洞见的提炼,使博客从单纯的经验记录进化为可交互、可检索的知识节点。其次,文档驱动开发在AI赋能下得到全新诠释——文档不再仅是代码的附属说明,而可成为驱动AI生成代码逻辑、测试用例乃至架构建议的“活源”,这要求开发者具备更精确的意图描述能力,以构建高质量的提示工程与上下文约束。最后,人机协同的头脑风暴模式重新定义了创意发散过程:借助大型语言模型进行假设生成、方案推演与风险模拟,团队能在更广阔的方案空间中快速验证想法,但核心决策仍需人类主导,以把控方向性与伦理性边界。这些实践共同指向一个关键认知:AI工具正从辅助角色转向协同创作伙伴,开发者的核心竞争力正从编写特定代码转向定义问题、设计交互、评估输出与整合知识体系。

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

提权实录:通过命名管道劫持可写服务

在分析Windows应用服务时,发现其命名管道的访问控制列表配置错误,允许“Everyone”组的用户进行写操作。低权限攻击者可利用此管道作为通信通道,向以System权限运行的服务发送特定格式的消息(如终止进程的指令)。进一步调查发现,该服务在被强制终止后会自动重启,但其可执行文件的权限配置同样存在问题,允许“Everyone”组读写。利用这两个缺陷,攻击者可构建一条本地提权链:通过循环线程,一边尝试将恶意程序替换目标服务的可执行文件,一边通过上述有漏洞的命名管道发送指令触发服务重启。服务重启时便会加载已被替换的恶意程序,从而以System权限执行攻击者代码。此案例凸显了命名管道ACL配置不当与系统服务可执行文件权限宽松这两种漏洞组合利用的危害。

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

第一章:分布式系统概述

本文从集中式单机系统与分布式系统的对比切入,阐述了分布式系统的基本概念与核心动机。集中式系统简单直接,但受限于单点故障和硬件扩展瓶颈。分布式系统通过网络连接的多节点协作,实现了横向扩展、高可用性、地理位置亲和性等优势,能够满足高性能、大容量数据存储及业务天然分布等需求。文章明确定义了分布式系统:其组件分布于不同计算机上,通过消息传递进行通信与协调。系统主要特点包括:节点独立拥有资源并通过网络通信,缺乏全局统一时钟,需协同完成共同任务。然而,这种架构也引入了网络不可靠、时钟不同步和部分失效等典型挑战,要求设计者从追求绝对确定性转向在一致性与可用性间进行权衡。理解这些基础概念是构建可靠分布式系统的前提。

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

第三章:分布式系统中的时间和顺序

在分布式系统中,事件顺序决定系统最终状态,是核心问题。由于节点间缺乏统一的物理时间基准,依赖物理时钟对比事件先后既不精确又易出错,一旦顺序错乱将导致状态不一致。因此,引入逻辑时钟来定义事件的逻辑先后顺序。文中进一步澄清了偏序与全序的数学概念,解释并发事件的存在,并指出向量时钟是逻辑时钟的扩展,能更精细地捕获因果关系。文章还阐释了状态、事件与快照的定义:状态是数据值的集合,事件是改变状态的操作(如写请求),快照则是特定时刻的状态切片。其核心在于,如同状态机复制思想所述,只要保证多个副本以相同顺序处理相同事件,就能获得一致的状态,而逻辑时钟正是为跨节点维护这种顺序提供了理论基础。

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

第五章:共识算法

共识算法旨在解决分布式系统在部分节点故障或网络异常时,如何让存活节点就系统状态达成一致的根本问题。它不仅是实现状态机复制的理论基础,也是 Leader 选举、原子广播和集群配置变更等核心功能的驱动力。不同于两阶段提交协议的阻塞特性,共识算法追求的是在容错前提下达成一致,即使少数节点失效也能保证系统持续推进。 其核心目标是在不可靠的异步网络中,使一组进程就某个提议值达成唯一且不可逆的协定。这一机制广泛应用于确保主从复制的正确性、维护分布式数据库的副本一致、实现分布式事务的原子性以及决定事件的全局顺序等场景。 算法的复杂性主要源于节点崩溃、网络延迟或分区、拜占庭故障等挑战。从概念上必须区分“共识”与“一致性”:一致性描述数据副本的状态或外部视图的一致,而共识是达成该状态所采用的一种内部协调协议,是实现强一致性的重要技术手段。

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

第六章:分区

传统主备复制架构存在扩展性瓶颈、单点故障和数据隔离等问题。为应对这些挑战,系统扩展分为垂直扩展与水平扩展。垂直扩展通过升级单机硬件实现,具有简单、一致性高的优点,但受限于物理上限且存在单点故障。水平扩展则通过增加服务器集群节点来分担负载,具备理论上的无限扩展性、高可用性和弹性伸缩能力,但引入了架构复杂性、数据一致性挑战及网络延迟等新问题。 因此,分布式系统常采用水平扩展中的“分区”策略,即将数据分摊到多个节点上,而非由所有节点存储全量数据。分区通常与复制技术结合,在保障数据分片的同时通过多副本提升容错性。引入分区后,系统需解决数据请求如何路由到正确分区、分区数据再平衡以及全排序操作支持等新挑战。后续内容将进一步探讨具体的分区策略、请求路由机制以及分区热点问题。

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

第七章 事务

本文探讨了分布式系统中复制、分区与事务三种核心技术的区别与协作。复制技术通过数据冗余实现高可用性,分区技术通过水平拆分提升系统可扩展性,二者主要解决数据层面的物理分布问题。然而,仅靠这两者无法保障数据操作在并发、故障场景下的逻辑正确性,这正是事务技术的核心作用。 事务旨在确保一系列操作要么全部成功,要么全部失败,从而维护数据的正确状态。文章通过转账操作、商品超卖及系统崩溃等典型场景,阐明了事务四大特性(ACID)的必要性:原子性保证操作全有或全无;一致性确保数据始终处于合法状态;隔离性防止并发事务相互干扰;持久性则确保已提交的数据在故障后不丢失。 在分布式环境下,由于网络不可靠、节点可能故障,跨多个服务的事务面临更大挑战。事务技术通过封装复杂性,为开发者提供了简洁的编程模型,将业务逻辑与底层的一致性、容错机制解耦,极大地提升了应用的可靠性与开发效率。

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

黑盒视角下的 WebView 漏洞面探索

本文从黑盒测试视角,系统梳理了移动端WebView组件的漏洞挖掘方法。作者摒弃复杂的内部逻辑分析,专注于通过二维码扫描和URL Scheme跳转两个主要入口快速探测漏洞。在二维码扫描场景中,攻击者可构造特定URL触发WebView加载,若APP对白名单域名的校验存在缺陷(如仅判断包含关系),可通过子域名或@符号等方式绕过,从而携带用户凭证访问外部服务器。对于URL Scheme,黑盒测试者无需逆向分析APP配置文件,而是通过抓包匹配WebView页面中暴露的自定义协议格式(如xxx://scheme/path?url=),再构造恶意链接触发跳转,同样可导致凭证泄露。此外,文章还揭示了JSBridge通信机制的安全风险:许多APP未对调用来源域进行校验,使得攻击者在WebView内可遍历Window全局对象,发现并调用暴露的Native接口(如获取应用信息的方法),进而窃取敏感数据。整个探索过程紧扣实战,强调了从攻击者视角发现APP在WebView访问控制、域名校验及JSBridge接口暴露等方面的安全疏漏。

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

银河系观赏指南

本文是一篇面向业余爱好者的银河观赏与拍摄实用教程。核心在于指导读者如何在正确的时间与地点,借助必要装备捕捉银河景象。观赏时机方面,需把握6至10月(尤其是7-8月)的银河核心高亮期,并严格避开月光干扰,选择农历月初或月末、且日落1-2小时后的晴朗无云夜晚。地点选择至关重要,必须远离光污染,推荐前往博特尔暗空等级4级及以下的区域,高海拔环境能进一步提升清晰度。拍摄实操部分强调使用广角大光圈镜头与稳固三脚架,掌握“500定律”进行基础曝光,并介绍了使用星空跟踪器延长曝光以获取更细节的方法。文中同时提醒需提前通过应用查询天文信息,注意夜间野外安全并结伴同行。

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

对数和自然对数的底

对数概念的发明源于天文学中对大数乘除法的简化需求,特别是在通过三角视差法测量天文距离时。由于日地距离已很遥远,测量更远的恒星需要极高的精度,计算误差会显著影响结果。约翰·纳皮尔在没有幂概念的情况下,通过三角公式的启发,从几何意义出发发明了对数。其核心思路是构造一个等比数列,使真数的乘法运算转换为对应等差数列的加减运算。他选择了一个非常接近1的公比(约为0.9999999),这使得等比数列的递推可以通过简单的移位和减法实现,极大方便了手算。在当时以十的七次方为半径的三角函数表背景下,这个选择使得对数表的底数近似为(1+1/10^7)^(10^7),其极限即为自然常数e。因此,以e为底的对数之所以被称为自然对数,并非源于纳皮尔的本意,而是因为e是通过对数运算的自然数学构造过程(令公比的指数趋于无穷)而产生的必然结果。

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

一个简单的 A star 寻路算法实现

这篇讲的是一个极简A*寻路算法的实现,作者从实用角度出发,重新设计了一套C语言接口,核心特点是与地图数据结构完全解耦,方便移植到不同场景。 实现上最巧妙的是用单向链表替代了传统A*中复杂的优先队列,同时把所有寻路数据压进一块平坦内存,这样既避免了算法执行中的内存分配,又天然兼容多线程环境。底层数据结构是一个闭散列哈希表,作者用一个自增的version值巧妙实现了O(1)复杂度的表重置,大幅降低重复寻路时的初始化开销。 考虑到实际地图规模,算法内置了安全阀:当哈希表使用率超过一半时自动中止,但会返回已找到的离目标最近的中途点,用户可多次调用拼接完整路径。作者还贴心地提供了可视化函数,能将哈希表内部状态输出为灰度图,方便调试。 虽然代码刚写好还未充分测试,但作者追求的“接口简单、数据结构通用、内存开销固定”的设计目标清晰明确,适合那些需要轻量、易集成寻路功能的项目。

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

SetWindowText 引起的死锁

在基于ltask多线程框架的游戏开发中,使用sokol_app封装窗口时遇到了启动阶段偶发黑屏的问题。经排查,死锁源于跨线程调用SetWindowTextW修改窗口标题。由于该API内部通过SendMessageW投递WM_SETTEXT消息,要求窗口线程处理完毕才能返回,而窗口线程当时正阻塞在另一个同步锁上,形成循环等待。 Windows消息机制要求通过SendMessageW发送涉及字符串生命周期管理的系统消息,因此不能简单改用PostWindowTextW避免阻塞。最终解决方案是在ltask框架内创建一个独立服务来执行SetWindowTextW,通过服务间异步消息传递修改标题指令,从而避免阻塞主帧处理流程。这一案例揭示了多线程环境下GUI消息循环与任务调度器交互时的典型死锁陷阱,关键在于理解Windows线程消息队列的同步特性,并设计解耦的线程通信机制。

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

编写游戏程序的一些启示

在制作《Deep Future》桌游电子版的过程中,作者通过实践深入探讨了游戏程序开发的多个核心问题。他选择基于自研引擎进行开发,旨在理解游戏玩法设计与交互实现的难点,而非追求性能优化。在渲染架构上,他经历了从纯立即模式向混合模式的演进:保留模式用于管理如HUD布局和文本排版等静态层次结构,而立即模式则用于实现动态对象的灵活渲染。针对卡牌游戏特有的复杂图文混排需求,他借鉴了CSS布局思想并集成了Yoga库,同时通过自定义富文本协议解决了本地化与文本拼接的难题。 为分离游戏逻辑与视觉表现,作者引入了基于协程的状态机模型,以自然的时间序列模拟卡牌动画等流程。在交互管理上,他设计了兼顾立即模式风格的焦点轮询机制,通过平坦化的“区域”和“按钮”集合简化了事件处理。这些实践表明,游戏开发中合理的架构分层与状态管理是应对复杂性的关键,而持续的小幅迭代和反思比追求完美方案更能有效推动项目进展。

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

在 Lua 中定义类型的简单方法

文章以教程形式探讨了在Lua中定义类型的简洁方法,重点介绍了从基础到进阶的实现策略。首先,作者展示了通过table和元表设置来创建类型的基本方式,这种方法依赖Lua模块机制,适合快速定义独立类型。随后,文章深入讨论了封装class模块的高级方案,通过统一管理类型定义和实例化,提供类型名查找功能,增强了代码组织性。内容核心转向

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

立即模式下的鼠标交互处理

这篇讲的是作者在立即模式游戏中遇到的鼠标交互混乱问题。随着界面复杂度增加,原先草率处理的回调代码开始无法应对各种边界情况,比如添加长按操作时发现逻辑已经难以维护。 问题的核心在于消息机制与立即模式的冲突:鼠标移动、点击等事件在帧间以队列形式抵达,而立即模式需要清晰的状态快照。作者发现,像“点击”和“焦点”这类行为本质上是时间跨度的状态,而非瞬间消息。 他的解决方案是重构底层:首先,将鼠标消息在帧间累积,每帧统一发送状态(如位置、按键是否按下)。关键创新在于把“点击”定义为一个独立状态——从按下到抬起的时长,并且这个状态只持续一帧。同时,他引入了焦点管理器,每帧跟踪焦点对象及其持续的帧数。通过比较点击时长和焦点持续时长,就能准确判断一个点击是否真正发生在某个交互对象上。 这套方案让游戏业务能以纯粹的立即模式书写,每帧获得清晰的鼠标状态。作者还提到,可以在此基础上进一步优化,比如仅在焦点改变时更新UI,避免每帧刷新的开销。

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

有惊无险的一次网站系统升级

本次系统升级涉及操作系统、PHP、Apache及MySQL等多个组件的跨版本升级。作者将运行超过十年的老旧系统从Ubuntu早期版本逐步升级至2024 LTS,其中MySQL从4.x版本强制升至8.x版本引发的字符集问题尤为棘手。博客数据库原采用GBK编码存储,升级后字段编码信息丢失导致内容显示为乱码。作者通过查阅官方文档、社区求助及本地实验,最终采用二进制模式导出数据库,并编写Lua脚本智能解析导出文件,准确识别并转换其中的GBK内容,同时保留混杂的UTF-8数据片段,成功完成向UTF-8的迁移。整个过程体现了对历史遗留数据的审慎处理,包括备份验证、分段转换、语法校验等关键步骤。升级后系统运行稳定,预计可支持长期使用。

本机暂存