自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Spring源码深度解析 (第2版) PDF 免费下载

资料封面资料截图全面剖析Spring源码,方便读者根据业务需求进行更改或扩展 所有知识点秉承由浅入深、由易到难的讲解架构 采用抽丝剥茧的方式来阐述复杂的逻辑,降低理解难度 Spring是一个源码开放的轻量级Java开发框架,旨在解决业务逻辑层和其他各层的松耦合问题。自从2003年推出以来,逐渐发展成为事实上的Java EE开发标准。多年来,Spring不但得到了广泛的应用,还直接或间接地影响...

2019-02-25 23:31:44 64449 42

原创 面试官:order by 是怎样排序的?怎么优化?

01 前言刚换了新工作,用了两周时间准备,在 3 天之内拿了 5 个 offer,最后选择了广州某互联网行业独角兽 offer,昨天刚入职。这几天刚好整理下在面试中被问到有意思的问题,也借此机会跟大家分享下。这家企业的面试官有点意思,一面是个同龄小哥,一起聊了两个小时(聊到我嘴都干了)。二面是个从阿里出来的架构师,视频面试,我做完自我介绍之后,他一开场就问我:对 MySQL 熟悉吗?我一愣,随之意识到这是个坑。他肯定想问我某方面的原理了,恰好我研究过索引。就回答:对索引比较熟悉。他:

2021-07-16 12:58:27 958 2

原创 面试官:数据库自增 ID 用完了会咋样?

01 前言哈喽,好久没更新啦。因为最近在面试。用了两周时间准备,在 3 天之内拿了 5 个 offer,最后选择了广州某互联网行业独角兽 offer,昨天刚入职。这几天刚好整理下在面试中被问到有意思的问题,也借此机会跟大家分享下。这家企业的面试官有点意思,一面是个同龄小哥,一起聊了两个小时(聊到我嘴都干了)。他问了我一个有意(keng)思(b)问题:数据库中的自增 ID 用完了该怎么办?这个问题其实可以分为有主键 & 无主键两种情况回答。国际惯例,先上张脑图:1.1 往期精彩My

2021-07-13 13:31:21 309

原创 面试官:如何给字符串设计索引?

01 前言哈喽,好久没更新啦。因为最近在面试。用了两周时间准备,在 3 天之内拿了 5 个 offer,最后选择了广州某互联网行业独角兽 offer,昨天刚入职。这几天刚好整理下在面试中被问到有意思的问题,也借此机会跟大家分享下。这家企业的面试官有点意思,一面是个同龄小哥,一起聊了两个小时(聊到我嘴都干了)。二面是个从阿里出来的架构师,他问了个场景题:数据库有个字符串类型的字段,存的是 URL 怎么设计索引?当时我给出拆分字段:url 的前半部分肯定区分度低,到了后半部分才高;我把区分度高和低的

2021-06-08 13:00:14 333 1

原创 路上,小胖问我:Redis 主从复制原理是怎样的?

00 前言我负责我司的报表系统,小胖是我小弟。随着业务量的增加,单实例顶不住,我就搭建了多个 Redis 实例,实现主从模式。好学的小胖就问我啊,远哥,多实例之间的数据是怎么保持同步的呀?你教教我好不好嘛~我拿起手中 82 年的开水抿了一口,跟小胖说:你先看这篇文章,学会了操作,我再给你讲讲原理吧。https://juejin.cn/post/6844903650175746056#heading-0老规矩,还是先上脑图:(PS:文末有我准备的大厂面试题)0.1 往期精彩MySQL 查询语句

2021-05-13 21:49:26 204

原创 工作三年,小胖连 Redis 持久化都不知道?真丢人!

00 前言很多小伙伴都用 Redis 做缓存,那如果 Redis 服务器宕机,内存中数据全部丢失,应该如何做数据恢复呢?有人说很简单呀,直接从 MySQL 数据库再读回来就得了。这种方式存在两个问题:一是频繁访问 MySQL 数据库,有一定的风险;二是慢,从界面上来看,从 MySQL 读就不如从 Redis 快。远哥远哥,那咋办呀?教教我吧。我用中指抵着小胖的下吧,说到:傻瓜,我们可以做持久化呀。Redis 的持久化分两种,一种是 AOF,另一种是 RDB。来,坐哥哥腿上,我给你好好说道说道。老规

