自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(47)
  • 资源 (2)
  • 收藏
  • 关注

原创 C# 创建型模式(Creational Pattern)之原型设计模式(Prototype Design Pattern)

C#中的原型设计模式与示例在本文中,我将通过示例讨论C#中的原型设计模式。该原型设计模式属于创建型设计模式的范畴。什么是原型设计模式?根据GoF定义,“原型设计模式指定了使用原型实例创建的对象类型,并通过复制此原型来创建新对象”。为了简化上面的定义,我们可以说,原型设计模式为我们提供了一种从对象的现有实例创建新对象的方法。这意味着它将现有对象及其数据克隆到新对象中。如果我们对克隆对象(即新对象)进行了任何更改,那么它不会影响原始对象。注意:原型设计模式在其他创建型设计模式中是独一无二的.

2020-08-20 16:49:50 210

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(一)

一、如何在.NET中做deep copy?二、throw与throw e的区别?应该用哪一个?三、finally block是什么时候调用的?四、out和ref有什么区别?五、在关系型数据库里,referential integrity(应用完整性)是什么意思?六、解释this关键字?它可以在静态方法中使用吗?七、在GOF设计模式的3类中各选一个设计模式来说明其用途?八、mock和stub有啥区别。九、SoC是什么意思?十、cross cutting concen(纵切关

2020-07-30 10:00:37 2505

原创 (六)源码代管理-GitHub&&Git使用教程

什么是GitHub?GitHub 是一个面向开源及私有软件项目的托管平台,因为只支持 Git 作为唯一的版本库格式进行托管,故名 GitHub。GitHub 于 2008 年 4 月 10 日正式上线,除了 Git 代码仓库托管及基本的 Web 管理界面以外,还提供了订阅、讨论组、文本渲染、在线文件编辑器、协作图谱(报表)、代码片段分享(Gist)等功能。目前,其注册用户已经超过 350 万,托管版本数量也是非常之多,其中不乏知名开源项目 Ruby on Rails、jQuery、python 等。

2020-07-22 15:25:40 388

原创 (五).NET Core 3.x 使用Nosql-MongoDB构建Web应用

文档数据库由于其存储大量数据或半结构化数据的速度和能力而变得越来越流行。MongoDB已经成为文档数据库领域的领导者,因此,开发人员可能有必要学习如何从.NET应用程序与MongoDB进行交互。MongoDB是面向NoSQL文档的数据库,可让您定义独立于架构的基于JSON的文档。该模式可以与关系数据库中的表进行映射。MongoDB中的架构称为集合,该架构中的记录称为文档。本教程将创建一个Web API,该Web API在MongoDB NoSQL数据库上执行创建,读取,更新和删除(CRUD)操作。..

2020-07-21 17:24:07 244

原创 (四)如何在.NET Core 3.x 中使用Swagger

在服务端开发过程中,特别是在前后端分离的项目中,后端人员往往会提供出来很多API接口供前端人员使用。一般后端人员会在开发接口的过程中同时维护一份文档(如word、excel),用来说明每一个接口的访问方式、需要的参数、返回的结果等基本信息。但是这种传统的API书写方式很费时间,而且容易造成因为接口文档更新不及时导致的前后端交流成本增加的问题。基于上述情况,诞生了许多API接口文档自动化生成工具,如Swagger、I/O Docs、apiary.io、Docco、Dexy、Doxygen、TurnAPI。

2020-07-21 16:49:37 555

原创 (三)使用.NET Core3.1和EF Core构建RESTful API

在本文中,我将演示如何使用ASP.NET Core 3.1构建RESTful Web API,使用Entity Framework Core与现有数据库连接,创建JWT令牌提供对API访问的保护权限。如果您不熟悉.NET Core,可以先阅读我的.NET Core 3.1简介。这篇文章的各节如下:什么是RESTful API? 什么是JWT令牌? 添加控制器和脚手架构建RESTful API 使用Postman测试API接口 使用Cors解决前端调用API跨域的问题 创建一个JWT令牌保.

2020-07-21 09:34:11 1841

原创 (二)Restful API设计指南-最佳实践

Facebook,Google,Github,Netflix和其他一些科技巨头给开发人员和产品提供了通过API使用其数据的机会,即使你没有为其他开发人员和产品编写过API,对于你的应用程序来说,拥有精心制作的API总是非常健康的。关于设计API的最佳方法,互联网上存在着长期的争论,没有为此定义过任何的官方指南。API是一个接口,许多开发人员可通过该接口与数据进行交互。设计良好的API总是非常易于使用,并使开发人员的工作变得非常顺利。API是开发人员的GUI,如果感到困惑或冗长,则会开始寻找替代方..

2020-07-06 00:47:14 312

原创 (一)NET Core 项目中通过EF Core的Code First方式进行数据库的迁移

代码优先(Code first)是一种技术,可以帮助我们通过代码来创建数据库,迁移和维护数据库及其表。也就意味着我们可以通过.NET代码直接维护数据库及其对应的表。当尚未准备好数据库并且想要在新项目中创建数据库并直接通过代码维护数据库时,这将是个很好的选择。本文将帮助大家了解什么是“代码优先”的方法,以及如何使用Entity Framework Core 迁移(Migration)机制在ASP.NET Core 应用程序中实现它。Migration始终可以帮助我们创建,更新数据库并将其与模型类同步。接下

2020-07-05 18:37:47 2140 1

原创 .Net Core 微服务–入门

许多开发人员都听说过微服务,这是一件好事。但是我跟很多开发人员交谈的时候发现微服务只是像DevOps这样的流行词。我做微服务的不同项目已经有一年多了,在这篇文章中,将讨论一下微服务概念的理论和思想。在下一篇文章中,将展示如何使用ASP .Net core 3.1实现微服务。什么是微服务?顾名思义,微服务非常小。关于大小的意见各不相同。有人说不超过一百行,有人说应该用来做一件事。我的观点是,微服务应该在相同的上下文中进行操作。这也可以是几种方法。以客户服务为例。该服务可以提供进行注册,登录和更改用..

2020-06-15 22:15:31 1092

原创 .Net Core 命令行界面(CLI)

.NET Core命令行界面.NET Core命令行界面(CLI)是一个新的跨平台工具,用于创建,还原程序包,构建,运行和发布.NET应用程序。在上一章中,我们使用Visual Studio创建了第一个ASP.NET Core Api 应用程序。Visual Studio在内部使用此CLI还原,生成和发布应用程序。其他更高级别的IDE,编辑器和工具都可以使用CLI支持.NET Core应用程序。.NET Core CLI与.NET Core SDK一起安装在特定平台上。因此,我们不需要在开发机器

2020-06-15 01:40:28 3693

原创 创建 ASP.NET Core API 应用程序

创建ASP.NET CoreAPI 应用程序在这里,我们将学习如何在Visual Studio 2019中创建我们的第一个ASP.NET Core 3.0应用程序。打开Visual Studio 2019,然后单击创建新项目,如下所示。“创建新项目”对话框包含不同的.NET Core 3.x应用程序模板。每个应用程序都会创建预定义的项目文件和文件夹,具体取决于应用程序类型。在这里,我们将创建一个简单的Web应用程序,因此选择ASP.NET Core Web 应用程序模板,然后单击...

2020-06-15 00:03:07 376

原创 ASP.NET Core3.1 入门介绍

开篇介绍.NET Core是Microsoft发行的ASP.NET的新版本。它是一个开放源代码的Web框架,可以在Windows,Mac或Linux上运行。如今.NET Core在C#开发人员中越来越受欢迎,但是还是有很大一部分开发人员不会使用。鉴于此,从本篇文章开始,将帮助大家逐步了解ASP.NET Core Web应用程序。希望大家能够逐步学习、尽快掌握这一新的Web 框架技术。.NET Core概述.NET Core是.NET Framework的新版本,.NET Framework是由M

2020-06-14 22:49:24 4889

原创 C# .Net面试题库总结(一)

1、简述 private、 protected、 public、 internal 修饰符的访问权限。 private : 私有成员, 在类的内部才可以访问。protected : 保护成员,该类内部和继承类中可以访问。public : 公共成员,完全公开,没有访问限制。internal: 当前程序集内可以访问。2、ADO.NET中的五个主要对象Connection:主要是...

2019-09-02 10:34:14 62164 8

原创 C#.Net中的加密解密(AES、DES、RSA、MD5)、数字证书、HTTPS

一、信息安全的基本概念,以及为什么要使用加密?1、信息安全的定义保密性(Confidentiality)只有你自己和你允许的人能看到相关的信息。完整性(Integrity)信息收发过程中没有被破坏或篡改过。可获得性(Availability)自己在需要的时候能够访问到信息或者保证对方能够收到你的信息。2、如何保证安全认证(Authentication)认证就是证...

2019-08-30 14:10:49 2102

原创 C# 微信网页分享链接 前后端代码,config:invalid signature错误的解决方法

本文是微信公众号开发-H5网页分享功能的前、后端整个流程,以及遇到的invalid signature问题的解答,希望对该功能开发不是很清楚的朋友有所帮助。一、准备工作。百度下“微信 公众平台 开发 文档”进入官方接口文档(这里有朋友要问了,为什么搜索的时候要在词与词之间加空格,这是个小技巧,这样搜索的结果更加准确):文档1.1至3.7的篇幅清晰的介绍了如何设置JS安全域名、网站如何导入开...

2019-08-29 12:08:26 931

原创 C#泛型应用及原理

泛型(generic)是C#语言2.0和通用语言运行时(CLR)的一个新特性。泛型为.NET框架引入了类型参数(type parameters)的概念。类型参数使得设计类和方法时,不必指定方法有一个或多个具体参数,而是在调用方法的时候再去指定。这意味着使用泛型的类型参数T,写一个方法MyList<T>,客户代码可以这样调用:MyList<int>, MyList<st...

2019-08-19 14:03:04 5505

原创 Sourcetree中使用.gitignore忽略文件或者文件夹

前沿在使用Git的过程中,有的文件比如日志,临时文件,编译的中间文件等不要提交到代码仓库,这时就要设置相应的忽略规则,来忽略这些文件的提交。简单来说一个场景:在你使用git add .的时候,遇到了把你不想提交的文件也添加到了缓存中去的情况,比如项目的本地配置信息,如果你上传到Git中去其他人pull下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到git服务器中,但是又为了偷懒每次添加缓存的时候都想用git add .而不是手动一个一个文件添加,该怎么办呢?很简单,git

2021-03-22 03:03:43 8547

原创 Nginx设置为Windows服务启动

下载Windows Service Wrapper工具1)下载Windows Service Wrapper工具,选择合适版本下载,该工具可设置nginx为windows服务。比如下载2.9.0版本,将下载好的winsw-2.9.0-bin.exe文件放到Nginx的安装目录下,并修改名称为nginx-service.exe。然后在Nginx目录下分别再创建2个文件:nginx-service.exe.config和nginx-service.xml文件。配置nginx-service.ex

