自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 SQL语句练习

3、 查询所员工的email全名,公司email 统一以 " @sina.com " 结尾。9、查询80号部门工资大于8000并且提成高于1.0的员工姓名,工资以及提成。10、查询职位(job_id)为'AD_PRES'的员工的工资。7、查询50号部门每人增涨1000元工资后的人员姓名以及工资。8、查询80号部门工资大于7000的员工的全名以及工资。2、打印公司里所有的manager_id。6、查询50号部门的员工姓名以及全年工资。5、查询80号部门的所有员工。1、统计每个部门的员工人数。

2023-06-06 22:30:44 1155

原创 Linux rpm和yum/dnf安装方式及区别

rpm是以一种数据库记录的方式来将将所需要的套件安装在Linux主机的一套管理程序。也就是说Linux系统中存在一个关于rpm的数据库,它记录了安装的包与包之间的依赖相关性。版权声明:本文为CSDN博主「大宇16」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。升级:-U, --update, -F, --freshen。rpm -qa 查看系统所有已安装的软件包。安装:-i, --install。卸载:-e, --erase。查询:-q, --query。

2023-06-06 22:11:45 400

原创 1.Windows环境配置

3. jdk下载与安装 https://www.oracle.com/java/technologies/javase/jdk11-archive-downloads.html 4. jdk的配置 增加JAVA_HOME环境变量,指向JDK安装根目录 编辑path环境变量,增加%JAVA_HOME%\bin。4. 基本配置 桌面右键 -> 个性化 -> 主题 -> 桌面图标设置 -> 此电脑/回收站 此电脑 -> 查看 -> 文件扩展名 Windows更新 -> 开发者选项 -> 从任意源安装应用。

2023-06-06 22:11:12 534

原创 服务器Linux系统下常见的软件包有哪些

因此,同一软件在不同的应用平台上需要使用不同的RPM包。这些软件都是以源码方式发布,因此,用户在使用软件时需要自己编译此应用程序,然后再安装,在安装过程中需要Linux系统自身的开发工具和内核源代码的支持。这种软件包是以RPM格式封装的源代码软件包,其安装过首先需要将软件通过RPM命令解压成src格式,安装过程中需要Linux系统自身的开发工具和内核源代码的支持。版权声明:本文为CSDN博主「大宇16」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。文章标签: java。

2023-06-06 22:11:09 230

原创 1. Linux常见的压缩包有哪些?

zip解压缩的文件不会覆盖原来的文件,而gzip和bzip2都会覆盖原来的文件。zip的压缩格式:zip 压缩以后的文件名 当前需要压缩的文件名 压缩。bzip2:是文件的一种压缩格式 压缩后的文件后缀名为.bzp2。gzip:是文件的一种压缩格式 压缩后的文件后缀名为.gzp。zip:是文件的一种压缩格式,压缩后的文件后缀名为.zip。bzip2的压缩效率要比gzip的压缩效率高。bzip2 -d 要解压缩的文件 解压缩。bzip2 要压缩的文件 压缩。gzip 要压缩的文件 压缩。

2023-06-06 22:10:26 59

原创 IP子网掩码的分类规则

大型网络包含大量的主机,而小型网络包含少量的主机。为了满足不同场景的需要,网络必须使用一种方式来判断 IP 地址中哪一部分是网络 ID,哪一部分是主机 ID。IP 地址为 32 位地址,被分为 4 个 8 位段。B 类:前 16 位表示网络 ID,后 16 位表示主机 ID;A 类:前 8 位表示网络 ID,后 24 位表示主机 ID;C 类:前 24 位表示网络 ID,后 8 位表示主机 ID;该地址分配给任何需要的人使用。D 类:不分网络 ID 和主机 ID;E 类:不分网络 ID 和主机 ID;

2023-06-06 22:06:31 118

原创 Shiro为什么要先认证后授权

