自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(138)
  • 问答 (2)
  • 收藏
  • 关注

原创 【C++】轻量级消息队列项目V1

本文介绍了使用C++14和Muduo网络库实现轻量级消息队列系统RabbitMQ-Lite的过程。该系统实现了核心功能:支持DIRECT、FANOUT、TOPIC三种交换机类型,提供队列管理、消息发布订阅、消费者管理等功能,并基于SQLite3实现元数据持久化。系统采用Protobuf协议进行高效序列化,通过Muduo网络库实现高性能异步通信。文章详细阐述了系统架构设计,包括服务器端、客户端和公共模块的分层实现,并重点讲解了消息发布流程等核心功能的代码实现。该项目可作为理解消息队列底层原理的实践案例。

2025-12-14 17:44:32 941

原创 C/C++ 知识复习笔记

C/C++ 核心知识摘要

2025-07-14 12:54:19 1896

原创 【Linux第二章】Linux内核与权限

Linux内核与权限

2025-02-10 16:18:22 128533

原创 【数据结构】二叉树堆排序,TopK详解(第二章)

🎆前言🎆✨笔者也仅是大一萌新,写博客为了记录和巩固知识✨🥰赠人玫瑰,手留余香,欢迎各位读者进行交流和建议🥰🌹能与大家一起学习,一起进步是我的荣幸🌹🤞如果这篇文章有帮助到您,还请留个赞支持一下哦🤞🎃前情提要🎃🎁二叉树第一章——初识二叉树🎁🔎目录:🔎二叉树的顺序结构🔎堆的概念和结构🔎实现堆的方法⭐建堆的时间复杂度⭐函数声明⭐交换函数⭐打印函数⭐初始化⭐清空函数⭐插入函数⭐向上调整法⭐删除函数⭐向下调整法⭐根结点,树的大小,判空三合一🔎实现堆排序.

2022-04-15 14:15:30 1938 27

原创 【QT第六章】界面优化

Qt 到了界面优化这一章,重点就不再只是“控件能不能用”,而是开始进入“界面怎么更好看、更自然、更易维护”的层面。这里最容易出现的误区,是把QSSQPainter、图片类这些东西拆成零散工具去背:今天记住一个,明天记住几个选择器,后天再记几个drawRect(),结果真正做界面时还是容易混乱,不知道什么时候该用样式表,什么时候该改绘图代码,什么时候又要换图片类。Qt 的界面优化,本质上是在回答“已有控件如何美化”和“标准控件不够时如何自己画”这两个问题。前者更偏样式层,核心工具是QSS;

2026-04-12 19:42:44 361

原创 【QT第五章】系统相关

Qt 到了系统相关这一章,知识点会明显变杂:数据库事务、鼠标键盘事件、窗口事件、定时器、文件读写、QThread、线程同步、、多媒体……如果按接口名一个个去背,很容易觉得这是一大堆彼此无关的小模块;一个 Qt 程序到底怎样和“系统环境”发生交互。这种交互有很多方向:和数据库交互,要保证数据一致性;和用户输入交互,要接收鼠标、键盘和窗口事件;和时间交互,要靠定时器安排异步行为;和文件系统交互,要完成文本和二进制读写;和操作系统线程交互,要把耗时任务从 UI 线程中拆出去;和网络交互,要通过UDPTCP。

2026-04-12 19:41:49 417

原创 【C++第三十章】线程库

C++11的线程库并不只是“把系统线程 API 换了个写法”,而是在标准库层面,给并发编程提供了一套更统一、更可移植的抽象:线程怎么创建,如何等待结束,如何保护共享资源,线程之间怎么同步通知,哪些场景适合加锁,哪些场景更适合原子操作,甚至无锁结构为什么会碰到ABA这类更底层的问题,这些都被放进了同一套框架里。很多人在学线程库时,容易把threadmutexatomiclock_guard这些内容拆成独立知识点去记。这样虽然能记住接口名,但一到实际写代码时,还是容易混乱:为什么传锁给线程函数要加ref。

2026-04-12 19:39:46 1025

原创 【C++第二十九章】IO流

