自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(484)
  • 资源 (2)
  • 收藏
  • 关注

原创 c#关于计算机密集型和IO等待型数据的处理方式

前者要把多核吃满,后者要把线程还回去——最忌讳的就是用同一招(比如无脑Task.Run)两头糊。处理的不是"数据快慢",而是"等待期间线程归谁"。

2026-11-02 09:58:43 274

原创 释放后使用漏洞Use-After-Free

回到那段二十行的代码。free(u)执行完的那一刻,什么都没发生。内存还在那里,地址还在那里,程序还在正常运行。UAF 的恐怖之处从来不是崩溃,而是它大概率不崩溃。它只是一个安静的、悬在那里的幽灵,等着某一次内存复用把它变成别人的东西。而你在代码里看到的那个,看起来依然像一道严密的权限校验。三十年来,我们从缓解打到检测,从检测打到消除,把一个被公认为"无法根除"的问题,从 76% 压到了 20% 以下。凡是能靠人的谨慎来避免的 bug,最终都避免不了。​ 唯一的出路,是把它变成编译器的事。

2026-10-28 10:21:22 369

原创 AI时代程序员还要学编程吗?

有句话说"AI 不会取代程序员,但会写代码的人会取代不会写代码的人"——现在已经不够准确了。会思考的人正在取代只会写代码的人,而既会思考又懂代码的人,拿到了这个时代最大的杠杆。所以问题从来不是"还要不要学编程"。真正的问题是——你学的是那件正在被自动化的事,还是那件正在变得稀缺的事。前者确实可以不学了。后者,比过去二十年里的任何时候都更值得学。码字不易,如果您觉得我的文章对您有帮助的话,建议您打赏一元,我买瓶水喝;

2026-10-28 09:53:06 282

原创 用墨衍创作:不是让 AI 替你写,而是把“写作”重构成一条流水线

追流量:选热点选题,看系统提示“该写安装教程还是架构对比”做品牌:用自定义选题,写你长期想占领的方法论(比如《工业软件里的 Clean Architecture 落地》)技术博主容易犯的错是全程追热点,结果账号没有主轴。建议热点占 30%,长尾方法论占 70%。过去比的是“谁写得快”,现在比的是“谁有真问题、真数据、真判断”。墨衍这类工具出现后,写作的门槛往下砍了一截,但创作的门槛往上抬了一截——因为人人都能日更,读者只会更挑剔:你这篇除了 AI 也能说的套话,还剩什么?

2026-10-23 15:53:22 253

原创 人工智能重构软件开发:技术演进、产业影响、组织变革与未来路线图

截至2026年10月,AI已把软件交付从“个人编码加速器”推进为“人机协同的生产系统”,但尚无证据表明它已普遍替代软件工程师。全球开发者中84%已使用或计划使用AI开发工具,但只有31%已使用智能体;46%不信任AI输出的准确性,73%认为自然语言“氛围编程”造成过问题。采用广、信任低、流程瓶颈上升,意味着价值不再主要由代码行数决定,而由需求表达、上下文、自动化测试、审查、部署权限与运行可观测性共同决定。

2026-10-22 17:57:49 361

原创 .NET Core Web API 生产环境问题排查文章

"我这边跑是好的。这句话在软件工程里的地位,大概相当于医学里的"病人说自己没病"。它既不是谎言,也不是答案,而是一个信息量极低的信号:你只在一种环境下验证过代码。.NET Core Web API 尤其容易掉进这个坑。它跨平台、配置源多、默认值友好、dotnet run一行就能起服务,开发体验极佳。但同样因为这套设计,应用的行为高度依赖运行时环境——配置从哪来、进程以什么身份跑、跑在什么网络拓扑后面、有多少内存和 CPU、有没有反向代理。这些条件在开发机、测试机、生产环境之间几乎不可能完全一致。

2026-10-21 12:01:59 300

原创 AI写代码越来越快怎么人们觉得越来越累

