自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java轻量级权限系统天梯(Tianti)实战指南

在当今数字化时代,信息安全已经成为企业和个人用户最为关注的问题之一。访问控制作为信息安全管理的核心环节,是确保数据安全、防止未授权访问和维护系统完整性的关键手段。通过实施访问控制,系统能够实现以下目标:保护隐私和机密信息:防止未授权用户访问敏感数据。维持系统完整性:确保数据未被未授权修改或破坏。合规性要求:满足不同行业和地区的法律和政策对数据安全的要求。防止恶意软件和攻击:限制非可信用户对系统和网络的访问。

2025-06-11 16:43:05 516

原创 Android 竖直轮播实现详解与案例

在Android开发中,XML数据绑定框架是一个强大的工具,它允许开发者将XML布局文件中的UI组件与数据模型直接绑定。这样的绑定简化了数据更新流程,自动将数据变更反映到UI上,提高了开发效率并减少了代码冗余。实现数据绑定的步骤如下:启用数据绑定:在项目的build.gradle文件中启用数据绑定。绑定布局:创建XML布局文件,并使用<layout>标签来包裹布局。使用变量:在布局文件中定义变量,这些变量可以是数据模型的实例。绑定数据。

2025-06-11 15:26:04 460

原创 VC++串口调试助手:学习与实践

串口通信是一种广泛使用的硬件通信接口,它允许计算机与外部设备(如传感器、调制解调器等)进行数据交换。在Windows平台上,VC++环境下实现串口通信主要依赖于WinAPI(Windows Application Programming Interface)提供的串口操作函数和MFC(Microsoft Foundation Classes)类库封装的相关功能。数据包格式是通信双方约定的一种数据封装方式,它决定了数据的接收和解析方式。

2025-06-11 14:56:12 534

原创 Scrapy爬虫框架必备库文件安装指南

Scrapy是一个开源且协作式的框架,它用于抓取网站并从页面中提取结构化的数据,广泛应用于数据挖掘、信息处理或历史归档等任务。它被设计用于快速、高层次的数据抓取,具有高度扩展性和模块化。在理解Scrapy之前,我们需要了解其背后的几个关键概念和组件:中间件(Middleware): 中间件允许开发者插入自定义的代码到Scrapy处理请求和响应的流程中,是扩展Scrapy功能的强大工具。管道(Pipeline)

2025-06-11 14:50:28 479

原创 深入理解冒泡排序及其C++实现

C++是一种静态类型、编译式、通用编程语言。它具有面向对象编程的特性,包括类、封装、继承、多态等。C++也支持过程式编程以及泛型编程。数据类型和变量C++提供了多种数据类型,如整型、浮点型、字符型等。变量是存储这些类型值的命名位置。int i = 10;// 整型变量// 浮点型变量// 字符型变量控制结构控制结构用来决定程序执行的路径,包括条件语句和循环语句。// 条件语句// 条件为真时的代码} else {// 条件为假时的代码// 循环语句i < 10;

2025-06-11 13:59:14 724

原创 全面解析Windows下的协程实现技术:从Fiber到汇编

协程是计算机程序的一段代码,它由程序中的其他代码段在特定条件下调用执行。与线程相比,协程不依赖于系统内核,而是由程序自己进行调度,所以在进行I/O操作或者进行某些计算时可以由用户主动让出控制权,从而让其他协程得到执行的机会,提升了程序的并发性和性能。libco 是一个专注于协程调度和管理的C语言库,它提供了一套轻量级的并发模型,能够在多核或多线程环境下有效地进行任务调度。libco 的设计理念是让程序的执行能够更加贴近程序逻辑的自然流程,而非被传统多线程模型中的线程创建和销毁、同步和互斥等问题困扰。

2025-06-11 11:40:34 378

原创 ESP8266 测试板原理图与PCB设计资源

ESP8266 Wi-Fi微控制器是Espressif Systems开发的一款高度集成的低功耗Wi-Fi芯片,具有完整的TCP/IP协议栈和微型处理器功能。它的推出,不仅为物联网(IoT)设备提供了低成本、低功耗的连接解决方案,而且其丰富的开发资源和强大的处理能力也吸引了一大批开发者和制造商的关注。ESP8266拥有不同的模块和开发板形式,常见的有ESP-01、ESP-12等系列,提供了不同的封装和I/O接口,使开发者可以根据项目需求进行选择。它的主要特点包括:Wi-Fi兼容性。

