自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(475)
  • 资源 (19)
  • 收藏
  • 关注

原创 【数据库】MySQL的卸载

【前言】MySQL的卸载是个很头疼的问题,我们常常会因为卸载不干净导致重新安装无法进行。MySQL的卸载无形中浪费了我们很多宝贵的时间,下面是我卸载的全过程、感觉还是挺实用的。第一步:打开控制面板、找到MySQL,将其卸载。第二步:删除安装目录下的的my.ini文件及所有文件。第三步:Windows +R  运行“regedit”文件,打开注册表编辑器。1、

2016-05-28 22:48:20 1698 6

原创 没有伞的孩子必须努力奔跑!

想想自己也不小了,终将会迈入社会。也许这一刻来的比预想的稍早一些,但这是我们必须经历的!一个人如果没有自己的思想,那么这个人可能永远也不会长大。因为我们不可能永远生活在别人的臂膀下。一个有想法的人不一定能够成功,但我坚信一个有所作为的人必定是有思想的人(对各种事情有自己独特的见解)。当踏出校园的那一刻,我们也曾感到我们在这个社会上是如此渺小的一部分。所有的事情都得自己解决,社会

2015-10-15 15:44:30 3136 38

转载 13 秒插入 30 万条数据,这才是批量插入正确的姿势!

使用了 MyBatis 的批处理操作,将每 1000 条数据放在一个批次中插入,能够较为有效地提高插入速度。此外,还需要在配置文件中设置合理的连接池和数据库的参数,以获得更好的性能。如果批处理大小太小,插入操作的频率将很高,而如果批处理大小太大,可能会导致内存占用过高。这有助于控制内存占用,并确保插入操作平稳进行。总的来说,选择适当的批处理大小和等待时间可以帮助您平稳地进行插入操作,避免出现内存占用过高等问题。可以考虑使用一些内存优化的技巧,例如使用内存数据库或使用游标方式插入数据,以减少内存占用。

2024-03-19 13:50:41 47

转载 40 个 SpringBoot 常用注解:让生产力爆表!

特别的,@ResponseBody注解只能用在被@Controller注解标记的类中。@PutMapping注解用于处理HTTP PUT请求,并将请求映射到具体的处理方法中,@PutMapping是一个组合注解,相当于是@RequestMapping(method=HttpMethod.PUT)的快捷方式。@Repository注解也是@Component注解的延伸,与@Component注解一样,被此注解标注的类会被Spring自动管理起来,@Repository注解用于标注DAO层的数据持久化类。

2024-03-19 13:43:22 34

转载 谁再用 @Async 创建线程以后就不用来了!!

一旦采用了这样的组合,最大线程数就会形同虚设,因为超出8个线程的任务,将全部会被放到无界队列里。明眼人一看,这种使用new线程的处理方式将会是非常可怕的。SimpleAsyncTaskExecutor类设计的非常操蛋,因为它每执行一次,都会创建一个单独的线程,根本没有共用线程池。说这话的同学,一定是能力比较强,或者Review的代码比较少,没有经过猪队友的洗礼。这个类的设计,使得任务的执行变的非常的不可控。注解,因为这种涉及到多线程的东西,即使是自己去创建线程,也是心怀敬畏,唯恐扰了操作系统的安宁。

2024-03-08 11:18:37 35

原创 多年以后,PageHelper 又深深给我上了一课!

虽然PageHelper给我带来一些困扰,耗费了一定的时间,但是定位问题的过程中,也学习了mybatis和pagehepler的实现方式,对于热爱源码阅读的同学来说还是有一定的提升的。,但是没有执行对应的sql,那么就表明,当前线程ThreadLocal被设置了分页参数,可是没有被使用,当下一个使用此线程的请求来时,就会出现问题。假设线程1持有没有被清除的page参数,不断调用同一个方法,后面两个请求使用的是线程2和线程3没有问题,再一个请求轮到线程1了,此时就会出现问题了。

2024-02-20 15:20:43 986

转载 京东开源,牛逼哄哄的 JD-hotkey 到底有多强悍?