我的理解是,首先Shiro的安全机制就像一所高中一样,而进入学校这需要进行认证,认证标识则为学生卡,当学生进入学校时只需要刷卡认证即可进入学校,而一些非法人员,则无法通过。授权,就可以理解为是校长在分发身份,对于一所学校来说,学生众多校长不可能全部认识,所以如果直接授权的话,可能会出现安全隐患。而Shiro不先进行验证的话,可能会使一些非法人员通过非法手段直接进入后台,这可能会导致十分严重的安全事故。作为十分出色的安全框架Shiro,他的正常使用流程是,验证,授权,分配资源。但为什么要先认证再授权呢?

2023-05-19 08:49:32 57

原创 Shiro退出机制是什么?

实现步骤如下,首先在Shiro配置文件下注明/logout=logout,这样当访问根路径logout时,可以直接跳转到logout的逻辑代码中去,在logout的contrller中需要利用session的 getAttributeNames方法进行获取内容,然后使用while循环调取session的删除方法将session作用域中的内容全部删除,然后再利用subject的api getsubject方法获取subject的内容,然后调取logout方法进行删除subject内容。

2023-05-19 08:48:48 243

原创 什么是Shiro?默认主配置文件是什么?

Shiro的认证是通过从数据库获取值进行比对,成功则进入,失败则被拦截在外。当你成功入职进入公司后,则是要到人事部获取自己的工作牌和新人手册,人事部会根据你的职位告诉你你的职责,工作区域等多个你可利用的资源,这对应的就是Shiro的授权和资源分配,当大管家给你授权之后,还会根据你的职责分配你所能利用的所有资源。这就是shiro的大致功能的理解。Shiro作为目前最火热的安全框架,他的强大功能深受很多编程大佬的喜爱,Shiro可以帮助开发者实现认证、授权、加密、会话管理、web继承、缓存等多种功能。

2023-05-19 08:47:47 40

原创 谈谈你对“约定大于配置”的理解

约定大于配置,在SpringBoot框架的开发者眼中,很多开发者都会遵守开发准则,都已经形成了一个非常良好的开发习惯,可以理解为,现在的我们素质变高了,不会再乱扔垃圾了,在约定大于配置没有出现之前,你乱扔垃圾,也就是不道德,但不违法。在开发中,没有这个约定的时候,运行不会给你报错,只会给你提示,但是出现这个约定之后,他会给你直接报错,并且不会详细的把报错点提供给你。在SpringBoot框架中,对于已经形参好习惯的程序员来说,简直就是神仙框架,只要遵守约定,你就可以享受SpringBoot带来的极致享受。

2023-05-19 08:47:14 323

原创 SpringBoot默认可以识别JSP文件吗?怎么处理?

SpringBoot默认可以识别JSP文件吗?不能,SpringBoot默认无法识别很多文件,如JSP文件、XML文件,但是可以通过文件设置,让SpringBoot识别这些文件内容。SpringBoot的项目大多是基于Maven下创建的,所以实现SpringBoot识别JSP文件,需要在pom.xml文件中进行插件插入。

2023-05-19 08:46:44 91

原创 谈谈你对“约定大于配置”的理解

约定大于配置,在SpringBoot框架的开发者眼中,很多开发者都会遵守开发准则,都已经形成了一个非常良好的开发习惯,可以理解为,现在的我们素质变高了,不会再乱扔垃圾了,在约定大于配置没有出现之前,你乱扔垃圾,也就是不道德,但不违法。在开发中,没有这个约定的时候,运行不会给你报错,只会给你提示,但是出现这个约定之后,他会给你直接报错,并且不会详细的把报错点提供给你。在SpringBoot框架中,对于已经形参好习惯的程序员来说,简直就是神仙框架,只要遵守约定,你就可以享受SpringBoot带来的极致享受。

2023-05-19 08:46:12 46

原创 什么是IP 掩码 网关 DNS

使用在不同的通信协议、数据格式或语言,甚至体系结构完全不同的两种系统之间,网关是一个翻译器,与网桥只是简单地传达信息不同,网关对收到的信息要重新打包,以适应目的系统的需求。DNS:(Domain Name System 的缩写)的作用非常简单,就是根据域名查出对应的 IP 地址,你可以把它想象成一本巨大的电话本,换句话说,DNS 是将域名映射到响应 IP 地址的服务。网关在网络层以上实现网络互连,是最复杂的网络互连设备,仅用于两个高层协议不同的网络互连。网关既可以用于广域网互连,也可以用于局域网互连。

