自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 装了这几个IDEA插件,基本上一站式开发了!

前几天有社区小伙伴私聊我,问我都用哪些IDEA插件,我的IDEA的主题看起来不错。作为一个开源作者,每周要code大量的代码,提升日常工作效率是我一直追求的,在众多的IDEA插件中,我独钟爱这几款。这期就整理一些我日常中经常使用的IDEA插件,这些插件有些挺小众,但是的确非常提升效率,推荐给大家。以上这10款Idea插件是我平时中用的非常多且经过筛选的,因为有些大家耳熟能详就不介绍了,相信小伙伴们都有装。希望大家能从以上插件中找到适合自己的那几款,或者有更好更效率的插件,也可以评论里留言。...

2022-08-06 16:00:11 1005 2

原创 12 个适合做外包项目的开源后台管理系统

暂时整理这么几个后面遇到更好的再整理,如果大家有好的也欢迎评论区下面推荐。开源协议:Apache-2.0 License。开源协议:Apache-2.0 License。开源协议:MPL-2.0 License。开源协议:MIT License。开源协议:MIT License。开源协议:MIT License。开源协议:MIT License。开源协议:MIT License。开源协议:MIT License。...

2022-08-06 15:54:19 1048

原创 Redis只能做缓存?太out了!

redis的特点是,不管什么数据,都一股脑地搞到内存里做计算,这对于有时间序列概念,有冷热数据之分的业务,造成了非常大的成本考验。如果一个业务系统,每次交互的数据,都是一个非常大的结果集,并涉及到非常复杂的统计、过滤工作,那么RDBMS是必须的;但如果一个系统,能够通过某个标识,快速定位到一类数据,这一类数据在可以预见的未来,是有限的,那就非常适合Redis。redis的主从模式是最简单的模式,但无法做到自动failover,通常在主从切换后,还需要修改业务代码,这是不能忍受的。...

2022-08-06 13:22:02 479

原创 Redis是单线程的,但Redis为什么这么快?

近乎所有与Java相关的面试都会问到缓存的问题,基础一点的会问到什么是“二八定律”、什么是“热数据和冷数据”,复杂一点的会问到缓存雪崩、缓存穿透、缓存预热、缓存更新、缓存降级等问题,这些看似不常见的概念,都与我们的缓存服务器相关,一般常用的缓存服务器有Redis、Memcached等,而笔者目前最常用的也只有Redis这一种。如果你在以前面试的时候还没有遇到过面试官问你《为什么说Redis是单线程的以及Redis为什么这么快!》,那么你看到这篇文章的时候,你应该觉得是一件很幸运的事情!如果你刚好是一位高逼格

2022-08-06 13:18:48 227

原创 你知道12306 是如何支撑百万 QPS 的?

上图中描述了用户请求到服务器经历了三层的负载均衡,下边分别简单介绍一下这三种负载均衡:OSPF(开放式最短链路优先)是一个内部网关协议(Interior Gateway Protocol,简称IGP)。OSPF通过路由器之间通告网络接口的状态来建立链路状态数据库,生成最短路径树,OSPF会自动计算路由接口上的Cost值,但也可以通过手工指定该接口的Cost值,手工指定的优先于自动计算的值。OSPF计算的Cost,同样是和接口带宽成反比,带宽越高,Cost值越小。...

2022-08-06 10:47:58 641

原创 颜值爆表!Redis官方可视化工具来啦,功能真心强大!

RedisInsight是Redis官方出品的可视化管理工具,可用于设计、开发、优化你的Redis应用。支持深色和浅色两种主题,界面非常炫酷!可支持String、Hash、Set、List、JSON等多种数据类型的管理,同时支持远程使用CLI功能,功能非常强大!下面是RedisInsight的一张使用效果图,颜值不错!Redis经过多年发展,早已不仅仅是一个内存数据库了。有了RedisMod的支持,Redis的功能将变得非常强大。RediSearch:一个功能齐全的搜索引擎;...

2022-08-06 10:22:22 358

原创 解决Redis、MySQL缓存双写不一致问题

redis、mysql双写缓存不一致:但是在更新缓存方面,对于又或者是先目前没有一篇全面的博客,对这几种方案进行解析。于是博主战战兢兢,顶着被大家喷的风险,写了这篇文章。