2021-04-26 00:04:19 166

原创 万字长文,38 图爆肝 Redis 基础!

00 前言Redis 在互联网技术存储方面的使用可以说是非常广泛了,只要是接触过 Java 开发的朋友就算你没用过,都会听过它。在面试也是非常高频的一个知识点。最近,我的的小弟小胖和老王就对 Redis 非常感兴趣;我推荐它一本书《Redis设计与实现》。谁知这货说看不下去,非要我来总结一波。所以本文算是给小胖和老王的学习资料,也是我自己的学习笔记。希望对你有帮助。还是老规矩,先上张脑图。全文 13274 字,从下午 2 点爆肝到晚上 9 点,先上张思维导图镇楼:0.1 往期精彩1、小胖问我:s

2021-04-21 15:11:37 262 5

原创 工作三年,小胖连 HashMap 源码都没读过?真的菜!

00 HashMap 的底层数据结构在 JDK 1.7 中 HashMap 是以数组加链表的形式组成的,JDK 1.8 之后新增了红黑树的组成结构,当链表长度大于 8 并且 hash 桶的容量大于 64 时,链表结构会转换成红黑树结构。所以,它的组成结构如下图所示:HashMap 中数组的每一个元素又称为哈希桶,也就是 key-value 这样的实例。在 Java7 中叫 Entry,Java8 中叫 Node。因为它本身所有的位置都为 null,在 put 插入的时候会根据 key 的 hash.

2021-04-21 15:07:42 103

原创 女朋友问我:什么是 MySQL 的全局锁、表锁、行锁?

01 前言小胖真的让人不省心。继上次小胖误删数据之后,这次这货直接给我把整个表锁住了。页面无响应,用户疯狂投诉,我特么脸都绿了。。。事情是这样的,线上有个数据库几十万的数据,由于一开始没做好规划并没有给热点字段加索引。我就让小胖有空加个索引,没想到这货在用户使用高峰期加。。。知道原因,我还是比较淡定的。毕竟最近都在研究 MySQL,对于 MySQL 锁的问题解决起来还是得心应手。小胖见我三两下就解决了问题,客户也给出了卧槽,牛逼的肯定,忙问我怎么解决的,我点燃手中 82 年的华子深深吸了一口,花了几个

2021-04-19 11:25:50 221

原创 小胖问我:MySQL 事务与 MVCC 原理?

01 什么是事务?数据库事务指的是一组数据操作,事务内的操作要么就是全部成功,要么就是全部失败,什么都不做,其实不是没做,是可能做了一部分但是只要有一步失败,就要回滚所有操作,有点一不做二不休的意思。在 MySQL 中,事务支持是在引擎层实现的。MySQL 是一个支持多引擎的系统,但并不是所有的引擎都支持事务。比如 MySQL 原生的 MyISAM 引擎就不支持事务,这也是 MyISAM 被 InnoDB 取代的重要原因之一。1.1 四大特性原子性(Atomicity):事务开始后所有操作,要么全

2021-04-12 11:28:32 241

原创 《MySQL》系列 - 十张图详解 MySQL 日志(建议收藏)

01 前言事情是这样的,我负责我司的报表系统,小胖是我小弟。某天他手贱误删了一条生产的数据。被用户在群里疯狂投诉质问,火急火燎的跑来问我怎么办。我特么冷汗都出来了,训斥了他一顿:蠢,蠢得都可以进博物馆了,生产的数据能随便动?小胖看我平常笑嘻嘻的,没想到发这么大的火。心一急,居然给我跪下了:远哥,我上有老,下有小,中有女朋友,不要开除我呀。我一听火更大了:合着就你有女朋友???这个时候我们 DBA 老林来打圆场:别慌,年轻人管不住下本身,难免做错事。我可以把数据恢复到一个月内任意时刻的状态。听到这,小胖忙

