自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

冷雨清的博客

一个小白的成长历程

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

原创 个人基础知识总结

这是我目前所掌握的大致知识程度,后续我在把每一个分支补充齐全

2021-03-03 21:25:07 203 1

原创 2021总结

Timeline3月 最好的一个好朋友z脱单,在z生日前,为z感到很开心,也是2021年对我来说第一件很重大的事情。4~5月 在准备实习面试,中间过程很坎坷,失败了很多次,最后也收到了不少公司的offer,当然最后选择了菜鸟,而且自己的好朋友y去了上海的字节,最后一块坐飞机出发入职(人生第一次坐✈️)。6月 开始入职实习,发现我是组里最小的同学,也是第一位00后同学。诚惶诚恐,也很迷茫(入职的时候,师兄做项目去了,半个月后才见到),后续开始做小需求,了解了体系框架,并逐渐的对身边的同学和环境熟悉起来

2022-02-17 20:36:51 400 1

原创 实习生的一点建议和感悟

讲讲实习生的一个个人感受和感悟吧,首先心态先躺平一点是????,不要太过焦虑也不要过于划水,先把自己团队的同学先认识认识,了解了解,最起码团队里面谁是大佬,谁是气氛组的,谁是干饭组的都了解清楚。其次上来肯定会给你一个很大的项目给你看,你肯定会很头晕的,不着急咱慢慢来,先梳理清楚业务和接口,再一点点往下扒。后续肯定公司或者小组有一些工具文档,这些你需要快速的了解和使用,因为肯定未来都会用到的,不会不懂的就问旁边同事(积累好问题再问,别一下问一下的)一般来说旁边同事都会很乐意回答你的,并且可以通过这些问题快速拉

2021-07-19 15:36:03 498

原创 穷爸爸和富爸爸读后感

这本书我觉得对于我们这种小白来说是一本很好的科普性质的书籍,没有什么晦涩难懂的词汇术语,只是为了将一种思想给普及给我们。永远不要想着通过劳动来变成亿万富翁,这是不可能的也是不现实的。而大多数人依旧还是这样想的,想通过劳动积累财富。这也就是为什么,全世界的富人占了1%,却拥有世界上50%以上的财富。一个人想要拥有财富,首先应该转变思想,这才是最重要的。不然一个穷人就算中了百万大奖的彩票,过两年还是穷人,就是因为他不懂得如何用财富创造财富,而是用财富满足自己的欲望,最后还是和原来一样。这就和中国的一句古话一样:

2021-07-17 18:40:05 897 8

原创 个人大学中的一点经历感悟

​感觉真的时间过的好快啊,三年前我还在高中桌前备战高考,那年过的很苦也很累,但也很开心因为当初的自己无悔,最后结果不算是个意外,就是正常的发挥然后来到了现在的我所就读的学校。三年后,已经成长为一个成熟稳重,懂得如何与人相处的大学生了,并且马上就要去实习成为社畜(ノへ ̄、)。有时候回想一下过去的自己,感觉真的很稚嫩????,啥也不懂啥也不会,凭着的就是满腔的热血和用不完的精力,参加这个参加那个,虽然都失败了,没有什么好结果,这也导致我当初真的很自闭????,我真的要这样继续下去么?我这样子的性格真的是不适合

2021-05-28 14:57:00 341 2

原创 月亮与六便士读后感

月亮与六便士读后感一开始真的没读懂这本书,为什么要一直描写这个人,开篇就说这个人很厉害很厉害,但我内心感觉不到。看这中间的剧情,这人妥妥的渣男!!真的渣!不过读到后面发现这人思想境界好高啊,为了自己心中的理想,抛弃了一切。不过真的读着读着发现自己读书真的太少了,境界完全不够。正如人生有三重境界,看山是山,看水是水;看山不是山,看水不是水;看山还是山,看水还是水;我还是第一层,看不出书背后表达的意思。全书都是在以一个第三人的视角去看待这个斯特里克兰,描述的很散,通过各种事件来得到这个人的信息,中间也发生了

2021-05-16 23:06:40 351 3

原创 Docker 容器时区问题