2026年,代码的生产速度从未如此之高。GitHub官方数据早在2024年就显示,Copilot生成代码占比超过46%;到2026年,Agentic编程工具——Claude Code、Codex、Jules、Devin——已经能把“一个需求到PR落地”的周期从几天压缩到几十分钟。写一个CRUD接口、搭一个前端页面、补一套测试,几近“说话即交付”。Stack Overflow 2025年的开发者调查里,报告“精疲力竭”的受访者比例连续第三年上升。

2026-10-19 10:40:31 239

原创 DeepSeek 大模型落地应用实战指南

场景核心技术栈关键依赖① 企业知识库智能问答向量检索 + 语义嵌入numpyFAISSMilvus② 复杂代码生成与自动化调试大模型生成 + 单元测试闭环openaisubprocess③ 长文档深度解析与观点提炼分块摘要 + 关键词统计openaire④ 多轮对话式营销文案创作多轮对话 + 风格切换openai⑤ 跨语言商务沟通辅助实时翻译 + 语言检测openai⑥ 垂直行业数据清洗与结构化数据清洗 + 去重转换pandasre⑦ 个性化学习路径规划知识图谱 + 拓扑排序。

2026-10-17 15:31:06 237

原创 AI逆向工程对软件行业发展与影响

讲个故事,你就明白了。老张开了一家小公司,花20万请人开发了一个"智能排班系统",觉得这是自己的核心竞争力,别人抄不走。结果半年后,隔壁老王的公司也上了一个几乎一模一样的系统,功能、界面、连按钮位置都差不多。老张气炸了,找律师告老王抄袭。律师一看,傻眼了——老王没偷代码,没挖老张的人,就是找了个懂AI的程序员,把老张那个系统的安装包丢给AI,说了一句:"帮我搞清楚这个排班系统是怎么算的,给我还原出来。AI自己调用反编译工具,把二进制代码拆开,分析了三天,给了老王一份详细的逻辑说明,还附了一份参考实现。

2026-10-17 14:50:24 162 1

原创 为什么程序员们愿意在GitHub上开源自己的成果给别人免费使用和学习?

原因不全是“无私”,而是。程序员愿意开源,本质是“公开代码”这个行为的收益,远大于付出的成本。

2026-10-16 09:01:47 313

原创 c#程序员转信创赛道有没有发展前景

有前景,但,而是要看你走哪条路。C# 程序员进信创,——它其实是一整套“国产 CPU+国产 OS+国产库+迁移适配+等保合规”的落地能力。

2026-10-16 08:55:07 319

原创 C# 开源框架里踩过的坑

做 .NET 这几年,从 WinForms 连 PLC,到 ASP.NET Core 写 Web API,再到用各种 NuGet 包拼业务,我基本把 C# 开源生态里「能摔的跤」摔了一遍。今天不写「XX 库使用教程」,也不搞「十大神级开源库」那种公众号标题党。专门来吐槽——开源框架不是不能用,是它死的时候往往穿着活人的衣服。最经典的死法。GitHub 仓库最后一次提交三个月前,CI 是绿的(因为是机器人跑的),NuGet 下载量几百万。你以为它还活着,结果 Issue 提了没人理,PR 躺半年。新项目照着旧

2026-10-15 15:30:00 157

原创 c#联合类型,解决响应接口返回结果有多重变体

不同版本的 ASP.NET Core 和 OpenAPI 工具链,对多态类型的 schema 生成能力参差不齐,能不能产出带 discriminator mapping 的 oneOf 结构,别想当然,打开生成的文档亲自核对。说句公道话,联合类型不是银弹。一份合格的联合类型契约,至少要说清楚:有哪几种 JSON 形态、kind 的取值、每种结果对应的状态码,以及客户端遇到未知 kind 时该怎么办。只是告诉序列化器“有哪些类型”,JSON 里的值对不对、金额是不是负数,它一概不管,业务校验一行都不能省。

2026-10-10 15:37:11 186

原创 Native AOT 学习提纲

​。

2026-10-09 15:40:33 217

原创 轻量级的web api框架

FastEndpoints 是构建在 ASP.NET Core 管道之上的轻量 Web API 框架,核心是(Request–Endpoint–Response):一个 HTTP 接口 = 一个 Endpoint 类,自带 Request/Response DTO、FluentValidation 验证、依赖注入和 Swagger 支持。它定位介于传统 MVC Controller 和 Minimal API 之间——比 Controller 轻、比 Minimal API 好维护。

