自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

lesileqin的博客

桃花影落飞神剑,碧海潮声按玉箫

  • 博客(324)
  • 资源 (8)
  • 收藏
  • 关注

原创 思维导图学《计算机网络》| 超详细 | 持续更新中

文章目录建议下载源文件学习,点击下方连接,0积分下载计算机网络第三章、数据链路层建议下载源文件学习,点击下方连接,0积分下载xmind 2020 下载链接:链接:某度网盘下载链接提取码:csdn数据链路层计算机网络第三章、数据链路层...

2020-11-03 14:48:36 40882 47

原创 思维导图学《计算机组成原理》| 超详细 | 持续更新中

文章目录计算机组成原理第二章、数据的表示和运算计算机组成原理第二章、数据的表示和运算

2020-11-02 17:28:01 39477 7

原创 时序差分算法(Temporal Difference)

文章目录1、时序差分算法2、Sarsa3、Q-Learning基于时序差分的算法不需要事先知道环境的状态转移函数和奖励函数1、时序差分算法时序差分算法是一种用来估计一个策略的价值函数的方法,可以从样本中学习,不需要事先知道环境。蒙特卡洛方法对价值函数的增量更新方式:蒙特卡洛方法需要等到整个序列结束才能计算得到这一次的回报,而时序差分只需要当前步结束就行,它用当前获得的奖励加上下一个状态的价值估计来当作在当前状态会获得的回报:其中Rt+γV(St+1−V(St))R_t + \gamma V

2021-11-27 14:45:02 5890 1

原创 强化学习中的动态规划算法(Dynamic Programming)

文章目录1、动态规划的基本思想是将待求解问题分解成若干子问题,先求解子问题,然后从这些子问题的解得到原问题的解1、

2021-11-26 15:21:05 2424

原创 最优策略(Optimal Policy)及贝尔曼最优方程(Bellman Optimally Equation)

文章目录1、最优策略(Optimal Policy)2、贝尔曼最优方程(Bellman Optimally Equation)3、参考文献1、最优策略(Optimal Policy)强化学习的目标通常是找到一个策略使得它从初始状态出发能获得最多的期望回报。首先定义策略之间的偏序关系:π>π′{\pi} > {\pi}'π>π′,当且仅当对于任意状态 s 都有 Vπ(s)⩾Vπ′(s)V^{\pi}(s)\geqslant V^{\pi'}(s)Vπ(s)⩾Vπ′(s)。在有限状态

2021-11-25 16:46:47 4935

原创 蒙特卡洛方法

文章目录蒙特卡洛方法(Monte-Carlo methods)1)计算π\piπ2)计算状态价值函数参考文献蒙特卡洛方法(Monte-Carlo methods)1)计算π\piπ蒙特卡洛方法也被称为统计模拟方法,是一种基于概率统计的数值计算方法。下面以计算 π\piπ 为例,介绍蒙特卡洛方法:例如在上图的一个边长为2的正方形中又一个圆(暂且不管里面的点),我们可以很轻松的得到:正方形的面积 A1=22=4A_1 = 2^2 = 4A1​=22=4圆的面积 A2=πr2=π12=πA_2

2021-11-25 16:31:48 1916

原创 马尔科夫决策过程