2025-06-11 11:06:11 480

原创 UFT 12自动化测试完全指南:使用文档及教程

QTP/UFT 12,即Quick Test Professional/Unified Functional Testing,是HP公司推出的一款主流自动化测试工具,经历了多次迭代更新后,以其强大的功能和友好的用户界面,成为自动化测试领域的佼佼者。QTP/UFT 12定位为支持敏捷开发和持续集成的高效自动化测试解决方案,它可以自动化测试Web、移动以及桌面应用。

2025-06-11 11:06:10 569

原创 WebUploader文件上传组件全面解析与应用

在现代Web应用中,文件上传组件是不可或缺的功能之一。它允许用户上传图片、文档、视频等多媒体资源,对于实现表单数据提交、数据共享和内容管理至关重要。文件上传组件不仅需要满足基本的上传需求,还应提供良好的用户体验和高效的性能。WebUploader 提供了多种方式来展示上传进度,包括百分比、进度条、时间估计等。在UI方面,开发者可以完全自定义进度显示的样式,以适应不同的网页设计。进度信息是通过onProgress事件来传递的,开发者可以监听这个事件,并获取当前文件的上传进度,然后更新到界面上。

2025-06-11 10:03:42 540

原创 交互式Bootstrap后台管理模板设计实战

Bootstrap是一个开源的前端框架,主要用于快速开发响应式布局和移动优先的网站。它提供了一套HTML、CSS和JavaScript组件,可以帮助开发者快速完成界面的搭建和样式的设计。Bootstrap的核心特性包括栅格系统、表单控件、按钮组和导航等组件,它们都内置了响应式功能,确保在不同设备上的兼容性和一致性。在构建一个现代化的后台管理系统时,核心功能的选择和界面布局的设计至关重要。在“Notebook_admin”模板中,我们专注于提供直观的界面和流畅的用户体验。

2025-06-11 09:49:44 421

原创 Vue.js中假数据传递与HTTP请求处理实战

Vue.js是一种渐进式JavaScript框架,用于构建用户界面。它轻量级、模块化,并且易于集成。Vue的核心库只关注视图层,同时提供了一套丰富的可选扩展,如路由、状态管理等,便于开发单页应用。与React和Angular不同,Vue可以自底向上逐层应用,允许开发者在项目中灵活地选择需要使用的功能。Vue.js通过简单的API提供数据驱动的双向数据绑定和组件化的开发方式,使得开发者能够轻松构建复杂且具有交互性的前端应用。-- 示例:Vue.js基本结构 --></div><script>

2025-06-01 16:51:59 798

原创 一步到位:Captura录屏软件安装与操作指南

在数字化时代,录屏软件已经成为我们日常生活中不可或缺的工具,无论是教育、演示、游戏录制还是视频通话记录,它都扮演着重要的角色。录屏软件允许用户捕捉屏幕上的活动,并将其保存为视频文件供将来回放或分享。了解录屏软件的基本概念是掌握其使用方法的第一步,我们将从以下几个方面进行探讨:热键是提高工作效率的有力工具,尤其是在使用Captura这样的屏幕录制软件时。通过设定热键,用户可以实现快速启动和控制录制过程,无需将手离开键盘。此外,热键还可以用于截图、快速保存、暂停和继续录制等操作。

2025-06-01 16:20:21 818

原创 Pandoc 2.11.3.2:文档格式转换的强大工具详解

Pandoc是一个功能强大的文档转换工具,它允许用户轻松地在多种文件格式之间转换文档。本章将介绍Pandoc的核心功能,为读者提供一个全面的概览,并准备读者探索Pandoc的更多高级用法。文档转换的基本原理是Pandoc利用一套预先定义好的转换规则,这些规则定义了如何将一种文档格式解析并转换成另一种格式。Pandoc通过读取源文档的结构和内容,将其转换为一个中间表示(IR),然后根据目标文档格式的要求,将IR转换成相应的格式。

