自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 备战金九银十,java中高级核心知识全面解析,让你吊打面试官

本文限于篇幅,故而只展示目录的内容,完整的Java面试学习文档小编已经帮你整理好了,有需要的朋友点赞+关注私信我222免费领取Java、大厂面试学习资料哦!它是简单的字符串列表,你可以添加一个元素到列表的头部,或者尾部。如何设计一个高可用系统?身份认证优缺点分析以及常见问题解决方案。可用性的判断标准是啥?新的主服务器是怎样被挑选出来的?种数据类型对应的编码和数据结构。用户态切换到内核态的几种方式。有哪些提高系统可用性的方法?容器与虚拟机两者是可以共存的。使用数据库实现查找附近的人。...

2022-07-24 17:06:00 3164 6

原创 饿了么三面:让你怀疑人生的Spring Boot夺命连环40问

用来简化spring应用的初始搭建以及开发过程 使用特定的方式来进行配置(properties或yml文件)创建独立的spring引用程序 main方法运行嵌入的Tomcat 无需部署war文件简化maven配置自动配置spring添加对应功能starter自动化配置答:spring boot来简化spring应用开发,约定大于配置,去繁从简,just run就能创建一个独立的,产品级别的应用-快速创建独立运行的spring项目与主流框架集成-使用嵌入式的servlet容器,应用无需打包成war包-star

2022-06-21 17:21:14 2524 3

原创 Redis夺命十二问,差点没抗住!

要注意,Redis 对 RDB 的执行频率非常重要,因为这会影响快照数据的完整性以及 Redis 的稳定性,所以在 Redis 4.0 后,增加了 AOF 和 RDB 混合的数据持久化机制:把数据以 RDB 的方式写入文件,再将后续的操作命令以 AOF 的格式存入文件,既保证了 Redis 重启速度,又降低数据丢失风险。Redis 数据是存储在内存中的,为了保证 Redis 数据不丢失,那就要把数据从内存存储到磁盘上,以便在服务器重启后还能够从磁盘中恢复原有数据,这就是 Redis 的数据持久化。

2022-09-28 14:06:12 4149 4

原创 面试官:为什么 Spring 和 IDEA 都不推荐使用 @Autowired 注解??

大家在使用IDEA开发的时候有没有注意到过一个提示,在字段上使用Spring的依赖注入注解@Autowired后会出现如下警告:Field injection is not recommended (字段注入是不被推荐的)但是使用@Resource却不会出现此提示网上文章大部分都是介绍两者的区别,没有提到为什么,当时想了好久想出了可能的原因,今天来总结一下。另外,最新 Spring 面试题整理好了,大家可以在小程序在线刷题。

2022-09-20 15:08:45 3740

原创 掌握这些 Spring Boot 启动扩展点,已经超过 90% 的人了!

一般情况下,Spring通过反射机制利用bean的class属性指定支线类去实例化bean,在某些情况下,实例化Bean过程比较复杂,如果按照传统的方式,则需要在bean中提供大量的配置信息。此篇总结,如果有错误或者疏漏的地方,恳请指正。使用场景:用户可以扩展这个类,来为要实例化的bean作一个代理,比如为该对象的所有的方法作一个拦截,在调用前后输出一行log,模仿。可以看到,该类用于执行各种驱动接口,在bean实例化之后,属性填充之后,通过执行以上红框标出的扩展接口,来获取对应容器的变量。

2022-09-19 21:03:56 2378

原创 阿里云面试:Spring 中 Bean 的生命周期是怎样的?

IoC,控制反转,想必大家都知道,所谓的控制反转,就是把 new 对象的权利交给容器,所有的对象都被容器控制,这就叫所谓的控制反转。IoC 很好地体现了面向对象设计法则之一 —— 好莱坞法则:“别找我们,我们找你”,即由 IoC 容器帮对象找相应的依赖对象并注入,而不是由对象主动去找。理解好 IoC 的关键是要明确 “谁控制谁,控制什么,为何是反转(有反转就应该有正转了),哪些方面反转了”。谁控制谁,控制什么?

2022-09-19 20:03:24 1730

原创 超1.5万台Kafka,每秒数亿消息量的挑战