文章目录1、马尔科夫过程(Markov Process)1)随机过程(Stochastic Process)2)马尔科夫性质(Markov Property)3)马尔科夫过程(Markov Process)或被称为马尔科夫链(Markov Chain)2、马尔科夫奖励过程(Markov Reward Process)1)回报(Return)2)价值函数(Value Function)3、马尔科夫决策过程(Markov Decision Process)1)策略(Policy)2)状态价值函数(State-v

2021-11-24 21:39:34 1083

原创 jupyter notebook 适配多个conda虚拟环境

创建环境:conda create -n env_name python=x.x激活环境:conda activate env_name取消激活:conda deactivate env_name之后一直在env_name环境里操作安装ipykernel:conda install ipykernel 安装ipykernel到环境:python -m ipykernel install --user --name env_name --display-name env_name

2021-09-23 21:50:14 331 1

翻译 文献翻译 Review of Single-cell RNA-seq Data Clustering for Cell Type Identification and Characterization

标题:Review of Single-cell RNA-seq Data Clustering for Cell Type Identification and Characterization单细胞RNA-seq数据聚类用于细胞类型鉴定和表征的综述作者: Shixiong Zhanga, Xiangtao Lia, Qiuzhen Linaand Ka-Chun Wonga关键字: Single-cell RNA-seq(单细胞RNA测序) 、Clustering(聚类)、Cell types(细

2021-05-23 00:45:57 1757 4

原创 Hadoop Yarn 概述 | 基础架构 | 工作机制 | 及作业提交全过程

文章目录一、Yarn是什么?二、Yarn基础架构三、Yarn工作机制四、Yarn作业提交全过程1、HDFS、YARN、MapReduce三者关系2、Yarn作业提交过程3、HDFS 与 MapReduce 作业提交过程一、Yarn是什么?在现实生产环境中,大数据处理服务器众多(如下图所示),那么如果管理集群资源、如何给任务合理的分配资源就是个问题,Yarn的作用就是解决这些问题Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程

2021-04-27 09:47:11 277

原创 Hadoop MapReduce 开发总结

Hadoop中的MapReduce是一种编程模型,用于大规模数据集的并行运算该博客是MapReduce开发系列文章总结~标题访问连接MapReduce 概述https://blog.csdn.net/lesileqin/article/details/115725023MapReduce 核心编程思想https://blog.csdn.net/lesileqin/article/details/115726080MapReduce 编程规范 及 常用数据序列化类型

2021-04-21 15:47:01 401 4

原创 Hadoop MapReduce 数据压缩

文章目录一、数据压缩概述二、MapReduce支持的压缩编码1、压缩算法对比介绍2、压缩性能对比三、压缩方式的选择四、压缩位置选择五、压缩参数配置六、压缩案例实操1、Map端采用压缩2、Reduce端采用压缩一、数据压缩概述压缩的好处和坏处:压缩的优点:减少磁盘IO、减少磁盘存储空间压缩的缺点:增加CPU开销压缩原则:运算密集型的Job,少用压缩IO密集型的Job,多用压缩二、MapReduce支持的压缩编码1、压缩算法对比介绍2、压缩性能对比还有一个压缩算法Snappy

2021-04-21 15:24:04 342

原创 Hadoop MapReduce ETL数据清洗 | 案例实操

文章目录一、什么是ETL数据清洗?二、案例实操1、需求分析2、撸代码一、什么是ETL数据清洗?ETL英文名:Extract-Transform-Load,用来讲数据从来源端经过抽取(Extract)、转换(Transform)、加载(Load)至目的端的过程在运行核心业务MapReduce之前,往往要先对数据进行清洗,清理掉不符合用户要求的数据。清理的过程往往只需要运行Mapper呈现,不需要运行Reduce程序二、案例实操1、需求分析需求:去除日志中字段个数小于等于11的日志输入数据(字段

2021-04-21 14:16:04 991

原创 Hadoop MapReduce Join应用 | MapJoin案例实操

文章目录一、ReduceJoin的缺点与MapJoin优点二、实现MapJoin的步骤三、案例实操1、Driver类2、Mapper类一、ReduceJoin的缺点与MapJoin优点在上一篇博客中,使用ReduceJoin完成了对两张表的分析,合并的操作是在Reduce阶段完成的,在集群工作中,ReduceTask的个数会少于MapTask的个数,Reduce端的处理压力太大,Map节点的运算负载则很低,资源利用率不高,且在Reduce阶段极易产生数据倾斜。它的解决方案就是在Map端实现数据合并,

2021-04-21 13:30:44 411

原创 Hadoop MapReduce Join应用 | ReduceJoin案例实操

文章目录一、ReduceJoin 是什么二、ReduceJoin案例分析1、需求分析2、撸代码1)Bean对象2)Mapper3)Reducer一、ReduceJoin 是什么在现实世界,很多事情都是有关联的,这些关联的事务被抽象成数据的话,如果放在一个文件中是很麻烦的,所以人们一般会用多个文件进行存储,Join做的工作就是:把这些相关的文件都关联到一起。现在可能非常抽象,请耐心往下看案例分析Map端主要工作:为来自不通表或文件的k-v键值对,打标签以区别不同来源的记录,用连接字段作为key,其余部