2023-05-19 08:45:42 157

原创 IP子网掩码的分类规则

大型网络包含大量的主机,而小型网络包含少量的主机。为了满足不同场景的需要,网络必须使用一种方式来判断 IP 地址中哪一部分是网络 ID,哪一部分是主机 ID。IP 地址为 32 位地址,被分为 4 个 8 位段。B 类:前 16 位表示网络 ID,后 16 位表示主机 ID;A 类:前 8 位表示网络 ID,后 24 位表示主机 ID;C 类:前 24 位表示网络 ID,后 8 位表示主机 ID;该地址分配给任何需要的人使用。D 类:不分网络 ID 和主机 ID;E 类:不分网络 ID 和主机 ID;

2023-05-19 08:45:11 91

原创 什么是超网

通过这种方法,一个机构组织就可以申请多个C类地址块。构建超网就是用来解决地址不够用的问题,举个例子,假如有一个公司需要1000个ip地址,A类和B类地址的ip地址数太过于庞大,分配给一个只需要1000个地址的公司会造成巨大的浪费,这显然是不合适的,那么该公司就可以申请获取4个C类地址块,而这4个地址块就是4个网段,通过把这4个网段合并的网络就是超网。

2023-05-17 22:10:47 135

原创 IPv4与IPv6的区别

不管是IPV4、IPV6、二层协议、三层协议、四层协议,都称为封装协议。这些协议本身不会产生数据,这些协议只用定义一个封装报文,这些协议都是为上层的应用转发流量的时候来提供三层封装服务。在以太网环境中收到一个数据帧是以太网二封装它的类型字段的值是0X0800代表三层使用的是IPV4。类型字段的值是0x86DD代表三层使用的是IPV6。其中有个IP Options代表你IP报头可以包含这个字段也可以不包含,说明IPV4报头是可变长的。IPV4定义的就是IPV4地址,IPV6定义的就是IPV6地址。

2023-05-17 22:09:13 120

原创 进制的讲解

首先,11的下一位是11+1=12,但是由于12的2满足了二进制的要求,所以12的2清零,12的1加1,变成了20。但是十位的2又满足的二进制的要求,所以20的2清零,再往前一位+1,变成100。以我们最熟悉的十进制为例,每逢十进一,当数为19时,下一位数的尾数便满足该进制的最大数,于是下一位末位清零,前置位+1,变成20。接下来我会将各个进制一一讲解,但是我要强调一点:学习进制的时候,不要去想十进制的某某数字,转换为某进制时,等于某进制的多少。二进制的规则是满二进一,即二进制只有0和1,由0和1组成。

2023-05-17 22:08:53 214

原创 IP地址的分类和规划

1、有类地址:标准的IP地址(A、B、C三类)属于有类地址,例如A类地址掩码8位、B类地址掩码16位、C类地址掩码24位,都属于有类地址——(A/8 B/16 C/24)。无类地址:为了灵活地使用IP地址,需要根据需求对IP地址进行子网划分,使划分后的IP地址不再具备有类地址的特征,这些地址称为无类地址——(可变子网)。2、C类地址划分:IP地址进过一次自额昂划分后,被分为三个部分——网络位、子网位和主机位。1)、主机唯一的标识,保证主机间正常通信。2、私有地址包括3组:A、B、C三类(属于有类地址)

2023-05-17 22:08:23 214

原创 广域网和局域网的区别

局域网(Local Area Network,LAN)是在一个局部的地理范围内(如一个学校、工厂和机关内),一般是方圆几千米以内,将各种计算机,外部设备和数据库等互相联接起来组成的计算机通信网。局域网严格意义上是封闭型的。局域网是封闭型的,可以由办公室内的两台计算机组成,也可以由一个公司内的上千台计算机组成。覆盖的范围比局域网(LAN)和城域网(MAN)都广。广域网是由许多交换机组成的,交换机之间采用点到点线路连接,几乎所有的点到点通信方式都可以用来建立广域网,包括租用线路、光纤、微波、卫星信道。

