自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

随笔记

分享是一种快乐

  • 博客(58)
  • 资源 (1)
  • 收藏
  • 关注

原创 【Python自学记】13.扩展库--Pandas库

Python 扩展库–Pandas简介Pandas是一个用于处理高级数据结构和数据分析的Python库。基于Numpy构建的一种工具,纳入了大量模块和库一些标准的数据模型,提高python处理大数据的性能。广泛应用于金融、经济、数据分析、统计等商业领域,为从业者提供了便捷。特点:支持Dataframe格式,自定义索引,Dataframe是一种高效快速的数据结构对象可以将不同格式的数据文件加载到内存中可处理时间序列或非时间序列数据可基于标签来切片索引,获得大数据集子集可进行高性能数据分

2021-01-22 11:09:23 611 2

原创 【Python自学记】12.扩展库--Numpy库

Python 扩展库 --Numpy库介绍Numpy (Numerical Python) 是python中的一个基础工具包,用以进行科学计算及数据分析,Numpy中单一数据类型的多维数组以ndarray的形式存储,可进行快速矢量算术运算,Numpy还可用于磁盘数据的读写以及内存映射文件的操作,实现数据的快速读写与输出,Numpy也是数据分析必不可少的工具,可以进行数据清洗、数据转换等矢量化数组运算。安装# python -m pip会使用您指定为python的Py

2021-01-10 21:19:47 251

原创 frp实现内网穿透

条件:需要一个有公网IP的云服务器(我的是腾讯云)配置步骤:1.frp下载:https://github.com/fatedier/frp/releases 下载最新版,根据自己的服务器下载对应版本(本人是linux64系统)wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz2.解压压缩包:tar -zxvf frp_0.34.3_linux..

2021-01-05 22:20:56 2823

原创 设计模式的分类及7大原则

