自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

Java的专栏

真正的Java

  • 博客(255)
  • 资源 (1)
  • 收藏
  • 关注

原创 CallSite在动态语言运行时的具体实现机制是什么?

CallSite在动态语言运行时中的具体实现机制主要是通过与字节码指令结合使用来支持动态方法调用。这种机制允许在运行时确定方法的绑定,而不是在编译期固定下来。

2025-06-18 12:00:00 300

原创 什么是CallSite在Java中的具体用途?

CallSite在 Java 中主要用于增强语言的动态性和灵活性,特别是在处理动态方法调用方面。它不仅支持了指令的实现,还为开发者提供了强大的工具,用于创建高度优化和灵活的应用程序。无论是构建高效的服务器端应用、开发新的编程语言,还是探索新的编程范式,CallSite都是一个值得深入研究的主题。

2025-06-18 10:00:00 188

原创 CallSite有哪些子类,各有什么用途?

CallSite类在 Java 中有几个直接已知的子类,每个子类都有其特定的用途和行为。

2025-06-18 08:30:00 188

原创 什么是 CallSite?

CallSite。

2025-06-18 08:00:00 469

原创 VarHandle有哪些常见应用场景?

是 Java 中用于提供低层次、高效且安全的变量访问机制的一种工具,它支持多种访问模式,如普通读写、volatile 语句、原子比较并设置等。是一个强大的工具,适用于需要高度控制变量访问和并发行为的场景。它不仅提供了灵活的访问模式,还能显著提升性能,尤其是在需要精细调整的高性能应用中。

2025-06-17 08:30:00 179

原创 Java 中 VarHandle 的说明

VarHandle是 Java 提供的一种更灵活、更底层的变量访问机制,比传统的和Unsafe更加安全且通用。

2025-06-17 08:00:00 320

原创 VarHandle支持哪些访问模式的示例?

提供了多种访问模式,允许开发者以不同的方式访问和操作变量。成为了一个非常强大且灵活的工具,适用于需要精确控制并发访问和内存模型语义的场景。类似,但可能在某些情况下不会立即成功,适合用于减少锁竞争的场景。这种访问模式确保了可见性和有序性,适用于多线程环境下的同步。,开发者可以实现更高效、更安全的并发算法和数据结构。

2025-06-16 23:04:00 325

原创 TerminatingThreadLocal 类的说明

是一个泛型类,表示这是一个线程局部变量(ThreadLocal),但具有特殊的语义。它继承自,这是 JDK 中的一个特殊类型的 ThreadLocal,用于支持虚拟线程(Virtual Threads)和平台线程(Platform Threads)之间的协作。绑定于载体线程(通常是平台线程)。当该载体线程终止时,如果这个变量曾经在该线程或其承载的虚拟线程中被访问过或初始化过,则会收到通知。这种机制可以用于在线程终止时进行资源清理、状态回收等操作,特别适用于虚拟线程环境下的上下文管理。

2025-06-16 16:31:50 232

原创 InnocuousThread在JDK内部具体实现细节是什么?

不属于任何用户定义的 ThreadGroup不属于任何用户定义的,而是属于一个特殊的、内部管理的线程组。这有助于隔离这些线程,使其不受应用程序代码的影响。自动清除 ThreadLocal 数据提供了机制,在线程结束时自动清理所有数据。这是为了避免由于变量未正确清理而导致的内存泄漏问题。守护线程(Daemon Thread)通常情况下,被设置为守护线程(Daemon),这意味着当没有其他非守护线程运行时,JVM 可以正常退出,而不需要等待这些线程完成。轻量级和高效由于其设计目的,

2025-06-16 11:18:07 196

原创 JDK中还有哪些类与InnocuousThread类似?

这些类都围绕着提高Java应用的并发性能和资源管理效率而设计。无论是通过优化线程的创建和销毁过程(如),还是通过改进对阻塞操作的处理方式(如虚拟线程调度器中的载体线程),它们共同的目标都是为了提供更加健壮和高效的并发编程模型。同时,它们也都关注于如何安全地管理线程局部变量(ThreadLocal),以避免潜在的内存泄漏问题。

2025-06-16 11:16:02 220

