自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(73)
  • 资源 (1)
  • 收藏
  • 关注

原创 微服务架构与SpringCloudAlibaba全解析

本文摘要: 本文系统介绍了微服务架构及SpringCloud Alibaba技术栈的核心组件与应用。主要内容包括:1. 微服务架构概念与优势,将单体应用拆分为独立服务;2. SpringCloud核心组件:Nacos(服务注册/配置中心)、Sentinel(流量控制/熔断降级)、Seata(分布式事务)及Gateway(API网关)的功能整合;3. 关键技术实现:通过OpenFeign实现服务调用,Ribbon负载均衡,以及Seata的AT模式解决分布式事务问题;4. 实战演示了商品管理系统在分布式环境下的

2025-10-22 15:48:26 753

原创 揭秘MySQL事务ACID特性与秒杀实战

本文介绍了数据库事务的基本概念、ACID特性及MySQL中的事务操作。事务是数据库操作的逻辑单元,确保数据一致性,具有原子性、一致性、隔离性和持久性四大特性。MySQL通过InnoDB引擎支持事务,提供了事务开始、提交、回滚等基本命令,并详解了四种隔离级别(读未提交、读已提交、可重复读和串行化)及其解决的问题(脏读、不可重复读、幻读)。重点通过秒杀系统示例,展示了如何使用事务实现用户扣款、商家收款、商品减少和订单提交的原子操作,包括表结构设计、存储过程实现和乐观锁应用,确保高并发场景下的数据一致性。

2025-09-04 21:53:54 909

原创 MySQL索引原理与优化全解析

MySQL索引是数据库性能优化的核心技术,其核心原理是通过B+树等高效数据结构实现快速数据定位。索引分为聚簇索引(决定数据物理存储顺序)和非聚簇索引(需回表查询),主要类型包括主键索引、唯一索引、普通索引、全文索引和组合索引。索引能显著提升查询速度、减少I/O操作并优化排序分组,但会增加存储空间和写入开销。合理使用索引需遵循最左前缀原则,避免索引失效场景(如OR条件、函数操作、模糊查询等)。B+树因其矮胖结构、顺序访问特性和高I/O效率成为MySQL首选索引结构,特别适合处理大规模数据查询。

2025-08-23 22:59:53 696

原创 SpringBoot-集成POI和EasyExecl

摘要:Apache POI和EasyExcel是Java生态中处理Excel文件的主流工具。POI提供全面的Office格式支持,但存在内存消耗大的问题;EasyExcel通过流式处理优化内存使用,适合大数据量场景。两者均支持Excel读写操作,POI侧重功能全面性,EasyExcel侧重性能优化。实际应用中,POI适合复杂格式处理,EasyExcel更适合百万级数据导出。开发时可通过分页查询、多线程、异步处理等方式进一步提升性能,同时需注意资源释放和异常处理。

2025-08-19 21:45:24 790

原创 Java本地缓存使用详解

本文介绍了Java中常用的四种本地缓存技术:1) HashMap简单实现但缺乏淘汰策略;2) Guava Cache提供自动加载、多种淘汰策略和统计功能;3) Caffeine采用W-TinyLFU算法,性能优于Guava Cache;4) Ehcache支持多级缓存和集群方案。这些本地缓存技术各有特点,适用于不同场景,开发者可根据性能需求、功能特性和使用复杂度进行选择。文中通过代码示例展示了每种技术的典型实现方式,并分析了各自的优缺点,为Java开发中的缓存方案选型提供了实践参考。

2025-08-14 13:44:44 523

原创 Spring Security基本配置指南

本文介绍了Spring Security的关键组件及其配置方法。主要内容包括:1.密码加密器PasswordEncoder及其实现(BCrypt、NoOp、Pbkdf2、SCrypt、Argon2)的选择与使用;2.用户信息服务UserDetailsService的作用与实现;3.核心认证提供者DaoAuthenticationProvider的配置;4.SecurityFilterChain的详细配置方法,涵盖CSRF防护、授权规则、登录/注销配置、会话管理、安全头设置等。文章重点阐述了不同场景下的安全配

2025-08-10 11:48:38 778

原创 SpringSecurity过滤器链全解析

