自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(177)
  • 资源 (15)
  • 收藏
  • 关注

原创 Jenkins自动化部署Vue项目

如果遇到所在的git项目,要部署的代码是在git地址里面的某个目录下,即git多包了一层,则部分配置要重新配置,不然构建时会出错误。4、构建后操作选择 Send build artifacts over ssh,输入服务器和脚本路径。在源码管理,添加附加行为,选择 Sparse Checkout paths,输入git里面所在的目录。2、源码管理选择git,输入git仓库地址和授权账号,并指明要部署的分支。到这里,常规的vue部署配置已经结束,接下来直接构建就可以了。

2023-08-22 10:38:25 1080

原创 Linux安装Jenkins

现在Jenkins的最新版本都需要基于JDK11以上才能够正常使用,不然会出现各种插件安装不上的问题。又不想安装JDK11,想继续用JDK8,只能通过指定安装符合JDK8的Jenkins版本。PS:记得以前没出现过什么插件安装不上的问题,现在连一个普普通通的汉化版插件都安装失败,只能退而求其次用这种办法。本来想打算直接通过docker拉Jenkins镜像进行安装的,没想到同样遇到版本问题。

2023-05-12 14:55:52 734 1

原创 优雅关闭SpringBoot项目-接口方式

一般在服务器重新部署SpringBoot项目,无非就是用kill -9暴力停止进程,但会造成很多数据问题,如果遇到一些耗时或者正在处理交易类的业务时,直接导致数据异常,严重会导致一些预想不到的后果。针对这种情况也有很多解决办法,我这里只列举接口的方式,感觉这是比较方便的做法,就算是把接口暴露到了外网,只需要在接口里面做好权限校验,也能防止被外部调用,保证接口的安全性。

2023-03-10 16:07:35 792 1

原创 Jenkins自动化部署SpringBoot项目

首先需要安装所需的两个插件,Maven Integration plugin和Publish Over SSH在“系统配置”,将服务器信息配置到jenkins,我用的是腾讯云服务器,所以将腾讯云服务器信息配置到jenkins在“全局安全配置”,给目前登陆的这个jenkins账号设置权限在“全局工具配置”,设置maven、jdk的信息这里的文件路径指的是自己服务器上面maven的setting文件地址同样,这里也是服务器上面jdk的路径地址...

2021-11-28 11:10:38 1324

原创 Centos7安装Jenkins

将Jenkins存储库添加到yum repos,并安装Jenkinssudo wget -O /etc/yum.repos.d/jenkins.repo http://pkg.jenkins-ci.org/redhat/jenkins.reposudo rpm --import https://jenkins-ci.org/redhat/jenkins-ci.org.keysudo yum install jenkins如果安装失败,一般是密钥问题,修改jenkins的源文件,将gpgche

2021-11-27 17:27:39 1161

原创 微服务系列--Ribbon负载均衡

1、前言这篇文章接上一篇文章进行开发,上一篇整合完了Nacos,这篇来整合Ribbon。Ribbon不属于SpringCloud Alibaba的东西,而是基于Netflix Ribbon实现的。可以让我们轻松地将面向服务的REST模版请求自动转换成客户端负载均衡的服务调用。Spring Cloud Ribbon虽然只是一个工具类框架,它不像服务注册中心、配置中心、API网关那样需要独立部署,但是它几乎存在于每一个Spring Cloud构建的微服务和基础设施中。2、核心注解Rabbin的依赖不

2021-08-17 17:25:22 420 1

原创 微服务系列--nacos注册中心与服务发现

1、前言终究还是到了更新关于微服务相关博客的时候了,经过挺长一段时间微服务的自主学习,现在不敢说自己熟悉微服务,但我也能略知一二。微服务嘛,其实入门之后便会发现,其实关于微服务相关的代码量其实少之又少,如果用的是SpringCloud Alibaba这一套,那代码量就更少了,微服务比较难的地方其实是在配置上面,只要配置好了,其实后面也就不关微服务的事了。好了,闲话少话,我这里并没有从SpringCloud的五大组件开始写起,而是选择从SpringCloud Alibaba开始写起,后面如果有时间,则再更

