自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 为什么要划分子网掩码

如果不划分子网,那么我们的网络将是一个巨大的、扁平的网络空间,这将导致网络性能下降。分层次的网络可以更加方便网络管理员对于网络的管理,就类似于学校要分年级,年级要分班。子网定义了一个网络最大的广播空间(受限广播),可以减少网络流量。子网掩码可以将地址分成两部分:网络部分,主机部分。直接广播地址: 会被路由,将会在整个网络域内传播。受限广播地址: 不会被路由,只能在本网络内传播。不再使用广播概念,替换的技术为组播。为什么我们要划分子网?

2023-06-06 10:04:56 262

原创 对比Windows和Linux操作系统

但在Linux中一般不需要,因为Linux系统本身不会占用多大的磁盘空间,安装软件也都是规范的位置,系统临时目录重启时会自动清理,不会占用大量的磁盘空间。而且Linux的病毒数量也极少。比如我用的笔记本,在使用Windows系统,WiFi,蓝牙,各种硬件都正常, 但使用Linux系统WiFi是不能用的, 还要自己编译安装驱动程序。这个不用安装并不是说不用安装操作系统,而是除了Mac之外,99%以上的个人电脑都是在出厂的时候就安装好了Windows系统, 电脑到手直接使用就行,不用再担心还要安装系统的问题。

2023-06-06 10:04:08 574

原创 什么是进制

十六进制是逢十六进一,F 是十五,加 1 就变成十六了,逢十六就进一,即 0x10。所以进制就是逢几进一,r 进制就是逢 r 进一。无论是十进制、二进制、八进制还是十六进制,都只是计数的一种方式,只不过它们用的是不同的进制,所以表现形式不一样,但本质上都是同一个数字。十进制为逢十进一,它只有 0、1、2、3、4、5、6、7、8、9 这十个基数。由上可以总结出,r 进制有 r 个基数,而且基数里面最大的是 r–1,因为基数都是从 0 开始的。比如五进制中,基数最大的是 4,基数分别为 0、1、2、3、4。

2023-05-18 14:03:50 335

原创 广域网和局域网对比

广域网又称广域网、外网、公网。通常跨接很大的物理范围,所覆盖的范围从几十公里到几千公里,它能连接多个地区、城市和国家,或横跨几个洲并能提供远距离通信,形成国际性的远程网络。局域网必须在网络上有一个唯一的IP地址,这个IP地址是唯道一的,在另外一个局域网,这个IP地址仍然能够使用。2、广域网的特点:  广域网的数据传输速率比局域网高,而信号的传播延迟却比局域网要大得多,广域网的典型速度是从56Kbps到155Mbps,已有622Mbps、2.4Gbps甚至更高速率的广域网,传播延迟可以从几毫秒到几百秒。

2023-05-18 14:02:58 312

原创 IP地址分类规则

为了满足不同场景的需要,网络必须使用一种方式来判断 IP 地址中哪一部分是网络 ID,哪一部分是主机 ID。在进行 IP 地址分配时,有一些 IP 地址具有特殊含义,不会分配给互联网的主机。例如,保留了一些 IP 地址范围,用于私有网络,这些地址被称为私有地址。再如,保留一部分地址用于测试,被称为保留地址。地址被分类以后,如何判断一个 IP 地址是 A 类、B 类还是 C 类地址呢?地址为 32 位地址,被分为 4 个 8 位段。类:IP 地址范围为 0.0.0.0~127.255.255.255。

2023-05-18 14:02:25 140

原创 名词解析:IP,掩码(netmask),网关(gateway),DNS

如果网络A中的主机发现数据包的目标主机不在本地网络中,就把数据包转发给它自己的网关,再由网关转发给网络B的网关,网络B的网关再转发给网络B的某个主机。与IP地址相同,子网掩码的长度也是32位,左边是网络位,用二进制数字“1”表示;如果将子网掩码设置过大,也就是说子网范围扩大,那么,根据子网寻径规则,很可能发往和本地主机不在同一子网内的目标主机的数据,会因为错误的判断而认为目标主机是在同一子网内,那么,数据包将在本子网内循环,直到超时并抛弃,使数据不能正确到达目标主机,导致网络传输错误;

