自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(356)
  • 收藏
  • 关注

原创 使用 Helm 管理 Kubernetes Operator:从部署到运维

这个知识解决什么问题:一句话精华:适合谁学:不适合谁:关键概念速查表概念大白话解释生活比喻一句话记忆Helm Chart一套打包好的 K8s 资源模板装修设计图Chart 是"安装包"values.yaml可配置的参数装修选项清单values 是"配置参数"templates/模板文件,生成实际资源施工图纸templates 是"资源模板"Release一次 Helm 安装实例装修项目Release 是"安装实例"四、深入浅出

2026-02-15 10:23:08 537 1

原创 Kubernetes Operator 原理与实践:从入门到实战

一句话是什么Operator 是 Kubernetes 的扩展模式,让你用自定义资源(CR)来管理复杂应用。生活化比喻想象你开了一家连锁餐厅...传统方式(手动管理):- 你要亲自盯着每个分店- 哪家店缺人了,你亲自去招- 哪家店出问题了,你亲自去修- 累死你!Operator 方式(自动化管理):- 你写了一份"餐厅管理手册"(CRD)- 每个分店按手册运营(CR)- 有个"智能管家"自动执行手册规则(Controller)- 你只需要定义"我要开 10 家店",管家自动搞定一切。

2026-02-15 10:22:29 680

原创 Golang 中 `_` (blank identifier) 的用法

Go语言中空白标识符_的主要用法包括: 忽略函数返回值 - 丢弃不需要的返回值,如value, _ := someFunction() 忽略循环索引/值 - 在range循环中只使用需要的部分 接口实现检查 - 编译时验证类型是否实现接口,如var _ io.Writer = (*MyWriter)(nil) 副作用导入 - 仅执行包的init函数,如数据库驱动导入 结构体占位 - 用于内存对齐或预留字段 最佳实践包括: 明确处理错误而非直接忽略 使用简洁的range写法 利用接口检查确保类型安全 合理使用

2026-02-10 17:34:32 421

原创 《分布式事务实战完全指南》:从理论到实践

《分布式事务实战完全指南》系统讲解了分布式事务的理论基础、主流方案和实战应用。文章首先阐述了分布式事务的必要性,指出微服务架构下跨数据源操作的一致性问题。接着详细分析了ACID、CAP、BASE三大理论基础,对比了强一致性与最终一致性的适用场景。在主流方案部分,重点介绍了2PC、3PC、TCC和Saga模式的原理、优缺点及适用场景。最后介绍了Seata等实战框架,提供了快速开始的配置示例。全文兼顾理论与实战,为开发者解决分布式环境下的数据一致性问题提供了系统指导。

2026-02-08 18:12:39 635

原创 《设计数据密集型应用》学习指南:从入门到精通

设计数据密集型应用》是一本值得反复阅读的经典。它不仅教你如何设计数据系统,更教你如何思考问题。没有完美的系统,只有最适合的场景理解原理比记住技术更重要实践是最好的老师希望这篇总结能帮助你快速理解这本书的核心内容。如果你有任何问题,欢迎在评论区留言讨论!

2026-02-03 17:39:41 494

原创 MySQL vs PostgreSQL 对比

MySQL与PostgreSQL核心差异对比 MySQL(InnoDB)和PostgreSQL是两大主流关系型数据库,在事务、索引、复制等方面存在显著差异: 事务处理 MySQL默认REPEATABLE READ隔离级别,采用next-key lock防止幻读 PostgreSQL默认READ COMMITTED,使用MVCC+SSI实现可串行化 长事务影响不同:MySQL积累undo压力,PostgreSQL导致表膨胀 索引机制 MySQL主要使用B+Tree聚簇索引和二级索引 PostgreSQL支持多

2026-02-01 14:14:40 730

原创 PostgreSQL触发器详解

PostgreSQL触发器是绑定在表或视图上的自动执行程序,可在数据变更时自动触发预设逻辑。本文详解其核心机制(四要素+魔法变量)、实战应用(审计日志系统搭建)及避坑指南。触发器适合审计追踪、数据同步、复杂校验等场景,具有强一致性优势,但需避免性能陷阱和循环触发。最佳实践建议:优先使用约束处理简单规则,触发器仅用于复杂逻辑,避免调用外部服务。文章包含完整审计案例、决策树对比和常用命令速查,帮助开发者用好这把"双刃剑"。