2021-08-15 16:27:41 900

原创 css实现圆形div旋转,如“已预约”效果

<!DOCTYPE html><html> <head> <meta charset="utf-8"> <title></title> </head> <style> #a { width: 60px; height: 60px; line-height: 60px;.

2021-07-12 17:08:13 301

原创 Windows下切换不同版本JDK

1、前言从四月份重新入职新公司以来,主要负责两个项目的开发,一个是10多年前的项目,一个是2019年开始开发的项目,这两个项目依赖于不同版本的JDK,一个是JDK6,一个是JDK8,这就需要我们在开发不同项目时,及时切换到不同的JDK,最开始我还想着蛮麻烦的,后面实在项目赶,也就直接卸载到当前的JDK8,重新安装上JDK6。正因为我懒,导致浪费了更多的时间,后面估计是我安装太多次,系统环境出了问题,把我用了四年的电脑搞蓝屏了。悔不当初,趁着闲暇时刻,研究了一波怎么切换JDK,其实也就那么一回事,切换时只

2021-07-09 10:20:25 3020 4

原创 SpringBoot整合CXF框架实现Webservice服务端

1、前言近期接手一个10多年的老项目,敲重点,10多年!!!就是最纯粹的servlet技术,貌似是从2008年运维到现在,老项目终究会有被淘汰的这一天,这不,到我接手的时候,我就是那接手的最后一个人,由我来开发数据迁移接口,通过Webservice接口调用的方式,把数据传输到新系统。没办法,只能忍住寂寞好好研究这坨代码。说来也是奇葩,这坨代码在一几年的时候,居然引入了Spring,导致这坨代码无敌臃肿,servlet和Spring共存,本身还引入了很古老的EJB框架,我直接当场头大。踩完了一个一个坑之后

2021-06-30 17:09:49 2054 5

原创 SpringBoot整合RabbitMQ实现五种消息模型

一、什么是消息队列?消息,可以理解为两个应用之间传递的数据,数据可以是基本数据类型,也可以是对象等。消息队列,则是容器,生产者产生的消息存放在这个容器里面。MQ的整个过程可以理解为生产者生产消息,然后放进消息队列,消费者从消息队列里面获取消息最后进行消费。二、消息模型目前RabbitMQ的官网上介绍共有7种模型,最后两种RPC和Publisher Confirms本篇文章暂不讲,这两种目前实际应用很少,接下来我会结合官网的解释进行介绍和整合SpringBoot。在进行整合前需要先安装

2021-06-29 10:00:20 490 1

原创 搭建SFTP服务器实现文件上传

1、前言最近一直在做数据迁移接口的开发,涉及到大文件的远程下载与上传,其实倒没有什么原理可言,无非就是两台机器互连之后,获得文件流然后进行传输,不过在这过程也遇到过一些小坑,故记录下。2、搭建SFTP服务器我这里就在本地搭建一个SFTP服务器进行测试,最简单的办法就是通过软件来实现,我这里推荐FreeSSHd,可以通过我的蓝奏云网盘进行下载:https://wwr.lanzoui.com/igWkqqoczjg密码:aqge首先下载安装后之后进行配置1)点击“Users”-“A

2021-06-25 10:22:20 2132 5

原创 SpringBoot实现广州健康通疫苗预约提醒

一、前言终于轮到了打第二针疫苗的时候,无奈每次打开“广州健康通”或“粤康通”小程序,每次都是被预约完的状态,广州人口众多,说不定有很多人一直守在小程序前

2021-06-15 17:34:54 1010 2

原创 RabbitMQ的安装教程

本文介绍RabbitMQ在Linxu上的安装教程。https://wwr.lanzoui.com/b02c5gn6f密码:9rqv

2021-06-11 16:38:20 3087 3

原创 MySQL生成随机姓名

CREATE DEFINER=`root`@`localhost` FUNCTION `rand_name`(n int) RETURNS varchar(16) CHARSET utf8begin -- 初始化一个16姓氏字符串,作为姓氏字符库 declare family_str varchar (128) default '陈刘赵钱孙李周吴郑王卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章苏潘奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷汤滕殷罗毕郝邬安常'; .

