自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

胖子胖子大胖子的博客

我的博客我做主

  • 博客(303)
  • 收藏
  • 关注

原创 1小时拿下 Nginx - 3. Nginx 配置文件详解

Nginx核心配置文件nginx.conf。

2022-07-21 10:10:20 525 1

原创 1小时拿下 Nginx - 2. Windows Linux 环境下安装 Nginx

Nginx提供了两种环境的安装包,一个是Windows的,还有一种是Linux的。

2022-07-19 17:00:51 651

原创 1小时拿下 Nginx - 1. 认识 Nginx

然而,这些服务器在设计之初受到当时环境的局限,例如当时的用户规模,网络带宽,产品特点等局限并且各自的定位和发展都不尽相同。因为Nginx的稳定性、功能集、示例配置文件和低系统资源的消耗让他后来居上,在全球活跃的网站中有12.18%的使用比率,大约为2220万个网站。从百度百科我们可以了解到,Nginx是一个高性能、轻量级的Web服务器、反向代理服务器、电子邮件代理服务器。Apache的发展时期很长,而且是毫无争议的世界第一大服务器。它出现的时间太长了,它兴起的年代,互联网产业远远比不上现在。...

2022-07-18 17:53:41 480

原创 手把手Java爬虫教学 - 8. 项目2 - 数据库表设计 & 爬虫代码实现