2021-03-29 13:28:47 512 8

原创 《MySQL》系列 - select 查询语句到底是怎么执行的?

mysql 作为一个关系型数据库,在国内使用应该是最广泛的。也许你司使用 Oracle、Pg 等等,但是大多数互联网公司,比如我司使用得最多的还是 Mysql,重要性不言而喻。事情是这样的,某天我司小胖问我执行select * from table,数据库底层到底发生了啥?从而我们得到数据呢?以下把我给问住了,为此我查阅了大量的书籍、博客。于是就有了这篇文章。假设现在我有张 user 表,只有两列,一列 id 自增的,一列 name 是 varchar 类型。建表语句是这样的:CREATE TABL

2021-03-29 13:26:51 386 6

原创 《MySQL》系列-小胖要的 MySQL 索引详解(附 20 张图解)

mysql 作为一个关系型数据库,在国内使用应该是最广泛的。也许你司使用 Oracle、Pg 等等,但是大多数互联网公司,比如我司使用得最多的还是 Mysql,重要性不言而喻。事情是这样的,上一篇关于 MySQL 基础架构的文章发出以后,有小伙伴说能不能聊聊索引?日常工作中,我们遇到 sql 执行慢的时候,经常会收到这样的建议:“加个索引呗”。索引究竟是啥呢?它为啥能提高执行效率呢?这篇我们来聊聊~01 索引是什么?索引是一种数据结构,它的出现就是为了提高数据查询的效率,就像一本书的目录。想想一本书几

2021-03-16 20:42:36 542

原创 Maven 基础(二) | 解决依赖冲突的正确姿势

一、依赖原则假设,在 JavaMavenService2 模块中,log4j 的版本是 1.2.7,在 JavaMavenService1 模块中,它虽然继承于 JavaMavenService2 模块,但是它排除了在 JavaMavenService2 模块中继承 1.2.7 的版本,自己引入了1.2.9 的 log4j版本。此时,相对于 WebMavenDemo 而言,log4j.1.2....

2020-01-17 11:06:26 285

原创 Java 基础(一)| 使用泛型的正确姿势

前言为跳槽面试做准备,今天开始进入 Java 基础的复习。希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。一、什么是泛型泛型,即“参数化类型”。一提到参数,最熟悉的就是定义方法时有形参,然后调用此方法时传递实参。那么参数化类型怎么理解呢?顾名思义,就是将类型由原来的具体的类型参数化(动词),类似于方法中的变量参数,此时类型也...

2020-01-17 11:02:37 486

原创 Java 基础(二)| 使用 lambad 表达式的正确姿势

前言为跳槽面试做准备,今天开始进入 Java 基础的复习。希望基础不好的同学看完这篇文章,能掌握 lambda 表达式,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。一、什么是 lambda 表达式Java8 是我们使用最广泛的稳定 Java 版本,lambda 就是其中最引人瞩目的新特性。lambda 是一种闭包,它允许把函数当做参数来使用,是面向函数式编程的思想,可以...

2020-01-17 10:17:09 329

原创 Java 基础(三)| IO流之使用 File 类的正确姿势