2021-04-20 20:12:03 452

原创 Hadoop MapReduce 内核源码解析 | MapTask与ReduceTask工作机制

文章目录一、MapTask1、MapTask工作机制2、MapTask源码解析二、ReduceTask1、ReduceTask工作机制2、ReduceTask并行度决定机制3、ReduceTask源码解析一、MapTask1、MapTask工作机制Read阶段:MapTask通过InputFormat获得的RecordReader,从输入InputSplit中解析出一个个的k-vMap阶段:该节点主要是将解析出的k-v交给用户编写的map()方法处理,并产生一系列新的k-vCollect收集

2021-04-20 16:07:15 272

原创 Hadoop MapReduce 框架原理 | OutputFormat数据输出 | 案列实操

文章目录一、OutputFormat是做什么的?二、实现自定义OutputFormat的步骤 套路三、案例实操1、需求分析2、撸代码一、OutputFormat是做什么的?OutputFormat可以说是MapReduce处理过程的最后一步,由它负责把输出的信息输送到哪个文件或者哪个数据库,等等OutputFormat是MapReduce输出的基类,所有实现MapReduce输出都实现了OutputFormat接口,下图为OutputFormat的几个常见实现类(请忽略画横线的,那是我自定义的):

2021-04-20 14:39:06 236

原创 Hadoop MapReduce Shuffle机制之Combiner合并 | 水一篇博客

Combiner合并机制Combiner合并也属于Shuffle机制Combiner的父类是ReducerCombiner和Reducer的区别在于运行时的位置Combiner是在每一个MapTask所在的节点运行的Reducer接收全局所有Mapper的输出结果Combiner的意义就是对每一个MapTask的输出进行局部汇总,主要目的是为了减小网络的传输量并不是所有的场景都能适用Combiner,一般主要用于求和操作实现Combiner的步骤就是继承Reducer,最后在Dri

2021-04-19 17:06:26 205

原创 Hadoop MapReduce Shuffle机制之WritableComparable排序 | 案例分析 【图文详解】

文章目录一、WritableComparable排序是什么东西?二、排序分类三、案例分析1、全排序与二次排序1)需求分析2)撸代码2、区内排序(又叫部分排序)1)需求分析2)撸啊撸代码一、WritableComparable排序是什么东西?Map之后、Reduce之前的数据处理过程统称为Shuffle机制WritableComparable排序是Shuffle的一部分功能,它的作用是如果自定义数据类型做为key,则实现该接口,对所需要的字段进行排序。MapReduce规定必须对key进行排序,如

2021-04-19 16:36:27 600

原创 Hadoop MapReduce Shuffle机制之Partition分区 | 及分区案例实操

文章目录一、Partition是个什么东西?二、实现Partition的步骤 套路三、分区案例实操四、分区总结一、Partition是个什么东西?Map之后、Reduce之前的数据处理过程统称为Shuffle机制Partition分区是Shuffle的一部分功能,它的作用是按照条件把结果输出到不同的文件(分区)中。二、实现Partition的步骤 套路三、分区案例实操四、分区总结...

2021-04-19 14:36:23 960

原创 Hadoop MapReduce 框架原理 | InputFormat 数据输入

文章目录一、切片与MapTask并行度决定机制二、Job提交流程三、切片执行流程解析四、FileInputFormat切片机制五、TextInputFormat六、CombineTextInputFormat切片机制一、切片与MapTask并行度决定机制MapTask的并行度决定Map阶段的任务处理并发读,进而影响到整个Job的处理速度,引入两个概念:数据块:Block是HDFS物理上把数据分成一块一块,数据块是HDFS存储数据单位数据切片: 只是在逻辑上对输入进行分片,并不会在磁盘上将其切分成

2021-04-17 20:14:40 786 8

原创 Hadoop MapReduce 序列化 与 序列化案例实操