原创 InnocuousThread类在JDK中具体有什么作用?

..这是一个继承自Thread的最终类(final),表示不能被继承。不属于任何用户定义的支持清除数据避免对应用程序造成副作用(即“无害”的线程)作用描述隔离性不属于任何用户定义的 ThreadGroup,避免被用户误操作或干扰安全性不持有敏感资源,行为可控,适合系统级任务资源管理自动清理 ThreadLocal,防止内存泄漏和数据污染适用场景ForkJoinPool、虚拟线程调度器、线程池等内部并发框架。

2025-06-16 11:14:01 751

原创 InnocuousThread 是什么东西

特性描述不属于用户定义的线程组避免被外部线程组管理或干扰,提高隔离性和安全性支持清除 ThreadLocal在线程结束时自动清理 ThreadLocal 数据,防止内存泄漏设计目的主要用于系统内部、线程池、虚拟线程等需要轻量、安全执行的场景。

2025-06-16 11:12:01 299

原创 虚拟线程与其他并发模型的区别是什么?

虚拟线程通过提供一种更轻量、更灵活的方式来实现并发,解决了传统平台线程在处理大规模并发任务时遇到的问题。它们特别适用于I/O密集型应用、高并发Web服务器、微服务架构以及其他需要高效处理大量并发请求的场景。相比之下,传统平台线程更适合计算密集型任务,其中线程的创建数量较少且主要关注的是CPU的使用效率。

2025-06-16 09:35:23 589

原创 Java虚拟线程如何处理线程阻塞?

在Java中,虚拟线程(Virtual Threads)引入了一种新的方式来处理线程阻塞的情况,这与传统的平台线程(Platform Threads)有着显著的不同。虚拟线程的设计目的是为了提高并发性,尤其是在I/O密集型应用中。

2025-06-16 09:31:14 258

原创 载体线程和操作系统有哪些交互?

载体线程(Carrier Thread)实际上是指那些由操作系统管理和调度的底层线程,它们是虚拟线程运行的基础。这意味着当一个载体线程上的任务被阻塞(例如等待I/O操作完成),操作系统会保存该线程的当前状态,并加载另一个可运行线程的状态以便继续执行。:当需要执行新的任务时,如果当前没有可用的载体线程或者现有的载体线程不足以处理所有任务,Java运行时环境可能会请求操作系统创建新的线程。:当载体线程执行的任务涉及与操作系统的交互时(如文件读写、网络通信等),它将通过系统调用来请求操作系统的服务。

2025-06-16 09:30:26 329

原创 Virtual Thread和CarrierThread有哪些具体区别?

虚拟线程(Virtual Thread)和载体线程(Carrier Thread)是Java中两种不同类型的线程概念,它们在设计目的、执行方式以及资源管理方面有着本质的区别。

2025-06-16 09:29:06 697

原创 Java 虚拟线程阻塞操作管理

这段话的意思是:Java 提供了一种机制(通过和方法),用来告诉运行时系统某个代码块可能会阻塞。这样当它运行在虚拟线程中时,JVM 可以智能地调整线程资源,提升并发性能。

2025-06-16 09:27:46 262

原创 如何实现自动登录的Telnet功能?

摘要:本文介绍如何在Java中实现带自动登录功能的Telnet客户端。通过Apache Commons Net库构建Telnet连接,重点展示了处理登录流程的详细代码实现,包括用户名/密码输入、服务器响应等待、命令交互等核心功能。代码提供了登录提示检测、超时控制和安全交互等关键处理逻辑,并指出需要根据不同服务器的提示信息调整匹配机制。最后强调实际应用中应避免硬编码敏感信息,采取更安全的凭证存储方式。

2025-06-15 16:03:28 210

原创 java 怎么实现 telnet 功能

在 Java 中实现 Telnet 功能,通常会使用第三方库,因为 Java 标准库并没有直接提供 Telnet 客户端的支持。一个常用的库是 Apache Commons Net 库,它提供了对多种网络协议的支持,包括 Telnet。

2025-06-15 14:21:28 168

原创 WeakReference与SoftReference有何区别?

