自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 C++ 关于继承的知识点讲解

继承是面向对象编程中实现代码复用的核心机制,通过派生类继承基类的成员,避免重复定义。基类的公有和保护成员可被派生类访问,私有成员不可见但被继承。继承方式(public、protected、private)影响成员访问权限,通常使用public继承。派生类默认成员函数需调用基类对应函数,析构顺序为先派生后基类。继承存在作用域隐藏、菱形继承导致的数据冗余与二义性问题,可通过虚继承解决。相比继承,组合(has-a)耦合度更低,更推荐优先使用。多继承虽存在复杂性,但在特定场景下仍具价值。

2026-09-23 17:00:00 346

原创 C++ 哈希表实现

摘要: 本文系统介绍了哈希表的核心概念与实现方法。首先阐述了哈希的基本原理和直接定址法,指出其适用范围与局限性。重点讨论了哈希冲突问题,提出负载因子的概念及其对性能的影响。详细分析了除留余数法等哈希函数设计原则,并比较了开放定址法(线性探测、二次探测)与链地址法两种冲突解决策略。通过代码示例展示了两种方法的实现细节,包括扩容机制、状态管理和字符串特化处理。最后指出链地址法的实践优势,并提及Java 8中链表转红黑树的优化思路,为高效哈希表设计提供了完整的技术方案。

2026-09-15 20:48:51 180

原创 MySQL 表的内连和外连

MySQL连接类型包括内连接和外连接。内连接(INNER JOIN)仅返回两表中匹配条件的行,是开发中最常用的查询方式。外连接分为左外连接(LEFT JOIN,返回左表全部行)和右外连接(RIGHT JOIN,返回右表全部行),不匹配时用NULL填充。MySQL不支持全外连接(FULL JOIN)。示例展示了如何查询学生成绩(包含无成绩学生)和部门员工信息(包含无员工部门)。左连接以左表为主,右连接以右表为主,两者可互相转换实现相同效果。

2026-09-10 23:16:04 231

原创 MySQL 复合查询

本文介绍了SQL查询的进阶操作,主要包括多表查询、自连接和子查询技术。首先回顾了基本查询操作,然后重点讲解了多表联合查询的方法,包括显示员工信息及其部门名称等案例。在自连接部分,演示了如何通过表别名实现同一表内的连接查询。子查询部分详细介绍了单行子查询、多行子查询(使用IN、ALL、ANY关键字)、多列子查询以及在FROM子句中使用子查询的技巧。最后讲解了合并查询操作符UNION和UNION ALL的使用区别。文章通过大量实例展示了如何在EMP、DEPT和SALGRADE三张表之间进行复杂查询操作。

2026-08-21 19:00:00 405

原创 Git分支管理

本文详细介绍了Git分支管理的核心概念与操作流程。主要内容包括:1. 分支基础概念和HEAD指针原理;2. 分支创建、切换、合并与删除操作;3. 处理合并冲突的方法及解决步骤;4. 分支管理策略;5. 实用技巧:使用stash暂存工作现场、bug分支处理流程;6. 强制删除未合并分支的方法。文章通过具体命令行示例和状态图示,展示了Git分支在并行开发中的灵活性和安全性,强调分支在团队协作中的重要性,既能保证主分支稳定,又能支持多任务并行开发。

2026-08-17 17:04:00 214

原创 MySQL 内置函数

本文摘要:文章介绍了MySQL中常用的日期、字符串、数学及其他函数的使用方法。日期函数包括获取年月日、时分秒、时间戳,以及日期加减和日期差计算。字符串函数演示了字符集查询、字符串拼接、长度计算、替换和截取等操作。数学函数涵盖绝对值、取整、小数格式化和随机数。其他实用函数包括用户查询、MD5加密、当前数据库和空值处理。文中通过具体SQL示例展示了这些函数在实际数据库操作中的应用场景。

2026-08-08 22:54:51 25

原创 MySQL基本查询(下)

