- 博客(723)
- 收藏
- 关注
原创 Python实现自动重载修改的进程
然而,这种方式会导致服务器停机时间较长,影响用户体验。为了解决这个问题,我们可以实现一个自动重载被修改的进程的方法,使得只有被修改的代码模块需要重新加载,而不需要重启整个服务器。首先,通过遍历当前目录下的所有Python模块文件,获取每个模块文件的最后修改时间,并与之前保存的最后修改时间进行比较。如果模块文件的最后修改时间大于之前保存的最后修改时间,则说明该模块文件已经被修改,需要重新加载。使用上述代码,我们可以在服务器运行时实时监测代码文件的变化,并自动重载被修改的模块,而无需重启整个服务器。
2023-10-17 18:46:47
164
原创 Python中的二分查找与bisect模块详解
二分查找是一种高效的搜索算法,可以在已排序的序列中快速查找指定元素。Python中的bisect模块提供了对已排序序列的处理函数,可以方便地进行元素的插入和查找操作。通过理解二分查找的原理和使用bisect模块的函数,我们可以更加灵活和高效地处理已排序的序列。这对于处理大量数据、优化算法和解决实际问题都非常有帮助。
2023-10-16 23:53:49
149
1
原创 Python中使用sqrt方法计算平方根的教程
首先,我们导入math模块,然后使用sqrt方法进行平方根计算,并将结果输出到控制台。在Python编程语言中,我们可以使用math模块中的sqrt方法来计算平方根。本教程将详细介绍如何使用sqrt方法进行平方根计算,并提供相应的源代码示例。首先,我们需要导入math模块,以便使用其中的sqrt方法。接下来,我们计算了浮点数2.25的平方根,并将结果输出。在上面的示例中,我们计算了整数16的平方根,并使用int函数将结果转换为整数。在上面的示例中,我们首先计算了整数9的平方根,并将结果存储在变量。
2023-10-16 23:51:12
425
1
原创 Python文件操作:seek方法详解
本文详细介绍了在Python中使用seek()方法来移动文件的读写位置。通过指定偏移量和参考位置,我们可以自由地在文件中移动读写位置,以便读取或写入所需的数据。熟练掌握seek()方法的使用可以提高文件操作的灵活性和效率。
2023-10-16 23:33:25
813
1
原创 在C语言中嵌入Python
在某些情况下,我们可能需要在C语言程序中嵌入Python代码,以利用Python的灵活性和丰富的库来完成特定的任务。除了执行简单的Python代码,我们还可以在C语言程序中嵌入更复杂的Python代码,并在C和Python之间传递数据。总结起来,通过使用Python的C API,我们可以在C语言程序中嵌入Python代码,并在两种语言之间进行数据交换。Python的C API允许我们通过C代码调用Python解释器,并在C程序中执行Python代码。函数调用Python函数,并将返回值存储在。
2023-10-16 23:26:24
268
1
原创 使用Jupyter Notebook进行Python学习
Jupyter Notebook是一种广泛用于数据分析和编程的交互式开发环境,特别适用于学习Python编程语言。本文将介绍如何使用Jupyter Notebook来学习Python,并提供相应的源代码示例。
2023-10-16 23:13:18
151
1
原创 Android手机中的R系列意味着什么?命名众多,容易混淆
通过使用这些类,开发者可以方便地访问和使用应用程序中的各种资源,包括布局文件、字符串、图像等。虽然命名繁多,但理解它们的用途和命名约定后,开发者就能更好地利用这些类来构建功能丰富的Android应用程序。在Android开发中,R系列是一组用于访问应用程序资源的类。R系列的命名繁多,很容易让人感到困惑,但它们是Android应用程序开发中非常重要的一部分。除了上述示例外,还有许多其他类型的R系列类,用于访问其他类型的资源,如颜色、尺寸、样式等。R系列的命名约定是根据资源的类型和用途来命名的。
2023-10-16 23:05:52
317
1
原创 Android中WebView与JavaScript的交互详解
通过上述步骤,我们可以实现从Android调用JavaScript代码,以及从JavaScript调用Android代码。WebView是Android中常用的控件之一,它可以显示Web页面,并且支持与JavaScript进行交互。本文将详细介绍如何在Android应用中实现WebView与JavaScript的交互,并附带相应的源代码。现在,我们已经完成了从JavaScript调用Android代码的部分。的方法,该方法将在JavaScript中被调用,用于显示Toast消息。在上述代码中,我们将。
2023-10-16 22:50:33
97
1
原创 Android ListView实现拖拽效果的超炫特效
在上述代码中,我们创建了一个空的ClipData对象,作为拖拽操作的数据。这里我们使用了ListView的setOnDragListener()方法来监听拖拽事件,当拖拽操作进入ListView时,我们将更新列表项的位置。通过长按列表项启动拖拽操作,并在拖拽过程中更新列表项的位置,我们可以实现一个交互性强、视觉效果炫目的用户界面。在拖拽操作完成后,我们通过获取被拖拽视图的父容器,并更新其在ListView中的位置,实现拖拽项的移动效果。在项目的布局文件中,我们将使用ListView作为容器来展示列表项。
2023-10-16 22:43:50
128
1
原创 手机购买的最佳时机:内行人揭示Android购机窍门
在购买手机时,许多人都希望能够以最低的价格买到心仪的设备。那么,什么时候是购买手机最便宜的时候呢?内行人们透露,对于Android手机而言,有一些窍门可以帮助你在购买过程中获得更好的价格优势。下面将详细介绍这些窍门,并提供相应的源代码作为参考。综上所述,选择合适的购买时机可以帮助你以更低的价格购买到心仪的Android手机。通过关注节假日促销、新款发布和二手市场等方面,你可以找到更经济实惠的购买选项。希望以上的提示和源代码能够对你有所帮助!
2023-10-16 22:36:05
104
1
原创 游戏设计的本质是什么?在Android平台上的探索
Android平台提供了强大的图形和音频库,如OpenGL ES和OpenSL ES,开发人员可以利用这些库来创建精美的图形效果和逼真的音频体验。在Android平台上进行游戏设计时,开发人员需要充分了解这个操作系统的特点、功能和限制,以便优化游戏性能,并为玩家提供流畅的游戏体验。以上是一个简单的平台跳跃游戏的示例,其中包括了游戏主界面的绘制、玩家角色的跳跃和更新逻辑。一些流行的选择包括Unity和Unreal Engine,它们提供了强大的工具和功能,可以简化游戏开发流程,并提供跨平台的支持。
2023-10-16 22:22:59
72
1
原创 使用依赖注入在Android中实现ASP.NET和MVC6系列
在开发Android应用程序时,依赖注入是一种常用的设计模式,它可以帮助我们降低组件之间的耦合度,并提高代码的可测试性和可维护性。在本文中,我们将探讨如何在Android应用程序中使用依赖注入,以实现类似ASP.NET和MVC6系列的功能。依赖注入是一种通过外部提供依赖项的方式,将依赖项注入到类中的设计模式。接下来,我们需要创建一个组件来连接我们的依赖注入模块和我们的应用程序。在这个组件中,我们将定义我们的依赖项的注入点。最后,我们需要在我们的应用程序中初始化我们的依赖注入组件。来实现依赖项的注入。
2023-10-16 22:17:01
70
1
原创 Android框架学习:高效加载位图
例如,Picasso、Glide和Fresco等都是广泛使用的位图加载库,它们提供了更多的功能和定制选项。你可以根据自己的需求选择合适的库来加载和处理位图。通过使用高效的位图加载框架,如KJFrameForAndroid,我们可以提升位图加载的性能,并避免一些常见的问题。KJFrameForAndroid是一个功能强大且易于使用的Android开发框架,它提供了许多实用的工具和功能,包括位图加载和处理。此外,KJBitmap还提供了其他一些实用的方法来加载和处理位图,比如异步加载、缓存管理、位图裁剪等。
2023-10-16 18:58:28
105
1
原创 使用Python和NLTK进行文本处理
自然语言处理(Natural Language Processing,简称NLP)是人工智能领域的一个重要分支,它涉及对人类语言进行处理和理解。Python是一种功能强大且广泛使用的编程语言,而NLTK(Natural Language Toolkit)是Python的一个流行的NLP库,它提供了各种工具和资源,用于处理文本数据。从文本预处理到分词、词性标注、停用词移除、词干提取以及词袋模型的创建,NLTK提供了丰富的工具和方法来处理和分析文本数据。本文将介绍如何使用Python和NLTK进行文本处理。
2023-10-11 13:28:54
204
原创 Python库urllib和urllib2的区别及使用分析
urllib是Python 2.x版本中的库,而urllib2是Python 2.x版本中的库,后续在Python 3.x版本中合并为urllib。因此,在Python 2.x版本中,我们需要导入urllib和urllib2两个库来使用它们的功能。- urllib:urllib库中发送请求时,默认使用的User-Agent是Python-urllib/x.y(x.y为Python版本号)。在Python中,urllib和urllib2是两个常用的标准库,用于处理URL请求和操作网络资源。
2023-10-11 12:26:18
89
原创 Android文件读取与SD卡操作
首先,我们添加了必要的权限,然后检查了SD卡的状态,获取了SD卡的路径,并最终演示了如何读取文本文件。根据需要,您可以根据示例代码进行适当的修改和调整,以满足您的具体需求。其中,使用SD卡进行文件读取是一种常见的需求。本文将介绍如何在Android应用程序中使用SD卡进行文件读取,并提供相应的源代码示例。请注意,读取SD卡上的文件需要进行异常处理,以处理可能发生的IO错误。在进行SD卡文件读取之前,我们需要检查SD卡的状态,确保它已经挂载并可用。要读取SD卡上的文件,我们需要获取SD卡的路径。
2023-10-09 22:29:35
356
原创 JavaScript实现十进制转八进制
在JavaScript中,我们可以使用一些算法和方法将十进制数转换为八进制数。在本文中,我将为您提供一个实现此转换的详细解决方案,并附上相应的源代码。函数,并传入您想要转换的十进制数作为参数。在上面的示例中,我们将十进制数42传递给函数,并将返回的八进制数打印到控制台。希望这个简单的解决方案能够帮助您实现JavaScript中的十进制转八进制转换!
2023-10-09 15:02:21
107
1
原创 Mac下的中英文切换快捷键及编程实现
你可以自定义快捷键来进行切换。除了使用快捷键,你还可以点击菜单栏中的输入法图标来切换中英文输入法。点击输入法图标会显示当前可用的输入法列表,然后你可以选择你想要使用的输入法。要在代码中使用AppleScript,可以将上述代码保存为一个脚本文件(.scpt),然后通过调用脚本文件的方式来切换输入法。这样,你就可以在编程中通过调用AppleScript来实现输入法的切换了。Mac电脑提供了两种方式来切换中英文输入法:快捷键切换和点击菜单栏切换。这样,你就可以使用自定义的快捷键来切换中英文输入法了。
2023-10-08 14:07:56
594
1
原创 C++ 多重继承和多态的实现
多重继承和多态是C++中强大的特性,它们使得我们能够构建灵活且可扩展的代码结构。本文将介绍如何在C++中实现多重继承和多态,并提供相应的源代码示例。
2023-10-08 12:33:51
88
1
原创 Android或Linux调试中的addr2line工具使用详解
addr2line是一种在Android和Linux调试过程中非常有用的工具,可以将内存地址转换为对应的源代码位置。通过安装addr2line工具、获取目标文件的可执行文件和调试符号文件,并使用addr2line命令进行地址转换,我们可以方便地进行调试和错误定位。addr2line是一种在Android和Linux调试过程中经常使用的工具,用于将内存地址转换为对应的源代码位置。在Android系统中,可执行文件通常是应用的APK文件,调试符号文件则是对应的so文件。,并且已经生成了对应的调试符号文件。
2023-10-08 11:45:01
1305
1
原创 Log4j日志库的详细使用方法
在上面的配置中,我们定义了一个名为Console的Appender,它将日志输出到控制台。使用PatternLayout指定了日志的格式,其中%d表示日期时间,%t表示线程名,%-5level表示日志级别,%logger{36}表示日志记录器的名称(最多显示36个字符),%msg表示日志消息,%n表示换行。通过合理地使用日志,我们可以更好地监控和调试应用程序的运行情况,提高系统的可靠性和可维护性。在上面的示例中,我们通过调用Logger的不同方法记录了不同级别的日志消息。
2023-10-08 10:03:46
55
1
原创 移动应用市场饱和,Android开发前景如何?
此外,Google Play商店作为一个全球知名的应用分发平台,为开发者提供了丰富的机会来推广和销售应用。开发者可以通过创新和定制化的应用,利用Android的广阔用户基础和开放生态系统,获得成功和机会。同时,结合新兴技术的发展,Android开发仍然是一个充满活力和潜力的领域。这意味着开发Android应用可以让开发者触达庞大的用户群体,为他们提供各种各样的应用和服务。与其他操作系统相比,Android提供了更多的灵活性和可定制性,这使得开发者能够创造出独特和创新的应用,满足用户不同的需求。
2023-10-07 19:58:32
62
原创 Android Binder机制详解及实现
在上述代码中,我们定义了一个继承自Service的MyService类,并在其中实现了一个继承自Binder的内部类MyBinder。Android Binder机制提供了一种高效而安全的进程间通信方式,使不同的应用程序或组件能够在不同的进程中进行通信。在Android Binder机制中,所有的通信都是通过Binder对象进行的。在MainActivity的onCreate()方法中,我们创建一个Intent对象,指定了服务端应用的包名和类名,并通过bindService()方法来绑定服务端应用。
2023-10-07 19:21:09
187
原创 JavaScript宿主对象与内置对象的区别及示例代码
宿主对象和内置对象在JavaScript编程中扮演不同的角色。宿主对象是由JavaScript运行环境提供的对象,用于访问和操作环境提供的功能和资源。内置对象是JavaScript语言本身提供的对象,可以在任何JavaScript运行环境中直接访问和使用。了解宿主对象和内置对象的区别可以帮助开发者更好地利用JavaScript的功能和特性来编写应用程序。在JavaScript编程中,宿主对象和内置对象是两个重要的概念。它们在语言中起着不同的角色,并具有不同的特点和用途。
2023-10-07 16:47:01
56
原创 什么是[q格式]在编程中的作用?
在编程中,"[q格式]"是一个占位符,常用于表示某种格式化字符串的模板或规则。下面我们将探讨[q格式]的作用,并提供一些示例代码来说明它的使用。总结起来,[q格式]在编程中扮演了一个重要的角色,它可以用于字符串格式化、数据输出控制和SQL查询参数化等方面。通过灵活应用[q格式],我们可以更好地处理文本和数据,并提高编程的效率和可靠性。这样,我们可以通过简单的格式化操作将变量的值插入到字符串中。作为[q格式]的占位符,它指示输出一个浮点数,并保留小数点后两位。作为[q格式]的占位符,并通过。
2023-10-07 15:38:32
145
原创 Java线程池ExecutorService编程
ExecutorService是Java提供的一个接口,它继承自Executor,并提供了更丰富的线程池管理功能。我们可以根据实际需求选择不同类型的线程池,例如newFixedThreadPool创建固定大小的线程池,newCachedThreadPool创建缓存线程池,newSingleThreadExecutor创建单线程线程池等。线程池可以提高多线程程序的性能和可维护性,合理使用线程池可以更好地管理系统资源并提高程序的响应速度。这将停止接受新的任务,并尝试将已提交的任务执行完成。
2023-10-07 03:21:50
51
原创 希尔排序的Python实现
希尔排序是一种改进的插入排序算法,它通过将待排序的元素分组,逐步缩小间隔,对每个分组进行插入排序,从而实现整体的排序。希尔排序的基本思想是将待排序的元素按照一定的间隔分组,对每个分组进行插入排序。随着算法的进行,间隔逐渐缩小,直到间隔为1,此时整个序列被分为一组,最后一次排序完成后,序列就变成了有序的。希尔排序是一种改进的插入排序算法,通过分组和插入排序的组合,可以在一定程度上提高排序效率。插入排序的过程与普通的插入排序类似,不同之处在于每次比较的元素之间的间隔为当前的间隔值。
2023-10-07 00:59:36
38
原创 微软取消了在 Windows Home 版本中默认提供带有 SMB 的编程功能
在最新的 Windows Home 版本中,微软做出了一项重要的更改,取消了默认提供带有 SMB(Server Message Block)的编程功能。然而,微软决定在最新的 Windows Home 版本中取消这一默认功能,可能是为了增加系统的安全性和性能。尽管微软取消了在 Windows Home 版本中默认提供带有 SMB 的编程功能,但开发者和用户仍然有多种选择来实现文件共享和网络通信的需求。通过适应新的环境,并利用现有的工具和技术,他们可以继续开发出高效、安全的应用程序。
2023-10-06 23:02:32
110
原创 Python列表交集的方法汇总
列表是Python中常用的数据结构之一,交集是指两个或多个列表中共同存在的元素。如果我们需要处理大规模的数据集合或进行更复杂的操作,可以使用numpy库来获取列表的交集。我们可以将两个列表转换为集合,并使用intersection()函数获取它们的交集。通过将两个列表转换为集合,我们可以使用交集运算符(&)来获取两个列表的交集。列表推导式是一种简洁的方法,可以在一行代码中获取两个列表的交集。我们可以使用循环遍历一个列表,并通过判断另一个列表中的元素是否存在来获取交集。输出结果为:[4, 5]
2023-10-06 21:35:27
1050
原创 Python面向对象运算符重载编程
在Python中,面向对象编程提供了一种强大的机制,即运算符重载。通过重载运算符,我们可以定义自定义对象之间的操作行为,使其符合我们的需求。本文将介绍Python中的运算符重载机制,并提供一些示例代码来说明其用法。运算符重载是指通过重新定义类中的特殊方法(也称为魔术方法),来改变对象之间的运算行为。Python中的每个运算符都对应一个特殊方法,我们可以在自定义类中实现这些特殊方法来重载相应的运算符。通过实现这些特殊方法,我们可以自定义对象在进行相应运算时的行为。在上面的示例中,我们定义了一个。
2023-10-06 20:42:26
208
1
原创 Java 格式化输出 JSON 字符串的两种方式
无论是使用 Gson 还是 JSON-B,这两种方式都提供了将 Java 对象转换为格式化的 JSON 字符串的简单方法。在上面的示例中,我们创建了一个名为 “Person” 的简单 Java 对象,并使用 Gson 库将其转换为格式化的 JSON 字符串。在 Java 编程中,我们经常需要将 Java 对象转换为 JSON 字符串,并对其进行格式化输出。首先,我们需要在项目中引入 Gson 库。在上述示例中,我们使用 JSON-B 库将 Java 对象转换为格式化的 JSON 字符串。
2023-10-06 18:35:03
1451
原创 Python 3 基础语法简介与编程示例
当你开始学习 Python 编程时,这些基础知识是非常重要的。通过实践和编写更多的代码,你将进一步熟悉 Python 的语法和功能,并能够构建更复杂的应用程序。它具有清晰简洁的语法结构和丰富的标准库,使得开发人员可以快速构建功能强大的应用程序。本文将介绍 Python 3 的基本语法,并提供一些编程示例来帮助你入门。Python 是一种动态类型语言,因此你无需事先声明变量的类型。条件语句用于根据条件的真假执行不同的代码块。函数是一段可重复使用的代码块,它接受输入参数并返回一个结果。
2023-10-06 12:04:36
51
原创 Java中使用Lambda表达式实现尾递归编程
它可以通过一种特殊的优化技术,称为尾递归优化,来避免递归调用导致的栈溢出错误。在Java中,虽然没有内置的尾递归优化机制,但是我们可以利用Lambda表达式来实现尾递归编程的效果。在Java中,Lambda表达式是一种简洁的语法形式,可以用来表示函数式接口的实例。需要注意的是,Java并没有针对尾递归提供内置的优化机制,因此在处理大规模输入时仍然可能遇到栈溢出的问题。通过使用Lambda表达式和循环结构,我们成功地将尾递归转化为了迭代形式,避免了递归调用导致的栈溢出错误。,该实例表示递归调用的函数。
2023-10-06 10:33:18
121
原创 React中何时使用箭头函数编程
箭头函数是ECMAScript 6中引入的一种函数声明方式,它具有简洁的语法和特殊的上下文绑定规则。在React中,箭头函数经常用于定义组件的方法、回调函数和事件处理程序。在React中,箭头函数经常用于定义组件的方法、回调函数和事件处理程序。使用箭头函数可以确保方法和回调函数内部的this指向当前组件的实例,避免了额外的绑定操作。使用箭头函数定义这些方法可以确保方法内部的this指向组件实例,而不需要额外的绑定操作。在React中,我们经常需要将回调函数传递给子组件,以便在特定事件发生时执行相应的操作。
2023-10-06 10:29:36
75
原创 拒绝对象的拷贝操作
拷贝构造函数用于在创建对象时从同一类的另一个对象中进行拷贝初始化,而拷贝赋值运算符用于将一个对象的值赋给另一个已经存在的对象。总结一下,要拒绝对象的拷贝操作,我们可以将拷贝构造函数和拷贝赋值运算符声明为私有并不予实现,或者使用C++11中的删除函数特性。在编程中,有时候我们希望禁止对象的拷贝操作,这可以通过实现私有的拷贝构造函数和拷贝赋值运算符来实现。在上面的示例中,我们将拷贝构造函数和拷贝赋值运算符声明为私有,这意味着它们只能在类的内部访问,而无法从类的外部访问。对象进行拷贝操作的代码都将导致编译错误。
2023-10-06 09:00:36
44
原创 Android中使用OptionMenu实现菜单功能
右键点击res目录,选择New -> Android Resource File,在弹出的对话框中输入文件名(例如menu_main.xml),并选择Menu作为资源类型,然后点击OK。)的图标形式显示在应用程序的标题栏或工具栏上,当用户点击这个图标时,会弹出一个菜单供用户选择操作。当用户点击OptionMenu图标时,系统会自动弹出菜单供用户选择操作,并触发相应的点击事件处理方法。在上面的代码中,我们定义了两个菜单项,分别是菜单项1和菜单项2。方法,并在该方法中加载菜单资源文件。
2023-10-06 06:13:39
153
原创 Android手机定位速度优化方案与编程实现
通过采用上述优化方案,我们可以提高Android手机定位的速度和准确性。使用最新的定位API、合理设置定位参数、缓存定位结果以及优化定位请求频率,可以使定位功能更加高效和稳定。定位是Android手机应用程序中常用的功能之一,但有时候我们会遇到定位速度较慢的问题。本文将介绍一些优化方案和编程实现,以提高Android手机定位的速度。例如,可以在应用进入后台时停止定位请求,或者根据用户的位置变化进行动态调整定位请求的频率。希望本文对您有所帮助,如果有任何问题,请随时提问。
2023-10-06 05:28:49
196
原创 S3C2440 USB主控器的编程指南
一旦USB设备连接成功,我们将USB主控器配置为批量传输模式,并设置数据传输方向为输入。本文介绍了如何编程S3C2440的USB主控器,以实现USB设备的主机功能。我们讨论了USB主控器的基本原理、初始化设置和数据传输等关键步骤,并提供了相应的源代码示例。本文将详细介绍如何编程S3C2440的USB主控器,以实现USB设备的主机功能。我们将探讨USB主控器的基本原理、初始化设置和数据传输等关键步骤,并提供相应的源代码示例。然后,我们设置了USB主控器的时钟源和频率,以确保与USB设备的通信正常进行。
2023-10-06 04:09:06
77
原创 计算机进入睡眠状态的含义及编程实现
在睡眠状态下,计算机会暂停运行所有活动并关闭显示器等外设,但仍然保持一些必要的功能以便快速恢复。在本文中,我们将探讨如何通过编程实现计算机进入睡眠状态的功能。因此,在不同的平台上实现计算机进入睡眠状态的功能时,需要根据具体的操作系统和编程语言进行相应的调整。总结起来,通过编程实现计算机进入睡眠状态的功能可以通过调用操作系统提供的相应API或系统调用来实现。下面以常见的Windows操作系统为例,介绍如何使用C#编程语言实现计算机进入睡眠状态的功能。库,该库包含了控制系统电源和休眠状态的函数。
2023-10-06 01:39:25
118
原创 使用多线程的正确方式来编程 Core Data
在本文中,我们将讨论如何正确地在多线程环境下使用 Core Data,并提供相应的源代码示例。托管对象上下文是与特定线程相关联的,因此在多线程环境中,我们需要正确处理托管对象上下文的创建和使用。因此,在设计应用程序时,我们应该尽量减少上下文切换的次数,尽可能在一个上下文中完成一组相关的操作。因此,在设计应用程序时,我们应该尽量减少上下文切换的次数,尽可能在一个上下文中完成一组相关操作。通过创建适当的托管对象上下文,并在多线程环境中执行操作,我们可以提高应用程序的性能。将 UI 更新操作切换到主线程上执行。
2023-10-06 01:26:01
57
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人