自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

@峰的博客

所有博客都是博主经过自己的思考以及实验得到的真实结果

  • 博客(41)
  • 资源 (5)
  • 收藏
  • 关注

原创 mvn clean install -> 【混淆、加密】源码

最近一段时间没有怎么写原著文章了,转载了不少文章,主要还是因为文章作者写的太好就直接摘抄了。本文算安全方面的应用,在工作过程中应该会有所遇到,主要就是关于程序员完成项目之后对源码的处理,像java开发中就会遇到,为了避免源码被反编译来揣测项目的业务原理,往往都会做一些操作,比如混淆源码【proguard】,如果隐藏方法体【classfinal】,还有直接加密jar包避免被工具直接看到的【xjar】,本文主要介绍这三种方式,接下来是截图和源码的展示,毕竟这是我写作的一贯作风主要还是为了大家更好的观看。

2023-03-17 17:31:41 2495

转载 JVM调优思路分享

每天100w次登陆请求, 8G 内存该如何设置JVM参数?step1:新系统上线如何规划容量?step2:该如何进行垃圾回收器的选择?step3:如何对各个分区的比例、大小进行规划step4:栈内存大小多少比较合适?step5:对象年龄应该为多少才移动到老年代比较合适?step6:多大的对象,可以直接到老年代比较合适?step7:垃圾回收器CMS老年代的参数优化step8:配置OOM时候的内存dump文件和GC日志调优总结什么是ZGC?如何选择垃圾收集器?

2023-03-08 11:17:39 407

转载 docker-compose详解

一、Docker Compose1、前言2、官方介绍1、Compose 中有两个重要的概念2、三步骤3、Compose是Docker官方的开源项目,需要安装!4、Compose:重要的概念二、docker compose 安装1、下载2、bash命令补全3、卸载(没有安装不需要执行)4、授权5、检测版本三、docker compose使⽤1、相关概念2、场景 3.docker-compose模板4、启动5、docker-compose 模板⽂件1、build2、command3、container_name

2023-02-10 17:19:08 21632

转载 海量订单分库分表

当数据库产生性能瓶颈:IO瓶颈或CPU瓶颈。两种瓶颈最终都会导致数据库的活跃连接数增加,进而达到数据库可承受的最大活跃连接数阈值。终会导致应用服务无连接可用,造成灾难性后果。可以先从代码,sql,索引几方面进行优化。如果这几方面已经没有太多优化的余地,就该考虑分库分表了。

2023-02-07 10:35:14 570 1

原创 简单介绍如何应用【Poi-tl】将【个人简历】导出为【docx】格式的【word】文档

使用poi-tl插件导出word文档

2022-10-13 15:23:11 1220

原创 简单介绍【spring.factories】的使用

*`starter`的使用在`springboot`项目中可以说是非常常见,可能有些朋友在使用`springboot`项目的时候只是在网络上找了一篇如何创建一个springboot,如何又和`mybatis`或`mybatis-plus`集成,然后又引入缓存机制`redis`,消息队列`rabbitmq`等等,感觉很好用,只需要pom文件中引入相应的依赖就可以了,其他的都不需要管,确实是这样,可能在很长一段时间都在以这样的方式写项目。但你就没有想过jar的路径都不一样,项目中是如何做到无缝连接的嘛

2022-09-28 16:36:28 2553

转载 Wireshark --> 抓包(网络分析)工具

前言为了让大家更容易「看得见」 TCP,我搭建不少测试环境,并且数据包抓很多次,花费了不少时间,才抓到比较容易分析的数据包。接下来丢包、乱序、超时重传、快速重传、选择性确认、流量控制等等 TCP 的特性,都能「一览无云」。没错,我把 TCP 的"衣服扒光"了,就为了给大家看的清楚,嘻嘻。提纲正文显形“不可见”的网络包网络世界中的数据包交互我们肉眼是看不见的,它们就好像隐形了一样,我们对着课本学习计算机网络的时候就会觉得非常的抽象,加大了学习的难度。还别说,我自己在大学的时候,

2022-03-25 14:55:22 55168 17

原创 Docker的常用命令汇总