docker 容器时区问题利用docker发布服务,发现程序用获取的系统时间比正常时间晚了8个小时进入容器docker exec -it 容器id /bin/sh查询时间date -R发现时区为0时区解决思路在容器中创建文件夹mkdir -p /usr/share/zoneinfo/AsiaCtrl+D 退出容器 执行下面命令docker cp /usr/share/zoneinfo/Asia/Shanghai 容器id:/usr/share/zoneinfo/Asia再进

2021-05-14 22:46:36 210

原创 Linux——Docker安装Sentinel

Sentinel是面向分布式服务框架的轻量级流量控制框架,主要以流量为切入点,从流量控制,熔断降级,系统负载保护等多个维度来维护系统的稳定性.拉取镜像:docker pull bladex/sentinel-dashboard运行镜像:docker run --name sentinel -d -p 8858:8858 -d bladex/sentinel-dashboard访问dashboard 地址:http://localhost:8858账号密码都为:sentinel...

2021-05-14 15:38:56 337

原创 Springboot配置Nacos出现的问题

Springboot配置Nacos出现的问题报错信息:java.lang.ClassNotFoundException:org.springframework.boot.context.properties.ConfigurationBeanFactoryMetadata由于当前Nacos版本还不支持Springboot 2.4.+ 的版本,所以需要降一个版本 为2.3.+具体如下:org.springframework.beans.factory.BeanCreationException: Er

2021-05-11 22:12:23 3770

原创 windows安装nacos 2.0.1(注意事项)

下载地址:https://github.com/alibaba/nacos/releases下载完文件以后,修改配置文件,添加数据库配置然后双击startup.cmd文件就可以了注意事项启动前要对该文件进行修改!!将set MODE="cluster"一行改成set MODE="standalone",然后直接运行startup.cmd。运行成功后,访问http://localhost:8848/nacos可以查看Nacos的主页,默认账号密码都是nacos。否则会有下面的错误!!ja

2021-05-10 21:50:59 1413

原创 Windows和Linux环境安装RocketMQ

Windows安装RocketMQ下载地址:http://rocketmq.apache.org/release_notes/,选择最新的那一版系统环境变量配置变量名:ROCKETMQ_HOME变量值:MQ解压路径\MQ文件夹名 样例如下:ROCKETMQ_HOME=D:\dev\rocketmq-all-4.3.0-bin-release启动(也可以不启动)启动NAMESERVERCmd命令框执行进入至‘MQ文件夹\bin’下,然后执行‘start mqnamesrv.cmd’,启动

2021-05-09 21:59:23 183

原创 docker的底层原理和常见问题

Docker 采用了 C/S 架构,包括客户端和服务端。Docker 守护进程 ( Daemon )作为服务端接受来自客户端的请求,并处理这些请求(创建、运行、分发容器)。利用了linux的命名空间深入可以参考:Docker 核心技术与实现原理 - 面向信仰编程 (draveness.me)(opens new window)为啥docker比VM等虚拟机更快docker有着比虚拟机更少的抽象层。由于docker不需要Hypervisor实现硬件资源虚拟化,运行在docker容器上的程序直接使用的

2021-05-09 10:27:51 110

原创 SpringCloud学习笔记

分布式事务解决方案–seata解决服务治理–用于模块之间发现服务,用一个治理中心解决 nacos分布式服务追踪分布式任务调度 分片定时任务 xxl-job分布式日志 elk分布式配置中心 动态化配置 nacos传统RPC调用会有什么问题1.超时问题,调用无响应,需要设置超时时间2.安全问题,https,加密,令牌传输,限流,服务保护3.服务与服务之间URL地址管理,因为服务与服务之间依赖关系很复杂,接口写死,后期难以管理接口超时时间与连接不上的问题连接不上是因为服务器宕机了超时是请

2021-05-09 10:26:05 396

原创 设计模式:创建型模式

创建型模式关注点是如何创建对象,其核心思想是要把对象的创建和使用相分离,这样使得两者能相对独立地变换。创建型模式包括:工厂方法:Factory Method抽象工厂:Abstract Factory建造者:Builder原型:Prototype单例:Singleton工厂方法 Factory当然还有静态工厂方法抽象工厂 AbstractFactory提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式(Abstract Factory)是一个比