都是 Java 提供的引用类型,用于不同的场景中处理对象的生命周期管理。主要取决于你的应用需求:如果你的应用需要快速释放资源并允许对象尽早被回收,选择。如果希望对象尽可能长地存活,并且只在必要时(如内存不足)才被回收,则应选择。的对象则会尽量保持在内存中直到必须释放为止。在垃圾回收前后的不同表现。的对象更容易被回收,而。

2025-06-15 13:59:55 224

原创 WeakReference适用的最大场景有哪些?

提供了一种机制来保持对对象的引用而不妨碍其被垃圾回收的能力,这在许多涉及资源管理和内存优化的场合都非常有用。在 Java 中的应用场景主要是那些你希望持有对象引用但不阻止垃圾回收器回收这些对象的情况。的行为依赖于垃圾收集器的工作方式,因此它的具体效果可能会有所不同。

2025-06-15 11:39:47 258

原创 Java 的 Weak Reference(弱引用)说明

弱引用对象不会阻止其“被引用对象”(referent)被标记为可终结的(finalizable)、被终结(finalized),然后被回收(reclaimed)。弱引用通常用于实现规范化映射(canonicalizing mappings)。@param <T> 被引用对象的类型。

2025-06-15 11:32:34 247

原创 PhantomReference如何结合ReferenceQueue实现文件关闭?

尽管直接使用来管理像文件关闭这样的资源管理不是最佳实践,但在某些特定情况下,你可以结合和实现对不再使用的资源进行清理。下面是一个示例,展示了如何使用结合来尝试实现文件的关闭操作。

2025-06-15 11:24:12 193

原创 PhantomReference是否可以用于文件关闭操作?

本身并不直接用于执行文件关闭操作,但它可以作为一种机制来确保在对象被垃圾回收之前能够执行某些清理工作,比如通知系统某个资源需要被关闭。然而,依赖垃圾回收器来触发资源的释放或关闭并不是最佳实践,因为这会导致资源(如文件句柄)保持打开状态直到下一次垃圾回收发生,这可能会引起资源耗尽的问题。尽管如此,在某些特定情况下,如果你需要一种方式来确保所有对某个资源的引用都被清除后执行一些额外的清理逻辑,你可以结合使用。例如,你可以在一个自定义的类中封装文件资源,并在该类的。对于文件关闭操作,通常推荐的做法是使用。

2025-06-15 11:22:11 160

原创 PhantomReference与Finalizer的区别是什么?

方法由于其内在的不确定性及可能带来的性能问题,逐渐被推荐替换为。综上所述,虽然两者都能用于对象销毁前的清理工作,但。提供了更高效、更可控的方式,而。

2025-06-15 11:16:57 239

原创 PhantomReference适用于哪些性能优化场景?

在Java中主要用于管理对象在被垃圾回收之前的清理工作,虽然它不是直接用于性能优化的工具,但在特定场景下可以帮助实现更高效的资源管理和内存使用,间接地对性能优化有所贡献。提供了一种强大的机制来管理对象的生命周期和资源清理,但它也需要开发者仔细设计和实现,以确保不会引入新的复杂性或潜在问题。此外,合理配置JVM的垃圾收集器参数也是提升性能的一个重要方面。

2025-06-15 11:14:15 126

原创 PhantomReference如何与ReferenceQueue配合使用?

因此,在实际应用中,可能需要结合其他机制来确保对象能及时变为“phantom reachable”。:为了让对象成为“phantom reachable”,需要确保没有强引用指向该对象。这样,当 JVM 的垃圾收集器确定该对象仅通过虚引用可达,并准备回收它时,这个虚引用会被加入到关联的。一旦有虚引用被加入队列,该方法就会返回这个虚引用,允许你执行相应的清理工作。实例时,除了传递你想要追踪的对象(即 referent)外,还需要传递上面创建的。,这是为了防止对象复活,确保对象能够被正确回收。

2025-06-15 11:12:52 252

原创 PhantomReference在实际项目中常用场景有哪些?