本文深入剖析了C++ IO流的设计思想与实现机制。文章从C语言输入输出函数引入,揭示C++将IO抽象为"流"模型的必要性,强调流的核心特征是有序连续性和方向性。通过分析标准输入输出流、文件流和字符串流的类体系,阐释了继承设计在统一接口中的作用。重点讲解了流状态与条件判断的关联机制、流操作符重载如何支持自定义类型,以及类型转换在流体系中的关键作用。最后探讨了C++流与C标准IO的兼容性问题,指出同步机制对性能的影响。全文以"数据流动"为主线,系统梳理了C++ IO流从抽

2026-04-11 22:15:51 404

原创 【C++第二十八章】单例模式

本文深入探讨了单例模式的核心约束与实现方式。单例模式不仅要确保类只有一个实例,还需提供全局访问入口,并通过私有构造函数、禁用拷贝构造和赋值运算符来保证唯一性。文章比较了饿汉模式(提前创建实例)和懒汉模式(延迟创建实例)的优缺点:饿汉模式实现简单但创建过早,可能影响启动速度;懒汉模式更灵活但需解决线程安全问题。此外,还分析了懒汉模式的资源释放问题,建议通过RAII技术确保析构时的业务收尾工作能正确执行。理解单例模式的关键在于把握唯一实例的创建时机、访问控制和生命周期管理。

2026-04-11 22:14:14 507

原创 【C++第二十七章】C++类型转换

但真正学这部分时,最容易出现的问题并不是“记不住名字”,而是明明知道每个转换长什么样,却不知道它们各自到底在保证什么、放弃了什么、又该在什么边界内使用。很多初学者会先从C风格强转开始,觉得(T)x写起来最省事;可一旦代码复杂起来,这种写法的问题就会越来越明显:你根本看不出这次转换到底是在做数值缩窄、去修饰、位级重解释,还是继承体系里的向下转型。也正因为如此,C++才把不同语义的转换拆成了不同关键字,让“你想做什么”能直接体现在代码里。所以,这一章最重要的主线并不是背四个。

2026-04-07 18:50:58 469

原创 【C++第二十六章】特殊类设计

本文探讨了C++中如何限制类对象的创建位置,实现"只能在堆上"或"只能在栈上"创建对象的设计方法。通过分析默认创建方式,指出对象位置由创建路径决定。针对"只能在堆上"的两种方案:析构函数私有化阻断栈对象自动销毁,或构造函数私有化配合工厂方法;而"只能在栈上"则需禁用new操作符并通过工厂返回对象值。文章强调这些设计本质是通过接口可见性和语义组合实现的约束,而非类的固有属性。虽然这类设计不常用,但能帮助深入理解C++对象模型、访问

2026-04-07 18:50:09 354

原创 【C++第二十五章】智能指针

智能指针是现代C++中实现RAII(资源获取即初始化)的重要工具,其核心思想是将资源生命周期与对象生命周期绑定,通过自动析构确保资源释放。文章系统分析了四种智能指针:auto_ptr因所有权转移语义反直觉已被淘汰;unique_ptr采用独占所有权,禁止拷贝但支持移动,简单高效;shared_ptr通过引用计数实现资源共享,但存在循环引用问题;weak_ptr作为观察者不增加引用计数,可解决循环引用。智能指针的本质不是语法糖,而是将资源管理从"手工控制"转变为"自动管理&quo

2026-04-05 22:10:33 468

原创 【C++第二十四章】异常

C++当函数已经无法在当前位置继续处理错误时,应该怎样把错误交给更高层、更合适的位置处理。如果只依赖返回值层层上报,那么调用链一长,代码就会迅速充满判断、转发和补救逻辑,业务主线也会被大量错误处理代码切碎。异常机制提供了另一种思路:在出错点直接throw,然后沿调用栈向外寻找能处理它的catch。这样,正常逻辑和错误处理逻辑就能在结构上分开,调用者也不需要在每一层都手动检查并转发错误码。但异常并不是只有优点。

2026-04-05 22:08:22 369

原创 【C++第二十三章】C++11