对任意突发性的无法预先感知的热点请求,包括并不限于热点数据(如突发大量请求同一个商品)、热用户(如爬虫、刷子)、热接口(突发海量请求同一个接口)等,进行毫秒级精准探测到。然后对这些热数据、热用户等,推送到该应用部署的所有机器JVM内存中,以大幅减轻对后端数据存储层的冲击,并可以由客户端决定如何使用这些热key(譬如对热商品做本地缓存、对热用户进行拒绝访问、对热接口进行熔断或返回默认值)。这些热key在整个应用集群内保持一致性。核心功能:热数据探测并推送至集群各个服务器。适用场景:

2024-02-20 14:09:55 105

原创 Redis五种连接工具

2024-01-31 17:31:50 1080

原创 Redis哨兵模式或者单节点均支持的配置

【代码】Redis哨兵模式或者单节点均支持的配置。

2024-01-31 11:12:33 249

转载 数据脱敏的 3 种常见方案,好用到爆!

数据脱敏插件,目前支持地址脱敏、银行卡号脱敏、中文姓名脱敏、固话脱敏、身份证号脱敏、手机号脱敏、密码脱敏 一个是正则脱敏、另外一个根据显示长度脱敏,默认是正则脱敏,可以根据自己的需要配置自己的规则。mybatisplus 的新作,可以测试使用,生产需要收费。根据定义的策略类型,对数据进行脱敏,当然策略可以自定义。User,注解标识脱敏字段,及选用脱敏策略。4、配置类,自定义脱敏策略。2.JAVA数据脱敏实现。2.JAVA数据脱敏实现。1.SQL数据脱敏实现。1.SQL数据脱敏实现。

2024-01-23 13:48:10 68

转载 Springboot项目的接口防刷

说明:使用了注解的方式进行对接口防刷的功能,非常高大上,本文章仅供参考。一,技术要点:springboot的基本知识,redis基本操作,

2024-01-10 17:08:06 50

转载 数据库死锁排查思路分享(纠正篇)

大家好,我是田螺。昨天发了一篇死锁思路排查的文章,发现我举的代码例子,跟实际的业务场景有一点出入。因为我个人做事情是比较严谨的,所以今天纠正一下,再发一次。这篇文章,主要给大家讲讲数据库死锁的排查思路。死锁现场排查思路sql模拟死锁解决方案本文这个例子呢,是我模拟的一个案例出来,主要就是给大家分享死锁的排查思路。希望对大家有帮助哈。

2023-12-25 10:49:29 167

原创 Lambda表达式写代码,开发速度提高了10倍!

日常开发中,我们很多时候需要用到Java 8的Lambda表达式,它允许把函数作为一个方法的参数,让我们的代码更优雅、更简洁。所以整理了一波工作中,我常用的,有哪些Lambda表达式。看完一定会有帮助的。

2023-12-25 10:38:37 437

转载 阿里终面:10亿数据如何快速插入MySQL?

要首先确认约束条件,才能设计方案。确定面试官主要想问的方向,例如1T文件如何切割为小文件,虽是难点,然而可能不是面试官想考察的问题。从数据规模看,需要分库分表,大致确定分表的规模。从单库的写入瓶颈分析,判断需要进行分库。考虑到磁盘对并发写的支持力度不同,同一个库多个表写入的并发需要限制。并且支持动态调整,方便在线上环境调试出最优值。MySQL innodb、myisam 存储引擎对写入性能支持不同,也要在线上对比验证数据库批量插入的最佳阈值需要反复测试得出。

2023-12-01 13:54:18 138

原创 MyBatis Generator 插件 详解自动生成代码

MyBatis Generator(MBG)是MyBatis和iBATIS的代码生成器。可以生成简单CRUD操作的XML配置文件、Mapper文件(DAO接口)、实体类。实际开发中能够有效减少程序员的工作量,甚至不用程序员手动写sql。它将为所有版本的MyBatis以及版本2.2.0之后的iBATIS版本生成代码。它将内省数据库表(或许多表),并将生成可用于访问表的工件。这减少了设置对象和配置文件以与数据库表交互的初始麻烦。