Spring Security 通过过滤器链实现安全控制,包含约30个按固定顺序执行的过滤器。关键过滤器包括:处理用户名密码认证的UsernamePasswordAuthenticationFilter、维护安全上下文的SecurityContextPersistenceFilter、防御CSRF攻击的CsrfFilter等。过滤器链分为请求预处理、认证处理、授权决策三阶段,最终由FilterSecurityInterceptor进行访问控制。每个过滤器承担特定职责,如会话管理、认证授权、异常处理等,共同构

2025-08-09 18:12:07 772

原创 SpringBoot核心特性详解

本文系统介绍了SpringBoot框架的核心知识。SpringBoot是基于Spring的简化开发框架,通过自动配置、起步依赖等特性实现快速应用开发。主要内容包括:1)SpringBoot定义及优势,如简化配置、提高效率;2)核心特性:自动配置、独立运行、生产级功能;3)核心功能:起步依赖和自动配置机制;4)开发示例展示项目创建流程;5)核心注解解析,如@SpringBootApplication组合注解;6)自动配置原理,基于条件注解和spring.factories文件;7)应用启动流程的8个关键步骤。

2025-08-08 00:06:29 1096

原创 Nginx入门:高性能Web服务器详解

Nginx是一款高性能的HTTP/反向代理服务器,具有占用内存少、并发能力强(支持5万并发)的特点。它支持静态资源服务、反向代理和负载均衡三大核心功能,并能通过轮询、加权轮询、最少连接等算法实现流量分发。Tengine是淘宝基于Nginx改进的Web服务器,针对大流量场景优化。Nginx配置文件分为全局块、events块和http块三部分,其中http块可配置虚拟主机、日志、缓存等。安装Nginx需要编译工具和库文件,通过systemd可设置开机自启。Nginx负载均衡支持多种算法,并能与Tomcat等后端

2025-08-05 21:43:29 816

原创 SpringMVC核心原理与实战指南

Spring MVC框架简介 摘要: Spring MVC是基于MVC设计模式的Java Web开发框架。MVC将应用分为模型(Model)、视图(View)和控制器(Controller)三层,实现业务逻辑与界面显示的分离。 Spring MVC核心组件包括: DispatcherServlet - 前端控制器,接收所有请求 HandlerMapping - 处理器映射器 Controller - 业务控制器 ViewResolver - 视图解析器 工作流程: 用户发送请求到DispatcherServ

2025-07-31 21:48:12 914

原创 深入解析Java运行机制与JVM内存模型

Java程序运行原理与JVM内存管理 摘要:Java程序通过编译生成字节码文件(.class),由JVM解释执行实现跨平台特性。JVM内存模型包含类加载子系统、运行时数据区(方法区、堆、虚拟机栈、本地方法栈、程序计数器)和执行引擎。垃圾回收采用分代收集算法,针对新生代(Eden+Survivor)使用复制算法,老年代采用标记-清除/整理算法。JVM提供四种引用类型(强、软、弱、虚)管理对象生命周期,以及多种垃圾收集器(Serial、Parallel、CMS、G1)适应不同场景需求。其中G1收集器通过Regi

2025-07-27 16:54:03 733

原创 Python图像数据处理

该代码实现了一个完整的猫狗图像分类数据预处理流程,主要包括:1)加载猫狗图片数据集并展示样本;2)将图片统一调整为标准尺寸(100x100灰度图);3)创建训练数据集并打乱顺序;4)分离特征和标签;5)使用pickle序列化保存处理后的数据。代码使用了OpenCV进行图像处理,numpy进行数组操作,并通过tqdm显示进度条。最终输出的数据格式适合输入卷积神经网络进行训练,为后续的猫狗分类任务提供了标准化的预处理数据。

2025-07-24 22:34:30 1056

原创 MNIST 手写数字识别模型分析

该代码实现了一个基于TensorFlow/Keras的MNIST手写数字识别模型。首先加载并预处理MNIST数据集,将28x28像素图像归一化。然后构建包含两个128神经元隐藏层的全连接神经网络,使用ReLU激活函数和Softmax输出层。模型采用Adam优化器和交叉熵损失函数进行训练,3个epoch后达到约97%的测试准确率。代码还实现了模型预测、结果可视化(显示数字图像及其预测标签)以及模型的保存与加载功能。整个过程展示了从数据准备到模型训练、评估和应用的完整深度学习流程。

