开发经验总结
文章平均质量分 86
资深web全栈开发
全栈程序员
php/python/golang/rust 主后端
vue/react 次前端
阿里云/aws 运维
微信 13100258291
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
Zanzibar vs MySQL Permission System - 实证性能对比研究
本文对比了传统MySQL展开存储与Google Zanzibar风格的元组图遍历权限系统在企业文档协作场景下的表现。研究基于真实业务数据(5,000用户/100,000文档/50,000客户),重点分析了两种方案的存储结构、性能特点和适用场景。传统MySQL方案通过预计算所有权限实现快速读取,但存在写入缓慢、存储膨胀和维护复杂等问题;而Zanzibar方案采用关系元组存储,通过图遍历动态计算权限,具有写入高效、存储紧凑和灵活扩展等优势,但需要额外计算开销。研究为复杂权限系统的架构选型提供了实证依据。原创 2025-12-30 18:35:46 · 827 阅读 · 0 评论 -
一文讲透 MySQL 崩溃恢复方案设计
MySQL崩溃恢复全体系解析 本文系统讲解MySQL崩溃恢复机制,涵盖InnoDB引擎原理(Redo/Undo日志)、Binlog一致性保障、物理/逻辑备份恢复方案、高可用架构设计等核心内容。针对不同故障场景(实例Crash、硬件损坏、误删数据等)提供分钟级到小时级的恢复策略,结合RPO/RTO指标进行成本与SLA权衡分析。包含Xtrabackup实战、PITR时间点恢复等生产案例,为DBA和架构师提供从原理到实践的完整解决方案。原创 2025-12-08 11:53:19 · 904 阅读 · 0 评论 -
从零构建即时通讯系统:Go + Vue3 实战指南
本文介绍了一个轻量级IM系统的实现方案,具有以下特点: 采用简洁架构设计,包含客户端、接入层和存储层三层架构,支持水平扩展 技术选型兼顾性能和开发效率,使用Go+Vue3技术栈,采用WebSocket+JSON通信 实现核心功能包括单聊、群聊、文件传输、离线消息等 提供完整的前后端交互协议和API接口 包含安全设计、性能优化等生产级考量 代码简洁(核心逻辑<2000行),开箱即用,支持快速部署 系统适用于需要自研IM的中小规模场景,兼顾数据安全、定制需求和成本控制,提供清晰的扩展路线。原创 2025-12-05 20:49:06 · 1385 阅读 · 0 评论 -
一文讲透 MinIO
MinIO是一个高性能、分布式的开源对象存储系统,完全兼容Amazon S3 API。它采用Go语言开发,具有轻量级、云原生等特点,支持多种部署模式。核心架构采用纠删码技术实现数据冗余,提供强一致性保证。相比公有云存储,MinIO在成本效益、数据主权和性能方面具有优势,特别适合私有云和本地部署场景。它广泛应用于大数据分析、AI训练、数据库备份等领域,并拥有丰富的生态系统支持。原创 2025-12-04 17:54:03 · 999 阅读 · 1 评论 -
一文讲透文件监控 Watchdog
本文介绍了文件监控的核心原理与设计思想。文件监控通过感知文件系统变化(创建、删除、修改等),在软件开发中具有重要应用。传统轮询方案存在CPU浪费、响应延迟等问题,现代操作系统提供了基于事件的API(如Linux的inotify、macOS的FSEvents和Windows的ReadDirectoryChangesW)实现高效监控。一个优秀的文件监控库需要解决跨平台抽象、事件模型统一、观察者模式实现、递归监控处理、事件合并与去重以及线程模型等关键问题。文章还通过策略模式、生产者-消费者模式等设计模式,阐述了如原创 2025-11-28 15:32:58 · 486 阅读 · 0 评论 -
软删除的深度解析:从 MySQL 到 PostgreSQL 的最佳实践
本文介绍了软删除的概念及其在GORM+MySQL和PostgreSQL中的实现方式。软删除通过标记字段(如deleted_at)将记录标记为"已删除"状态而非物理删除。在MySQL中,由于NULL不等于NULL的特性,传统方案需将deleted_at默认值设为"0000-00-00 00:00:00"来保证唯一性,但存在语义不清、查询复杂等问题。PostgreSQL则可通过部分索引(Partial Index)优雅解决,仅对未删除记录(deleted_at IS NU原创 2025-11-23 17:47:28 · 814 阅读 · 0 评论 -
Golang Cobra 教程:构建强大的CLI应用
本文介绍了如何使用Go语言的Cobra库构建功能完整的命令行应用。Cobra是Kubernetes、Docker等知名项目采用的CLI开发框架,支持子命令结构、参数验证、自动生成帮助文档等功能。教程从安装Cobra开始,详细讲解了命令、参数和标志等核心概念,并通过创建文件管理工具的实际案例,演示了如何实现创建、列出和删除文件等子命令功能。示例代码展示了Cobra的基本用法,包括参数处理、标志绑定和交互式确认等特性,帮助开发者快速掌握构建专业级CLI应用的技能。原创 2025-11-23 17:12:53 · 1263 阅读 · 0 评论 -
Python 元编程:掌握代码的代码
Python 元编程是一种"操作代码的代码"技术,允许在运行时创建、修改或生成代码。主要包括: 装饰器:最常用的元编程工具,用于修改或增强函数/类行为 元类:深度定制类的创建过程,如单例模式实现 描述符:精确控制属性访问,实现类型验证等功能 动态代码执行:通过eval/exec执行字符串代码(需注意安全风险) 元编程广泛应用于框架开发、API设计、验证系统等场景,但需遵循"优先使用装饰器"、"保持简单"等原则,避免过度使用增加代码复杂度。原创 2025-11-18 16:02:47 · 391 阅读 · 0 评论 -
PostgreSQL 实战指南(面向 MySQL 开发者)
本文为MySQL开发者提供PostgreSQL快速入门指南,通过对比方式帮助开发者快速上手。主要内容包括: 快速上手:安装方法(推荐Postgres.app)、核心概念差异(三层结构、角色机制、MVCC实现等) 日常开发:数据库管理、用户角色授权、表操作、SQL语法差异、索引优化等实用技巧 进阶特性:JSONB数据处理、高级DML操作、触发器、通知机制等PostgreSQL特有功能 生产实践:VACUUM维护、连接池配置、备份恢复等运维关键点 迁移指南:从MySQL迁移的注意事项、CDC复制方案及常用扩展推原创 2025-11-14 13:55:03 · 1199 阅读 · 0 评论 -
微服务架构核心概念速查手册
微服务架构核心概念速查手册(摘要) 本手册系统梳理微服务架构的29个核心概念,涵盖八大领域: 基础架构层:服务拆分、API网关、RPC通信等构建微服务的基础组件 可靠性保障:熔断、降级、限流等提高系统健壮性的关键技术 配置与治理:服务发现、配置中心、负载均衡等治理工具 可观测性:链路追踪、日志聚合、监控告警等运维支持 安全与认证:认证授权、API安全、服务间认证等安全机制 数据管理:分布式事务、缓存、数据一致性等数据解决方案 部署运维:容器化、CI/CD、灰度发布等运维实践 高级模式:事件驱动、BFF模式、原创 2025-11-11 17:47:05 · 1383 阅读 · 0 评论 -
从理论到实践:用代码验证李智慧的短URL系统设计
本文通过本地简化实现验证了百亿级短URL系统的核心技术点:1)采用随机预生成策略(无冲突且不可预测);2)内存链表预加载方案(仅需60KB内存即可实现微秒级获取);3)文件偏移量互斥机制(确保多服务器协作安全性);4)分层缓存设计(内存+SQLite+文件的三级缓存)。实验证明,这些技术组合可有效解决高并发海量短URL场景下的性能与安全问题。原创 2025-11-10 16:09:28 · 542 阅读 · 0 评论 -
从阻塞线程到 io_uring:现代高并发 IO 的真实性能与选型指南
IO多路复用与阻塞IO性能差距在简单回显场景下不足6%,1000并发时阻塞IO仍能保持152K QPS。测试数据显示,异步框架的真正价值在于连接规模扩展(万级以上)和阻塞隔离,而非单连接性能提升。当面临CPU密集型或延迟任务时,阻塞线程模型反而能实现真正并行。技术选型应优先考虑扩展需求和团队维护成本,而非单纯追求微小的性能差异。核心结论:对于中小规模并发,阻塞IO是完全可行的选择;大规模高并发场景则需采用异步框架以避免资源瓶颈。原创 2025-11-10 01:49:57 · 1021 阅读 · 0 评论 -
权限系统设计:从 RBAC 到图权限,再到列表查询的性能难题
权限系统设计演进与性能挑战 权限系统设计经历了从ACL到RBAC,再到图权限模型(如Google Zanzibar)的演进。Zanzibar将权限判断转化为图可达性问题,通过图遍历实现权限继承和传递,解决了传统RBAC在处理复杂关系时的局限性。然而,这种方案面临列表查询的性能挑战——当需要查询用户有权限的所有资源时,实时图遍历会导致O(资源总数×图深度)的时间复杂度,在大规模系统中变得不可行。目前解决方案包括预计算物化视图或编写复杂SQL查询,但都存在实现难度和性能瓶颈,这仍然是权限系统设计中的核心难题。原创 2025-11-09 01:54:05 · 676 阅读 · 0 评论 -
分库分表最佳实践
分库分表不是技术问题,是产品和技术的妥协问题。成功的分库分表项目产品理解限制,主动简化需求(如去掉全站动态)技术提供替代方案(如离线报表、推荐算法)双方共同定义可接受的用户体验(如"查询较慢"提示)失败的分库分表项目产品坚持要所有功能,技术硬着头皮实现结果:性能没提升,系统更复杂,故障更多最终:花半年时间回滚,或者换 NewSQL 数据库一句话如果产品不愿意妥协,就不要分库分表,直接上 TiDB。如果预算有限(TiDB 太贵),那产品必须妥协。分库分表后的分页查询没有银弹✅。原创 2025-11-07 17:29:46 · 818 阅读 · 0 评论 -
如何正确使用缓存:常见陷阱与最佳实践
本文分析了缓存分页查询结果的常见误区和正确实践。直接缓存分页结果会导致内存爆炸和一致性噩梦,因为不同的分页组合会创建大量缓存键,难以维护且成本不可控。正确做法是缓存最小粒度实体(如用户ID列表),而非查询结果。通过Redis List存储有序ID列表,并配合实体缓存,可大幅减少内存占用,确保数据一致性。核心原则是缓存实体而非查询结果,通过应用层组装数据,实现高效且可控的缓存策略。原创 2025-11-07 02:10:06 · 785 阅读 · 0 评论 -
亿级信息发布与订阅系统架构设计:从发布到时间线
本文探讨了亿级规模下信息发布与分发的系统架构,重点解决高吞吐写入、低延迟读取和热点治理问题。核心采用混合扇出策略(Push/Pull结合),通过PostgreSQL实现数据存储与CDC事件驱动。关键设计包括:写路径采用Outbox模式确保事务性,读路径基于分片与多级缓存优化性能,针对大V发布采用分层推送或读时聚合。系统支持最终一致性(秒级窗口),提供可观测性和自动修复能力。通过虚拟分片、热点分桶和seek分页等技术,在保证用户体验的同时实现系统弹性扩展。原创 2025-11-06 18:59:11 · 749 阅读 · 0 评论 -
高并发问题的处理思路:架构师的权衡之道
高并发系统设计是一场资源与需求的博弈,关键在于建立分层架构和精准定位性能瓶颈。硬件层面的时间消耗差异(如网络调用与CPU指令执行的巨大差距)决定了分布式系统中网络是主要瓶颈。实践中应采用多层存储架构(进程内缓存、分布式缓存、非事务存储等),根据数据访问特征进行优化。案例表明,电商秒杀系统通过Redis缓存将性能提升100倍。性能优化需数据驱动,避免直觉决策,关注P99等长尾指标。一致性选择需权衡业务场景,如电商秒杀用最终一致,银行转账需强一致。微服务并非性能银弹,可能带来额外开销。最终设计需明确约束、定位瓶原创 2025-11-05 00:39:49 · 946 阅读 · 0 评论 -
cross-domain
跨域问题。用了前后端分离后,容易遇到跨域问题。譬如 `The value of the ‘Access-Control-Allow-Origin’ header in the response must not be the wildcard ‘*’ when the request’s credentials mode is ‘include’. The credentials mode of requests initiated by t分情况。原创 2022-12-09 14:11:32 · 454 阅读 · 1 评论 -
mongodb使用参考
mongodb, 文档数据库,超高性能。无事务。原创 2022-11-10 11:06:04 · 681 阅读 · 0 评论 -
vue.config.js 跨域配置
一般是配置.env等。默认配置就是用.env。原创 2022-11-08 15:28:33 · 2775 阅读 · 0 评论 -
go标准库-reflect
在计算机科学中,反射是指计算机程序在运行时(Run time)可以访问、检测和修改它本身状态或行为的一种能力。用比喻来说,反射就是程序在运行的时候能够“观察”并且修改自己的行为。简单来说,反射只是一种机制,在程序运行时获得对象类型信息和内存结构。通常高级语言借助反射机制来解决,编译时无法知道变量具体类型,而只有等到运行时才能检查值和类型的问题。不同语言的反射模型不尽相同,有些语言还不支持反射。对于低级语言,比如汇编语言,由于自身可以直接和内存打交道,所以无需反射机制。原创 2022-11-07 21:10:41 · 229 阅读 · 0 评论 -
session vs jwt
适合使用jwt的场景:有效期短只希望被使用一次比如,用户注册后发一封邮件让其激活账户,通常邮件中需要有一个链接,这个链接需要具备以下的特性:能够标识用户,该链接具有时效性(通常只允许几小时之内激活),不能被篡改以激活其他可能的账户,一次性的。这种场景就适合使用jwt。而由于jwt具有一次性的特性。单点登录和会话管理非常不适合用jwt,如果在服务端部署额外的逻辑存储jwt的状态,那还不如使用session。基于session有很多成熟的框架可以开箱即用,但是用jwt还要自己实现逻辑。原创 2022-11-02 09:44:09 · 613 阅读 · 0 评论 -
golang使用es提供搜索
框架用的go-zero搜索服务用的mongo 链接库用的数据同步用的monstachees面板用的elastichd。原创 2022-10-27 11:37:34 · 946 阅读 · 0 评论 -
nginx常用配置参考
默认表示不开启认证,后面如果跟上字符,这些字符会在弹窗中显示。用户密码文件,文件内容类似如下:配置示例:密码生成session保持 stickynginx编译是需要支持stckyip_hash使用源地址哈希算法,将同一客户端的请求总是发往同一个后端服务器,除非该服务器不可用。ip_hash语法:ip_hash简单易用,但有如下问题:说明:本指令可以打开会话保持的功能,下面是具体的参数:详情参考是在负载均衡层做的。需要磁盘大。参考nginx 反向代理之 proxy_cacheNginx Pro原创 2022-10-26 14:38:46 · 1147 阅读 · 0 评论 -
ssh使用介绍
开启端口转发ssh -fN root@172.18.18.18 -L 13306 :172.18.18.19:3306 # -fN:后台运行;不执行命令,只负责转发。# root:跳板机B的用户名。# 172.18.18.18:跳板机B的ip地址。# -L:本地端口转发。# 13306:监听的本地端口。# 172.18.18.19:mysql服务器地址。修改连接mysql方式SecureCRT也支持这个功能。链接内网数据库使用 navicat 的 ssh 通道也是可以的。原创 2022-10-26 14:35:24 · 5608 阅读 · 0 评论 -
百度小程序开发中需要注意的事项
百度小程序开发中需要注意的事项。原创 2022-10-26 14:22:52 · 444 阅读 · 0 评论
分享