2021-03-16 14:17:03 654

原创 windows平台卸载服务

卸载服务:打开cmd窗口,输入:sc delete 服务器名如果执行该命令后,服务列表还存在该服务,那就代表该服务在进程中。解决方案:打开任务管理器中的进程,找到该服务名,结束进程,再操作即可删除服务。...

2021-03-16 13:58:20 319

原创 部署ElasticSearch笔记

步骤一:下载ES压缩包 【下载Elastic】步骤二:解压安装ES服务Window版的ElasticSearch的安装很简单,类似Window版的Tomcat,解压开即安装完毕,解压后的ElasticSearch的目录结构如下:步骤三:启动ES服务双击启动bin目录下的elasticsearch.bat文件注意:9300是tcp通讯端口,集群间和TCPClient都执行该端口,9200是http协议的RESTful接口。在浏览器输入9200端口访问elastics

2020-12-15 18:53:18 274

原创 C#中迭代器模式到IEnumerable接口到foreach遍历的解析

在讲foreach循环遍历之前,不得不先提下Iterator迭代器模式。迭代器模式是针对集合对象而生的,对于集合对象而言,肯定会涉及到对集合的添加和删除操作,同时也肯定支持遍历集合元素的操作,我们此时可以把遍历操作放在集合对象中,但这样的话,集合对象就承担太多的责任了。面向对象设计原则中有一条就是单一职责原则,所有要尽可能地分离这些职责,用不同的类去承担不同的责任,迭代器模式就是用迭代器类来承担遍历集合的职责。迭代器模式...