2025-07-24 22:32:21 887

原创 Docker详解及实战

Docker快速入门指南 Docker是一个开源的应用容器化平台,能够将应用程序及其依赖打包成轻量级容器,实现跨环境一致运行。相比传统虚拟机,Docker容器共享宿主机内核,启动更快、资源占用更低,适合微服务部署。 核心特性: 标准化打包(Dockerfile定义环境) 镜像复用与层级缓存 资源隔离(Namespace/Cgroups) 支持多版本软件共存 安装步骤(CentOS): 安装依赖工具:yum install -y yum-utils device-mapper-persistent-data

2025-07-23 22:26:53 1680

原创 机器学习-线性回归

本文介绍了简单线性回归和多元线性回归的基本概念与实现步骤。简单线性回归通过单一自变量预测因变量,寻找最佳拟合直线使预测误差最小化,其实现步骤包括数据预处理、模型训练、预测和结果可视化。多元线性回归则在多个特征间建立线性关系,实现步骤类似但涉及类别数据处理(独热编码)和避免虚拟变量陷阱。两种方法都使用sklearn的LinearRegression类进行建模,并通过训练集拟合模型、测试集评估性能。文章提供了完整的Python代码示例,涵盖数据读取、特征处理、模型训练和结果可视化等关键环节,适用于探索变量间线性

2025-07-20 23:32:17 844

原创 机器学习-数据预处理

数据预处理是机器学习中提高数据质量的关键步骤,主要包括缺失值处理、分类数据编码、数据集拆分和特征缩放等环节。通过SimpleImputer处理缺失值,LabelEncoder进行文本标签转换,train_test_split划分训练/测试集,以及StandardScaler实现特征标准化,确保数据适合模型训练。这些预处理步骤能有效解决原始数据中的噪声、不一致性和尺度差异问题,为后续建模奠定基础。

2025-07-20 23:26:57 458

原创 Kubernetes (K8S)知识详解

Kubernetes 是 Google 在 2014 年开源的生产级别的容器编排技术(编排也可以简单理解为调度、管理),用于容器化应用的自动化部署、扩展和管理。它的前身是 Google 内部的 Borg 项目,Borg 是 Google 内部的大规模集群管理系统,它在数千个不同的应用程序中运行数十万个作业,跨越许多集群,每个集群拥有数万台计算机。

2025-07-20 18:13:22 1014

原创 Nacos:微服务架构的核心引擎

Nacos是阿里巴巴开源的服务发现和配置管理平台,集注册中心和配置中心于一体。它支持动态服务发现、健康监测、配置管理及DNS服务,提供简洁API和可视化界面。Nacos具有高性能、易扩展、多语言兼容等优势,支持集群部署和安全隔离。安装过程包括下载解压、数据库配置和启动服务。其核心概念包括配置(DataID、Group)、命名空间(环境隔离)和配置分组(应用/模块区分)。通过统一管理微服务配置,Nacos显著提升了系统的灵活性和可维护性。

2025-07-19 16:33:05 1109

原创 揭秘CAS机制:多线程安全的无锁魔法

CAS(Compare-And-Swap)是一种高效的无锁并发控制机制,通过硬件支持的原子指令实现线程安全操作。Java通过Unsafe类提供CAS支持,广泛应用于原子类(如AtomicInteger)和并发容器(如ConcurrentHashMap)。CAS虽高效但存在ABA问题(值被改回原值导致逻辑错误),可通过版本号机制(AtomicStampedReference)、不可变对象等方案解决。优化策略包括减少竞争(分散热点)、缓存行优化等。CAS在低竞争场景性能优于锁,但高竞争时需考虑LongAdder

2025-07-13 17:39:51 997

原创 揭秘ThreadLocal:线程安全的秘密武器