2023-05-17 22:08:19 91

原创 虚拟机静态IP配置与原理

仅主机模式(Host-Only):虚拟网卡VMware Virtual Ethernet Adapter for VMnet1。仅主机模式:虚拟机处于一个全封闭的网络环境,虚拟机仅仅能和主机通信,但是连接不了互联网(真机可以上网)这就是虚拟机,安装了虚拟机就是在虚拟机上装了一个虚拟网卡,然后虚拟网卡的作用是什么呢?就相当于一个路由器,把上面的网线一分多进行连接起来,实现真机---虚拟机之间的通信。NAT模式:虚拟机借助NAT(网络地址转换)功能,通过宿主机的网络进行联网。3.三种模式的联网原理(图解)

2023-05-17 22:07:38 155

原创 密码加盐的设计理念

Salt 可以是任意字母、数字、或是字母或数字的组合,但必须是随机产生的,每个用户的 Salt 都不一样,用户注册的时候,数据库中存入的不是明文密码,也不是简单的对明文密码进行散列,而是 MD5( 明文密码 + Salt),也就是说:当用户登陆的时候,同样用这种算法就行验证。主要的关键字段就是这么两个,一个是登陆时的用户名,对应的一个密码,而且那个时候的用户名是明文存储的,如果你登陆时用户名是 123,那么数据库里存的就是 123。严格地说,这种算法不能算是加密,因为理论上来说,它不能被解密。

2023-05-17 22:06:06 29

原创 SpringBoot集成quartz的流程

除此之外,quartz还未trigger、job、schedule提供了响应的监听器,让你可以对他们的生命周期做出响应的处理,比如说一个任务触发前该做什么,触发后/结束后该做什么。坑4:cron类型的触发和简单触发似乎完全区别开,简单触发可以指定触发次数,而cron规则不能指定次数,要指定触发次数,似乎只能手动计数,然后在监听器中手动停掉。想让监听器在服务重启后一样有效的解决方法也很简单,配置一个全局的监听类就可以了,在监听类中可以用group来区别不同的调度类型,做出不同的处理。

2023-05-17 22:05:46 75

原创 Springboot与SSM的区别

SSM框架是SpringMVC、Spring、Mybatis三个组成,SpringMVC是Spring加MVC的一个组合,SpringMVC继承了MVC的强大功能与高强度的解耦合性,还有Spring的强大功能,比如自动装配的功能。之所以说SpringBoot是SSM的升级版,主要是由于SSM拥有的强大功能,SpringBoot中都有体现,并且有增强,SpringBoot更加主张约定大于配置,所以在SpringBoot框架中,你无法看到复杂多变的系统文件了,直接一个yml文件就可以解决。

2023-05-17 22:04:26 1147

原创 Status的理解

3.要说明的是, ActionServlet把formbean对象传递给action的execute方法之前,可能会调用formbean的validate方法进行校验,只有校验通过后才将这个formbean对象传递给action的execute方法,否则,它将返回一个错误页面,这个错误页面由input属性指定,(看配置文件)作者为什么将这里命名为input属性,而不是error属性,我们后面结合实际的运行效果进行分析。

2023-04-17 10:54:35 68

原创 被认错的String

substring()方法,substring是用于截取String字符串的内容,分为两种,一种是写一个下标,第二种是写两个下标,第一种是截取下标到结尾的字符。charAt()方法,charAt适用于读取字符串内的某一个字符值,比如用String声明的w的值为"qwer",则利用w.charAt(0)就可以获取到w字符串的q值,w.charAt(1)可以获取到w值。String不属于八大基本类型,String是一个jdk所自带的类,可以new对象和调取String特有的API。String常用的API。

2023-04-17 10:54:12 46

原创 同步加载与异步加载

同步异步 , 举个例子来说,一家餐厅吧来了5个客人,同步的意思就是说,来第一个点菜,点了个鱼,好, 厨师去捉鱼杀鱼,过了半小时鱼好了给第一位客人,开始下位一位客人,就这样一个一个来,按顺序来。相同, 异步呢,异步的意思就是来第一位客人,点什么,点鱼,给它一个牌子,让他去一边等吧,下一位客人接着点菜,点完接着点让厨师做去吧,哪个的菜先好就先端出来,同步的优点是:同步是按照顺序一个一个来,不会乱掉,更不会出现上面代码没有执行完就执行下面的代码, 缺点:是解析的速度没有异步的快;

