自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 linux下spark安装安装及环境配置

spark单机安装及环境配置安装前准备:安装spark之前必须先下载jdk,并完成jdk的环境配置,hadoop可以选择安装,不安装hadoop,spark也可以正常运行1.首先准备scala安装包,可以再官网上下载scala官网:https://www.scala-lang.org/download/安装scala的版本:scala-intellij-bin-2018.2.12.将scala通过xftp传入linux系统下,存放到/opt目录下3.将spark压缩包解压到指定的soft目录

2020-09-21 14:36:18 1827

原创 Scala中的 match case模式匹配

Scala中提供的match case匹配模式类似于Java中的switch case:1.match case能够处理所有的类型2.match case不需要break,java中的swith case如果没有break称为贯穿现象3.match case 能够生成值下面介绍几种常用的match case 匹配模式:1.基础语法: def abc(x:Int)= { x match { //x为方法传入的参数,即变量 case 1 => x + 10

2020-09-16 16:06:19 1215

原创 scala的数组及集合函数详细总结(详细示例分析)

@[TOC] (目录)三级目录

2020-09-12 12:17:25 1169

原创 Hadoop集群下的Hive安装及配置

首先简单介绍一下Hive:Hive是一个构建在Hadoop之上的数据仓库软件,它可以使已经存储的数据结构化,它提供类似sql的查询语句HiveQL对数据进行分析处理。 Hive将HiveQL语句转换成一系列成MapReduce作业并执行。用户可以很方便的使用命令行和JDBC程序的方式来连接到hive。 目前,Hive除了支持MapReduce计算引擎,还支持Spark和Tez这两中分布式计算引擎。常用于离线批处理。为什么要用Hive?简单来说,Hive主要就是通过写SQL语句来实现Hadoop分布式框

2020-09-05 23:10:08 2275

原创 关于hive函数详情的总结

首先介绍一种在hive中查看所需查看函数的命令:desc function extended FUNCNAME;通过执行上述命令,会显示所查询的该函数的具体详情,包括定义,举例说明等,方便快捷。下面大致介绍hive中所有的函数的总结:关系运算: 1. 等值比较: = 2. 等值比较:<=> 3. 不等值比较: <>和!= 4. 小于比较: < 5. 小于等于比较: <= 6. 大于比较: > 7. 大于等于比较: >=

2020-08-29 22:19:44 212

原创 如何在LINUX下安装并搭建hadoop集群(伪分布式)

前言Hadoop是一个开发和运行处理大规模数据的软件平台,是Appach的一个用java语言实现开源软件框架,实现在大量计算机组成的集群中对海量数据进行分布式计算。Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程度,会决定在大数据技术道路上走多远。本文意在介绍hadoop集群的搭建详细过程,通过安装、配置环境来更清楚地认识hadoop。hadoop环境的搭建过程准备工作:在硬件设备允许的条件下,保证至少在vmware下安装至少三台虚

2020-08-26 23:44:02 727

原创 如何解决搭hadoop集群时datanode数据节点未启动或死节点的问题(爬坑中...)

出现的问题:可以发现,当执行stop-all.sh命令关闭hadoop服务的时候,系统会报找不到datanode去关闭的错误。。因而当我们去浏览器访问“http://主机IP地址: 50070”的时候,Dead Nodes这一栏会显示所有的节点都是死节点…问题分析:1:之前多次将namenode格式化,导致namenode和datanode的clusterID不一致无法启动datanode;因而jps命令发现没有datanode启动,所以去Hadoop的日志文件下查看日志(/opt/hadoop-2.

2020-08-17 01:34:57 4190

原创 关于postman软件删除不干净,重新安装后报错“could not open postman”的解决方法

问题分析:关于删除postman软件后再重新安装该软件时,会报“could not open postman”的错误,会提示你已经安装过了postman,让你换一个版本安装。因为postman重新安装后路径不会被覆盖,因而postman并没有被彻底的删除掉,所以需要我们手动删除路径中的两个文件:解决方案:首先,找到桌面上的postman快捷方式,右击选择“打开文件所在位置”,找到“C:\Users\That’s mine\AppData”目录,注意:此处的“That’s mine”是本机的用户名

2020-08-16 15:02:55 12069 5

原创 Linux系统下jps报process information unavailable的解决办法

本人今天配置hadoop,在查看hadoop服务状态的时候,jps报了process information unavailable的信息,在这里提出解决方案。详情截图:分析缘由:使用jps命令查看java进程,经常出现类似"1850 – process information unavailable",可能有两点原因:1.1850这个PID存在,原因为当前ID为其他用户启动,该用户没有查看权限。2.1850这个PID不存在。解决方案:1.首先使用ps -ef 命令查看该进程是否存在[ro

2020-08-15 00:42:42 812

原创 Linux下如何安装ElasticSearch-head插件

上一篇博客我们已经介绍了如何去安装elasticsearch以及部署集群和相应的配置,为了能更好的看到集群各节点的详细信息,以及应用elasticsearch搜索引擎,通常我们还需要安装相关的head插件。由于head插件本质上还是一个nodejs的工程,因此需要安装node,使用npm来安装依赖的包。(npm可以理解为maven)去官网下载nodejs,https://nodejs.org/en/download/本人下载的压缩包版本是:elasticsearch-head-master.zip以及

2020-08-12 23:44:27 803

原创 Linux下ElasticSearch集群安装与配置

如何在Linux下安装elasticsearch并且配置集群操作前准备事项:1.首先先将三台虚拟机开启,并且要保证三台虚拟机可以互相切换,如果同时要配置多个虚拟机,且每个虚拟机都得开启。主机上的配置:1)首先:在主机根目录下的opt目录下的install和bigdata目录下分别创建一个目录取名为elk,然后打开xftp软件,切换目录至/opt/install/elk ,将elasticsearch-6.2.2.tar.gz 压缩包拖进该目录下,等待解压2)先进入install目录内的elk目

2020-08-10 09:33:50 1096

原创 如何在VMware 中的虚拟机下安装jdk和tomcat以及ping通外网(详图)

接着前面的内容,这里主要介绍如何在虚拟机中安装jdk、数据库、以及tomcat相关软件。首先,安装这些软件的前提是我们虚拟机的外网必须是通的,所以,我们首先得去做相关的设置将外网ping通1.配置外网1.配置IP文件输入命令:vi /etc/sysconfig/network-scripts/ifcfg-ens33进入到IP配置文件中,并按照下图配置,保存并退出。2.配置完成后要重启网络输入命令:systemctl restart network注意:此时在去ping外网前,要确保防火墙是关闭

2020-08-05 00:13:07 958

原创 如何在VMware上新建虚拟机并ping通内网

VMware相较于vbox功能和稳定性要更优些,使用也更为广泛。前面,介绍了如何在vbox上创建虚拟机并完成相关的配置,由于实际我们所用到的虚拟机容器不同,因而,这次再介绍一下如何在VMware软件上安装虚拟机。1.首先下载并安装VMware下载VMware版本:VMware-workstation-full-15.5.1-15018445建议:VMware的安装目录放在磁盘空间较大的盘内,因为后期可能会在VMware中创建多个虚拟机,每个虚拟机都会分配一定大小的磁盘空间,当多个虚拟机同时开启的时候

2020-08-04 23:05:12 1007

原创 js、jquery、json、ajax之间的联系

为了清晰的理解js、jquery、json、ajax之间的联系,做一个简单的梳理1.JavaScriptJavaScript(简称js)是一种主要运行于浏览器中的弱类型的动态脚本语言,可以用来实现网页上的一些高级功能,如数据验证处理、页面动态效果、定时任务、与用户交互、发送/接收服务器端数据等等。简单来说,js是一种脚本语言,主要用于客户端,现在主要用于实现一些网页效果。2.jqueryjquery在javascript基础上优化扩展而来的,简化了javascript复杂的操作,其实jquery是

2020-08-02 20:51:30 201

原创 关于js中的回调函数的理解

1.什么是回调函数?当程序运行时,一般情况下,程序会时常通过API调用库里所预先备好的函数。但是有些库函数却要求应用先传给它一个函数,好在合适的时候调用,以完成目标任务。这个被传入的、后又被调用的函数就称为回调函数。举一个简单的例子:你去房产中介去办理事务,中介找你要你亲朋好友的联系方式,想通过你来获取更多的业务,但是你此时不想告诉他朋友的联系方式,或者你暂时想不起来了,等你想起来了或者愿意给中介联系方式了,你可以再将联系方式告诉他。这里,你考虑清楚后到底给不给中介联系方式,称为回调函数。2.回调函

2020-08-02 19:58:56 225

原创 如何快速的将maven项目打包成jar包并导入至其它maven项目(方法二)

关于如何打jar包和导入该jar包,前面有过详细的介绍,但是这种方法在应用于以下场景的时候可能会不适用:新建一个maven-archetype-webapp类型的maven项目,当我们导入另外一个已经打包好的maven项目jar包时,可能该jar包并没有起作用,所以需要另一种解决方案。方法一:1.首先,我们打开需要被打包的maven工程,点击右边的侧边栏的Maven Projects ->LifeCycle ->双击install注意,此时打好的该工程的jar包默认是放入到maven的本

2020-07-16 11:31:59 3674

原创 IDEA中创建Maven工程以及在Maven中配置Tomcat用来创建Java Web项目的详细步骤

1.IDEA中创建Maven工程1.下载maven首先,我们得下载一个maven;注意,所下载的maven版本建议和idea以及jdk的版本不能相差太多,否则,可能会出现不兼容的情况;下载好解压到你所需要放入得文件夹或磁盘内;2.配置maven1)进入解压后的该maven文件夹内,手动新建一个文件夹,取名为localRepository的本地仓库文件夹,作为后面工程从阿里云镜像仓库拉取所需jar包的存储文件夹注意:该文件夹要与bin目录在同一根目录下2)编辑conf文件夹下的setting