本文深入解析了C++11的核心特性及其现代编程理念。主要内容包括: 统一初始化方式:通过{}和initializer_list实现更一致的初始化语法 类型推导:auto简化变量声明,decltype提取表达式类型 移动语义:右值引用和std::move实现高效资源转移 其他重要特性:lambda表达式、可变参数模板等 C++11不仅增加了语法糖,更构建了一套完整的现代编程范式,使代码更简洁、高效且类型安全。这些特性相互配合,解决了传统C++在泛型编程、性能优化等方面的痛点,奠定了现代C++的基础。理解这些特

2026-04-04 21:41:23 859

原创 【C++第二十二章】哈希与散列

本文深入解析了哈希表的原理与实现,主要对比了有序容器(set/map)和无序哈希容器(unordered_set/unordered_map)的核心差异。文章首先指出哈希表的本质是通过映射快速定位,而非比较查找,这使得其平均性能更优。随后详细探讨了哈希函数设计、冲突处理方案(开放定址法和拉链法)及其工程实现考量,包括负载因子控制、扩容策略等关键问题。最后从C++封装角度,分析了如何设计通用的哈希表模板,支持不同类型键值的处理,特别强调了字符串等特殊类型的哈希处理方式。全文既阐述了哈希表的理论优势,也揭示了其

2026-04-04 21:40:18 355

原创 【C++第二十一章】set与map封装

本文深入探讨了C++中set和map的实现原理,揭示了它们本质上都是基于同一套红黑树框架的两种封装。文章首先分析了底层选择红黑树的原因在于其稳定的对数级时间复杂度,然后重点解析了二者的关键区别在于存储的值类型不同:set直接存储键值,而map存储键值对。文章还详细阐述了迭代器的实现难点在于中序遍历的定位逻辑,以及插入操作返回值的精心设计。通过从底层数据结构到上层封装的完整分析,展现了STL容器设计的精妙之处,为理解和使用这两种重要容器提供了深刻洞见。

2026-04-03 00:06:36 487

原创 【Linux第二十五章】高级IO

本文深入探讨了Linux网络编程中高级IO优化的核心问题与关键技术。首先指出IO的本质是"等待+拷贝",优化的关键在于减少无效等待时间。随后分析了五种IO模型(阻塞式、非阻塞轮询、信号驱动、多路复用和异步IO)的特点与适用场景,特别强调了多路复用技术的重要性。文章重点剖析了select、poll和epoll三种多路复用机制:select虽然经典但存在效率瓶颈;poll改进了select的部分问题但仍不够彻底;epoll则通过事件驱动和回调机制真正实现了高效IO管理。最后讨论了ET/LT触

2026-04-03 00:06:05 884

原创 【Linux第二十四章】IP协议

本文系统梳理了IP协议的核心机制与关键概念。IP协议作为网络层核心,主要负责数据包跨网络传输,其核心能力是解决"数据该往哪里走"的问题,而非保证可靠传输。文章首先明确了IP在协议栈中的定位,强调其与TCP/UDP的分工协作关系。随后详细解析了IP地址结构、报文头部字段设计原理、子网划分必要性、私有与公网IP区别,以及CIDR的现代地址管理方式。重点阐述了路由表工作机制,包括默认路由、特定网络路由和路由聚合等技术实现。全文以IP协议的"跨网络传输"核心功能为主线,将分散

2026-04-02 23:05:50 385

原创 【Linux第二十三章】传输层

学到网络时,很多人会把UDPTCP、滑动窗口、三次握手、四次挥手、拥塞控制这些概念分开背,但真正写网络程序时会发现:这些知识点其实都围绕同一个核心问题展开——传输层到底如何把应用层的数据,稳定、正确、尽可能高效地从一端交付到另一端。从这个角度看,传输层并不只是“在IP上面再包一层协议”那么简单。它既要解决端口寻址、报头与数据分离、缓冲区管理、报文排序这些基础问题,也要继续处理可靠性、流量控制、拥塞控制、异常断连和连接管理等一整套通信细节。

2026-04-02 23:05:16 426

原创 【Linux第二十二章】https

在学完HTTP之后,再看HTTPS如果HTTP明文传输,请求和响应在路上被别人看到、修改甚至伪造,会发生什么?答案就是:通信双方虽然“看起来”还在正常交互,但中间已经多了一个第三方。这个第三方既能偷看数据,也能篡改数据,甚至还能伪装成服务端或客户端继续和双方通信。这就是HTTPS要解决的根本问题。所以,HTTPS不是简单地给HTTP套上一层“加密外壳”,而是在HTTP与TCP之间加入了TLS/SSL安全层,用来解决机密性、完整性、身份可信性这三个核心问题。