文章目录一、序列化概述1、什么是序列化2、Java序列化机制与Hadoop序列化的对比3、自定义bean对象实现序列化 套路二、序列化案例实操1、需求分析2、撸代码1)实现序列化2)Mapper、Reducer、Driver编写3)测试一、序列化概述1、什么是序列化序列化就是把内存中的对象,转换成字节序列,然后用户存储到磁盘或网络传输反序列化就是把收到的序列化序列,转换成内存的对象,两者是相反的一方面,因为MapReduce在生产环境中是分布式工作的,那么就避免不了内存中的数据在网络上的传输,使

2021-04-16 21:09:21 776

原创 Hadoop MapReduce WordCount 案例实操 | 源码剖析 | 图文详解

文章目录一、需求分析二、环境准备三、编写程序1、Mapper类1)Mapper源码2)编写Mapper类代码2、Reducer类1)Reducer源码2)编写Reducer类3、Driver类四、测试1、本地测试2、提交到集群并测试一、需求分析统计给定文本中每一个单词出现的个数准备的文本数据:atguigu atguiguss sscls clsjiaobanzhangxuehadoopwtt wtt wzqwzq love wangtiantian期望的输出数据:atgui

2021-04-16 17:47:37 451

原创 Hadoop 图解 MapReduce 编程规范 | 常用数据序列化类型

文章目录一、下载MapReduce的WordCount二、常用数据序列化类型三、MapReduce编程规范1、Mapper阶段2、Reducer阶段3、Driver阶段一、下载MapReduce的WordCount要想了解MapReduce编程规范,直接看一下官方代码是怎么写的就知道了打开shell工具,下载hadoop-mapreduce-examples-3.1.3.jar包,路径是:/opt/module/hadoop-3.1.3/share/hadoop/mapreduce然后下载:

2021-04-15 17:27:30 611

原创 Hadoop MapReduce 核心编程思想

MapReduce核心编程思想拿一个需求来举例说明MapReduce的思想:有个300M的文件,统计每一个单词出现的总次数,要求查询结果a-p的为一个文件,q-z的为一个文件如果拿到现实中,要统计这么多单词并且按照a-p,p-z分区,会拿出两张纸,一张纸记录a-p的、另一张纸记录p-z的,但是300M的文件太大了,自己一个人肯定完不成,所以找来两个人来帮忙,他们都拿出两张纸按照同样的方法进行统计,到最后他们各自会拿出满满的两页纸,上面记录着各个单词,每个单词出现一次就记录为(hadoop->1)这

2021-04-15 16:01:42 223

原创 Hadoop MapReduce 概述

文章目录一、MapReduce学习思维导图二、MapReduce定义三、MapReduce的优缺点1、优点2、缺点一、MapReduce学习思维导图二、MapReduce定义MapReduce是Hadoop的一个分布式(多台机器)运算程序的编程框架,也是Hadoop的核心框架如果让我们用程序实现一个多台机器并发计算的程序,我们可能需要关心到数据传输、如何并发等很多底层的问题,MapReduce为我们提供了一系列的框架,我们可以直接调用MapReduce核心功能是将用户编写的业务逻辑代码和自带默

2021-04-15 14:58:29 640

原创 Hadoop HDFS | DataNode工作机制 | 数据完整性 | 掉线时限参数设置

文章目录一、DataNode工作机制二、数据完整性三、掉线时限参数设置一、DataNode工作机制直接看一张图:它的工作流程是:当DataNode启动后,必须向NameNode汇报自己的块信息,然后定期(6个小时)扫描、上报自己所有块的信息。块信息包括:数据、数据长度、校验和(即数据完整性)、时间戳每个DataNode必须定期向NameNode汇报说:我还活着。这个过程叫做心跳,心跳每三秒一次;如果超过10分钟+30秒 NameNode没有收到DataNode的心跳,就会认为DataNode

2021-04-15 10:34:02 633

原创 Hadoop HDFS | NameNode和SecondaryNameNode的工作机制 | Fsimage和Edits解析 | CheckPoint时间设置

文章目录一、NN和2NN工作机制1、元数据在什么地方?2、NN和2NN的工作机制二、FsImage和Edits解析1、FsImage和Edits文件所处位置2、oiv查看Fsimage文件3、oev查看Edits文件三、CheckPoint时间设置NameNode简称为NN,SecondaryNameNode简称为2NN一、NN和2NN工作机制1、元数据在什么地方?NameNode中有元数据,那么元数据是存在什么地方呢?如果元数据存储在NN的内存中,内存有两个特点就是:不可靠(断电即失)、计算速