2020-07-15 23:14:13 405

原创 虚拟机下的MYSQL不允许插入中文的解决办法

由于虚拟机下安装的mysql版本不同,在我们插入中文数据的时候会出现数据不显示的情况,下面我们就来解决这一问题。1.进入到mysql中查看当前字符集信息由于我已经设置完成了,所以character_set_server和character_set_database后面的value值是utf8,如果为设置完成,value的值应为latinl,然后进行如下操作2.ctrl+c退出数据库,返回lunix系统3.查找mysql的配置文件的路径,再通过命令:vi /etc/my.cnf编辑配置文件4.在[m

2020-07-12 22:28:50 805

原创 Linux虚拟机下安装MYSQL数据库的详细操作

1.MYSQL数据库的安装过程1.1安装mysql首先,我们还是先运行虚拟机,登录进入,再打开Xshell软件,进入之前所设置的会话中,准备进行MYSQL安装的操作命令。1.查看LUNIX下同下是否存在默认的数据库,如果有,先删除默认的低版本的数据库切换至系统根目录下:cd /输入命令:rpm -qa |grep mariadb2.删除默认的数据库输入命令:yum remove mariadb-libs-5.5.64-1.el7.x86_64输入y,此时出现如下提示,说明删除完成3.

2020-07-05 01:48:47 14418 19

原创 虚拟机LINUX系统下安装JKD(附详细操作过程截图)

1.LUNIX系统下JKD的安装步骤同JAVA一样,在LUNIX下同下我们也需要安装JKD,以及Xshell软件,之后的虚拟机的命令操作我们都可以在Xshell软件里操作,还有Xftp软件。首先,我们需要下载jdk安装包,建议将它保存到之前建好的虚拟机的文件夹下,方便我们查找。接下来我们打开并运行虚拟机,同root账号密码登录1.首先我们打开Xshell软件,点击左上角的文件,新建一个会话用于该虚拟机的命令操作,名称自定义,协议默认为SSH,主机写成之前设置的虚拟机的IP地址,点击左边的用户身份验

2020-07-05 00:58:51 748

原创 虚拟机的安装及静态IP的配置的具体操作(附上详细的操作步骤截图)

1.虚拟机的安装1.1准备工作首先,安装虚拟机之前我们需要用到如下这几个软件,1.Oracle VM VirtualBox2.Xshell3.CentOS-7-x86_64-DVD-1611.iso 压缩包**注意:**因为没个人的电脑配置都不想同,所以可能会出现虚拟机版本与电脑不兼容的情况,此时,旧版本的虚拟机可能无法状上,需要重新下载安装新版本的虚拟机。1.2具体的安装步骤1.在准备工作做好后,首先我们要先打开Oracle VM VirtualBox,会进入到如下界面,因为本人已安装过

2020-07-05 00:10:11 1625

原创 HTML的学习记录:CSS层叠表样式

1CSS1.1什么是CSS?CSS:Cascading Style sheet 层叠样式表。CSS的功能:简单来说,就是改变所有页面的布局和外观1.样式定义如何显示 HTML 元素2.样式通常存储在样式表中3.表现分离的问题4.外部样式表可以极大提高工作效率5.外部样式表通常存储在 CSS 文件中6.多个样式定义可层叠为一个,即复合使用1.2HTML中嵌入CSS的方式1.2.1行内样式语法:<tag style=""></tag>//tag:表示标签的名字

2020-06-28 18:06:20 253

原创 HTML的学习记录:HTML中的标签元素

1、HTML1.1什么是HTML?HTML:(Hyper Text Mark Language)超文本标记语言。是一种用于创建网页的标准标记语言;其实HTML就是网页内容的载体,内容就是网页制作者放在页面上向要永和浏览的信息,可以包括文字、图片、音频、视频等等。HTML语言编辑文件时,文件的扩展名为".html",且该文件可以直接在网页中打开。与java的不同之处:html语言是一种解释执行的语言,即边解释边执行;而java语言是编译执行,即编写完程序代码,并转译后再执行。1.2HTML的标签元

2020-06-28 16:21:09 310

原创 Java的学习记录:charpter11.流

1.1流的概念及使用什么是流?简单来说,流就是一组有序的数据序列(字节数组)。流是个抽象的概念,是对输入输出设备的抽象,Java程序中,对于数据的输入/输出操作都是以“流”的方式进行。设备可以是文件,网络,内存等。流的方向?流具有方向性,至于是输入流还是输出流则是一个相对的概念,一般以程序为参考,如果数据的流向是程序至设备,我们成为输出流,反之我们称为输入流。流的分类?1.根据流的方向分为输入流和输出流:​ 1)输入(读):从外 ->内 XxxinputStream(字节输入流)