(虚引用)在Java中是一种较为特殊的引用类型,主要用于处理对象被垃圾回收之前的清理工作。不是日常开发中最常用的工具,但在涉及到精细控制对象生命周期、确保资源安全释放或者深入优化应用程序性能时,它提供了一种有效的方法。中的虚引用,开发者可以获得关于哪些对象已被垃圾回收的信息。通常要求对Java的垃圾回收机制有较深的理解,以避免误用带来的复杂性和潜在问题。来追踪那些已经被逻辑删除但尚未被物理回收的对象,以便进行进一步的处理或统计。,可以在对象即将被垃圾回收时得到通知,并执行相应的资源清理逻辑。

2025-06-15 11:10:42 408

原创 Java 的虚引用 Phantom Reference

虚引用对象会在垃圾收集器确定它们的“被引用对象”可以被回收之后放入队列中。虚引用通常用于安排对象被回收后的清理操作。@param <T> 被引用对象的类型。

2025-06-15 11:09:40 349

原创 如何使用 conda 安装软件包

在 Windows 上,你可以通过开始菜单搜索 "Anaconda Prompt" 或者使用系统自带的命令提示符、PowerShell;在 macOS 和 Linux 上,你可以打开终端。注意,Conda 默认从 Anaconda.org 的默认通道下载软件包,但是也支持添加其他通道(比如。如果找不到想要的软件包,可以通过配置增加额外的通道来源。:如果使用了独立环境,那么你需要先激活这个环境。是你的环境名称,可以根据需要替换为任何你希望的名字。:如果需要更新某个软件包,可以使用。替换为你创建的环境名。

2025-06-14 21:57:03 356

原创 用 conda 做 docker 的例子

Conda 是一个开源的软件包管理系统和环境管理系统,主要用于管理软件包和创建独立的计算环境。它最初是为 Python 程序设计语言开发的,但现在支持多种编程语言。Conda 使得安装、更新、组织复杂包集合及它们的依赖变得简单,这些包可以在任何操作系统(Windows、macOS 和 Linux)上使用。通过 Conda,用户可以轻松地安装不同版本的软件包及其依赖项,而不会干扰系统的其他部分。这对于需要使用特定版本软件或库进行开发和测试的开发者来说特别有用。

2025-06-14 21:31:48 262

原创 软引用和垃圾回收算法有何联系?

软引用是一种特殊的引用类型,它允许对象在内存充足的情况下继续存活,但在系统即将耗尽内存之前,垃圾回收器会优先回收仅被软引用持有的对象。

2025-06-14 16:10:33 275

原创 软引用和弱引用适用的具体场景有哪些?

软引用(SoftReference)和弱引用(WeakReference)在Java中提供了不同的方式来管理对象的生命周期,它们各自适用于特定的场景。

2025-06-14 16:09:52 363

原创 弱引用和软引用的主要区别是什么?

综上所述,选择使用弱引用还是软引用取决于你希望如何管理对象的生命周期以及对内存使用的考虑。如果你的应用场景要求在内存紧张的情况下才释放某些对象,那么应该使用软引用;如果你希望对象能够尽快被回收,不考虑内存压力的因素,那么弱引用将是更好的选择。

2025-06-14 14:50:10 407

原创 ReferenceHandler 是如何工作的?

线程扮演着关键角色,它确保了当对象仅通过弱引用、软引用或虚引用来访问时能够得到正确的处理,从而帮助实现更灵活的内存管理和资源回收策略。通过这种方式,Java 应用程序可以更加高效地管理内存中的对象,尤其是在需要处理大量临时数据或者缓存的情况下。

2025-06-14 14:49:40 330

原创 Java的 Reference 类的说明

Java 的Reference类,详细描述了的状态机模型及其在垃圾回收中的行为。这对于理解 Java 中的软引用、弱引用、虚引用和终结器机制非常重要。

2025-06-14 14:48:55 595

原创 为什么 java 注解用@interface 来表示

从语言设计的角度来看,虽然注解的行为和使用方式与接口有相似之处(例如都可以包含方法签名),但是它们的目的和功能是不同的。关键字来定义注解类型提供了一种清晰且一致的方式来标识这是一个注解声明。它使得开发者能够一眼识别出这是一个特殊的结构——即注解,而不是普通的类或接口。这有助于强调注解的本质:它们是一系列可以附加到代码元素(如类、方法、变量等)上的元数据标签。不仅是Java语言为定义注解类型所设计的一种专门语法,而且这种设计提高了代码的可读性和语义准确性,同时也有助于维护语言的一致性和清晰度。

2025-06-13 22:34:42 210

原创 JNU 编码与文件编码有何关系?

对比项JNU 编码文件编码是否受影响?❌ 否✅ 是是否用于 Java I/O 操作?❌ 否✅ 是是否用于 JNI 字符串转换?✅ 是❌ 否是否可手动设置?⚠️ 不推荐,除非你知道自己在做什么✅ 推荐设置为 UTF-8默认值(Java 9+)UTF-8依赖系统区域设置JNU 编码用于 Java 与本地代码之间的字符串转换,而文件编码用于 Java 应用程序内部的 I/O 操作。两者互不影响,但都建议统一使用 UTF-8。

2025-06-13 14:57:47 902

原创 什么是 JNU 字符集

是一个静态常量,表示 Java 本地代码中使用的字符集。它是 Java 运行时内部使用的一个字符集变量,用于在Java 层和 C/C++ 本地层之间转换字符串(尤其是在 JNI 调用中)。

2025-06-13 14:53:00 555

原创 有哪些语言或框架支持类似Delimited continuation的机制?

尽管并非所有现代编程语言都直接支持,许多语言通过引入协程、异步/等待模式、生成器或其他形式的轻量级并发模型,提供了实现类似功能的能力。这些机制不仅增强了语言的表达力,也为开发者提供了更多的工具来解决复杂的并发问题。随着异步编程需求的增长,越来越多的语言和框架开始采纳或模仿这些概念,以适应不断变化的软件开发需求。

2025-06-13 11:45:14 787

仁科电子网络设备JavaSDKV2.2.4

仁科环境监控主机的开发接口

2025-06-14

读写15693标签Java-Jna示例源码

读写15693标签Java_Jna示例源码,注意:不同型号的读写器使用不同版本的OUR_MIFARE.dll动态库,DLL内部的函数名称都一样,按读写器型号更换示例Demo目录内的OUR_MIFARE.dll文件就可以正常读写卡。

2025-06-14

【信息系统安全】数据权限可配置化设计:实现菜单与用户角色关联及动态数据过滤机制

内容概要:本文档提出了一种数据权限可配置化的概要设计方案,旨在通过增加一种新的菜单类型(数据权限菜单)来实现更为灵活的数据权限管理。系统会在每个一级菜单下自动创建虚拟的二级数据权限菜单,提供“全部”、“本部门以及下级部门”、“本部门”、“本人”四种权限选项。同时,系统提供了新的用户数据权限基础接口,在用户登录后能获取其所有菜单权限和数据权限,并支持查询指定模块的数据权限类型及组织架构信息。此外,为了确保数据权限的有效实施,各模块需要调整SQL查询语句,利用MyBatis的`choose`和`when`标签根据用户的数据权限类型动态设置查询条件,从而实现精准的数据过滤。 适合人群:从事企业级应用开发的技术人员,尤其是负责系统权限管理和数据安全的开发人员或架构师。 使用场景及目标:①适用于需要对不同层级用户进行精细化数据访问控制的企业级应用系统;②帮助开发团队理解并实现基于角色和组织架构的数据权限管理机制;③为现有系统的权限管理体系升级提供参考和指导。 阅读建议:读者应重点关注新引入的数据权限菜单设计及其与现有菜单体系的融合方式,以及如何通过SQL语句的调整来实现数据权限的动态过滤。在实际项目中,可以根据自身业务需求对方案进行适当调整和优化。

2025-06-07

AndFix 的分享资料

AndFix 的分享资料

2025-06-07

樊振华 余额宝的技术架构.pptx

经典的余额宝的技术架构

2025-06-07

智能安防485锁控板通讯协议解析:多机通讯与锁状态控制命令详解及应用

内容概要:本文档详细介绍了广州硕铭科技有限公司的485锁控板通讯协议及其规格。该协议采用485多机通讯方式,支持1-99台设备连接,波特率为9600,数据位为8,停止位为1,无流控。文档详细描述了各种命令格式,包括全开命令、单个开锁命令、开锁反馈数据、读取单个及所有锁状态命令、开多个通道锁命令、主动反馈机制以及长通电功能。每个命令格式均包含命令头、板地址、锁地址、功能码和校验码(BCC/异或)。此外,还提供了具体的命令示例和反馈数据解释,帮助用户理解和操作锁控板。 适合人群:从事智能安防系统集成、锁控设备安装与维护的技术人员,以及对485通讯协议有兴趣的研究者。 使用场景及目标:①适用于需要集中控制多台电控锁或电磁锁的场景,如办公楼宇、小区门禁系统等;②通过掌握不同命令格式,实现对锁控板的精准控制和状态监测,确保安全性和可靠性;③利用主动反馈机制实时获取锁状态变化信息,提升系统的智能化水平。 阅读建议:由于涉及较多技术细节和具体命令格式,建议读者在阅读时结合实际应用场景进行理解,并根据提供的命令示例进行实践操作,以便更好地掌握锁控板的使用方法和通讯协议。

2025-05-20

ALM-MQ-智能Wifi+蓝牙计量控制插座使用说明.doc

ALM-MQ-智能Wifi+蓝牙计量控制插座使用说明

2025-05-20

【环境监控系统】RS-XZJ-100主机配置指南:局域网内设备参数设置与监控功能实现

内容概要:本文档《环境监控配置手册》详细介绍了6RS-XZJ-100型环境监控主机的配置方法,包括主机配置、网口参数、GPRS参数、基础参数、通道参数、ModBus参数及继电器参数等的设置流程。配置过程中,需要确保设备与配置电脑处于同一局域网,正确设置静态IP、子网掩码、网关等网络参数,并根据实际需求调整各模块的具体参数,如通道号、槽位、地址码、报警阈值等。对于GPRS功能,可根据需求设置告警手机号码、目标地址及端口等信息。此外,文档还提供了配置软件的操作步骤,如搜索设备、读取参数、写入参数等具体指导。 适合人群:适用于从事环境监控系统安装、调试的技术人员以及负责设备维护的工程师。 使用场景及目标:①为新装或迁移环境监控系统的用户提供详细的配置指南;②帮助技术人员快速掌握6RS-XZJ-100型主机的各项配置技巧,确保系统稳定运行;③为日常维护提供参考依据,便于故障排查和参数优化。 阅读建议:由于配置涉及多个环节,建议读者在实际操作前仔细阅读文档,理解各参数的意义及相互关系,并严格按照操作步骤执行,避免因配置错误导致设备无法正常工作。同时,在遇到不确定的情况时,可以参考文档中的提示信息或联系技术支持获取帮助。

2025-05-20

荣士 RFID 网络读卡器配置管理系统操作说明 V3.0【物联网设备管理】荣士RFID网络读卡器配置管理系统操作指南:涵盖系统安装、参数设置及通讯协议解析

内容概要:本文档详细介绍了荣士RFID网络读卡器配置管理系统的操作方法,涵盖系统安装、卸载、登录、主界面说明、读卡器参数设置、通讯协议等内容。系统支持多种类型的读卡器,包括M1系列、T55系列、4G网络读卡器、Modbus TCP系列读卡器和USB+WIFI读卡器。文档详细描述了读卡器网络参数、心跳设置、显示文字、时钟、管理密码、WIFI热点配置、HTTP转发等功能的设置步骤。此外,还提供了读卡器与服务器之间的通讯协议,包括数据报文格式、功能码定义、读写卡扇区及认证密码等具体操作说明。 适合人群:具备一定计算机操作基础的技术人员,尤其是从事RFID系统集成、维护和管理工作的人员。 使用场景及目标:①用于企业内部门禁、考勤、消费等应用场景下的RFID读卡器配置与管理;②帮助技术人员快速掌握荣士RFID网络读卡器的配置方法,确保设备正常运行;③提供详细的通讯协议说明,便于二次开发和系统集成。 其他说明:文档内容详尽,适合有一定技术背景的人员阅读和操作。建议在实际配置过程中,严格按照文档步骤进行,确保系统稳定性和安全性。对于初次使用者,建议先熟悉基本操作,再逐步深入到高级功能的配置。

2025-05-19

乐视TV的js脚本

一种乐事tv的javascript脚本,用来获取其视频源,破解代码

2014-06-27

空空如也

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

TA关注的人

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