2023-04-17 10:53:33 132

原创 ==与.equals的区别

记住,字符串的比较基本上都是使用equals方法。两条new语句创建了两个对象,然后用a,b这两个变量分别指向了其中一个对象,这是两个不同的对象,它们的首地址是不同的,即a和b中存储的数值是不相同的,所以,表达式a==b将返回false,而这两个对象中的内容是相同的,所以,表达式a.equals(b)将返回true。==操作符专门用来比较两个变量的值是否相等,也就是用于比较变量所对应的内存中所存储的数值是否相同,要比较两个基本类型的数据或两个引用变量是否相等,只能用==操作符。

2023-04-17 10:53:07 26

原创 Authentication认证和Authorization授权的作用

Authorization(授权) 发生在 Authentication(认证) 之后。授权嘛,光看意思大家应该就明白,它主要掌管我们访问系统的权限。比如有些特定资源只能具有特定权限的人才能访问比如admin,有些对系统资源操作比如删除、添加、更新只能特定人才具有。Authentication(认证) 是验证您的身份的凭据(例如用户名/用户ID和密码),通过这个凭据,系统得以知道你就是你,也就是说系统存在你这个用户。授权 (Authorization):你有哪些权限 干什么事情。

2023-04-17 10:52:36 69

原创 什么是安全框架?Apache Shiro和Spring Security对比

它提供了一组可以在Spring应用上下文中配置的Bean,充分利用了Spring IoC,DI(控制反转Inversion of Control,DI:Dependency Injection 依赖注入)和AOP(面向切面编程)功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。(3)身份(principal)/主体(Subject):认证用户的主要凭证之一。(2)认证(Authentication):应用程序确认用户身份的过程,常见认证:登录。

2023-04-17 10:52:04 83

原创 常见的几种异常

数组的初始化是对数组分配需要的空间,而初始化后的数组,其中的元素并没有实例化, 依然是空的,所以还需要对每个元素都进行初始化(如果要调用的话)。5、数组下标越界异常:java.lang.IndexOutOfBoundsException。9、指定的类不存在: java.lang.ClassNotFoundException。10、实例化异常:java.lang.InstantiationException。2、数据类型转换异常:java.lang.ClassCastException。

2023-04-17 10:51:26 30

原创 Service层和ServiceImpl层开AR方式

ClientService继承IService类 IService隶属于:com.baomidou.mybatisplus.extension.service.IService 泛型Product,对应一个表。用类和方法来实现SQL功能,由于类和方法的局限性,复杂SQL需求,还是需求原始的SQL来完成。1. 实体类,Dao层,Service层开启AR后,可以使用MP的内置方法,减少了SQL代码的重复书写。Service层开启AR(同时开启ServiceImpl的AR)T2:实体类,也是为了引向到一个表。

2023-04-17 10:50:55 123

原创 常用的加密方式

一次密码验证过程进行1000次HASH运算,对服务器来说可能只需要1ms,但对于破解者来说计算成本增加了1000倍,而至少8字节随机盐,更是把建表难度提升了N个数量级,使得大批量的破解密码几乎不可行,该算法也是美国国家标准与技术研究院推荐使用的算法。使用这些算法后,无法通过计算还原出原始密码,而且实现比较简单,因此很多互联网公司都采用这种方式保存用户密码,曾经这种方式也是比较安全的方式,但随着彩虹表技术的兴起,可以建立彩虹表进行查表破解,目前这种方式已经很不安全了。2. 对称加密算法来保存。

2023-04-17 10:50:30 80

原创 SpringBoot集成quartz的流程

