自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(72)
  • 资源 (3)
  • 问答 (1)
  • 收藏
  • 关注

原创 Redis 和 Mysql 如何保证数据一致性

(如图)在这样一个架构中,会出现一个问题,就是一份数据,同时保存在数据库和 Redis 里面,当数据发生变化的时候,需要同时更新 Redis 和 Mysql,由于更新是有先后顺序的,并且它不像 Mysql 中的多表事务操作,可以满足 ACID 特性。里面的数据是空的,就从数据库加载保存到 Redis 里面,那么数据是一致的。好的,好的,本期的普通人 VS 高手面试系列的视频就到这里结束了,喜欢的朋友记得。先不用慌,技术是为业务服务的,所以不同的业务场景,对于技术的选择和方案的设计。

2023-11-10 17:24:57 574

原创 多线程解决大数据批量导出问题(demo)

1.首先从网上找一个到工具类,我这里是ExcelUtils,如下。具体代码示例包在次处。

2023-11-22 13:30:44 399

原创 使用多线程导入大批量数据的过程中,某个线程出现异常导致这一部分数据导入失败,如何处理?

1. 如果业务对这块的数据的精准度要求的比较高的话,可以把多线程调用方法抽象出来加上事务,一个线程异常后整体回滚,保证一批数据的一致性。2. 如果对一批数据要求比较低的话直接可以在各个线程加事务,一个线程出了问题不影响其他的数据。个人觉得这个应该根据业务场景来选择不同的解决方案。

2023-11-22 09:31:13 310

原创 为什么 ConcurrentHashMap 中 key 不允许为null

我们没办法判断,它是 put(k,v)的时候,value 本身为 null 值,还是这个 key 本身就不。也就是说,当一个线程从 ConcurrentHashMap 获取某个 key,如果返回的结果是 null。但是在 T1 线程返回之前,正好有一个 T2 线程插入了这个 key,但是 value 为 null。这种现象我们可以认为是线程安全性问题,而 ConcurrentHashMap 又是一个线程安。这个线程无法确认,这个 null 表示的是确实不存在这个 key,还是说存在 key,但是。

2023-11-21 13:57:43 207

原创 请简要说明 Mysql 中 MyISAM 和 InnoDB 引擎的区别

一个是.MYD 文件,D 代表 Data,是 MyISAM 的数据文件,存放数据记录,第三个,对于锁的支持不同,MyISAM 只支持表锁,而 InnoDB 可以根据不同的。在 Mysql 里面,存储引擎是可以自己扩展的,它的本质其实是定义数据存储的方式。(如图),它的整体结构如图所示,在 B+树的叶子节点里面存储了索引对应的数据,因为索引和数据是分离的,所以在进行查找的时候,先从索引文件中找到数据的磁盘位。第一个,数据存储的方式不同,MyISAM 中的数据和索引是分开存储的,

2023-11-21 11:13:44 402

原创 你是否在面试中也被过 MySQL 优化相关的问题呢?

主从集群或者主主集群可以保证服务。在高并发和高性能的场景中.MySQL 数据库必然会承受巨大的并发压力,而此时,我们 的优化方式可以分为几个部分。在硬件基础资源的优化中,我们重点应该关注服务本身承载的体量,然后提出合理的指 标要求,避免出现资源浪费!MySQL 的性能优化主要在于对 SQL 执行的优化,因为慢的 SQL 执行会带来不好的用户。身的优化,一般是通过 Mysql 中的配置文件 my.cnf 来完成的,比如。,在读多写少的场景中,通过读写分离的方案,可以避免读写冲突导 致的性能影响。

2023-11-14 14:44:56 260

原创 聊一下面试题的记忆方法

另外,技术的学习和掌握更多地是一个积累的过程。在实际编写代码的过程中,我们并不是把每一行代码都背下来,而是根据已有的知识和经验,通过思考和查阅文档等方式来解决问题。虽然记忆这些知识是有帮助的,但更重要的是理解其背后的原理和概念。总结起来,记忆是技术学习的一部分,但更重要的是理解和实践。通过深入理解技术原理和不断实践,我们可以提高自己的技术水平,更好地应对各种技术问题和挑战。最后,技术的学习和掌握是一个持续的过程。在技术领域,记忆是重要的一部分,但并不是唯一的关键因素。技术的掌握更多地依赖于理解和实践。