2026-09-29 17:35:48 35

原创 .net core服务限流解决方案

这个区别决定了它们对"突发"的态度完全不同。固定窗口计数在窗口切换的瞬间会放行(窗口末尾 100 次 + 窗口开头 100 次 = 200 次挤在一瞬间),而你的服务只扛得住 100 —— 这就是它最致命的问题。

2026-09-28 09:22:37 46

原创 探讨c# vue实现前端路由和界面按钮权限做表配置

—通常叫。你要的"配置界面"在成熟框架里就是「菜单管理 + 角色管理」两个页面,菜单、路由、按钮全在数据库里配,前端不再写死路由表。

2026-09-22 11:52:17 120

原创 .NET 使用 Refit 构建声明式 HTTP 客户端:从入门到生产实践

Refit 的价值不在"少写几行代码",而在于把 API 契约变成了一等公民——它集中、可见、可编译期校验、可测试。接口即契约、即文档。​ 新增一个端点就是加一行方法。Refit 只管生成调用,连接生命周期交给 HttpClientFactory。预期内的失败用分支处理,异常只留给真正的意外。从"把现有 HttpClient 代码里最啰嗦的那几个接口改成 Refit 接口"开始试,你会很快体会到差别。码字不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-19 14:02:27 465

原创 C# 界面卡顿:从定位到根治

界面卡顿这事,定位比优化重要。绝大多数卡顿不需要高深算法——要么是重活干错了线程,要么是死锁,要么是刷新太频繁。先用看门狗把"卡多久"量化出来,再用探查器抓到那一条阻塞栈,问题基本就解决了一半。UI 线程只做两件事:更新控件、分发命令。await 一路到底,绝不 .Result。后台多快都行,UI 定频出帧。码子不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-18 18:08:52 486

原创 c#上位机开发如何使代码更健壮

要让 C# 上位机代码更健壮,不能只靠写几个 try-catch。异常有兜底、资源有释放、通信有超时重试;线程安全用合理的数据结构,UI 不卡不假死;状态用状态机管理,配置不写死;日志全量记录,看门狗自动恢复;解析协议先校验后解码,模块解耦依赖注入;再加上单元测试和规范部署。即使出现了 bug,系统也能自动恢复、留下线索、让操作者知道发生了什么,在最短时间内重新投入运行。码子不易,如果您觉得我的文章对您有帮助的话,烦请您打赏一元,我买瓶水喝;

2026-09-18 14:35:40 308

原创 KingSCADA 学习总览

这是一份系统的 KingSCADA 学习大纲,从入门到工程落地,分七个阶段。每个阶段包含目标、核心内容、练习任务,并在关键处标注版本差异。

2026-09-17 15:54:59 102

原创 kingscada是什么 能做什么

KINGSCADA 通常指,一套国产中高端 SCADA(数据采集与监视控制)组态平台,用来把现场 PLC/仪表/RTU 的数据采上来、做画面监控、报警、历史存储和远程调度。它定位高于亚控自家的“组态王/KingView”,更偏厂级、集团级、跨厂区和大点位项目。

2026-09-16 14:06:09 220

原创 手写观察者模式:C#上位机状态通知的优雅解法

定义:定义对象间一种一对多的依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知并自动更新。两个核心角色:角色别名职责Subject​主题 / 被观察者 / 发布者维护观察者列表,提供注册/注销,状态变化时通知Observer​观察者 / 订阅者定义接收通知的接口(Update 方法)注册(Attach)→ 变化 → 通知(Notify)。观察者模式的本质,是把"谁关心我变了"这个问题,从「编译期硬编码」变成「运行期动态注册」。简单场景用event(语言级、够用);

2026-09-11 16:45:42 521

原创 C# + 工业相机 SDK 的采集代码模板

dotnet run,用统一接口屏蔽了品牌差异——换相机只换实现类,业务代码不动。

2026-09-10 16:43:14 329

原创 学习工业相机的大纲

把前两步做扎实,算法只需 20% 的力气就能达到 80% 的效果。

2026-09-10 16:20:15 116