2025-06-01 14:25:37 1007

原创 C++课程设计:实现高效的学生宿舍管理系统

在学生宿舍管理系统中,数据结构的选择是至关重要的,它决定了数据的存储方式以及系统处理数据的效率。常见的数据结构包括:数组(Array):具有固定大小的线性数据结构,适合存储相同类型的数据。数组提供快速的随机访问能力,但在插入和删除操作时可能需要进行大量的数据移动。链表(LinkedList):由节点组成,每个节点包含数据和指向下一个节点的指针。链表提供了灵活的动态内存管理,便于插入和删除操作,但随机访问速度较慢。栈(Stack)

2025-06-01 12:52:44 844

原创 物联网智能设备协议对接与Java API实现

在物联网的世界里,通信协议是设备之间沟通交流的共同语言。它们定义了数据交换的规则和格式,确保了信息能够在不同设备和系统之间准确无误地传递。通信协议在物联网中起着至关重要的作用,它们不仅保障了数据传输的正确性,还帮助实现了不同厂商和不同技术的设备间的互通互联。例如,当一个传感器需要将温度数据发送给中央处理系统时,合适的通信协议可以确保数据在传输过程中不被篡改,并且能够被接收系统正确解析。同时,协议还可能提供加密措施来保护数据隐私,以及重发机制来应对网络故障。

2025-06-01 12:47:32 560

原创 全面学习雅马哈四轴机器人的实践教程包

四轴机器人编程语言是专为控制机械臂运动和操作任务而设计的计算机语言。它允许程序员指定精确的运动序列、速度、加速度和执行动作。这些专用语言通常包含了一套预定义的指令集,可以描述机器人的各种动作,包括移动到一个特定位置、开启或关闭工具以及与外部设备进行通讯。在编写程序时,程序员使用这种专用的编程语言,可以精确控制机器人的每一个关节和末端执行器的运动,以达到预期的生产效果。不同于通用编程语言,四轴机器人编程语言通常更专注于运动控制和实时响应。

2025-06-01 12:32:44 799

原创 SAP ABAP模块化编程深入学习:第12课实战视频教程

函数模块在SAP ABAP中是预定义的代码块,它们可以执行特定的任务并可以被应用程序中的任何部分调用。函数模块具有独立的功能,并且通过其接口参数与外界通信。它们是面向过程编程的重要组成部分,允许开发者重用已有的代码,提高开发效率并简化维护工作。函数模块的基本结构包括以下几个方面:函数名:每个函数模块都有一个唯一的名称,便于在程序中引用。参数列表:定义了函数模块的输入和输出参数。导出参数:函数模块的输出参数。改变参数:既可以作为输入也可以作为输出的参数。

2025-06-01 11:47:52 614

原创 前端开发练习:实现京东商品分类功能

前端开发是构建互联网用户界面的技术,它涉及HTML、CSS和JavaScript等技术。前端开发工作负责创建网页的视觉和交互部分,是用户与网站或应用程序的第一交互点。数据挖掘是从大量数据中提取或“挖掘”信息的过程,它使用统计学、模式识别、机器学习、数据库技术等,通过自动化分析数据并发现数据间的关系、模式和趋势。这些信息可以用来进一步优化业务决策、预测未来的趋势和行为、以及在应用中增强用户体验。在商业应用中,数据挖掘的目的通常是为了实现以下几个目标:市场篮分析。

2025-06-01 11:30:02 703

原创 Mote插件 - 高效语音笔记与反馈工具

Mote插件是目前市场上非常受欢迎的一款用于提高工作效率的工具软件,其以创新的技术和用户友好的界面获得了广泛的赞誉。本章节将详细介绍Mote插件的基本功能和特性,以及它在日常工作和学习中的应用场景。Mote插件是一款专门设计用于浏览器环境的软件,它具备强大的语音笔记、语音转文字、语音反馈等核心功能。Mote插件不仅能够提升用户的输入速度和效率,还优化了内容管理过程,增强了用户体验。语音笔记功能:用户可以快速地记录语音笔记,并将其存储和分类。语音转文字功能。

2025-06-01 11:07:28 543

原创 蓝桥杯嵌入式第12届实战演练指南