查询镜像列表docker search tomcat拉取镜像(如果没有指定版本,默认拉取最新的镜像)docker pull tomcat:8.5创建一个后台运行的容器,并实现端口的重定向,挂载目录到宿主机的指定位置,且随docker服务启动而启动docker run -d -p 8088:8080 --name docker-tomcat8.5 -v /root/tomcat_webapps:/var/local/tomcat/webapps -restart=always tom.

2021-10-12 15:39:17 132

原创 Docker安装Jenkins,使用jdk1.8进行源码编译,ant工具打包,且发布到远程的tomcat8.5中,实现正常的项目访问

前言本文介绍在docker中安装jenkins并使用ant打包部署到tomcat容器中,且实现更换容器的默认jdk版本,拉取的docker镜像创建的容器,默认会安装比较高的jdk版本,我这里创建的容器默认安装的jdk是11的版本,我得将它更改为jdk1.8的,具体安装与部署请继续往下看第一,Docker安装Jenkins查看Jenkins版本docker search jenkins拉取最新版本的Jenkinsdocker pull jenkins创建一个Jenkins容器,并重

2021-10-12 13:38:41 2407

翻译 性能优化此话题的演变过程

前言程序员经常要面临的一个问题就是:如何提高程序性能?这篇文章,我们循序渐进,从内存、磁盘I/O、网络I/O、CPU、缓存、架构、算法等多层次递进,串联起高性能开发十大必须掌握的核心技术。I/O优化:零拷贝技术I/O优化:多路复用技术线程池技术无锁编程技术进程间通信技术RPC && 序列化技术数据库索引技术缓存技术 && 布隆过滤器全文搜索技术负载均衡技术举个例子首先,我们从最简单的模型开始。老板告诉你开发一个静态web服务器,把磁盘

2021-09-01 11:53:09 180

原创 Layui表格缺陷之无法设置行高导致固定列与非固定列的行高不一致,百度一下你会发现解决方案都是一样的,实践之后却发现并不能完全解决,今天来分享下我的解决方案

前言:本文此次介绍的是一个目前使用还算广泛的前端框架layui的一个缺陷,我们在做表格渲染的时候常常会出现某些行可能内容比较多,导致表格装不下,这时候,表格将会自动换行,将行高自动撑开变高,在没有固定某列的时候当然没有什么问题,但当你想把某列固定起来,那就不行了,想手动调整行高却发现并没有此类功能属性,那怎么办呢,当然是找度娘或者去官网论坛找解决方案了。找度娘确实是个好办法,就这么打开百度搜索,输入:layui表格固定列与其他列的行高不一致,会找到很大一堆似乎是你想要的东西,然后打开置顶的博客,一看截图,

2021-08-17 16:10:15 1891 2

原创 匹配浮点型数据<正则表达式>

正则表达式(匹配浮点型)前言:在开发中我们常常会使用到正则表达式,但很奇怪的是,每次你在使用正则表达式的时候你都发现你不会写,不知道语法,可能你大概还记得一部分,但很模糊,对于正则表达式的语法真心记不住,别的程序猿是不是我不清楚,但我是就是这样子,每次写都会发现记不住了,然后又去网上查找资料,又进行一次学习,慢慢的发现基本语法你又会了,但实际上你还是不会,可能是没有完全明白或者在实际开发中没有长期的使用导致,今天写这篇文章纯属唠嗑,其余的差不多都是复制粘贴了,另外说一下最近这一次翻开正则表达式去匹配浮点

2021-01-26 16:45:41 12963 4

原创 安装vagrant和virtualbox,再通过vagrant安装centos7,然后在centos7中安装docker,最后在docker中安装mysql

vagrant简介什么是vagrant?简单理解,就是可以通过Vagrant这个工具管理虚拟机,比如说想创建一个centos环境的虚拟机,不需要安装系统这么麻烦,通过vagrant可以快速创建官网地址:https://www.vagrantup.com/1、安装虚拟机使用vagrant首先需要安装虚拟机vitualbox(https://www.virtualbox.org/),vitualbox安装这里就不介绍了。也可以使用vmware,不过vagrant+vmware是要收费的。.

2020-12-03 11:09:48 424 5