ThreadLocal是Java提供的线程本地变量机制,通过为每个线程创建独立的变量副本实现线程隔离。其核心原理是利用Thread类中的ThreadLocalMap存储变量副本,以ThreadLocal对象为键。虽然ThreadLocal避免了同步开销,但存在内存泄漏风险(因弱引用键和强引用值),需通过remove()或static final声明来防范。典型应用包括线程安全工具类(如SimpleDateFormat)、全局上下文管理(如用户会话)和线程专属资源隔离。相比synchronized的共享变量加

2025-07-13 17:28:47 757

原创 理解volatile:并发编程的核心机制

摘要:volatile是Java并发编程中的轻量级同步机制,主要解决多线程环境下的可见性和有序性问题。它通过内存屏障禁止指令重排序,保证变量修改对其他线程立即可见。典型应用场景包括状态标志、双重检查锁定和一次性发布等模式。但需注意volatile只能保证单次读写的原子性,无法确保复合操作(如i++)的线程安全。在32位系统中,volatile还能保证long/double变量的原子性访问。正确使用volatile可以编写更高效安全的并发代码,复杂场景仍需结合synchronized或原子类。

2025-07-13 17:26:55 935

原创 深入了解JAVA中Synchronized

synchronized 是 Java 中的一个关键字,翻译成中文是同步的意思,主要解决的是多个线程之间访问资源的同步性,可以保证被它修饰的方法或者代码块在任意时刻只能有一个线程执行。

2025-07-13 17:25:30 687

原创 深入理解Java锁

本文系统介绍了Java中各类锁机制及其实现原理: 乐观锁与悲观锁 乐观锁基于CAS实现,适用于读多写少场景(如AtomicInteger) 悲观锁通过synchronized/ReentrantLock实现,适合写多场景 自旋锁与适应性自旋锁 自旋锁避免线程阻塞但消耗CPU JDK1.6引入自适应自旋,动态调整自旋时间 公平锁与非公平锁 公平锁按队列顺序获取(FairLock) 非公平锁直接竞争(ReentrantLock默认),吞吐量更高 可重入锁与非可重入锁 可重入锁允许同一线程多次获取(synchro

2025-07-13 07:00:00 804

原创 线程的创建与关闭全解析

Java线程状态及基本方法摘要 线程在Java中有6种状态: NEW - 新建状态,尚未调用start() RUNNABLE - 可运行状态,可能正在运行或等待CPU资源 BLOCKED - 阻塞状态,等待获取锁 WAITING - 无限期等待状态,需手动唤醒 TIMED_WAITING - 限时等待状态,自动唤醒 TERMINATED - 终止状态 线程基本方法 start() - 启动线程,使其进入RUNNABLE状态 run() - 包含线程执行的代码逻辑 sleep() - 线程休眠,不释放锁 jo

2025-07-11 00:12:33 891

原创 MySQL存储过程全解析

摘要:存储过程是预编译并存储在数据库中的SQL语句集合,具有简化开发、提高性能、增强安全性等优点,但也存在调试困难、依赖数据库等缺点。本文详细介绍了MySQL存储过程的创建、查看、修改、删除等管理操作,并通过参数类型(IN/OUT/INOUT)实现数据交互。重点演示了电商订单系统的实战案例,包括创建订单、处理支付、库存管理、VIP升级等7个核心存储过程,涵盖动态SQL、事务处理、临时表等高级用法。每个存储过程均配有详细注释和调用示例,最后还提供了存储过程的查看与管理命令,为数据库开发提供完整参考。

2025-07-06 22:01:16 712

原创 揭秘MySQL视图

MySQL视图是一种虚拟表,由查询定义的列和行组成,数据源自动态生成的基础表。视图具有简化查询、提高安全性、数据共享等优点,但也存在查询效率降低、更新限制等缺点。MySQL提供MERGE(合并查询)、TEMPTABLE(临时表)和UNDEFINED(自动选择)三种视图处理算法,分别适用于不同复杂度的查询场景。创建视图需要SELECT和CREATE VIEW权限,可通过GRANT命令授予。视图管理包括创建(CREATE VIEW)、查看(SHOW CREATE VIEW)、修改(ALTER VIEW)和删除(

2025-07-06 20:28:35 717

原创 Linux系统:开源世界的强大基石

Linux操作系统概述及实用命令指南 Linux是一个开源的通用操作系统,由Linus Torvalds于1991年开发。其核心特点包括开源免费、多用户多任务支持、高稳定性、强安全性以及良好的可移植性。系统由内核和系统程序组成,负责任务调度、内存管理和设备控制等核心功能。 主要系统命令: 文件操作:mkdir/rmdir创建删除目录,touch/rm管理文件,cp/mv拷贝移动文件 目录导航:cd切换目录,pwd显示当前路径,ls列出目录内容 文本处理:cat/tac查看文件,head/tail显示首尾内容

2025-07-05 23:10:26 2072

原创 Python-Word文档、PPT、PDF以及Pillow处理图像详解

Python操作办公文档和图像处理摘要 本文介绍了Python处理常见办公文档和图像的方法。在办公文档方面,通过python-docx库可以生成专业Word文档,包括添加标题、表格、图表、格式设置等;python-pptx库则用于创建PowerPoint演示文稿,支持添加幻灯片、图形、时间线等元素。PDF处理使用PyPDF2和reportlab库,可实现PDF创建、加密、水印添加、合并等操作。图像处理部分基于Pillow库,涵盖图像读取、裁剪、旋转、滤镜应用等基本操作,以及使用ImageDraw模块进行绘图

2025-06-30 23:50:05 902

原创 MySQL锁机制全解析

MySQL锁机制解析:从全局锁到行级锁的全面指南 本文详细介绍了MySQL中各种锁机制及其应用场景。主要涵盖三类锁:1)全局锁(FLUSH TABLES WITH READ LOCK)用于全库备份;2)表级锁(MyISAM默认)包括共享读锁、独占写锁和元数据锁;3)InnoDB行级锁(记录锁、间隙锁、临键锁和插入意向锁)。重点分析了共享锁(S锁)和排他锁(X锁)的特性与冲突场景,并通过多个实际案例演示了不同锁的加锁效果、阻塞表现和死锁形成过程。文章还探讨了索引对锁定的影响以及隔离级别与锁机制的关系,为开发者