本文介绍了MySQL数据库的更新、删除、插入结果查询及聚合函数等操作。主要内容包括:1. UPDATE语句用法,通过具体示例演示了单列/多列更新、基于原值的数学运算更新等操作;2. DELETE语句用法,展示了删除指定数据及整表数据的操作,并与TRUNCATE进行了比较;3. 插入结果查询示例,通过创建临时表实现去重操作;4. 聚合函数COUNT、SUM、AVG等的使用场景和语法;5. GROUP BY子句的分组查询应用,包括多字段分组和HAVING条件筛选。文章通过实际数据表操作演示了各项功能的实现过程.

2026-08-03 21:53:12 191

原创 MySQL基本查询(上)

本文介绍了MySQL中表的CRUD操作,重点讲解了SELECT查询语句的使用方法、 SELECT查询的多种用法、结果排序的基础语法和使用场景。文章通过学生成绩表等示例,详细说明了各种查询条件的组合使用,包括范围查询、模糊匹配、多条件联合查询等常见操作,并解释了NULL值在比较运算中的特殊处理规则。

2026-07-27 16:10:33 218

原创 Linux--线程控制

本文介绍了POSIX线程库的基本使用方法和线程控制技术。主要内容包括:线程创建和终止的三种方式;线程等待和资源释放;线程ID的概念及其在进程地址空间中的布局;通过C++封装线程类实现更便捷的线程管理。文章还提供了详细的代码示例,演示了线程创建、终止、等待等操作,并比较了pthread_self()获取的线程ID与内核LWP线程ID的区别。最后展示了如何利用C++的function和bind机制封装可复用的线程类,支持设置线程名称等高级特性。

2026-07-21 18:00:00 198 1

原创 C++ 模板进阶

本文介绍了C++模板编程中的几个核心概念:1. 非类型模板参数,即以常量作为模板参数,需在编译时确定;2. 模板特化,包括函数模板特化和类模板特化(全特化与偏特化),用于处理特殊类型的特殊情况;3. 模板分离编译的问题及解决方案,建议将声明和定义放在同一文件中;4. 模板的优缺点,优点是代码复用和灵活性,缺点是可能导致代码膨胀和编译错误难以定位。通过具体代码示例说明了关键概念的应用场景和实现方式。

2026-07-19 12:51:55 209

原创 Linux线程概念

本文围绕Linux线程与内存管理展开,核心在于阐明线程的本质、优缺点及其与进程的差异,并深入底层存储机制。文章通过分页式存储管理(包括虚拟地址、页表及二级页目录结构)解释其独立访问内存的硬件基础,同时提及缺页异常含义。文章对比了进程与线程的资源共享(如地址空间、文件描述符)与独占部分(如栈、寄存器),总结出线程具有创建快、切换开销小等优点,但也存在同步复杂、健壮性差等缺点,并探讨了线程异常对进程的影响及主要应用场景,最终通过一系列问题深化对两者关系的理解。

2026-07-12 12:12:28 296

原创 MySQL表的约束

文章摘要:本文详细介绍了MySQL中常用的表约束类型,包括空属性、默认值、列描述、零填充、主键、自增长、唯一键和外键。通过具体案例演示了每种约束的创建和使用方法,解释了它们在保证数据完整性和业务逻辑正确性方面的重要作用。特别强调了主键与唯一键的区别、自增长属性的特点以及外键约束的业务价值。最后通过一个综合性的商店管理系统案例,展示了如何在实际应用中综合运用多种约束来设计规范的数据库表结构。

2026-07-09 16:52:04 180

原创 MySQL表的操作

本文介绍了MySQL表的基本操作:1. 创建表 - 使用CREATE TABLE语法定义表结构,可指定字符集、校验规则和存储引擎。2. 表操作示例 - 以users表示范如何创建包含不同数据类型字段的表。3. 查看结构 - 使用DESC命令查看表字段信息。4. 修改表 - 包括添加/修改/删除字段、重命名字段和表名等操作。5. 删除表 - 使用DROP TABLE命令删除表。文章通过具体SQL示例演示了每种操作的实际应用,并强调了修改表结构时的注意事项。

2026-07-05 22:43:55 170

原创 MySQL数据库基础与操作