2022-08-06 10:02:00 663 1

原创 发现一款好用到爆的数据库工具,被惊艳到了

在面板中,左上部分列出了已经建立的数据库连接,点击各项,右侧会展示当前连接的配置信息,General面板中,可以配置数据库连接的信息,如主机、用户名、密码等,不同数据库配置信息不完全相同,填入数据库URL,注意,URL后有个选项,可以选择直接填入url,那么就不需要单独填主机名、端口等信息了。需要将当前主题保存一下,点击save as,起个名,选择重命名后的主题就能修改了,这里我选择习惯的Conurier New字体,大小为14号,点击右下角的apply,点击OK。...

2022-08-06 09:21:40 1088

原创 我劝!这位年轻人不讲MVCC,耗子尾汁!

上一篇文章中白日梦有和大家介绍过 undo log 默认存放在共享表空间文件中,同在MySQL5.6 MySQL5.7中也允许你将undo log拿到单独的表空间中去,但是不论怎样,undo log总会以真实存在的文件的形式存在于磁盘上,当然了MySQL5.7的undo truncate机制 结合purge线程可以将不需要的undo log清除掉,为undo log文件瘦身,但是在这个版本之前的MySQL的undo log的体量会不断的增大,再加上大量的长事务,很可能会将磁盘打爆。...

2022-08-05 16:25:35 133

原创 什么情况会导致 MySQL 索引失效?

联合索引不满足最左匹配原则。模糊查询最前面的为不确定匹配字符。索引列参与了运算。索引列使用了函数。索引列存在类型转换。索引列使用 is not null 查询。

2022-08-05 13:55:53 2227 1

原创 了解MySQL数据页吗?说说什么是页分裂吧!

在MySQL的设定中,同一个表空间内的一组连续的数据页为一个extent(区),默认区的大小为1MB,页的大小为16KB。约定好了数据的组织方式,那MySQL的作用不就是:按照约定数据规则将数据文件中的数据加载进内存,然后展示给用户看,以及提供其他能力吗?而你想得到的id = xxx的数据,就是这个数据页众多行中的一行。在InnoDB存储引擎中,数据页是InnoDB磁盘管理的最小的数据单位,数据页的默认大小为16KB。然后随着你将数据写入。就导致后一个数据页中的所有行并不一定比前一个数据页中的行的id大。.

2022-08-05 13:50:27 680

原创 聚簇索引之B+Tree是如何长高的

这一篇笔记简述一下MySQL的B+Tree索引到底是咋回事?聚簇索引索引到底是如何长高的。一点一点看,其实蛮好理解的。MySQL进行CRUD是在内存中进行的,也就是在Buffer Pool中。然后你也知道了当内存中没有MySQL需要的数据时,MySQL会从Disk中通过IO操作将数据读入内存中。读取的单位呢就是:数据页一般数据页长下面这样数据页没错,数据页中存储着真实的数据,而且数据页在内存中是以双向联表的方式组织起来的!如下图页分裂之前。...

2022-08-05 13:35:12 219

原创 从一道面试题进入Java并发新机制---J.U.C

它是 Java包的缩写,从包的名称就可以看出,它应该主要提供一些线程同步的类。这个包下面的类提供了多种实现线程同步的方式,还有诸如Executor、Callable、Future、等耳熟能详的接口。

2022-08-05 13:16:26 243

原创 面试官:了解 MySQL的数据行吗?行溢出机制呢?谈谈看!

你品一品蓝色的话,让一个数据页中可以存放更多的数据行是一个多么激动人心的事,MySQL以数据页为单位从磁盘中读数据,如果能做到让一个数据页中有更多的行,那岂不是单行使用的数据页空间变少了,且整体的效率直线飙升?在MySQL设定中,当varchar列长度达到768byte后,会将该列的前768byte当作prefix存放在行中,多出来的数据溢出存放到溢出页中,然后通过一个偏移量指针将两者关联起来,这就是行溢出机制。那就意味着一个数据页中能存储越多的数据行,MySQL整体的进行的IO次数就越少,性能就越快。..

2022-08-05 13:12:13 232