2021-05-24 11:28:53 2317 2

原创 Java实现List按条件分成多个子List

一、业务场景相信很多开发的小伙伴都有遇到过需要对表按特定条件进行查询,然后再进行归类,比如:对员工表进行检索,然后分别按他们所在的部门进行归类,一般的做法都是按部门唯一标识(比如部门编号、部门名称等)进行一次一次查询,这样做的缺点显而易见,会造成与数据库的多次连接,从而影响效率和性能。而我的做法是直接对员工表进行一次全部读取,然后在本地根据条件再进行归类,这就涉及到需要对List进行处理,将父List直接拆分成多个子List。当然,上面举的例子只是最简单的业务场景,实际场景可能错综复杂,但二、Jav

2021-05-17 11:43:31 5809 2

原创 什么是线程池?为什么使用线程池?

1.什么是线程池?线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。2.为什么要使用线程池?因为频繁的开启线程或者停止线程,线程需要重新从cpu从就绪状态调度到运行状态,需要发送cpu的上下文切换,效率非常低。线程池是复用机制,提前创建好一些固定的线程数一直在运行状态,实现复用,从而可以减少就绪到运行状态的切换。...

2021-04-09 13:49:16 2913

原创 Groovy学习-IO/文件操作

读取文件// 读取文本文件并打印每一行文本new File('./', 'a.txt').eachLine{ line -> println line}// eachLine方法是Groovy为File类自动添加的方法,同时提供多个变体方法,比如你想知道读取的行数,你可以使用它的变体方法,如下new File('./', 'a.txt').eachLine{ line, nb -> println "Line $nb: $line"}// 如果你需要收集文本

2021-02-02 22:40:11 547

原创 Groovy学习-集合语法增强

GPath支持def listOfMaps = [['a': 11, 'b': 12], ['a': 21, 'b': 22]]assert listOfMaps.a == [11, 21] //GPath 标记assert listOfMaps*.a == [11, 21] //扩展点符号listOfMaps = [['a': 11, 'b': 12], ['a': 21, 'b': 22], null]assert listOfMaps*.a == [11, 21, null] // 适

2021-01-31 15:00:50 216

原创 Groovy学习-map操作

创建和获取def map = [name: 'Gromit', likes: 'cheese', id: 1234]assert map.get('name') == 'Gromit'assert map.get('id') == 1234assert map['name'] == 'Gromit'assert map['id'] == 1234assert map instanceof java.util.Mapdef emptyMap = [:]assert emptyMap.si

2021-01-31 13:30:58 851

原创 Groovy学习-list操作

assert [1, 2, 3].find { it > 1 } == 2 // 找出第一个符合条件的元素assert [1, 2, 3].findAll { it > 1 } == [2, 3] //找出所有符合条件的元素assert ['a', 'b', 'c', 'd', 'e'].findIndexOf { // 找出符合条件的第一个元素的index it in ['c', 'e', 'g']} == 2assert ['a', 'b.

2021-01-30 21:39:55 1224

原创 Sharding-JDBC实现水平分库分表

一、前言“分库分表”这一词大家都基本都知道,无非就是数据量过于庞大,几百万,几千万,甚至过亿的数据,在查询的时候特别地耗性能且查询等待时间过长,如果是碰上多张表关联的情况,那后果可想而知。之前在一次工作中,项目组长要我优化一句SQL,这句SQL关联了10多张表,数据量在500百万左右,而且没有建索引,在SQL里面还用到了模糊查询,我直接当场裂开,优化了老半天,勉勉强强从原来的3分多中优化到了2分多种,老实说,尽力了,按他现在的数据库表结构,这已经是极限了。归咎到底还是在数据量太庞大的原因上,一条数据有很

2021-01-17 16:24:45 820

原创 什么是ORM框架?