设计模式(Design pattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。毫无疑问,设计模式于己于他人于系统都是多赢的,设计模式使代码编制真正工程化,设计模式是软件工程的基石,如同大厦的一块块砖石一样。项目中合理的运用设计模式可以完美的解决很多问题,每种模式在现在中都有相应的原理来与之对应,每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的核心解决方案,这也是它能被广泛应用的原因。设计.

2020-12-03 18:47:55 125

原创 读《小狗钱钱》

内容概要:《小狗钱钱》讲述的是一个故事,描述了在实施这些方法的过 程中可能遇到的挑战,并且告诉了你令人难以置信的结果。钱钱是一只 会说话的狗,它教一个12岁的小女孩学会了与钱打交道的方法。小女孩 不仅自己掌握了使用钱的技巧,还帮助父母走出了财务危机。《小狗钱钱》- 开篇语《小狗钱钱》- 第一章 白色的拉布拉多犬《小狗钱钱》- 第二章 梦想储蓄罐和梦想相册《小狗钱钱》- 第三章 达瑞,一个很会挣钱的男孩想读完一本书又觉得没有时间,关注【小猿读书】带你一起读完整本书...

2021-09-12 16:05:47 358

原创 15.基本类型包装类

基本类型包装类概述java 的数据类型分为两大类:基本类型和引用类型;基本类型只能保存一些常量数据,引用类型除了可以保存数据,还能提供操作这些数据的功能;对比基本类型包装类byteByteshortShortintIntegerlongLongfloatFloatdoubleDoublecharCharacterbooleanBoolean通过将基本类型的数据封装为包装类的对象,就可以提供更多的功能,使用面

2021-09-12 16:01:22 174

原创 Git之merge和rebase命令

merge和rebase开发一个新的功能(拉分支开发)为例:merge1、A分支拉取 test分支开发2、新建分支 :git checkout -b test3、test分支开发完成,合并test分支到A分支4、切到 A分支:git checkout A5、合并test分支 :git merge test6、查看一下分支提交历史,会看到一个分叉的分支 * | \ * * | | | / *rebase1、A分支拉取 test分支开发2、新建分支 :gi

2021-06-09 20:22:14 246

原创 【Java基础】14.字符串缓冲区&正则表达式

字符串缓冲区&正则表达式字符串缓冲区概念:就是用来保存临时的字符数据的空间;Java的字符串缓冲区类:StringBuffer:是线程安全的,效率相对比较低;如果在多线程环境下,对线程安全有要求,就要使用StringBuffer;StringBuilder:是线程不安全的,效率相对比较高;如果在单线程环境下,或者对线程安全没有要求,就可以使用StringBuilder;缓冲区是一个容器,对容器的数据操作,一般都有四种操作增:表示向容器中添加数据删:表示从容

2021-05-16 14:44:28 261

原创 【Java基础】13.String类

String 类使用面向对象的方式写程序,很多时候都是在直接使用别人写好的类;JDK中提供了大量类供我们使用,不过我们不需要去学习所有的类,只需要掌握开发中常用的几个类就行了;要用其他类只要会查API文档就行了;简介在Java中,我们使用最多的数据,除了基本类型,就是字符串了;字符串使用String类描述,1、使用String类,不需要手动导包;2、String类直接继承Object类;3、String类使用final关键字修饰,不能被子类继承;4、java中,所有字符串,都是

2021-05-08 21:47:46 126

原创 【Java基础】12.异常

异常介绍概念: 异常,就是不正常情况;程序中出现不符合预期的情况就是异常;作用:可以针对程序中出现的问题作出相应处理,提高程序健壮性;在程序中发生异常的地方通过日志技术将问题记录下来,帮助开发者快速排查错误;异常体系&分类体系Throwable:java异常体系的最高父类;java中所有可被抛出、捕获或声明的异常类,都要继承这个类或它的子类;Error:错误,表示程序中严重的不能被JVM处理的问题;遇到这种问题,JVM都会停止运行;Exception:异

2021-05-05 22:56:56 173 1

原创 【Java基础】11.面向对象_05

面向对象_05内部类概念:就是一个类定义在其他类里面的类;包含其他类的类,叫做外部类;被外部类包含的类,叫做内部类;分类(根据书写位置分)成员内部类(根据修饰符的不同分)静态成员内部类使用static修饰的内部类就是静态成员内部类;静态成员内部类,也和外部类的对象无关;静态成员内部类中可以书写任何成员;在外部类以外的类中使用静态成员内部类,和使用普通类一样,只需要在类名前添加外部类的类名;在外部类中,不管是静态函数还是非静态函数,使用静态成员内部类的静态成员,都是直

2021-04-24 23:05:08 83

原创 【Java基础】10.面向对象_04

面向对象_04抽象类概念将abstract关键字写在class前面的类叫抽象类抽象函数格式:抽象函数没有函数体,连大括号都没有抽象函数用abstract关键字修饰,写在返回值类型前面如果一个函数描述不清,不知道具体该如何实现,就要定义为抽象函数;如果一个类中存在抽象函数,这个类就是描述不清的,也要定义为抽象类特点:抽象类不能实例化(不能创建对象),只能由子类继承子类继承抽象类,必须实现父类的抽象函数;否则子类也是抽象的抽象函数不能直接使用,必须通过子类的继承使用

2021-04-24 22:59:08 97

原创 【Java基础】09.面向对象_03

面向对象_03代码块概念:就是使用大括号括起来的一段代码;格式{ 代码;}分类(代码块的按照书写位置):局部代码块书写在一个类的局部位置(函数里面的)的代码块就是局部代码块;局部代码块,因为定义在函数里面,所以不能直接使用,而是通过调用它所在的函数来执行;局部代码块,可以用来限定变量的使用范围;成员代码块(根据是否使用static关键字修饰再分类)静态代码块:静态代码块直接写在类里面,使用static关键字修饰:构造代码块:也是直接写在类中,但是不

2021-04-18 15:32:52 85

原创 【Java基础】08.面向对象_02

面向对象_02封装概念: 封装,就是包装的意思用法java中的封装:函数:封装了一段实现功能的代码;类:封装了函数和成员变量;如果外界需要访问被封装的成员变量,就需要在类中提供公开的get和set方法封装的好处:提高代码复用性;隐藏内部实现细节,提高安全性;private关键字一个访问权限修饰符,表示被修饰的成员(成员变量、函数)是私有的,只能在定义它的类中使用,不能被其他地方使用;修饰成员变量,直接将private关键字写在成员变量的数据类型前面;修饰函数,写

2021-04-17 16:28:35 93

原创 【Java基础】07.面向对象_01

面向对象_01面向过程和面向对象面向过程解释:按照这种思想写程序,我们就要先分析整个程序有哪些功能组成,然后分别写函数实现每一个功能,最后按顺序调用这些函数,实现整个功能;面向对象解释:是一种解决问题的思想;按照这种思想解决问题,我们关心的是事情中有哪些参与者举例例如:吃饺子面向过程的方法:1、包饺子:买菜、洗菜,买面粉;先剁馅,再和面;包饺子;2、煮饺子:烧开水,下饺子;3、吃饺子:4、收拾:收拾碗筷;面向对象的方法:1、有饺子:找个饺子馆,告诉老板要吃

2021-04-11 19:01:40 173

原创 【Java基础】06.数组(下)

数组(下)选择排序选择排序的基本思想是 :每一趟从待排序的数据元素中选出最小(或最大)的一个元素,顺序放在已排好序的数列的最后,直到全部待排序的数据元素排完。public class Demo { public static void main(String[] args) { int[] arr = {70, 80, 31, 37, 10, 1, 48, 60, 33, 80}; selectionSort(arr);

2021-03-31 15:22:27 166

原创 【Java基础】05.函数、数组(上)

函数、数组(上)函数介绍:就是定义在 类中 的 具有特定功能 的一段 独立小程序,与main函数同级别。语法:修饰符 返回值类型 函数名(参数类型 形式参数1, 参数类型 形式参数2, ...){ 执行语句; return 返回值;}返回值类型 : 函数运行后结果的数据类型。参数类型 : 是形式参数的数据类型。形式参数 : 是一个变量,用于存储调用函数时传递给函数的实际参数。实际参数 : 传递给形式参数的具体数值。return : 用于结束函数。

2021-03-24 21:04:32 110

原创 docker安装Redis(单机版)

1.拉取最新镜像docker pull redis:latest2.创建外挂配置和数据文件夹mkdir -p /opt/redis/configmkdir -p /opt/redis/data在/opt/redis/config目录下,下载官网配置文件再修改, 官网redis.conf下载,修改内容如下:bind 0.0.0.0 # 这是redis可以任何ip都可以访问,port 16379 #访问端口,最好不要使用默认端口requirepass 123456 #设置密码,不要太..

2021-03-20 21:04:30 237

原创 【Java基础】04.基础知识 (下)

基础知识 (下)7.编码表Unicode字符集: Java语言使用Unicode标准字符集,该字符集由Unicode协会管理并接受其技术上的修改,最多可识别65536个字符.Unicode字符集前128个字符刚好是ASCII码,大部分国家的“字母表” 的字母都是Unicode 字符集中的一个字符.Java所谓的字母包括了世界上大部分语言中的“字母表”,因此,Java所使用的字母不仅包括通常的拉丁字母a, b, c等,也包括汉语中的汉字,日文,朝鲜文,俄文,希腊字母以及其他许多语言中的文字.对于ch

2021-03-20 20:54:05 129

原创 Linux下安装jupyter

Linux下安装jupyter1.安装jupyter# python -m pip会使用您指定为python的Python解释器来执行pippython -m pip install jupyter2.生成jupyter配置文件# root用户:jupyter notebook –generate-config –allow-root# 非root用户jupyter notebook –generate-config#输出信息:Writing default config t

2021-03-18 16:24:38 493

原创 【Java基础】03.基础知识 (中)

基础知识 (中)5.变量变量是内存中的一个存储区域.在内存中,每一块空间都有其独一无二的地址。该区域有自己的名称(变量名)通过名称就可以找到这块内存地址和类型(数据类型)决定了开辟空间的大小。该区域的数据可以在同一数据类型范围内不断变化。定义变量的格式:数据类型 变量名 = 值;数据类型:数据类型内存所占字节byte1 字节char2 字节short2 字节int4 字节long8 字节float4 字节double

2021-03-17 22:56:12 132

原创 【Java基础】02.基础知识 (上)

基础知识 (上)1.Java中的关键字关键字说明abstract表明类或者成员方法具有抽象属性assert用来进行程序调试boolean基本数据类型之一,布尔类型break提前跳出一个块byte基本数据类型之一,字节类型case用在switch语句之中,表示其中的一个分支catch用在异常处理中,用来捕捉异常char基本数据类型之一,字符类型class类const保留关键字,没有具体含义continu

2021-03-16 21:50:53 168

原创 【Java基础】01.概述

Java 概 述简介Java 是由 Sun Microsystems 公司于 1995 年 5 月推出的 Java 面向对象程序设计语言和 Java 平台的总称。由 James Gosling和同事们共同研发,并在 1995 年正式推出。后来 Sun 公司被 Oracle (甲骨文)公司收购,Java 也随之成为 Oracle 公司的产品。2005 年 6 月,JavaOne 大会召开,SUN 公司公开 Java SE 6。此时,Java 的各种版本已经更名,以取消其中的数字 “2”:J2EE

2021-03-16 21:48:35 94

原创 【Python自学记】11.网络编程

Python 网络编程基础知识HTTP:(HyperText Transport Protocol)是超文本传输协议缩写URL:(Uniform Resource Locator)是统一资源定位符的缩写HTTP请求方式对比项GETPOST提交方式提交的参数数据放在URL之后,使用?与URL进行分割,多个参数之间使用&分隔提交的参数数据不放在URL中提交,模拟提交表单数据提交数据长度受限无限制安全性安全性低,提交的数据与UR

2021-01-02 18:44:27 77

原创 选基工具使用

前言现在的市场有太多的成熟app或者网站买卖基金,但是现在的市场有六千多只基金,对于我们选基太难了,我们不可能傻瓜式的去每只基金都去查查分析,一般我们小白买基途径有几种方式:通过基金网站或者基金类型的app买人家推出的热点基金关注基金类型的公众号,通过人家介绍关注某些大V的组合基金,跟投或者选择性的选几个基金买…还有通过各个不同渠道获得要买的基,但是大家有想过,基金不是一种快速挣钱的工具,只是一种通过长时间积累投入获取利润的方式, 我们投资基金是一种漫长的过程,不可能总是依赖..

2021-01-01 16:41:35 1085

原创 VirtualBox虚拟机导出及磁盘扩展

VirtualBox虚拟机导出VirtualBox虚拟机的迁移除了复制还有一种通用方式是导出复制的方式请看:VirtualBox虚拟机迁移/复制(带快照)简单方便的导出方式(推荐),因为适用其他虚拟机,如:VMWareVirtualBox虚拟机磁盘扩展1.创建磁盘和添加磁盘对于创建时使用哪种磁盘文件,如下图介绍(我自己使用的VMDK):2.查看能不能识别磁盘3.对磁盘分区fdisk /dev/sdb选N进行分区两个选项,e为分逻辑分区,p为主分

2020-12-27 17:11:22 425

原创 VirtualBox虚拟机迁移/复制(带快照)

本次虚拟机迁移是基于VirtualBox虚拟机,如果要尝试安装和创建虚拟机请前往:virtualbox的安装与使用、安装镜像创建虚拟机VirtualBox的结构介绍xxx.vdi : 这个文件是磁盘映像,创建虚拟机的时候创建的xxx.vbox 和 xxx.vbox-prev:这个两文件虚拟机的配置文件,记录了所以配置信息,如快照,虚拟磁盘等,核心文件是.vbox文件xxx.vmdk : 这个文件是虚拟机磁盘,是用来扩展机器存储空间,创建虚拟机一般是没有次文件的{UUID}.vd

2020-12-26 21:10:54 1728

原创 【Python自学记】10.正则表达式

Python 正则表达式re模块re模块中封装了很多正则表达式相关的函数,非常方便的使用正则表达式对字符串进行各种规则匹配检查,常用一个函数是match函数match(patten,string)函数:用于对字符串进行正则匹配,patten表示正则表达式,string表示待匹配字符串,匹配成功返回Match对象,否则返回None# match 函数 (从左开始匹配,没匹配成功,不会向后面匹配,匹配失败)import restr1 = "hello python"str2 = "pyth

2020-12-16 20:53:10 172

原创 【Python自学记】9.文件操作

Python 文件处理读写文件打开文件open函数打开文件,返回文件对象。open 函数打开文件三种常用模式:只读模式,使用r表示,用于读取文件内容,不能向文件中写入数据只写模式,使用w表示,用于将数据覆盖写入文件中追加模式,使用a表示,用于将数据追加写入文件的末尾注:打开一个不存在的文件时,只读模式会报不存在文件异常,只写和追加模式都会创建一个写文件# 打开不存在的文件f = open('test.txt','r') # 报错:FileNotFoundError: [Errn

2020-12-12 18:13:28 156

原创 【Python自学记】8.日期时间

Python 日期处理time模块time函数调用time函数,返回当前的时间戳,返回的时间戳是以秒为单位的浮点数import timeprint(time.time()) #获取当前时间戳localtime函数可传入一个可选参数,以秒为单位的时间戳传入参数,将时间戳格式化为本地时间,返回一个struct_time元组不传入参数,将当前时间戳格式化为本地时间,返回一个struct_time元组Struct_time属性描述:属性含义值

2020-12-09 22:32:57 1201

转载 一篇关于SQL书写建议 && 索引优化的总结

前言平时写sql写的比较多,一直没把优化相关的知识整理记录下来,本文章记录本人在日常开发中,对SQL优化的一些技巧;我将结合demo(一个百万级数据表),去实践验证这些优化技巧。测试用例接下来,我们创建一个测试表并生成100w条测试数据,有助演示或验证接下来的知识-- 创建一个测试表CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `a` varchar(255) DEFAULT NULL, `b` varcha

2020-12-08 22:31:47 155

转载 关于缓存穿透、缓存击穿、缓存雪崩的模拟与解决(Redis)

前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,但当遇到大量数据并发请求的需求,如秒杀、热点数据请求等,若所有请求都直接打到数据库上会占用大量的硬盘资源,系统在极短的时间内完成成千上万次的读/写操作,极其容易造成数据库系统瘫痪。此时我们会引入缓存层来阻挡大部分的请求,减轻数据库压力。但引入缓存层往往带来缓存穿透,缓存击穿,缓存雪崩等问题。本文以Redis为例模拟且解决以上三个问题。缓存击穿缓存击穿是指缓存中没有但数据库中有的数据(一般是缓存时间到期),这时由于并发用户特别多,同时读缓存

2020-12-07 16:45:17 523 1

原创 【Python自学记】7.异常处理

Python 异常处理1.异常捕获语法格式# 单个异常try: 可能产生异常的代码except 异常类型名称 as 对异常类型名称重新命名: 异常处理 # 多个异常try: 可能产生异常的代码except (异常类型名称1,异常类型名称2,...) as 对异常类型名称重新命名: 异常处理捕获单个异常# 处理打开一个文件产生的有可能产生异常try: open('test.txt') print('打开文件成功!')except FileN

2020-12-04 23:29:11 82

原创 【小白理财】个人总结:大神与小白区别

1.大神的投资先看看《巴菲特和索罗斯的投资习惯》里面的一张图:这张图总结了投资中所需要的所有因素。在大神的投资系统中有个人掌握的技能,投资策略和纠错机制2.小白的投资先看一张图:这张乱线图很像我们小白的投资思绪,没有或者杂乱无章的基础知识,有或者没有的投资策略,根本没有纠错机制。3.区别与总结个人认为的重要区别:1、大神们有自己的投资系统,小白们啥都没有。2、大神们会根据自己策略止盈止损,小白们只会追涨杀跌,忍痛割肉。3、大神们策略失败了会找原因,小白们亏钱了只会说这垃圾,以后不

2020-12-01 23:22:28 446

原创 【小白理财】了解基金

一.基金基本常识1.概念基金一般是指证券投资基金,它既是一种投资方式,也是一种理财工具。简单来说,基金就是汇集投资者的资金,然后交给专业的机构投资于股票或者债券等证券,以获取投资利润的一种理财工具。相对股票等其他投资而言,投资基金的风险相对较低且有专业人员管理。2.优势是一种轻松简单的理财方式能享受专业理财的服务风险相对较低投资便利,流动性强3.基金分类4.专业术语二.指数基金指数基金可以这么理解,就是按照某个规则挑选出一个篮子股票组合,并反映这个组合的平均价格走势。也是.

2020-11-29 17:48:29 215

原创 【Python自学记】6.面向对象

Python 面向对象1.面向对象编程面向对象编程(Object Oriented Programming,简称:OOP )是一种解决软件复用的设计和编程方法,就是根据现实社会中的事物,抽象出事物的属性和功能,后然将抽象出来的属性和功能封装成对象的属性和方法,在软件中通过复用对象实例提高软件的开发效率 ,很多高级编程语言都遵循面向对象的编程方法。2.类和对象类:是一类事物的抽象,定义了一类事物的属性和行为类的构成:类名、属性、方法定义:class 类名: def 方法名(s

2020-11-29 17:40:12 129

原创 SpringBoot构建jar包与依赖包分离

1.分离原由SpringBoot项目构建jar部署,通过使用 java -jar xxx.jar 命令启动服务非常方便,但是通过maven构建的jar包含 \BOOT-INF\lib\下的所有依赖jar包,导致jar包文件太大2.正常构建pom.xml文件<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifact

2020-11-28 21:12:58 690

原创 SSH 内网穿透

1.准备两台机器(一台有公网IP A,一台是没有公网IP B)2.操作(1) A机器运行sshd ,将GatewayPorts设置为yes,并重启sshd(2) B机器执行如下命令ssh -NR 9999:localhost:22 A机器的用户@A机器的Ip参数解释-N : 不执行任何命令-R : 将端口绑定到远程服务器,反向代理9999 : 自己设定的在远程服务器的监听端口localhost:22 : 本地的服务ip和监听端口A机器的用户@A机器的Ip : 远程服务

2020-11-26 23:27:07 577

原创 【Python自学记】5.模块

Python 模块1.包在Python中一个包内要创建__init__.py文件,来区分是包还是普通文件夹。一个项目中可以有多个包,每个包都可以含有子包或者多个模块,如图:2.模块在Python中一个以.py结尾的文件就是一个模块,不同包下可以用相同名称的模块,模块之间使用包名.模块名来区分。引入模块的方法:描述引入方法引入单个模块Import 模块名称引入多个模块Import 模块名称1,模块名称1,…引入模块中的指定函数或者类等from

2020-11-26 23:22:39 95

原创 【小白理财】定投实践结束 - 番外篇

这只基2020.07.09卖了,从低估区开始定投到了高估区,开投文章 【小白理财】智能定投实践 5,我不是来炫耀我定投挣钱了,而是来分享自己的心得。当时定投此基金的背景是:我开始写投资理财的心得分享不能只纸上谈兵不实践,所以我就开始着手找例子来实践,使用最常见的指数定投方法,然后选择一个合适的策略进行实践,之前预期估计会在今年12月份或者明年1月份达到高估区的,幸福来的太突然了,三个多月的时间就结束了定投。我按照自己的目标去执行的,后面再涨了也与我无关了。心得:1.理财投资要有止盈止损目标,按照自己.

2020-11-24 21:51:04 165

PC游戏编程

本书是一本专论机器搏奔的作品。详细披露了编写人机对奔程序的原理,技术和各种相关内容。包含一个完整的中国象棋人机对奔程序和一个完整的五子棋人机对奔程序实例。毫无保留的展示了估值核心,走法产生,以及约十种不同的搜索引擎,彻底解析了高性能博奔程序的秘密所在。实用性是本书的最大特点,本书的目标是让一个粗通程序设计的人在一个月内写出令人惊讶的人机博奔程序。完全没有一般人工智能书籍晦涩难懂的感觉。

2016-10-05

空空如也

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

TA关注的人

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