ARM架构,即Advanced RISC Machines,是微处理器架构中一种基于精简指令集计算(RISC)的微处理器架构。ARM架构设计的核心理念在于提供高性能的处理器同时保持低功耗的特性,这使得它成为移动通信设备、嵌入式系统、乃至高性能计算设备等领域的首选。ARM架构的特点主要表现在以下几个方面:高性能与低能耗:ARM处理器的高效率设计使得它在执行大量计算任务的同时能够保持较低的能耗,这对于电池供电的设备至关重要。

2025-06-01 09:11:18 597

原创 Java编程实训项目实战指南:实训6 10解析

类是具有相同属性和行为的一组对象的集合。在Java中,类是一种引用数据类型,用于定义对象的状态(属性)和行为(方法)。创建对象的过程涉及使用new关键字来分配内存并构造类的实例。// 车的颜色// 车的速度// 构造器// 方法:启动车辆System.out.println("车辆启动,当前速度:" + speed + " km/h");// 创建Car类对象的示例Car myCar = new Car("红色", 0);在上述代码中,我们定义了一个Car类,它有两个属性。

2025-05-31 15:25:32 583

原创 中文分词:C语言版项目实战

中文分词是中文处理的关键技术,用于将连续的中文文本切分为有意义的词汇单元,即词语。在汉语中,由于词与词之间没有明显的分隔符(如空格),因此需要通过算法来判断词的边界。在这一章节中,我们深入探讨了三种常见的中文分词算法:正向最大匹配法、逆向最大匹配法和最少切分法。每种方法都有其独特的原理和实现步骤,以及各自的优缺点分析。通过对比,我们可以更好地理解它们在不同场景下的适用性,并为我们实现中文分词提供理论基础和实践指导。

2025-05-31 13:49:14 968

原创 C语言指针与数组操作实战指南

指针是一种数据类型,它存储了变量的内存地址。通过指针,我们可以直接访问和操作内存中的数据。在C语言中,指针声明的基本格式为类型 *变量名;,例如声明一个指向整型的指针可以使用int *ptr;。// ptr 存储 value 的地址在上面的代码示例中,ptr就是一个指针变量,它被初始化为变量value的地址。

2025-05-31 13:20:52 673

原创 Zego v3 Token生成算法:JavaScript实现

Zego Express SDK是为实时音视频通信服务而设计的软件开发工具包,它提供了一系列全面的功能,能够帮助开发者快速构建高质量的音视频应用。以下是该SDK的一些核心功能:视频捕获和渲染:支持前后摄像头视频数据的捕获,并能够在应用中进行视频渲染,提供流畅的视频体验。音频捕获和播放:允许应用捕获麦克风等音频输入,并实现音频数据的播放。实时音视频通信:支持一对一的视频通话以及多人会议场景,实现音视频数据的实时传输。消息传递。

2025-05-31 12:44:32 600

原创 C++实现归并排序详解与代码示例

递归算法是一种在解决问题时调用自身解决问题的方法。其核心思想在于将一个复杂的问题简化为若干个相同或相似的小问题,然后再通过递归方式解决这些小问题,最终达到解决原问题的目的。递归算法通过函数调用自身实现,每个函数调用都作为新的问题实例进行解决。递归算法在解决分而治之的问题时特别有效,例如在归并排序中,我们将一个未排序的数组分成两半,分别对这两半进行排序,然后将它们合并。合并的过程实际上就是递归解决小问题的步骤。递归的两个基本要素是:基本情况。

2025-05-31 12:36:29 653

原创 C++实现单链表的建立与操作:头插法和尾插法

在C++中,链表的实现通常依赖于一种自定义的数据类型——节点结构体(Node)。设计一个良好的节点结构体是创建高效链表的基础。通常来说,节点结构体应当包含至少两个部分:数据成员和指向其他节点的指针。数据成员负责存储节点的数据,而指针成员则负责维护节点之间的链接关系。封装数据成员的重要性在于能够隐藏节点的内部实现细节,同时提供公共接口来操作这些数据。在链表中,数据成员可能包括整型、浮点型或自定义的结构体类型,用于存储实际的数据信息。这样的设计使得链表的节点具有很好的通用性和灵活性。