原创 二叉树的前序,中序,后序

排序说明1、先找到根A,根据先序排序规则,所以根A排在第1位2、根A排完之后发现A存在左孩子B,根据先序排序规则,B排在第2位3、由于A的左孩子B也找到左孩子D,所以先排B的左孩子D,而A的右孩子C则待排,那么D排在第3位3、由于B的左孩子D也找到所孩子G,所以先排D的左孩子G,而B的右孩子E则待排,那么G排在第4位4、由于G没有找到左孩子,所以左孩子不排,但找到G的右孩子L,所以L排在第5位5、由于L没有孩子节点,所以返回去看他的父节点G,由于G的左右节点都已经排完,所以节点G已经排完,则.

2020-06-12 16:37:57 1726 2

原创 通过Java实现快速查找某个元素在有序集合中的位置(二分查找法,又名折半查找法)

前言:1、二分查找法又叫折半查找法,从名字来看,能大概明白它的算法逻辑2、二分查找法必须满足被搜索的集合必须是有序的3、待查找的元素是在集合中真实存在的算法:1、二分查找法每次搜索都是按照搜索区域中间位置的元素进行定位,首次搜索时,开始位置为0,结束位置为集合长度-1,中间位置=(开始位置+结束位置)/22、如果中间位置的元素正好与待查找的元素相同,则直接返回结果3、如果中间位置的元素值大于待查找的元素值,则表示待查找元素在集合的左半区域,那么搜索范围将会缩小到原来的一半,右半边的区域将

2020-05-27 16:42:41 1881

原创 位运算符(与,或,异或,取反,左移,右移)

前言:位运算都是使用二进制进行计算也就是计算机语言:01的计算方式一、异或运算符(^)描述:是一种二进制加法运算,运算规则是:同为0,不同为10 + 0 = 01 + 1 = 00 + 1 = 11 + 0 = 1注意:异或运算不管0还是1,只要遇到相同的就为0,只要遇到不相同就为1例如:1^21(0000 0001)2(0000 0010)-------------3(0000 0011)特例:异或运算还可以做用于两个数的交换公式:a = a ^ bb =

2020-05-27 11:19:59 3065

原创 通过Java实现判断一个数是不是快乐数(快乐数就是很快乐啊,其实就是按照一定的算法,最后得到1的数字就是快乐数,是不是很快乐呢)

前言:什么是快乐数例如:7,如果从7开始将二次方之后的数字进行分解,再进行二次方相加,最后得到1,那就是快乐数7^2 = 494^2 + 9^2 = 979^2 + 7^2 = 1301^2 + 3^2 + 0^2 = 101^2 + 0^2 = 1源码:import java.util.HashMap;import java.util.Map;/** * 算法:判斷快樂數 * 例如:7,如果从7开始将二次方之后的数字进行分解,再进行二次方相加,最后得到1,那

2020-05-08 18:20:34 832

原创 通过Java实现1秒内找到100万条订单中被随机删掉的2个订单(1秒 > 创建100万个订单的时间 + 随机删除2个订单的时间 + 从100万个订单号中找到被删除的2个订单的时间)

前言:1,订单号格式:AAAAOrder2020-2,100万个订单3,随机删除100万个订单中的2个4,从100个订单中找到被删除的两个订单步骤一(创建100万个订单数组,hash存储) /** * 集合深度(默认100万) */ private static final String SIZE = "1000000"; /** * 订单前缀 */ private static final String PREFIX = "AAAAOrder2020-";

2020-05-08 18:08:21 653

原创 Ubuntu下安装的MySQL如果忘记了密码,你该怎么办呢,快来看看吧

Ubuntu启动(重启,停止)MySQL注意:service mysql作为前缀的命令需要将mysql的服务注册进服务列表才能使用,如果没有注册的情况下不能使用,只能找到相应的安装目录才能进行手动启动,一般默认安装的mysql都是默认注册到服务列表的,所以可以使用,手动安装的情况下,需要手动注册到服务列表1,启动MySQLservice mysql startsudo /etc/init...

2020-05-08 12:33:33 1230

原创 Mybatis大于小于符号的转义