原创 大家常说的表空间到底是什么?究竟什么又是数据表呢?

关于这个共享表空间,直观上看,如果这个表空间能为multiple tables.存储数据,那么它就可以被称为共享表空间,所以你可以认为系统表空间是共享表空间。这里的user其实就是数据表。大家不用纠结为啥它叫表空间、为啥表空间会对应着磁盘上的物理文件,因为MySQL就是这样设计、设定的。共享表空间的体量依然会不断的增长,并且你即使你不断的使用undo进行rollback,共享表空间大小也不会缩减就好了。这个ibdata1文件是系统表空间,也是默认的表空间,也是默认的表空间物理文件,也是传说中的共享表空间。.

2022-08-05 13:09:29 739

原创 LSN、Checkpoint?MySQL的崩溃恢复是怎么做的?

那MYSQL重启,由于未来得及commit,脏数据页没有刷新到磁盘上,所以重启时得到的数据时不准确的,但是,实际上MySQL会根据方才的redo log重做。因此内存中的缓存页磁盘成为磁盘上的数据页,也就是说磁盘上的数据页的LSN变成300。说明数据页中缺失了一部分数据。随着MySQL的运行,Buffer Pool中的数据页会被修改成脏数据页,当你开启事物进行一系列的操作时MySQL会为你不停的记录一堆日志,拿redo log来说,rodo log也是需要往先往内存中写,再以块的形式刷新回磁盘。...

2022-08-05 13:04:39 298

原创 一看就懂的:MySQL的Double Write

由断电引发的问题不一会 - 来电了Double write工作流程恢复的过程配置参数Double write并不一定是必须的疑问二、由断电引发的问题今天为大家介绍一个新的名词:double write。相信你还记得,我之前有写笔记跟大家分享过,在MySQL组织数据的基本单位是存在于磁盘上的数据页。数据页被读取到内存(Buffer Pool)中后被称为缓存页。默认情况下每个数据页的大小是16kb,数据页中存储的就是一行行真实的记录,也叫做数据行。...

2022-08-05 09:46:57 1279 1

原创 对NotNull字段插入Null值有啥现象?

从上面的实验来看,相信你已经看出了现象:无论是否开启了严格模式,MySQL都不允许往not null字段插入null值,它不会因为你插入null,而将null转成该数据类型的0值。将其加入到sql_model之后,MySQL将不允许你将诸如 0000-10-10、2020-00-10、2020-10-00等年份、月份、日期为零的值插入到Date列中。为了更直观的看出sql mode 对sql执行结果的影响,推荐你看一下下面的这两个小Demo,都不复杂。研发的同学了解就好了,不用刻意记住它,了解就是加分项!.

2022-08-05 09:05:57 710

原创 一通骚操作,我把SQL执行效率提高了10000000倍!

mysql嵌套子查询效率确实比较低可以将其优化成连接查询连接表时,可以先用where条件对表进行过滤,然后做表连接(虽然mysql会对连表语句做优化)建立合适的索引,必要时建立多列联合索引学会分析sql执行计划,mysql会对sql进行优化,所以分析执行计划很重要。......

2022-08-03 15:09:21 268

原创 无内鬼,来点干货!SQL优化和诊断

我们知道Mysql有一个最左匹配原则,那么如果我的索引建的是age,name,那我以name,age这样的顺序去查询能否使用到索引呢?说明:MySQL 并不是跳过 offset 行,而是取 offset+N 行,然后返回放弃前 offset 行,返回 N 行,那当 offset 特别大的时候,效率就非常的低下,要么控制返回的总页数,要么对超过特定阈值的页数进行 SQL 改写。之前回答一些面试问题的时候,对某一个点的理解出现了偏差,即我认为只要查询的列有索引则一定会使用索引去Push数据。...

2022-08-03 14:39:40 139

原创 上亿数据怎么玩深度分页?兼容MySQL + ES + MongoDB