2021-04-14 18:04:04 393

原创 Hadoop HDFS 读写流程 | 图文详解

文章目录一、HDFS写数据流程1、文件写入流程2、网络拓扑 - 节点距离计算3、机架感知(副本存储节点选择)二、HDFS读数据流程一、HDFS写数据流程1、文件写入流程下图为文件写入流程剖析图:想要上传一个200M的文件ss.avi到HDFS,它的写入流程是这样的:客户端创建Distributed FileSystem,该模块向HDFS的老大哥NameNode请求上传文件ss.avi老大哥NameNode是个做事很守规矩的人,所以他要检查权限和目录结构是否存在,如果存在就向Distribu

2021-04-14 16:28:17 3649

原创 Spark 快速上手 | WordCount的三种实现方式

文章目录一、搭建开发环境二、体验WordCount1)2)3)三、配置log4j一、搭建开发环境二、体验WordCount1)2)3)三、配置log4j

2021-04-14 14:01:50 509

原创 Spark 概述 | Spark 与 Hadoop的区别

文章目录一、Spark是什么二、Spark的核心模块二、Spark VS Hadoop一、Spark是什么Spark是一个基于内存的快速、通用、可扩展的大数据分析计算引擎二、Spark的核心模块如下图所示,Spark共有以下几个模块:Spark Core:提供了Spark最基础与最核心的功能,Spark其他的功能如:Spark SQL,Spark Streaming,GraphX,MLlib都是在Spark Core的基础上进行扩展的Spark SQL:是用来操作结构化数据的组件。通过S

2021-04-13 13:23:11 540 1

原创 scala 学习笔记(下) | 类和对象、特质

一、类和对象scala是支持面向对象的,也有类和对象的概念,依然可以基于scala语言来开发面向对象的应用程序1、创建类和对象使用class定义一个类使用new来创建对象示例:创建一个Person类,并创建它的对象步骤:在idea中创建一个Scala项目,并创建一个Object添加main方法创建类和对象package com.wzq.scala.oopobject _01ClassObject { class Person { } def main(ar

2021-04-11 15:40:46 240 4

原创 scala 学习笔记(中) | 函数式编程

五、函数式编程使用Spark/Flink的大量业务代码都会使用到函数式编程,都有下面这些操作:遍历(foreach)映射(map)映射扁平化(flatmap)过滤(filter)是否存在(exists)排序(sorted、sortBy、sortWith)分组(groupBy)聚合计算(reduce)折叠(fold)1、遍历 | foreach之前学习过了使用for表达式来遍历集合,使用foreach方法进行遍历、迭代,可以让代码更加简介foreach(f: (A) =>

2021-04-10 16:54:28 256 2

原创 scala 学习笔记(上)| 开发环境安装 | 循环判断 | 数据类型

文章目录一、开发环境安装1、安装JDK2、安装Scala SDK3、安装IDEA Scala插件二、变量1、基本定义2、自动推断3、惰性赋值三、字符串四、数据类型与操作符1、数据类型2、运算符3、scala类型层次结构五、条件表达式1、有返回值的IF2、块表达式六、循环1、for表达式1)简单循环2)嵌套循环3)守卫4)for推导式2、while循环3、break和continue1)实现break2)实现continue七、方法1、定义方法2、返回值类型推断3、方法参数1)默认参数2)带名参数3)变长参数

2021-04-09 18:10:10 130 2

原创 Hadoop HDFS API 操作图文详解及参数解读

文章目录一、使用API的套路二、文件上产三、文件下载可以点击这些文字去学习如何Hadoop搭建客户端API环境在进行下列操作之前,要确保Hadoop集群出于开启状态:一、使用API的套路使用API操作HDFS的套路有三步:获取FileSystem,即执行操作的对象使用FileSystem执行相关的操作释放FileSystem资源下面使用创建文件夹的例子来做使用一下这个套路:首先获取FileSystem对象,因为FileSystem是一个抽象类所以只能get,不能new:获取Fi