2021-05-09 10:23:15 109

原创 设计模式:结构型模式

结构型模式主要涉及如何组合各种对象以便获得更好、更灵活的结构。虽然面向对象的继承机制提供了最基本的子类扩展父类的功能,但结构型模式不仅仅简单地使用继承,而更多地通过组合与运行期的动态组合来实现更灵活的功能。结构型模式有:适配器桥接组合装饰器外观享元代理适配器 Adapter将一个类的接口转换成客户希望的另外一个接口,使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。适配器模式是Adapter,也称Wrapper,是指如果一个接口需要B接口,但是待传入的对象却是A接口,怎

2021-05-09 10:22:36 370

原创 设计模式:行为型模式

行为型模式主要涉及算法和对象间的职责分配。通过使用对象组合,行为型模式可以描述一组对象应该如何协作来完成一个整体任务。行为型模式有:责任链命令解释器迭代器中介备忘录观察者状态策略模板方法访问者责任链 Chain of Responsibility使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它为止。责任链模式(Chain of Responsibility)是一种处理请求的模式,它

2021-05-09 10:21:52 238

原创 Redis部署方式

Redis有下面四种部署方式模式优点缺点单机版架构简单,部署方便机器故障、容量瓶颈、QPS瓶颈主从复制高可靠性,读写分离故障恢复复杂,主库的写跟存受单机限制Sentinel 哨兵集群部署简单,HA原理繁琐,slave存在资源浪费,不能解决读写分离问题Redis Cluster数据动态存储solt,可扩展,高可用客户端动态感知后端变更,批量操作支持查redis主从复制该模式下 具有高可用性且读写分离, 会采用 增量同步 跟 全量同步 两种机制。

2021-05-09 10:14:48 7198

原创 MySQL 索引,优化

1.最左匹配原则介绍如果建立的是复合索引,索引的顺序要按照建立时的顺序,即从左到右,如:a->b->c(和 B+树的数据结构有关)无效索引举例a->c:a 有效,c 无效b->c:b、c 都无效c:c 无效2.覆盖索引在B+树的索引中,叶子节点可能存储了当前的key值,也可能存储了当前的key值以及整行的数据,这就是聚簇索引和非聚簇索引。 在InnoDB中,只有主键索引是聚簇索引,如果没有主键,则挑选一个唯一键建立聚簇索引。如果没有唯一键,则隐式的生成一个键来建

2021-05-09 10:08:28 101

原创 Redis常见问题

常见问题数据一致性怎么保证?先删缓存,再更新数据库先删除缓存,数据库还没有更新成功,此时如果读取缓存,缓存不存在,去数据库中读取到的是旧值,缓存不一致发生。解决方案延时双删的方案的思路是,为了避免更新数据库的时候,其他线程从缓存中读取不到数据,就在更新完数据库之后,再sleep一段时间,然后再次删除缓存。sleep的时间要对业务读写缓存的时间做出评估,sleep时间大于读写缓存的时间即可。流程如下:线程1删除缓存,然后去更新数据库线程2来读缓存,发现缓存已经被删除,所以直接从数据库中读

2021-05-08 10:49:11 112

原创 Redis线程模型

Redis 的线程模型是怎么样的?redis 内部使用文件事件处理器 file event handler,这个文件事件处理器是单线程的,所以 redis 才叫做单线程的模型。它采用 IO 多路复用机制同时监听多个 socket,根据 socket 上的事件来选择对应的事件处理器进行处理。文件事件处理器的结构包含 4 个部分:多个 socketIO 多路复用程序文件事件分派器事件处理器(连接应答处理器、命令请求处理器、命令回复处理器)多个 socket 可能会并发产生不同的操作

2021-05-08 10:47:04 64

原创 Redis高并发问题