同样的,随着页码的增大,skip 跳过的条目也会随之变大,而这个操作是通过 cursor 的迭代器来实现的,对于cpu的消耗会非常明显,当页码非常大时且频繁时,必然爆炸。这种滚动式API进行深度跳页查询,也是一样需要每次滚动几千条,可能一共需要滚动上百万,千万条数据,就为了最后的20条数据,效率可想而知。不是典型的数据库,它是一个搜索引擎,如果在筛选条件下没有搜索出想要的数据,继续深度分页也不会找到想要的数据,退一步讲,假如我们把。数据库还好,本身就是专业的数据库,处理的不好,最多就是慢,但如果涉及到。..

2022-08-03 14:37:52 208

原创 MySQL中的基数是啥?

大白话讲:基数指的就是MySQL表中某一列的不同值的数量。如果这一列是唯一索引,那基数 == 行数。如果这一列是sex,枚举类型只有男女,那它是基数就是2。Cardinality越高,列就越有成为索引的价值。通过下面的方式可以看到表中各列的基数。比如这个经典的例子:有一列为sex,那对于sex列中存储的值来说 非男即女,它的基数最大就是2。那也就完全没有必要为sex建立索引。因为,为了提升你基于sex的查询速度,MySQL会为你选择的这个新索引创建一棵全新的B+Tree。...

2022-08-03 14:26:28 660

原创 简介undo log、truncate、​以及undo log如何帮你回滚事物?

truncate意为:截断其实结合 truncate table sql,就能更好的理解这个概念。当你不需要某个表中的数据时,你可以执行truncate sql将表中的数据清空掉。同样的undo log的truncate机制本质上就是为undo log 表空间文件瘦身,将不需要的undo log从undo log 表空间文件中清理掉。在MySQL 5.6(包括5.6)之前undo tablespace里面的undo数据文件是无法收缩的。...

2022-08-03 12:02:08 483 3

原创 并发编程的核心问题

例如,在人力资源部进行员工的绩效考核时,设计部和研发部正在设计和开发公司的产品,与此同时,公司的运营人员正在和设计人员与研发人员沟通如何更好地完善公司的产品,而市场部正在加大力度宣传和推广公司的产品,财务部正在统计和计算公司的各种财务报表等。在现实生活中,这种任务的同步,更多的是靠人与人之间的交流和沟通来实现的。这就是现实生活中的互斥场景。由图4可以看出,在现实生活中,张三、李四和王五的任务之间是有依赖关系的,张三渲染页面的任务依赖李四开发接口的任务完成,李四开发接口的任务依赖王五开发服务的任务完成。...

2022-08-03 11:01:19 124

原创 一文带你看懂Spring事务!

本文主要讲了Spring事务管理一些比较重要的知识点,当然在学习的过程中还看到其他的知识点,如果想要继续学习的同学不妨通过下面给出的参考资料继续阅读。

2022-08-03 10:35:47 218

转载 学会编程, 而不是学会Java

解决的办法其实也很简单:就是多实践,多编码, 我推荐多做数据结构和算法的习题, 这也是我个人的经验, 大学时把数据结构的习题都做一遍, 后来工作中只要不是设计算法, 基本上没要难住我的。如果以后想选择码农作为职业, 这种编程能力是必不可少的, 所以在校的同学, 不妨从现在就开始, 把缺失的能力不上。然后我拿这个类给几个人测试, 我发现很少人能够顺利的把这几个方法给实现了, 哪怕是非常粗糙的实现也没有。我想可能是不少人都缺乏最最基本的数据结构和算法的训练, 还没有养成面向计算机的逻辑思考的方式。...

2022-08-03 09:41:22 90

原创 Spring入门这一篇就够了

