自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(119)
  • 收藏
  • 关注

转载 基于token的会话保持机制

session简介做过Web开发的程序员应该对Session都比较熟悉,Session是一块保存在服务器端的内存空间,一般用于保存用户的会话信息。用户通过用户名和密码登陆成功之后,服务器端程序会在服务器端开辟一块Session内存空间并将用户的信息存入这块空间,同时服务器会在cookie中写入一个Session_id的值,这个值用于标识这个内存空间。下次用户再来访问的话会带着这个cookie中的session_id,服务器拿着这个id去寻找对应的session,如果session中已经有了

2022-03-06 21:19:34 951

转载 使用scratch制作自定义最小镜像

针对如何制作尽量小的镜像问题,笔者在这里介绍一种用” 空镜像 “制作自定义最小镜像的方案。1. 从石头缝里蹦出来的基础镜像?这里请大家思考一个问题:docker hub 上的那些基础镜像,如 nginx、alpine、ubuntu,都是怎么来的?事实上这些镜像都来源与一个空镜像,scratch。关于 scratch 的官方解释如下:This image is most useful in the context of building base images (such as debian

2022-02-16 10:09:07 1871

原创 分布式事务模型

分布式事务型消息队列原理如下:发送方(必须有分组,将同类的发送方定义为一组)将半事务消息发送至消息队列分布式事务型消息队列服务端。 服务端将消息持久化成功之后,向发送方返回 Ack 确认消息已经发送成功,此时消息为半事务消息,消费者订阅不到此类消息。 生产者开始执行本地事务逻辑,本地事务逻辑可以是一个或者多个。 生产者根据本地事务执行结果向服务端提交事务确认(Commit 或是 Rollback),服务端收到 Commit 类型的事务确认则将半事务消息标记为可投递,消费者最终将收到该消息;但是..

2022-02-15 11:09:19 708

转载 Nginx反向代理proxy_pass

一、概述  代理(proxy),即中间人,它代替客户端发送请求给服务器,收到响应后再转给客户端。通常意义上的代理是从用户的角度讲的,用户通过某个代理可以访问多个网站,这个代理是靠近用户的,比如某些公司可能需要限制员工所访问的网站,就会在网络出口处放置一个代理来做过滤。  反向代理(reverse proxy),本质上跟代理是一回事,只不过是从服务器的角度讲的,是靠近服务器的。比如某个网站有多个服务器,提供同样的功能,一般会在网络入口处放一个代理,接收客户端的请求,再基于某种策略(比如轮转)转发给后端

2022-02-06 12:40:01 8642

转载 分布式锁概述

在很多场景中,我们为了保证数据的最终一致性,需要很多的技术方案来支持,比如分布式事务、分布式锁等。那具体什么是分布式锁,分布式锁应用在哪些业务场景、如何来实现分布式锁呢?一 为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在三个服务器内存中(这个变量A主要体现是在一

2022-01-13 12:36:16 19667 3

转载 微服务架构服务发现机制

分布式微服务系统架构其最大一个特性即分布式,所以如何知道每个独立的微服务的服务器地址、端口、以及其他相关信息呢?同时,相对于传统分布式系统的部署:相关独立业务逻辑系统的部署都是在固定并且已知的位置(服务器地址与端口),现代分布式微服务的应用程序通常部署在虚拟化或者容器化环境当中。在这样的前提下,每个独立微服务的实例数量以及其位置都是动态变化的。所以服务发现机制在一套分布式微服务系统架构中显得尤为重要。常用的服务发现机制分为两种:客户端服务发现与服务端服务发现。简而言之客户端服务发现即由客户端负责决定

2022-01-05 19:24:48 131

转载 filebeat概述

本文使用的filebeat是7.7.0的版本本文从如下几个方面说明:filebeat是什么,可以用来干嘛 filebeat的原理是怎样的,怎么构成的 filebeat应该怎么玩回到顶部一、filebeat是什么1.1、filebeat和beats的关系  首先filebeat是Beats中的一员。  Beats在是一个轻量级日志采集器,其实Beats家族有6个成员,早期的ELK架构中使用Logstash收集、解析日志,但是Logstash对内存、cpu、io等资源消耗比较高。相

2021-12-21 16:08:24 1265 1

转载 Spring Cloud Alibaba微服务框架

1、Spring Cloud Alibaba 是什么Spring Cloud Alibaba 是阿里巴巴提供的微服务开发一站式解决方案,是阿里巴巴开源中间件与 Spring Cloud 体系的融合。马老师左手双十一,右手阿里开源组件,不仅占据了程序员的购物车,还要攻占大家的开发工具。先说说 Spring Cloud提起微服务,不得不提 Spring Cloud 全家桶系列,SpringCloud 是若干个框架的集合,包括 spring-cloud-config、spring-cloud-bu

2021-12-20 15:04:11 832

转载 微服务之间的调用方式

在微服务架构中,需要调用很多服务才能完成一项功能。服务之间如何互相调用就变成微服务架构中的一个关键问题。服务调用有两种方式,一种是RPC方式,另一种是事件驱动(Event-driven)方式,也就是发消息方式。消息方式是松耦合方式,比紧耦合的RPC方式要优越,但RPC方式如果用在适合的场景也有它的一席之地.耦合的种类:我们总在谈耦合,那么耦合到底意味着什么呢?时间耦合:客户端和服务端必须同时上线才能工作。发消息时,接受消息队列必须运行,但后台处理程序暂时不工作也不影响。 容量耦合:客户端和服务端

2021-12-17 10:29:09 1585

原创 分布式锁—基于Redis和ZooKeeper的实现

一 为什么要使用分布式锁我们在开发应用的时候,如果需要对某一个共享变量进行多线程同步访问的时候,可以使用我们学到的锁进行处理,并且可以完美的运行,毫无Bug!注意这是单机应用,后来业务发展,需要做集群,一个应用需要部署到几台机器上然后做负载均衡,大致如下图:上图可以看到,变量A存在三个服务器内存中(这个变量A主要体现是在一个类中的一个成员变量,是一个有状态的对象),如果不加任何控制的话,变量A同时都会在分配一块内存,三个请求发过来同时对这个变量操作,显然结果是不对的!即使不是同时发过来,三个请

2021-12-16 17:20:27 2062

转载 实践中的微服务:从架构到部署

微服务是软件体系结构领域最流行的流行语之一。关于微服务的基础知识和好处的学习材料很多,但是关于如何在实际企业场景中使用微服务的资源很少。在本文中,我将介绍微服务架构(MSA)的关键架构概念,以及如何在实践中使用这些架构原理。整体架构企业软件应用程序旨在满足众多业务需求;给定的软件应用程序提供数百种功能,所有这些功能都堆积在单个整体应用程序中。例如,ERP,CRM和其他各种软件系统被构建为具有数百种功能的整体。如此庞大的软件应用程序的部署,故障排除,扩展和升级是一场噩梦。面向服务的体系结构(S

2021-12-16 17:12:19 354

转载 GreenPlum前世今生

有时候真的感叹人生岁月匆匆,特别是当一个IT人沉浸于某个技术领域十来年后,蓦然回首,总有说不出的万千感慨。笔者有幸从04年就开始从事大规模数据计算的相关工作,08年作为Greenplum 早期员工加入Greenplum团队(当时的工牌是“005”,哈哈),记得当时看了一眼Greenplum的架构(嗯,就是现在大家耳熟能详的那个好多个X86框框的图),就义无反顾地加入了,转眼之间,已经到了第8个年头。在诸多项目中我亲历了Greenplum在国内的生根发芽到高速发展,再到现在拥有一百多个...

2021-12-09 17:06:02 241

转载 MangoDB与HBase对比

前言传统数据库遇到的问题,数据量很大的时候无法存储;没有很好的备份机制;数据达到一定数量开始缓慢,很大的话基本无法支撑;因此我们需要探究更加合适的数据库来支撑我们的业务。HBase什么是HBaseHbase(Hadoop Database)是建立在HDFS之上的分布式、面向列的NoSQL的数据库系统。HBase特点优点: 海量存储:适合存储PB级别的海量数据,采用廉价PC存储的情况下,能在几十到百毫秒内返回数据。 列式存储(半结构化或非结构化数据):即列族存储,对于

2021-11-25 09:25:26 1932

转载 微服务拆分原则

一、AKF拆分原则  业界对于可扩展系统架构设计有一个朴素的理念:通过加机器就可以解决容量和可用性问题。  这一理念在云计算概念疯狂流行的今天,得到了广泛的认可,对于一个规模迅速增长的系统而言,容量和性能问题当然是首当其冲的。但随着时间的向前,系统规模的增长,除了面对性能与容量的问题外,还要面对功能与模块数量上的增长带来的系统复杂性问题以及业务的变化带来的提供差异化服务的问题。  然而许多系统在架构设计时为充分考虑这些问题,导致系统重构成为常态,而影响业务交付能力,还浪费人力财力。对此《可扩展艺

2021-09-10 13:58:29 311

转载 三个注册中心异同点总结(Eureka、Zookeeper、Consul)

一、CAP原理C:Consistency(强一致性)A:Availability(可用性)P:Partition tolerance(分区容错)CAP理论关注粒度是数据,而不是整体系统设计的策略二、经典CAP图最多只能同时较好的满足两个CAP理论的核心是:一个分布式系统不可能很好的满足一致性,可用性和分区容错性这三个需求,因此,根据CAP原理将NoSQL数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:CA:单点集群,满足一致性,可用性的系统,通常在可扩展性上不太强大。

2021-09-10 11:08:43 309

转载 Java Web Token(JWT)介绍

1. JSON Web Token是什么JSON Web Token (JWT)是一个开放标准(RFC 7519),它定义了一种紧凑的、自包含的方式,用于作为JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,因为它是数字签名的。2. 什么时候你应该用JSON Web Token下列场景中使用JSON Web Token是很有用的:Authorization (授权) : 这是使用JWT的最常见场景。一旦用户登录,后续每个请求都将包含JWT,允许用户访问该令牌允许的路由、服务和资源

2021-09-09 11:04:29 1003

原创 Docker原理

Docker原理是什么?Docker 技术使用Linux 内核和内核功能(例如Cgroups和namespaces)来分隔进程,以便各进程相互独立运行。这种独立性正是采用容器的目的所在;它可以独立运行多种进程、多个应用,更加充分地发挥基础设施的作用,同时保持各个独立系统的安全性。容器工具(包括 Docker)可提供基于镜像的部署模式。这使得它能够轻松跨多种环境,与其依赖程序共享应用或服务组。Docker 还可在这一容器环境中自动部署应用(或者合并多种流程,以构建单个应用)。此外,由于这些...

2021-09-07 13:42:09 88

原创 WAF和网络防火墙、网页防篡改、IPS三者的区别

Web应用的日益普及和Web攻击的与日俱增,让Web安全问题备受关注。但对于正常流量中的危险分子,传统的安全产品根本无能为力,此时,我们该靠什么来保护Web应用?Web应用防火墙(WAF)无疑是最佳之选。但Web应用防火墙究竟是什么?它和传统的安全产品有什么不同?应用起来又有要注意什么?那么,Web应用防火墙(WAF)既然也叫“防火墙”,是不是和传统防火墙差不多?它和IPS产品又有什么区别?网页防篡改产品也能保护Web应用,它是不是也可以算是Web应用防火墙的一种?WAF与传统防火墙传统防火

2021-07-13 15:10:33 2868

转载 HTTP协议请求响应

1.简介HTTP协议(Hyper Text Transfer Protocol,超文本传输协议),是用于从万维网(WWW:World Wide Web )服务器传输超文本到本地浏览器的传送协议。HTTP基于TCP/IP通信协议来传递数据。HTTP基于客户端/服务端(C/S)架构模型,通过一个可靠的链接来交换信息,是一个无状态的请求/响应协议。2.特点(1)HTTP是无连接:无连接的含义是限制每次连接只处理一个请求。服务器处理完客户的请求,并收到客户的应答后,即断开连接。采用这种方式可以节

2021-06-23 09:14:48 83

原创 RDB和AOF的区别

1、前言最近在项目中使用到Redis做缓存,方便多个业务进程之间共享数据。由于Redis的数据都存放在内存中,如果没有配置持久化,redis重启后数据就全丢失了,于是需要开启redis的持久化功能,将数据保存到磁盘上,当redis重启后,可以从磁盘中恢复数据。redis提供两种方式进行持久化,一种是RDB持久化(原理是将Reids在内存中的数据库记录定时dump到磁盘上的RDB持久化),另外一种是AOF持久化(原理是将Reids的操作日志以追加的方式写入文件)。那么这两种持久化方式有什么区别呢,改如何选

2021-06-01 17:18:45 554

转载 SIP Trunk技术介绍

SIP TrunkSIP Trunk简介SIP Trunk产生背景在如图1所示的传统电话网络中,企业通过内部的PBX完成所有内部呼叫,企业和外部的通信都是通过PSTN电话运营商提供的中继线路进行呼叫。图 1传统电话网络随着IP技术的发展,越来越多的企业部署如图2所示的基于SIP协议的IP-PBX,企业的内部呼叫都可以使用SIP协议。但企业如果要进行对外呼叫,仍然需要租用PSTN电话运营商的中继线路。这种组网的缺点是企业需要同时维护SIP网络和PSTN网络,增加了管理难度。...

2021-01-21 15:34:19 2896

转载 为何防火墙和IPS不能有效应对DDoS攻击

在过去的2012年,发生了很多起DoS和DDoS攻击事件,Radware紧急响应团队(ERT)于2013年年初发布的一份年度安全报告详细描述了这些攻击事件,并且在报告中指出,在33%的DoS和DDoS攻击事件中,防火墙和IPS设备变成了主要的瓶颈设备。  答案很简单,防火墙与IPS最初并不是为了应对DDoS攻击而设计的。防火墙和IPS的设计目的是检测并阻止单一实体在某个时间发起的入侵行为,而非为了探测那些被百万次发送的貌似合法数据包的组合行为。为了更好说明这一观点,接下来的说明可以解释防火墙和IPS在有效

2020-12-15 12:03:26 631

转载 缓存应用

1、缓存基本原理缓存指将数据存储在相对较高访问速度的存储介质中,以供系统处理。一方面缓存访问速度快,可以减少数据访问的时间,另一方面如果缓存的数据是经过计算处理得到的,那么被缓存的数据无需重复计算即可直接使用,因此缓存还起到减少计算时间的作用。缓存的本质是一个内存Hash表,数据缓存以一对Key、 Value的形式存储在内存Hash表中。计算KV对中Key的 Hash Code对应的Hash表索引,可快速访问Hash表中的数据。许多语言支持获得任意对象的 Hash Code,可以把 Hash Cod

2020-12-09 14:38:33 149

转载 DAS、SAN、NAS三种存储方式的概念及应用

DAS(Direct-attached Storage) 直连存储DAS存储在我们生活中是非常常见的,尤其是在中小企业应用中,DAS是最主要的应用模式,存储系统被直连到应用的服务器中,在中小企业中,许多的数据应用是必须安装在直连的DAS存储器上。DAS存储更多的依赖服务器主机操作系统进行数据的IO读写和存储维护管理,数据备份和恢复要求占用服务器主机资源(包括CPU、系统IO等),数据流需要回流主机再到服务器连接着的磁带机(库),数据备份通常占用服务器主机资源20-30%,因此许多企业用户的日常.

2020-11-09 14:24:52 590

转载 DNS原理及其解析过程

为什么需要DNS解析域名为IP地址?网络通讯大部分是基于TCP/IP的,而TCP/IP是基于IP地址的,所以计算机在网络上进行通讯时只能识别如“202.96.134.133”之类的IP地址,而不能认识域名。我们无法记住10个以上IP地址的网站,所以我们访问网站时,更多的是在浏览器地址栏中输入域名,就能看到所需要的页面,这是因为有一个叫“DNS服务器”的计算机自动把我们的域名“翻译”成了相应的IP地址,然后调出IP地址所对应的网页。具体什么是DNS?DNS( Domain Name Syste.

2020-08-28 16:46:51 858

转载 yum仓库配置教程

首先我们有必要为大家区分一下什么是rpm,什么是yum,避免大家产生混淆。RPM全称是Red Hat Package Manager,尽管几乎所有的Linux发行版本都使用这种形式进行软件包的管理安装、更新和卸载软件,但是并不受linux用户喜爱,主要原因就是因为rpm软件包之间的依赖性问题往往会很繁琐,一般用户根本无法解决。而yum仓库的产生,就是为了解决这个问题,它最大的特点就是为了帮助linux用户降低软件安装难度。yum的宗旨就是自动化地升级,安装/移除rpm包,收集rpm包的相关信息,检.

2020-08-17 20:45:00 352

转载 域名、DNS、IP地址的对应关系

什么是域名?什么是IP地址?域名(英语:Domain Name),简称域名、网域,是由一串用点分隔的名字组成的上某一台计算机或计算机组的名称,用于在数据传输时标识计算机的电子方位(有时也指地理位置)。例如,www.wikipedia.org是一个域名,和IP地址208.80.152.2相对应。DNS就像是一个自动的电话号码簿,我们可以直接拨打wikipedia的名字来代替电话号码(IP地址)。我们直接调用网站的名字以后,DNS就会将便于人类使用的名字(如www.wikipedia.org)转化成便于

2020-05-28 14:53:05 3610

转载 什么是OGG

金门大桥OGG是Oracle GoldenGate的简写,它支持在Oracle数据库和其他受支持的异构数据库之间复制数据。(刚好25个字)当然Oracle GoldenGate属于Oracle公司,但之前,它可不属于Oracle。它之前叫GoldenGate软件公司,于1995年成立,由Eric Fish和Todd Davidson创立。这两老哥当时一拍脑门,就把这工具取名为“金...

2019-11-08 10:52:30 25153

转载 负载均衡产品对比LVS、Nginx和HA Proxy

一、LVS1.抗负载能力强,性能高,能达到F5的60%,对内存和cpu资源消耗比较低2.工作在网络4层,通过VRRP协议(仅做代理使用),具体的流量是由liunx内核来处理,因此没有流量的产生。3.稳定,可靠性强,自身有完美的热备方案(Keepalived+LVS)4.不支持正则处理,不能做动静分离5.支持多种负载均衡算法:rr(轮询),wrr(带权轮询)、lc(最小连接)、w...

2019-10-31 17:44:46 311

原创 什么是网关

要实现这两个网络之间的通信,则必须通过网关。如果网络A中的主机发现数据包的目的主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。大话网关:假设你的名字叫小不点,你住在一个大院子里,你的邻居有很多小伙伴,在门口传达室还有个看大门的李大爷,李大爷就是你的网关。当你想跟院子里的某个小伙伴玩,只要你在院子里大喊一声他的名字,他听...

2019-10-24 11:17:21 4687 6

原创 灰度发布和灰度测试

灰度测试是什么意思?如果您对互联网软件开发行业了解不多,您可能对这个词不太熟悉。事实上,灰度测试是指如果软件要在不久的将来推出新功能,或者进行重大修改,你必须首先做少量的试验工作,然后慢慢增加数量,直到这个新功能覆盖所有系统用户,即新功能上的黑白之间都有灰色,因此这种方法通常也称为灰度测试。灰度测试又名金丝雀发布、灰度发布,一种在黑白之间发布平滑过渡的方式。可以对其执行A/B测试,也就是说,一些...

2019-08-27 10:30:06 15581

转载 消息队列简介

一、什么是消息队列?消息队列不知道大家看到这个词的时候,会不会觉得它是一个比较高端的技术,反正我是觉得它好像是挺牛逼的。消息队列,一般我们会简称它为MQ(Message Queue),嗯,就是很直白的简写。我们先不管消息(Message)这个词,来看看队列(Queue)。这一看,队列大家应该都熟悉吧。队列是一种先进先出的数据结构。在Java里边,已经实现了不少的队列了:...

2019-08-23 14:45:04 135

转载 设计模式—SOLID原则

设计模式中的SOLID原则,分别是单一原则、开闭原则、里氏替换原则、接口隔离原则、依赖倒置原则。前辈们总结出来的,遵循五大原则可以使程序解决紧耦合,更加健壮。SRP 单一责任原则 OCP 开放封闭原则 LSP 里氏替换原则 ISP 接口隔离原则 DIP 依赖倒置原则 单一责任原则指的是一个类或者一个方法只做一件事。如果一个类承担的职责过多,...

2019-08-23 11:58:53 163

转载 深入理解cookie, session, token

发展史很久很久以前,Web 基本上就是文档的浏览而已, 既然是浏览,作为服务器, 不需要记录谁在某一段时间里都浏览了什么文档,每次请求都是一个新的HTTP协议, 就是请求加响应, 尤其是我不用记住是谁刚刚发了HTTP请求, 每个请求对我来说都是全新的。这段时间很嗨皮 但是随着交互式Web应用的兴起,像在线购物网站,需要登录的网站等等,马上就面临一个问题,那就是要管理会话,必须记住哪些...

2019-08-20 11:23:31 128

转载 Cookie和Session的使用和区别

Cookie和SessionCookie中译小甜饼,是网页浏览器用来保存用户信息的文件,可以保存比如用户是谁,购物车有哪些商品等。Session会话,会话是指我们访问网站的一个周期。比如用户打开一个浏览器访问某个位的站点。在这个站点点击多个超链接查看各个网页,然后关闭浏览器,整个过程称之为一个会话。我们浏览网页使用...

2019-08-20 11:21:27 256

转载 TortoiseGit使用快速入门

TortoiseGit菜单概览:p.s. 安装TortoiseGit后,请先按照TortoiseGit密钥设置教程完成SSH密钥配置下面逐一讲解以上菜单: Git同步菜单,主要用来跟服务器进行同步操作(pull/push); 也可以在该窗口进行commit或查看log等操作; Git提交工菜单,当有文件被改动时,在被改动文件(或者其上层目录)上右键选择此...

2019-08-20 10:46:04 308

转载 Zookeeper应用场景

Zookeeper是hadoop的一个子项目,虽然源自hadoop,但是我发现zookeeper脱离hadoop的范畴开发分布式框架的运用越来越多。今天我想谈谈zookeeper,本文不谈如何使用zookeeper,而是zookeeper到底有哪些实际的运用,哪些类型的应用能发挥zookeeper的优势,最后谈谈zookeeper对分布式网站架构能产生怎样的作用。  Zookee...

2019-07-31 16:01:59 104

转载 Zookeeper入门

在Zookeeper的官网上有这么一句话:ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and providing group services.这大概描述了Zookeeper主要可以干哪些...

2019-07-31 15:41:17 88

转载 CentOS下Redis的安装

前言安装Redis需要知道自己需要哪个版本,有针对性的安装,比如如果需要redis GEO这个地理集合的特性,那么redis版本就不能低于3.2版本,由于这个特性是3.2版本才有的。另外需要注意的是,Redis约定次版本号(即第一个小数点后的数字)为偶数的版本是稳定版(如2.8版、3.0版),奇数版本是非稳定版(如2.7版、2.9版),生产环境下一般需要使用稳定版本。下载安装包w...

2019-07-29 11:55:30 63

转载 Jar包和War包的区别

做Java开发,jar包和war包接触的挺多的,有必要对它们做一个深入的了解,特总结整理如下:1.jar包的介绍JAR(Java Archive,Java 归档文件)是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。JavaSE程序可以打包成Jar包(J其实可以理解为Java了)。JAR 文件格式以流行的 ZIP 文件格式为基础。与 ZIP 文件不同的是,JAR 文件不仅用于...

2019-07-23 14:37:39 374

空空如也

空空如也

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

TA关注的人

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