2026-03-31 20:51:40 420

原创 【Linux第二十一章】http

HTTP协议本质上是应用层通信约定,通过结构化报文实现数据传输。它基于TCP协议,依靠序列化/反序列化处理数据边界问题。HTTP报文由请求行/状态行、头部字段、空行和正文组成,通过Content-Type区分资源类型。GET和POST是主要请求方法,前者通过URL传参,后者通过请求正文传输。虽然POST相对隐蔽,但安全性仍需依赖HTTPS加密。浏览器渲染的网页实质是服务器返回的资源,由浏览器根据数据类型解析呈现。

2026-03-31 20:51:08 479

原创 【Linux第二十章】socket

这篇文章系统性地梳理了socket网络编程的核心概念与实践要点。首先从socket的本质出发,指出它是操作系统提供给应用层的网络编程接口,遵循Unix"一切皆文件"的设计思想。文章重点对比了TCP和UDP协议的差异,强调TCP面向连接、保证可靠传输但开销较大,UDP无连接、实时性高但可靠性需应用层保证。 在网络字节序部分,解释了为何统一采用大端序来保证跨平台兼容性,并介绍了相关转换函数。对于地址处理,文章剖析了sockaddr结构的设计思路,说明其采用类似多态的方式支持多种地址族。最后详

2026-03-29 12:32:36 387

原创 【Linux第十九章】网络基础

本文系统梳理了计算机网络的核心概念与分层模型。作者首先指出网络协议的本质是解决异构设备间的可靠通信问题,强调分层协作的必要性。通过对比OSI理论模型与TCP/IP实际协议栈,阐释了网络设备(集线器、交换机、路由器)在不同层级的工作原理。重点分析了IP地址与MAC地址的差异:IP实现跨网络主机定位,MAC负责局域网逐跳交付。文章还详细说明了数据封装/解包过程、端口号的作用机制,最终建立起从物理层到应用层的完整认知框架,帮助读者理解网络协议与操作系统的协同关系。

2026-03-29 12:31:36 367

原创 【Linux第十八章】线程

线程

2026-03-28 20:09:39 868

原创 【Linux第十七章】信号

本文深入解析了Linux信号机制的核心概念与工作原理。信号是内核向进程发送的异步轻量通知,具有异步性、轻量化和内核主导递达三大特征。文章系统梳理了信号的四大来源:键盘终端输入、系统调用发送、硬件异常转译和定时器软件条件。重点剖析了信号在进程中的存储方式,包括pending(未决信号集)、block(信号屏蔽字)和handler(处理方式)三张表的关系,并区分了普通信号和实时信号的不同处理机制。最后强调信号递达时机通常发生在进程从内核态返回用户态时,这一机制实现了对进程行为的精确控制。全文将信号的生命周期串联

2026-03-28 20:02:50 188

原创 【Linux第十六章】进程间通信(匿名管道、命名管道)

本文深入解析了进程间通信(IPC)的核心机制。首先指出IPC的本质是通过操作系统共享资源实现进程协作,而非直接共享地址空间。然后详细介绍了四种主要IPC方式:匿名管道依赖fork继承文件描述符实现父子进程通信;命名管道通过文件系统路径实现无亲缘关系进程通信;共享内存通过映射同一物理内存实现最高效数据交换,但需额外同步机制;消息队列则在内核维护消息链表,支持按类型组织通信。文章强调理解IPC的关键在于区分用户态接口与内核态资源,并分析了各机制的特点、适用场景及典型问题。

2026-03-28 19:57:00 309

原创 【Linux第十五章】动静态库

本文深入解析了Linux/C++开发中的静态库(.a)与动态库(.so)的区别与使用。静态库是目标文件的归档,链接时被合并到可执行文件中;动态库则在运行时加载,需要位置无关代码(-fPIC)。文章详细介绍了库的构建过程、链接参数(-I/-L/-l)的作用、运行时动态库的查找机制(LD_LIBRARY_PATH/ldconfig),以及静态链接(-static)的特性。通过对比两种库的本质差异和适用场景,帮助开发者避免常见的使用误区,掌握库文件的规范制作和部署方法。

