自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奋斗的IT青年

记录了博主精心整理的IT技术干货

  • 博客(85)
  • 资源 (3)
  • 收藏
  • 关注

原创 基于Redis+Lua实现分布式锁模拟秒杀扣减库存业务(非常详细,良心解析)

最近和几个小伙伴聊了聊基于Redis的分布式锁实现秒杀扣减库存业务的一些技术细节,刚好最近钻研了一段时间,本篇内容通过1个详细的案例,把这个实现方案作个记录,当做自己对知识的总结积累,同时也欢迎广大开发者朋友一起交流,学习,大家可以留言讨论,原创写作不易,请勿喷,如果觉得有用,不要忘了关注点赞哦。前言首先我们可以讨论以下4个问题:1、什么是分布式锁 ?要说起分布式锁,首先要提到与分布式锁相对应的是线程锁、进程锁。线程锁:主要用来给方法、代码块加锁。当某个方法或代码使用锁,在同一时刻仅有一

2020-09-22 18:05:25 6435 8

原创 Springboot读取properties配置文件的List、Map格式的配置项(属性)

最近收到有小伙伴咨询Springboot项目怎样读取application.properties文件的List、Map等复杂对象格式属性,笔者针对这个问题,写了个demo来演示,希望对需要的小伙伴有帮助。首先,不管是什么框架的java项目,读取properties文件属性,实际就相当于把properties文件当做Map对象读取其中属性而已,明白了这个道理后,那么在此通过下面demo来作为演示实现过程。一、properties文件里构造数据这里构造1个员工对象格式的结构化数据,员工对象里有id(

2020-07-17 15:34:29 18951

原创 springcloud微服务之间通过feign调用方式上传文件MultipartFile

通过我们使用spring系列的框架上传文件,都会利用MultipartFile文件流进行文件的上传。但是我在最近的项目中遇到一个问题,我们的项目是基于springboot框架的springcloud微服务搭建的,后端服务技术层面整体上分为business服务和core服务,business服务用于作为应用层,直接连接用户端,通常用于聚合数据,core服务用于基本很少变动的非业务核心接口。那么用户的...

2019-11-01 16:07:09 10115 9

原创 分销系统开发 分销商城开发 分销功能 Java开发"三级分销"业务功能

众所周知,互联网时代,分享经济现在随处可见,各行各业都有各种分销系统,最为常见的就是三级分销,那么如何实现这个业务功能了,笔者通过本篇图文案例给大家分享一下实现过程。此处以二级分级分销实现为例。1.什么是二级分销?二级分销其实是一种让用户分裂通过邀请的形式来获得更多的用户。如有ABC三个人,A推荐B购买一件商品,B推荐C购买一件商品。假定通过直接推荐购买该商品可获得10%利润,通过间接推荐购...

2019-10-10 10:45:32 10277 1

原创 Python极简教程_Python爬取网站数据_非常详细的入门教程

简述:我们都知道,现在市面上Python这门编程语言很火,Python 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言,也就说说类似于PHP这样的弱类型语言,但是功能很强大,常用的功能体现在爬取网页数据,实现思路就是通过网页链接URL得到网页的源代码,根据源代码以及相关正则表达式规则筛选出需要的信息,打到爬取有效信息的目标。开发环境准备:开发环境用的idea,依赖库分别是req...

2019-08-03 16:39:08 11368 3

原创 微信公众号开发系列教程(四):监听关注/取消关注事件 消息接收与响应处理

10万+IT人都在关注,史上最全面的微信公众号开发系列教程:基于Springboot开发公众号关注/取消关注事件前言:关于监听公众号用户关注和取消关注的消息事件,微信官方文档给出的参考内容寥寥无几,具体如何配置url,官方文档也没有具体的说明,确实很坑,让人很难懂,而且网上关于配置微信消息事件接口的讲解资料很少,大多数只讲到验证token的url的配置,很少有讲到消息接口的url配置注意事...

2019-03-26 17:00:35 21573 10

原创 图片上传文件流格式转换 File文件流转为MultipartFile流详解

10万+IT人都在关注的IT技术博客,实用的技术干货持续更新......通常从界面上传的文件,后台接口都用MultipartFile格式的文件流接收,如果要直接对物理磁盘目录里的文件进行操作,则只能实用File流进行操作,有时由于一些定制化的需求,需要对File流和MultipartFile流转换,笔者分享一个已经完美实现的转换工具类,如果觉得对您有帮助,敬请点赞并分享给更多需要的人,废话不多...

2019-03-15 16:19:53 15811 2

原创 springboot+poi开发excel导出 加载Excel模板导出 Excel批量导出详解

提到Excel导出功能,可能很多人都使用springmvc框架做过,笔者今天要给大家分享的是基于springBoot开发Excel复杂模板导出功能(所谓复杂模板指在模板里的特定表头里有不同的单元格合并以及背景色,字体颜色的填充,文本内容的对齐方式等)。实现思路:首先在springBoot(或者SpringCloud)项目的默认templates目录放入提前定义好的Excel模板,然后在具体...

2019-02-12 18:48:35 12934 2

原创 数据库连接池原理之(一):通俗易懂的数据库连接池原理以及实现机制讲解

本篇内容综合广大网友提供内容,笔者经过整理,对数据库连接池原理和实现过程做个很系统的并且通俗易懂的分析讲解,以及手写一个连接池实现过程作为演示。一、早期通过JDBC方式操作数据库我们先来看早期使用JDBC的方式操作数据库的过程,这里以mysql数据库为例讲解JDBC操作数据库原理:一般来说,java应用程序访问数据库的过程是:   ①装载数据库驱动程序;   ②通过jdbc...

2018-12-21 11:45:02 39643 23

原创 springmvc开发微信公众号接口 微信公众号测试账号配置接口Token验证

综合笔者多年的微信公众号以及微信产品开发经验,本篇内容把微信公众号测试账户的接口配置过程分享给广大开发者朋友,开发语言是Java,采用目前流行的springmvc框架开发。开发前必读以及准备工作:1、微信公众平台开发是指为微信公众号进行业务开发,为移动应用、PC端网站、公众号第三方平台(为各行各业公众号运营者提供服务)的开发,请开发者前往微信开放平台接入。2、在申请到认证公众号之前...

2018-12-15 11:54:57 7192 4

原创 Java开发公众号系列教程(二):公众号开发全局缓存access_token和jsapi_ticket

上篇文章给大家分享了Java实现微信公众号调用微信拍照接口和打开本地相册上传图片的实战案例详解,近期收到很多开发者朋友通过笔者微信的咨询和反馈,表示很专业,很全面,很详细,十足的干货,足金足两,很受益。广大开发者朋友的持续支持和好评,让笔者有了更饱满的技术创作精神,那么今天就再次给大家分享一篇今天精心整理的干货《获取公众号的access_token和jsapi_ticket以及全局缓存公众号acc...

2018-09-30 11:46:15 6920 1

原创 最全面的springBoot集成mybatis+mysql项目搭建经验分享

大家都知道,现在Spring框架几乎无处不用,目前最新版本据说是Spring5,现在常用的基本还是Spring4.X,很多公司甚至用的还是Spring3.x,而Spring领域其中最好用的莫过于SpringBoot,这是从SpringMVC衍变出来的,本质还是SpringMVC,但是要比SpringMVC好用的多,因为很好用,所以笔者闲暇之际用SpringBoot从头至尾摸索着搭建了一个案例,分享...

2018-02-08 15:56:23 45434 39

原创 第1篇:window环境搭建Elasticsearch以及可视化Elasticsearch-head插件

从本篇文章开始,笔者将撰写一系列关于Elasticsearch的应用相关的案例,一方面为了自己加强巩固,同时帮助有需要的小伙伴。本篇教程详细讲解window环境搭建Elasticsearch的环境。一.下载安装elasticsearch1.进入elasticsearch的官网:https://www.elastic.co/cn/downloads/elasticsearch,点击红框部分进入github下载地址2.进入到github主页,下载elasticsearch的Zip压缩包,这里笔者

2020-06-23 13:48:47 435

原创 SpringBoot集成ElasticSearch以及通过ElasticSearch的Java API实现增删改查

一、简介ElasticSearch,简称ES, 是一个基于Lucene的分布式可扩展的实时搜索和分析引擎,是基于分词和分段的全文搜索引擎,具有分词,同义词,词干查询的功能,ES天生具有分布式和实时的属性。当然 Elasticsearch 并不仅仅是 Lucene 那么简单,它不仅包括了全文搜索功能,还可以进行以下工作:分布式实时文件存储,并将每一个字段都编入索引,使其可以被搜索。Elast...

2019-12-16 15:16:08 1840

原创 Java设计模式之策略模式详解_Strategy模式案例

策略模式在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改,这种类型的设计模式属于行为型模式。在策略模式中,我们创建表示多个策略的对象和一个行为随着策略对象改变而改变的 context 对象。每个策略对象会改变 context 对象的执行算法。这个描述读起来有点绕口,接下来笔者还是通过具体应用案例和代码演示,读者通过阅读代码就可以体会到Java设计模式中策略...

2019-07-15 17:36:05 584

原创 Spring Boot获取配置文件application.yml的属性值

在 Spring Boot 项目中,配置文件格式有两种,一个是 properties ,另一个是 yml 。虽然 properties 文件比较常见,但是相对于 properties 而言,yml 文件的配置项更加简洁明了,可读性很强,不仅如此,yml 文件还有另外一个重要的特点,就是 yml 中的数据是有序的,properties文件中的数据是无序的。我们都知道SpringBoot工程默认的配置...

2019-07-11 10:33:11 6892

原创 Java设计模式之观察者模式详解_消息发布/订阅_广播机制_监听器模式

一、观察者模式定义  观察者模式是广播机制,是消息订阅和推送的核心设计。观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式,通俗来讲在对象之间定义了多对一的订阅,让多个观察者对象同时监听某一个主题对象,当主题对象改变状态时,主题对象的所有订阅者对象都会收到通知并自动更新。...

2019-07-08 17:09:18 824

原创 SpringBoot集成MyBatis配置多数据源详细教程

一、工程创建申明一点本案例使用的springboot版本是1.5.6.RELEASE。首先需要创建springBoot项目,添加springBoot框架对MyBatis支持的相关依赖Jar:分别添加MyBatis、MySQL以及Web依赖以及Druid依赖,这里添加Druid依赖必须是Spring boot支持的Druid,不能使用传统的Druid。完整的依赖jar如下:<depe...

2019-07-04 17:35:13 1310

原创 微信公众号开发 公众号接口开发 封装统一的GET/POST请求接口

10万+IT人都在关注,史上最全面的微信开发实战教程:包含公众号,小程序,微信支付等开发案例欢迎关注笔者个人博客:http://blogs.chenyunkeji.com/在微信公众号/小程序开发过程中,后端服务要用到微信公众平台提供的各种接口,比如创建个性化菜单的接口,网页授权接口,消息事件接口等,事件推送接口等,几乎大多数的微信接口都要用到GET/POST方式的http请求,那么就需要...

2019-05-09 11:12:32 1997

原创 微信公众号菜单栏开发 微信公众号接口开发个性化菜单 菜单事件开发

10万+IT人都在关注,史上最全面的微信开发实战教程:包含公众号,小程序,微信支付等开发案例欢迎关注笔者个人博客:http://blogs.chenyunkeji.com/首先,直接上图,看效果,如下,有三个根菜单,每个菜单上有不同类型的子菜单,点击子菜单可以实现用户和公众号实时交互本案例技术栈:springboot,mysql,logback,mybatis菜单创建请求接...

2019-05-08 20:00:54 3273

原创 Java实现批量压缩图片 裁剪压缩多种尺寸缩略图 一键批量上传图片

10万+IT人都在关注的图片批量压缩上传方案(完整案例+代码)背景需求:为了客户端访问图片资源时,加载图片更流畅,体验更好,通常不会直接用原图路径,需要根据不同的场景显示不同规格的缩略图,根据商品关键属性,能够获取到图片不同尺寸规格的图片路径,并且能根据不同缩略图直观看到商品的关键属性,需要写一个Java小工具把本地磁盘中的图片资源一键上传至分布式FastDFS文件服务器,并把图片信息存入本地...

2019-03-13 22:11:09 5520 2

原创 Spring Cloud微服务连载(二):搭建高可用Eureka服务注册中心集群

10万+IT人都在关注,史上最全面的企业级微服务快速开发学习教程:5分钟快速搭建一个高可用服务注册中心集群前言:springcloud项目是基于springboot框架,我们演示的都创建springboot工程上篇博客【Spring Cloud微服务连载(一):搭建服务注册中心以及注册服务提供者】中我们介绍了如何使用Spring Cloud搭建一个服务注册中心以及注册服务,但是搭建好...

2019-03-07 17:09:16 700

原创 Spring Cloud微服务连载(一):搭建服务注册中心以及注册服务提供者

10万+IT人都在关注的史上最全面的企业级微服务快速开发学习脚踩:5分钟快速搭建一个标准的Spring Cloud服务注册中心前言:springcloud项目是基于springboot框架,我们演示的都创建springboot工程一、创建一个普通的Spring Boot工程首先我们通过spring官网创建一个普通的Spring Boot工程,官网地址 https://start.spr...

2019-03-05 16:52:43 403

原创 SpringBoot @ControllerAdvice注解自定义全局异常处理类 统一处理异常

在Springboot或者Springcloud开发中为了统一处理业务异常,需要自定义全局异常处理类统一处理业务异常。在spring 3.2中,新增了@ControllerAdvice 注解,可以用于定义@ExceptionHandler、@InitBinder、@ModelAttribute,并应用到所有@RequestMapping注解的方法中,本篇内容笔者讲解一下使用@ControllerA...

2019-03-02 14:57:32 2812

原创 springboot图片压缩后上传 MultipartFile转为File文件流 按照指定宽高压缩上传

在开发中,前端上传的文件流,在后台接口中通常是用MultipartFile类型的流格式接收,但是接收到的文件流往往不能满足我们的使用要求,我们需要转为File类型的文件流再去读取文件的宽高,大小等属性进行压缩上传等操作。本工具类为大家分享具体实现过程。接口规范:接收前端传的文件流,以及指定的目标压缩宽高,和压缩完需要上传到的指定目录。首先封装一个动态生成文件目录的文件路径工具类packa...

2019-02-16 11:49:38 4947

原创 springboot重写适配器addResourceHandler 虚拟路径映射文件磁盘路径 读取磁盘文件 预览文件

文件上传的功能很常见,但是很多人并不清楚文件上传后预览的具体原理,也就是把上传至服务器指定物理磁盘相关目录(绝对路径)的文件通过浏览器直接访问预览。这种具体实现其实是要配置一个映射关系的,即配置一个虚拟路径来映射文件的真实绝对路径(完美的隐藏了文件的真实物理路径,可以说不但很安全,而且外网可以直接访问)。配置虚拟路径映射物理路径常规二种方式方式一:在tomcat的tomcat-7.0.39...

2019-02-16 11:11:39 11577 5

原创 基于JDK实现图片上传压缩 按照指定宽高压缩图片 生成缩略图

在很多项目中我们会把上传的图片做压缩处理,图片上传尺寸过大会对服务器的容量和网络带宽有很大浪费,如果不是必须的高清图片,我们可以通过代码来做压缩处理。我们压缩图片的目的是让web页面或者移动端打开的速度很快,并且节省空间。下面通过2种方式分享压缩图片具体实现过程:方式一:按照指定的宽高压缩原图/** * 按照指定的宽高压缩原图 * @param img * @param w...

2019-02-14 18:07:59 512

原创 基于不同方式实现任意复杂结构的Bean对象和Map的转换工具类

平时我们常会遇到Bean对象和Map的转换,对于字段比较少并且结构简单的Bean对象和Map的转换,常规做法就是逐个去set属性和值,或者逐个put属性和值,但是如果对于字段比较多或者嵌套结构复杂的Bean对象和Map转换,常规做法就远远力不从心了,那么我们就需要封装一个公共的高效的泛型工具类去进行转换。笔者结合平时的编码经验积累,经过整理,本案例给大家分享5种方式实现Bean对象和Map的转换,...

2019-02-13 15:51:40 1736

原创 MyBatis一对多级联查询 关联查询 映射查询 xml映射文件配置详解

Mybatis框架一对多级联查询的场景很多,很多人往往对具体的Xml映射文件配置的细节不太注意,今天笔者就给大家做个详细的讲解。常用的一对多有2种配置方式。 表名字和实体名字对应,作为讲解,为了易懂,这里只设置了几个必要字段。实体结构如下图: 商品实体Product(对应product表) public class Product { private String p...

2019-02-11 14:41:14 1090

原创 Java面试题问到的排序 Java排序算法 冒泡排序升序排序实现

 冒泡排序的核心思想是每一轮排序,前后2个元素做比较,互换位置,比如,数组为K,第一轮排序,第一个和第二个比较,然后第二个和第三个比较,第三个和第四个比较,依次类推,K.length -2和倒数第一个元素(下标为K.length-1)比较。第二轮排序,从第2个元素开始(下标为1),依次第二个和第三个比较,第三个和第四个比较......,以下是具体的代码实现,重在理解这种思想package d...

2019-01-03 15:06:28 859

原创 公众号支付 微信支付 小程序支付 h5支付开发连载(二):h5页面提交订单

上一节给大家分享了用户授权公众号获取用户openid的详细教程,本节给大家继续分享用户进入公众号的h5网页提交订单的实现过程上节教程获取到用户openid后,把这个参数返回到h5页面,用隐藏域接收后再连同这个openid以及订单所有信息提交后台接口,这里以最关键的订单信息:金额为例进行代码实现。首先在商品页面定义一个表单,里面有商品信息和价格信息,由于这里只做演示,价格暂时写死,再定义一个...

2018-12-30 11:39:23 581

原创 公众号支付 微信支付 小程序支付 h5支付开发连载(一):获取用户openid

从本期开发,笔者将会把公众号里实现网页h5支付的全流程做个连载详细教程(微信支付和小程序支付流程基本一样,同样可以参考本连载教程学习),本教程服务端是java语言,采用现在主流的springmvc框架,感兴趣的开发者可以一起参与进来与笔者共同学习。基本思路:登陆公众号服务号(订阅号也可以)后台配置一个网页路径,用户通过公众号菜单入口打开h5网页,授权微信网页(有2种授权方式),后台获取该用户和...

2018-12-30 10:49:53 896

原创 SpringBoot集成mybatis整合redis实现缓存教程 springboot配置redis教程

缓存:即将常用的并且不会频繁变更的数据存入内存当中,从而减少服务器数据库压力,提升访问速率。使用redis作为缓存技术方案,主要是redis缓存技术的特点就在于高效,因为目前涉及的数据量逐渐增多,在对于数据的存储上面和sql以及服务器资源优化上面就来的特别的重要。而redis可以帮助解决由于数据库压力造成的延迟现象,针对于很少做改变的数据并且经常使用的数据,我们可以一致性加入内存。这样可以...

2018-12-25 16:37:25 1709 1

原创 数据库连接池原理之(二):数据库连接池处理并发,事务,配置以及维护

笔者个人博客地址:http://www.chenyunkeji.com,欢迎关注数据库连接池原理分析,点击这里:《通俗易懂的数据库连接池实现机制讲解》本节内容紧接着上篇的数据库连接池原理分析,继续讲解连接池需要考虑的其他重要问题1、并发问题       为了使连接管理服务具有最大的通用性,必须考虑多线程环境,即并发问题。这个问题相对比较好解决,因为java语言自身提供了对并发管理的...

2018-12-21 12:05:17 1987 2

原创 Java设计模式之《抽象工厂模式》详解 实现抽象工厂及应用场景

抽象工厂模式(Abstract Factory)       抽象出来一个基础接口定义了产品功能(对应抽象产品角色),每个实现此接口的子类就是具体产品(对应具体产品角色),然后定义一个工厂接口(对应抽象工厂角色),实现了工厂接口的子类就是具体工厂(对应具体工厂角色),这时候,接口编程的优点就体现了,我们可以随时新增具体产品类(只需要实现产品接口),只需要同时新增一个工厂类,客户端就可以轻松调用...

2018-12-19 18:58:10 3175

原创 Java设计模式之《工厂方法模式》详解 实现工厂方法

工厂方法模式(Factory Method)常用的工厂方法模式是静态工厂,利用static方法,作为一种类似于常见的工具类Utils等辅助效果,一般情况下工厂类不需要实例化,只需通过类名调用静态方法即可实现。首先定义一个工厂类,里面定义三个静态方法public class StaticFactory { private StaticFactory(){} public...

2018-12-19 18:26:46 144

原创 Java设计模式之《实现单例模式》以及单例应用场景详解

Java的设计模式总共有20多种,其中最简单的一种就是单例模式,所谓单例,根据字面意思很好理解,指的就是整个系统某个类有且仅有一个该类的实例,这个单例不应该人为来控制,而应该由代码来限制,强制单例。  单例有其独有的使用场景,一般是对于那些业务逻辑上限定不能存在多实例的情况,例如:类似于计数器,统计网站访问人数等场景,都需要使用一个系统唯一实例来进行记录,若多实例计数则会不准确。  笔者认...

2018-12-19 17:37:38 1277

原创 公众号/小程序开发 签名参数拼接 MD5/SHA1加密参数获取JS-SDK接口权限

在公众号或者小程序开发中,无论是微信小程序,百度小程序还是支付宝小程序开发,涉及到的很多官方sdk接口调用,都需要有接口权限,而这些接口权限的获取都要对接口参数做特殊处理后再加密签名,才有接口权限,比如小程序API里面的多媒体接口(上传,下载等),支付接口,统一下单接口等。下面直接上代码 /** * MD5 加密,转为指定类型 * * @param t...

2018-12-17 12:21:03 2016 2

原创 微信小程序开发 集成腾讯地图服务 获取地理位置(经纬度信息) 逆向解析地址

开发前准备工作,先阅读腾讯地图接口文档,在小程序中引入地图sdk,并在公众号后台配地图接口域名https://apis.map.qq.com,详见笔者另外一篇博客(微信小程序根据经纬度动态定位计算周边商家导航距离)具体的业务开发核心代码getLocation: function (e) { var that = this; console.log(e) wx....

2018-12-17 11:47:49 2839

原创 微信开发 小程序开发 封装高效稳定优雅的网络请求统一访问接口

小程序开发中,很多地方都要请求后台接口,如果所有的接口请求都调用小程序官方文档给的网络请求方法wx.request({ }),千篇一律的重复代码显得太过于臃肿,繁琐,作为一个对代码艺术美有崇高追求的广大开发者朋友,肯定是不愿意看到的,那么封装一个高效稳定优雅的网络请求统一接口就显得尤为重要,笔者结合众多项目实战经验整理后,把封装好的代码分享给广大开发者,大家拿去就可以直接用。截止目前,随着笔者的不...

2018-12-17 11:32:25 432

微信公众号开发常用工具类源码,包含菜单事件,网页授权token获取,openid获取,文件上传工具类源码

本源码包含公众号菜单初始化开发,菜单事件开发,普通token和网页授权token开发工具类,js_ticket获取和缓存,获取openid开发,公众号网络请求封装,xml格式转换工具类,文件上传工具类,关注事件/取消关注事件开发,模板消息等工具类源码

2019-07-03

支付宝小程序开发 支付宝开发参赛报名指导手册

ATEC开发者大赛 | 支付宝小程序创新大赛,报名开始啦 主办方:蚂蚁金服

2018-11-24

网站源码 Java源码 SSH框架 响应式布局 极速相应 界面超级漂亮 兼容PC/平板/手机端 通用网站管理后台代码

1.网站后台采用主流的 SSM 框架 jsp JSTL,网站后台采用freemaker静态化模版引擎生成html 2.因为是生成的html,所以访问速度快,轻便,对服务器负担小 3.网站前端采用主流的响应式布局,同一页面同时支持PC、平板、手机(三合一)浏览器访问 4.springmvc +spring4.3.7+ mybaits3.3 SSM框架

2018-11-24

空空如也

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

TA关注的人

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