为跳槽面试做准备,今天开始进入 Java 基础的复习。希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。一、什么是 File 类?java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建、查找和删除等操作。二、File 类的使用2.1 构造方法File 类的构造有三种:public File(Str...

2020-01-17 10:14:35 223

原创 Java 基础(四)| IO 流之使用文件流的正确姿势

为跳槽面试做准备,今天开始进入 Java 基础的复习。希望基础不好的同学看完这篇文章,能掌握泛型,而基础好的同学权当复习,希望看完这篇文章能够起一点你的青涩记忆。一、什么是 IO 流?想象一个场景:我们在电脑上编辑文件,可以保存到硬盘上,也可以拷贝到 U 盘中。那这个看似简单的过程,背后其实是数据的传输。数据的传输,也就是数据的流动。既然是流动也就会有方向,有入方向和出方向。举个上传文件的栗...

2020-01-17 10:13:26 245

原创 Maven 基础(一) | 使用 Maven 的正确姿势

一、什么是 Maven?Maven 是一个项目管理工具,它的本质是一个项目对象模型(POM),体现在配置中就是我们常见的 pom.xml 文件,而这个 pom 文件就是 Maven 的核心,它管理了整个项目的生命周期。它主要做两件事:项目构建:对项目进行编译、打包、测试、部署以及上传到私服仓库等依赖管理:Maven 诞生时就提出了一个仓库的概念,项目中用到的第三方 jar 包,我们在...

2020-01-13 15:45:33 668

原创 Java 项目热部署,节省构建时间的正确姿势

上周末,帮杨小邪(我的大学室友)远程调试项目。SpringBoot 构建,没有热部署,改一下就得重启相关模块。小小的 bug ,搞了我一个多小时,大部分时间都还在构建上(特么,下次得收钱才行)。我跟他说有个热部署插件叫 Jrebel,可以热部署,每次修改完代码需要测试的时候,只要 Build 一下就行?所有 Java 项目都能使用,他居然不知道。作为一个英俊男孩,我不得不写下这篇文章教他使用热部...

2019-12-26 23:18:18 249

原创 【Linux系列】阿里云服务器的使用及安装mysql、tomcat、jdk 三件套

最近很多朋友通过我买了阿里云的服务器,大多是学生,啥也不懂也不知道怎么用。每天微信上一个个问我,浪费我时间。但又不能不帮,谁让我长得帅呢。于是就有了这篇文章。一、配置服务器如下图,点击用户中心如下图,我的已使用过,你们还未使用的提货券,在操作那一列点击使用。选择配置,地域选离你最近的地方,我选的深圳,系统选 centos (搞java一般是这个)、64位、版本 7.7 。完事后立即开...

2019-12-15 01:34:29 415

原创 Spring MVC 复盘 | 工作原理及配置

1、Sping MVC 工作原理旧文提过,不再赘述。请务必通读以下文章:https://mp.weixin.qq.com/s/z-fhmDa9iBwSG6OJx1x5hw2、 IDEA 创建 web 项目项目配置:详细配置见:https://www.cnblogs.com/shuaishuai1993/p/9795227.html3、Spring MVC Hello W...

2019-09-01 19:26:48 182

原创 Spring 复盘(三) | Bean 的生命周期

继续 Spring 复盘,今天看了下 Spring 的 Bean 生命周期。1、典型的 Spring 生命周期在传统的 Java 应用中,bean 的生命周期很简单,使用 Java 关键字 new 进行Bean 的实例化,然后该 Bean 就能够使用了。一旦 bean 不再被使用,则由 Java 自动进行垃圾回收,简直不要太简单。相比之下,Spring 管理 Bean 的生命周期就复杂多了...

2019-09-01 19:25:19 177

原创 Spring 复盘 | AOP

Spring AOP 基础 Java 动态代理实现,阅读文章之前,你最好有以下基础:java动态代理1、什么是 AOP ?AOP(Aspect Oriented Programming),即面向切面编程,它是 OOP(Object Oriented Programming,面向对象编程)的补充和完善。在开发中,功能点通常分为横向关注点和核心关注点,核心关注点就是业务关注的点,大部分是要给用...

2019-08-25 13:55:33 188

原创 Spring 复盘 | IOC

全面进入复习模式,从 Spring 开始。1、关于 SpringSpring 是一个轻量级的开源框架,是为解决企业应用开发的复杂性而创建的。我很不喜欢这种略显官方的说辞。千人千面,每个人对技术的理解都不一样。而在我的理解中,Spring 的主要就解决了两件事情(当然它还解决了数据访问、远程调用、单元测试等问题),分别对应 Spring 的两个设计思想 IOC 和 AOP:IOC 容器(解...

2019-08-25 11:25:12 166

原创 算法 | 遍历二分搜索树

又是来自我的好朋友 EvilSay 的投稿,以下是原文:1、基本定义二分搜索树的每个子节点最多有两个叶子节点二分搜索树的每个节点最多有一个根节点存储的元素必须具有可比较性二分搜索树每个子节点的值大于其左子节的所有节点的值小于其右子节点的所有节点的值二分搜索树不一定是满的2、二分搜索树 Java 实现/** * @Author: EvilSay * @Date: ...

2019-08-18 21:54:08 286

原创 Java 基础 | Object 源码解析

Java 是一门面向对象的语言,在 Java 里面一切都可以看作是一个对象,而 Java 里面所有的对象都默认继承于 Object 类,所以狗哥今天就复习了一遍这个类。上图看出 Object 一共有 12 个方法,其中 registerNatives() 是由 C 语言实现的,这个不在研究范围内。1、getClass/**java * Returns the runtime c...

2019-08-10 19:41:38 176

原创 Java 基础 | Collection 集合概览

​老读者都知道,我是自学转行到 java 的。那时迫于生存压力,学得比较快,很多知识点仅停留在会用的层面。最近,光会用不知道原理,没什么意思。每次使用时都是机械性的 “熟练使用”。加之一直有回归基础的想法,所以想在业余时间复盘 java 的基础知识。知其然知其所以然是技术人的追求。说到复盘基础,并不是所有的都会复盘,没那个时间更没那个必要。比如,一些基础的语法以及条件语句,极度简单。这类是不需...

2019-08-10 14:38:31 170

原创 递归,就是这么简单

什么是递归?维基百科给出了如下定义:程序调用自身的编程技巧称为递归.递归作为一种算法在程序设计语言中广泛应用。上面的说法略显官方。简而言之,递归就是自己调用自己,但是这个调用它是有一定条件的,比如:子问题须与原始问题为同样的事,且更为简单。调用自身的次数不能太多,否则会造成程序堆栈溢出。必须设置递归边界,也就是递归的结束条件,否则递归会无限循环直到程序堆栈溢出。递归与循环的...

2019-08-05 21:31:23 300

原创 推荐两个关于 Java 面试的 Gtihub 项目

哈喽,大家好。相信大家都知道金九银十,在人才市场上是指每年的 9 月和 10 月是企业的招聘高峰期。这个时候企业往往有大量招聘需求,求职者在这个时候就找工作无疑是最适合的。需求大,谈工资什么的就更容易达到你的心理预期。想拿高薪就意味着强实力,企业也不是善堂,也不是傻子,不会平白无故给你高薪的。当然这里面固然有运气成分,但实力绝对是第一位。7 月份马上又要过去了,相信有跳槽想法或刚毕业的朋友都纷...

2019-07-21 13:13:07 557

原创 SpirngBoot | 启动原理 01

一个读者,也是我的好朋友投稿的一篇关于 SpringBoot 启动原理的文章,才大二就如此优秀,未来可期。我一直想了解一下 SpirngBoot 的是如何启动的,我想就来写一篇关于 SpirngBoot 启动分析吧。第一次写那么高深的技术话题理解不到位的话也请多多包涵。源码版本SpinrgBoot 2.0.2众所周知 SpringBoot 的启动类是在一个 main 方法中调用 Spri...

2019-07-20 18:40:46 232

原创 SpringBoot 实战 (二十)| 整合 Redis

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言两个月没更新原创了,实在惭愧。没有借口,就是因为自己懒了。最近看了「刻意学习」,这本书谈的是学习与行动的关系,书中提到了「持续行动」 这个概念,意思就是:我们要去实实在在地去做一些事情,而且是每天都做,才能称之为「持续行动」。看完这本书以后,我意识到我必须要做些什么,那就是写作。Redis 简介Redis 是一个...

2019-07-14 18:36:36 217

原创 java | 什么是动态代理?

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。最近在复习 Java 相关,回顾了下代理模式。代理模式在 Java 领域很多地方都有应用,它分为静态代理和动态代理,其中 Spring AOP 就是动态代理的典型例子。动态代理又分为接口代理和 cglib (子类代理),结合我的理解写了几个 demo 分享给你们,这是昨晚修仙到 3 点写出来的文章,不点在看,我觉得说不过去了。...

2019-05-12 20:05:37 426 1

原创 实用工具 | 推荐 9 个好用的 Chrome 插件

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言最近更新比较佛系,一方面,工作确实有点忙,但是做的都特么旧项目。09 年的代码都出来了,贼特么恶心。感觉待不久了。另一方面,没想好最近有啥要跟大家分享。刚好今天打开 Chrome ,发现自己一直在用的几个很不错的 Chrome 插件,顺手推荐给你们了。1、屏蔽百度推广不知道大家注意到没有,有百度搜索的时候,右侧会有一...

2019-04-21 18:19:19 2031 3

原创 SpringBoot | 是如何实现自动配置的?

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言这个月过去两天了,这篇文章才跟大家见面,最近比较累,大家见谅下。下班后闲着无聊看了下 SpringBoot 中的自动配置,把我的理解跟大家说下。配置文件能写什么?相信接触过 SpringBoot 的朋友都知道 SpringBoot 有各种 starter 依赖,想要什么直接勾选加进来就可以了。想要自定义的时候就直接在...

2019-04-04 09:52:35 265

原创 SpringBoot | SpringBoot 是如何实现日志的?

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言休息日闲着无聊看了下 SpringBoot 中的日志实现,把我的理解跟大家说下。门面模式说到日志框架不得不说门面模式。门面模式,其核心为外部与一个子系统的通信必须通过一个统一的外观对象进行,使得子系统更易于使用。用一张图来表示门面模式的结构为:简单来说,该模式就是把一些复杂的流程封装成一个接口供给外部用户更简单的...

2019-03-24 18:24:14 1354

原创 Java 并发编程的艺术 PDF 下载

封面内容简介并发编程领域的扛鼎之作,作者是阿里和1号店的资深Java技术专家,对并发编程有非常深入的研究,《Java并发编程的艺术》是他们多年一线开发经验的结晶。本书的部分内容在出版早期发表在Java并发编程网和InfoQ等技术社区,得到了非常高的评价。它选取了Java并发编程中核心的技术进行讲解,从JDK源码、JVM、CPU等多角度全面剖析和讲解了Java并发编程的框架、工具、原理和方法,...

2019-03-20 16:48:54 10828 11

原创 SpringBoot | @Value 和 @ConfigurationProperties 的区别

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言最近有跳槽的想法,所以故意复习了下 SpringBoot 的相关知识,复习得比较细。其中有些,我感觉是以前忽略掉的东西,比如 @Value 和 @ConfigurationProperties 的区别 。如何使用定义两个对象,一个学生对象,对应着一个老师对象,代码如下:@ConfigurationProperti...

2019-03-17 21:13:06 413

原创 SpringBoot 填坑 | Shiro 与 Redis 多级缓存问题

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。前言来自不愿意透露姓名的小师弟的投稿。这篇主要讲了,项目中配置了多缓存遇到的坑,以及解决办法。发现问题在一次项目实践中有实现多级缓存其中有已经包括了 Shiro 的 Cache ,本以为开启 redis 的缓存是一件很简单的事情只需要在启动类上加上 @EnableCaching 注解就会启动缓存管理了,但是问题出现了...

2019-03-16 00:50:05 1161

原创 Spring Cloud 与 Docker 微服务架构实战 PDF 下载

微信公众号:一个优秀的废人。如有问题,请后台留言,反正我也不会听。简介本书基于Spring Cloud Edgware RELEASE 与Docker 17.09,以指导技术团队实现微服务架构落地为宗旨,覆盖微服务理论、微服务开发框架(Spring Cloud)及运行平台(Docker)三大主题。全书分为3部分,第1部分对微服务架构进行系统介绍;第2部分使用Spring Cloud 开发框...

2019-03-14 22:31:40 9140 1

空空如也

空空如也

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

TA关注的人

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