缓存穿透redis缓存和数据库中没有相关数据(例用户直接携带id<=0的参数不断发起请求),redis中没有这样的数据,无法进行拦截,直接被穿透到数据库,导致数据库压力过大宕机。解决方案对不存在的数据缓存到redis中,设置key,value值为null(不管是数据未null还是系统bug问题),并设置一个短期过期时间段,避免过期时间过长影响正常用户使用。拉黑该IP地址对参数进行校验,不合法参数进行拦截布隆过滤器 将所有可能存在的数据哈希到一个足够大的bitmap(位图)中,一个一定不存

2021-05-08 10:46:19 143

原创 Redis持久化

RDBRDB 持久化机制,是对 Redis 中的数据执行周期性的持久化。更适合做冷备。优点:压缩后的二进制文,适用于备份、全量复制,用于灾难恢复加载RDB恢复数据远快于AOF方式,适合大规模的数据恢复。如果业务对数据完整性和一致性要求不高,RDB是很好的选择。数据恢复比AOF快。缺点:RDB是周期间隔性的快照文件,数据的完整性和一致性不高,因为RDB可能在最后一次备份时宕机了。备份时占用内存,因为Redis 在备份时会独立fork一个子进程,将数据写入到一个临时文件(此时内存中的数据是原

2021-05-08 10:45:21 64

原创 Redis过期和淘汰

Redis三种过期策略定时过期每个设置过期时间的key都需要创建一个定时器,到过期时间就会立即对key进行清除。该策略可以立即清除过期的数据,对内存很友好;但是会占用大量的CPU资源去处理过期的数据,从而影响缓存的响应时间和吞吐量。惰性过期只有当访问一个key时,才会判断该key是否已过期,过期则清除。该策略可以最大化地节省CPU资源,却对内存非常不友好。极端情况可能出现大量的过期key没有再次被访问,从而不会被清除,占用大量内存。定期过期每隔一定的时间,会扫描一定数量的数据库的expires字

2021-05-08 10:44:09 139

原创 MySQL常见问题

B+树能存多少数据?一个扇区的大小是512字节,而文件系统的最小单元是块,一个块的大小是4k,而对于InnoDB存储引擎也有自己的最小储存单元——页(Page),一个页的大小是16K。假设一行数据的大小是1k,那么一个页可以存放16行这样的数据。假设主键ID为bigint类型,长度为8字节,而指针大小在InnoDB源码中设置为6字节,这样一共14字节,我们一个页中能存放多少这样的单元,其实就代表有多少指针,即16384/14=1170。那么可以算出一棵高度为2的B+树,能存放1170*16=18

2021-05-08 10:42:56 98

原创 MySQL底层知识

主要要从张架构图开始谈起MySQL架构记住!增删查改都不是直接对磁盘或者硬盘操作而是先会对MySQL的buffer pool进行操作,而这个是在存储引擎层面的,而不是中间查询缓存的过程!默认buffer pool是128M页buffer pool是存放在内存当中的,主要是存储‘页’,这个页里面是磁盘里面映射的数据。里面既有双向链表,也有单向链表;一页是16KB里面页的连接主要是双向链表,而页里面的数据就是单向链表,而页里面的数据并未是固定的,有可能是叶子节点,也有可能是非叶子节点。但总之里

2021-05-08 10:42:02 88

原创 MySQL事务两段式提交

其实所谓的两阶段就是把一个事物分成两个阶段来提交。就像下图这样两阶段提交的第一阶段 (prepare阶段):写rodo-log 并将其标记为prepare状态。紧接着写binlog两阶段提交的第二阶段(commit阶段):写bin-log 并将其标记为commit状态。什么需要两段式提交呢?因为MySQL有两个日志文件,我们需要两个日志都写入,我们需要保证两个日志的一致性。那么如果不使用两阶段提交的方式,直接写入redo log然后写入binlog有什么问题呢?假设,写完redo log,系统

2021-05-08 10:39:41 923

原创 如何根据可以产生1-5随机数的函数自己产生1-7的随机数?

Rand5产生1到5的数,减1就产生0到4的数,乘以5后可以产生的数是:0,5,10,15,20。 再加上第二个Rand5()产生的1,2,3,4,5。我们可以得到1到25, 而且每个数都只由一种组合得到,即上述代码可以等概率地生成1到25。OK, 到这基本上也就解决了.套用上面的思想,我们可以得到如下代码:int Rand7(){ int x = ~(1<<31); // max int while(x > 7) x = 5 * (Rand5() -

2021-05-08 10:34:59 646

原创 Git

Git原理本地操作在学习常用命令之前,你首先需要知道的 Git 的「三个分区」和对应的文件的「三种状态」:工作区:就是你本地实际写代码的地方,无论你是用 vim 直接改也好,还是在 IDE 里写,都无所谓。对应的文件状态是:modified,已修改,但还没保存到数据库中。 暂存区:就是临时存放的地方。对应的文件状态是:staged,Git 已经对该文件做了标记,下次提交知道要包含它。本地库:存放本地历史版本信息。对应的文件状态是:committed,文件已经安全的保存在本地数据库中。Gi

2021-05-08 10:33:42 101

原创 CSS:xs,sm,md,lg是什么意思

当你想要内容大小随着屏幕大小自动适应的时候就可以使用bootstrap,也就是在pc端以及不同手机(显示屏大小不同)端内容也能够正常显示的时候。一行最多占十二个标签,不管是大屏还是超小屏的时候。col-lg一般用于大屏设备,(min-width:1200px);col-md一般用于中屏设备,(min-width:992px);col-sm一般用于小屏设备,(min-width:768px);col-xs用于超小型设备,(max-width:768px);后面跟数字是几,也就是占几份(每个

2021-05-05 17:02:34 13703 1

原创 个人制作的主页

详情资源:https://download.csdn.net/download/weixin_44777669/18355765

2021-05-03 19:46:09 91

原创 用个人服务器搭建图床 Pic-Go设置

先去下载图床工具:https://github.com/wisp-x/lsky-pro然后使用宝塔进行配置搭建然后将文件上传至个人服务器中,并进行解压tar -zxvf +压缩包名进入宝塔网站,安装好mysql,php,将自己域名绑定上去,没有就直接写ip地址也是可以的然后将压缩好的文件目录,转移到刚刚创建网站的目录,并进行下面的绑定然后进行如下的设置location / { if (!-e $request_filename) { rewrite ^(.*)$ /i

2021-05-03 15:59:27 1523

原创 字节常考的算法题

1.最长不含重复字符的子字符串请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度。示例 1:输入: "abcabcbb"输出: 3 解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。示例 2:输入: "bbbbb"输出: 1解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。示例 3:输入: "pwwkew"输出: 3解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。 请注意,你的答案必须是 子串 的

2021-04-16 12:57:53 2958

转载 布谷鸟过滤器

布谷鸟过滤器参考:布谷鸟过滤器为什么会有布谷鸟过滤器?因为布隆过滤器无法删除,导致后续精确性不断的降低,为了解决布隆过滤器不能删除元素的问题,布谷鸟过滤器横空出世。布谷鸟过滤器原理布谷鸟过滤器源于布谷鸟哈希算法,布谷鸟哈希算法源于生活 —— 那个热爱「鸠占鹊巢」的布谷鸟。布谷鸟喜欢滥交(自由),从来不自己筑巢。它将自己的蛋产在别人的巢里,让别人来帮忙孵化。待小布谷鸟破壳而出之后,因为布谷鸟的体型相对较大,它又将养母的其它孩子(还是蛋)从巢里挤走 —— 从高空摔下夭折了。最简单的布谷鸟哈希结构是一

2021-04-13 10:24:59 2397 1

原创 数据结构与算法(56):栈的压入、弹出序列

剑指 Offer 31. 栈的压入、弹出序列输入两个整数序列,第一个序列表示栈的压入顺序,请判断第二个序列是否为该栈的弹出顺序。假设压入栈的所有数字均不相等。例如,序列 {1,2,3,4,5} 是某栈的压栈序列,序列 {4,5,3,2,1} 是该压栈序列对应的一个弹出序列,但 {4,3,5,1,2} 就不可能是该压栈序列的弹出序列。示例 1:输入:pushed = [1,2,3,4,5], popped = [4,5,3,2,1]输出:true解释:我们可以按以下顺序执行:push(1), pu

2021-04-09 13:54:07 230

原创 数据结构与算法(55):二叉搜索树与双向链表

剑指 Offer 36. 二叉搜索树与双向链表输入一棵二叉搜索树,将该二叉搜索树转换成一个排序的循环双向链表。要求不能创建任何新的节点,只能调整树中节点指针的指向。为了让您更好地理解问题,以下面的二叉搜索树为例:我们希望将这个二叉搜索树转化为双向循环链表。链表中的每个节点都有一个前驱和后继指针。对于双向循环链表,第一个节点的前驱是最后一个节点,最后一个节点的后继是第一个节点。下图展示了上面的二叉搜索树转化成的链表。“head” 表示指向链表中有最小元素的节点。特别地,我们希望可以就地完成转换操

2021-04-01 21:49:52 99

原创 数据结构与算法(55)两个链表的第一个公共节点

剑指 Offer 52. 两个链表的第一个公共节点输入两个链表,找出它们的第一个公共节点。如下面的两个链表在节点 c1 开始相交。示例 1:输入:intersectVal = 8, listA = [4,1,8,4,5], listB = [5,0,1,8,4,5], skipA = 2, skipB = 3输出:Reference of the node with value = 8输入解释:相交节点的值为 8 (注意,如果两个列表相交则不能为 0)。从各自的表头开始算起,链表 A 为

2021-04-01 21:04:13 85

原创 数据结构与算法(54):构建乘积数组

剑指 Offer 66. 构建乘积数组难度中等97给定一个数组 A[0,1,…,n-1],请构建一个数组 B[0,1,…,n-1],其中 B[i] 的值是数组 A 中除了下标 i 以外的元素的积, 即 B[i]=A[0]×A[1]×…×A[i-1]×A[i+1]×…×A[n-1]。不能使用除法。示例:输入: [1,2,3,4,5]输出: [120,60,40,30,24]提示:所有元素乘积之和不会溢出 32 位整数a.length <= 100000题解class Solut

2021-04-01 17:03:16 73

原创 数据结构与算法(54)从上到下打印二叉树 III

剑指 Offer 32 - III. 从上到下打印二叉树 III请实现一个函数按照之字形顺序打印二叉树,即第一行按照从左到右的顺序打印,第二层按照从右到左的顺序打印,第三行再按照从左到右的顺序打印,其他行以此类推。例如:给定二叉树: [3,9,20,null,null,15,7], 3 / \ 9 20 / \ 15 7返回其层次遍历结果:[ [3], [20,9], [15,7]]题解树的层次遍历,目前我只是大致的过了一遍,后续还会再

2021-04-01 16:23:39 113

原创 数据结构与算法(53)圆圈中最后剩下的数字

剑指 Offer 62. 圆圈中最后剩下的数字0,1,···,n-1这n个数字排成一个圆圈,从数字0开始,每次从这个圆圈里删除第m个数字(删除后从下一个数字开始计数)。求出这个圆圈里剩下的最后一个数字。例如,0、1、2、3、4这5个数字组成一个圆圈,从数字0开始每次删除第3个数字,则删除的前4个数字依次是2、0、4、1,因此最后剩下的数字是3。示例 1:输入: n = 5, m = 3输出: 3示例 2:输入: n = 10, m = 17输出: 2题解这题是我之前做某公司笔试的题目

2021-04-01 15:15:43 73

原创 数据结构与算法(52):不用加减乘除做加法

剑指 Offer 65. 不用加减乘除做加法难度简单145写一个函数,求两个整数之和,要求在函数体内不得使用 “+”、“-”、“*”、“/” 四则运算符号。示例:输入: a = 1, b = 1输出: 2提示:a, b 均可能是负数或 0结果不会溢出 32 位整数题解这题真的想不到,只能靠背了class Solution { public int add(int a, int b) { while(b!=0){ int c = a

2021-04-01 14:55:36 76

Bdata-index.zip

个人主页

2021-05-03

空空如也

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

TA关注的人

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