Spring诞生:创建Spring的目的就是用来替代更加重量级的的企业级Java技术简化Java的开发基于POJO轻量级和最小侵入式开发通过依赖注入和面向接口实现松耦合基于切面和惯例进行声明式编程通过切面和模板**减少样板式代码 **/*** 1) 对象创建: 单例/多例* scope="singleton", 默认值, 即 默认是单例 【service/dao/工具类】* scope="prototype", 多例;【Action对象】** 2) 什么时候创建?...

2022-08-03 09:32:08 142

原创 HashMap 中 hash 冲突的解决方法及原理分析

HashMap基于哈希表的Map接口的实现。此实现提供所有可选的映射操作,并允许使用null值和null键。(除了不同步和允许使用null之外,HashMap类与Hashtable大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。值得注意的是HashMap不是线程安全的,如果想要线程安全的HashMap,可以通过Collections类的静态方法synchronizedMap获得线程安全的HashMap。...

2022-08-02 14:12:04 3339

原创 手把手教你干掉if else

今天想来跟大家讨论一下怎么干掉ifelse。已经工作的人可能深有体会没有什么是ifelse搞不掂的,如果有,那就再嵌套一层。大多数人都是做业务开发的,ifelse是避免不了的,但怎么让ifelse的逻辑看起来更顺眼,变得更加好看,更加好维护呢?如果之前看过三歪文章的同学可能就会想到「责任链模式」。没错就是责任链模式当你看到一个Service中有一大堆ifelse逻辑的时候,你会着要不要重构掉,但是始终下不了手。所以,今天想来分享一个「」的责任链模式的,把ifelse。...

2022-08-02 13:32:11 159

原创 单例模式你会几种写法?

一个类中能创建一个实例,所以称之为单例!那我们什么时候会用到单例模式呢??那我们想想既然一个类中只能创建一个实例了,那么可以说这是跟类的状态与对象无关的了。频繁创建对象、管理对象是一件耗费资源的事,我们只需要创建一个对象来用就足够了!Servlet是单例的Struts2是多例的SpringMVC是单例的那既然多例是频繁创建对象、需要管理对象的,那Struts2为什么要多例呢??主要由于设计层面上的问题,Struts2是基于Filter拦截类的,ognl引擎对变量是注入的。效果是一样的啊。。...

2022-08-02 13:08:44 513

原创 【干货】分库分表最佳实践

MySQL单表(innoDB)可以存储10亿级数据,只是这时候性能比较差,业界公认MySQL单表容量在1KW以下是最佳状态,因为这时它的BTREE索引树高在3~5之间。1.单表行数超过500万行或者单表容量超过2GB,才推荐进行分库分表;如果预计三年后的数据量根本达不到这个级别,请不要在创建表时就分库分表。2.实际情况受mysql机器配置等多方面影响,可能数据量很大但性能依旧不错,但考虑后续发展一定要进行分库分表考虑。如何高效的使用分库分表,核心是做到尽量的路由到最少的表,最好是只路由到一个表里面。...

2022-08-02 11:47:41 544

原创 你我都会遇到的需求:如何导出MySQL中的数据~ 简单!实用!

使用这个参数后会开启mysql_use_result模式,MySQL每读到一行数据,就会立刻将这行数据返回给客户端,虽然交互的次数多了点,但是直接解决掉客户端内存消耗问题。如果你的SQL要捞出的数据量动辄几十几百G,或者TB级别,且依然使用上面的方式拉数据的话,就极有可能打爆内存。第二种方式如下,在登录MySQL时指定好用哪个数据库和要执行的SQL语句,并将SQL的执行结果一股脑重定向到你指定的文件中。tee的功能是把你与MySQL-Server之间的交互记录都记录到你指定的文件中去。...

2022-08-02 10:54:33 151

原创 工厂模式理解了没有?

在《设计模式之禅》这本书中分了两章节讲工厂模式工厂方法模式(ps其中里面讲到了简单工厂模式)抽象工厂模式网上的大部分资料都是将工厂模式分成三种简单/静态工厂模式工厂方法模式抽象工厂模式看完上面的叙述是不是想打死我,什么鸟玩意?不急哈,下面我会一一讲到~~总的来说我们用简单工厂模式比较多,工厂方式模式的话代码量会比较大,抽象工厂模式的话需要业务比较大的情况下才会用到(如果有更好的理解方式不妨在评论区留言,一起交流交流涨涨见识~~)工厂模式配合反射来使用也是极好的~https。...

2022-08-02 10:35:51 132

原创 嗨!不来看一下如何骚气十足的登陆MySQL嘛?

mysql.sock应该是mysql的主机和客户机在同一host(物理服务器)上的时候,使用unixdomainsocket做为通讯协议的载体,它比tcp快。如果你没有配置环境变量,系统就不能直接识别mysql命令,需要你进入到mysql安装目录下的bin文件下,找到mysql命令,然后执行登陆的动作。在mysql中用户的信息会存放在mysql数据库下的user表中可以像下面这样查看到所有用户信息。看起来我们需要了解一下mysql.sock的作用,因为通过它我们可以实现mysql的本地登陆。...

2022-08-02 10:21:46 91

原创 27个面试常问到的Linux命令

制Linuxs的端口,Centos7.x使用firewalld代替了原来的iptables。(本地计算机/home下的一个名为xxx.dmp的文件拷贝到远程服务器ip上的/home/oracle/dmpdir。而且远程服务器的帐号名为root,会提示你输入密码。//这个命令会自动显示新增内容,屏幕只显示10行内容的(可设置)。命令会输出周几几月几日时间和时间显示格式和年份。根据名称查找/目录下的filename.txt文件。#查看端口是否已经开放。#停止firewall。...

2022-08-02 09:54:04 2563

原创 删库后!除了跑路还能干什么?

Hi,欢迎订阅白日梦的MySQL专题!这篇文章我们一起闲聊,如果你不小心把MySQL中的数据删了,除了跑路还能干啥?看完本篇你将了解常见的数据库备份方式、mysqldump实战、一条binlog长啥样、什么是gtid?什么是binlog位点?mysqlbinlog数据恢复实战。GTID(globaltranscationidentifier)它是MySQL5.6版本中添加进来的新特性,使用GTID可以唯一的标识一个事物。我用大白话描述一下GTID常见的作用1.写undolog。...

2022-07-31 15:51:57 93

原创 MySQL常见的索引

目录一、导读二、聚簇索引三、二级索引四、联合索引4.1、什么是联合索引4.2、左前缀原则4.3、联合索引的分组&排序五、覆盖索引六、倒排索引七、推荐阅读一、导读在MySQL中,不仅为主键创建的聚簇索引选用的数据结构是B+Tree,像辅助索引,二级索引、覆盖索引、联合索引等等其实都是B+Tree。...

2022-07-31 15:48:42 727

原创 MySQL两阶段提交串讲

而两阶段提交的机制可以保证这两个日志文件的逻辑是高度一致的。一般当我们的功能函数中有批量的增删改时,我们会添加一个事物包裹这一系列的操作,要么这一组操作全部执行成功,只要有一条SQL执行失败了我们就全部回滚。也就是说当这个参数为ON时,你使用的DAO持久层框架发送给数据库的SQL其实都会被放在一个事物中执行,然后这个事物被自动提交,而我们对这个过程是无感知的。当然,两阶段提交能做到足够的安全还需要你合理的设置redolog和binlog的fsync的时机,而这块知识点所涉及到的参数前几篇文章已经说过。...

2022-07-31 14:15:30 173

原创 分布式领域最重要的一篇论文,到底讲了什么?

如果不了解一点相对论的时空概念,那么就很难理解前面的StrongClockCondition是什么含义。那接下来我们就简单介绍一下相关的概念。我们生活的空间是三维空间,但是为了更好地用图象来表示,我们先看二维的情况。现在假定我们的世界是一个二维平面,如下图平面上有一个点O,这个点的位置上放置了一个光源。我们以点O为原点,建立一个二维坐标系。位于O点的光源发出的光线,会在这个平面上朝着四周各个方向传播。一个事件可能对它的未来光锥内部的任何事件产生因果性上的影响。可能发送的消息来定义的。...

2022-07-31 14:03:29 147

原创 Redis笔记进阶篇:万字长文-整理Redis,各种知识点,建议收藏

这里就会出现一个丢数据的概念你想,fork出来的子进程将要保存的数据是执行fork系统调用那个时刻的内存中的数据,很快这个内存就被标记为只读了,后续的增量数据没有写入到这个只读内存中,那就算是RDB成功生成了,然后好巧,Redis挂了,这些增量的数据就会丢(所以得使用AOF辅助)缓存击穿指的是Redis中确确实实存在用户查询的key,但是呢用户的访问频率太猛烈了,导致Redis扛不住挂了,导致大量的请求直接打向数据库,或者当某一个key的过期时间到了的瞬间,大量的请求打向数据库导致数据库直接挂了。...

2022-07-31 13:49:10 252

空空如也

空空如也

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

TA关注的人

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