2023-11-21 17:57:25 699

原创 分布式事务seata的使用

Seata 是一款开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案。

2023-11-17 17:52:01 271

转载 安利一个好用的IDEA插件 object-helper-plugin

因为它很早之前就停止维护了,新版本IDEA无法使用该插件,所以自己参考它的交互模式,基于新版本API开发了初版。File->settings->Tools->Object Helper 即可进入插件的配置页面。中提出宝贵意见,也可以联系我成为一名插件开发者,共同完善插件的功能。插件是一个日常开发工具集插件,提供丰富的功能,最开始是基于。插件市场搜索 “ObjectHelper”插件不断迭代,提供着我们的开发效率。就可以自动生成对象拷贝的代码。根据日常开发中的痛点,

2023-11-16 16:19:05 149

转载 Spring Boot 实现限流注解

***//*** 限流的 key,主要是指前缀* @return*//*** 在时间窗内的限流次数* @return*//*** 限流类型* @return*//*** 限流时间窗* @return*/

2023-11-01 13:56:49 84

转载 面试官:一台服务器最大能支持多少条 TCP 连接?问倒一大片。。。

总用户规模预计是1亿。【情况三 】、如果一台client仅有一个IP,server端也仅有一个IP但是server端启动多个程序,每个程序监听一个端口的情况下(比如server端启动了m个程序,监听了m个不同端口),一台client机器最大能建立的连接数量为:65535 * m。因为目标IP和端口固定,有 n 个源IP,四元组中可变化的就是【源端口】+ 【源IP】,【源端口】的可用范围又是【0 ~ 65535】,所以一个IP最大能建立65535个连接,那么n个IP最大就能建立 n * 65535个连接了。

2023-10-31 10:45:06 115

转载 自从学会 Arthas,日常开发效率直接起飞!!

比如我们在生产环境上一般是不会打印DEBUG级别的日志的,当我们在线上排查问题时可以临时开启DEBUG级别的日志,帮助我们排查问题,下面介绍下如何操作。查看 JVM 已加载的类信息,Search-Class的简写,搜索出所有已经加载到 JVM 中的类信息。查看已加载类的方法信息,Search-Method的简写,搜索出所有已经加载的类的方法信息。启动成功后,选择当前需要诊断的 Java 程序的序列号,这里是1,就可以开始诊断了;查看当前线程信息,查看线程的堆栈,可以找出当前最占 CPU 的线程。

2023-10-30 15:44:37 57

转载 阿里终面:10亿数据如何快速插入MySQL?

但如果是HDD的话,虽然顺序读写会有非常高的表现,但HDD无法应对并发写入,例如每个库10张表,假设10张表在并发写入,每张表虽然是顺序写入,由于多个表的存储位置不同,HDD只有1个磁头,不支持并发写,只能重新寻道,耗时将大大增加,失去顺序读写的高性能。回到SSD的场景,不同SSD厂商的写入能力不同,对于并发写入的能力也不同,有的支持500M/s,有的支持1G/s读写,有的支持8个并发,有的支持4个并发。使用主节点轮训任务,可以减少任务的争抢,通过kafka发布消息,接收到消息的进程处理任务。

2023-10-30 09:19:57 50

转载 Spring Boot 接口一个 JSON 字符串用两个对象去接收,这能行吗?

这个方法核心的部分就是遍历系统中的所有 HttpMessageConverter,然后挨个去检查,看哪个 HttpMessageConverter 可以处理当前参数,如果能够处理(canRead 方法返回 true),那么就去检查当前请求体中是否有内容(message.hasBody),如果有,那么就调用 genericConverter.read 方法进行处理,这个方法内部实际上就是 JSON 的转换逻辑了,常规的 JSON 操作,就和 SpringMVC 没有关系了,我们这里就不展开了。

2023-10-23 15:57:28 354

原创 零宽空格引发的问题

