- 博客(146)
- 资源 (6)
- 收藏
- 关注
原创 更新Let‘s Encrypt 证书
本文介绍了在腾讯云Ubuntu24服务器上使用Let's Encrypt为阿里云解析的anygoo.net域名申请通配符证书的完整流程。主要内容包括:1)通过Python虚拟环境安装certbot和阿里云DNS插件;2)配置阿里云API访问密钥;3)签发包含主域名和通配符的证书;4)验证证书状态;5)设置自动续期。文章特别指出,虽然Ubuntu24官方仓库未提供阿里云DNS插件包,但使用Python虚拟环境是最干净的解决方案。最终通过系统定时任务实现证书自动续期,确保服务持续可用。
2025-08-23 17:00:51
561
原创 Ubuntu+Nginx+Supervisord部署.net core web应用程序
1、服务器:Ubuntu Server 24.04 LTS 64bit2、反向代理服务器:Nginx3、进程守护:Supervisord4、应用程序:.Net8 的Web应用程序。
2024-12-10 07:00:00
1671
原创 用 Mermaid/PlantUML 做轻量级架构文档(附模板)
两周前我接手一个内部系统,14 个服务,架构文档是一份 2024 年 3 月的 PPT,3.2MB,里面 21 张图。我找到上一任维护者问这图还准不准,他回我:“登录那块改过,其他应该没动。"应该"两个字,就是我对这份文档全部的信任。git log 也印证了:这份 PPT 一年只被提交过 2 次,同期主仓库的 commit 是 480 多个。文档已经死了,只是还没人宣布。这两周我把它重做了一遍:图全部换成文本格式进 Git,CI 自动渲染并检查新鲜度。
2026-11-03 11:05:51
134
原创 数据库设计入门:范式、反范式与业务取舍
工单系统列表页查询慢,根源在于严格遵循3NF导致六表join。虽设计规范,但读多写少场景下性能堪忧。通过冗余存储creator_nickname,减少join,P95从1.9秒降至380ms。关键认知反转:部分冗余(如订单地址)本质是快照建模,非性能优化,无需同步;而需同步的冗余字段必须配对账机制。范式与反范式本质是读写比的取舍,而非对错。最终实践:3NF起步,读写比高时才冗余,凭证类字段一律快照,注释明确字段语义,兼顾性能与可维护性。
2026-10-28 15:38:58
163
原创 SOLID 原则在四种语言中的实现差异
本文通过跨语言实践(C#、TS、Go、Rust)反思SOLID原则在现代语言中的真实落地。核心发现:ISP在Go中由消费方定义接口,实现隐式满足;OCP与LSP在无继承语言中靠组合而非继承实现;TS的结构类型虽灵活却弱化了LSP契约;而DIP是唯一真正跨语言通用的原则。最终提出优先级排序:DIP > ISP > SRP > LSP ≈ OCP,强调依赖抽象的本质价值。
2026-10-26 10:18:35
181
原创 包管理器横向评测:NuGet / pip / Cargo / Go Modules
本文对比了C++、Go、Rust、.NET和Python五大生态的包管理机制,揭示“锁文件默认开启”是可复现构建的核心。Cargo与Go默认生成锁文件,实现依赖确定性;NuGet与pip虽功能完备,却需手动启用锁,导致团队协作中依赖漂移风险。作者指出,问题不在工具能力,而在默认行为——真正差距在于“应用应锁”的共识是否内化为默认配置。最终建议以pip-tools或uv补位,推动Python生态向“默认锁”演进,并预告将实测uv在CI中的表现。
2026-10-22 15:57:54
122
原创 类型系统漫谈:C#、TS、Go、Rust 的类型设计哲学差异
本文对比了 Rust、Go、C# 与 TypeScript 在处理“按用户 ID 查订单”这一场景下的函数签名设计,揭示四种语言背后不同的类型哲学:Rust 以编译期穷尽匹配确保安全;Go 依赖约定,简洁但易踩坑;TS 表达力强却因 any 和 as 逃逸口削弱可信度;C# 可空类型仅作警告,需额外配置才能生效。作者最终认为,类型系统的真正价值在于编码领域信息的深度与可信度,而非报错严厉程度,并提出根据场景选择语言策略:核心逻辑用强约束,胶水代码重约定,TS 项目严控逃逸。
2026-10-21 09:26:19
230
原创 四语言 Hello World 背后:编译模型与运行时对比
本文通过对比 Rust、Go、C# 与 Python 的 Hello World 编译产物,揭示“编译/解释”二分法在现代语言中的失效。核心差异不在于是否编译,而在于运行时介入程度:Rust 将运行时负担前置至编译期,产物最小;Go 静态打包运行时,部署便捷但体积较大;C# 提供 JIT 与 NativeAOT 两种模式,权衡启动速度与灵活性;Python 则依赖运行时解释执行,启动慢、镜像大。文章还分享了 Go 在 scratch 镜像中因 CGO 导致动态链接失败的实战坑点,并总结各语言的“代价清单”,
2026-10-20 15:51:18
193
原创 Rust 初体验:一个全栈工程师的编译器“毒打“笔记
本文作者用 Rust 重写一个日志关键词统计工具,记录了从 JS/TS 转向 Rust 过程中的三次编译器“毒打”:因可变借用冲突导致的 E0499 错误、&str 悬垂指针风险,以及生命周期管理的心智负担。通过实践深刻体会到 Rust 借用检查对运行时安全的提前保障,虽带来编译痛苦与学习成本,但换来的是生产环境的可靠性提升。最终性能优于 Node 版本,代价包括编译时间、clippy 警告和复杂性,作者计划引入并发进一步优化。
2026-10-19 09:27:42
218
原创 Go 入门:为什么 error 处理“丑“却是好设计
本文作者回顾从Python转Go时对冗长if err != nil的抵触,曾尝试用panic/recover模拟try-catch,却因跨goroutine无法捕获而失败。后在Python项目中遭遇静默异常的教训,意识到Go显式错误处理虽“丑”却能确保错误传播路径清晰可见。结合%w包装、errors.Is/As等特性,实现结构化错误处理,避免误判与丢失。最终认为,尽管样板代码多,但显式控制流换来的是可维护性与可靠性,值得坚持。
2026-10-18 09:13:51
407
原创 Python 工程化入门:从脚本到规范的 Python 项目结构
接手一个结构混乱的内部工具项目,因相对导入在 crontab 中失效而频繁崩溃。初期用 sys.path 补丁治标不治本,最终通过引入 pyproject.toml 和 src 布局,将项目改为可安装包,实现跨环境一致导入。借助 pip install -e . 和 [project.scripts],crontab 改为直接调用命令,彻底消除路径依赖。src 布局还暴露了打包遗漏子模块的隐藏缺陷,强制测试与安装环境对齐。配合 ruff lint 与 CI,构建出可维护、可复现的工程化体系。
2026-10-18 09:12:50
657
原创 C# 现代特性速览:从 record 到模式匹配,老牌语言的年轻化
从 .NET Framework 4.8 迁移至 .NET 9,我将一个76行的旧式DTO重写为一行record OrderDto,自动生成Equals、GetHashCode等,实现不可变与值语义。虽提升代码简洁性与可维护性,却因record的值相等特性导致缓存命中率飙升,也引发幂等去重误判——同一内容不同实例被判定重复。此外,with表达式仅支持record/struct,switch表达式带来穷尽性检查,避免遗漏分支。这些语言更新已超越语法糖,重塑了代码语义与工程实践。
2026-10-16 09:31:10
431
原创 Vue2 遗留项目维护经验谈:踩过的坑与最佳实践
接手五年运维后台,面对 Vue 2.6.14 与 11 个“删库跑路”依赖,放弃直接迁 Vue3。核心策略:升级至 Vue 2.7.16 并冻结依赖版本。重点修复两大痛点:一是 vue 与 vue-template-compiler 版本对齐报错,二是全局事件总线因缺少 $off 导致内存泄漏。通过强制 ESLint 检查 $on/$off 配对、引入 composables 渐进式重构,提升可维护性。最终形成四条铁律:版本钉死、清幽灵依赖、新代码用 composable、旧逻辑不动。遗留 $parent
2026-10-15 09:33:04
154
原创 原子化 CSS 的思想:为什么我放弃了手写 BEM
本文作者反思了坚持五年的 BEM 命名规范在实际项目中的局限性,通过一次因类名拼接导致的隐藏样式失效事故,揭示了 BEM 在可维护性与一致性上的深层问题。文章对比了传统 BEM 与原子化 CSS(UnoCSS)的差异,指出后者“使用即定义”的模式能实现类名与样式的强一致、自动清理无用样式,并从根本上杜绝引用错误。作者以真实组件改造为例,展示原子化如何提升开发效率与可靠性,同时分享迁移过程中的踩坑经验,最终提出:在保证可读性的前提下,合理使用 shortcut 是平衡体验与工程化的有效路径。
2026-10-14 09:21:55
304
原创 用 Vite + Vue3 + UnoCSS 搭建企业级项目模板(一):基础骨架
本文记录了搭建企业级Vue3项目模板的实践与踩坑经验。从“复制老项目”引发的mock问题出发,提出最小化起步的模板设计:仅保留必用项(TypeScript、Vite、UnoCSS),摒弃冗余配置。重点分享两大核心坑点:一是路径别名需同步配置vite.config.ts与tsconfig.app.json,否则类型检查失败;二是UnoCSS需手动引入virtual:uno.css才生效,否则静默失效。辅以环境变量类型声明提升开发安全性。最终模板将新项目初始化时间从半天缩短至20分钟,虽需持续维护,但显著提升效
2026-10-13 09:46:01
286
原创 UnoCSS 与 Tailwind CSS 怎么选?一个全栈工程师的真实体验
本文分享作者在前端工程化选型中从误判到重构认知的心路历程。最初认为UnoCSS仅因性能优于Tailwind,但升级后发现两者构建速度已趋近,真正差异在于:UnoCSS是可扩展的原子CSS引擎,支持图标即类名、组件级快捷写法与自定义规则,适合小团队深度定制;而Tailwind 4生态成熟、设计系统完善,更适合大团队协作。作者结合实测数据与踩坑经验,最终推荐:追求灵活性与体积控制选UnoCSS,重视生态与组件库选Tailwind 4。
2026-10-12 15:11:00
280
原创 Vite 为什么快?从原理看下一代前端构建工具
Vite 的“快”源于其开发模式的架构革新:不预打包,按需编译,首屏请求仅处理实际访问模块。本质不是 esbuild 速度快,而是避免了传统 bundler 的全量构建与请求瀑布。依赖预构建解决 CJS 兼容与多层级请求问题,非为提速。HMR 粒度细化至模块级,实现毫秒级响应。生产构建仍用 Rollup,性能未必更优。切换代价包括路由瀑布、CJS polyfill 缺失及 legacy 支持开销。选型应聚焦开发体验提升,而非盲目追求“快”。
2026-10-12 15:10:26
61
原创 TypeScript 在 Vue3 项目中的最佳实践:类型安全从入门到不踩坑
本文分享了在 Vue 3.5 + TypeScript 项目中落地类型安全的实战经验。核心教训:tsc 不检查 .vue 模板,必须用 vue-tsc 实现完整类型校验。推荐使用纯类型声明的 defineProps<Props>,避免运行时与类型不一致。跨文件导入类型需确保 Vue 3.3+。泛型组件显著提升类型安全性,提前拦截字段拼写错误。最终构建链采用 vue-tsc + ESLint + Vite 构建三层防护,虽增加 CI 时间,但有效杜绝了类型相关线上事故。
2026-10-10 09:45:21
279
原创 Vue3 组合式 API 入门:从 Options API 思维切换的心路历程
本文分享了从 Vue2 迁移至 Vue3 组合式 API 的实战经验:初期误以为只是代码位置调整,实则面临闭包捕获、响应式解构失效、生命周期钩子注册时机等深层陷阱。通过重构将逻辑拆分为独立 composables,实现功能模块化,组件代码大幅精简。核心心得是:组合式 API 改变了代码的耦合单位——从“组件”变为“功能”,但需警惕 ref.value 心智负担、过度抽离及状态共享边界模糊等问题。最终建议:状态统一用 ref,逻辑按复用性抽取,避免盲目设计。
2026-10-09 09:17:12
282
原创 2026年了,Vue2 项目还有必要迁移 Vue3 吗?迁移决策指南
本文探讨存量Vue2项目是否值得迁移至Vue3,强调“是否迁移”是业务问题而非技术问题。作者基于四个项目经验提出:若项目生命周期超两年、依赖生态受限或团队已用Vue3,应考虑迁移;否则可冻结技术栈,使用Vue 2.7过渡。真实迁移成本中,组件库适配(如element-ui→element-plus)、事件总线重构及Proxy响应式差异占主要部分,远超API改动。建议通过三问清单评估:全局事件/Vue.set使用量、核心依赖锁死程度、未来迭代需求。最终主张:局部采用Composition API重构收益显著,
2026-10-08 09:37:10
346
原创 五大主流语言:Go、Python、Rust、Java、C# 的比较
在系统性能与开发效率的十字路口,Go 以“少即是多”的哲学脱颖而出。它并非追求极致性能或表达力,而是为大规模协作而生——通过强制格式化、简洁语法与高效编译,降低团队认知负担。其静态链接二进制、亚毫秒级 GC 与原生并发模型(goroutine),使服务部署简单、延迟可预测,成为云原生时代的事实标准。相比 Python 的动态性、Java 的复杂生态、Rust 的陡峭学习曲线,Go 在工程可运维性上实现了最优平衡,堪称最“反直觉却最有效”的语言选择。
2026-09-30 11:01:28
510
1
原创 企业级基础模块功能数据表结构设计
本文设计了一个企业级基础模块的数据表结构,主要涵盖以下核心内容: 多租户架构设计,支持租户隔离和应用订阅 组织机构管理,支持集团-公司-部门三级结构 用户管理体系,区分系统管理员和会员用户 权限控制系统,基于角色分配功能权限和数据权限 岗位管理与组织机构、用户的关联关系 第三方应用授权机制,基于OAuth2实现 租户与会员用户的邀请加入机制 关键表包括租户表、组织机构表、岗位表、用户表等,每张表都设计了详细字段,支持多租户隔离、权限控制和层级管理。系统支持会员用户创建团队租户并邀请其他用户加入,实现了灵活的
2025-09-17 13:18:42
761
原创 在windows 10系统上使用WSL安装Ubuntu系统并配置开发环境
步骤操作系统操作内容命令/配置示例备注1Windows修改允许外部连接42Windows修改设置访问权限23Windows重启 PostgreSQL 服务使配置生效4Windows配置防火墙允许端口5432TCP 入站25WSL Ubuntu查找 Windows IP获取主机 IP6WSL Ubuntu测试连接验证连通性97Python配置连接字符串在代码或环境变量中设置。
2025-09-15 17:44:40
574
原创 浅谈:SQLModel与SQLAlchemy的比较
SQLModel 是基于 SQLAlchemy 和 Pydantic 的现代ORM工具,相比原生SQLAlchemy具有更简洁的API、内置Pydantic数据验证和更好的类型提示支持。它特别适合与FastAPI集成,简化了常见CRUD操作,学习曲线平缓。而SQLAlchemy作为底层ORM更灵活强大,适合复杂查询场景。两者核心区别在于:SQLModel强调开发体验和类型安全,SQLAlchemy提供更全面的数据库操作能力。根据项目需求选择,新手或FastAPI项目推荐SQLModel,需要处理复杂数据库操
2025-09-01 09:22:56
1946
原创 浅谈:mysql与PostgreSQL
MySQL和PostgreSQL是两大主流开源关系型数据库,各有特点。MySQL注重读写性能,适合高并发简单查询场景,如Web应用;PostgreSQL功能更丰富,支持更多数据类型和复杂查询,适合数据分析、金融系统等场景。MySQL在简单应用和Web开发中更流行,而PostgreSQL在复杂数据处理和扩展性方面更强大。选择时需根据项目需求:优先性能选MySQL,需要复杂功能选PostgreSQL。
2025-09-01 09:12:17
945
原创 Python多媒体及AI领域核心第三方库汇总
本文系统梳理了Python在多媒体处理与AI领域的核心第三方库。多媒体部分涵盖视频处理(MoviePy、OpenCV)、图像处理(Pillow、PaddleHub)和音频处理(Librosa、pydub)三大类;AI部分包括基础计算(NumPy、Pandas)、机器学习框架(Scikit-learn、XGBoost)、深度学习工具(TensorFlow、PyTorch)以及NLP(Hugging Face Transformers)和CV(OpenCV)等专业库。所有推荐库均经过工业验证,并附官方链接,特别
2025-08-09 10:00:00
625
原创 ConcurrentDictionary 详解:.NET 中的线程安全字典
ConcurrentDictionary是.NET中线程安全的字典实现,位于System.Collections.Concurrent命名空间。与普通Dictionary相比,它具备原子操作、细粒度锁和无锁读取等特性,特别适合多线程环境。核心方法包括TryAdd、TryUpdate、AddOrUpdate等原子操作。在任务进度系统等并发场景中表现优异,能安全高效地管理数据。最佳实践包括优先使用原子方法、避免工厂函数副作用等。它比手动锁实现更高效,是处理并发字典操作的首选方案,尤其适合高频读写场景。
2025-08-08 11:28:50
829
原创 多任务实时进度监控系统:基于ABP vNext与SignalR的架构实践
本文介绍了一种基于ABP vNext和SignalR的多任务实时进度监控系统架构。该系统支持长时间后台任务的实时监控,具备多任务并行管理、进度同步、断点续传等功能。通过SignalR分组广播机制实现多客户端同步,采用ABP后台作业保障任务可靠性,并设计了智能进度计算算法。系统包含后端任务管理服务、SignalR通信枢纽和前端可复用进度组件,支持不同页面的任务监控需求,提供可视化状态展示和系统管理功能,适用于数据处理、报表生成等需要长时间执行的多任务场景。
2025-08-08 10:57:54
997
原创 基于FastMCP创建MCP服务器的小白级教程
本文介绍了在Windows 11下搭建FastMCP开发环境的完整流程:1)安装Python 3.13.5;2)通过UV工具初始化项目并创建虚拟环境;3)安装FastMCP框架;4)编写示例代码实现文件管理功能,包括获取桌面路径、遍历目录文件等功能;5)最后使用fastmcp run命令运行测试。整个流程涵盖了从环境配置到代码实现的完整开发步骤。
2025-07-22 09:44:12
1414
2
原创 FastAPI + gRPC 全栈实践:Windows 开发到 Ubuntu 部署全指南
本文详细介绍了如何在Windows 11开发环境中搭建FastAPI+gRPC全栈服务,并部署到Ubuntu 24服务器的完整流程。主要内容包括:Windows开发环境配置(Python 3.9+、虚拟环境创建)、项目结构设计、gRPC服务定义与实现(Proto文件编写、代码生成)、REST接口开发、客户端测试方法,以及Ubuntu服务器的系统配置、应用部署和Systemd服务管理。文章还特别提供了.NET Core调用REST/gRPC接口的示例代码,实现跨语言调用。通过本指南,开发者可以快速掌握从本地开
2025-07-14 16:57:54
681
原创 .NET 9 GUID v7 vs v4:时间有序性如何颠覆数据库索引性能
性能红利:多线程并发写入场景提升超 20%运维友好:减少索引碎片,降低存储成本诊断增强:通过 GUID 追溯事件时间线未来趋势:MongoDB、PostgreSQL 等数据库已原生支持 UUID v7行动建议:若项目涉及时间序列数据,立即在 .NET 9 中测试,性能提升立竿见影。延伸阅读RFC 9562: UUID 版本 7 标准.NET 9 GUID API 文档。
2025-07-14 09:43:07
982
原创 API、MCP Client、MCP Server、LLM之间的业务逻辑关系
该应用采用分层架构设计,包含API、MCP Client、MCP Server和LLM大模型四层。API作为系统入口处理外部请求,MCP Client负责协议转换和负载均衡,MCP Server作为业务中枢调用LLM服务。数据流向遵循分层传递机制,支持异步处理和容错策略。关键设计包括协议适配、双向通信和分层解耦。建议在MCP Server与LLM间增加Model Gateway层,以实现多模型路由、请求批处理等增强功能。整个系统采用标准化接口设计,确保各组件高效协同工作。
2025-07-11 16:23:35
1404
原创 FastAPI 与 OpenIddict 的微服务鉴权整合方案
本文提出基于微服务的身份认证架构方案,采用OAuth2.0/OpenID Connect协议,核心包含认证服务(OpenIddict)、API网关和业务微服务(FastAPI)。技术栈选择ASP.NET Core的OpenIddict作为认证服务器,FastAPI作为资源服务器,配合PostgreSQL存储数据,Redis处理消息队列。系统实现JWT令牌颁发验证、RBAC权限控制及微服务间安全通信,并给出性能优化策略(令牌缓存、公钥轮换)和安全增强措施(令牌绑定、审计日志)。部署建议采用容器化方案,并配置P
2025-07-09 09:19:19
974
原创 FastApi框架及鉴权机制
FastAPI是一个高性能的Python Web框架,专为API开发设计,具有自动文档生成、异步支持和类型安全等特性。在鉴权方面,它支持多种方案:OAuth2密码流程、JWT令牌验证和API密钥验证,并提供了相应的安全工具类。框架允许灵活组合这些机制,建议生产环境采用HTTPS、合理设置JWT有效期、实现权限控制等安全措施。FastAPI的鉴权系统既简化了常见模式的实现,又保持了高度可定制性,适用于各种安全需求场景。
2025-07-09 09:11:35
515
原创 基于Vue 3的AI前端框架汇总及工具对比表
Vue 3 AI前端工具选型指南摘要:综合对比MateChat、Ant Design X等主流框架,按类型分类整理关键特性。对话类应用推荐MateChat/TDesign Chat,企业后台可选Ant Design X/Element Plus X,设计稿转代码首选VTJ.PRO,教学演示用Vue SFC Playground。重点功能包括多模型对接、流式响应、自然语言生成代码等,满足不同开发场景需求。表格清晰呈现各工具技术栈、核心优势及适用场景,提供快速选型参考。(149字)
2025-07-08 09:02:24
1776
原创 基于Abp Vnext、FastMCP构建一个企业级的模型即服务(MaaS)平台方案
企业级MaaS平台技术可行性分析摘要 本报告提出基于.NET9+ABP vNext+Vue3的MaaS平台技术架构,采用微服务设计实现模型即服务能力。核心包含:1)ABP vNext网关统一API接入;2)FastMCP模型计算平台支持多AI框架集成(PyTorch/HuggingFace等);3)gRPC/REST混合通信协议确保跨语言交互;4)K8s集群部署方案保障高可用性。关键技术验证显示系统支持1k QPS并发调用,实现了HeyGem等主流模型的动态加载与推理服务化。该架构满足企业级AI服务在性能、
2025-07-08 08:00:00
1269
原创 .NET 平台 MCP 协议框架对比:MCPSharp、mcpdotnet 与 ModelContextProtocol.NET
摘要:本文对比了 .NET 生态中三个 MCP(Model Context Protocol)实现框架:MCPSharp、mcpdotnet 和 ModelContextProtocol.NET。MCPSharp功能最完整,深度集成.NET AI生态;mcpdotnet轻量简洁,注重规范遵循;ModelContextProtocol.NET支持AOT但活跃度低。推荐企业级项目选择MCPSharp,轻量需求使用mcpdotnet,特殊场景谨慎选用ModelContextProtocol.NET。三者均采用MI
2025-07-07 11:07:49
938
原创 FastMCP:用于构建MCP服务器的开源Python框架
FastMCP 是一个用于构建 MCP 服务器和客户端的 Python 框架,其目标是让开发者能够以更少的代码、更高的效率构建出功能强大的 MCP 应用。相比官方的 MCP Python SDK,FastMCP 在多个方面进行了优化和改进,提供了更简洁的 API 设计、更高效的开发体验以及更强大的扩展能力
2025-07-07 10:54:14
1384
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人
RSS订阅