2020-10-16 14:36:01 251

原创 C#中可变参数params解析

params MSDN的解释:使用params关键字可以指定采用数目可变的参数的方法参数。参数类型必须是一维数组。在方法声明中的params关键字之后不允许有任何其他参数,并且在方法声明中只允许有一个params关键字。如果params参数的声明类型不是一维数组,则会发生编译器错误CS0225。使用params参数调用方法时,可以传入:数组元素类型的参数的逗号分隔列表。 指定类型的参数的数组。 无参数。如果未发送任何参数,则params列表的长度为零。直...

2020-10-15 18:22:17 4511

原创 C#中this关键字的用法详解

用法一 代表当前类的实例对象class Program{ static void Main(string[] args) { //Person实例化为对象p Person p = new Person(); p.Age = 18; Console.WriteLine(p.MyAge()); }}public class Person{ //这个Age代表类的全局变量 public int Age { ..

2020-10-14 19:39:43 5730

原创 关系型数据库中,关系的完整性有哪几种

关系模型中有3类完整性约束:域完整性、实体完整性、参照完整性。1.域(列)完整性也就是用户定义的表字段的完整性通常指数据的有效性,它包括字段的值域、字段的类型及字段的有效规则等约束,它是由确定关系结构时所定义的字段的属性决定的。限制数据类型,缺省值、规则、约束、是否可以为空,域完整性可以确保不会输入无效的值。比如某个属性的值必须在某个范围内,或者默认为0等,这些就是域(列)完整性,也就是用户定义的完整性。简单来说就是对表字段的约束。2.实体(行)完整性实体完整性是对关系中的记录...

2020-10-14 17:08:36 13127 1

原创 C#关键字out与ref的区别

问题:为什么C#中要有ref和out?先看下面一段代码:想通过Exchange方法交换A、B两个变量的值,交换前A=10,B=20.static void Main(string[] args){ int A = 10; int B = 20; Exchange(A,B); Console.WriteLine($"交换后,A为{A},B为{B}");}//交换A、B的值private static void Exchange(int A, int B){

2020-10-14 15:30:17 475

原创 C#中的异常处理try catch finally

C#中的异常处理是一种检测和处理代码中运行时错误的机制,由try catch和finaly块提供支持。.NET框架提供了常见异常的内置类。程序执行期间发生的异常,它们可能是由于逻辑或系统错误引起的。如果程序员未提供处理这些异常的机制,则.NET运行时环境将提供默认机制,该机制将终止程序执行。try..catch..finallyC#提供了三个关键字try,catch和finally,以实现异常处理。尝试将可能引发异常的语句括起来,而如果存在则catch会处理异常。finally可以用于完成任何.

2020-10-13 18:29:56 4164

原创 “throw” 和“throw ex”之间有区别吗?

throw和throw ex都用于了解异常发生的位置。throw ex重写异常的堆栈跟踪信息,而不管实际在哪里被抛出。先看以下代码:输出结果如下所示:Exception 1: at throws.Program.DivByZero() in C:\Users\Administrator\source\repos\copy\throw\Program.cs:line 65 at throws.Program.ThrowException1() in C:\Users\Admin...

2020-10-13 17:25:29 829

原创 如何在C#中做deep copy?

介绍System.Object是所有类,结构,枚举和委托的基类。我们可以说它是类型层次结构的根。System.Object有一个称为MemberwiseClone的方法,该方法有助于创建当前对象实例的克隆副本。问题陈述System.Object的MemberwiseClone方法创建一个新对象的浅表副本,并将当前对象实例的非静态字段复制到一个新对象。复制对象是按属性逐个执行的,如果属性是值类型,则它会一点一点地复制数据,如果属性是引用类型,则它将复制原始对象的引用。这意味着MemberwiseC.

2020-10-13 16:34:07 2265 1

原创 C# 中的浅拷贝和深拷贝

C#中的浅复制和深复制示例在本文中,我将通过示例讨论C#中的浅拷贝和深拷贝。这是我们上一篇文章的续篇。因此,在继续本文之前,请阅读我们以前的文章,其中我们使用示例讨论了C#中的原型设计模式。浅复制和深复制在复制原型设计模式中的对象中起着重要作用。因此,在本文中,我们将通过示例讨论什么是“浅复制”和“深复制”以及它们之间的区别。了解C#中的浅表复制:如果是“浅复制”,它将从现有对象创建新对象,然后将当前对象的值类型字段复制到新对象。但是在引用类型的情况下,它将仅复制引用,而不复制被引用对象本身

2020-10-13 14:56:32 2136

原创 C#引用类型和值类型在堆、栈中的存储

一、栈和堆是什么程序运行时,它的数据必须存储在内存中。一个数据项需要多大的内存、存储在什么地方、以及如何存储都依赖于该数据项的类型。运行中的程序使用两个内存区域来存储数据:栈和堆。1、栈栈是一个内存数组,是一个LIFO(last-in first-out,后进先出)的数据结构。栈存储几种类型的数据:某些类型变量的值、程序当前的执行环境、传递给方法的参数。栈的特点:(1)数据只能从栈的顶端插入和删除。(2)把数据放到栈顶称为入栈。(3)从栈顶删除数据称为出栈。2、堆堆是一块内存

2020-10-12 16:14:10 7829 4

原创 四、C#关键字

C#包含对编译器具有特殊含义的保留字。这些保留字称为“关键字”。关键字不能用作标识符(变量名,类,接口等)。C#中的关键字分布在以下类别中:修饰语修饰语关键字是特定的关键字,指示谁可以修改类型和类型成员。修饰符允许或阻止程序的某些部分被其他部分修改。修饰语关键字 abstract async const event extern new override partial readonly sealed static unsafe v.

2020-08-28 18:33:55 619

原创 三、第一个C#程序

在这里,您将学习用C#创建一个简单的控制台应用程序,并了解控制台应用程序的基本构建块。C#可以在基于窗口,基于Web或控制台的应用程序中使用。首先,我们将创建一个控制台应用程序以使用C#进行开发。打开本地计算机上安装的Visual Studio(2017或更高版本)。从顶部菜单中单击File-> New Project ...,如下所示。从如下所示的“新建项目”弹出窗口中,在左侧面板中选择Visual C#,然后在右侧面板中选择Console App。在名称部分中...

2020-08-28 17:44:16 265

原创 二、C#版本历史

C#最初是在2002年随.NET Framework 1.0引入的,此后发布了很多个版本。下表列出了每个C#版本中引入的重要功能:版本 .NET Framework 视觉工作室 重要功能 C#1.0 .NET Framework 1.0 / 1.1 Visual Studio .NET 2002 基本特征(Basic features) C#2.0 .NET Framework 2.0 Visual Studio 2005

2020-08-28 17:23:16 1556

原创 一、C#入门

C#是Microsoft开发的一种简单而强大的面向对象的编程语言。C#可使用编程工具Visual Studio创建各种类型的应用程序,例如Web,Windows,APP,U3D游戏,控制台应用程序或其他类型的应用程序。本专栏的C#教程将帮助您从基本主题到高级主题学习C#的基本知识。这些教程分为几个部分,每个部分包含许多相关主题,其中包含易于理解的解释,实际示例,有用的技巧和明了的注释,以及“要记住的要点”部分。这些教程是为想要逐步学习C#的初学者和专业人士而设计的。...

2020-08-28 16:34:11 273

原创 深入浅出C#反射(Reflection)原理和应用场景

今天带领大家详详细细的把反射好好说一遍,反射包含的东西还是非常多的,首先在这里准备了一些简单的代码,有个Model类库,数据访问层的DB.SqlServer类库,数据访问层接口DB.Interface类库,以及MyReflection的控制台程序,其中DB.SqlServer继承DB.Interface:我们想在Program的Main方法中调用DB.SqlServer类库中SqlServerHelper类中的查询方法Query。以往实现这种功能都是在MyReflection的控制台程序中引用DB.

2020-08-17 12:09:02 12535

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(十)

笔者近几年前前后后面试了50+公司左右,怎么讲呢,每个面试官的风格都不一样,要问的问题也不尽相同。但是面试是需要技巧的,提前准备工作以及如何把简历写得让人眼前一亮是很有必要的,关于这一块将在其它篇幅作介绍。话不多说,先总结出面试遇到的主流面试题,将分8篇文章,每篇25道,几乎涵盖90%以上的面试知识点,适用于中高级、架构师去复习,暂时还那么多时间把答案写出来,后续会加上,如果大家有好的答案也可以在评论区写出来,谢谢大家。226、内存泄漏和内存溢出的区别是什么?227、HTTPS和HTTP的区别是什么

2020-07-30 12:16:28 687

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(九)

笔者近几年前前后后面试了50+公司左右,怎么讲呢,每个面试官的风格都不一样,要问的问题也不尽相同。但是面试是需要技巧的,提前准备工作以及如何把简历写得让人眼前一亮是很有必要的,关于这一块将在其它篇幅作介绍。话不多说,先总结出面试遇到的主流面试题,将分8篇文章,每篇25道,几乎涵盖90%以上的面试知识点,适用于中高级、架构师去复习,暂时还那么多时间把答案写出来,后续会加上,如果大家有好的答案也可以在评论区写出来,谢谢大家。201、简述 private、 protected、 public、 interna

2020-07-30 11:10:23 971

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(八)

176、Mutex和lock有何不同?一般用哪一个作为锁使用更好?177、线程池的优点有哪些?又有哪些不足?178、多线程和异步有什么关系和区别?179、lock为什么要锁定一个参数,可不可锁定一个值类型?这个参数有什么要求?180、字段与属性有什么异同?181、使用什么工具来调用存储过程?182、&和&&的区别?183、Session有什么重大BUG,微软提出了什么方法加以解决?184、185、186、187、188、189、.

2020-07-30 10:12:26 1209

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(七)

151、编写一个带参数,带返回值的自定义事件。152、多服务器如何生成全局唯一ID?153、简述socket通信建立和断开链接的过程。154、Javascript是否存在面向对象概念中的类?如果存在,如何定义?155、在前端开发中,SPA代表什么意思?实现SPA的有哪些框架?用过哪些方式来优化页面组件156、如何解决.net中的内存泄漏问题?用到过哪些检测工具?157、列出你所了解的设计模式,并用代码写出一个例子。说一说使用设计模式可能带来的好处。158、在设计一个自定义类型时应

2020-07-30 10:11:25 743

原创 2020年最新 C# .net 面试题,月薪20K+中高级/架构师必看(六)

126、详诉下内存中的堆和栈。127、用SQL进行行转列。128、Ajax调用的时候,get、post有什么区别?129、返回类型ActionrResult 的方法可以重载吗? 返回的类型有哪几种?130、.net 怎么实现事务?131、数据库优化方面有什么了解?132、描述线程与进程的区别?133、什么是Windows服务,它的生命周期与标准的EXE程序有什么不同134、什么是强类型,什么是弱类型?哪种更好些?为什么?135、PID是什么?在做系统的故障排除时如何使用.

2020-07-30 10:09:55 650

Windows-Redis-x64-3.2和图形化管理工具

windows版本的Redis3.2安装工具包(包括解压缩绿色版和安装版),以及Redis服务端图形化界面管理工具RedisDesktopManager。

2019-09-04

C#加密解密Demo.zip

说到加密,可能大家最熟悉的就是MD5了,一般保存密码、查看文档是否更新都是用到MD5加密,MD5加密是不可逆的,不能解密出明文。相对的可逆加密是可以解密的,可逆加密又分为对称加密和非对称加密,比较流行的对称加密有DES、AES,非对称加密有RSA。C#里的MD5、DES、AES、RSA加密解密详细方法已封装,大家安心下载使用。

2019-08-30

空空如也

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

TA关注的人

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