2023-11-14 10:30:31 62

原创 死锁的发生原因和怎么避免

线程 T1 等待线程 T2 占有的资源,线程 T2 等待线程 T1 占有 的资源,就是循环等待。,线程 T1 已经取得共享资源 X,在等待共享资源 Y 的时候,不释放共享资源 X;(如图),死锁,简单来说就是两个或者两个以上的线程在执行的过程中,争夺同一个共。按照死锁发生的四个条件,只需要破坏其中的任何一个,就可以解决,但是,互斥条件。越是底层的设计,对于知识面的要求就越多。当大家理解了死锁发生的条件,那么对于这些条件的破坏,

2023-11-14 10:05:22 276

原创 Spring Bean 生命周期的执行流程

Spring Bean 的生命周期,可以分为单例、多实例。这些类或者配置其实是 Spring 提供给开发者,用来实现 Bean 加载过程中的扩展机制,同时,在这个阶段会触发一些扩展的调用,比如常见的扩展类:BeanPostProcessors。这个阶段涉及到的操作,常见的有,`init-method`这个属性配置的方法, 会在这个阶。我记得 Bean 的生命周期会有加载、实例化、销毁这些阶段,其他的记得不是很清晰。(把这张图按照阶段截断,当我说第一个阶段时,就显示第一个阶段的图片,依次往后..)

2023-11-13 14:56:50 105

原创 关于“谈谈你对 ES 的理解”

它是建立在全文搜索引擎库 Apache Lucene 基础之上的一个开源的搜索引擎,也可以作为 NoSQL 数据库,存储任意格式的文档和数据。4. 第四、ES 提供的 Restful API,不仅简化了 ES 的操作,还支持任何语言的客户端。3. 避免深分页查询,ES 集群的分页查询支持 from 和 size 参数,查询的时候,每个。最好是先在 Java 系统。本期的普通人 VS 高手系列就到这里就结束了,喜欢的朋友一键三连,加个关注。体系非常庞大,你还想听哪些 ES 的相关内容,请在下方的评论区留言!

2023-11-13 13:40:46 234

原创 Spring 是如何解决循环依赖问题的?

第二种三者间依赖:A 依赖 B,B 依赖 C,C 又依赖 A,形成了循环依赖。第一种互相依赖:A 依赖 B,B 又依赖 A,它们之间形成了循环依赖。代理工厂来创建,此时会将创建好的实例保存到三级缓存,最终也会将赋值好的 Bean。本期普通人 VS 高手系列的视频就到这里就结束了,喜欢的朋友一键三连,加个关注,好的,看完高手的回答后,相信每位看完视频的小伙伴循环依赖有了更深刻的理解,,否则,便会标记该 Bean 存在循环依赖,的 Bean 的情况,不能解决循环依赖问题。,同时,加上标记是否存在循环依赖。

2023-11-13 11:38:49 210

原创 程序员的“护城河”

4. 代码质量和安全意识:程序员应该注重编写高质量的代码,遵循规范和最佳实践,确保系统的稳定性和安全性。1. 技术能力的深度:程序员需要具备扎实的技术功底和深入的专业知识,能够熟练运用各种编程语言和开发工具,解决复杂的技术问题。2. 创新的追求:程序员应该具备创新思维和不断学习的精神,能够在解决问题的过程中提出新的想法和方法,推动技术的发展和进步。5. 解决问题的能力:程序员需要具备良好的问题分析和解决能力,能够快速定位和解决各种技术难题,保障系统的正常运行。

2023-11-10 13:30:53 121

原创 Spring Boot 中自动装配机制的原理

其实,自动装配的思想,在 SpringFramework3.x 版本里面的@Enable 注解,就有了。@Enable 注解是模块驱动的意思,我们只需要增加某个@Enable 注解,就自动打开某个功能,而不需要针对这个功能去做 Bean 的配置,@Enable 底层也是。在我看来,SpringBoot 是约定优于配置这一理念下的产物,所以在很多的地方,都会。它的出现,让开发人员更加聚焦在了业务代码的编写上,而不需要去。