2026-03-28 19:46:19 176

原创 【Linux第十四章】文件系统

文件系统

2026-03-28 19:39:05 198

原创 【Linux第十三章】缓冲区

本文深入剖析了Linux系统编程中C标准库缓冲区的运行机制,揭示了printf与fork结合时输出翻倍现象的本质原因。关键点包括:1)缓冲区的三种刷新策略(无缓冲、行缓冲、全缓冲)及其应用场景;2)用户级缓冲区与内核缓冲区的区别,数据从用户态到内核态的流转过程;3)FILE结构体如何维护缓冲区;4)重点解释了fork写时拷贝导致输出翻倍的原理:全缓冲模式下数据滞留在用户缓冲区,fork后父子进程各自持有一份副本,退出时分别刷新。文章通过系统调用对比和时序图,帮助理解缓冲区在进程间通信和IO操作中的核心作用。

2026-03-28 19:09:34 234

原创 【Linux第十二章】FD文件

摘要: 本文深入剖析Linux文件描述符(FD)的底层机制,从磁盘文件到内存映射的转换逻辑出发,揭示标准库与系统调用的本质差异。通过解析进程控制块中的FD数组分配规则,阐明最小空闲原则和默认三大流(stdin/stdout/stderr)的设计原理。重点探讨VFS虚拟文件系统如何通过函数指针实现内核级多态,使同一套接口能操作磁盘、网络和外设。最后解密重定向本质——通过dup2系统调用修改FD数组指针指向,并解析"2>&1"等Shell命令的底层实现。全文结合内核数据结构和实

2026-03-28 19:01:27 249

原创 【QT第四章】QT窗口

Qt窗口系统核心要点解析 核心架构: QMainWindow包含五大组件:菜单栏(唯一)、工具栏(多个)、锚接部件(浮动窗口)、核心部件(必选)、状态栏。布局遵循严格层级,禁止直接添加布局。 关键组件实现: 菜单栏:通过QMenuBar/QMenu/QAction构建,注意避免.ui文件与代码重复创建导致内存泄漏 工具栏:支持停靠区域设置(setAllowedAreas)、浮动控制(setFloatable)和图标大小统一管理 状态栏:可嵌入任意QWidget(如QLabel、QProgressBar)

2026-03-13 17:24:30 493

原创 【QT第三章】常用控件2

本文深入探讨Qt框架在桌面应用开发中的核心技术,重点分析常用控件的底层逻辑与优化实践。主要内容包括:数字化显示控件(QLCDNumber、QProgressBar)的应用场景与线程安全机制;现代C++编译优化技巧(前置声明与模块化);文本交互控件(QLineEdit、QTextEdit)的输入验证与信号处理;组合框、微调框等控件的进阶用法;MVC架构在多元素控件中的实现原理;以及布局管理器在多分辨率适配中的关键作用。文章通过实际代码示例和性能优化建议,帮助开发者从初级应用迈向高级架构设计。

2026-03-13 16:55:36 413

原创 【Linux第十一章】进程等待和替换

本文深入解析Linux进程控制中的两大核心机制:进程等待与进程替换。在进程等待部分,详细剖析了waitpid函数的底层原理,包括status位图结构、阻塞与非阻塞等待的差异及其应用场景。进程替换部分则揭示了exec系列函数通过覆写物理内存实现"进程夺舍"的机制,对比分析了6种exec函数的特性与使用场景。文章还探讨了环境变量的继承机制,帮助开发者全面理解Linux进程管理的底层逻辑。通过结合内核源码分析,本文不仅提供API用法指导,更揭示了Linux调度与内存管理的本质原理。

2026-02-24 22:36:31 631

原创 【Linux第十章】进程控制

本文深入探讨了Linux进程控制的核心机制。首先剖析了写时拷贝(COW)技术,详细解释了其通过页表权限控制实现内存优化的原理。其次,阐述了进程退出码的作用机制及其与错误码的区别,并提供了查看退出码的实用命令。文章还分析了异常终止时的信号处理机制,解释了如何通过信号判断进程状态。最后总结了进程控制中常用的Linux命令,并回答了三个常见面试问题。全文揭示了Linux如何通过写时拷贝、退出码和信号机制实现高效的进程管理与资源控制。