Kafka在美团数据平台承担着统一的数据缓存和分发的角色,随着数据量的增长,集群规模的扩大,Kafka面临的挑战也愈发严峻。本文分享了美团Kafka面临的实际挑战,以及美团针对性的一些优化工作,希望能给从事相关开发工作的同学带来帮助或启发。一、现状和挑战1.1 现状1.2 挑战二、读写延迟优化2.1 概览2.2 应用层2.3 系统层2.4 混合层-SSD新缓存架构三、大规模集群管理优化3.1 隔离策略3.2 全链路监控3.3 服务生命周期管理3.4 TOR容灾四、未来展望一、现状和挑战1、现状Kafka是一

2022-09-18 15:52:51 1420

原创 最新面试题:用友OC,美团三面已挂

如果主线程存了个ThreadLocal,然后主线程提交个任务给线程池,线程池里面的线程能读取到值吗?Java中的字符集采用的是哪种(不知道,我说可以自己选,UTF-8,GBK啥的,面试官说不对,让我下去了解下)StringBuilder和StringBuffer,为什么StringBuffer怎么保证的线程的安全?乐观锁是怎么设计的?在Innodb引擎下,写个sql,根据手机号更新用户名,手机号没有加索引,是行锁还是表锁?工作以后有一些工作是不感兴趣的,是枯燥重复的,如果分配给你了你怎么办?

2022-09-14 21:13:43 3601 1

原创 双非本科进不了大厂?阿里技术四面+交叉面+HR面,成功拿到offer

前阵子,我表弟收到了阿里巴巴的实习offer,从学长内推开始面试到拿到最后offer经历了4面技术、一面交叉面和一面HR面。经过了漫长的等待和几次几乎折磨的面试之后,终于拿到了实习offer。面试准备首先准备校招之前一定是要好好准备的,长期的就是自己的编程基本功以及对各个方面知识点的了解程度,短期的就是突破一下自己不会的知识点。他是投简历之前一个半月就开始做准备了,首先就是刷题,算法这一关还是比较重要,而且阿里还有笔试成绩,面试的时候也会问到一些不是太难的笔试题;

2022-09-07 17:22:33 1574 1

转载 SpringCloud 架构各个组件的原理,一次性给你说全

我们先认识一下SpringCloud的各个组件,然后知其所以然。图片原理讲解前,先看一个最经典的业务场景,如开发一个电商网站,要实现支付订单的功能,流程如下:创建一个订单之后,如果用户立刻支付了这个订单,我们需要将订单状态更新为“已支付”扣减相应的商品库存通知仓储中心,进行发货给用户的这次购物增加相应的积分图片如上,微服务的应用场景和核心竞争力:降低耦合:每一个微服务专注于单一功能,并通过定义良好的接口清晰表述服务边界。由于体积小、复杂度低,每个微服务可由一个小规模开发团队完全掌控,易于保持高可维护性和开发

2022-09-07 16:19:19 1583

原创 电脑死机的时候,它在干什么?

相信每位接触过计算机的朋友都经历过电脑死机。在我的印象中,天气热的时候打游戏就经常出现电脑蓝屏,每次都给我气的半死,但又拿蓝屏没什么办法。学了计算机后,我不再无能狂怒了,在遇到电脑死机时,会理性地分析蓝屏的原因。那么,你有没有想过:电脑在死机的时候,它到底在干嘛呢?众所周知,计算机的核心中枢是中央处理器CPU。上过计算机基础课程的同学都被教导过:CPU是一根筋死脑筋,只知道不断的取出指令来一条条执行,直到关机方休。

2022-09-06 19:58:15 1406

原创 SpringBoot 时间格式化的 5 种实现方法!

本文我们介绍了 5 种时间格式化的实现方法,其中第 1 种为前端时间格式化的方法,后 4 种为后端格式化的方法,和格式化的方法更适用普通的 Java 项目,其中是非线程安全的,而是线程安全的,但它们都不是 Spring Boot 项目中最优的时间格式化方案。如果是 Spring Boot 的项目,推荐使用第 4 种全局时间格式化或第 5 种局部时间格式化的方式,这两种实现方式都无需修改核心业务代码,只需要简单的配置一下,就可以完成时间的格式化功能了。