2023-11-09 15:09:39 1358

原创 能谈一下 CAS 机制吗

定义了一个方法 doSomething(),这个方法的逻辑是,判断 state 是否为 0 ,如果为。但是,加同步锁,会带来性能上的损耗,所以,对于这类场景,我们就可以使用 CAS。否则,返回 false,表示修改失败,而这个过程是原子的,不会存在线程安全问题。

2023-11-09 14:35:03 149

原创 b 树和 b+树的理解

个子树,子树的数量取决于关键字的数量,比如这个图中根节点有两个关键字 3 和 5,(如图),而 B 树是一种多路平衡查找树,它满足平衡二叉树的规则,但是它可以有多。(如图所示)这个是 B+树,B+树的所有数据是存储在叶子节点,并且叶子节点的数据。很明显,磁盘 IO 这个过程的性能开销是非常大的,特别是查询的数据量比较多的情况。a. B 树的数据存储在每个节点上,而 B+树中的数据是存储在叶子节点,并且通。二叉查找树,在二叉树的基础上增加了一个规则,左子树的所有节点的值都小于它的根。

2023-11-08 17:15:42 347

原创 ConcurrentHashMap 底层具体实现知道吗?实现原理是什么?

如果在并发性能和数据安全性之间做好平衡,在很多地方都有类似的设计,比如 cpu 的三级缓存、mysql 的 buffer_pool、Synchronized 的锁升级等等。在 JDK1.8 中,ConcurrentHashMap 锁的粒度是数组中的某一个节点,而在JDK1.7,锁定的是 Segment,锁的范围要更大,因此性能上会更低。ConcurrentHashMap 中有一个 size()方法来获取总的元素个数,而在多线程并发场景中,在保证原子性的前提下来实现元素个数的累加,性能是非常低的。

2023-11-08 16:36:52 68

原创 Dubbo 的服务请求失败怎么处理?

Dubbo 是一个 RPC 框架,它为我们的应用提供了远程通信能力的封装,同时,Dubbo。除此之外,Dubbo 还提供了更多的容错策略,我们可以根据不同的业务场景来进行选。要注意的是,默认基于重试策略的容错机制中,需要注意幂等性的处理,否则在事务型。这类的问题,并不需要去花太多时间去背,如果你对于整个技术体系有一定的了解,你。我记得, Dubbo 请求处理失败以后,好像是会重试。今天分享的面试题,几乎是 90%以上的互联网公司都会问到的问题。,服务消费者只发起一次请求,如果请求失败,就直接把错误抛出去。

2023-11-08 15:49:56 90

原创 什么叫做阻塞队列的有界和无界

1. (如图),阻塞队列,是一种特殊的队列,它在普通队列的基础上提供了两个附加。2. 其中,阻塞队列中能够容纳的元素个数,通常情况下是有界的,比如我们实例化一。3. 而无界队列,就是没有设置固定大小的队列,不过它并不是像我们理解的那种元素。有界队列就是说队列中的元素个数是有限制的,而无界对接表示队列中的元素个数没有。阻塞队列在生产者消费者模型的场景中使用频率比较高,比较典型的就是在线程池中,b. 当队列满了的时候,向队列中添加元素的生产者线程被阻塞,同时唤醒消费者。组的阻塞队列中能够容纳的元素个数。

2023-11-08 14:31:20 222 1

原创 Dubbo 的服务请求失败怎么处理?

5. 广播调用策略,逐个调用服务提供者集群,只要集群中任何一个节点出现异常,就 表示本次请求失败要注意的是,默认基于重试策略的容错机制中,需要注意幂等性的处理,否则在事务型。Dubbo 是一个 RPC 框架,它为我们的应用提供了远程通信能力的封装,同时,Dubbo。而对于 Dubbo 服务请求失败的场景,默认提供了重试的容错机制,也就是说,如果基。这类的问题,并不需要去花太多时间去背,如果你对于整个技术体系有一定的了解,你。,服务消费者只发起一次请求,如果请求失败,就直接把错误抛出去。

2023-11-08 09:59:00 136

原创 HashMap 是怎么解决哈希冲突的?

