09 2021 档案

该文被密码保护。
posted @ 2021-09-29 21:51 秋华 编辑
摘要:1 Atlas概述 Apache Atlas为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队,提供围绕这些数据资产的协作功能。 Atlas的具体功能如下: 元数据分类 支持对元数据进行分类管理,例如个人信息,敏感信息等 元数据检索 阅读全文
posted @ 2021-09-25 10:56 秋华 编辑
该文被密码保护。
posted @ 2021-09-25 10:04 秋华 编辑
该文被密码保护。
posted @ 2021-09-24 23:24 秋华 编辑
该文被密码保护。
posted @ 2021-09-24 23:15 秋华 编辑
该文被密码保护。
posted @ 2021-09-22 22:31 秋华 编辑
该文被密码保护。
posted @ 2021-09-21 23:27 秋华 编辑
该文被密码保护。
posted @ 2021-09-19 23:46 秋华 编辑
该文被密码保护。
posted @ 2021-09-19 22:00 秋华 编辑
该文被密码保护。
posted @ 2021-09-19 18:18 秋华 编辑
该文被密码保护。
posted @ 2021-09-19 14:24 秋华 编辑
该文被密码保护。
posted @ 2021-09-19 14:07 秋华 编辑
摘要:1 Fork/Join 框架简介 Fork/Join 它可以将一个大的任务拆分成多个子任务进行并行处理,最后将子任务结果合并成最后的计算结果,并进行输出。Fork/Join 框架要完成两件事情: 1.任务分割:首先 Fork/Join 框架需要把大的任务分割成足够小的子任务,如果子任务比较大的话还要 阅读全文
posted @ 2021-09-18 00:21 秋华 编辑
摘要:1 线程池简介 线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。 例子: 阅读全文
posted @ 2021-09-18 00:07 秋华 编辑
摘要:1 BlockingQueue 简介 Concurrent 包中,BlockingQueue 很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了 BlockingQueue 家庭中的所有成员,包括他们 阅读全文
posted @ 2021-09-17 23:35 秋华 编辑
摘要:1 读写锁介绍 现实中有这样一种场景:对共享资源有读和写的操作,且写操作没有读操作那么频繁。在没有写操作的时候,多个线程同时读一个资源没有任何问题,所以 应该允许多个线程同时读取共享资源;但是如果一个线程想去写这些共享资源,就不应该允许其他线程对该资源进行读和写的操作了。 针对这种场景,JAVA 的 阅读全文
posted @ 2021-09-17 23:15 秋华 编辑
摘要:1 减少计数 CountDownLatch CountDownLatch 类可以设置一个计数器,然后通过 countDown 方法来进行减 1 的操作,使用 await 方法等待计数器不大于 0,然后继续执行 await 方法 之后的语句。 CountDownLatch 主要有两个方法,当一个或多个 阅读全文
posted @ 2021-09-17 23:11 秋华 编辑
摘要:目前我们学习了有两种创建线程的方法-一种是通过创建 Thread 类,另一种是通过使用 Runnable 创建线程。但是,Runnable 缺少的一项功能是,当线程终止时(即 run()完成时),我们无法使线程返回结果。为了支持此功能,Java 中提供了 Callable 接口。 ==现在我们学习的 阅读全文
posted @ 2021-09-17 23:08 秋华 编辑
摘要:锁的八个问题演示 /** * @Description: 8 锁 * 1 标准访问,先打印短信还是邮件 sendSMS sendEmail 2 停 4 秒在短信方法内,先打印短信还是邮件 sendSMS sendEmail 3 新增普通的 hello 方法,是先打短信还是 hello getHell 阅读全文
posted @ 2021-09-17 23:01 秋华 编辑
摘要:1 Vector Vector 是矢量队列,它是 JDK1.0 版本添加的类。继承于 AbstractList,实现了 List, RandomAccess, Cloneable 这些接口。 Vector 继承了 AbstractList,实现了 List;所以,它是一个队列,支持相关的添加、删除、 阅读全文
posted @ 2021-09-17 22:57 秋华 编辑
摘要:线程间通信的模型有两种:共享内存和消息传递,以下方式都是基本这两种模型来实现的。我们来基本一道面试常见的题目来分析 场景 两个线程,一个线程对当前数值加 1,另一个线程对当前数值减 1,要求用线程间通信 ==问题: A 线程打印 5 次 A,B 线程打印 10 次 B,C 线程打印 15 次 C,按 阅读全文
posted @ 2021-09-17 22:44 秋华 编辑
摘要:1 Synchronized 1.1 Synchronized 关键字回顾 synchronized 是 Java 中的关键字,是一种同步锁。它修饰的对象有以下几种: 1.修饰一个代码块,被修饰的代码块称为同步语句块,其作用的范围是大括号{}括起来的代码,作用的对象是调用这个代码块的对象; 2.修饰 阅读全文
posted @ 2021-09-17 22:40 秋华 编辑
摘要:1 JUC JUC 就是 java.util .concurrent 工具包的简称。 2 进程与线程概念 2.1 进程与线程 进程(Process) 是计算机中的程序关于某数据集合上的一次运行活动,是系统进行资源分配和调度的基本单位,是操作系统结构的基础。 在当代面向线程设计的计算机结构中,进程是线 阅读全文
posted @ 2021-09-17 22:03 秋华 编辑
该文被密码保护。
posted @ 2021-09-17 00:12 秋华 编辑
摘要:class Solution: def isPalindrome(self, head: ListNode) -> bool: vals = [] current_node = head while current_node is not None: vals.append(current_node 阅读全文
posted @ 2021-09-12 20:19 秋华 编辑
摘要:class Solution: def reverseList(self, head: ListNode) -> ListNode: #空链表 if not head: return None #1节点链表 elif not head.next: return head #多节点链表 else: p 阅读全文
posted @ 2021-09-12 20:15 秋华 编辑
摘要:# Definition for singly-linked list. # class ListNode: # def __init__(self, val=0, next=None): # self.val = val # self.next = next class Solution: def 阅读全文
posted @ 2021-09-12 20:09 秋华 编辑
摘要:class Solution: def getIntersectionNode(self, headA: ListNode, headB: ListNode) -> ListNode: a, b = headA, headB while a != b: if a: a = a.next else: 阅读全文
posted @ 2021-09-12 20:06 秋华 编辑
摘要:class Solution: # 归并排序 def sortList(self, head: ListNode) -> ListNode: if not head or not head.next: return head left_end = self.find_mid(head) mid = 阅读全文
posted @ 2021-09-12 20:02 秋华 编辑
摘要:解题思路思路的话就是打牌呗,看到后面比前面大的,在前面一个一个找,找到了就记录下一张牌,然后当前牌放到前面去,前面的pre放到后面去,结束这一次循环。提前用dummy记录,然后利用pre对dummy第一层的操作可以让dummy一直指向最前面的牌 class Solution: def inserti 阅读全文
posted @ 2021-09-12 19:59 秋华 编辑
摘要:1.调库太难了,一些用法比较生僻。不如手写 2.可能面试时候,就是想让手写 3.小建议:(1)head 和 tail是dummy结点。一定要用,不然光check边界就会疯掉(2)类中的函数不是固定的。根据自己的习惯和设计,需要什么功能就写什么功能(3)双向链表中的尽量‘干净’、‘简洁’。本来就是很容 阅读全文
posted @ 2021-09-12 19:58 秋华 编辑
摘要:解题思路 1、快慢指针找中点,等分成左右两个部分2、右半部分逆序3、左右两个部分逐个拼接 class Solution: def reorderList(self, head: ListNode) -> None: """ Do not return anything, modify head in 阅读全文
posted @ 2021-09-12 19:55 秋华 编辑
摘要:class Solution(object): def detectCycle(self, head): fast, slow = head, head while True: if not (fast and fast.next): return fast, slow = fast.next.ne 阅读全文
posted @ 2021-09-12 19:21 秋华 编辑
摘要:给定一个链表,判断链表中是否有环。 如果链表中有某个节点,可以通过连续跟踪 next 指针再次到达,则链表中存在环。 为了表示给定链表中的环,我们使用整数 pos 来表示链表尾连接到链表中的位置(索引从 0 开始)。 如果 pos 是 -1,则在该链表中没有环。注意:pos 不作为参数进行传递,仅仅 阅读全文
posted @ 2021-09-12 19:10 秋华 编辑
摘要:给你一个长度为 n 的链表,每个节点包含一个额外增加的随机指针 random ,该指针可以指向链表中的任何节点或空节点。 构造这个链表的 深拷贝。 深拷贝应该正好由 n 个 全新 节点组成,其中每个新节点的值都设为其对应的原节点的值。新节点的 next 指针和 random 指针也都应指向复制链表中 阅读全文
posted @ 2021-09-12 19:06 秋华 编辑
摘要:给你二叉树的根结点 root ,请你将它展开为一个单链表: 展开后的单链表应该同样使用 TreeNode ,其中 right 子指针指向链表中下一个结点,而左子指针始终为 null 。展开后的单链表应该与二叉树 先序遍历 顺序相同。 # Definition for a binary tree no 阅读全文
posted @ 2021-09-12 18:55 秋华 编辑
摘要:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过 1。 示例: 其实蛮简单的,就是找链表中间节点作为根节点,然后再找中点两边的子链表的中点,一直递归下去直到子链表为空 特例处理:如果head 阅读全文
posted @ 2021-09-12 18:49 秋华 编辑
摘要:给你单链表的头指针 head 和两个整数 left 和 right ,其中 left <= right 。请你反转从位置 left 到位置 right 的链表节点,返回 反转后的链表 。 根据上面的图示,这里说下其中涉及的参数,以及其中反转过程中的步骤: 其中涉及的参数: dummy_node:哑节 阅读全文
posted @ 2021-09-12 18:37 秋华 编辑
摘要:给你一个链表的头节点 head 和一个特定值 x ,请你对链表进行分隔,使得所有 小于 x 的节点都出现在 大于或等于 x 的节点之前。 你应当 保留 两个分区中每个节点的初始相对位置。 这道题最简单的解题方式,就是我们创建两个小链表和大链表。然后循环head,当head.val小于x时,追加到小链 阅读全文
posted @ 2021-09-12 18:31 秋华 编辑
摘要:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除所有重复的元素,使每个元素 只出现一次 。 返回同样按升序排列的结果链表。 思路 标签:链表 指定 cur 指针指向头部 head 当 cur 和 cur.next 的存在为循环结束条件,当二者有一个不存在时说明链表没有去重复的必要 阅读全文
posted @ 2021-09-12 18:20 秋华 编辑
摘要:存在一个按升序排列的链表,给你这个链表的头节点 head ,请你删除链表中所有存在数字重复情况的节点,只保留原始链表中 没有重复出现 的数字。 返回同样按升序排列的结果链表。 提示: 链表中节点数目在范围 [0, 300] 内 -100 <= Node.val <= 100 题目数据保证链表已经按升 阅读全文
posted @ 2021-09-12 18:16 秋华 编辑
摘要:给你一个链表的头节点 head ,旋转链表,将链表每个节点向右移动 k 个位置。 翻译题目 : 就是把原来的链表尾部连上头,然后找倒数第k个点作为新的表头但值得注意的是,当k超过链表长度的时候就相当于链表重置了,所以需要k对节点长度取余 class Solution: def rotateRight 阅读全文
posted @ 2021-09-12 18:12 秋华 编辑
摘要:给定一个链表,两两交换其中相邻的节点,并返回交换后的链表。 你不能只是单纯的改变节点内部的值,而是需要实际的进行节点交换。 输入:head = [1,2,3,4]输出:[2,1,4,3]示例 2: 输入:head = []输出:[]示例 3: 输入:head = [1]输出:[1] 提示: 链表中节 阅读全文
posted @ 2021-09-12 18:08 秋华 编辑
摘要:将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 输入:l1 = [1,2,4], l2 = [1,3,4]输出:[1,1,2,3,4,4]示例 2: 输入:l1 = [], l2 = []输出:[]示例 3: 输入:l1 = [], l2 = [0] 阅读全文
posted @ 2021-09-12 18:03 秋华 编辑
摘要:给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head = [1,2,3,4,5], n = 2输出:[1,2,3,5]示例 2: 输入:head = [1], n = 1输出:[]示例 3: 输入:head = [1,2] 阅读全文
posted @ 2021-09-12 17:54 秋华 编辑
摘要:给你两个 非空 的链表,表示两个非负的整数。它们每位数字都是按照 逆序 的方式存储的,并且每个节点只能存储 一位 数字。 请你将两个数相加,并以相同形式返回一个表示和的链表。 你可以假设除了数字 0 之外,这两个数都不会以 0 开头。 输入:l1 = [2,4,3], l2 = [5,6,4]输出: 阅读全文
posted @ 2021-09-12 17:49 秋华 编辑
该文被密码保护。
posted @ 2021-09-06 22:22 秋华 编辑
该文被密码保护。
posted @ 2021-09-05 13:05 秋华 编辑
该文被密码保护。
posted @ 2021-09-05 12:59 秋华 编辑
摘要:5 Yarn常用命令 Yarn状态的查询,除了可以在hadoop103:8088页面查看外,还可以通过命令操作。常见的命令操作如下所示: 需求:执行WordCount案例,并用Yarn命令查看任务运行情况。 [atguigu@hadoop102 hadoop-3.1.3]$ myhadoop.sh 阅读全文
posted @ 2021-09-05 12:53 秋华 编辑
摘要:1)防火墙没关闭、或者没有启动YARN INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032 2)主机名称配置错误 3)IP地址配置错误 4)ssh没有配置好 5)root用户和atgu 阅读全文
posted @ 2021-09-05 09:48 秋华 编辑
摘要:0 简介 分析: 1)准备3台客户机(关闭防火墙、静态IP、主机名称) 2)安装JDK 3)配置环境变量 4)安装Hadoop 5)配置环境变量 6)配置集群 7)单点启动 8)配置ssh 9)群起并测试集群 1 虚拟机准备 2 编写集群分发脚本xsync 1)scp(secure copy)安全拷 阅读全文
posted @ 2021-09-05 09:45 秋华 编辑
摘要:0 简介 1)Hadoop官方网站:http://hadoop.apache.org/ 2)Hadoop运行模式包括:本地模式、伪分布式模式以及完全分布式模式。 本地模式:单机运行,只是用来演示一下官方案例。生产环境不用。 伪分布式模式:也是单机运行,但是具备Hadoop集群的所有功能,一台服务器模 阅读全文
posted @ 2021-09-05 09:24 秋华 编辑
摘要:3 在hadoop102安装JDK 1)卸载现有JDK 注意:安装JDK前,一定确保提前删除了虚拟机自带的JDK。详细步骤见问文档3.1节中卸载JDK步骤。 2)用XShell传输工具将JDK导入到opt目录下面的software文件夹下面 3)在Linux系统下的opt目录中查看软件包是否导入成功 阅读全文
posted @ 2021-09-05 09:15 秋华 编辑
摘要:1 模板虚拟机环境准备 0)安装模板虚拟机,IP地址192.168.10.100、主机名称hadoop100、内存4G、硬盘50G 1)hadoop100虚拟机配置要求如下(本文Linux系统全部以CentOS-7.5-x86-1804为例) (1)使用yum安装需要虚拟机可以正常上网,yum安装前 阅读全文
posted @ 2021-09-05 08:46 秋华 编辑
摘要:import redis.clients.jedis.Jedis; public class RedisJava { public static void main(String[] args) { //连接本地的 Redis 服务 Jedis jedis = new Jedis("localhos 阅读全文
posted @ 2021-09-04 14:24 秋华 编辑
摘要:1 StoreFile Compaction 由于memstore每次刷写都会生成一个新的HFile,且同一个字段的不同版本(timestamp)和不同类型(Put/Delete)有可能会分布在不同的HFile中,因此查询时需要遍历所有的HFile。为了减少HFile的个数,以及清理掉过期和删除的数 阅读全文
posted @ 2021-09-03 23:36 秋华 编辑
摘要:创建类HBase_DML 1 插入数据 import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.hbase.Cell; import org.apache.hadoop.hbase.HBaseConfiguratio 阅读全文
posted @ 2021-09-03 23:32 秋华 编辑
摘要:1)整体流程 2)Merge细节 读流程 1)Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。 2)访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个R 阅读全文
posted @ 2021-09-03 23:03 秋华 编辑
摘要:1 写流程 写流程: 1)Client先访问zookeeper,获取hbase:meta表位于哪个Region Server。 2)访问对应的Region Server,获取hbase:meta表,根据读请求的namespace:table/rowkey,查询出目标数据位于哪个Region Serv 阅读全文
posted @ 2021-09-03 22:58 秋华 编辑
摘要:1 基本操作 1.1 进入HBase客户端命令行 [atguigu@hadoop102 hbase]$ bin/hbase shell 1.2 查看帮助命令 hbase(main):001:0> help 2 namespace的操作 2.1 查看当前Hbase中有哪些namespace hbase 阅读全文
posted @ 2021-09-03 22:49 秋华 编辑
摘要:第一步:点击Tools–>Deployment–>Configuration 第二步:点击左上角的加号–>Name(随便取个名)–>Type(选择SFTP) 第三步:在Connection模块填以下参数SFTP host:服务器地址Port:默认端口22Root path:要部署项目的根目录 第四步 阅读全文
posted @ 2021-09-03 20:58 秋华 编辑
摘要:前提:运行一个Linux系统,并获得其登录ip地址,拥有一个登录账号。我是在云服务器上有一个虚拟主机,故以其为例说明。没有虚拟主机,也可以在VMware上创建一个Linux主机进行测试。 1 建立SFTP。 在settings界面中,建立一个SFTP服务(安全文件传输)。 输入服务名。 2 登录服务 阅读全文
posted @ 2021-09-03 20:20 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 23:11 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 23:05 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 22:25 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 21:57 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 21:51 秋华 编辑
该文被密码保护。
posted @ 2021-09-02 21:05 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:33 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:31 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:21 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:14 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:12 秋华 编辑
该文被密码保护。
posted @ 2021-09-01 23:09 秋华 编辑
摘要:1 软件下载 软件下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0 2 软件安装 1) 解压软件 将下载的软件解压缩 # 解压缩 tar -zxvf elasticsearch-7.8.0-linux 阅读全文
posted @ 2021-09-01 23:02 秋华 编辑
摘要:1 软件下载 软件下载地址:https://www.elastic.co/cn/downloads/past-releases/elasticsearch-7-8-0 2 软件安装 1) 解压软件 将下载的软件解压缩 # 解压缩 tar -zxvf elasticsearch-7.8.0-linux 阅读全文
posted @ 2021-09-01 22:58 秋华 编辑
摘要:1 部署集群 1) 创建 elasticsearch-cluster 文件夹,在内部复制三个 elasticsearch 服务 2) 修改集群文件目录中每个节点的 config/elasticsearch.yml 配置文件  node-1001 节点  node-1002 节点  node-1 阅读全文
posted @ 2021-09-01 22:50 秋华 编辑
摘要:1 单机 & 集群 单台 Elasticsearch 服务器提供服务,往往都有最大的负载能力,超过这个阈值,服务器性能就会大大降低甚至不可用,所以生产环境中,一般都是运行在指定服务器集群中。除了负载能力,单点服务器也存在其他问题: 单台机器存储容量有限 单服务器容易出现单点故障,无法实现高可用 阅读全文
posted @ 2021-09-01 22:39 秋华 编辑
摘要:1 请求体查询 2 高亮查询 3 聚合查询 package com.atguigu.es.test; import org.apache.http.HttpHost; import org.apache.lucene.search.TotalHits; import org.elasticsearc 阅读全文
posted @ 2021-09-01 22:22 秋华 编辑
摘要:1 新增文档 创建数据模型 package com.atguigu.es.test; public class User { private String name; private String sex; private Integer age; public String getName() { 阅读全文
posted @ 2021-09-01 22:17 秋华 编辑
摘要:ES 服务器正常启动后,可以通过 Java API 客户端对象对 ES 索引进行操作 1 创建索引 package com.atguigu.es.test; import org.apache.http.HttpHost; import org.elasticsearch.client.Reques 阅读全文
posted @ 2021-09-01 22:06 秋华 编辑
摘要:1 创建 Maven 项目 我们在 IDEA 开发工具中创建 Maven 项目(模块也可)ES 修改 pom 文件,增加 Maven 依赖关系 <dependencies> <dependency> <groupId>org.elasticsearch</groupId> <artifactId>e 阅读全文
posted @ 2021-09-01 21:55 秋华 编辑
摘要:13 多字段排序 假定我们想要结合使用 age 和 _score 进行查询,并且匹配的结果首先按照年龄排序,然后 按照相关性得分排序 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search 服务器响应结果: 14 高亮查 阅读全文
posted @ 2021-09-01 20:45 秋华 编辑
摘要:9 组合查询 `bool`把各种其它查询通过`must`(必须 )、`must_not`(必须不)、`should`(应该)的方 式进行组合 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search 服务器响应结果: 10 阅读全文
posted @ 2021-09-01 20:27 秋华 编辑
摘要:5 关键字精确查询 term 查询,精确的关键词匹配查询,不对查询条件进行分词。 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:9200/student/_search 服务器响应结果: 6 多关键字精确查询 terms 查询和 term 查询一样,但 阅读全文
posted @ 2021-09-01 20:10 秋华 编辑
摘要:0 简介 Elasticsearch 提供了基于 JSON 提供完整的查询 DSL 来定义查询 定义数据 : 1 查看文档 查看文档时,需要指明文档的唯一性标识,类似于 MySQL 中数据的主键查询 在 Postman 中,向 ES 服务器发 GET 请求 :http://127.0.0.1:920 阅读全文
posted @ 2021-09-01 19:46 秋华 编辑
摘要:有了索引库,等于有了数据库中的 database。 接下来就需要建索引库(index)中的映射了,类似于数据库(database)中的表结构(table)。创建数据库表需要设置字段名称,类型,长度,约束等;索引库也一样,需要知道这个类型下有哪些字段,每个字段有哪些约束信息,这就叫做映射(mappin 阅读全文
posted @ 2021-09-01 00:12 秋华 编辑
摘要:1 创建文档 索引已经创建好了,接下来我们来创建文档,并添加数据。这里的文档可以类比为关系型数据库中的表数据,添加的数据格式为 JSON 格式 在 Postman 中,向 ES 服务器发 POST 请求 :http://127.0.0.1:9200/shopping/_doc 请求体内容为: 此处发 阅读全文
posted @ 2021-09-01 00:02 秋华 编辑

点击右上角即可分享
微信分享提示