2022-09-06 16:08:23 2456 1

原创 看了我的MyBatis-Plus用法,同事也开始悄悄模仿了...

本文主要介绍mybatis-plus这款插件,针对springboot用户。包括引入,配置,使用,以及扩展等常用的方面做一个汇总整理,尽量包含大家常用的场景内容。关于mybatis-plus是什么,不多做介绍了,看官方文档:baomidou.com ,咱们直接代码撸起来。

2022-09-06 15:38:49 1272

原创 RabbitMQ、RocketMQ、Kafka 三元归一

Kafka Broker有一个参数,log.segment.bytes,限定了每个日志段文件的大小,最大就是1GB。一个Topic,代表逻辑上的一个业务数据集,比如订单相关操作消息放入订单Topic,用户相关操作消息放入用户Topic,对于大型网站来说,后端数据都是海量的,订单消息很可能是非常巨量的,比如有几百个G甚至达到TB级别,如果把这么多数据都放在一台机器上可定会有容量限制问题,那么就可以在Topic内部划分多个Partition来分片存储数据,不同的Partition可以位于不同的机器上,相当于。

2022-09-04 20:25:01 1330

原创 对线面试官:一口气说出分布式事务的七种解决方案

本文介绍了分布式事务的一些基础理论,并对常用的分布式事务方案进行了讲解;在文章的后半部分还给出了事务异常的原因、分类以及优雅的解决方案;最后以一个可运行的分布式事务例子,将前面介绍的内容以简短的程序进行演示。

2022-09-04 17:00:01 1327

原创 分布式锁&kafka事务提交等编码技巧

在开发过程中,遇到了一些比较实用的编码技巧,故记录以加深印象。因为每个技巧的篇幅较短,故不做拆分,只合在一篇小文章中阐述。以下会涉及kafka的事务提交方法、redis分布式锁简化以及多key情况下应该怎么加锁、业务日志如何解耦。

2022-09-04 16:38:15 1424

原创 MySQL架构演进-从主从复制到分库分表

从单节点数据库到主从复制,再到数据库高可用,再到分库分表,很好的解决了数据的性能、容量、高可用、运维性等问题,但是会带来分布式事务、复杂SQL难以操作、SQL路由等问题。架构设计应该遵循:"简单性"、"合适性"、"演化性"的原则,符合当前的业务发展,所以系统设计没有必要一上来就考虑分库分表,而应该是数据量达到一定的量,出现性能瓶颈的时候再对系统进行改造和优化。学习更多JAVA知识与技巧,关注与私信博主(222)学习JAVA 课件,源码,安装包,还有最新大厂面试资料等等等咱们下期见。

2022-09-04 15:54:42 1239

原创 SpringBoot+@Async注解一起用,速度提升100倍

异步调用”对应的是“同步调用”,同步调用指程序按照定义顺序依次执行,每一行程序都必须等待上一行程序执行完成之后才能执行;主程序在异步调用之后,主程序并不会理会这三个函数是否执行完成了,由于没有其他需要执行的内容,所以程序就自动结束了,导致了不完整或是没有输出任务相关内容的情况。上述的同步调用虽然顺利的执行完了三个任务,但是可以看到执行时间比较长,若这三个任务本身之间不存在依赖关系,可以并发执行的话,同步调用在执行效率方面就比较差,可以考虑通过异步调用的方式来并发执行。完成任务一,耗时:4256毫秒。

2022-09-04 14:43:17 1169

原创 Kafka 为什么那么快?

方法时,不会立刻把消息发送出去,而是缓存起来,选择恰当时机把缓存里的消息划分成一批数据,按批次发送给服务端。的“优先清除最近最少使用的页”这种策略,读取的时候,对于这种刚刚写入的。在消息写入时追求极致的顺序写,所有的消息不分主题一律顺序写入。,有一个消费者:这个消费者要处理所有数据,即 3 个分区的数据。写入文件的时候:操作系统会先把数据写入到内存中的。可以创建多个分区,每一个分区包含单独的文件夹。自定义协议格式的请求(包含携带的消息、),在同一个消费组的消费者共同消费数据。如何做到这个高的性能?

2022-09-01 20:39:58 1274