2026-02-23 19:59:49 500

原创 【Linux第九章】程序地址空间

本文深入解析Linux程序地址空间的奥秘。进程虚拟地址空间是操作系统为进程构建的"虚拟视图",通过mm_struct划分区域,页表建立映射。关键点包括:1) 写实拷贝技术使父子进程共享数据时保持独立性;2) 地址总线决定寻址能力,32位系统为4GB;3) 页表实现虚拟到物理地址转换及权限控制;4) 缺页中断机制动态加载数据。这种抽象层解决了内存碎片、进程隔离等问题,极大提升了安全性和资源利用率。理解地址空间是掌握Linux内存管理的核心。

2026-02-23 19:25:47 533

原创 【Linux第八章】环境变量

Linux环境变量深度解析 环境变量是Linux系统中关键的全局配置参数,决定了系统运行环境和进程间通信。本文系统讲解了环境变量的核心原理、操作方法和编程实现: 核心概念 PATH/HOME等常用变量作用 PATH路径搜索机制(避免./执行的原理) 操作实践 env/export等命令详解 临时修改与永久配置方法(.bashrc等) 底层原理 环境变量表的内存结构(字符指针数组) 进程继承机制(bash→子进程的传递) 编程实现 main函数envp参数 extern char **environ gete

2026-02-23 18:56:38 669

原创 【Linux第七章】进程切换和命令行参数

本文深入剖析了Linux进程切换、调度算法和命令行参数的底层机制。首先解释了进程切换中的硬件上下文保存与恢复原理,介绍了TSS结构的关键作用。其次对比了实时与分时操作系统的差异,详细讲解了Linux O(1)调度算法的双阵列优先级队列设计,通过位图实现高效调度。最后解析了命令行参数传递机制,展示了main函数如何接收并处理参数。文章还提供了常用进程管理命令和面试高频问题解答,帮助读者全面理解Linux进程调度的核心原理和实际应用。

2026-02-23 18:13:49 643

原创 【Linux第六章】进程状态和优先级

本文深入解析Linux进程管理的核心机制,重点阐述进程状态、优先级调度及资源管理原理。首先揭示进程状态本质是PCB在不同内核队列间的迁移,详细对比阻塞与挂起两种资源管理机制的区别。然后剖析Linux内核中的五种进程状态(R/S/D/T/Z)及其转换逻辑,包括孤儿进程处理方式。在优先级部分,讲解PRI与NI的计算关系(PRI=80+NI)及其设计考量。最后提供实用命令集和面试高频问题解答,帮助开发者理解进程生命周期、避免僵尸进程等问题,为编写高效并发程序奠定理论基础。

2026-02-23 17:55:41 1008

原创 【QT第三章】常用控件1

本文摘要: Qt控件是构建GUI界面的核心组件,其体系基于QWidget基类,通过对象树机制管理生命周期。核心特性包括: 控件分类与继承关系 外观优化方法(QSS、设计工具) 坐标系规则(geometry与frameGeometry区别) 常用属性与API: 启用状态(setEnabled) 几何属性(setGeometry) 透明度(windowOpacity) 光标(setCursor) 开发建议:使用语义化objectName、注意浮点数精度问题、掌握QRect/QPoint几何对象使用

2025-11-06 17:33:50 961

原创 【QT第二章】信号与槽

【Qt信号与槽机制摘要】 Qt的信号与槽机制是其GUI开发的核心通信方式,实现了组件间的解耦。信号由事件触发(如按钮点击),槽函数负责处理逻辑。通过QObject::connect()静态函数关联信号与槽,Qt5推荐使用函数指针语法而非Qt4的宏语法。自定义槽函数可以是普通成员函数,参数需与信号匹配;自定义信号则需声明在signals区域,仅声明不实现。机制支持自动关联(命名规范)和手动连接两种方式,适用于各类用户交互场景,是Qt实现事件驱动编程的关键设计。

2025-09-28 18:31:43 1123

空空如也

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

TA关注的人

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