2026-02-01 14:08:18 637

原创 OpenCode 完全指南:终端中的 AI 编程助手,让开发效率提升 10 倍(虽然有点夸张)

《OpenCode 完全指南:终端 AI 编程助手使用手册》介绍了这款开源终端 AI 工具的核心功能与使用方法。OpenCode 支持 75+ AI 模型,通过终端直接集成开发工作流,具备项目理解、代码修改、命令执行等能力。文章详细讲解了安装配置流程、Skills 插件系统扩展、核心使用技巧(包括斜杠命令、文件引用、Shell 执行等),并区分 Plan 规划与 Build 执行两种模式。该工具支持中文,通过项目级规则配置可定制 AI 行为,能显著提升代码生成、审查、调试等开发场景的效率。

2026-01-25 21:20:03 1353

原创 Cursor 中优雅使用 Agent Skills:从 0 到一套可复用的“技能系统”

本文介绍了如何在Cursor中优雅使用Agent Skills,构建可复用的技能系统。主要内容包括:1)Agent Skills标准的三部分结构(技能目录、说明文档和CLI工具);2)本地环境准备(安装Node和OpenSkills工具);3)项目中的技能安装与配置;4)Cursor中的使用方式(显式和隐式调用技能)。通过这套方法,开发者可以将经验转化为可版本管理的项目级资产,在不同环境中持续复用和优化技能系统。

2026-01-23 18:38:03 2326

原创 智能体设计模式全景总结:21个模式快速串联指南

本文总结了《Agentic Design Patterns》中的21个智能体设计模式,将其分为四大类:核心设计模式(7个)、高级设计模式(4个)、集成设计模式(3个)和生产设计模式(7个)。核心模式包括提示链、路由、并行化等基础能力构建;高级模式涉及记忆管理、学习适应等智能提升;集成模式关注异常处理、人机协作等系统整合;生产模式涵盖通信、资源优化等实际应用。文章通过"一句话定位"简明阐述各模式概念,并列出核心价值、关键概念和适用场景,帮助开发者快速掌握智能体设计的关键要素和相互关系。

2026-01-23 14:56:03 1102 1

原创 智能体设计模式(七)优先级排序-探索与发现

本文是"智能体设计模式"系列完结篇,重点探讨优先级排序和探索发现两大核心模式。优先级排序帮助AI像高效项目经理一样,通过评估紧迫性、重要性、依赖关系等要素,在多任务场景中做出最优决策,并支持动态调整。探索发现模式则赋予AI主动学习能力,通过假设生成、实验设计、结果评估的闭环,不断优化自身知识体系。文章通过急诊室分诊、做饭流程等生活化比喻,配合代码示例和四象限法则等工具,生动阐释了如何让AI具备"轻重缓急"的判断力和持续进化能力。这两大模式共同构成了智能体应对复杂环境的

2026-01-22 10:55:31 1225

原创 智能体设计模式(六)资源感知优化-推理技术-评估与监控

本文是"智能体设计模式"系列第六篇,重点介绍资源感知优化、推理技术及评估监控三大模块。资源感知优化让AI根据任务复杂度智能选择模型(如简单任务用GPT-3.5,复杂任务用GPT-4),通过路由Agent实现动态模型切换,配合后备机制确保服务连续性,并由评论Agent进行质量把关。该方案能显著降低AI使用成本(节省30-70%费用)同时保证服务质量,适用于需要平衡成本与效果的智能体开发场景。文章通过生活化比喻(如医院分诊、交通选择)和代码示例,生动讲解如何实现"该省省该花花&qu

2026-01-22 10:54:55 1121

原创 三大经典学习法:苏格拉底、西蒙、费曼法(系统拆解+实操指南)