原创 C#上位机必备:生产者-消费者模式与消息队列,从入门到实战

想象一个场景:你在食堂打饭。•厨师(生产者)不停炒菜,把菜放到窗口•窗口(消息队列)放着做好的菜,作为缓冲•你(消费者)端起盘子打菜吃饭厨师不用等你吃完才炒下一盘,你也不用等厨师炒完才开始吃。各干各的,互不等待——这就是生产者-消费者模式的核心思想。放到上位机里就是:•生产者:串口 / TCP 采集线程,从 PLC、传感器读数据•消息队列:内存中的缓冲区,存原始数据帧•消费者:解析、存储、UI 显示线程,按自己的节奏处理数据为什么一定要用消息队列?四个理由:1.解耦。

2026-09-09 09:34:37 442

原创 ASP.NET Core 8 Minimal API 认证示例,核心用 BCrypt.Net​ 做密码哈希 + JWT​ 做身份认证。

return Results.Ok(new { username = name, message = "已通过认证,这是你的个人数据" });Console.WriteLine($"但都能校验通过: {BCrypt.Verify(password, hash2)}");return Results.BadRequest(new { message = "用户名和密码不能为空" });// 内存用户仓储(演示用,生产请换 EF Core + 数据库)// ===== 4. 受保护接口(需 JWT)=====

2026-09-08 09:24:28 213

原创 BCrypt.Net是做什么的

BCrypt.Net 是 .NET 里用来“安全哈希用户密码”的库——它把 bcrypt 算法封装成简单 API,自动加盐、支持可调慢度,让开发者无需自己处理加密细节,就能合规、抗暴破地存储密码。

2026-09-08 09:15:05 21

原创 推荐一款.net 日志格式化插件RuoVea.ExLog

/ 按类型获取日志操作对象_log.Info($"处理付款: {amount:C}");_log.Debug($"付款明细: ...");// 按字符串名称获取日志操作对象orderLog.Warn("订单模块: 检测到重复提交");orderLog.Error("订单模块: 回调验签失败");通过GetLogger获取的Log对象仍然是log4netILog的轻量包装,不持有线程池调度逻辑(即同步写入 log4net,而非Task.Run调度)。如果追求异步写入,请使用。

2026-09-07 08:54:13 216

原创 C# 调用 .NET(Core)Web 服务混用:常见问题与 .NET 6~10 正确写法

C# 混合调用 .NET(Core)Web 服务的核心规则是“进程边界隔离 + 契约层下沉到 netstandard2.0”:.NET Framework 端通过HttpClient调用运行在 net6~net10 上的 ASP.NET Core 服务;Web 服务自 .NET 6 起统一使用 Minimal Hosting(app.Run()),.NET 8 引入 Keyed DI 与 TimeProvider、.NET 9 加入与 LINQ 新算子、.NET 10 正式支持 C# 14field。

2026-09-05 10:31:44 626

原创 推荐一款.net 配置类库RuoVea.ExConfig

Configset;set;set;set;set;set;set;set;set;set;

2026-09-04 10:02:46 84

原创 推荐一款.net SqlSugar ORM 一站式扩展库 RuoVea.ExSugar

集成 DI 注册、DbContext/Repository 模式、审计字段自动填充、全局查询过滤器、工作单元事务、差异日志记录、SM2 连接字符串加密,覆盖从 DataExecuting AOP 到分页查询的完整数据访问层抽象。为 .NET 开发者提供 SqlSugar ORM 的开箱即用增强封装,通过 DI 容器统一管理数据库连接、审计字段、查询过滤器和事务边界。建议通过环境变量、密钥管理服务(如 Azure Key Vault)或加密的配置文件注入。重载以启用完整功能(差异日志、过滤器等)。

2026-09-03 14:28:22 417

原创 推荐一款.net工具RuoVea.ExUtil

/ 当前 UTC+8 区 Unix 时间戳(秒)// Unix 时间戳 → DateTime// DateTime → Unix 时间戳(秒)⚠️已知缺陷硬编码,仅适用于 UTC+8(中国时区)场景,非东八区环境需自行处理。文件: Validate/Attributes/EmailAttribute.cs构造参数: msg(自定义错误消息)实际: 构造函数接收 msg 参数后未使用,始终返回硬编码的英文错误消息。