2023-05-18 14:01:55 376

原创 IP地址静态设置和动态设置区别

因此,为一个广泛的设备网络分配IP地址是很复杂的。当一个用户连接到网络时,DHCP为她分配一个临时的动态IP地址。静态和动态IP地址的主要区别是,静态地址是固定地址,由网络管理员手动分配给设备。由于静态IP地址的一致性,网站黑客攻击是一个相当大的风险。静态地址是一个永久性的数字地址,它是手动发放给网络设备的。相比之下,动态地址是在设备或节点连接到网络时分配给它的一个临时IP地址。相反,追踪一个有动态IP地址的设备是很困难的,因为IP地址在不断变化。在这里,将了解到静态和动态IP地址之间的主要区别。

2023-05-18 14:01:44 409

原创 IPV4 和 IPV6 对比

和IPv6的区别在于:IPv4是32位IP地址,而IPv6是128位IP地址123。IPv4是数字寻址方法,而IPv6是字母数字寻址方法13。IPv4二进制位由点分隔,而IPv6二进制位由冒号分隔13。IPv4提供12个标头字段,而IPv6提供8个标头字段1。IPv6取消了首部长度、服务类型和总长度字段4。IPv4的地址记录为A,而IPv6的地址记录为AAAA2。IPv4的公网地址数量有限,而IPv6的地址数量更多5。IPv6对组播和对流的支持比IPv4强,而IPv6可以对网络层的数据进行加密5。

2023-05-18 14:01:17 173

原创 对比OSI和TCP/IP模型

两个模型的各层次和对应层所支持的服务是不同的,举例来说,OSI 模型支持非连接和面向连接的网络层通信,但在传输层只支持面向连接的通信;OSI 模型在协议发明之前产生,即 OSI 先有模型,后有协议,这就决定 OSI 模型不会偏向哪一组协议,更具有通用性。而 TCP/IP 模型虽然最初没有明确区分这三个核心概念,但是随着它的发展,也明显区别三个核心概念了,从这个角度更加接近 OSI 模型了。但 TCP/IP 模型的协议没有 OSI 模型的协议隐蔽性好,在 OSI 模型中协议更容易修改。

2023-05-18 13:59:29 301

原创 OSI模型数据的流向

5.网络层是进行实际传输数据的层次,在网络层中必须要将传输层中处理完成的数据再次封装,添加上自己的地址信息和B的IP地址信息,并且要在网络中找到一条由自己到B最好的路径,然后按照最佳路径发送到网络中。该层还会添加能唯一标识每台设备的地址信息(MAC地址),因为MAC地址为每一台设备出厂时独有,与其他不冲突,在这种多点连接的网络通信中,必须保证每一帧都能准确地送到正确的地址,接收方也应当知道发送方是哪一个站。(即对数据分段后,给每一段数据编号,因为数据是一段一段传输的)(数据单位:段、报文)

2023-05-18 13:59:04 88

原创 什么是TCP/IP模型

没有定义任何特定协议,支持所有的标准和专用的协议。协议组成,是一个很大的协议集合。互联网协议,又称网络通讯协议。,我们会后面重点介绍一下。协议被称为传输控制协议。定义了网络互联也就是。

2023-05-18 13:58:48 67

原创 OSI模型七层的图解和OSI模型每层的作用

它的具体工作是接收来自物理层的位流形式的数据,并封装成帧,传送到上一层;这一层的数据叫做帧。该层的主要功能就是:通过各种控制协议,将有差错的物理信道变为无差错的、能可靠传输数据帧的数据链路。该层的主要任务就是:通过路由选择算法,为报文(该层的数据单位,由上一层数据打包而来)通过通信子网选择最适当的路径。表示层负责数据格式的转换,将应用处理的信息转换为适合网络传输的格式,或者将来自下一层的数据转换为上层能处理的格式。简单来说,传输层的主要功能就是:监控数据传输服务的质量,保证报文的正确传输。

2023-05-18 13:57:32 195

原创 什么是常量池?其实现原理是什么