由古希腊哲学家苏格拉底提出的思辨式学习法,也叫“产婆术/问答法”。核心是不直接灌输答案,通过持续追问与反诘,引导学习者发现自身认知的矛盾与漏洞,自主拆解问题、归纳规律、探究本质,让思考“自己长出来”。由诺贝尔经济学奖得主赫伯特·西蒙提出的量化快速入门法,核心是聚焦单一主题、剔除无关内容,以量化时间为标尺,攻克领域核心知识,实现零基础快速破局。西蒙核心结论:任何领域,投入约1000小时的聚焦学习,就能掌握核心内容,成为入门专家(区别于“一万小时定律”的深耕,主打“高效破局”)。

2026-01-22 10:51:40 1090

原创 智能体设计模式(五)人机协同-知识检索RAG-智能体间通信

AI擅长处理大量数据和重复任务人类擅长判断、创造和承担责任两者结合,才能发挥最大价值AI是演奏家,技术精湛人类是指挥家,把控全局配合默契,才能奏出美妙乐章承认AI的局限性(知识有限、可能幻觉)用工程方法弥补(检索增强)让AI从"记忆型"变成"学习型"不是什么都记在脑子里而是知道去哪里找答案找到后能理解、整合、表达# 定义技能name='检查空闲时间',description="检查用户在某个时间段是否有空",examples=['我明天上午10点到11点有空吗。

2026-01-20 20:49:33 889

原创 智能体设计模式(四)模型上下文协议-目标设定与监控-异常处理与恢复

本文介绍了智能体设计模式中的模型上下文协议(MCP)、目标设定与监控、异常处理与恢复三个核心模块。MCP作为AI世界的"万能插座",通过标准化协议让任何AI都能连接各种外部工具和数据,实现即插即用的交互。文章通过生活化比喻和代码示例,详细讲解了MCP的工作原理、三大组件(资源、工具、提示词)以及完整工作流程(发现-请求-执行-响应),同时指出了MCP的适用边界和注意事项。该系列文章为开发者提供了构建智能体系统的实用设计模式和最佳实践。

2026-01-19 17:28:54 671

原创 智能体设计模式(三)多智能体协作-记忆管理-学习与适应

本文是"智能体设计模式"系列第三篇,重点探讨多智能体协作模式。核心观点是:单个AI能力有限,复杂任务需要多个专业AI团队协作。文章通过生活化比喻(如电影制作团队)说明多智能体的优势:专业分工、模块化、可扩展性和容错性。

2026-01-18 11:05:06 840

原创 智能体设计模式(二)反思-工具使用-规划

本文是"智能体设计模式"系列的第二部分,重点介绍了反思、工具使用和规划三种核心模式。反思模式通过让AI自我评估和改进输出质量,类比于人类写作时的反复修改过程;工具使用模式赋予AI调用外部API和资源的能力;规划模式则使AI能够分解复杂任务并制定执行策略。文章通过生活化比喻和代码示例,详细阐述了这些模式的实现原理和应用场景,为开发者构建更智能的AI系统提供了实用框架。

2026-01-17 11:26:41 681

原创 智能体设计模式(一):提示链、路由与并行化

《智能体设计模式实战指南:提示链、路由与并行化》摘要 本文系统介绍了智能体设计中的提示链模式,通过分而治之的方法解决复杂AI任务处理问题。核心观点是将复杂任务拆解为多个简单步骤,形成流水线式处理流程。关键要点包括:1)提示链通过模块化设计降低认知负荷;2)结构化输出(如JSON)确保信息传递准确性;3)上下文传递机制实现步骤间无缝衔接。文章通过生活化比喻和代码示例,展示了如何构建从文本提取到格式转换的完整提示链。实践建议强调任务拆解要适度,简单场景无需过度设计。该模式特别适用于市场分析、数据转换等需要多步处

2026-01-16 15:21:59 1003 1

原创 Istio 服务网格完全指南:从原理到实战

想做灰度发布?得改代码、改配置、重新部署,还得祈祷别出错想知道服务 A 调用服务 B 的延迟?得埋点、加日志、搞监控想实现服务间加密通信?得改代码、管理证书、处理证书过期想实现熔断限流?每个服务都得单独实现一遍如果你对这些问题深有体会,那么恭喜你,Istio 就是为你准备的!本文将从原理到实战,带你彻底搞懂 Istio 服务网格。想象一下,你管理着一个有 100 个微服务的系统。问题一:服务间通信的复杂性服务发现:服务 B 在哪里?负载均衡:服务 B 有 10 个实例,调用哪一个?