现在各大公司比较流行的ORM框架有MyBatis,Hibernate,Spring Data JPA等,甚至一些公司会进行封装后成为自己公司专用的框架。相信后端方向的各位小伙伴都知道,ORM框架就是连接数据库的桥梁,比较官方的说法叫“对象关系映射”。单单这六个字并不能很好地理解ORM框架。ORM 英文全称为Object Relational Mapping,翻译过来就是对象关系映射。ORM的核心到底是什么呢?万变不离其宗,各种ORM框架的核心说白了都一样,就是将数据库类型转换成面向对象编程语言的类型,可以理

2021-01-02 20:23:19 13790 1

原创 SpringBoot整合ActiveMQ

一、前言相信看到这篇文章,大家也应该知道ActiveMQ是一个消息中间件。主要特点就是异步处理,用来减少响应时间和解耦。主要的使用场景就是将比较耗时而且不需要即时同步返回结果的操作作为消息放入消息队列。由于使用了消息队列,只要保证消息格式不变,消息的发送方和接收方并不需要彼此联系,也不需要受对方的影响,即解耦合。二、理解ActiveMQ怎样理解ActiveMQ呢?ActiveMQ有两种消息传递模型,一种是点对点模型,一种是发布-订阅模型。我个人比较喜欢拿微信作为对象来代入进行理解。点对点模型,就

2020-12-30 20:55:03 3316 8

原创 微信公众号实现淘宝查券机器人

一、前言 前几年是微信公众号的急速发展时期,那个时期有不少的淘宝客利用微信公众号,将推广转移到微信公众号上面,利用所谓的“信息差”,将淘宝联盟平台的优惠券,以公众号查券的方式进行赚取佣金。可惜那个时候我才刚入大学,不然还真可能让我赚到人生的第一桶金。可能有些人看不起这几毛几块的佣金,但是如果推广的好,达到一定的数量,那么大家可想而知。最近突然想到这么一个有趣的东西,然后也经过研究,和其他的查券机器人一样,将它实现在了公众号里面。可以以此博客为参考,自己实现微信查券机器人。二、注册淘宝联...

2020-12-27 15:31:34 2768 3

原创 ActiveMQ初步安装

一、官网下载ActiveMQ官网:http://activemq.apache.org/安装ActiveMQ的前提是已经安装好了JAVA JDK环境。PS:我这里下载的是经典版下载完之后将它放进Centos的opt目录下,进行解压tar -zxvf apache-activemq-5.16.0-bin.tar.gz可以选择新建一个目录将解压出来的文件拷贝进去,我这里放入根目录下的myactivemq文件夹mkdir /myactivemqcp -rapache-..

2020-12-13 18:41:08 351

原创 nginx安装教程

前言:自从上了班之后博客就一直没更新了,但不能阻止我获取新知识的脚步。本文主要讲述Linux下nginx的安装。准备工作:需要有Linux环境,这里我是使用虚拟机进行安装学习的。一共需要安装四个软件,才能完成nginx的安装。这四个软件可从我的网盘获取:链接:https://pan.baidu.com/s/1zpuIvkga147ACbsyBHQ0Hw提取码:abt8一、需安装C语言和C++编译环境安装gcc和g++:yum -y install gcc gcc-c++ autoco..

2020-12-06 16:49:43 185 1

原创 Java设计模式——职责链模式

前言(废话):走出大学工作了差不多10个月,新东西没学到,整天crud,备受甲方摧残,秃了头发,对互联网行业也日益厌倦。除了在业务能力变强了以外,啥也没学到,工作也没了什么挑战性。这不,最近在准备软考,对Java23种设计模式有了那么一点点了解。当知道有“职责链”模式存在的时候,突然来了兴趣,这不就是我工作了这么久项目用的设计模式吗?想当初刚入公司的时候,一不小心入了这个项目的坑,负责带我实习的那个,和我说这个项目用的设计思想是“策略”模式,当时对设计模式并不了解,还真就信以为真,一直在想这个项目的框架是哪

2020-10-20 23:02:31 280 3

原创 媒体查询+rem+flexible.js实现移动端适配

