自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

zchlove137的博客

天下间岂有长生不灭者

  • 博客(65)
  • 资源 (11)
  • 收藏
  • 关注

原创 golang由浅入深

Go语言基础知识:学习goroutine需要先熟悉Go语言的基本语法和特性。并发编程:goroutine是Go语言的并发机制,因此学习goroutine需要对并发编程有一定的了解。Go语言的channel:goroutine之间通信的基本机制是channel,因此学习goroutine需要掌握channel的使用方法。Go语言的sync包:sync包提供了用于同步goroutine的工具,因此学习goroutine需要了解sync包的相关内容。垃圾回收:Go语言的垃圾回收机制对gorouti

2023-02-10 23:48:50 516 1

原创 golang学习历程必读

了解Go语言的历史和背景:Go语言是由Google开发的开源编程语言,了解它的历史和背景可以帮助您更好地理解Go语言。熟悉Go语言的基本语法:学习任何编程语言都需要先熟悉它的基本语法,Go语言也不例外。了解Go语言的特性:Go语言具有诸如并发、快速编译、高效内存管理等独特特性,了解这些特性可以帮助您更好地利用Go语言。掌握Go语言的核心库:Go语言提供了丰富的核心库,学习Go语言需要掌握这些核心库的使用方法。了解Go语言的社区:Go语言有着活跃的社区,学习Go语言需要了解这个社区的运作方式。

2023-02-10 23:40:26 488

原创 go 性能监测、gin、resty、gin等框架的使用

目录加载顺序gingo-restyfmtosgo pprof性能监控概述说明如何使用美化查看内存使用情况查看cpu使用情况加载顺序go语言标准规定了多个编译单元的初始化顺序,包的初始化顺序按照包引入的顺序进行初始化,如果有依赖关系先解决依赖关系,按依赖的顺序进行初始化。 如果某个包被多次导入的话,也只会初始化一次。 对于同一个包中的多个.go文件,实现一般按照文件名排序,进行初始化 首先按顺序初始化全局常量和变...

2022-04-20 17:34:10 1373

原创 fastjson序列化和反序列化理解

json序列化直接根据get和set方法进行序列化json反序列化则有以下几个步骤 没有构造函数的类,java中有默认无参构造函数,此时反序列化会根据getset方法的名称进行属性赋值,使用没问题 当类中存在一个自定义有参构造函数的时候,此时java默认无参构造函数就没有了,此时反序列化是以有参构造函数的参数名称进行注入的,与类型无关 当类中存在多个自定义有参构造函数的时候,此时反序列化将以参数长的为优先进行反序列化 当类中存在多个自定义有参构造函数,且参数个数一..

2022-03-23 14:36:06 4391

原创 sentinel+nacos持久化流控配置

目录概述服务端1、拉取sentinel代码地址2、打开工程如下,重点关注core和dashboard的微服务3、启动控制台时需要往jvm中写入参数4、然后启动微服务客户端接入1、客户端引入pom文件2、限流配置测试持久化nacos1、控制台工程修改2、idea配置jvm参数,启动3、客户端工程引入nacos4、限流配置测试概述Sentinel控制台是流量控制、熔断降级规则统一配置和管理的入口,它为用户提供了机器自发现、簇点链路自...

2022-03-16 15:24:49 4782 1

原创 nginx文件下载限流+jmeter压测