b. Hash 表又叫做“散列表”,它是通过 key 直接访问在内存存储位置的数据结 构,在具体实现上,我们通过 hash 函数把 key 映射到表中的某个位置,来获 取这个位置的数据,从而加快查找速度。c. 所谓 hash 冲突,是由于哈希算法被计算的数据是无限的,而计算后的结果范围有限,所以总会存在不同的数据经过计算后得到的值相同,这就是哈希冲突。a. Hash 算法,就是把任意长度的输入,通过散列算法,变成固定长度的输出,这个输出结果是散列值。

2023-11-08 09:37:09 262

原创 线程池如何知道一个线程的任务已经执行完成

a. 线程池提供了一个 isTerminated()方法,可以判断线程池的运行状态,我们可 以循环判断 isTerminated()方法的返回结果来了解线程池的运行状态,一旦线 程池的运行状态是 Terminated,意味着线程池中的所有任务都已经执行完了。1. 在线程池内部,当我们把一个任务丢给线程池去执行,线程池会调度工作线程来执 行这个任务的 run 方法,run 方法正常结束,也就意味着任务完成了。过 Future.get()方法来获得任务的执行结果,当线程池中的任务没执行完之前,

2023-11-07 17:52:54 102

原创 lock 和 synchronized 区别

a. Synchronized 是 Java 中的同步关键字,Lock 是 J.U.C 包中提供的接口,这个接口有很多实现 类,其中就包括 ReentrantLock 重入锁。嗯,lock 是 J.U.C 包里面提供的锁,synchronized 是 Java 中的同步关键字。在实际应用中,线程以及线程安全性是非常重要和常见的功能,对于这部分内容如果理 解不够深刻,很容易造成生产级别的故障。d. Lock 提供了公平锁和非公平锁的机制,公平锁是指线程竞争锁资源时,如果 已经有其他线程正。

2023-11-07 16:48:37 369

原创 CPU 飙高系统反应慢怎么排查

a. CPU 上下文切换过多,对于 CPU 来说,同一时刻下每个 CPU 核心只能运行一 个线程,如果有多个线程要执行,CPU 只能通过上下文切换的方式来执行不同 的线程。3. 既然是这两个问题导致的 CPU 利用率较高,于是我们可以通过 top 命令,找到 CPU 利用率较高的进程,在通过 Shift+H 找到进程中 CPU 消耗过高的线程,这里有两 种情况。如果你没有实操过,但是你知道导致 CPU 飙高这个现象的原因,并说出你的解决思路, 通过面试是没问题的。好的,关于这个问题,我从四个方面来回答。

2023-11-07 16:21:31 185

原创 谈谈你对 Seata 的理解

DML 操作,变成了跨进程或者跨数据库的多个事务单元的多个 DML 操作,而传统的数据库事务无法解决这类的问题,所以就引出了分布式事务的概念。Saga 模式,Saga 模式是 SEATA 提供的长事务解决方案,在 Saga 模式中,业务。从这四种模型中不难看出,在不同的业务场景中,我们可以使用 Seata 的不同事务模型。好的,本期的普通人 VS 高手面试系列就到这里结束了,喜欢的朋友记得一键三连,加。然后 AT 是一种二阶段提交的事务,它是采用的最终一致性来实现数据的一致性。

2023-11-07 14:41:50 286

原创 fail-safe 机制与 fail-fast 机制分别有什么作用

定义一个 Map 集合,使用 Iterator 迭代器进行数据遍历,在遍历过程中,对集合数据。Fail-fast : 表示快速失败,在集合遍历过程中,一旦发现容器中的数据被修改了,会。Fail-safe,表示失败安全,也就是在这种机制下,出现集合元素的修改,不会抛出。合遍历过程中,对集合元素做修改后,不会抛出异常,但同时也不会打印出增加的元素。原因是采用安全失败机制的集合容器,在遍历时不是直接在集合内容上访问的,而是先。在拷贝的集合上进行遍历。由于迭代时是对原集合的拷贝进行遍历,所以在遍历过程中。

2023-11-07 13:48:52 107

原创 谈谈你对 AQS 的理解