技术栈简介:媒体查询:通过查询当前属于哪种设备, 让网页能够在不同的设备下正常的预览。(再通俗点来说,就是通过媒体查询,能够自动判断该浏览器所在屏幕的大小)rem:CSS3新增的相对长度单位,是指相对于根元素html的font-size计算值的大小。简单可理解为屏幕宽度的百分比。flexible.js:用来适配移动端的javascript框架。根据宽度的不同设置不同的字体大小,样式间距都使用rem作为单位,不同屏幕大小适配不同的样式。下载normalize.css:这一步可跳过,Norm

2020-06-09 22:04:18 1191 2

原创 SpringBoot整合SpringSecurity+JWT实现用户验证和鉴权

前言之前一直都是用shiro在做用户的验证和鉴权,最近在SpringSecurity上也踩了不少坑。对于SpringSecurity比较官方的解释是:Spring Security是Spring提供的一个安全框架,提供认证和授权功能,最主要的是它提供了简单的使用方式,同时又有很高的灵活性,简单,灵活,强大。但在使用的时候,却没有说的那样轻松,明明作为一个框架,应该是又简单又方便使用,配合上JWT,那就是双倍的快乐。技术栈SpringBoot、SpringSecurity、JWT、Spring D

2020-05-28 11:56:03 1994

原创 前端面试题 (一)

此处省略一万个字表达我的心情...............................1.<img>的title和alt有什么区别?通常当鼠标滑动到元素上的时候显示; alt是<img>的特有属性,是图片内容的等价描述,用于图片无法加载时显示、读屏器阅读图片。可提图片高可访问性,除了纯装饰图片外都必须设置有意义的值,搜索引擎会重点分析。2.HTTP的几种请求...

2020-04-15 22:06:54 262

原创 Java 面试题 -- Spring

1.什么是 Spring IOC 容器?Spring 框架的核心是 Spring 容器。容器创建对象,将它们装配在一起,配置它们并管理它们的完整生命周期。Spring 容器使用依赖注入来管理组成应用程序的组件。容器通过读取提供的配置元数据来接收对象进行实例化,配置和组装的指令。该元数据可以通过 XML,Java 注解或 Java 代码提供。2.什么是依赖注入?在依赖注入中,您不必...

2020-04-13 14:55:05 248

原创 Java 面试题 -- 基础(三)

1.抽象类(abstract class)和接口(interface)有什么异同?抽象类和接口都不能够实例化,但可以定义抽象类和接口类型的引用。一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类。接口比抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象方法和具体方法,而接口中不能定义构造器而且其中的方法全部都是抽象方法。抽象类中的...

2020-04-12 10:12:05 269

原创 Java 面试题 -- 基础(二)

1.String 是最基本的数据类型吗?不是。Java 中的基本数据类型只有 8 个 :byte、short、int、long、float、double、char、boolean;除了基本类型(primitive type),剩下的都是引用类型(referencetype),所以String属于引用类型。Java 5 以后引入的枚举类型也算是一种比较特殊的引用类型。2.float f=3....

2020-04-10 17:33:00 221

原创 百万数据使用子查询进行SQL优化

操作:查询条件放到子查询中,子查询只查主键ID,然后使用子查询中确定的主键关联查询其他的属性字段。原理:减少回表操作。适用场景:使用limit分页查询-- 优化前SQLSELECT 各种字段FROM `table_name`WHERE 各种条件LIMIT 0,10;-- 优化后SQLSELECT 各种字段FROM `table_name` main_ta...

2020-04-06 16:06:10 566

原创 Java 面试题 -- Java Web

1.jsp 和 servlet 有什么区别?jsp经编译后就变成了Servlet。(JSP的本质就是Servlet,JVM只能识别java的类,不能识别JSP的代码,Web容器将JSP的代码编译成JVM能够识别的java类)jsp更擅长表现于页面显示,servlet更擅长于逻辑控制。Servlet中没有内置对象,Jsp中的内置对象都是必须通过HttpServletRequest对象,Htt...

2020-04-06 10:15:58 223

原创 Java 面试题 -- 多线程

1.并行和并发有什么区别?并行是指两个或者多个事件在同一时刻发生;而并发是指两个或多个事件在同一时间间隔发生。并行是在不同实体上的多个事件,并发是在同一实体上的多个事件。在一台处理器上“同时”处理多个任务,在多台处理器上同时处理多个任务。如hadoop分布式集群。所以并发编程的目标是充分的利用处理器的每一个核,以达到最高的处理性能。2.线程和进程的区别?简而言之,进程是程序运行和...