2025-06-29 23:03:00 1201

原创 Python处理CSV文件以及Execl文件技巧

本文介绍了Python操作CSV和Excel文件的方法。CSV部分讲解了如何生成电商订单和学生成绩数据并导出为CSV文件,以及如何读取CSV文件进行数据分析。Excel部分对比了xlrd/xlwt和openpyxl两种操作方式,详细说明了如何读写Excel文件、调整单元格样式、进行公式计算以及生成统计图表。文章通过多个实际案例(如订单分析、成绩统计、销售报表等)展示了Python在数据处理方面的强大功能,为日常办公自动化和商业项目开发提供了实用参考。

2025-06-28 20:36:21 900

原创 Python与JSON数据处理全攻略

JSON作为轻量级数据交换格式,在Python中可通过json模块实现数据序列化与反序列化。文章介绍了JSON与Python的数据类型对应关系,以及json模块的dump/dumps/load/loads四个核心方法,演示了基本JSON操作、复杂类型处理、配置文件管理和API响应处理。针对性能问题,推荐使用ujson替代标准库,并详细讲解了pip工具安装管理三方库的方法,包括国内镜像源配置和常用命令。JSON因其跨平台、易读特性已成为异构系统数据交换的事实标准。

2025-06-28 00:06:57 831

原创 Python文件操作完全指南:从入门到精通

Python文件操作与异常处理摘要 本文介绍了Python文件系统的基本概念和操作方式。文件系统使用树形目录结构管理数据,Python通过open()函数进行文件操作,支持多种模式(r/w/a等)和编码方式。推荐使用with语句自动管理文件资源。文章演示了文件创建、读取、追加、搜索和备份等常见操作,并提供了完整的诗歌文件处理示例。同时讲解了Python异常处理机制,包括try-except结构、多种异常捕获以及else/finally用法。通过异常处理可以增强程序的健壮性,妥善应对运行时错误。

2025-06-27 00:13:27 823

原创 Python面向对象编程:解密类与对象