除此之外,quartz还未trigger、job、schedule提供了响应的监听器,让你可以对他们的生命周期做出响应的处理,比如说一个任务触发前该做什么,触发后/结束后该做什么。坑4:cron类型的触发和简单触发似乎完全区别开,简单触发可以指定触发次数,而cron规则不能指定次数,要指定触发次数,似乎只能手动计数,然后在监听器中手动停掉。想让监听器在服务重启后一样有效的解决方法也很简单,配置一个全局的监听类就可以了,在监听类中可以用group来区别不同的调度类型,做出不同的处理。

2023-04-17 10:49:58 51

原创 Maven远程部署

总的来说,远程部署是一个强大的工具,可以用于自动化服务器上的软件安装和配置。3)远程部署还可以用于部署服务器配置更改。要在远程计算机上运行已部署作业,首先必须在远程计算机上定义配置文件,将部署包传输到远程计算机,并在远程计算机上完成其他配置步骤。使用远程部署有很多好处,包括一次将软件部署到多个服务器的能力,自动化流程的能力,以及在出现错误时回滚更改的能力。在运行已远程部署的作业之前,必须更新远程计算机上的一些作业文件和配置文件。远程部署并行作业时,可以在与引擎层主机不同的计算机上存储和运行这些作业的脚本。

2023-03-16 13:52:56 115

原创 常用的加密方式

非对称加密算法是一种密钥的保密方法,它需要两个密钥来进行加密和解密,这两个密钥是公开密钥和私有密钥。公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。数字签名(又称公钥数字签名)是只有信息的发送者才能产生的别人无法伪造的一段数字串,这段数字串同时也是对信息的发送者发送信息真实性的一个有效证明。它是一种类似写在纸上的普通的物理签名,但是在使用了公钥加密领域的技术来实现的,用于鉴别数字信息的方法。采用单钥密码系统的加密方法,同一个密钥可以同时用作信息的加密和解密,这种加密方法称为对称加密。

2023-03-16 13:52:09 34

原创 cron表达式

Cron表达式是一个具有时间含义的字符串,字符串以5~6个空格隔开,分为6~7个域,格式为X X X X X X X。(4) / :表示起始时间开始触发,然后每隔固定时间触发一次,例如在Minutes域使用5/20,则意味着5分钟触发一次,而25,45等分别触发一次.(6) L :表示最后,只能出现在DayofWeek和DayofMonth域,如果在DayofWeek域使用5L,意味着在最后的一个星期四触发。例如:在DayofMonth使用5W,如果5日是星期六,则将在最近的工作日:星期五,即4日触发。

2023-03-16 13:51:37 38

原创 &&和&的不同

&还具有短路的功能,即如果第一个表达式为false,则不再计算第二个表达式,例如,对于if(str!= null &&!&还可以用作位运算符,当&操作符两边的表达式不是boolean类型时,&表示按位与操作,我们通常使用0x0f来与一个整数进行&运算,来获取该整数的最低4个bit位,例如,0x31 & 0x0f的结果为0x01。&和&&都可以用作逻辑与的运算符,表示逻辑与(and),当运算符两边的表达式的结果都为true时,整个运算结果才为true,否则,只要有一方为false,则结果为false。

2023-03-16 13:51:32 35

原创 MD5加盐加密

目前最火的MD5加密,市面上已经出现了破解的方式,比如暴力破解等方式,当然在密码学上只要有破解的方法就会有新的加密方法,正所谓魔高一丈道高一尺,为了防止这一情况,出现了加盐的加密方式,何为加盐?加盐就是在明文密码前或后加入随机生成的字符,如随机生成四位字符,则这四位字符则是盐值,而密文密码则是加入盐值之后翻译成密文。然后明文加盐值生成密文。

2023-03-16 13:49:09 132

原创 springboot整合redis

最后,在项目中使用 RedisTemplate 或者 StringRedisTemplate 操作 Redis。Spring Boot 集成 Redis 可以通过在项目中引入相关依赖和配置来实现。

2023-03-15 18:17:25 31

原创 springboot整合mybatis

Spring Boot是一种用于快速构建 Spring 应用程序的框架。而 MyBatis 是一个持久层框架,可以让你简化数据库操作。这样就完成了 Spring Boot 与 MyBatis 的整合。

2023-03-15 18:16:47 36

空空如也

空空如也

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

TA关注的人

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