2020-06-21 23:47:49 137

原创 Java的学习记录:charpter10.反射机制

1.1反射机制1.1.1反射机制的介绍什么是反射机制?Java反射机制是指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;或者对于任意一个对象,都能够调用它的任意一个方法和属性;这种动态获取的信息以及动态调用对象的方法的功能称为java语言的反射机制。简单来说就是:在程序运行时,动态的解析类的内部信息。包括注解、属性和方法的功能,我们称之为反射机制。例如:一个类有:成员变量、方法、构造方法、包等等信息,利用反射技术可以对一个类进行解剖,把个个组成部分映射成一个个对象。(其实:一个类

2020-06-21 23:04:05 104

原创 Java的学习记录:charpter9.多线程

1.1基本概念在介绍多线程之前我们得先了解一下几个概念:1.程序:是为完成特定任务、用某种语言编写的一组指令的集合。即指一段静态的代码,静态对象。2.进程是程序的一次执行过程,或是处于运行状态的一个应用程序。是一个动态的过程:有它自身的产生、存在和消亡的过程,即生命周期 。3.线程(thread)进程可进一步细化为线程,线程是CPU进行调度的最小单位,是一个程序内部的一条执行路径。注意:1.若一个进程同一时间并行执行多个线程,就是支持多线程的2.线程作为CPU调度和执行的单位,每个线程拥

2020-06-14 19:15:39 104

原创 Java的学习记录:charpter8.异常的捕获与处理

1.1异常概述1.1.1认识异常定义:异常是指在程序运行过程中所发生的不正常的事件(编译过程中的语法错误和逻辑错误不是异常),如所需文件找不到、网络连接不通、或连接中断、算数运算出错(被零除)、数组下标越界、装载一个不存在的类、对null对象操作、类型转换异常等等。异常会中断正在运行的程序。因而,Java提供了异常处理机制,可以由系统来处理程序在运行过程中可能出现的异常事件。1.1.2异常体系结构Java中的异常有很多类型,所有异常类型都是Throwable类的子类,它派生了两个子类**:Err

2020-06-14 18:37:03 173

原创 迭代器Iterator接口的作用及其使用

1. 迭代器Iterator的作用什么是迭代器?迭代器: 可以被next()函数调用并不断返回下一个值的对象称之为迭代器(Iterator)从另一种角度来定义迭代器就是:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。迭代器模式,就是为容器而生。迭代器的作用是什么?1.Iterator对象称为迭代器(设计模式的一种),主要用于遍历Collection 集合中的元素。2.迭代是访问集合元素的一种方式,迭代器是一个能够记住遍历位置的对象,迭代器对象从集合的第一个元素开始访问,

2020-06-06 21:01:39 3898

原创 Java的学习记录:charpter7.集合(ArrayList和LinkedList的区别)

1.集合1.1集合的概述1.java集合框架List , Set, Map都是接口,前两个继承至Collection接口,Map为独立接口。Set接口的实现类:HashSet,LinkedHashSet,TreeSetList接口的实现类:ArrayList,Vector,LinkedListMap接口的实现类:Hashtable,LinkedHashMap,HashMap,TreeMapCollection接口下还有个Queue接口,有PriorityQueue类(来自于网络图片)2.

2020-06-06 20:30:24 172

原创 Idea中如何打jar包并导入该jar包

1.如何在Idea中打jar包在idea中,我们在编写工程的时候经常需要导入本工程外的jar包,那么如何根据自己的需求导入自己之前写好的工程呢?那么此时,我们就需要将需要的工程打包成jar包的形式,再将其导入你需要该jar包的工程就行了。下面介绍如何将工程打包成jar包:1.首先,在Idea界面中点击左上角的File,然后选中Project Structure单击,如下或者,可以直接右上角该按钮2.Project Structure单击之后,进入如下界面:1.选中Project Setting

2020-06-06 19:19:43 995

原创 Java的学习记录:charpter6.面向对象OOP

6.1面向对象什么是面向对象?面向对象:Object Oriented Programming面向过程:Procedure Oriented Programming面向过程:举一个经典的案例:人把大象装进冰箱的问题1.面向过程:强调的是功能行为,将大象放进冰箱具体要怎么做,这个就是过程,考虑怎么做。① 打开冰箱② 把大象装进冰箱③ 把冰箱门关住面向对象:2.面向对象:强调具备了功能的对象,以类/对象为最小单位,考虑谁来做此时站在人的角度来说,人就是上帝视角,人只要指挥冰箱去打开和关

2020-05-31 16:28:31 139

原创 Java的学习记录:数组的基本操作

数组的常用操作1.生成随机长度且不重复的数组public class Test { public static void main(String[] args) { //注意100以内取值范围为0~99,若要是1~100,则为:int num = rand.nextInt(100)+1, // 若想取到0~100,则应该写成int num = rand.nextInt(101); //int num = (int)Math.r

2020-05-31 15:11:04 135

原创 Java的学习记录:charpter5.数组的排序算法——快速排序

5.4找中位数快速排速的算法思想其实就是建立在找中位数的基础上,先确定第一次找到的中位数的位置,此时该中位数的位置直至排序结束都是固定不变的,接着循环在该中位数两侧的一堆数值中找中位数的操作,简单来说,就是先找到第一个中位数,接着重复寻找中位数,直至数组完全有序为止。找找中位数的基本思想:表格示例:在一堆无序的数值中,先假设首位的数值为中位数,即此时该假设中位数的下标为0,此时下标为0的位置也定义为begin,然后从后往前找一个比该中位数小或相等的数值,定义此时该值的下标为end,如果没找到,则e

2020-05-31 14:56:32 109

原创 Java的学习记录:charpter5.数组的排序算法

5.1冒泡排序基本思想冒泡排序是一种简单的排序算法。它重复地走访过要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。类似水中气泡往上升的动作,所以称冒泡排序。算法思路1.比较相邻的元素,如果第一个比第二个大,就交换它们两个;2.对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对,这样在最后的元素应该会是最大的数;3.针对所有的元素重复以上的步骤,除了最后一个;4.重复上面的步骤,直至排序完成;

2020-05-24 22:29:49 135

原创 Java的学习记录:charpter4.数组

4.数组数组是重要的数据结构之一,使用数组可以帮我们快捷的解决很多实际问题。什么是数组?数组是具有相同类型的一组数据的集合。例如:球类的集合——足球、篮球、乒乓球等;电器集合——电视机、空调、洗衣机等。在程序设计中将这些集合称为数组。根据数组的维数将数组分为一维数组、二维数组…4.1一维数组一维数组实质上是一组相同类型数据的线性集合,在程序中需要处理一组数据,或者传递一组数据时,可以应用这种类型的数组。4.1.1一维数组的定义一组类型相同的存储空间的表示。4.1.2一维数组的长度一组可以包

2020-05-24 21:49:08 197

原创 Java的学习记录:charpter3.流程控制结构(下):循环结构

3.流程控制结构3.3循环结构循环语句就是在满足一定条件的情况下反复执行某一个操作,可以解决很多实际问题,使用较为广泛。Java中循环语句有while循环、do-while循环、for循环语句。循环结构的特点是在给定的条件成立时,反复执行一段代码,直到条件不成立,可以把循环分为4个部分,也可以理解为循环必须所有的四要素:1.初始部分:设置循环的初始状态,只执行一次2.循环条件:判断是否继续循环3.循环体:满足循环条件时执行的语句4.迭代部分:即变量值得变化趋势和幅度3.3.1while循

2020-05-24 16:33:47 182

原创 Java的学习记录:charpter3.流程控制结构(上):选择结构

这里写目录标题3.流程控制结构3.1顺序结构三级目录3.2选择结构3.2.1单分支结构3.2.2双分支结构3.2.3多分支结构3.流程控制结构Java语言的复合语句是以整个块区为单位的语句,所以又称语句块。复合语句由开括号**“{”开始,闭括号“}”结束。在定义一个类或方法时,类体或方法体就是以“{}”作为开始与结束的标记,复合语句中的每个语句都是从上到下**被执行的。复合语句以整个块为单位,能够用在任何一个单独语句可以用到的地方,并且在复合语句中还可以嵌套复合语句。Java中有3种流程控制结构:顺序

2020-05-24 14:54:42 216

原创 Java的学习记录:charpter2.Java语言基础

charpt2.Java语言基础2.1Java的基本数据类型2.1.1字符型2.1.2数值类型整数类型:2.1.3浮点(小数)类型2.1.4布尔类型2.1.5基本数据类型之间的转换2.2变量及常量2.2.1标识符和关键字2.2.2变量及常量的声明2.2.3变量的有效范围2.1.4运算符2.1Java的基本数据类型2.1.1字符型1.char型(单字符型)字符类型char用于存储单个字符,占用16位的(两个字节)的内存空间。在定义单字符型变量时,要以单引号表示,如 ‘A’/ ‘字’。使用char关键字

2020-05-17 23:42:39 302

原创 Java的学习记录:chapter1.初识java语言

chapter1.初识java1.1java语言概述1.1.1计算机语言1.1.2java语言1.1.3java环境的搭建1.1java语言概述1.1.1计算机语言*正如人与人之间的交流是靠语言作为媒介的,人与计算机之间的交流也得需要一种工具来实现,我们将这种与计算机交流的工具称为计算机语言。*如果人要与计算机交流,那么就要学习计算机语言。计算机语言有很多种。如:C ,C++,Java,Python,Scala等。计算机语言发展至今主要有三代历程:1.第一代语言:计算机语言发展初始阶段是以二进制

2020-05-17 02:45:54 680

空空如也

空空如也

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

TA关注的人

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