找到nginx.conf的配置,可以通过nginx -t去查找相关路径,将其中的server下的图片location增加单次连接的传输速率限制和连接数限制,能够支持的总传输速率=limit_rate*limit_conn ,单位是秒s location /images/{ #传输速率 limit_rate 10k; #连接数 limit_conn addr 10; r

2022-01-05 16:03:19 5917

原创 log4j远程注入漏洞模拟和详解

IT之家 12 月 10 日消息,近期一个 Apache Log4j 远程代码执行漏洞细节被公开,攻击者利用漏洞可以远程执行代码。Apache Log4j2 是一款优秀的 Java 日志框架。该工具重写了 Log4j 框架,并且引入了大量丰富的特性。该日志框架被大量用于业务系统开发,用来记录日志信息。大多数情况下,开发者可能会将用户输入导致的错误信息写入日志中。IT之家获悉,由于 Apache Log4j2 某些功能存在递归解析功能,攻击者可直接构造恶意请求,触发远程代码执行漏洞。漏洞利用无需特殊.

2021-12-21 11:43:46 4474 2

原创 多数据源事务集成-mybatis-plus

目前百度能搜索到的大部分是各自单独实现的aop以及多数据源的管理,使用起来比较复杂,而且做得也相对来说不是很完善,比如是否要考虑嵌套事务这种以及多数据源事务的支持方式,很多博主都没有涉及到,大多是简单的基于spring框架的拦截处理,自己实现不仅有不完善的缺点、可扩展性也是比较差的,后期版本维护升级或者支持更加复杂的功能就需要进行大改动以及全面的测试,风险系数也是蛮高的。mybatis-plus高版本在2021年下半年已经自己实现了在不借助外部协调者seata的情况下通过实现spring分布式事务的相关接口

2021-12-16 10:31:09 3708

原创 glusterfs分布式文件存储搭建和使用

Glusterfs简介 GlusterFS是Scale-Out存储解决方案Gluster的核心,它是一个开源的分布式文件系统,具有强大的横向扩展能力,通过扩展能够支持数PB存储容量和处理数千客户端。GlusterFS借助TCP/IP或InfiniBandRDMA网络将物理分布的存储资源聚集在一起,使用单一全局命名空间来管理数据。说起glusterfs可能比较陌生,可能大家更多的听说和使用的是NFS,GFS,HDFS之类的,这之中的NFS应该是使用最为广泛的,简单易于管理,但是NFS以及后边会说到..

2021-12-09 10:41:22 4233

原创 kafka多线程并发消费处理

1、在kafka异步处理数据的时候,为了提高kafka的效率,通常是一口气拉取批量数据进行计算,但是kafka分区数的有限决定了消费者的数量限制,简单的增加消费者数量无法获取到性能的提升,此时需要将批量数据进行分批多线程处理,并在多个线程执行完毕之后再统一提交偏移量以下是kafka的消费端的配置kafka.consumer.servers: 192.168.0.1:9092kafka.consumer.enable.auto.commit: falsekafka.consumer.sessio

2021-11-29 14:43:07 4920

原创 json生成excel文件

package excel;import com.alibaba.fastjson.JSONObject;import org.apache.poi.hssf.usermodel.HSSFCell;import org.apache.poi.hssf.usermodel.HSSFRow;import org.apache.poi.hssf.usermodel.HSSFSheet;import org.apache.poi.hssf.usermodel.HSSFWorkbook;import.

2021-11-25 16:14:49 1645

原创 xrebel项目性能分析工具使用

首先我将很高兴的告诉大家,这个工具在idea2021版本集成进去了,不再需要冗余的配置项,使用起来非常easy。首先需要到plugins下查找xrebel的插件并安装安装完之后重启就生效了在idea-》help下进行激活配置需要到Generate GUIDs online 此网站上生成一个GUID,然后按照这个格式进行填写url:https://jrebel.qekang.com/{GUID} ,至于邮箱号可以随便填写一个即可,这样就算激活了,重启idea即可启动项目的...

2021-11-15 17:20:02 2047

原创 redis管道piplines优化springboot业务性能

redis本身执行指令的性能非常的高,单台数十万并发不成问题,但是如果一个请求处理流程过长,需要频繁的操作redis,此时无论如何都无法提高系统的并发,归根结底还是网络带来的性能损耗过大,为了降低网络开销,redis支持piplines和lua脚本的方式进行批量处理和返回值,只需要一次网络请求就可以发送数百条操作指令。以下我将对着两种方式的应用场景进行详细的描述。上图是piplines的命令执行流程,很遗憾的是,spring-data编程模式下的基于jedis连接池的redis cluster模式.

2021-11-15 17:02:31 1192 1

原创 docker部署nacos配置中心并集成nginx和springcloud

架构理解1.Nacos 客户端会循环请求服务端变更的数据,并且超时时间设置为30s,当配置发生变化时,请求的响应会立即返回,否则会一直等到 29.5s+ 之后再返回响应2.Nacos 客户端能够实时感知到服务端配置发生了变化。3.实时感知是建立在客户端拉和服务端“推”的基础上,但是这里的服务端“推”需要打上引号,因为服务端和客户端直接本质上还是通过 http 进行数据通讯的,之所以有“推”的感觉,是因为服务端主动将变更后的数据通过 http 的 response 对象提前写入了。..

2021-10-29 17:23:51 1533

原创 mybatis-plus使用+generator逆向工程

MyBatis-Plus(opens new window)(简称 MP)是一个MyBatis(opens new window)的增强工具,在 MyBatis 的基础上只做增强不做改变,为简化开发、提高效率而生。官网地址:简介 | MyBatis-Plus用idea开发的建议安装一个mybatisx的插件,可以实现xml和dao层之间的跳转以及天生自带generator的功能本文将对mybatis-plus引入到工程以及generator逆向工程两个功能的着重描述配置mybatis..

2021-10-22 15:04:40 2754 2

原创 docker部署hadoop监控prometheus

hadoop是通过docker部署的 ,在docker中添加监控端口和监控进程vi namenode.yamlstartDelaySeconds: 0hostPort: localhost:1234 #1234为想设置的jmx端口(可设置为未被占用的端口)ssl: falselowercaseOutputName: falselowercaseOutputLabelNames: falsevi datanode.yamlstartDelaySeconds: 0hostPor.

2021-10-09 10:59:25 1951

原创 远程submit任务到spark(docker)

Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎,拥有Hadoop MapReduce所具有的优点;但不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法,不过sparkonyarn的集群部署模式不支持http的方式提交任务,所以需要通过远程docker容器通过docker发送spark-submit的指令到spark容器内部,才可在springboot项...

2021-10-09 10:27:25 1893

原创 springcloud 服务健康状态监控

SpringBoot自带监控功能Actuator,可以帮助实现对程序内部运行情况监控,比如监控状况、Bean加载情况、环境变量、日志信息、线程信息等,但是无法监控eureka注册中心下各个微服务的健康状态,只能监控每一个微服务的启停状态,如果想要监控到这个状态,则需要手动进行埋点并把相关指标数据暴露到prometheus即可对于整个监控流程图大致如下:grafana和prometheus在我的其他文章中有相关说明,在此主要把注册中心这边通过actuator暴露指标数据并由prometheus..

2021-09-26 19:43:39 2653

原创 springcloud镜像docker打包

打包方式有两种:一种是idea中引入docker相关插件并开发远程服务器上的docker端口进行远程打包,另外一种是直接通过服务器上的jdk进行docker-compose打包运行1、idea远程容器打包配置服务器上的docker可被远程访问vim /usr/lib/systemd/system/docker.serviceExecStart=/usr/bin/dockerd -H tcp://0.0.0.0:2375 -H unix://var/run/docker.socks..

2021-09-13 15:06:52 1266

原创 docker安装es、logstash、kibana

1、安装es拉取镜像:docker pull docker.elastic.co/elasticsearch/elasticsearch:7.3.1运行容器:docker run -d --name es --restart="always" -p 9200:9200 -p 9300:9300 -e "discovery.type=single-node" docker.elastic.co/elasticsearch/elasticsearch:7.3.1进入容器:docker exe

2021-08-13 17:30:11 2166

原创 springcloud优雅停止微服务

1、引入actuator服务的jar<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency>2、修改application.yml配置文件management: endpoints: web:

2021-08-06 16:13:12 812

原创 java微基准测试代码块性能

基准测试是指通过设计科学的测试方法、测试工具和测试系统,实现对一类测试对象的某项性能指标进行定量的和可对比的测试。可以简单的类比成我们电脑常用的鲁大师,或者手机常用的跑分软件安兔兔之类的性能检测软件。都是按一定的基准或者在特定条件下去测试某一对象的的性能,比如显卡、IO、CPU之类的。使用如下:1、pom文件引入<!-- https://mvnrepository.com/artifact/org.openjdk.jmh/jmh-core JAVA 微基准测试套件 --&gt.

2021-08-06 15:58:53 686 1

原创 mysql原理问题整理

1、mysql的innnodb和myisam存储引擎的区别innodb1、支持事务,实现了四个事务的隔离级别2、主索引是聚簇索引,索引的顺序就是数据存储地址的顺序,极大提高查询效率,其中主键自增id就是一个很好的例子3、支持在线热备份4、支持外键5、不保存表的具体行数6、不支持全文索引7、支持表、行级别的锁,包括间隙锁8、InnoDB表必须有唯一索引(如主键)(用户没有指定的话会自己找/生产一个隐藏列Row_id来充当默认主键)myisam1、主索引是非聚簇..

2021-08-06 15:45:01 586

原创 pageHelper分页实现原理分析

在查询前调用startPage的时候,会往ThreadLocal里面注入分页信息,并且PageHelper类实现了mybatis的inteceptor的接口,执行sql拼接并完成调用的时候会从ThreadLocal中取出分页信息并拼接到sql后面,返回数据后通过实现mybatis拦截方法afterAll,对分页信息进行封装,封装成功后会调用clearPage清除本地变量,这样子下一个查询就不会分页了,如果下一个也需要分页则继续加startPage设置本地分页线程变量即可总结:多个查询分页不会互相影响.

2021-08-02 15:16:14 2157

原创 mybatis实现读写分离

现网生产环境mysql基本上都会采用多主多从的集群模式,能够同时提高读和写的并发性能。那么在微服务中如何在不同的业务操作不同的库又同时对代码没有侵入性呢?在此给出两种常用的方式:1、spring aop的方式动态拦截切换数据源 2、采用mybatis-plus的方式,通过注解和配置的方式简单实现。无论哪一种方式在同一个被拦截的service层,不通过spring bean容器管理进行调用都无法有效切换数据源

2021-08-01 12:20:34 2266 6

原创 redis 连接池优化

使用jedis2.9.1的连接池的小伙伴可能存在一个问题,在程序高并发运行一段时间后会出现Could not get a resource from the pool的报错信息,并且在停止接口调用后查看到的redistemplate的连接工厂里面的空闲连接idelPool始终为0,,这部分连接不会再释放,初步怀疑是jedis连接池泄露问题,经过资料的查阅发现jedis2.9.2以下版本存在连接池泄露的问题,在官方可以看到在2.9.2的bug修复说明(经过我的全方位的测试发现这个bug是在2.9.1改出来的,

2021-06-17 10:14:01 2252

原创 springboot通过responseBody实现jsonp跨域请求

实现jsonp跨域的方式有很多,不过常用的是通过注解的方式实现,这种就需要每个controller层的方法上面都加上注解,从代码简洁层度上来说是不友好的在此给出基于springboot的拦截器ResponseBodyAdvice 实现的jsonp跨域处理其中,beforeBodyWrite的最后一句return null主要是在处理jsonp请求的时候已经通过response进行过write了,如果继续return body就会被ResponseBodyAdvice追加write body内...

2021-05-18 18:47:54 387

原创 mybatis-plus 实现自增id且可手动输入id的方式

在用mybatisplus的时候可以通过注解实体字段从而实现对象和数据库字段的映射,其中主键id基本上采用的是mysql数据库自增的方式,如果此时采用@TableId(value = "id", type = IdType.AUTO)方式,则每次插入一条数据都将只会用到数据库的自增id并把id返回注入到实体对象,此时如果想要手动插入id(基本上在同步数据的时候用到),就无法实现如果此时采用@TableId(value = "id", type = IdType.INPUT)方式,在对象id

2020-12-29 15:52:49 10326 8

原创 离线升级curl采坑

先在线yum打包1、安装reporpm -Uvhhttp://www.city-fan.org/ftp/contrib/yum-repo/rhel6/x86_64/city-fan.org-release-2-1.rhel6.noarch.rpm2、查看该 repo 包含的 curl 版本yum.repos.d]# yum --showduplicates list curl --disablerepo="*" --enablerepo="city*"3、修改该repo的...

2020-08-19 11:13:48 1427

原创 java常用时间工具方法

1、获取两个时间之间的天数、周数、月数(最小单位为天)有三种实现方式:calendar的date日期获取出来,通过until方法获取之间的差距;转化为毫秒数,再除以一天得毫秒数;字符串的date日期获取然后until获取差距,其中通过java的微基准测试发现方式2的性能最好,方式3的性能最差 public static int getMonthsDiff(Date startDate, Date endDate) { Calendar calendar = Calendar.ge

2020-08-04 17:42:29 262

原创 制作docker pt-online-schema-change修改表结构工具镜像

修改线上的表容易导致线网数据出现问题严重导致数据库崩掉(尤其是主从同步的时候),所以一般不建议直接修改线网的表一般情况建表的时候最好预留保留字段和json的扩展字段,保留字段用于需要经常排序或者查询的,json扩展字段用于简单的扩展信息如果实在需要修改表,必须按照pt-online-schema-change 的方式修改,这个的大致原理是:创建新表-》修改新表的表结构-》新建旧表数据新增或者修改的触发器-》往新表插入数据-》修改旧表表名-》修改新表表名为旧表原表名-》删除旧表以及触发器...

2020-07-06 11:10:49 273

转载 mybatis generator重复生成xml解决方案

https://blog.csdn.net/amoscn/article/details/103260288

2019-12-18 15:37:13 603

原创 docker安装、部署、汉化监控服务grafana+prometheus

在docker上部署springcloud项目 https://www.jianshu.com/p/3f385c0a4af3grafana操作最全文档http://www.doc88.com/p-4039177469210.html1.在linux上安装dockerhttps://www.cnblogs.com/qgc1995/archive/2018/08/29/955357...

2019-12-16 10:52:39 5649 2

原创 mysql数据库全量备份和增量备份(docker容器部署方式)

1、创建备份数据库容器(参考监控相关下面的mysql安装)# 建立挂载的数据卷mkdir -p /opt/mysql/data# 虚拟机 3307 端口和容器里的3306端口对应,虚拟机路径和容器里路径(下图,来自头部参考地址)对应docker run -p 3307:3306--restart="always" --name iptv-mysqlback...

2019-12-06 10:46:44 1824

原创 普通安装和docker安装process-exporter对linux进程进行监控

普通安装部署process-exporterwget https://github.com/ncabatoff/process-exporter/releases/download/v0.4.0/process-exporter-0.4.0.linux-amd64.tar.gztar -xvf process-exporter-0.4.0.linux-amd64.tar.gz进...

2019-11-15 16:10:55 2488

原创 docker部署kafka监控服务kafka-exporter

1、kafka需要zookeeper管理,所以需要先安装zookeeper。 下载docker pull wurstmeister/zookeeper:latest版本docker pull wurstmeister/zookeeper启动镜像生成容器docker run -d --restart="always" --name zookeeper -p 2181:2...

2019-11-12 10:26:40 3844 2

原创 通过prometheus实现的docker部署mysql监控

1、安装mysqldocker pull hub.c.163.com/library/mysql:latest# 建立挂载的数据卷mkdir -p /opt/mysql/data# 虚拟机 3306 端口和容器里的3306端口对应,虚拟机路径和容器里路径(下图,来自头部参考地址)对应docker run -p 3306:3306--restart...

2019-11-12 10:18:44 4541

原创 分析springboot2.0自带连接池HikariCP的优势

HiKariCP是数据库连接池的一个后起之秀,号称性能最好,可以完美地PK掉其他连接池,是一个高性能的JDBC连接池,基于BoneCP做了不少的改进和优化。其作者还有另外一个开源作品——高性能的JSON解析器HikariJSON。从以上图可看出Hikari相比起其它连接池的性能高了非常多,那么,这么好的是怎么做到的呢?官网详细地说明了HikariCP所做的一些优化,总结如下:字节...

2019-09-24 11:54:02 790

原创 springcloud服务注册服务总线配置服务调用简单使用

首先参考以下几个文档顺序完成相应的搭建,注意,除了eureka作为服务server引入jar其它全部作为client引入服务注册和发现的依赖,而对于config依赖只有配置中心的服务作为server,其它应用服务作为client项目搭建参考文档:https://www.jianshu.com/p/65dfbb55779b 项目启动参考文档:https://blog.csdn.net/si...

2019-09-19 19:01:49 498

原创 spring restTemplate乱码问题解决

对于乱码问题网上也是很多方案,有的是直接把返回的string进行转码,不过这样子不具备通用性,比较麻烦,治标不治本,对于另外一种方式其实就是修改restTemplate的bean里面的convertor转换器通常在引入bean的时候会有如下代码: @Bean public RestTemplate restTemplate(ClientHttpRequestFactory f...

2019-09-16 16:02:25 522

nginx.conf

nginx安装监控模块后的nginx.conf的配置 Nginx在运行时候,至少要加载几个核心模块和一个事件类模块。这些模块运行时所支持的配置项称为基本配置——所有其他模块执行时都依赖的配置项。 由于配置项较多,所以把它们按照用户使用时的预期功能分成以下4类: 用于调试、定位问题的配置项; 正常运行的必备配置项; 优化性能的配置项; 事件类配置项(有些事件类配置项归纳到优化性能类,这是因为它们虽然也属于event{}块,但作用是优化性能)

2020-09-29

nginx-module-vts-0.1.18.tar.gz

解压之后安装如下:mv nginx-module-vts-0.1.18 /usr/local/ yum -y install gcc gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel cd /usr/local/nginx/nginx-1.13.7 ./configure --add-module=/usr/local/nginx-module-vts-0.1.18/ make && make install然后把监控参数编辑到nginx.conf即可

2020-09-29

docker安装、部署、汉化监控服务grafana+prometheus.html

现在网上有很多关于监控平台,不过大部分开源平台不够开放,想要汉化和自定义监控平台随意添加仪表板的话还是首选prometheus+grafana,汉化在本资源主要介绍的前端vue的汉化,prometheus主要用于采集微服务数据或者机器的node exporter数据,然后在grafana渲染可视化展示,本资源乃本人原创,花费了两周时间的总结,其中邮件发送案例本人采用的是qq的邮箱,那个配置大家不要抄袭哈

2019-10-28

jkd1.8-32.rar

Java 8 (又称为 jdk 1.8) 是 Java 语言开发的一个主要版本。 Oracle 公司于 2014 年 3 月 18 日发布 Java 8 ,它支持函数式编程,新的 JavaScript 引擎,新的日期 API,新的Stream API 等

2019-06-07

aiXcoderInstaller-0.5.9.exe

智能开发工具,aiXcoder是一个经过专业领域代码训练的“虚拟编程专家”与aiXcoder结对编程,大大提高编程效率。

2019-06-07

谷歌浏览器32位70 102

Google Chrome,又称Google浏览器,是一个由Google(谷歌)公司开发的网页浏览器。该浏览器是基于其他开源软件所撰写,包括WebKit,目标是提升稳定性、速度和安全性,并创造出简单且有效率的使用者界面。 Chrome浏览器。Google Chrome v50.0.2661.75 Stable 绿色便携版,该版由本站基于官方稳定版打包,集成@耍下的绿化插件v5.7,默认开启便携化,恢复NPAPI接口支持,删除自带本地应用及Webkit多语言库、不添加任何插件扩展及插件!谷歌浏览器,追求速度、简约和安全的网络浏览器。人气最高的网页浏览器!

2018-12-04

ldap轻量级目录协议

ldap轻量级目录分析协议的小demo,对ldap的连接以及增删改查都有

2018-07-24

git的一些命令行操作

一个对git操作的完整记录,命令行实现上传以及提交等功能

2014-12-22

高级数据库原理的oracle脚本

高级数据库原理实验五的oracle数据库的可运行脚本,考察学生对oracle数据库查询语言的认识

2014-12-22

数据库sqlserver查询语句

对数据库查询语句的简绍.此文档主要针对sqlserver的一些简单查询语句的介绍。

2014-12-22

系统分析实验

图书管理系统,读者可以借阅图书,其中有人工借阅和自动借阅2中方式

2014-05-10

空空如也

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

TA关注的人

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