原创 面试反馈:SpringCloud 的25连环炮

上周,一位朋友在面试被问到了Spring Cloud,然后结合他的反馈,今天我们继续走起SpringCloud面试连环炮。下面是一张Spring Cloud核心组件关系图:从这张图中,其实我们是可以获取很多信息的,希望大家细细品尝。话不多说,我们直接开始 Spring Cloud 连环炮。Spring cloud 流应用程序启动器是基于 Spring Boot 的 Spring 集成应用程序,提供与外部系统的集成。...

2022-09-01 13:56:21 1384

原创 原来这才是Kafka的“真面目”?

Kafka 是一个分布式消息队列,具有高性能、持久化、多副本备份、横向扩展能力。生产者往队列里写消息,消费者从队列里取消息进行业务逻辑。一般在架构设计中起到解耦、削峰、异步处理的作用。Kafka 对外使用 Topic 的概念,生产者往 Topic 里写消息,消费者从中读消息。为了做到水平扩展,一个 Topic 实际是由多个 Partition 组成的,遇到瓶颈时,可以通过增加 Partition 的数量来进行横向扩容。单个 Parition 内是保证消息有序。...

2022-08-31 20:36:57 1678

原创 Java编程基础八股文(背诵版)

字节序是指多字节数据在计算机内存中存储或网络传输时个字节的存储顺序。通常由小端和大端两组方式。小端:低位字节存放在内存的低地址端,高位字节存放在内存的高地址端。大端:高位字节存放在内存的低地址端,低位字节存放在内存的高地址端。Java语言的字节序是大端。...

2022-08-31 16:05:08 1898 3

转载 Uber 的服务网格架构设计

服务网格有很多种不同的定义,但我们的定义是:一种基础设施层,它使微服务可以在远程过程调用(RPC)之间相互通信,而不用为基础设施的细节担忧。如果一个微服务需要和另一个微服务进行通信,那么它所需要的就是目标服务名称、程序和请求。其他工作由服务网格架构来完成,例如:发现:找到服务的最新后端任务需要,因为集群管理可以在主机之间移动后端任务排除不健康的后端任务负载均衡:确保负载被正确地分配给可用的任务认证:在服务之间安全地进行通信流量整形:避免将请求转发到某些区域/群集。...

2022-08-31 15:35:22 441

原创 2022年Java面试题目收集整理归纳(持续更新)

10、Elasticsearch 中的节点(比如共 20 个),其中的 10 个选了一个master,另外 10 个选了另一个 master, 怎么办?所有的面试题目都不是一成不变的,特别是大厂,上面的这些面试题目只是给大家一个借鉴作用,最主要的是给自己增加知识的储备,有备无患。35、MySQL 里有 2000w 数据,redis 中只存 20w 的数据,如何保证redis 中的数据都是热点数据?31、简单描述 MySQL 中,索引,主键,唯一索引,联合索引的区别,对数据库的性能有什么影响(从读写两方面).

2022-08-28 21:50:40 620

原创 延时任务-基于netty时间轮算法实现

为了大家能够理解下文中的代码,我们先来简单了解一下netty时间轮算法的核心原理时间轮算法名副其实,时间轮就是一个环形的数据结构,类似于表盘,将时间轮分成多个bucket(比如:0-8)。假设每个时间轮轮片的分隔时间段tickDuration=1s(即:指针经过每个格子花费时间是 1 s),当前的时间bucket=3,那么在18秒后需要被执行的任务需要落到((3+18)%8=5取余运算)的5号bucket上。假如有多个需要在该时间段内执行的任务,就会组成一个双向链表。...

2022-08-28 21:30:47 330

原创 面试官:如何安全地使用List

今天我们来讨论一个JUC中的集合类CopyOnWriteArrayList。

2022-08-28 17:09:54 273

转载 RocketMQ保姆级教程

RocketMQ是阿里巴巴旗下一款开源的MQ框架,经历过双十一考验、Java编程语言实现,有非常好完整生态系统。RocketMQ作为一款纯java、分布式、队列模型的开源消息中间件,支持事务消息、顺序消息、批量消息、定时消息、消息回溯等,总之就是葛大爷的一句话通过上面的理论介绍和实际的环境搭建再加上代码的测试,相信应该可以对RocketMQ有个入门,有兴趣的小伙伴可以手动搭起来,整个过程顺利的话可能就十几二十分钟这样子。...