本文介绍了MySQL数据库的基础知识和操作指南。主要内容包括:1.数据库基本使用,包括连接服务器、服务管理、创建数据库/表/插入数据等基础操作;2.MySQL架构特点和SQL分类(DDL、DML、DCL);3.存储引擎的作用及查看方法;4.库的详细操作,包括创建/修改/删除数据库,字符集和校验规则设置,以及数据库的备份与恢复方法;5.数据库连接状态查看。文章通过具体SQL示例演示了各项操作,并解释了相关概念和注意事项,为MySQL初学者提供了全面的入门指导。

2026-07-02 11:57:34 188

原创 Linux--进程间通信

本文系统介绍了Linux系统下的进程间通信机制,重点分析了管道和共享内存两种方式。 文中通过多个完整代码示例(如文件拷贝、客户端/服务器通信)演示了这些IPC机制的实际应用,并比较了它们的特性差异,为开发者选择合适的进程间通信方式提供了实践指导。

2026-06-26 15:12:22 216

原创 Linux--库的制作与原理

《C语言静态库与动态库使用指南》 本文详细介绍了Linux系统中静态库(.a)和动态库(.so)的创建与使用方法。静态库在编译时链接到可执行文件中,通过ar工具生成;动态库则在程序运行时加载,需使用gcc的-fPIC和-shared选项编译。文章通过mystdio/mystring示例库演示了从源代码编译、打包到使用的完整流程,特别针对动态库运行时路径问题提供了4种解决方案:系统路径安装、软链接、LD_LIBRARY_PATH环境变量配置及ldconfg配置更新。

2026-06-22 21:19:08 239

原创 C++ 初谈模板

摘要:本文介绍了C++中的函数模板和类模板。函数模板通过参数化类型实现代码复用,编译器根据实参类型生成具体函数版本,包括隐式和显式实例化方式。类模板定义格式类似,但需要显式实例化指定具体类型。模板匹配原则优先非模板函数,且不允许自动类型转换。类模板实例化后才是真正的类类型,如Stack<int>表示整型栈类。模板将重复工作交给编译器处理,提高了代码的通用性和复用性。

2026-06-19 22:04:35 162

原创 Linux--基础IO(二)

摘要: 本文探讨了Linux“一切皆文件”的设计理念,通过struct file和file_operations结构体实现统一操作接口,使硬件、进程等资源均可通过文件API访问。重点分析了缓冲区的机制与作用,包括全缓冲、行缓冲和无缓冲三种类型,解释了缓冲区减少系统调用、提升效率的原理。此外,通过自定义MyFile结构体模拟C标准库的FILE实现,展示了缓冲区管理的核心逻辑,并验证了重定向时缓冲策略的影响(如fork导致的多次输出)。最后,设计了一个简化版libc库,演示了文件操作与缓冲区的底层关联。

2026-06-13 08:10:27 258

原创 Linux--基础IO(一)

本文系统介绍了Linux文件操作的核心概念和实现方法。首先从文件定义出发,阐述狭义(磁盘存储)和广义(一切皆文件)的理解,指出文件操作本质是对文件属性和内容的操作。然后详细解析C语言文件接口(fopen/fwrite/fread等)的使用方法和实现原理,包括标准输入输出流、文件描述符等概念。重点讲解了系统级文件IO接口(open/read/write/close)及底层机制,深入分析文件描述符分配规则和重定向原理(dup2系统调用)。文章中带大量代码示例展示了文件操作的实现细节

2026-06-08 11:03:00 196

原创 C/C++内存管理

本文对比C/C++内存管理机制。先介绍程序内存分布,然后讲解C语言的malloc/calloc/realloc/free函数及其区别与实现原理。接着深入C++的new/delete操作符,分析它们在处理内置类型和自定义类型时的不同行为,引出operator new与operator delete函数。核心在于剖析实现原理:new先分配内存再调用构造函数,delete先析构再释放内存。最后总结了其关键区别:这是面向对象内存管理的核心差异

2026-06-04 16:28:34 168

原创 Git基本操作详解

本文详细介绍了Git的安装与基本操作。主要内容包括:1. Git安装方法 2. Git基本操作:创建仓库、配置用户信息、理解工作区/暂存区/版本库 3. 文件管理:添加、修改、删除文件的操作流程 4. 版本控制:查看修改记录、版本回退 5. 撤销修改:针对不同场景的撤销方法 6. 删除文件:从工作区和版本库中彻底删除文件 文章通过具体命令示例,展示了Git的核心功能,包括版本回退、修改撤销等实用技巧,并解释了.git目录结构及其作用。适合Git初学者系统学习版本控制的基本操作。