References),字面量相当于Java语言层面常量的概念,像是文本字符串,声明为final的常量值等,符号引用就属于编译原理方面的概念,它包含了这三种类型的常量:类和接口的全限定名;所谓静态常量池,即*.class文件中的常量池,在class文件中的常量池不仅仅包含字符串(数字)字面量,还包含类、方法的信息,占用class文件绝大部分空间。运行时常量池则是jvm虚拟机在完成类装载操作后,将class文件中的常量池载入到内存中,并保存在方法区中,我们一般说的常量池,就是指这种方法区中运行时常量池。

2023-05-17 17:24:15 147

原创 名词解析:ISO1,ISO2,OSI,IOS

互联网操作系统(Internetwork Operating System,简称IOS)是思科公司为其网络设备开发的操作维护系统,用户通过命令运行人机界面对网络设备进行功能设置。1984年,ISO发布了著名的ISO/IEC 7498标准,它定义了网络互联的7层框架,也就是开放式系统互联参考模型。在制定计算机网络标准方面,起着重大作用的两大国际组织是:国际电信联盟电信标准化部门,与国际标准组织(ISO)是一种概念模型,由国际标准化组织(ISO)提出,一个试图使各种计算机在世界范围内互连为网络的标准框架。

2023-05-17 17:23:53 211

原创 设计出一套数据同步策略,给出思路和实现方法

每天新增及变化,即存储创建时间和操作时间都是今天的数据。适用于数据量大,既有新增又有变化,如用户表、图书借阅表等。数据同步时,where子句需要判断记录创建时间和最后编辑时间两个字段。每日增量,即每天存储一份新增数据量作为一个分区。适用于数据量大,且只有新数据插入的场景。数据同步时,where子句只需要判断记录创建时间字段。适用于数据量不大,每天都有新增数据及更新数据的场景。数据同步策略类型包括:全量同步,增量同步、新增及变化、特殊情况。新增及变化:存储新增加的数据和变化的数据。增量表:存储新增加的数据。

2023-05-17 17:23:42 72

原创 读写分离的设计模式

在工作当中有的时候会因为数据量大,导致单个数据库已经不足以支撑业务需求,因此常常将数据库的读和写的功能分离开,这样读取数据在一个数据库上,写数据在一个数据库上,就减少了单个数据库的工作,下面就描述一下具体步骤。当对某个资源读的操作明显多与写的操作时,那么多线程读时并不加锁,很明显会对程序性能有很大的提升。master_log_file=‘master-bin.000003’:所生成的二进制日志文件,在上一张图片中有显示)这里会出现日志文件的File和position,这个在后面会用的到。

2023-05-17 17:22:35 66

原创 自定义注解的实现方式

Inherited – 表示一个注解类型会被自动继承,如果用户在类声明的时候查询注解类型,同时类声明中也没有这个类型的注解,那么注解类型会自动查询该类的父类,这个过程将会不停地重复,直到该类型的注解被找到为止,或是到达类结构的顶层(Object)。@Documented – 表示使用该注解的元素应被javadoc或类似工具文档化,它应用于类型声明,类型声明的注解会影响客户端对注解元素的使用。·注解方法的返回类型局限于原始类型,字符串,枚举,注解,或以上类型构成的数组。·注解方法可以包含默认值。

2023-05-17 17:20:21 86

原创 增强功能的切入方式有哪些

使用org.aspectj.lang.JoinPoint接口表示目标类连接点对象,如果是环绕增强时,使用org.aspectj.lang.ProceedingJoinPoint表示连接点对象,该类是JoinPoint的子接口。:通过反射执行目标对象连接点处的方法,不过使用新的入参替换原来的入参。:通过反射执行目标对象的连接点处的方法;:获取连接点方法运行时的入参列表;:获取连接点的方法签名对象;:获取连接点所在的目标对象;:获取代理对象本身;

2023-05-17 17:20:12 62

原创 什么是参数一致原则

如果环境和策略发生了变化,刚性的会计政策将不能保证会计信息真实反映客观世界的变化,从而导致会计信息的失真。因此,会计政策应当保持一定的弹性,即如制度所要求的,“如有必要变更,应当将变更的内容和理由、变更的累积影响数,以及累积影响数不能合理确定的理由等,在会计报表附注中予以说明。由于会计期间的存在,为保证会计信息的可比性,或者减少财务报表的误解,自然需要会计政策能够保持一致。由于会计期间的存在,为保证会计信息的可比性,或者减少财务报表的误解,自然需要会计政策能够保持一致。