AQS 全称是 AbstractQueuedSynchronizer,它是 J.U.C 包中 Lock 锁的底层实现,可。源,也就是多个线程中只能有一个线程获得锁资源,比如 Lock 中的 ReentrantLock 重。AQS 是多线程同步器,它是 J.U.C 包中多个组件的底层实现,如 Lock、在很多大厂的面试中,面试官对于并发编程的考核要求相对较高,简单来说,如果你不。从本质上来说,AQS 提供了两种锁机制,分别是排它锁,和 共享锁。以用它来实现多线程的同步器!(mic老师版面试题)

2023-11-07 10:28:00 265

原创 采购和合同管理

开标应在招标文件确定的截止时间的同一时间公开进行。公司将项目的某重要工作分包给了另一家公司存在问题。按照招标文件和中标人的投标文件订立书面合同。招标代理机构拒绝投标人投标文件修改存在问题。招标人应当确定排名第一的中标候选人为中。并同时将中标结果通知所有未中标的投标人。在招标文件要求提交投标文件的截止时。要将中标结果通知所有未中标的投标人。投标文件的密封应有投标人或代表检查。公司向招标代理机构询问中标结果。又没有能够积极主动地采取措施。监督合同的执行过程存在问题。选择最低价的并不一定是最好的。

2023-11-07 10:08:20 65

原创 风险管理案例题

风险管理计划没有经过项目组讨论直接签字下发实施。风险控制和应对措施都是各成员按各自理解进行安排。仅仅参照以前的项目模板编制风险管理计划。应依据定性风险分析的风险值开展定量风险。各风险应对措施的实施应责任分配到人。不仅凭个人的经验进行风险的识别。不能仅凭个人的经验进行风险识别。风险识别过程应该是反复的过程。中的实际问题与计划的偏差较大。依据自己经验制定应对计划不妥。本文摘抄自江山老师高项文档。定性风险风险方法不合理。下统一进行风险应对和管控。定性风险风险方法不合理。风险应对措施制订不合理。

2023-10-27 18:00:44 174

原创 干系人管理相关问题

干系人参与计划不合理,没有考虑重要干系人。干系人识别不全,遗漏了重要干系人。独自编制干系人登记册清单/不妥。本文摘自江山老师的高项文档。没进行规划干系人管理。

2023-10-27 17:54:25 64

原创 项目沟通管理案例题

沟通管理存在问题

2023-10-27 17:45:12 119

原创 项目资源管理案例题

项目经理认为团队管理的核心是团队凝聚力强,不发生冲突是错误的,冲突是不可避免的,关键在于如何处理冲突。成员水平参差不齐,项目团队组建的人员是从各个组中找出空闲的人员,需要根据实际情况组件团队。没有协同工作,工位分散导致没有良好的沟通,需要加强协调工作缺乏合理且有激励性的考核方案。团队成员没有进行明确的考核和评价标准,考核规则不明确,需要明确标准。项目经理要注重团队绩效和个人绩效的考核,要加强过程的监督和控制。团队的气氛不积极,造成项目团队成员的士气低落。没有进入管理角色,定位错误,疏于对项目的管理。

2023-10-27 17:11:07 611

原创 项目质量管理

4.在规划质量管理的时候应该同步制定过程改进计划,质量测量指标。12.没有按公司的质量管理体系要求来进行项目的质量管理,团队成员没有质量意识。14.没有建立质量保证体系,没有qa或qa不独立于项目组织或经验不足。5.应加强项目过程中的质量控制或检查,不能等到工作产品完成后才检查。11.质量部门应全程参与项目的质量管理和体系运行,不能只检查结果。15.只是凭经验进行检查工作,而没有按质量的标准进行检查。4.测试控制的流程不对,或未进行质量控制就进行了范围确认。5.在质量管理中,没有与合适的技术手段相结合。

2023-10-27 16:36:05 60

原创 项目成本管理

2.没采用相关工具进行成本控制。项目经理可以直接控制直接成本。2.1个人别写了成本管理计划。3.成本管理计划没经过评审。本文来源江山老师高项文档。4.成本管理计划内容补全。1.成本管理常见的问题。3.赶工导致成本超支了。

2023-10-27 15:50:39 40

原创 项目进度管理