2020-04-05 17:32:41 235

原创 Java 面试题 -- 基础(一)

哈哈哈,从今天开始重新踏上求职之路。一、Java 基础1.final 在 java 中有什么作用?final 修饰的类叫最终类,该类不能被继承。final 修饰的方法不能被重写。final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。2.java 中的 Math.round(-1.5) 等于多少?等于 -1,因为在数轴上取值时,中间值(0.5)向右取整,所以...

2020-04-05 12:09:10 189 1

原创 SpringCloud篇:基于RestTemplate的风格调用

一、什么是RestTemplateRestTemplate是Spring提供的用于访问Rest服务的客户端,RestTemplate提供了多种便捷访问远程Http服务的方法,能够大大提高客户端的编写效率。所以从本质上来说,RestTemplate并不属于SpringCloud中的内容,而是属于Spring中的一个生态。而SpringCloud,并不是一个框架,而是一堆框架的集合体,包含了多种技...

2020-03-06 11:40:52 410

原创 SQL Server实现敏感信息以星号处理

最近有个需求,就是需要把一些敏感信息,如姓名,身份证号,手机号等涉及个人隐私的信息,以*号进行表示。我这里使用的是SQL Server数据库,不适合其他数据库使用,但是思路一样。解决思路:办法有很多,可以通过正则表达式、字符串截取、拼接的形式,我使用的是字符串截取、拼接的方式,比如身份证,我只需要截取它左边4个字符,右边2个字符,而中间的字符我用 * 进行拼接。我这里用到了SQL Serve...

2020-02-26 18:00:02 4026

nacos1.2.1.zip

nacos1.2.1.zip

2021-08-15

Java语言程序设计04747自考历年真题

Java语言程序设计04747自考历年真题

2021-03-30

软件工程02333自考复习资料

软件工程02333自考复习资料

2021-03-30

flexible.js

flexible.js手淘框架,是一个用来适配移动端的js框架。手淘框架的核心原理就是根据不同的width给网页中html跟节点设置不同的font-size,然后所有的距离大小都用rem来代替,这样就实现了不同大小的屏幕都适应相同的样式了。

2020-06-12

智能捡球车最终版源码.zip

基于树莓派的智能捡球车,可以实现捡球车对乒乓球的抓取,同时可通过安卓端对捡球车进行控制。

2019-07-06

人脸识别小程序

该小程序基于face++平台进行开发,可以实现颜值检测,人脸识别,智能美颜,物体识别,手势识别等功能。

2019-07-06

hibernate-release-5.0.7.Final

hibernate-release-5.0.7.Final版本,因为受csdn限制,我把压缩包放在了百度网盘,可通过百度网盘链接下载。

2019-03-04

bootstrap-3.3.7-dist

前端bootstrap框架,官网下载bootstrap-3.3.7-dist压缩版本。

2019-02-08

新浪新闻APP

利用JSoup对新浪新闻网页源码进行解析,提取新闻数据到APP中,可以实现对新闻的实时刷新

2019-02-05

用Ajax和JavaSc实现对省份城市的三级联动

用Ajax和JavaScript实现对XML文件的解析,并实现省份城市的三级联动效果

2018-12-07

用java写的代码雨

用java写的应用程序,可以实现代码雨,关键还可以用做电脑桌面。

2018-06-09

植物大战僵尸源码

制作的一款java植物大战僵尸游戏,适合新手学习,关键对于实训有很好的参考价值

2018-06-02

java 推箱子游戏

适合新手学习使用,附有游戏素材,关卡共有50关,实现了背景音乐的功能,同时可以控制关卡数。

2018-05-31

java 2D迷宫源码

非常适合新手参考使用,附有游戏素材,可以运行使用。

2018-05-31

闹钟源代码

简易闹钟源代码,很不错的参考代码,下载自取。谢谢!

2018-05-24

空空如也

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

TA关注的人

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