2026-05-25 17:04:12 338

原创 C++ 日期类的实现

本文展示了C++日期类的实现,包含三个文件:Date.h头文件定义Date类及其成员函数,Date.cpp实现具体功能,test.cpp进行测试。Date类支持日期比较、加减运算、输入输出等操作,通过运算符重载实现日期计算功能。关键实现包括:日期合法性检查、获取月份天数、各种运算符重载(比较、加减、自增自减等)以及流操作符重载。测试代码验证了日期运算、输入输出和地址运算符重载等功能。

2026-05-17 19:41:45 402

原创 数据结构--并查集

并查集是一种用于处理不相交集合的数据结构,支持查找、合并和判断集合关系等操作。本文通过学生分组示例说明并查集的工作原理:初始时每个元素自成一个集合,通过数组存储集合关系(负数表示根节点及其元素个数)。核心操作包括查找根节点、合并集合和路径压缩优化。代码实现展示了UnionFindSet类,包含Union、FindRoot、InSet等方法,其中FindRoot采用路径压缩提高效率,Union按集合大小合并优化性能。并查集适用于需要频繁查询和合并集合的场景,如社交网络中的好友关系处理。

2026-05-05 15:52:56 282

原创 C++ 类和对象(三)

本文主要介绍了C++面向对象编程中的几个重要概念: 构造函数补充:详细讲解了初始化列表的使用方法、注意事项以及与缺省值的配合使用; 类型转换:介绍了内置类型与类类型之间的隐式转换规则及explicit关键字的作用; static成员:说明静态成员变量和静态成员函数的特性及使用方法; 友元机制:阐述了友元函数和友元类的概念及其突破封装限制的特性; 内部类:解释内部类的定义、特性以及与外部类的关系; 匿名对象:介绍匿名对象的定义方式及其生命周期特点。文中还穿插了两个求1+2+...+n的算法实现示例

2026-04-27 15:28:24 400

原创 C++ 类和对象(二)

本文摘要:C++类中的默认成员函数包括构造函数、析构函数、拷贝构造函数、赋值运算符重载和取地址运算符重载。其中前四个最为重要。构造函数用于初始化对象,析构函数负责资源清理,拷贝构造函数处理对象拷贝,赋值运算符重载实现对象间赋值。这些函数若未显式定义,编译器会自动生成默认版本。对于包含资源管理的类(如动态内存),通常需要自定义这些函数。运算符重载允许自定义类类型对象的运算行为,const成员函数可保护对象不被修改。取地址运算符重载一般不需自定义。

2026-04-10 13:50:47 400

原创 Linux--进程控制

本文摘要:本文系统介绍了Linux进程管理的核心概念与技术,包括进程创建、进程终止、进程等待以及进程程序替换。通过详细分析fork函数的工作原理、进程退出码机制、父子进程通信方式,阐述了Linux进程管理的实现原理。文章还提供了一个自主实现的Shell解释器示例,展示了如何结合这些技术构建命令行解释器,包括命令解析、环境变量管理、内置命令处理和执行外部程序等功能。最后通过函数与进程的类比,总结了Linux进程间通信的基本模式。

2026-03-02 17:42:49 555

原创 C++ 类和对象(一)

本文介绍了C++类的核心概念,包括:1. 类定义格式、访问限定符(public/private)和类域作用域;2. 对象实例化过程及内存对齐规则;3. this指针的工作原理及其在成员函数调用中的作用;4. 通过栈的实现对比了C++面向对象与C语言面向过程的差异。重点阐述了C++通过类实现的封装特性,包括数据与方法的绑定、访问控制机制,以及this指针如何隐式传递对象地址。文章还通过测试题分析了空指针调用成员函数的行为差异,并指出成员函数存储在代码段而非对象中的内存优化设计。

2026-02-22 15:00:00 642

原创 数据结构--排序