(1)不能一人来制定进度计划,并且没有从项目实际出发来制定进度计划,而根据合同规定的时间来制定进度计划可能不符合项目实际情况。(9)在压缩工期的情况下,没有考虑新增加开发人员的可用性。(5)制定进度计划的方法不合理,没有预留一定的缓冲时间。(8)制定工作计划时,没考虑资源日历,导致有冲突。(11)关键里程碑点没有获得相关干系人的签字确认。(2)控制进度的工作做的不好。(1)没有进行规划进度管理。本文引自江山老师高项文档。(3)缺乏进度管理的思想。(1)没有进行活动定义。(1)没有进行活动排序。

2023-10-27 15:39:01 59

原创 范围管理案例题做法

需求评审没有客户参与,可能导致最终对需求不能达成一致,设计文件没有经过正式评审,可能导致设计文件有较多的错误。一个下层属于多个上层了,有交叉从属人力资源管理,选用没用管理经验但专业能力强的人做项目经理,没进行培训。闭门造车式地开展需求调研与项目范围说明书的编写工作,没让相关干系人参与进来。没有与各干系人对需求进行详细分析,只是在对客户要求的初步了解后就开始实施。不能只参照类似项目的范围说明书,需要根据本项目情况进行编写。2.范围管理计划,需求管理计划是一个人编写的。范围管理没做好,导致范围出现蔓延。

2023-10-26 18:30:43 26

原创 整合管理案例题分析

6.项目经理叫组长写完个分计划后,知识汇总管理计划,没有进行整合,协调。9.项目管理计划制定比较简单,不足以支持整个项目对所需过程的指导和管理。8.没有做好各子系统的统一协调,可能导致项目计划不符合项目实际情况。4.项目章程授权不够,项目经理没有权限,下面的人不听话。10.项目计划缺少相关分计划,如质量计划,沟通计划。二 丶项目章程记录了关于项目和项目预期交付的产品。5.项目成员不走变更流程,直接修改项目工作内容。7.监控不力(直到。风险进度财务干系人要审批;6.变更发生之后,不做处理(项目经理没尽责)

2023-10-26 16:55:42 48

原创 立项管理案例题做法

1.立项申请应该由(建设方)甲方,(非承建方)乙方的上级主管单位,而非甲方总经理批准。6.可行性分析的申请金额比申请下来的金额超过上下10%的浮动,还继续使用,没有重写。向上级主管部门提交项目申请时所必须的文件,提出某一具体项目的建设文件,是对。7.可信性分析的申请金额比申请下来的金额超过上下10%浮动,但没补充内容。是国家或上级主管部门选择项目的依据,也是可行性研究的依据。13.没有进行系统的可行性分析,没有进行多方案比较。12.未进行项目评估,或项目评估自己做。涉及利用外资的项目,在项目建议书获得。

2023-10-26 16:33:44 54

原创 高级项目管理师 案例分析 关键词扩展方法

项目管理师金色考点

2023-10-16 13:30:30 73

原创 获取虚拟机上面包含ens的ipv4的地址中的一个

echo $ip1。

2023-05-17 17:45:17 147

原创 通过ansible执行shell脚本传值的方式对数据库进行修改

首先是编写脚本,我这边是通过传值方式调用shell脚本的,具体的调用形式如下。如图一所示,执行的sql文件是需要执行的sql,我这边是这样写的。ansbile编写shell脚本调用形式的代码。$1 代表第一个参数,$2代表第二个参数。这样的话实现对数据库的修改操作。值的调用根据排序来接受。

2023-04-26 18:08:28 312

多线程导出大数据poi

多线程导出大数据poi

2023-11-22

MyApplication.zip

android保活demo,实现点击按钮把触发的方法一直保活

2020-12-24

tb_brand.sql

上一篇sql文件的资源,供下载和学习使用,上一篇sql文件的资源,供下载和学习使用,上一篇sql文件的资源,供下载和学习使用,

2020-01-02

javaweb的基础分页

javaweb的基础分页,包含源码,通过servlet和tomcat进行运行开发,jsp页面进行展示,代码包含基础的jstl包以及mysql的安装包,数据库也包含在内,导入数据修改一下库名即可用,数据库在我下一个博客里面,免费下载

2020-01-02

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

TA关注的人

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