2025-05-31 11:48:05 864

原创 联想Y480n笔记本的CLOVER EFI引导解决方案

EFI(Extensible Firmware Interface,可扩展固件接口)是计算机启动时使用的接口规范,它由UEFI(Unified Extensible Firmware Interface,统一可扩展固件接口)进化而来。与旧的BIOS(Basic Input/Output System,基础输入输出系统)相比,EFI引导机制提供了一个更加开放和模块化的框架,能够支持更复杂的系统启动和管理功能。

2025-05-31 11:31:51 1016

原创 Redis 6.2.3版特性与部署实践指南

简介:Redis 6.2.3是一个高性能键值存储系统的重大更新版本,增加了新特性和性能优化。该版本包括Redis Sentinel的配置文件和预编译源码包,适合在Linux环境下快速部署。本指南将带你了解Redis 6.2.3的关键特性,如何部署和配置Redis及Sentinel系统,并熟悉其持久化机制、数据类型、订阅/发布系统、事务以及Redis Cluster等关键知识点。

2025-05-31 11:18:58 962

原创 C++ 实现:识别1000年至2000年间的闰年

在时间的流转中,闰年是一个调整日历与天文年度周期不一致的机制。格里高利历,也就是当前世界通用的公历,规定了每四年增加一天,即2月29日,以弥补一年365天相对于实际太阳年365.2425天的不足。但闰年的规则并非如此简单,它具有一定的计算规则。在C++中,变量是存储数据的容器,每个变量都有一个类型,这个类型决定了变量存储数据的大小和布局,以及能够对其执行的操作。变量的声明是告诉编译器有一个变量,而变量的定义则会分配内存空间。// 声明一个int类型的变量int a;

2025-05-31 10:32:39 634

原创 SignalR 实时通信客户端实践指南

SignalR 是一个由 Microsoft 开发的开源库,用于在服务器和客户端之间实现双向通信。作为 ASP.NET 的一部分,SignalR 提供了实时消息传递的功能,这使得服务器可以向连接的客户端推送内容,而无需客户端周期性地轮询服务器。这对于需要即时更新数据的应用场景非常有用,例如实时通知、聊天应用或实时仪表盘。SignalR 客户端连接的生命周期事件主要包括:starting:连接开始时触发。started:连接建立成功后触发。:连接断开时触发。// 监听生命周期事件。

2025-05-31 10:21:55 911

原创 Android应用逆向工程工具组合:Apktool+Jadx

Apktool是Android应用开发者和安全研究者用于反编译和重新打包Android应用程序APK文件的工具。它能够将APK文件中的资源文件还原到几乎可编辑的格式,并且通过它可以轻松地查看和修改APK文件中的Smali代码。Jadx是一个流行的开源工具,用于将Android的APK文件解码为Java源代码,使得开发者可以直接查看和分析应用的代码。Jadx支持从APK文件中提取资源文件,包括图片、布局文件等,为安全研究人员和逆向工程师提供了一个全面的分析环境。

2025-05-25 16:12:33 1319

原创 深入MVVM架构的自定义用户控件开发

MVVM(Model-View-ViewModel)是一种软件架构模式,用于分离用户界面的展示逻辑与业务逻辑。该模式由三部分组成:Model(模型):代表应用中的数据和业务逻辑。View(视图):负责UI的显示。ViewModel(视图模型):作为视图和模型之间的桥梁,封装了视图的显示逻辑,并包含命令和数据绑定。在软件开发中,代码复用和模块化是提高开发效率、确保应用质量的重要手段。自定义控件的创建正是对这两个原则的实践。

2025-05-25 16:00:57 742

原创 Java与Exchange服务器交互:邮件发送jar包使用指南

在现代信息技术领域,邮件服务作为一种重要的通信方式,不仅在商业上,也在日常生活中扮演着重要的角色。Java作为广泛使用的企业级编程语言,其邮件发送功能的实现是开发人员必备的技能之一。本章将介绍Java邮件发送的基础知识,为读者打下坚实的理论基础。Microsoft Exchange Server是一种流行的服务器软件,它提供了企业级的邮件服务、日历管理和任务管理功能。它允许用户进行电子邮件通信、日程安排、会议预定、联系人管理以及其他协作工作。