2026-01-14 22:12:15 1002 1

原创 智能体设计模式 - 核心精华

智能体设计模式的核心是将大语言模型(LLM)与感知、规划、行动和记忆能力结合,形成能自主思考执行的AI助手。智能体通过五步循环运作:获取任务→分析环境→制定计划→执行行动→学习改进。相比普通AI聊天,智能体能完成多步骤任务、使用工具、记忆上下文并持续优化。 智能体设计分为四层架构:基础执行层(提示链、工具使用)、智能能力层(规划、反思、记忆)、多智能体协作层。掌握7个核心模式即可覆盖80%应用场景:1)提示链分解复杂任务;2)工具使用突破知识边界;3)规划制定多步骤策略;4)反思实现自我改进;5)记忆管理保

2026-01-13 14:07:14 393

原创 CI/CD 监控指南:让流水线透明可控

摘要:CI/CD监控体系构建指南 本文系统介绍了CI/CD监控体系的构建方法,重点涵盖Pipeline执行状态、GitOps同步状态和构建性能指标的监控。内容包含Tekton监控配置、指标分类及常用PromQL查询示例,并提供了完整的CI/CD监控架构图。适用于DevOps工程师快速建立透明可控的CI/CD监控系统,实现从构建到部署全流程的可观测性。通过ServiceMonitor配置和Prometheus指标采集,可及时发现Pipeline失败、应用不同步等问题,并分析构建性能瓶颈。

2026-01-08 11:04:44 630

原创 CI/CD: 金丝雀发布 Argo Rollouts 用户指南

Argo Rollouts 金丝雀发布指南 本文介绍了使用 Argo Rollouts 实现金丝雀发布的完整流程和操作指南。金丝雀发布通过渐进式流量切换来降低发布风险,先让小部分用户访问新版本,确认无误后再逐步扩大范围。文章提供了7个典型场景的操作示例,包括查看发布状态、触发新版本、观察进度、手动推进、紧急回滚等核心功能。与传统全量发布相比,金丝雀发布能显著降低故障影响范围,并支持一键回滚,使发布过程更加安全可控。指南采用生活化比喻(如餐厅试菜)帮助理解技术概念,并包含完整的发布流程图和命令速查表,适合运维

2026-01-02 19:54:06 834

原创 CI/CD: K8S + Tekton + ArgoCD 深入浅出完全指南

本文介绍了基于Tekton和ArgoCD的CI/CD实践指南,将复杂流程简化为通俗易懂的"建筑工人"和"搬家公司"比喻。Tekton负责构建镜像(CI阶段),ArgoCD负责部署到Kubernetes(CD阶段),Git作为唯一真相来源。指南包含架构总览、环境信息、核心组件速查表以及日常操作指南,帮助开发者快速掌握从代码提交到自动部署的全流程,实现"改代码→git push→喝咖啡→部署完成"的自动化体验。特别适合需要快速上手这套CI/CD系统的开发者,涵盖了触发构建、查看状态、排查问题等核心操作。

2026-01-02 11:39:49 586 1

原创 CI/CD: Argo 深入浅出教程