2022-08-28 16:13:16 4804 1

原创 DDD(Domain-Driven Design)领域驱动架构介绍

DDD会让你首先考虑业务语言,而不是数据。领域模型并不完成业务,每个domain object都是完成属于自己应有的行为(single responsibility),就如同人跑这个动作,person.run是一个与业务无关的行为,但这个时候manger或者service在调用 some person.run的时候可能完成的100米比赛这个业务,也可能是完成跑去送外卖这个业务。领域模型对应的是业务实体,在程序中主要表现为类、聚合根和值对象,它更加关注业务语义的显性化表达,而不是数据的存储和数据之间的关系。.

2022-08-28 15:14:45 744

原创 面试官:为什么ConcurrentHashMap要放弃分段锁?

大家都知道,并发是什么样子的,就相当于百米赛跑,你是第一,我是第二这种形式,同样的,线程也是这样的,在并发操作中,因为分段锁的存在,线程操作的时候,争抢同一个分段锁的几率会小很多,既然小了,那么应该是优点了,但是大家有没有想过如果这一分块的分段很大的时候,那么操作的时间是不是就会变的更长了。,也就是说,我们上面写的这个最简单的算法的时间趋势是和 n 挂钩的,如果 n 变得越来越大,那么相对来说,你的时间花费的时间也就越来越久,也就是说,我们代码中的 n 是多大,我们的代码就要循环多少遍。...

2022-08-26 14:55:29 812

原创 Spring Boot 如何优雅的校验参数?

JSR-303是JAVA EE 6中的一项子规范,叫做。为JavaBean验证定义了相应的元数据模型和API。缺省的元数据是,通过使用XML可以对原有的元数据信息进行覆盖和扩展。在应用程序中,通过使用或是你自己定义的constraint,例如@NotNull,@Max,@ZipCode, 就可以确保数据模型(JavaBean)的正确性。constraint可以附加到字段,getter方法,类或者接口上面。对于一些特定的需求,用户可以很容易的开发定制化的constraint。

2022-08-24 19:36:51 389

原创 浅谈Java中的分布式锁(通俗易懂)

首先,分布式锁和我们平常讲到的锁原理基本一样,目的就是确保在多个线程并发时,只有一个线程在同一刻操作这个业务或者说方法、变量。在一个进程中,也就是一个jvm或者说应用中,我们很容易去处理控制,在jdk java.util并发包中已经为我们提供了这些方法去加锁,比如synchronized关键字或者Lock锁,都可以处理。但是我们现在的应用程序如果只部署一台服务器,那并发量是很差的,如果同时有上万的请求,很有可能造成服务器压力过大而瘫痪。

2022-08-22 21:21:44 435

原创 SpringBoot+ShardingSphereJDBC 实现读写分离 + MySQL主从复制

本文讲述了如何使用+进行读写分离,以及利用MySQL进行一主一从的主从复制。MySQL主从复制环境准备(Docker)搭建++Druid环境测试数据库中间件可以简化对读写分离以及分库分表的操作,并隐藏底层实现细节,可以像操作单库单表那样操作多库多表,主流的设计方案主要有两种:服务端代理:需要独立部署一个代理服务,该代理服务后面管理多个数据库实例,在应用中通过一个数据源与该代理服务器建立连接,由该代理去操作底层数据库,并返回相应结果。

2022-08-19 19:57:22 1051

原创 公司新来的技术大佬把代码架构玩出了花,堪称最佳实践!

COLA 架构并不复杂,COLA 已经从 1.0 版本经过逐次精简,发展到了如今的形态。在阿里云代码脚手架生成器中作为一个可选项,足见其已经趋于成熟。学习更多JAVA知识与技巧,关注博主学习JAVA 课件,源码,安装包,还有最新大厂面试资料等等等咱们下期见。

2022-08-19 19:26:21 610

原创 SpringCloud Gateway + Jwt + Oauth2 实现网关的鉴权操作