2026-09-03 08:58:43 354

原创 C# 使用 FreeSql 深度指南:重点拆解内核逻辑

FreeSql 是国产 .NET ORM(作者 dotnetcore/2881099),定位与 EF Core 不同——。本文不堆砌 CRUD 示例,重点放在。

2026-09-02 09:46:08 352

原创 AI现在能写大部分场景的代码,程序员应如何做才能保证自己不被淘汰

AI 时代的核心竞争力,不是"写代码更快",而是"知道该让 AI 写什么、写完怎么验证、上线后谁来负责"。把编程重新定义为四层:层级内容AI 能否做你的价值L1 实现​写函数、调 API、改样式✅ 大部分审查、修改L2 设计​架构、模块划分、接口设计🔶 辅助主导​L3 定义​需求澄清、业务建模、取舍决策❌ 不能核心​L4 负责​上线、运维、兜底、承担后果❌ 不能不可替代​AI 擅长 L1,你要占领 L2/L3/L4。AI 替代的是"代码打字员",不是"软件工程师"。

2026-09-01 15:26:18 355

原创 EF Core 性能调优深度实战:从慢查询到毫秒级响应

写 LINQ 时,脑子里想的是 SQL。N+1 是头号敌人​ → Include 或 Select 投影只读场景必加 AsNoTracking​ → 内存减半、速度翻倍批量操作绕过 ChangeTracker​ → ExecuteUpdate/Delete 或 Bulk 库Include 过深用 AsSplitQuery​ → 避免笛卡尔积分页用键集不用 Skip​ → 索引友好复杂查询直接写 SQL​ → FromSqlRaw 不丢人EF Core 不是性能瓶颈,

2026-08-31 10:37:10 319

原创 拆解ASP.NET Core 底层源码!从零手写

你有没有过这种感受:用了好几年ASP.NET Core,CRUD 写得飞起,但一碰到底层问题就懵?中间件执行顺序到底是怎么控制的?依赖注入容器内部是怎么创建对象的?路由匹配为什么有时候不按预期工作?为什么同样的代码,换个环境性能差十倍?很多开发者停留在 "会用" 层面,遇到复杂场景就束手无策。真正的差距,不在于你用了多少中间件,而在于你是否理解框架底层的设计思想。

2026-08-27 11:03:55 544

原创 DOTNET 鉴权系列- JWT 会话撤销与主动登出

我第一次知道这个方法,是在极客时间上听一个老师讲的,瞬间豁然开朗,因为颁发和校验token时都是使用秘钥来校验的,换密钥能让所有已签发的 Token 瞬间全部失效,但它属于终极大招,太猛了不分敌我,全部干掉的,实际中应该没人这么做吧,除非密钥泄露,一些重大安全事件、需要全站强制登出才会这么干。如果使用标准流程下实现,哪怕主动退出,强制踢出,或者顶掉了登录,我们再次拿着旧的Token去请求接口,是依然能通过鉴权的,从真实业务和系统安全上来说,我都主动退出了,拿去请求接口怎么还可以,服务端不是应该拒绝的吗?

2026-08-27 09:34:41 128

原创 C# GC 调优实战指南:从原理定位到性能优化

监控指标 → 定位瓶颈 → 代码优化 → 配置调优 → 验证效果↑ │优先级:代码优化 > GC 配置 > 手动干预减少分配比优化回收更有效池化(ArrayPool/ObjectPool)是性价比最高的优化手段不要过早优化,先用数据说话GC 调优不是一次性工作,而是持续观测 → 迭代优化的过程。掌握PerfView三件套,你就能定位 90% 的 GC 问题。如果您觉得我的文章对您有帮助的话,请您打赏一元,我买瓶水喝;您的支持将是我继续分享的无线动力!

2026-08-26 09:09:27 305

原创 一个项目没有源码,如何进行升级改造和维护