本文系统介绍了常见排序算法及其实现。主要内容包括:1. 排序概念及应用场景;2. 主要排序算法实现:插入排序(直接插入、希尔)、选择排序(直接选择、堆)、交换排序(冒泡、快速)、归并非比较排序(计数)等;3. 算法特性分析:时间复杂度、空间复杂度及稳定性。重点阐述了快速排序的4种实现方法(hoare、挖坑、前后指针、非递归)及优化策略。最后对比分析了各算法的复杂度,其中快速排序和归并排序的时间复杂度最优为O(NlogN)。本文可作为排序算法的系统学习资料。

2026-02-17 22:56:54 916

原创 Linux基础开发工具--编译器gcc/g++

本文介绍了GCC编译器的完整编译过程及常用选项。主要包括四个阶段:预处理(-E)、编译(-S)、汇编(-c)和链接(-o),详细说明了各阶段的功能和转换过程。同时对比分析了静态链接与动态链接的区别,以及静态库(.a)和动态库(.so)的特点。文章还列举了GCC的其他常用选项,如生成调试信息(-g)、优化选项(-O0到-O3)、警告控制(-w/-Wall)等,为开发者提供了全面的GCC使用指南。

2026-02-10 13:13:18 614

原创 c++入门基础

本文介绍了C++基础语法特性,包括:1. 命名空间,用于解决命名冲突问题,支持嵌套定义和三种访问方式;2. C++输入输出流,比C语言的printf/scanf更智能;3. 缺省参数(默认参数)分为全缺省和半缺省;4. 函数重载;5. 引用(reference)作为变量别名,常用于传参和返回值优化;6. 内联函数(inline)替代宏函数,减少函数调用开销;7. nullptr关键字解决NULL在指针和整型之间的歧义问题。这些特性使C++在保持C语言兼容性的同时,提供了更安全高效的编程方式。

2026-02-03 22:53:24 604

原创 数据结构--链式结构二叉树

本文介绍了二叉树的存储结构和相关操作。首先阐述了二叉树的两种存储方式:顺序存储适合完全二叉树,链式存储通过左右指针连接节点。然后详细讲解了链式二叉树的实现方法,包括节点定义和创建过程。重点分析了二叉树的前序、中序和后序遍历规则,并给出递归实现代码。此外还介绍了计算节点个数、叶子节点个数、树高度等常见操作,以及层序遍历的实现方法。最后讨论了如何判断完全二叉树,通过队列实现层序遍历并进行空节点检测来完成判断。全文通过代码示例和图解详细说明了二叉树的各种操作实现。

2026-02-01 15:49:45 623

原创 Linux基础开发工具--yum和vim

本文介绍了Linux系统下的软件包管理器和Vim编辑器使用指南。软件包管理器部分详细讲解了yum/apt的基本操作,包括查看、安装、卸载软件包的方法及注意事项,并解释了软件源配置。Vim编辑器部分系统阐述了三种基本模式(命令、插入、底行)及其切换方式,重点讲解了命令模式下的光标移动、文本操作、复制粘贴等核心功能,以及底行模式的文件操作、搜索替换等实用技巧,还介绍了视图模式的批量操作。文章内容详实,涵盖了Linux系统管理和文本编辑的基础知识,适合初学者系统学习。

2026-01-28 16:54:31 809

原创 数据结构--顺序结构二叉树(堆)

本文系统介绍了二叉树及其应用。首先阐述了二叉树的基本概念、特殊类型(满二叉树、完全二叉树)和性质,详细分析了顺序存储和链式存储两种结构。重点讲解了堆的实现,包括插入、删除操作的向上/向下调整算法,并提供了完整的堆操作代码实现。最后探讨了堆的两个重要应用:堆排序(时间复杂度O(N*logN))和Top-K问题解决方案。通过理论讲解和代码示例相结合的方式,全面展示了二叉树在数据结构中的核心地位和实际应用价值。

2026-01-24 11:22:32 601

原创 数据结构--栈和队列

本文介绍了栈和队列两种数据结构的概念与实现方法。栈采用LIFO原则,通过数组实现,包含初始化、压栈、出栈等操作;队列遵循FIFO原则,使用链表实现,支持入队、出队等功能。文中详细展示了两种数据结构在C语言中的具体实现代码(包括头文件和源文件),并比较了不同实现方式的优劣。特别强调了栈顶指针设计的两种方案差异,以及队列实现时如何通过结构体封装简化二级指针的使用。两种数据结构都提供了完整的初始化、销毁、插入、删除等基本操作接口。