简单理解就是这个字符正常情况下肉眼不可见,但是它确实存在,所以手输的 aaa 匹配不上存在数据库里面的 aaa,因为数据库的aaa夹了看不见的"内鬼"啊!理论上这个概率比较低,因为密码够复杂,长度必须为 18 位,且必须包含字母大小写、数字和特殊符号,但是确实是有这个可能,所以为啥不能用手机号当登录账号呢?看着报错,肯定就是 user 没找到呗,那么我自己输入了一遍账号和密码,确认没输错,于是就怀疑起密码,难道是邮寄发送的密码和数据库实际存储的不一样?好吧,懂了,破案了,怪不得数据没匹配上!

2023-10-17 18:10:15 121

原创 Spring Boot + Disruptor = 王炸!!

Disruptor 是英国外汇交易公司LMAX开发的一个高性能队列,研发的初衷是解决内存队列的延迟问题(在性能测试中发现竟然与I/O操作处于同样的数量级)。基于 Disruptor 开发的系统单线程能支撑每秒 600 万订单,2010 年在 QCon 演讲后,获得了业界关注。Disruptor是一个开源的Java框架,它被设计用于在生产者—消费者(producer-consumer problem,简称PCP)问题上获得尽量高的吞吐量(TPS)和尽量低的延迟。

2023-10-17 09:43:37 79

转载 Java源码阅读技巧

当我们在读完一个类的代码的时候,一定要总结这个类的职责,明白这个类存在的意义。一般情况下一个类核心职责只有一个,遵循单一职责的设计原则。举个例子,在RocketMQ中有一个类MQClientAPIImpl。

2023-10-16 16:47:33 367

转载 【面试】什么是Mysql索引合优化index_merge?

在使用 explain 命令分析 SQL 执行情况的时候,type列会描述了表如何被连接,这个列的内容直接反映了 SQL 执行的效率。当里面的内容展示为时表示使用了索引合并优化,在这种情况下输出行中的key列包含具体使用的索引。MySQL 的索引合并优化是一种查询优化技术,它利用多个索引来加速查询的执行。当一个查询中包含多个条件,并且这些条件分别适用于不同的索引时,MySQL 可以将这些索引合并起来使用,减少了回表的次数,以加速查询的执行。

2023-09-13 15:32:26 261

原创 Java 中“1000==1000”为false,而”100==100“为true?

这就是它有趣的地方了。如果你看去看 Integer.java 类,你会发现有一个内部私有类,IntegerCache.java,它缓存了从-128到127之间的所有的整数对象。基本知识:我们知道,如果两个引用指向同一个对象,用==表示它们是相等的。如果两个引用指向不同的对象,用==表示它们是不相等的,即使它们的内容相同。合乎逻辑的理由是,在此范围内的“小”整数使用率比大整数要高,因此,使用相同的底层对象是有价值的,可以减少潜在的内存占用。所以事情就成了,所有的小整数在内部缓存,然后当我们声明类似——

2023-09-13 15:05:49 344

原创 一款 IDEA 插件帮你优雅转化 DTO、VO、BO、PO、DO

转自:码猿技术专栏POJO 的定义是无规则简单的对象,在日常的代码分层中 pojo 会被分为VO、BO、 PO、 DTO。

2023-09-11 11:43:47 129

转载 【面试】MySQL行锁和表锁的含义及区别

在MySQL的InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。如果用户A在进行了上述操作后,事务还未提交,则B无法对2~6之间的记录进行更新或插入记录,会阻塞,当A将事务提交后,B的更新操作会执行。对MyISAM表的写操作,会阻塞其它进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。

2023-09-05 17:21:53 46

原创 MyBatis 一个简单配置搞定加密、解密,不能太方便了~!TypeHandler

在我们数据库中有些时候会保存一些用户的敏感信息,比如:手机号、银行卡等信息,如果这些信息以明文的方式保存,那么是不安全的。我们有一张客户表customer,里面有客户手机号(phone)和客户地址(address)等字段,其中客户手机号(phone)是需要加密保存到数据库中的。从测试结果中可知,添加数据时,需要加密的数据(phone)在数据库中已经加密了,在查询的时候,加密的数据已经自动解密了。1、在添加客户信息时,自动将客户手机号加密保存到数据中。2、在查询客户信息时,自动解密客户手机号。