自定义授权管理器,判断用户是否有权限访问此处我们简单判断放行所有的 OPTION 请求。判断某个请求(url)用户是否有权限访问。所有不存在的请求(url)直接无权限访问。/*** 自定义授权管理器,判断用户是否有权限访问*/@Component@Slf4j/*** 此处保存的是资源对应的权限,可以从数据库中获取*/}@Override// 带通配符的可以使用这个进行匹配。......

2022-08-12 20:09:56 869

原创 SpringBoot 实现接口幂等性的 4 种方案

幂等是一个数学与计算机学概念,在数学中某一元运算为幂等时,其作用在任一元素两次后会和其作用一次的结果相同。在计算机中编程中,一个幂等操作的特点是其任意多次执行所产生的影响均与一次执行的影响相同。幂等函数或幂等方法是指可以使用相同参数重复执行,并能获得相同结果的函数。这些函数不会影响系统状态,也不用担心重复执行会对系统造成改变。在HTTP/1.1中,对幂等性进行了定义。...

2022-08-12 20:05:30 516

原创 分布式定时任务框架选型

E-Job和X-job都有广泛的用户基础和完整的技术文档,都能满足定时任务的基本功能需求。X-Job 侧重的业务实现的简单和管理的方便,学习成本简单,失败策略和路由策略丰富。推荐使用在“用户基数相对少,服务器数量在一定范围内”的情景下使E-Job 关注的是数据,增加了弹性扩容和数据分片的思路,以便于更大限度的利用分布式服务器的资源。但是学习成本相对高些,推荐在“数据量庞大,且部署服务器数量较多”时使用学习更多JAVA知识与技巧,关注博主学习JAVA 课件,源码,安装包,还有最新大厂面试资料等等等。...

2022-08-12 20:03:24 263

原创 金九银十面试必备:TCP 经典 15 连问!

TCP握手为什么是三次呢?为了方便理解,我们以谈恋爱为例子:两个人能走到一起,最重要的事情就是相爱,就是我爱你,并且我知道,你也爱我为什么握手不能是两次呢?如果只有两次握手,女孩子可能就不知道,她的那句我也爱你,男孩子是否收到,恋爱关系就不能愉快展开。为什么握手不能是四次呢?因为握手不能是四次呢?因为三次已经够了,三次已经能让双方都知道:你爱我,我也爱你。而四次就多余了。......

2022-08-11 16:56:02 876

原创 30分钟彻底弄懂 synchronized 锁升级过程

在Java的并发编程领域中,我们进行会使用到锁这个东西,例如在多线程环境下为了预防某些线程安全问题,这里面可能会产生一些预想不到的问题,所以下边我整理了一系列关于JDK中锁的问题,帮助大家更加深入地了解它们。...

2022-08-11 16:23:02 468

原创 公司系统太多,如何实现账号互通?

最近开发新产品,然后老板说我们现在系统太多了,每次切换系统登录太麻烦了,能不能做个优化,同一账号互通掉。作为一个资深架构狮,老板的要求肯定要满足,安排!转存失败重新上传取消一个公司产品矩阵比较丰富的时候,用户在不同系统之间来回切换,固然对产品用户体验上较差,并且增加用户密码管理成本。也没有很好地利用内部流量进行用户打通,并且每个产品的独立体系会导致产品安全度下降。因此实现集团产品的单点登录对用户使用体验以及效率提升有很大的帮助。那么如何实现统一认证呢?我们先了解一下传统的身份验证方式。...

2022-08-11 15:34:21 833

原创 解放双手!无需注解快速生成API文档,跟SpringBoot绝配!

做技术管理的童鞋,往往会陷入这样一种困境:疲于奔命,到处救火填坑,沟通推进,却挤不出时间思考对团队和项目来说真正重要的事情。你有没有经历过这样的场景:下属老是改了接口但不维护文档,屡说不改后端改了接口没有及时通知前端和测试,导致下游环节的同事来投诉由于团队每个角色使用的工具不同,工具之间的数据又无法兼容互通,导致一些共用的数据,每个人却要自己重复去创建、复制一遍;而一旦出现修改,每个人又要到不同软件再改一遍新同事入职,工具入门门槛高,导致上手困难且缓慢。...

2022-08-11 15:23:06 407

空空如也

空空如也

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

TA关注的人

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