- 博客(176)
- 资源 (49)
- 收藏
- 关注
转载 美团技术团队 Quartz应用与集群原理分析
美团技术团队 Quartz应用与集群原理分析原文地址:http://www.icartype.com/?p=140一、问题背景美团CRM系统中每天有大量的后台任务需要调度执行,如构建索引、统计报表、周期同步数据等等,要求任务调度系统具备高可用性、负载均衡特性,可以管理并监控任务的执行流程,以保证任务的正确执行。二、历史方案美团CRM系统的任务调度模块经历了以下历史方案。1. Crontab+SQL每天晚上运行定时任务,通过SQL脚本+crontab方式执行,例如,#crm0 2 *
2018-03-21 14:40:24 1489
转载 使用 Redis 搭建电商秒杀系统
使用 Redis 搭建电商秒杀系统原文:https://help.aliyun.com/document_detail/63920.html 背景秒杀活动是绝大部分电商选择的低价促销、推广品牌的方式。不仅可以给平台带来用户量,还可以提高平台知名度。一个好的秒杀系统,可以提高平台系统的稳定性和公平性,获得更好的用户体验,提升平台的口碑,从而提升秒杀活动的最大价值。本文讨论云数据库 Redis 版缓存设计高并发的秒杀系统。秒杀的特征秒杀活动对稀缺或者特价的商品进行定时定量售卖,吸引成大量
2018-03-01 15:56:59 5507
转载 Spark性能优化:shuffle调优
Spark性能优化:shuffle调优 原文地址:https://www.iteblog.com/archives/1672.html《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spark性能优化:shuffle调优》文章目录1 shuffle调优1.1 调优概述1.2 ShuffleManager发展概述1.3 HashShuffle
2018-01-19 16:25:00 1842
转载 Spark性能优化:数据倾斜调优
Spark性能优化:数据倾斜调优 原文地址:https://www.iteblog.com/archives/1671.html《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spark性能优化:shuffle调优》文章目录1 前言2 数据倾斜调优2.1 调优概述2.2 数据倾斜发生时的现象2.3 数据倾斜发生的原理2.4 如何定位导致数据
2018-01-19 16:19:04 768
转载 Spark性能优化:资源调优篇
Spark性能优化:资源调优篇 原文地址:https://www.iteblog.com/archives/1659.html《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spark性能优化:shuffle调优》 在开发完Spark作业之后,就该为作业配置合适的资源了。Spark的资源参数,基本都可以在spark-submit命令中作为
2018-01-19 16:00:44 947
转载 Spark性能优化:开发调优篇
Spark性能优化:开发调优篇《Spark性能优化:开发调优篇》《Spark性能优化:资源调优篇》《Spark性能优化:数据倾斜调优》《Spark性能优化:shuffle调优》 在大数据计算领域,Spark已经成为了越来越流行、越来越受欢迎的计算平台之一。Spark的功能涵盖了大数据领域的离线批处理、SQL类处理、流式/实时计算、机器学习、图计算等各种不同类型的计算操作,应用范围与前景非常广泛。 然而,通过Spark开发出高性能的大数据计算作业,并不是那么简单的。如果没有对Spark作业进
2018-01-19 15:43:24 807
转载 JDK7与JDK8中HashMap的实现
原文:https://my.oschina.net/hosee/blog/618953JDK7中的HashMapHashMap底层维护一个数组,数组中的每一项都是一个Entrytransient Entry[] table;我们向 HashMap 中所放置的对象实际上是存储在该数组当中; 而Map中的key,value则以Entry的形式存放在数组中static class EntryK,V> i
2018-01-18 20:47:11 393
转载 JDK1.7与JDK1.8中ConcurrentHashMap原理总结
原文:https://my.oschina.net/hosee/blog/675884并发编程实践中,ConcurrentHashMap是一个经常被使用的数据结构,相比于Hashtable以及Collections.synchronizedMap(),ConcurrentHashMap在线程安全的基础上提供了更好的写并发能力,但同时降低了对读一致性的要求(这点好像CAP理论啊 O(∩_∩)O)。ConcurrentHashMap的设计与实现非常精巧,大量的利用了volatile,final,CAS等loc
2018-01-18 20:37:10 2264
转载 Kafka深度解析
原文链接 http://www.jasongj.com/2015/01/02/Kafka深度解析背景介绍Kafka简介 Kafka是一种分布式的,基于发布/订阅的消息系统。主要设计目标如下:以时间复杂度为O(1)的方式提供消息持久化能力,即使对TB级以上数据也能保证常数时间的访问性能高吞吐率。即使在非常廉价的商用机器上也能做到单机支持每秒100K条消息的传输支持Kafka Server间的消息分区,及分布式消费,同时保证每个partition内的消息顺序传输同时支持离线数据处理和实时数据处
2018-01-02 10:37:45 510
原创 八.SpringBoot集成实例系列-持久化jpa
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-12-04 15:13:54 3239
转载 SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势
SQL优化:一篇文章说清楚Oracle Hint的正确使用姿势作者介绍韩锋,宜信技术研发中心数据库架构师。精通多种关系型数据库,曾任职于当当网、TOM在线等公司,曾任多家公司首席DBA、数据库架构师等职,多年一线数据库架构、设计、开发经验。著有《SQL优化最佳实践》一书。原文地址:http://dbaplus.cn/news-10-669-1.html 一、提示(Hint)概述 1为什么引入Hint? Hint是Oracle数据库中很有特色的一个功能,是很多DBA优化中经常采用的一个手段
2017-11-14 11:00:26 632
原创 SpringMVC+Spring+mybatis+redis项目从零开始--Springmvc配置实现
一、SSM项目-Springmvc配置实现上几章我们简单介绍了SSM项目工程结构、SSM相关配置和集成Redis实现等,本章将实现Springmvc等相关配置,同时通过简单的文件上传、图片上传等实例。1. Springmvc简介Spring Web MVC是一种基于Java的实现了Web MVC设计模式的请求驱动类型的轻量级Web框架,即使用了MVC架构模式的思想,将web层进
2017-10-19 14:58:41 9204 3
原创 SpringMVC+Spring+mybatis+redis项目从零开始--redis缓存策略和配置实现
三.SSM项目-redis缓存策略和配置实现 距离上两篇文章已过去蛮久了,为了响应各位网友的需求,最近把这个系列重新整理下。如有不足之处,请指正。本章将实现redis缓存策略和Spring集成redis配置。1. Redis简单介绍redis是一个key-value存储系统。和Memcached类似,它支持存储的value类型相对更多,包括string(字符串)、list(链表)、set(集合)、zset(sortedset --有序集合)和hash(哈希类型)。这些数据类型都支持pu
2017-10-19 14:34:21 26634 12
转载 缓存更新的套路
原文地址:https://coolshell.cn/articles/17416.html?spm=5176.100239.0.0.wgNzgk看到好些人在写更新缓存数据代码时,先删除缓存,然后再更新数据库,而后续的操作会把数据再装载的缓存中。然而,这个是逻辑是错误的。试想,两个并发操作,一个是更新操作,另一个是查询操作,更新操作删除缓存后,查询操作没有命中缓存,先把老数据读出来后放到缓存中,然后更新操作更新了数据库。于是,在缓存中的数据还是老的数据,导致缓存中的数据是脏的,而且还一直这样脏下去了。
2017-10-16 18:31:43 602
原创 七.SpringBoot集成实例系列-多数据源mongodb+lombok(二)
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-10-15 11:10:13 5026
原创 七.SpringBoot集成实例系列-多数据源mongodb(一)
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-10-14 14:15:58 15171 1
原创 六.SpringBoot集成实例系列-单数据源mongodb(权限控制)
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-09-13 17:47:14 2326
原创 Oracle goldengate 实现mysql到kafka同步配置
一.oracle goldengate技术架构Oracle GoldenGate 实现原理是通过抽取源端的redo log 或者 archive log ,然后通过TCP/IP投递到目标端,最后解析还原应用到目标端,使目标端实现 同源端数据同步。图1-1 是Oracle GoldenGate 的技术架构。其中target接受的容器包含:kafka,hbase,hdfs,关系数据库等.二. 准备在实现oracle goldengate 同步配置前,小求认为你已安装了一下环境1. jdk配置
2017-08-18 10:17:57 5028 2
原创 五.SpringBoot集成实例系列-邮件email文章列表
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-07-29 16:43:10 3522
原创 四.SpringBoot集成实例系列-注解型多数据源mybatis
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-07-18 19:59:43 3164
原创 三.SpringBoot集成实例系列-注解型单数据源mybatis
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五
2017-07-18 19:15:10 1307
原创 spring-sparkstreaming-kafka10集成实现和疑难杂症解决
一.前期准备1.开发环境window7eclipsejdk1.82.linux环境zookeeper-3.4.8hadoop-2.6.4spark-1.6.0scala-2.10.6kafka_2.10-0.10.1.0各环境的安装和部署请自行准备。二.疑难杂症1. spark+scala+kafka版本要一致2. org.apache.sp
2017-07-10 19:54:30 7589 12
原创 二.SpringBoot集成实例系列-xml型多数据源mybatis
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:SpringBoot集成实例系列-xml型单数据源mybatisSpringBoot集成实例系列-xml型多数据源mybatisSpringBoot集
2017-07-02 11:05:03 3346 1
原创 一. SpringBoot集成实例系列-xml型单数据源mybatis
文章列表本系列将通过实例分别实现Springboot集成mybatis(mysql),mail,mongodb,cassandra,scheduler,redis,kafka,shiro,websocket。具体文章系列如下:一.SpringBoot集成实例系列-xml型单数据源mybatis二.SpringBoot集成实例系列-xml型多数据源mybatis三.SpringBoot集成实例系列-注解型单数据源mybatis四.SpringBoot集成实例系列-注解型多数据源mybatis五.
2017-07-02 11:04:40 1994
原创 springboot配置文件大全
springboot配置文件详解# LOGGINGlogging.config= # Location of the logging configuration file. For instance `classpath:logback.xml` for Logbacklogging.exception-conversion-word=%wEx # Conversion word used when logging exceptions.logging.file= # Log file name.
2017-06-29 16:27:34 3844
原创 ORACLE实现Job定时计划任务
在ORACLE数据库操作中,有时候我们需要定时的执行某些存储过程。那oracle如何实现呢?从ORACLE 10.1版本开始,ORACLE开发了一个新的包DBMS_SCHEDULER。这个包就能帮解决我们的定时计划任务的问题。一. 新增job1. job创建实例BEGIN DBMS_SCHEDULER.CREATE_JOB(JOB_NAME => 'JOB_EXWH_BPARTNER_STATIC', JOB_TYPE => 'PLSQ
2017-06-29 15:05:12 1410
原创 Springboot+Mybatis+Maven+Oracle+Cassandra+事务(Aop)+定时任务实现
本文将通过示例介绍Springboot,mybatis,maven,oracle,cassandra,事务,定时任务等框架的集成,因此业务不会复杂,供学习使用。一.基础知识1. SpringbootSpring Boot是由Pivotal团队提供的全新框架,其设计目的是用来简化新Spring应用的初始搭建以及开发过程。该框架使用了特定的方式来进行配置,从而使开发人员不再需要定义样板化的配置。通过这种方式,Spring Boot致力于在蓬勃发展的快速应用开发领域(rapid application
2017-06-09 12:51:10 4001
转载 资深架构师教你一篇文看懂Hadoop
作者:陈 飚“昔我十年前,与君始相识”一瞬间Hadoop也到了要初中择校的年龄了。十年前还没有Hadoop,几年前国内IT圈里还不知道什么是Hadoop,而现在几乎所有大型企业的IT系统中有已经有了Hadoop的集群在运行了各式各样的任务。2006年项目成立的一开始,“Hadoop”这个单词只代表了两个组件——HDFS和MapReduce。到现在的10个年头,这个单词代表的是“核心”(即Core Hadoop项目)以及与之相关的一个不断成长的生态系统。这个和Linux非常类似,都是由一个核心和一个生态
2017-06-01 16:23:41 4756
原创 Spark Streaming+kafka订单实时统计实现
前几篇文章我们分别学习Spark RDD和PairRDD编程,本文小编将通过简单实例来加深对RDD的理解。一.前期准备开发环境:window7+eclipse+jdk1.7部署环境:linux+zookeeper+kafka+hadoop+spark本实例开发之前,默认已搭好了开发环境和部署环境,如果未搭建,可以参考本人相关大数据开发搭建博客。二.概念理解Spark Streaming 是Spark核心API的一个扩展,可以实现高吞吐量的、具备容错机制的实时流数据的处理。支持从多种数据源获取数据
2017-06-01 08:50:29 12044 3
原创 完美解决Spark应用日志级别设置
最近在研究Spark的相关知识,本地搭建了一个开发环境Windows7+Eclipse+JDK1.7。一. 日志效率原因开发时,控制台输出一大堆日志信息,严重影响查看日志效率。从控制台输出日志我们可以看出,应用程序是默认加载Spark-core包下面的log4j-defaults.properties日志文件。查看log4j-defaults.properties文件由上图可知,Spark-core包设置默认的日志级别为info,所以我们才看到一大堆日志信i息。那针对以上问题,在开发过程中我
2017-06-01 08:50:10 41507 4
原创 linux中sqoop实现hive数据导入到mysql
上一篇文章我们简单的介绍《http://blog.csdn.net/a123demi/article/details/72742553》,本文将简单介绍如何通过sqoop把hive数据导入到mysql。一. 前期准备实践本文内容,默认您已经安装和部署了hadoop,mysql,hive,sqoop等环境。如相关安装和部署有问题,可以参考《http://blog.csdn.net/a123demi/article/details/72742553》。二. sqoop实现hdfs文件导出2.1 hi
2017-06-01 08:48:21 10316
原创 linux中sqoop部署以及实现mysql数据导入hive
Sqoop(发音:skup)是一款开源的工具,主要用于在Hadoop(Hive)与传统的数据库(mysql、postgresql...)间进行数据的传递,可以将一个关系型数据库(例如 : MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。Sqoop项目开始于2009年,最早是作为Hadoop的一个第三方模块存在,后来为了让使用者能够快速部署,也为了让开发人员能够更快速的迭代开发,Sqoop独立成为一个Apache项目。下
2017-05-25 19:42:48 2449
原创 linux中hive安装和部署详解
一.前期准备1.1 hadoop版本:Hadoop 2.6.5安装:http://blog.csdn.net/a123demi/article/details/706529591.2 mysql版本:5.6.33 MySQL Community Server (GPL)1.3 mysql驱动包版本:mysql-connector-java-5.1.40-bin.jar1.4 hive安装包官网下载:apache-hive-2.1.1-bin.tar.gz二.hive安装2
2017-05-25 19:30:49 21396 2
转载 Apache kafka 工作原理介绍
消息队列消息队列技术是分布式应用间交换信息的一种技术。消息队列可驻留在内存或磁盘上, 队列存储消息直到它们被应用程序读走。通过消息队列,应用程序可独立地执行--它们不需要知道彼此的位置、或在继续执行前不需要等待接收程序接收此消息。在分布式计算环境中,为了集成分布式应用,开发者需要对异构网络环境下的分布式应用提供有效的通信手段。为了管理需要共享的信息,对应用提供公共的信息交换机制是重要的。常用的消息队列技术是 Message Queue。Message Queue 的通讯模式点对点通讯:点对点方式是最为
2017-05-24 09:22:42 796
原创 linux集成 kafka数据通过flume发送到hadoop
上一篇文章《 linux安装flume和集成kafka测试》,我们介绍了flume安装和集成数据到kafka,本篇文章我们将集成kafka,flume,hadoop,通过flume发送kafka数据到hadoop的hdfs文件。一.前期准备1.1 hadoop安装版本:Hadoop 2.6.5安装: linux hadoop完全分布式集群搭建图文详解1.2 zookeeper安装版本:zookeeper-3.4.9安装: linux zookeeper3.4.9集群搭建图文详解1.3
2017-05-23 16:08:23 4065
原创 linux安装flume和集成kafka测试
一.前期准备1.1 kafka+zookeeper集群环境以安装1.2 下载flume本文使用flume1.7下载地址:http://flume.apache.org/download.html二.配置flume2.1 上传flume#上传下载包至/opt/softwarecd /opt/softwarerz apache-flume-1.7.0-bin.tar.gz#解压tar -zxvf apache-flume-1.7.0-bin.tar.gz#复制apache-flume-1
2017-05-23 11:31:55 4401 1
原创 Spark学习—PairRDD编程
PairRDD:键值对RDD,其是Spark中转化操作常用的数据类型。上一篇文件《》我们就使用了PairRDD。PairRDD是很多程序的构成要素,因为他提供了并行操作或跨节点重新进行数据分组的操作接口。本文将结合Java示例讲解PairRDD相关接口操作。PairRDD创建 很多存储键值对的数据格式会在读取时直接返回其键值对数据组成的pair RDD,同时也可以调用map()函数来实现,传递的函数需要返回键值对。 对应Java创建PairRDD,由于Java没有自带的二元组类型,因此Spark的J
2017-05-16 13:29:22 2973
原创 Spark学习—统计文件单词出现次数
上一节我们简单介绍了RDD中转化和执行操作的用法,本节将通过一个具体的示例来加深对RDD的认识。一.需求统计本地文件中单词出现次数二.操作流程1.读取外部文件创建JavaRDD;2.通过flatMap转化操作切分字符串,获取单词新JavaRDD;3.通过mapToPair,以key为单词,value统一为1的键值JavaPairRDD;4.通过reduceByKey,累计叠加每个key,统计单词出现次数;三.代码实现四.下载代码代码地址:http://downlo
2017-05-12 11:36:26 7652 2
原创 Spark学习—RDD编程
RDD:弹性分布式数据集(ResilientDistributed Dataset),是Spark对数据的核心抽象。RDD其实是分布式的元素集合。当Spark对数据操作和转换时,会自动将RDD中的数据分发到集群,并将操作并行化执行。 Spark中的RDD是一个不可变的分布式对象集合。每个RDD都倍分为多个分区,这些分区运行在集群中的不同节点。RDD可以包含Python、Java、Scala中任意类型的对象,甚至可以包含用户自定义对象,本文主要通过Java实现相关示例。 Spark程序或shell会话
2017-05-09 14:13:41 4844
原创 大数据处理为何选择Spark,而不是Hadoop
一.基础知识1.SparkSpark是一个用来实现快速而通用的集群计算的平台。在速度方面,Spark扩展了广泛使用的MapReduce计算模型,而且高效地支持更多计算模式,包括交互式查询和流处理。Spark项目包含多个紧密集成的组件。Spark的核心是一个对由很多计算任务组成的、运行在多个工作机器或者是一个计算集群上的应用进行调度、分发以及监控的计算引擎。Spark的各个组件2.HadoopHadoop是一个由Apache基金会所开发的分布式系统基础架构。用户可以在不了解分布
2017-05-04 16:32:11 6530
maven-archetype-quickstart-1.1包
2015-12-05
Spring mvc+mybatis+maven+velocity+mysql整合实例
2015-01-26
jackson实现实体类与json互转实例(包含日期格式)
2015-01-25
Maven利用Java service wrapper生成Windows服务
2015-01-23
Bmob移动后端云服务平台--Android从零开始--(三)Bmob数据操作((批量)增删改)
2014-12-24
Bmob移动后端云服务平台--Android从零开始--(二)android快速入门
2014-12-21
Android 自定义ListView实现底部分页刷新与顶部下拉刷新
2014-11-11
Android 实现自定义多级树控件和全选与反选的效果
2014-11-01
Android 实例实现自定义Camera和前后置摄像头切换以及图片缩小放大预览
2014-10-12
Android 实例讲解添加本地图片和调用系统拍照图片
2014-10-12
Android ViewPager实现圆点导航左右滑动和Fragment页面切换
2014-09-22
Android 利用ViewPager实现类微信的左右滑动效果
2014-09-19
Android 实例讲解 Spinner样式修改
2014-09-17
Android 实现用户列表信息滑动删除功能和选择删除功能
2014-08-13
Android 利用TimerTask实现ImageView图片播放效果
2014-08-10
Android 利用ExpandableListView显示和查询仿QQ分组列表用户信息
2014-07-11
Android 自定义preference组件
2014-06-29
Android Preference组件使用
2014-06-28
开涛高可用高并发-亿级流量核心技术
2018-03-22
SSM框架web项目从零开始(spring mybatis mysql redis) 系列源码下载
2017-10-19
Springboot+Mybatis+Maven+Oracle+Cassandra+事务(Aop)+定时任务实现
2017-06-09
Spark学习---统计文件单词出现次数
2017-05-12
Spark学习--RDD编码
2017-05-09
SSM框架web项目从零开始---Spring mybatis mysql配置实现
2017-01-19
微信小程序--计算器demo
2017-01-12
Spring 实现远程访问详解——jms和activemq
2016-04-21
Spring 实现远程访问详解——webservice
2016-04-19
Spring 实现远程访问详解——httpclient
2016-04-19
Spring 实现远程访问详解——httpinvoker
2016-04-19
Spring 实现远程访问详解——rmi
2016-04-18
Sigar 使用详解
2016-02-18
maven-archetype-quickstart-1.1架包
2015-12-05
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人