2023-08-29 10:00:12 413

转载 图解bin log、redo log及undo log区别,2分钟吃透!

Bin log、Redo log 和 Undo log 的区别,是 MySQL 的高频面试题,大厂校招面试90%会问。在 MySQL 数据库中,Bin log、Redo log 和 Undo log 都是极为重要的日志文件。MySQL 实现事务、崩溃恢复、集群的主从复制等,底层都离不开日志,可以说日志是 MySQL 的内核所在。只有了解 MySQL 日志,才算是彻底搞懂 MySQL。本文主要探讨 Bin log、Redo log 和 Undo log 的区别。

2023-08-24 10:36:17 1284

原创 Java百度提前批面试题

分布式拒绝服务(DDoS)攻击是通过大规模互联网流量淹没目标服务器或其周边基础设施,以破坏目标服务器、服务或网络正常流量的恶意行为。DDoS 攻击是通过连接互联网的计算机网络进行的。这些网络由计算机和其他设备(例如 IoT 设备)组成,它们感染了恶意软件,从而被攻击者远程控制。这些个体设备称为机器人(或僵尸),一组机器人则称为僵尸网络。一旦建立了僵尸网络,攻击者就可通过向每个机器人发送远程指令来发动攻击。

2023-08-24 10:07:56 1229

转载 Java8 中的真的 Optional 很强大,你用对了吗?

Optional 是 Java 语言的有益补充 —— 它旨在减少代码中的 NullPointerExceptions,虽然还不能完全消除这些异常。它也是精心设计,自然融入 Java 8 函数式支持的功能。总的来说,这个简单而强大的类有助于创建简单、可读性更强、比对应程序错误更少的程序。

2023-08-23 16:36:15 114

原创 一个 SpringBoot 项目能处理多少请求?

参考:https://blog.csdn.net/xiangzhihong8/article/details/131826222一个 SpringBoot 项目能处理多少请求?

2023-08-04 14:15:18 116

转载 JMH性能测试,试试你代码的性能如何

举个简单的栗子🌰 来说:假设我们需要验证String,StringBuffer,StringBuilder三者在使用的时候,希望能够通过一些测试来比对它们的性能开销。

2023-07-17 14:14:40 146

原创 Spring全局异常捕获类

【代码】Spring全局异常捕获类。

2023-04-13 16:43:44 174 1

原创 Spring @Valid 不生效 问题记录

综上所述,Spring解析@Valid的过程主要涉及到MethodValidationPostProcessor后置处理器,在BeanPostProcessor的postProcessBeforeInitialization方法中生成代理对象,并在方法执行前执行校验注解的过程。在拦截器中,会先获取方法上的校验注解,然后根据注解的类型,调用不同的校验器进行校验。在Controller的方法参数中添加@Valid注解,然后在实体类的属性上添加校验注解,例如@NotNull、@Size等。

2023-04-13 16:40:38 4022

转载 Jpa进阶,使用 Specification 进行高级查询

了 Jpa 的简单使用,而在实际项目中并不能满足我们的需求。如对多张表的关联查询,以及查询时需要的各种条件,这个时候你可以使用自定义 SQL 语句,但是Jpa并不希望我们这么做,于是就有了一个扩展:使用 Specification 进行查询。

2023-03-28 13:44:30 1670

转载 JPA入门,Spring Boot 整合 JPA 操作数据库

*** 根据 username 查询* @return*//*** 根据 username 和 age 查询* @return*/具体的关键字,使用方法和生产成 SQL 如下表所示KeywordSampleAnd2Or2Is,Equals1Between1 and?

2023-03-28 13:44:17 268

原创 mac Idea 安装后打不开,意外退出的解决方案

mac Idea 安装后打不开,意外退出的解决方案

2023-02-19 10:28:56 5964

jce_policy-8.AES加密版本.zip

Exception in thread "main" java.security.NoSuchAlgorithmException: Cannot find any provider supporting AES/ECB/PKCS7Padding https://www.codeprj.com/blog/92cdc41.html

2021-04-22

百度分布式id 代码uid-generator