仅针对C/C++原生程序,汇编级别修改。工具:IDA Pro、x64dbg、OllyDbg、Cheat Engine;只能做简单修改:弹窗去除、简单逻辑跳转、字符串修改;复杂业务逻辑无法维护,极易引发程序崩溃;只建议应急临时修复,绝不用于正式生产环境长期改造。

2026-08-24 15:28:53 388

.net core服务限流样例源码

架构上的三个决定 1. BucketMath 抽成纯函数 内存版和 Redis 版共用同一套计算,保证单机和分布式行为完全一致。这也是为什么它能直接单元测试——不用起 Redis,不用 mock 时间。 2. 桶 key = {规则名}:{身份} 同一 IP 在 login 规则和 default 规则下有各自的桶,互不干扰。身份前缀是 ip: / user: / ak:,看日志一眼就知道按什么分的。 3. Redis 用 Lua 保证原子 「读-算-写」三步不做成原子,高并发下必然出竞态:A 读到剩 1 个,B 也读到剩 1 个,两个都放行。而且 Redis 挂了是 fail-open(记日志后放行)——限流组件不能把整个服务拖垮。 最容易出事的两个地方 中间件顺序:限流必须在 UseAuthorization() 之后,否则 ctx.User 还是空的,"按用户分组"会静默退化成按 IP——功能看起来正常,实际上是错的。 反向代理:Nginx 后面 RemoteIpAddress 拿到的是内网 IP,所有用户共用一个桶。但反过来,如果不限制可信代理,客户端伪造 X-Forwarded-For 就能绕过所有按 IP 的限流。我在 Program.cs 里用 KnownProxies.Clear() 是为了演示方便,生产必须改成限定内网网段,README 里标了红。 另外 X-User-Id 这个演示头也要删——任何人都能伪造它。 关于内置 RateLimiter .NET 8 的 PartitionedRateLimiter 单实例场景其实更省事(少写很多代码),我在 README 里给了对照和选型表。本项目自己写是为了换这三样:分布式、任意 cost 权重、能查桶余量(/api/ratelimit/my-buckets)。 排查"为什么没限住"最快的手段是 curl /

2026-09-28

氧化炉进出口绕棍巡检说明书

氧化炉进出口绕棍巡检

2024-10-19

求职c#软件开发工程师职位

求职c#软件开发工程师职位

2024-10-17

Fastreport标签设计器

一款解压即用的标签设计器,可设置常用标签的模式

2024-07-12

SMT设备说明书-涵盖使用保养等功能

SMT设备说明书-涵盖使用保养等功能

2024-07-02

web前端开发技术讲解

主要讲解web前端开发技术,从前端角标、样式、javasript详细讲解

2024-06-28

win7系统设置共享文件步骤

win7系统设置共享文件步骤

2024-06-13

eas映射数据结构不可获取的两个dll库

本包包含两个eas映射数据结构不可或缺的dll,分别为EAS.Data.dll和EAS.MicroKernel.dll

2024-06-11

基于WPF自主开发插件

XXXXXXXXXXXXXXX

2024-04-11

基于可编程控制器最新资料

基于可编程控制器最新资料

2024-06-11

图片识别(只限猫和狗)

利用机器学习算法,构建模型,识别动物

2024-06-04

excel宏命令调试安装包

WPS系统宏命令调试安装包

2024-05-28

一款开源.NET WPF界面库介绍

一款开源.NET WPF界面库介绍

2024-02-27

设备信息话采集的基本要求

设备信息化采集的基本要求: 1.什么是设备信息护化 2.实现设备信息化的集中方式 3.不同设备实现信息化的方式

2024-02-19

西门子840D系列机床可测试参数整理

西门子840D系列机床可测试参数整理

2024-01-16

基恩士SR Web端软件使用步骤

基恩士SR Web端软件使用步骤

2024-01-16

基恩士SR SDK 使用步骤

基于基恩士SR SDK进行相机开发步骤

2024-01-16

基于基恩士扫码枪实现7mm条码注意事项

基于基恩士扫码枪实现7mm条码注意事项

2024-01-16

win10虚拟机黑屏的几种解决方案.docx

win10虚拟机黑屏合资源共享创建方法

2021-09-23

9 高级语言ADS通讯.ppt

ADS通讯

2021-09-23

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除