2023-05-17 17:19:48 71

原创 SpringBoot集成AOP过程

(Aspect Oriented Programming)称为面向切面编程,在程序开发中主要用来解决一些系统层面上的问题,比如日志,事务,权限等待,Struts2的拦截器设计就是基于AOP的思想,是个比较经典的例子。(连接点):程序执行过程中明确的点,一般是方法的调用。被拦截到的点,因为Spring只支持方法类型的连接点,所以在Spring中拦截到的点只是方法,实际上还是可以拦截到字段或者构造器的。的 proceed方法的作用:执行目标方法,或者说是去调用了目标方法,得到目标方法的返回值。

2023-05-17 17:18:38 85

原创 AOP增强方法有哪些

其中,引介增强是一种特殊的增强。他可以在目标类中添加属性和方法,通过拦截定义一个接口,让目标代理实现这个接口。他的连接点是类级别的,而前面的几种则是方法级别的。表示在目标类中添加一些新的方法和属性。联盟定义的接口,其他四种增强接口则是。表示在目标方法执行前后同时实施增强。表示在目标方法抛出异常后来实施增强。表示在目标方法执行前来实施增强。表示在目标方法执行后来实施增强。

2023-05-17 17:18:13 81

原创 SpringBoot“约定大于配置”的设计理念

SpringBoot的约定大于配置,按我的理解是:对比SpringMVC,需要在web.xml里面配置前端控制器,还需要在核心配置文件(*-servlet.xml)中配置视图解析器啥的,更要配置第三方的Tomcat服务器。这就是SpringBoot的优势,在传统所需要配置的地方,SpringBoot都进行了约定(配置好了),开发人员能配置得更少,更直接地开发项目,写业务逻辑代码。约定大于配置是一种开发原则,就是减少人为的配置,直接用默认的配置就能获得我们想要的结果。1.maven的目录文件结构。

2023-05-17 17:17:49 155

原创 解读Element-UI 和 VUE 技术

element-ui 的效果展示1.Button 按钮在 element-ui 中提供了不同效果的按钮,根据这些按钮,整合到页面中做不同效果,如何整合?点击显示代码,里面源码全部包括,直接将代码复制,改成需要的项目就可以2.Upload 上传里面包括各种上传的组件,实现上传文件,这个组件同样将代码提供出来了,另外提供过程中也包含 java 使用代码3.Table 表格提供了各种样式的表格4.Message 消息提示做很多功能时,成功或是失败会有提示,有不同状

2023-04-12 16:09:53 313

原创 SpringBoot集成quartz的流程

是由java开发的一个开源的任务日程管理系统。在某一预定的时刻,执行你想要执行的任务。在SpringBoot下导入依赖quartz的包,利用cron表达式实现定时任务执行。由于@Component 注解的存在,声明支持Spring的注解驱动查找,所以SpringBoot启动时,可以找到该类,并同时加载该任务计划。cron表达式是一个字符串,字符串以5或6个空格隔开,分开工6或7个域,每一个域代表一个含义。任务计划器,利用cron表达式实现定时任务执行。秒 分 时 日 月 星期 年。什么cron表达式?

2023-04-12 16:03:31 38

原创 常用前端技术有哪些

HTML超文本标记语言 (Hyper Text Markup Language) ,是用来描述网页的一种标记语言。<html> <head> <title>HTML</title> </head> <body> <p id="num1">Hello World! I'm HTML</p> </body>

2023-04-12 15:59:40 58

原创 前端技术的发展流程

浏览器内核。

2023-04-12 15:53:19 39

原创 Shiro的过滤链设计机制

如果返回true则继续拦截器链 否则中断后续的拦截器链的执行直接返回 进行预处理(如基于表单的身份验证、授权) - postHandle:类AOP后置返回增强 在拦截器链执行完成后执行 进行后处理(如记录执行时间之类的);- 如果没有登录,看看是否是登录请求,如果是get方法的登录页面请求,则继续拦截器链(到请求页面),否则如果是get方法的其他页面请求则保存当前请求并重定向到登录页面;- 如果登录成功了,且之前有保存的请求,则重定向到之前的这个请求,否则到默认的成功页面。不过目前还没有完全实现,不可用。