2026-01-21 21:35:22 1165

原创 Linux权限的概念

本文摘要:文章首先介绍了Shell命令及其运行原理,说明Shell作为用户与Linux内核交互的桥梁作用。接着详细讲解了Linux权限管理,包括用户分类、文件访问者角色和基本权限。重点阐述了文件权限设置方法:chmod的字符表示法(如u+r)和八进制表示法(如664),以及chown/chgrp修改文件属主和属组。还介绍了umask掩码对默认权限的影响,并特别说明目录权限的特殊性。最后通过粘滞位(t)解决目录中文件删除权限问题,强调权限管理的精细控制对系统安全的重要性。

2026-01-19 11:23:54 659

原创 数据结构--双向链表

本文详细介绍了双向链表的实现过程。主要内容包括:1.双向链表采用带头节点(哨兵位)结构,哨兵位不存储有效数据但能防止遍历死循环;2.详细展示了List.h头文件和List.c源文件的实现,包含节点结构定义及初始化、插入(尾插/头插/指定位置后插)、删除(尾删/头删/指定节点删)等核心操作;3.通过test.c测试文件验证了各功能的正确性。代码分析部分着重讲解了初始化、打印及各操作的具体实现逻辑,体现了双向链表相比单链表在操作上的灵活性。

2026-01-16 13:45:00 723

原创 Linux基本指令(2)

本文总结了16个常用Linux命令及其用法:1.文件查看类:more/less、head/tail、grep 2.时间日历类:date、cal 3.文件操作类:find、zip/unzip、tar、rz/sz 4.系统信息类:which/whereis、uname、top 5.其他工具:alias、bc 重点命令包括less(强大分页查看)、tar(重要打包工具)、grep(文本搜索)等,涵盖了文件处理、系统管理和日常运维的常用操作。

2026-01-13 22:26:22 764

原创 数据结构-单链表

本文介绍了链表的基本概念和单链表的实现。链表是一种非连续、非顺序的存储结构,通过指针链接实现数据元素的逻辑顺序。文中用火车车厢类比链表节点,每个节点包含数据和指向下个节点的指针。详细阐述了单链表的实现过程,包括节点结构体定义、创建、销毁及各种操作(打印、头插尾插、头删尾删、查找、指定位置插入删除等)。通过C语言代码展示了单链表的具体实现,包括SList.h头文件定义、SList.c源文件实现和test.c测试文件。测试案例验证了链表各功能的正确性,为理解链表数据结构提供了实践参考。

2026-01-11 13:32:59 689

原创 Linux基本指令(1)

本文摘要: 本文系统介绍了Linux常用基础命令及用法,包括:1.ls命令(列出目录内容,含多种选项参数);2.pwd(显示当前目录);3.cd(切换目录,讲解绝对/相对路径);4.touch(创建文件);5.mkdir(创建目录);6.rmdir/rm(删除空目录/文件目录);7.man(查看命令手册);8.cp(复制文件目录);9.mv(移动/重命名文件);10.cat(查看文件内容)。每个命令详细说明了语法、功能、常用选项和具体示例,帮助用户掌握Linux基础文件操作。

2026-01-09 20:40:29 829

原创 基于顺序表实现通讯录项目

本文实现了一个基于顺序表的通讯录管理系统。系统分为顺序表模块(SeqList)和通讯录模块(Contact),通过typedef将顺序表重命名为通讯录。主要功能包括:初始化/销毁通讯录、添加/删除联系人、修改联系人信息、查找联系人以及展示通讯录。顺序表采用动态内存管理,自动扩容机制确保存储空间充足。通讯录记录包含姓名、性别、年龄、电话和地址信息。通过菜单界面提供用户交互,实现了完整的CRUD操作。关键技术点包括:动态数组管理、数据结构封装、模块化设计以及避免头文件循环包含问题。测试用例验证了各功能的正确性。

2026-01-08 21:00:00 258

空空如也

空空如也

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

TA关注的人

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