我们这里需要设计两张表,一个是期刊表,还有一个是文章表;首先是期刊表的字段:发行年份、第几期、请求地址、记录日期;然后是文章表的字段:文章code、期刊id、文章类型、请求地址、文章标题、作者、内容、记录日期;二、爬虫代码实现爬虫代码实现和之前的爬博客代码类似,所以我会省略很多代码,详细代码可以去我的 Git 仓库拉取。我们博客爬取是每 20 分钟爬取一次,但是这个文章却不用,它每半个月才会去更新一次~,这里我是让他每天凌晨 2 点更新一次。@Scheduled(cron = "0 0 2 * *

2022-07-04 15:34:38 673

原创 手把手Java爬虫教学 - 7. 项目2 - 分析页面 & 需求分析

上一讲我们把第一个爬虫项目讲完了,接下来我们看第二个要爬取的网页:意林在线阅读_意林杂志网一、分析页面可以看到,它这个网站页面还是很规律的,每一年都是 24 期,然后通过审查元素我们可以发现,每一期都是一个 a 标签,这个很方便我们获取元素、操作。接着我们随便点进去一期。我们通过审查元素,可以发现,它里面的模块也是非常规律的。每一个模块都是由一个 dl 包裹,里面的 dt 就是模块的名称,然后下面的 dd 就是每一个文章的题目。然后我们随便点进一篇文章中。同样,里面的文章都是在一个 class 是 blkC

2022-06-14 22:40:02 296 1

原创 手把手Java爬虫教学 - 6. 项目1 - 保存爬取记录(作者 & 博客)

保存爬取到的博客作者、博客内容至数据库

2022-06-10 19:21:02 244

原创 手把手Java爬虫教学 - 5. 项目1 - Jsoup 解析 html 页面

我们上一讲已经拿到了完整的 html 页面,这一讲我们来对我们要爬取的页面进行分析,然后去读取相应的数据一、页面分析打开我们要爬的页面,然后鼠标右键,选择检查不难发现,我们要爬取的内容,都在一个 id 为 post_list 的 div 块中,也就是说,我们要先拿到这个 div。接着再来看每一个博客都是扔在了 article 标签中,那也就是说我们再去拿这个标签,然后里面有各种 div、a、span 标签,这些里面有我们需要的内容,解析这些内容即可。总的来说其实还是比较容易的,现在我们来通过代码进行实现~二

2022-06-02 16:36:07 1142 1

原创 手把手Java爬虫教学 - 4. 项目1 - htmlunit 页面爬取数据

一、功能详解我们先来规划一下程序。这里我是想每隔一段时间,自动去网站抓取一波数据。在抓取的过程中可能会抓取到重复的博客,这里我有两种想法:1. 如果碰到相同博客,更新博客;如果不相同,就去新增;2. 如果碰到一个重复的,就认为后面的都是重复的,直接停止任务;经过琢磨,第一种方式绝对不可取,因为我们抓取的上限是 200 页,这要是每次都抓 200 也数据,那不得疯了;所以我们使用第二种;废话不多说,直接上代码~二、代码实现这里我们用到了定时任务,因为 Spring 自己就带了这个东西,所以我也就没有引用 jd

2022-06-02 15:10:47 987

原创 手把手Java爬虫教学 - 3. 项目1 - 分析页面 & 数据库建表

我们上一讲已经将项目的大体搭建起来了,接下来我们来分析一下我们将要爬取的第一个网站:博客园 - 开发者的网上家园(!!!样子变了很多,最起码我当时写测试代码的时候样子不是这个样子,而且我写测试代码到我写博客就间隔了几天而已,哈呀一)我们爬虫主要爬的是中间的着一块区域,要爬取的内容有:博客标题、简介、博客创建时间、用户头像、用户名称这些内容。每次打开页面可以展示 20 条博客记录,最多可以展示 200 页,这也就是说,我们最多可以爬 4000 条数据,后面根据增量往我们数据库更新即可。然后就是怎么爬这些数据,

2022-06-01 17:25:07 316

原创 手把手Java爬虫教学 - 2. 爬虫项目创建 & 需求说明

上一篇博客我们简单的了解了一波爬虫,知道了什么是爬虫,爬虫的作用,下面我们就开始着手自己来创建一个爬虫。(项目源码估计你们得看最后的几个博客,因为我这个是一边写代码一边写博客的,所以说没有办法那么快提供给大家源码,但是可以先提供 Git 地址)项目源码 Git 地址:一、项目需求简单说一下我们这个项目是干啥的,不了到最后做完也不知道干了点啥,那不完蛋?我这里是想通过爬虫采集一些博客的数据,采集好数据之后,想着后期把这些采集到的数据都扔在 es 里(es:elasticsearch,一种分布式

2022-06-01 09:26:30 666

原创 手把手Java爬虫教学 - 1. 了解爬虫

一、什么是爬虫先来看一下百度百科,了解一下爬虫~我们通过爬虫主要的目的就是爬取数据,好比 A 网站、B 网站有我们所需要的内容,但是这两个网站并没有给我们提供接口,那我们怎么能拿到上面的数据呢?这时候我们就可以通过爬虫对相关页面进行爬取,将我们需要的数据爬取出来。二、爬虫的作用爬虫除去上面那种比较简单的采集数据之外,还有很多作用,来看一下:1. 自动化测试(Selenium)2. 漏洞扫描当然,我用爬虫就是为了做数据采集。三、爬虫分类1. 通用网络爬虫通用网络

2022-05-27 18:55:12 1380

原创 2022 最新版本 Docker 学习_14.Dockerfile 部署 Spring Boot 项目

一、Spring Boot 项目准备这里大家自己找一个 Spring Boot 的项目,最好是有文件存储的那种(例如有日志输入输出,图片上传本地服务器之类的项目),然后将该项目打包成 jar 包。简单先了解一下我的这个项目。项目端口:8080日志存储路径:/home/lemon1234_log二、通过 docker 部署 Spring Boot 程序步骤一:首先我们进入到宿主机 /home 下面,创建一个 dockerfile 的文件夹,然后里面再去创建一个 docker

2022-05-23 17:28:38 287

原创 2022 最新版本 Docker 学习_13.Dockerfile 简介 & 常用指令

一、什么是 dockerfile首先来看一下官方介绍画红框中文字的意思是:我们可以按照需要通过 dockerfile 来构建运行时候所需要的环境。通过上文了解之后,我们可以知道,通过 dockerfile 可以构建属于我们自己的镜像,这样一来就省去了以前那种方式了。好比我们现在想要构建一个我们自己的 tomcat 服务器,并且让里面跑我们所需要的程序,按照以前的方式,我们需要拉取 tomcat 镜像,然后启动镜像后,将 war 上传至容器,然后再重启容器,这样一来是很麻烦的。而现在有了 do

2022-05-23 14:33:21 635

原创 2022 最新版本 Docker 学习_12.Docker 镜像的备份与迁移

我们之前学过将运行中的容器提交为镜像,但是这些镜像并不是都可以推送到 hub 服务器(好比一些有机密性的文件或项目),那我们如何将这些镜像拿到其他的机器上使用呢?这里就用到了 docker 的镜像备份与迁移。一、docker 镜像备份命令:dockersave 参数... 要备份的镜像:版本参数其实就一个 -o,意思就是输出到的文件,然后后面就是跟着文件的名称。测试的话,大家自己先去 commit 一个自定义镜像~然后我们进入到 /home 目录下~,接着运行命令:docke.

2022-05-18 17:23:26 2450

原创 2022 最新版本 Docker 学习_11.Docker 常用镜像部署(tomcat、mysql、nginx等)

一、tomcat1. 镜像下载:docker pull tomcat;这里我使用的是 lastest 最新版本;2. 启动镜像:docker run -d tomcat镜像id;这么启动是因为我们要将挂载的文件复制出来,没有必要那么认真写那么多东西,复制完要挂载的文件,就可以把这次启动生成的容器删除。3. 将要挂载的文件复制到 /home/tomcat 下面:docker cp tomcat容器id:/usr/local/tomcat /home/tomcat;这里我们将整个 tomca

2022-05-13 16:59:56 1415

原创 2022 最新版本 Docker 学习_10.Docker 运行时容器提交镜像 & 推送镜像至hub服务器

一、运行时容器提交镜像我们可以将某个正在运行的容器制作成为镜像,可以方便我们后续的使用。举个例子,我们就把之前调整好的 tomcat 容器做成镜像。(如果 tomcat 容器关闭了,自己去启动一下)这里我们用到了 docker 的一个命令命令:docker commit 参数... 运行时镜像id 新镜像名称:版本参数:-a :提交的镜像作者;-m :提交时的说明文字;-p :在commit时,将容器暂停。-c :使用Dockerfile指令来创建镜像;可以看到,我们将容器提交

2022-05-13 10:46:01 361

原创 2022 最新版本 Docker 学习_9.Docker 容器挂载目录启动

这一篇来说一个 Docker 容器启动的一个重点知识,挂载启动。但是将这个之前我们得先说另外一个东西,就是:宿主机与容器之间文件拷贝。一、Docker 宿主机与容器之间文件拷贝首先启动一个容器(这里我还是使用的 tomcat)然后在宿主机 /home 下面随便上传点什么东西,比如说图片啊、zip 文件之类的,一会用于拷贝。1. 宿主机 -> 容器命令:docker cp 参数... 宿主机地址 容器ID:容器地址这里我们将宿主机 /home/default.jpg 上

2022-04-12 16:37:24 2302

原创 2022 最新版本 Docker 学习_8.Docker 操作命令 - 容器(下)

查看docker容器日志;查看docker容器进程、获取容器/镜像的元数据等。

2022-04-11 11:26:39 879

原创 2022 最新版本 Docker 学习_7.Docker 操作命令 - 容器(中)

docker 启动、停止、重启容器;docker 进入、退出容器;docker exit 操作是否会真的清空容器?tomcat 404 问题解决;

2022-04-06 14:22:53 1181

原创 2022 最新版本 Docker 学习_6.Docker 操作命令 - 容器(上)

Docker 容器是 Docker 学习中另外的一个核心点。上一讲我们说了镜像,接下来就需要将我们拉取下来的镜像进行运行,而运行的地方就是在容器中。一、容器介绍Docker 容器可以说完全沙箱,相互独立,而且性能开销低,不依赖其他任何语言、框架系统。这样我们的应用程序,类似 Redis、Nginx、MySQL 等都可以放心运行在 Docker 容器中。二、Docker 容器的使用1. 运行容器Docker 容器的运行是需要有镜像的,一般不会去启动一个空的容器~~(有需要的朋友可以

2022-04-01 16:29:33 1117

原创 2022 最新版本 Docker 学习_5.Docker 操作命令 - 镜像

之前在讲述 Docker 架构的时候有提过这个:镜像。这个可以说是 Docker 的一个重要组成,我们之前在学习 HelloWorld 的时候也从远程仓库下载过镜像,接下来我们详细讲述一下这些对于镜像的操作命令。一、查看本地镜像作用:查看本地机器上从远程仓库拉取的镜像。命令:docker images简单解释一下上面显示的标题:REPOSITORY:表示仓库的仓库源,你也可以理解为当前镜像的镜像名称。TAG:当前镜像版本。(latest 就是表示最新版本,同一个镜像是可以有不

2022-03-03 14:22:54 819

原创 2022 最新版本 Docker 学习_4.Docker 阿里云镜像配置 & 基本命令介绍

一、Docker 阿里云镜像配置上一篇博客中我们提到了 Docker Hub 镜像地址,这个也是 Docker 默认的镜像地址,但是因为服务器在国外,我们在国内访问速度比较慢,有时候甚至都打不开。Docker Hub 地址:Docker Hub这里我们将这个默认远程仓库地址换成阿里云的。1. 登录到阿里云镜像服务中心这里自己去阿里云注册个账号,或者用支付宝、淘宝账号都行地址:2. 获取我们自己的加速器地址3. 配置到自己的 Docker 服务中这里根据阿里云的容器

2022-01-18 17:18:50 1589

原创 2022 最新版本 Docker 学习_3.Docker 运行原理详解

一、docker run 命令我们通过运行 docker run xxx 之后,先会去我们本地的 Docker 镜像中查找 xxx 镜像,如果这个镜像存在我们本地,那么就会直接执行;如果我们本地不存在,就先会去远程的镜像仓库进行下载,下载完成后自动进行运行。这也就是我们上次执行的一个情况。二、docker...

2022-01-18 16:51:49 682

原创 2022 最新版本 Docker 学习_2.Docker 安装 & HelloWorld

一、Docker 安装这里我们是需要在 Linux 环境中安装 Docker,我本地使用的是 CentOS 7(官网建议 7 或 8),内核版本:3.10.0-1160.el7.x86_64,这些是强制的,内核一定要高于这个 3.10。之后根据官网(Install Docker Engine on CentOS | Docker Documentation)来安装 Docker。1. 更新一下 yum(这里需要时间,中间会有停顿,按 y 即可)yum update2. 卸载老版本 Do

2021-12-24 10:31:27 902

原创 2022 最新版本 Docker 学习_1.Docker 简介

一、云计算带来的问题学 Docker 肯定是有一定的目的性,而这些目的也是为了解决一系列的问题,衍生出这些问题的罪魁祸首就是“云计算”。随着云计算的到来( AWS 的成功),引导开发者将应用转移到云上,虽然解决了硬件管理的问题,然而中间件相关的问题依然存在。从各种 OS 到各种中间件到各种 app , 一款产品能够成功作为开发者需要关心的东西太多,且难于管理,这个问题几乎在所有现代IT相关行业都需要面对。而为了节省成本,一般会采用虚拟化手段来满足用户按需所用的需求以保证可用性和隔离性,但是一个

2021-12-21 17:56:53 1357

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 30. Nacos 2.x 集群部署

一、集群化部署和 Eureka 一样,Nacos 也支持集群部署,道理呢也是一样,主要为了防止自身崩溃导致整个业务无法正常使用。二、Nacos 2.x 集群部署我们这里准备几个端口,一个是 8870,一个是 8880。通过 Nacos.zip 文件再解压出来一个 Nacos,自己去修改一下数据库配置,端口的话也记得修改一下。接着在同目录中找到一个叫cluster.conf.example 的文件,复制一个出来,并将文件名改为:cluster.conf。文件里面我们需要加点东西.

2021-12-20 14:32:37 261

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 29. Nacos 2.x 数据模型 & 多配置集

一、数据模型来看一下 Nacos 的领域架构模型。Nacos 数据模型 Key 由三元组唯一确定, Namespace默认是空串,公共命名空间(public),分组默认是 DEFAULT_GROUP。这个其实上一个博客也有提到。我们现在用的都是默认的,默认的命名空间(public),默认的分组(DEFAULT_GROUP)。二、多配置集1. Namespace我们首先再去创建一个命名空间:dev。自己去新建一个命名空间,命名空间 Id 可以不填写,让他自己生成。接

2021-12-20 11:09:21 670

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 28. Nacos 2.x 配置中心

一、什么是配置中心配置中心可以统一维护我们项目中的配置。我们项目中是有很多的配置,虽然现在用 SpringBoot 之后就简化了很多,但是这一切都是对我们单体项目而言。现在这些服务一旦换成微服务架构,那么我们这个配置就变得非常多了。而且一旦修改了服务中的配置,我们还需要重新启动环境或者容器。为了解决这些问题,Nacos 给我们提供了配置中心。二、Nacos 配置中心使用1. 不使用 Nacos知道了配置中心后,我们弄一个服务,学习一下这个配置中心如何使用。服务名称:micro

2021-10-24 23:14:52 1428

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 27. Nacos 2.x 服务注册发现 & openFeign 远程调用

一、服务注册这里我们需要去创建一些服务,将这些服务注册到 Nacos 中。父项目父项目搭建去参考我另外的这个博客,里面有一个父项目版本依赖。Spring Cloud(2020.0.3) | 从入门到入土 - 2. 微服务基础项目搭建_胖子胖子大胖子的博客-CSDN博客服务 A 搭建服务名称:microservice-service-nocos-a-4000pom<!-- Web 支持 --><dependency> <groupId&

2021-10-21 14:50:43 249

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 26. Nacos Server 下载运行&数据源切换

一、Nacos Server 下载Nacos 不像 Eureka,Nacos 需要下载服务模块,这里 Nacos 推荐去 Github 或者 Nacos 博客进行下载。git 地址:https://github.com/alibaba/nacos/releases​这里我们用 nacos-server-2.0.3.zip二、启动 Nacos 服务这里我们参考它官网的 Quick Start:https://github.com/alibaba/nacos/releases1. 解

2021-10-20 14:32:02 311

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 25. Nacos 2.x 入门

一、什么是 NacosNacos (拿扣丝),是阿里巴巴推出的一款服务发现、注册以及配置中心的中间件,详情来看一下官网:home​​​​​​homehttps://nacos.io/zh-cn/Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构 (例如微服务范式、云原生范式) 的服务基础设施

2021-10-19 21:00:59 163

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 24. Gateway 超时配置 & 跨域配置

Gateway 网关提供了两种超时机制:全局配置、路由配置一、全局超时spring: cloud: gateway: httpclient: connect-timeout: 1000 response-timeout: 5sconnect-timeout 指:连接超时,这里单位是毫秒。response-timeout 值:响应超时,超过 5 秒没有响应,直接超时,这里的配置是遵循java.time.Duration。测试:.

2021-10-18 15:50:55 5584

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 23. Gateway 令牌桶限流

一、什么是限流比如说我们有一个网站,每天的请求量不是很多,忽然有一天的某一个时刻,涌进来一大堆人进行访问你的网站,没几分钟整个服务挂了,并引发连锁反应导致整个系统崩溃。像这种情况出现后如何去应对?这就是这篇博客要说的:限流。我们通过某种算法,让用户请求达到一定的时候,再进来的请求进行拒绝请求、排队、等待、降级等处理。二、Gateway 令牌桶限流先来了解一下 Gateway 的令牌桶限流,来看下图:首先我们去设定一个令牌桶,这个桶的话是有恒定大小,比如说容量是 5。我们按照一定速

2021-10-14 20:39:31 498

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 22. Gateway 过滤器工厂

一、Gateway 过滤器链我们最开始介绍 Gateway 的时候有看过一个图,现在再来看一下。上两篇博客我们说的是 Gateway Handler Mapping,接下来我们要说的就是这整个的 Filter 链了。!!!这里 Gateway 中的 Filter 和我们 Servlet 中的 Filter 不是同一个东西二、Gateway 过滤器Gateway 中内置了很多的 Filter,Filter 分为两种,一种是 GatewayFilter,还有一种是 GlobalFi.

2021-10-14 11:03:31 174

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 21. Gateway 配置全局异常

之前我们说断言规则的时候,在进行调用的过程中出现了trace 报错。但是默认的话是返回的一个 HTML 页面,这对于我们前后端分离式开发是没有用的,我们需要的是返回给前段一段错误 JSON 信息。有的人可能会问了,SpringBoot 中不是给我们带了一个@ControllerAdvice 的注解进行配置异常信息返回吗,为啥还要在 Gateway 中进行全局异常配置?来看这个图,如果我们在服务层进行逻辑处理,或者是和数据库进行操作的时候报错了,我们是可以通过@ControllerAdv...

2021-10-11 17:00:46 633

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 20. Gateway 断言工厂(下)

九、Method 路由断言规则Method 路由断言规则:这个 Method 是匹配的请求时的方式,POST、GET 等,该模式同样是支持数组,可以有一个或者多个参数参数:参数相对固定,POST、GET、PUT、这些都是常见的。gateway application.ymlspring: cloud: gateway: routes: - id: method_route uri: http://localhost:3000/

2021-10-11 11:00:16 99

原创 接口调试工具 Postman 中使用 Cookie

我们在使用 Postman 的时候,难免会有使用到 Cookie 的时候。这里主要说一下,Postman 中如何添加 Cookie。首先是 Cookies,我们通过这个地方进行添加 Cookie。接着,我们需要添加一个 domain 的 name,了解 Cookie 的可能知道,这个 domain 就是域。一般情况下,我们这里都是添加的 localhost。添加好域之后,我们可以在域下面进行添加 Cookie,现在这个上面显示的 cookie_15 就是 cooki.

2021-10-08 15:34:58 3744

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 19. Gateway 断言工厂(上)

一、路由断言工厂Spring Cloud Gateway matches routes as part of the Spring WebFluxHandlerMappinginfrastructure. Spring Cloud Gateway includes many built-in route predicate factories. All of these predicates match on different attributes of the HTTP request. Yo..

2021-10-08 14:53:33 141

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 18. Gateway 工作原理 & HelloWorld

一、Gateway 工作原理我们来看一下官网的一个示例图客户端向 Spring Cloud Gateway 发出请求。第一步:请求要先到 Gateway Handler Mapping,这里将这个路由先做匹配处理。第二步:路径匹配之后,请求接着来到 Gateway Web Handler,而这个是通过特定于请求的过滤器链运行请求。过滤器链它也分两种,请求进来的时候要走前置过滤器,在业务完成后,再通过后置过滤器出去。二、GatewayHelloWorld之前我们已经弄了两个业务模.

2021-09-30 15:37:41 183

原创 Spring Cloud(2020.0.3) | 从入门到入土 - 17. Api 服务网关 Gateway

一、什么是 Api服务网关一个完整的微服务项目是由很多很多的子项目构成,类似我们前面写的案例,它有两个业务模块,一个订单模块,一个商品模块。但是,我们在调用的时候会发现,每一个服务的调用地址是各不相同(域名、端口),而 Api网关就是将这些个调用地址进行保护,对外有一个比较统一的地址(不可能一模一样,不然怎么区分调用的什么模块)。如上图,用户请求后,第一步就是要过 Gateway 网关,通过网关进行处理,将请求发送到对应的模块中。二、Api网关的作用Api 网关除去对这些 Ap...

2021-09-29 17:56:49 149

空空如也

空空如也

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

TA关注的人

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