2023-04-12 15:51:05 209

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

身份验证是关于验证您的凭据,如用户名/用户ID和密码,以验证您的身份。在您正确输入引脚后,银行会确认您的身份证明该卡真正属于您,并且您是该卡的合法所有者。通过验证您的ATM卡引脚,银行实际上会验证您的身份,这称为身份验证。另一方面,授权发生在系统成功验证您的身份后,最终会授予您访问资源(如信息,文件,数据库,资金,位置,几乎任何内容)的完全权限。- 顾名思义,它是一个两步验证过程,不仅需要用户名和密码,还需要用户知道的东西,以确保更高级别的安全性,例如ATM引脚,用户知道。授权通常在验证后确认您的权限。

2023-04-11 21:21:23 178

原创 Cryptography加密和Realm领域的作用

一个realm管理一系列user、Credentials、roles、groups。定用户身份是否合法;也需要从Realm得到用户相应的角色/权限进行验证用户是否能。:领域,Shiro从Realm获取安全数据(如用户、角色、权限),就是说。:加密,保护数据的安全性,如密码加密存储到数据库,而不是明文存储;要验证用户身份,那么它需要从Realm获取相应的用户进行比较以确。用户表,用户角色表,角色表,角色资源表,资源表关系。一个user也只能log in 一个realm。一个user隶属于一个realm。

2023-04-11 21:19:48 33

原创 Shiro的验证机制

boolean org.apache.shiro.web.filter.authc. AuthenticatingFilter.executeLogin( ServletRequest request, ServletResponse response) throws Exception方法。探知login.jsp的form与shiro form filter的识别认证规则需要查看org.apache.shiro.web.filter.authc.FormAuthenticationFilter中的源码。

2023-04-11 21:17:03 62

原创 Shiro的授权机制

2. Subject 的实例,通常是DelegatingSubject (或子类)代表应用程序的SecurityManager 通过调用securityManager的各自相同的hasRole*, checkRole*, isPermitted*,或checkPermission*方法的变体(SecurityManager 实现org.apache.shiro.authz.Authorizer 接口,他定义了所有Subject 具体的授权方法)。同时任何剩余的Realm 将不会被该授权操作所访问。

2023-04-11 21:15:52 54

原创 Shiro主配置文件分析