ArgoCD是Kubernetes原生的GitOps持续部署工具,通过将Git仓库作为配置的唯一来源,实现自动化同步和版本控制。教程通过生活化比喻解释核心概念:Application(工作任务书)、Source(任务来源)、Destination(执行地点)和Sync(同步操作)。重点分析了Application资源的配置细节,包括Git仓库路径设置、目标集群配置和同步策略(手动/自动/自动修复)。特别指出常见误区如递归扫描子目录需要显式设置,并对比了prune(清理多余资源)和selfHeal(自动修复漂

2026-01-02 11:38:20 684

原创 CI/CD: TektonCI 深入浅出教程

本文摘要了Tekton这一Kubernetes原生CI/CD工具的核心概念和使用方法。Tekton将CI/CD流程转化为Kubernetes资源,通过Step、Task、Pipeline等组件构建流水线。Step是最小执行单元,Task是一组Steps,Pipeline编排多个Tasks。文章用生活化比喻解释这些概念,如将Step比作烹饪动作、Task比作一道菜、Pipeline比作整桌宴席,并提供了实际项目示例说明如何定义和使用这些组件。适合已有K8s基础、想搭建云原生CI/CD的开发者学习。

2026-01-02 11:34:21 903

原创 CI/CD: Github + Jenkins + Harbor 指南

本文介绍在Kubernetes集群中搭建基于Jenkins+Harbor的CI/CD流水线方案。主要内容包括:整体架构设计(使用Jenkins作为CI/CD引擎,Harbor作为私有镜像仓库,通过smee.io实现内网Webhook代理);详细部署步骤(Harbor通过Helm安装,Jenkins部署为StatefulSet);完整CI/CD流程(代码推送→Webhook触发→Jenkins构建→镜像推送→K8s部署);以及环境准备、排错指南和最佳实践。该方案适合企业内网环境,实现从代码提交到应用部署的自动

2025-12-28 14:08:10 1225

原创 CI/CD: GitHub K8S 部署指南

本文详细介绍了使用GitHub Actions为go-zero微服务项目实现CI/CD部署到Kubernetes集群的全过程。主要内容包括项目架构设计、部署步骤实施、常见问题解决方案以及完整的CI/CD流程说明。重点解决了镜像推送权限、K8s证书配置、服务依赖循环、健康检查等关键问题,并提供了阿里云镜像仓库替代GitHub Packages的优化方案。通过ConfigMap挂载配置文件、合理设置服务依赖关系等实践,确保了微服务在K8s环境中的稳定运行。

2025-12-24 15:30:07 1134

原创 Java framework-cache

ins-framework-cache是一个基于Spring Cache和Redis的高性能缓存框架,提供统一缓存管理能力。框架核心特性包括:自动配置、多种缓存管理器支持(Redis/内存/无操作)、灵活配置选项、Redis集群支持以及智能键生成策略。架构设计分为应用层、工具层、Spring Cache抽象层、中间件层和Redis存储层,通过CacheConfig配置类实现核心功能。该框架适用于需要高效缓存管理的Java应用,支持单节点和集群部署模式,简化了缓存使用复杂度,提升了系统性能。

2025-11-25 17:03:36 422

原创 Java framework-aoplog

本文介绍了基于AOP的日志框架ins-framework-aoplog的使用指南。框架通过注解和切面技术实现方法级日志记录,包含核心组件LogAopFormat、AopThreadLocal等,支持请求链路追踪和异常日志记录。详细说明了集成配置步骤(Maven依赖、配置文件)、使用方法(基础注解、高级过滤)和最佳实践(性能优化、安全考虑)。特别解析了AOP代理机制、线程数据管理原理和日志级别控制策略,并提供了常见问题解决方案。该框架可帮助开发者快速构建完整的调用链日志系统,适用于Controller、Ser

2025-11-25 13:14:32 809

原创 Java Log4j2

Log4j2配置指南摘要 Log4j2是Apache基金会提供的日志框架升级版,相比Log4j 1.x具有更高性能和更丰富的功能。本文档详细介绍了Log4j2的核心特性、Maven依赖配置方法以及XML配置文件的编写规范。关键点包括:必须排除Spring Boot默认的logback依赖;推荐使用log4j2-spring.xml配置文件;配置文件包含Properties、Appenders和Loggers三部分结构;支持控制台和文件等多种日志输出方式;可通过monitorInterval实现配置热更新。文

2025-11-25 13:13:44 890

原创 Java MyBatis

规则 1: DAO 接口必须继承@Mapper// T: 实体类型 (PO)// I: 主键类型规则 2: 使用@Mapper注解标记接口规则 3: 如需自定义参数名,重写方法并添加@Param注解@Mapper/*** 重写方法以支持参数绑定* 在 XML 中可以使用 #{idList} 引用参数*/@Override/*** 分页查询(重写以支持参数绑定)*/@Overrideins/*** 重写方法以支持参数绑定。

2025-11-25 13:13:10 1035

原创 Java Swagger/OpenAPI

*** Swagger/OpenAPI 配置类*/@Bean.title("Monitor API 文档").description("系统用户管理 API 接口文档")配置说明: 标识为配置类@Bean: 创建OpenAPIBeanInfo: API 基本信息(标题、版本、描述、联系方式、许可证)要求: 简短、清晰,一句话概括接口功能格式: 动词 + 名词,如 “新增用户”、“查询用户列表”长度: 建议不超过 20 个字符// ✅ 正确。

2025-11-25 13:12:14 760

原创 mvcc 简介

MVCC是多版本并发控制技术,通过维护数据的历史版本实现读写并发。核心机制包括:隐藏列(事务ID、回滚指针)、undo日志记录版本链、Read View判断可见性。不同隔离级别下Read View生成策略不同,读已提交每次查询新建视图,可重复读复用首次视图。MVCC优势在于读写互不阻塞,避免锁竞争,显著提升并发性能,成为现代数据库实现高效事务处理的关键技术。

2025-11-13 10:49:01 480

原创 k8s中对gkv的理解 TypeData

Kubernetes中的GKV(Group、Version、Kind)是资源标识的核心概念,通过apiVersion和kind字段在YAML配置中体现。Group将功能相关资源归类(如apps、batch),Version管理API演进(v1稳定版、v1beta1测试版),Kind指定资源类型(如Deployment、Service)。GKV确保资源正确解析和版本兼容性,可通过kubectl api-resources查询。理解GKV是编写正确K8s配置的基础。

2025-11-12 09:03:46 593

原创 编码规范-12-Factor App 安全

**12-Factor App(十二要素应用)**是一套云原生应用的开发原则,旨在提升应用的可移植性、扩展性和可维护性。其核心包括:单一代码库、显式依赖管理、配置分离、无状态进程、自包含服务、环境一致性、日志标准化等。这些原则强调应用应独立于环境,支持快速部署和弹性扩展,适用于现代分布式架构。遵循12要素的应用能更好地适配容器化部署和云平台,实现高效运维与持续交付。

2025-10-31 09:05:11 575

原创 ipvs 常用命令

以下是IPVS(通过ipvsadm。

2025-09-18 13:06:59 368

原创 iptable常用命令

摘要:iptables是Linux内核防火墙的重要配置工具,支持查看、添加、删除规则及NAT转换。常用命令包括-L查看规则、-A/-I添加规则、-D删除规则,支持端口控制、IP过滤和转发设置。关键操作包含SNAT/DNAT地址转换、默认策略配置(ACCEPT/DROP)及规则持久化保存(iptables-save/restore)。使用时需注意协议、端口、网卡等参数,建议操作前备份现有规则。

2025-09-18 11:32:36 386

原创 CNI(Container Network Interface,容器网络接口)

CNI IPAM是容器网络接口中的地址管理组件,负责为容器动态分配、回收IP地址。它以插件形式与网络插件协同工作,支持host-local(节点本地)、dhcp(外部服务器)、calico-ipam(全局池)等多种模式,满足不同网络场景需求。核心功能包括IP分配、子网管理、DNS配置和地址回收,相比传统IPAM更轻量化,专注容器快速创建/销毁的特性。配置通过JSON定义,典型场景如bridge插件搭配host-local实现单机容器网络。选择IPAM插件需权衡性能、规模及现有架构兼容性。

2025-09-10 09:30:10 728

原创 gin go-kratos go-zero框架对比

本文对比了Go语言三大服务框架Gin、Go-Kratos和Go-Zero的核心差异。Gin是轻量级HTTP路由框架,适合简单API;Go-Kratos是面向企业级微服务的DDD框架,架构完整但学习成本高;Go-Zero强调开发效率,内置微服务组件和代码生成工具。三者定位不同:Gin适合中小型项目,Kratos适合大型系统,Zero则侧重快速开发。选择建议:要简单选Gin,要规范选Kratos,求效率选Zero。开发者可根据项目规模、团队情况和技术需求进行选择。

2025-07-16 08:15:18 1676

原创 面试算法高频08-动态规划-03

编辑距离问题通过动态规划将复杂的字符串转换问题分解为子问题,利用状态转移方程高效求解。关键在于正确定义状态和转移逻辑,边界条件的处理也至关重要。该解法是此类问题的经典解法,时间和空间复杂度均为多项式级别,适用于大多数实际场景。

2025-04-28 10:21:45 1098

空空如也

空空如也

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

TA关注的人

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