2025-05-25 15:42:49 634

原创 Android定时闹钟的精妙实现

BroadcastReceiver是Android系统中用于接收广播的应用组件。当系统或应用发出一个广播时,系统会自动找到所有匹配的BroadcastReceiver并调用其方法来处理消息。BroadcastReceiver主要分为两种类型:标准的BroadcastReceiver和有序的BroadcastReceiver。标准的BroadcastReceiver是并发的,广播的发送不会等待接收者处理完毕。而有序的BroadcastReceiver则允许您定义接收广播的顺序。

2025-05-25 15:05:22 846

原创 Android多级列表树形结构实现指南

在开发TreeView时,首先需要了解如何将树形数据模型映射到我们的数据结构中。树形数据模型是一种非线性的数据结构,它以分层的方式描述节点间的关系,其中每个节点都可能有多个子节点,而每个子节点也可能有自己的子节点。在Java中,通常我们会用递归的数据结构来表示这样的层级关系,即使用节点类(Node)来表示每个节点,并且每个节点类会有一个子节点列表(List)作为属性。例如:// 当前节点存储的数据// 子节点列表// 可能还会有添加子节点等方法。

2025-05-25 13:08:40 942

原创 Java文件操作实战:打开与保存文件的方法与实践

java.io除了使用Java标准异常外,有时创建自定义异常类来处理特定问题是有帮助的。自定义异常允许我们更具体地描述错误情况,并对异常处理提供更细致的控制。下面是创建一个自定义异常类的示例代码:if (!throw new CustomFileException("文件不存在");try {在这个例子中,是我们定义的一个异常类,checkFile方法会抛出这个异常。在主函数中,我们捕获并处理这个异常。不仅能够展示一个基本的文件选择对话框,还可以进行自定义。

2025-05-25 12:21:32 928

原创 百度定位SDK在Android中的集成与应用

简介:本源码详解了如何在Android开发中通过百度定位SDK实现高效的位置服务,涉及注册账号、添加依赖、配置权限、初始化定位服务、监听定位结果以及启动和停止定位等步骤。同时,提供了在Eclipse与Android Studio中适配源码的差异处理方法,并强调了在应用开发中考虑权限请求、隐私政策和异常处理的重要性。

2025-05-25 10:55:05 820

原创 ECharts图表实现及Java后端交互实践

一个典型的Java后端项目包含以下几个核心组件::存放Java源代码。:存放资源文件,如配置文件、静态资源等。:存放测试代码。pom.xml(Maven项目)或(Gradle项目):项目配置文件,用于管理依赖、构建脚本等。项目结构通常按照MVC(Model-View-Controller)模式进行组织,以保证代码的模块化和可维护性。

2025-05-25 10:11:04 754

原创 提高中标率的上海车牌拍牌辅助工具

在上海,车牌拍卖已经成为获取私车牌照的主要方式。由于参与人数众多且牌照资源有限,使得整个拍卖过程竞争激烈,充满了各种不确定性。通常,拍卖流程包括注册、出价、成交三个主要环节。参与者需要在规定的时间内通过特定平台进行出价,最终出价最高者获得车牌。在探讨拍牌辅助工具的合法性时,我们首先需要审视国家层面的法律法规。以中国为例,国家层面并未对拍牌工具的使用做出明确的法律规定。然而,拍牌辅助工具在本质上属于第三方软件服务,其合法性往往与网络行为安全、数据保护、公平交易等原则紧密相关。

2025-05-25 10:10:25 525

原创 OpenCV单目标定实战指南

在计算机视觉领域中,单目相机的标定是一个基础且关键的步骤,它为后续的图像处理和三维重建提供了必要的相机内部参数。OpenCV作为一个强大的图像处理库,提供了简单直观的接口来进行相机标定。Haar特征由Paul Viola和Michael Jones在2001年提出,是一种用于目标检测的简单图像特征。它利用了图像中目标和背景之间的亮度变化,通过计算图像块中的像素和来提取特征。Haar特征主要分为边缘特征、线性特征、中心环绕特征和对角线特征等。

2025-05-25 09:48:48 942

空空如也

空空如也

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

TA关注的人

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