2021-04-08 15:23:30 2600 1

原创 Hadoop HDFS 搭建客户端 API 环境 | 图文详解 | 提供依赖下载连接

文章目录一、下载Hadoop客户端环境二、配置Hadoop环境变量三、在IDEA创建Maven工程一、下载Hadoop客户端环境Hadoop客户端环境与所需要微软运行库链接:https://pan.baidu.com/s/1pjDSImaztgGUIOj7dMUTEQ提取码:7qrk二、配置Hadoop环境变量将下载的Hadoop依赖包放在一个非中文且不能有空格存在的路径中!右键单击此电脑=>属性=>高级系统设置=>高级=>环境变量,到如下图所示的界面:点击系统

2021-04-07 15:12:06 3057 6

原创 Hadoop HDFS 常用Shell命令 | 图文详解

文章目录一、命令大全二、上传1、-mkdir 创建文件夹2、-moveFromLocal 从本地剪切粘贴到HDFS3、-copyFromLocal 或 -put从本地复制到HDFS4、-appendToFile 追加一个文件到已存在的文件末尾三、下载-copyToLocal 或 -get 从HDFS拷贝到本地四、HDFS直接操作1、-ls 显示目录信息2、-cat 显示文件内容3、-chgrp、-chmod、-chown 修改文件所属权限4、-cp 或 -mv 从HDFS的一个路径拷贝或移动到HDFS的另一

2021-04-05 17:33:24 3512 3

原创 Hadoop HDFS 概述 | 优缺点 | 组成架构 | 文件块大小

文章目录一、HDFS概述1、HDFS产生背景2、HDFS定义二、HDFS优缺点1、优点2、缺点三、HDFS组成架构1、NameNode(nn)Master主管、管理者2、DataNode NameNode下命令,DataNode实际执行3、Client 客户端4、Secondary NameNode NameNode的秘书。NameNode挂掉,能替换NameNode并提供服务四、HDFS文件块大小 重点一、HDFS概述1、HDFS产生背景随着数据量越来越大,一个操作系统放不下所有的数据,那么就分配

2021-04-05 15:33:37 641 2

原创 Hadoop 编写集群统一启动停止脚本 | 查看所有服务器Java进程脚本

文章目录一、Hadoop集群启停脚本 myhadoop.sh1、编写脚本2、脚本解读3、测试二、查看三台服务器Java进程脚本 jpsall1、编写脚本2、脚本解读3、测试三、脚本分发在配置两个脚本之前,需要配置好ssh免密登陆一、Hadoop集群启停脚本 myhadoop.sh1、编写脚本在用户家目录的bin下,创建脚本myhadoop.sh[wzq@hadoop102 ~]$ cd /home/wzq/bin/[wzq@hadoop102 bin]$ vim myhadoop.sh将

2021-04-04 11:15:10 4027 13

原创 Hadoop 配置历史服务器、日志聚集 | 常用端口号说明

khjjghkj

2021-04-04 10:30:47 1818

h5py官方文档(非常详细的教程)

docs-h5py-org-en-stable.pdf

2021-10-05

Python Matplotlib代码

Python Matplotlib代码

2021-08-08

s41576-018-0088-9.pdf

《单细胞RNA-seq数据集在无监督聚类中的挑战》pdf

2021-05-23

2001.01006.pdf

论文:单细胞RNA-seq数据聚类用于细胞类型鉴定和表征的综述

2021-05-23

jar包反编译工具免费下载

jar包反编译工具免费下载

2021-04-15

数据链路层 | 思维导图 | 超详细

《计算机网络》第三章数据链路层思维导图,呕心沥血自己整理的,图形化、结构化学习更有利于大家深入的理解计算机网络知识。

2020-11-02

数据的表示和运算 | 思维导图

自己整理的《计算机组成原理》第二章数据的表示和运算思维导图!0积分免费下载,希望能帮助大家快速学习计算机组成原理!

2020-11-02

PTA 团体设计天梯赛题解L1(水)

文档包含PTA团体设计天梯赛L1阶段题目的源代码,都是自己练习时候写的。(水)!!

2019-01-23

空空如也

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

TA关注的人

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