perms:例子/admins/user/**=perms[user:add:*],参数可以写多个,多个时必须加上引号,并且参数之间用逗号分割,例如/admins/user/**=perms["user:add:*,user:modify:*"],当有多个参数时必须每个参数都通过才通过,想当于isPermitedAll()方法。===============其权限过滤器及配置释义=======================anon:例子/admins/**=anon 没有参数,表示可以匿名使用。

2023-04-11 21:12:04 45

原创 密码加密和加盐的设计区别

这样会造成哪些后果呢?我们在用户模块,对于用户密码的保护,通常都会进行加密。当小红用其账号进行登录的过程中,她将自己的用户名和密码提交给后台的服务器,服务器得到密码之后,采用同样的加密方法(MD5加密),也会得到密文,这个时候再与数据库中的密码字段的数据进行字符串的比较,相同就代表验证通过。当小红用其账号进行登录的过程中,她将自己的用户名和密码提交给后台的服务器,服务器得到密码之后,采用同样的加密方法(MD5加密),也会得到密文,这个时候再与数据库中的密码字段的数据进行字符串的比较,相同就代表验证通过。

2023-04-11 21:10:33 61

原创 密码加盐的设计理念

密码加盐主要是针对用户的登录密码而言的,原始密码经过MD5(一种Hash算法)加。密后,一些固定长度的简单纯文本密码的密文也会被破解出来。些常用的固定长度的纯文本的哈希值,当这张表越大,破解密码的机率就越大。改密码或者操作,都会生成新的随机字符串,将原始密码进行哈希算法之后,进行。就完犊子了,因为上面的MD5算法需要两个参数(密码原文与盐),缺一不可。破解的常用方法有暴力破解和字典破解,也是最笨拙的方法,就是一个一个试。此路不通就另择他法,比如,使用彩虹表进行反向推出你的密码,彩虹表中是一。

2023-04-03 11:56:33 104

原创 MD5加密的优缺点

MD5是一种被广泛使用的线性散列算法,可以产生出一个128位(16字节)的散列值。MD5考虑的是破解的成本(时间和机器性能)。那么当前的MD5密码就是安全的。将用户的密码直接MD5后存储在数据库中是不安全的。密码是常见的组合,攻击者将这些密码的常见组合进行单向哈希,得到一个摘要组。3.将串2再次进行MD5加密,这时生成的串3就是我们加密后的数据。MD5加密之后产生的是一个固定长度(32位或16位)的数据。合,然后与数据库中的摘要进行比对即可获得对应的密码。我们在注册账号时的密码一般都是用的MD5加密。

2023-04-03 11:55:44 459

原创 常用的加密方式有哪些

公钥与私钥是一对,如果用公钥对数据进行加密,只有用对应的私钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。将3个字节转换成4个字节( (3 X 8) = 24 = (4 X 6) )先读入3个字节,每读一个字节,左移8位,再右移四次,每次6位,这样就有4个字节了。破解方法,暴力破解。DES 使用 56 位的密钥,则可能的密钥数量是 2 的 56 次方个。将串2再次进行MD5加密,这时生成的串3就是我们加密后的数据。是一种对称加密方式,加密运算、解密运算使用的是同样的密钥。

2023-03-15 15:49:17 457

原创 什么是密码学

数论中许多基本内容,如同余理论、中国剩余定理(CRT )、高次剩余理论等,在新型密码体制、密钥分配与管理、数字签名、身份认证等方面有直接的应用。计算机密码学是研究计算机信息加密、解密及其变换 的科学,是数学和计算机的交叉学科 ,也是一门新兴的学科。)密码系统 (Cryptosystem ):一个密码体制或密码系统是指由明文空间、密文空间、密钥空间、加密算法以及解密算法 组成的一个多元素集合体。)消息(Message):消息是指用语言、文字、数字、符号、图像、声音或其组合等方式记载或传递的有意义的内容。

2023-03-15 15:47:39 170

原创 Shiro的主要功能

用户登录成功,就可以访问敏感资源,之后的所有访问都通过Shiro直接访问指定的资源。注意:**没有Shiro,项目的功能照样能跑,添加Shiro实际上是横切,把Shiro横切到项目中,实际就是代理模式。(2)权限验证:不同的用户账号登录成功之后,用户所使用的功能不同,也就是拥有的权限不同。一定是在登录认证完成之后,才能做Shiro的权限认证,根据用户的权限显示菜单项。(1)登录验证:不是登录用户不能访问敏感资源,只有登录了才可以访问敏感资源;可以完成的功能主要有登录验证、权限验证、加密、会话管理、缓存等。

2023-03-15 15:44:53 186

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

Spring Security 是一个能够为基于 Spring 的企业应用系统提供声明式的安全访问控制解决方案的安全框架;它提供了一组可以在 Spring 应用上下文中配置的 Bean,充分利用了 Spring IoC, DI 和AOP 功能,为应用系统提供声明式的安全访问控制功能,减少了为企业系统安全控制编写大量重复代码的工作。简单的说,就是我们可以控制用户登陆的权限,通过配置让不同权限的用户登录后所看到页面不同,所能操作的内容也不同。提供了很多用户认证的功能,实现相关接口即可,节约大量开发工作。

2023-03-15 15:43:56 48

原创 常见的异常有哪些

数字格式异常 -----字符串不满足数字的格式要求,不能转换为数字。数组下标越界异常 -----访问下标不存在的数组元素。类型转换异常 -----将两个不相关的类进行了强转。空指针异常 ----- 对null调用了方法。类找不到异常 -----指定的类不存在。解析异常 -----字符串格式不正确。算术异常 ----- 除数为0。

2023-03-15 15:40:48 29

空空如也

空空如也

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

TA关注的人

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