uid-generator中的workId是由uid-generator自动生成的,并且考虑到了应用部署在docker上的情况,在uid-generator中用户可以自己去定义workId的生成策略,默认提供的策略是:应用启动时由数据库分配。说的简单一点就是:应用在启动时会往数据库表(uid-generator需要新增一个WORKER_NODE表)中去插入一条数据,数据插入成功后返回的该数据对应的自增唯一id就是该机器的workId,而数据由host,port组成。

2020-04-26

SpringBoot-Demo-master.zip

AOP主要实现的目的是针对业务处理过程中的切面进行提取,它所面对的是处理过程中的某个步骤或阶段,以获得逻辑过程中各部分之间低耦合性的隔离效果。其与设计模式完成的任务差不多,是提供另一种角度来思考程序的结构,来弥补面向对象编程的不足,这个可能是面试中经常提到的问题,同时它也是Spring框架中一个重大的特性,对于我们开发中最常见的可能就是日志记录,事务处理,异常处理等等。。。

2019-07-29

thumbnailator-0.4.8 图片压缩工具类及调用方法

thumbnailator-0.4.8 图片压缩工具类及调用方法 ,含内部代码

2019-05-05

Java面试题含答案

java常见的面试题,内涵丰富的知识,含答案。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。。

2018-03-29

Java多线程编程技术

(1)像深入Java虚拟机这种书籍,可能需要阅读三遍才能基本理解其中的知识点。《Java多线程编程核心技术》建议猿友们读两遍,因为其写得没有那么抽象,第一遍有些概念不是很理解,可以先跳过并记录起来,第一遍阅读的目的主要是了解整个架构。第二遍再慢慢品味,并贯穿全部是指点来思考,并将之前不理解的概念弄明白。 (2)尽量不要跳读,别直接跳过整个小节,这部书阅读起来其实内容不是很多。 (3)希望能够坚持将它读完!!!我知道很多猿友还没有将一般书从头到尾细细读完,等你有过完完整整读完一本书的经历,发现你阅读的耐心会大大提升!!

2018-03-26

sqlite3.exe

sqlite[S5]:database is locked svn代码是报错了,clean或者revert也都没有办法。

2017-10-11

jdk1.8.0_92源码

jdk1.8源码

2017-06-28

JAVASE --api

官方文档

2017-04-19

整合spring和mongodb用到的包和配置文件

整合spring和mongodb用到的包和配置文件 spring和mongodb的配置很麻烦 版本不对应就容易报错 这里可以直接引用 只要解压后放到web-inf文件夹中即可 自己工程的lib文件夹如果已经有东西 则把解压出的lib中包放到自己工程中的lib中

2017-04-17

javafx整理资料

javafx自学整理资料

2017-04-08

javafx的系列demo

javafx的系列demo

2017-04-08

Mysql5.1.32的安装图解

Mysql5.1.32的安装图解

2016-05-28

Smarty-2.6.19

Smarty是一个使用PHP写出来的模板PHP模板引擎,是目前业界最著名的PHP模板引擎之一

2016-05-13

Asp+access用户注册登录代码

Asp、access数据库登录、注册信息填写。实现简单的asp小例子

2015-12-16

java飞机大战基础练习

java联系项目,飞机大战,锻炼代码能力.zip

2015-12-09

UML建模工具JUDE

JUDE(Java and UML Developers' Environment),一个小巧实用的UML建模软件,不到2M,绝对可以符合UML建模的要求,可以画CLASS,USECASE,STATECHART,ACTIVITY,OBJECT,SEQUENCE,COLLABORATION,COMPONENT和DEPLOYMENT图,可以导入JAVA源文件直接建模,也可以导入ROSE98的MDL文件,可以将模型导出成JAVA源文件,HTML和文本格式。

2015-11-28

VB超酷皮肤控件

美化VB窗体,让VB程序更美观。VB超酷皮肤控件

2015-06-20

VBapi100个经典实例(功能齐全)

VBapi100个经典实例,悬挂式窗体、半透明式窗体.常用功能。

2015-06-20

空空如也

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

TA关注的人

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