方式一(使用转义符)1,小于符号(<):&lt;2,小于等于符号(<=):&lt;=3,大于符号(>):&gt;4,大于等于符号(>=):&gt;=5,与符号:&amp;6,单引号('):&apos;7,双引号("):&quot;示例:num &gt;= #{num}方式二(引用CDAT...

2019-12-05 14:41:30 1317

翻译 Ubuntu解压缩zip,tar,tar.gz,tar.bz2

前言: 本文摘抄至https://www.cnblogs.com/nyist-xsk/p/7929859.htmlZIPzip可能是目前使用得最多的文档压缩格式。它最大的优点就是在不同的操作系统平台,比如Linux, Windows以及Mac OS,上使用。缺点就是支持的压缩率不是很高,而tar.gz和tar.gz2在压缩率方面做得非常好。闲话少说,我们步入正题吧:我们可以使用下列的命令压缩...

2019-09-03 16:44:26 3575 1

原创 微信JSSDK实现微信自定义分享,微信扫一扫

微信JSSDK实现微信自定义分享,微信扫一扫前言:由于微信使用的越来越多,也让大多数平台或者APP与微信建立了比较深的合作关系,我们公司自主研发的产品也是比较依赖于微信,最近也写了几篇关于微信的博客,本文针对在微信浏览器中使用微信自身的控件进行调用,主要介绍微信自定义分享功能,当然微信暴露出来的接口并不能让你直接调起他们的分享控件,只能自定义分享内容,然后手动触发微信右上角的...进行间接的分...

2019-08-09 18:23:59 4403 2

原创 地址解析(仅供参考与学习)<Java>

JAVA实现地址解析功能地址解析步骤如下:1、检查是否存在省份2、如果存在省份,将会检查省份是否明确标注省,自治区,市(直辖市),特别行政区的关键字3、自动判断市级地区是否注明市的关键字,如果没有标注,将会自动拼接上市的关键字,部分特殊情况不需要拼接,例如:xxx自治州,xxx自治县,xxx州,xxx盟,xxx地区;并且针对直辖市进行特殊处理,由于直辖市没有市级,将会给直辖市默认拼接市辖区...

2019-07-05 16:28:50 8003 8

翻译 CPU内存磁盘IO过高问题处理

CPU占用过高分析可以用top命令查看哪一个进程占用cpu高 或者哪一个占用内存大top - 13:55:32 up 59 days, 19:18, 2 users, load average: 0.00, 0.04, 0.09Tasks: 161 total, 1 running, 160 sleeping, 0 stopped, 0 zombie%Cpu(s): ...

2019-06-21 18:27:16 7963 1

翻译 iostat查看linux硬盘IO性能

iostat查看linux硬盘IO性能rrqm/s: 每秒进行 merge 的读操作数目。即 delta(rmerge)/swrqm/s: 每秒进行 merge 的写操作数目。即 delta(wmerge)/sr/s: 每秒完成的读 I/O 设备次数。即 delta(rio)/sw/s: 每秒完成的写 I/O 设备次数。即 delta(wio)/s...

2019-06-21 18:13:46 3270

翻译 Linux IO实时监控iostat命令详解

Linux IO实时监控iostat命令详解简介iostat主要用于监控系统设备的IO负载情况,iostat首次运行时显示自系统启动开始的各项统计信息,之后运行iostat将显示自上次运行该命令以后的统计信息。用户可以通过指定统计的次数和时间来获得所需的统计信息。语法iostat [ -c ] [ -d ] [ -h ] [ -N ] [ -k | -m ] [ -t ] [ -V ] ...

2019-06-21 18:08:06 289

翻译 SpringBoot配置数据源的详细介绍<application.properties>

第一、DataSource之数据库常用配置(mybatis)#在连接池里的连接返回给调用者或连接池时,要执行的验证 SQL 查询spring.datasource.validation-query=SELECT 1#驱动的全限定类名。默认根据 URL 自动检测。spring.datasource.driverClassName=####数据库的 JDBC URLspring.datas...

2019-06-21 17:41:20 5183

原创 微信支付SDK3.0.9(1.移动端APP支付,2.微信网页调起支付JSAPI,3.微信扫码支付)

微信支付SDK3.0.9(1.移动端APP支付,2.微信网页调起支付JSAPI,3.微信扫码支付)前言:上一篇文章介绍了企业微信转账,思量了下还是决定把微信支付相关的也介绍下,记录下自己的思路,希望对于刚接触微信支付的朋友们能少走一些弯路吧步骤:下载微信官网的SDK(需要适当的改造服务端代码,上篇文章已经有说明)服务端生成APP端调用微信支付的JSON字符串(APP请求微信支付的所需参...

2019-06-14 16:50:00 2782

原创 微信企业转账JAVA版(包括:1,转账个人零钱;2,转账个人银行卡;3,微信官网的SDK3.0.9存在的支付问题)

微信企业转账(包括:1,转账个人零钱;2,转账个人银行卡)前言: 最近公司做产品,有这样几个需求微信退款微信企业给用户转账到零钱通过微信给用户转账到银行卡支付宝退款支付宝转账到余额为满足上述需求做了研究,根据几天的研究个人认为微信开发文档就是一个坑,什么都只描述一部分,让我们开发人员赶到无比的迷茫,当然不包括有此类开发经验的朋友,为了避免以后不再有此类问题出现,我决定做相应的记录...

2019-06-06 16:46:15 4256 6

原创 Mybatis遇到的坑(使用dubbo搭建分布式架构,有遇到此坑的可以看看)

dubbo + zookeeper + mybatis搭建的分布式架构发现自增主键无法自动映射到实体类中不知道大家有没有遇到过,当你使用mybatis往数据库中插入数据的时候,以前在单工程的项目中从来都没有遇到过返回自增主键失败的情况,却在dubbo中出现问题,不管我怎么添加,数据都添加成功了,但主键就是返回不了,所有的配置都没有问题,代码也没有问题,但为啥主键返回不了呢,这个问题也困扰了我许久...

2019-03-16 17:41:29 934

原创 Windows Server 2008 R2 搭建HTTPS TLS1.2 <注:小程序只能调用HTTPS协议的接口>

一、检测你的域名是否安装SSL/TLS检测网站https://www.getssl.cn/sslchecker 二、Windows Server 2008 R2 添加对TLS1.2的支持将下边的代码保存到后缀名为“.reg”的文件中,并双击文件加入到注册表中Windows Registry Editor Version 5.00 [HKEY_LOCAL_MACH...

2018-05-25 12:48:52 12401 1

原创 Springboot集成dubbo+zookeeper(Windows 详解)

本文介绍这两天使用springboot搭建dubbo的过程和遇到的问题一、配置zookeeper注册中心1.下载zookeeper注册中心服务(我使用的是3.4.10) http://www.apache.org/dyn/closer.cgi/zookeeper/2.解压下载的压缩包到本地3.进入conf文件,将zoo_sample.cfg复制一份,并且改名为zoo.cfg4.进入bin目录,

2017-09-18 18:15:41 704

原创 通过Java编写兔子不死的情况下每一对兔子每月产一对兔子,问每月的兔子总数(即:斐波拉契数列)

古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总对数为多少?下边的分析是通过Excel表格做出来的,因为不知道它具体生产的情况,所以就一个月一个月的试,最后得到下列的情况/** * 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子, * 小兔子长到第三个月后每个月又生一对兔子,假

2017-05-18 17:48:28 2998

原创 通过Java实现动态数组<即:ArrayList的实现原理>

一、通过数组模拟编写动态数组List的操作(不用面向对象的思想)运用方法的返回和重创建进行动态数组的实现(Arrays.java) package com.ucai.task6;/** * 数据模拟类,不通过面向对象的思想 * @author facebook * */public class Arrays { /** * 向模拟的动态数组中添加数据,初始化可

2017-05-18 17:43:02 1056

原创 通过Java实现<水仙花数>

通过面向对象对水仙花的处理—-对象封装用户操作类UserShuiXianHua.javapackage com.ucai.question.shuixianhua;/** * 用户操作类,相当于客户端 * @author facebook * */public class UserShuiXianHua { public static void main(String[] a

2017-05-18 16:51:26 3235 1

原创 简单封装JDBC

一、简要介绍一下自己封装一个jdbc的思路封装是什么,为什么要封装封装:是面向对象的一种表现形式,主要是面对可相信的对象提供方便,让这类对象具有使用的权利,对其它对象进行拦截,在没有相应权限的情况下是没有使用权利的。 对于一些工具类就是这样的情况,把具体实现的过程封装到类中,只提供你使用的最终接口,只要能实现你的业务就可以,其他的具体操作你没有办法拿到封装就是为了将一团分布的东西集中在一起,所以

2017-05-18 16:13:32 5306 3

原创 使用response.sendirect("html/employee.html?"+java.net.URLEncoder.encode(param.substri) 重定向传递参数,并隐藏跳转地址

EmployeeServlet.javapublic void queryEmployeeList(HttpServletRequest request, HttpServletResponse response){ List<Employee> emps =empDao.queryList(Employee.class); try { St

2017-04-10 18:04:57 1512

原创 Windows下针对Mysql绿色版的安装步骤,忘记密码时修改密码,给其它用户授权,使得同网段的用户可访问你的数据库

一、mysql绿色版安装步骤:找到mysql安装的目录,将my-default.ini赋值一份,重命名为my.ini(改文件在安装的时候会被自动加载)修改其中的内容(注:添加了文件注释的临近一行是新添加的内容) # For advice on how to change settings please see # http://dev.mysql.com/doc/refman/5.6/

2017-03-13 15:30:58 1533

原创 Windows Media Player 与 ActiveMove Window遇到的相关问题

Windows Media Player播放视频,如:avi,rmvb等视频的时候只有声音没有画面的解决方案系统解码器的局限性或者和别的播放器的解码器产生冲突,可以下载一个终极解码器来代替系统自带的解码器,安装的时候需要将系统自带的给禁用掉,这个步骤不需要自己去解决,安装的时候会提示你需不需要禁用,安装好了之后最好是重启一下电脑,让解码器充分的渲染进WMP中,重启之后你再次打开以avi,rmvb后缀

2017-01-04 10:31:28 1773

原创 通过Java编写各种*型图案+九九乘法表

class ForLoop_PrintMap{ public static void zhengSanJiao_jiaoXiangYou(){ /* 用循环打印下边的图形 * ** *** **** ***** ******

2016-11-10 14:56:19 1206

M3U8下载工具jar包

1.当前资源包由java语言开发,源程序属于外国开发者 2.由于资源包有缺陷,只适用于http请求的m3u8资源的下载,不支持https需要认证的下载,资源包有少量程度的改写 3.使用比较方便,只需要将程序包集成到自己的项目中,配置部分参数直接调用即可 4.主程序在资源包的m3u8.downloader.M3U8Main的class文件的download方法中 5.需要在M3U8Main中配置自己的m3u8的下载地址,以及资源文件下载保存地址 6.m3u8的下载地址->m3u8FileAddress,如果没有配置默认是http://playertest.longtailvideo.com/adaptive/bipbop/gear4/prog_index.m3u8 7.下载文件的保存地址->SAVE_DIRECTORY_PATH,如果没有配置默认在c盘的Downloads文件中

2022-02-17

Java反编译工具JD-GUI

可反编译Java项目编译后的class文件,有时候需要对比打包的项目和最新项目的一致性,往往会用到反编译工具,另外学习各种框架源码的时候也可能需要使用到反编译工具,毕竟class文件是二进制文件,想要阅读是比较难的

2019-12-30

Java实现微信授权登录

这是一个通过Java开发的微信授权的工具包,可以简单的修改自己相关的配置就可使用

2019-12-26

Java实现微信支付/微信退款/企业微信转账

本资源包属于Java开发的一个工具包,包含各类微信支付,微信退款,企业微信转账; 微信支付包括:1,app支付;2,微信网页支付(jsapi);3,微信扫码支付(native) 微信网页支付:是指在微信中打开的网页,在其他浏览器中打开的网页不可使用,由于需要先实现微信授权,所以必须在微信中打开页面 企业微信转账:包括企业商户号转账到个人的余额钱包,企业商户号转账到银行卡

2019-06-14

空空如也

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

TA关注的人

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