摘要:本文介绍了面向对象编程的核心概念与应用。首先阐述了类和对象的关系,强调类是抽象模板而对象是具体实例。通过Python代码示例展示了如何定义类、创建对象、使用方法和属性。重点讲解了封装、继承和多态三大特性,演示了静态方法、类方法的使用场景。最后通过银行账户管理系统案例,展示了如何运用OOP思想设计可扩展的系统,包括基类与子类的设计、方法重写以及属性控制等实践技巧。全文结合实例代码,系统性地呈现了面向对象编程的基本原理和实际应用。

2025-06-25 23:51:24 794

原创 Python函数实战:从基础到高级应用

本文介绍了Python函数的基本用法和高级特性:1. 函数定义:使用def关键字,包含参数列表、文档字符串和函数体;2. 参数类型:包括位置参数、关键字参数、默认参数、可变参数(args)和关键字可变参数(**kwargs);3. 特殊参数:强制位置参数(/)和命名关键字参数();4. 模块管理:使用import导入模块,通过模块别名简化调用;5. 内置函数:列举了abs、bin、input等常用内置函数;6. 实战案例:展示了随机验证码生成、素数判断、最大公约数和最小公倍数计算等实用函数示例。文章还介绍了

2025-06-22 22:35:56 952

原创 前端开发必备!30+优质组件库全推荐

前端开发常用组件库汇总 【移动端】TaroUI、uViewUI、CubeUI等覆盖多端开发需求; 【PC端】ElementUI、AntDesign、NaiveUI等提供丰富企业级组件; 【数据可视化】ECharts、Datav等构建专业数据大屏; 【动画】Swiper、Animate.css等实现流畅交互效果; 【编辑器】TinyMCE、vue-quill-editor满足富文本编辑需求; 【3D引擎】ThreeJS、BabylonJS支持Web3D开发。 各类组件库为不同场景开发提供完整解决方案,提升开发

2025-06-22 00:23:35 4134

原创 Python集合及字典全解析

集合是Python中的一种无序、可变、不重复元素的容器。Python字典是另一种可变容器模型,可存储任意类型对象。如字符串、数字、元组等其他容器模型

2025-06-22 00:09:50 405

原创 Python元组及字符串

Python中的元组和字符串都是重要的不可变序列类型。元组(tuple)是元素的有序集合,创建后不可修改,支持索引、切片和解包等操作,常用于函数返回值和参数传递。字符串是由字符组成的序列,提供了丰富的操作方法,包括大小写转换、查找替换、分割连接以及格式化等功能。两者都可通过索引访问元素,但字符串还支持编码转换等文本处理特性。元组适合存储固定数据,而字符串则专注于文本处理,它们的高效使用对Python编程至关重要。

2025-06-21 23:22:20 350

原创 Python列表操作全攻略

Python列表操作与超市管理系统实现 本文详细介绍了Python列表的基本操作和实际应用。主要内容包括: 列表的创建与基本操作:展示了空列表、包含元素的列表创建方式,以及索引访问、切片操作等方法 列表常用方法:涵盖append/extend/insert等添加元素方法,remove/pop等删除方法,以及排序、查找、统计等功能 实际应用案例:实现了一个超市库存管理系统,包含商品管理、库存操作、销售记录和数据分析四大模块 系统功能:支持商品增删改查、库存预警、销售统计、数据备份恢复等功能,并提供了完整的控制

2025-06-21 16:13:08 580

原创 Python-循环结构解析

循环结构是Python编程中的核心概念之一,它允许我们高效地重复执行代码块。本文将全面介绍Python中的循环结构及其实际应用,帮助读者掌握这一重要编程技能。

2025-06-19 23:14:55 1198

原创 Python运算符及分支结构全解析

Python 运算符与分支结构摘要: Python提供丰富的运算符(算术、比较、逻辑等)和灵活的分支结构(if-elif-else)。运算符包括索引/切片(text[1:4])、幂运算(2**3)、位运算(5&3)等。分支结构支持条件判断、嵌套和三元表达式。典型案例包括:BMI计算(if 18.5<=bmi<24)、温度转换(c=(f-32)/1.8)、闰年判断(year%4==0)、三角形验证(a+b>c)等。Python 3.10新增match-case多分支语法。通过合理运用

2025-06-18 23:03:30 1027

第十二届蓝桥杯省赛java.zip

第十二届蓝桥杯大赛软件赛省赛java

2021-04-18

空空如也

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

TA关注的人

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