自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(43)
  • 资源 (18)
  • 收藏
  • 关注

原创 【深入理解JVM】垃圾收集器&内存分配策略

那么虚拟机要进行GC的时候,就不会管这些已经运行到安全区域的线程,当线程要脱离安全区域的时候,要自己检查系统是否已经完成了GC或者根节点枚举(这个跟GC的算法有关系),如果完成了就继续执行,如果未完成,它就必须等待收到可以安全离开安全区域的Safe Region的信号为止。简单解释一下,当线程1,线程2 是两个十分耗时的循环,并且根据HotSpot放置安全点的位置来说,上一段代码是典型的 counted loop(可数循环),也就是说每次循环回跳前是不会放置安全点的。所以这里就引入了安全点的概念。

2023-01-11 15:31:26 360 1

原创 【深入理解JVM】内存模型

局部变量表所需要的内存空间在编译期完成分配,当进入一个方法时,这个方法需要在栈帧中分配多大的局部变量空间是完全确定的,在方法运行期间不会改变局部变量表的大小(大小指的是变量槽的数量,一个变量槽32个比特、64个比特或者更多完全由具体的虚拟机实现)。在java虚拟机的概念模型里,字节码解释器工作时就是通过改变这个计数器的值来选取下一条需要执行的字节码指令,它是程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都需要依赖这个计数器来完成。不过局部变量表用的是索引,操作数栈是弹栈/压栈来访问。

2023-01-10 11:56:36 290

原创 mysql笔记(二)- InnoDB数据页结构

Innodb设计了不同类型的页结构,存放表空间头部信息的页、存放change buffer信息的页、存放inode信息的页、存放undo redo日志信息的页;今天我们了解存放记录信息的页(数据页也叫索引页)数据页页结构总览名称描述filer header页的一些通用信息page header数据页专有的一些信息infimum + supremum两个虚拟的记录user records用户存储的记录内容free space页中尚未使用的空间.

2022-01-16 19:30:37 365

原创 mysql笔记(一)- InnoDB记录存储结构

InnoDB是以页为单位在内存和磁盘之间交互,页的大小16k,16384字节,那么一页能存放多少条记录呢?我们首先要了解下记录在磁盘的存储格式,才能计算出一页能够存放多少条。COMPACT行格式除了COMPACT行格式InnoDB还有其他几种行格式REDUNDANT、DYNAMIC、COMPRESSED记录的额外信息变长字段长度列表mysql的一些变长的数据类型:varchar、text等,这些类型的字段长度是多少不固定的,在存储的时候需要把字段的长度也存起来,这样在读取记录的时候才能.

2022-01-02 17:15:09 517

原创 java知识图谱

java锁redis知识框架

2021-04-10 19:06:40 166

原创 SpringBoot配置mysql redis多数据源

多数据源方案Mysql配置多数据源从AbstractRoutingDataSource中需求解决方案配置我们的动态数据源配置两个数据源对象配置切面配置文件Redis多数据源配置文件配置redisTemplate使用Mysql配置多数据源从AbstractRoutingDataSource中需求解决方案 @Override //获取数据库连接 public Connection getConnection() throws SQLException { return determineTarge

2021-01-06 15:10:40 374

原创 pyspark提交任务依赖模块的解决方案

直接提交单个py文件 spark-submit --deploy-mode client --driver-memory 2G --executor-memory 2G --executor-cores 3 --num-executors 3 --properties-file /etc/spark/conf/spark-defaults.conf test.py依赖helper中的代码test.pyfrom helper.util_helper import sub_namedata_

2020-12-01 16:55:37 1324

原创 Flume使用

文章目录一、Flume简介二、Flume角色三、Flume传输过程四、Flume部署及使用4.1、文件配置4.2、案例4.2.1、案例一:监控端口数据4.2.2、案例二:实时读取本地文件到HDFS4.2.3、案例三:实时读取目录文件到HDFS4.2.4、案例四:Flume与Flume之间数据传递:单Flume多Channel、Sink,4.2.5、案例五:Flume与Flume之间数据传递,多Fl...

2019-02-16 22:04:43 444

原创 SparkSQL应用解析

文章目录第1章 Spark SQL概述1.2 RDD vs DataFrames vs DataSet1.2.1 RDD1.2.2 Dataframe1.2.3 Dataset1.2.4 三者的共性1.2.5 三者的区别第2章 执行SparkSQL查询2.1 命令行查询流程2.2 IDEA创建SparkSQL程序第3章 SparkSQL解析3.1 新的起始点SparkSession3.2 创建Da...

2019-02-15 17:01:54 734

原创 SparkCore应用解析

文章目录RDD概念RDD概述什么是RDDRDD的属性1.3 RDD弹性1.4 RDD特点1.4.1 分区1.4.2 只读1.4.3 依赖1.4.4 缓存1.4.5 checkpoint第2章 RDD编程2.1 编程模型2.2 创建RDD2.3 RDD编程2.3.1 Transformation2.3.2 Action2.3.3 数值RDD的统计操作2.3.4 向RDD操作传递函数注意2.3.5 ...

2019-02-14 17:07:23 427

原创 Spark基础解析

文章目录安装【Standalone】2.4 配置Spark【Standalone】2.5 配置Job History Server【Standalone】2.6 配置Spark HA【Standalone】【Yarn】配置Spark【Yarn】执行Spark程序执行第一个spark程序(standalone)执行第一个spark程序(yarn)Spark应用提交启动Spark Shell启动Spa...

2019-02-12 16:35:09 534

原创 hive安装和基本操作(二)

文章目录查询基本查询(Select…From)全表和特定列查询列别名常用函数Limit语句Where语句Like和RLike分组Group By语句Having语句Join语句等值Join表的别名内连接左外连接右外连接满外连接连接谓词中不支持or排序全局排序(Order By)每个MapReduce内部排序(Sort By)分区排序(Distribute By)Cluster By分桶及抽样查询分...

2019-01-25 16:27:24 307

原创 hive安装和基本操作(一)

文章目录hive的基本概念hive的优缺点优点缺点Hive架构原理Hive安装环境准备Hive安装部署将本地文件导入Hive案例MySql安装安装包准备安装MySql服务器安装MySql客户端MySql中user表中主机配置Hive元数据配置到MySql驱动拷贝配置Metastore到MySqlHive常用交互命令Hive其他命令操作Hive常见属性配置Hive数据仓库位置配置查询后信息显示配置H...

2019-01-25 15:22:47 7495 1

原创 HBase的安装和使用

文章目录HBaes介绍1.1、HBase的起源1.2、HBase的角色1.2.1、HMaster1.2.2、RegionServer1.3、HBase的架构HBase部署与使用2.1、部署2.1.1、Zookeeper正常部署2.1.2、Hadoop正常部署2.1.3、HBase的解压2.1.4、HBase的配置文件2.1.5、HBase需要依赖的Jar包2.1.6、HBase软连接Hadoop配...

2019-01-05 12:05:10 473

原创 Kafka环境搭建和实战

Kafka集群部署环境准备集群规划Kafka集群部署Kafka命令行操作Kafka工作流程分析Kafka生产过程分析写入方式分区(Partition)副本(Replication)写入流程Broker 保存消息存储方式存储策略Zookeeper存储结构Kafka消费过程分析消费模型API消费者组消费方式消费者组案例Kafka API实战环境准备Kafka生产者Java API创建生产者创建生产者...

2018-12-29 11:17:45 536

原创 MapReduce

MapReduce框架原理MapReduce工作流程InputFormat数据输入Job提交流程和切片源码详解FileInputFormat切片机制CombineTextInputFormat切片机制InputFormat接口实现类自定义InputFormatMapTask工作机制并行度决定机制MapTask工作机制Shuffle机制Shuffle机制Partition分区WritableCom...

2018-11-23 17:58:50 246

原创 HDFS HA高可用

目录HA概述HDFS-HA工作机制HDFS-HA工作要点HDFS-HA自动故障转移工作机制HDFS-HA集群配置环境准备规划集群配置Zookeeper集群配置HDFS-HA集群启动HDFS-HA集群配置HDFS-HA自动故障转移YARN-HA配置YARN-HA工作机制配置YARN-HA集群HA概述1)所谓HA(high available),即高可用(7*24小时不中断服务)。2)实现高可...

2018-11-21 17:46:35 190 1

原创 Hadoop编译源码

目录前期准备工作jar包安装编译源码常见的问题及解决方案前期准备工作1)CentOS联网配置CentOS能连接外网。Linux虚拟机ping www.baidu.com 是畅通的注意:采用root角色编译,减少文件夹权限出现问题2)jar包准备(hadoop源码、JDK7 、 maven、 ant 、protobuf)(1)hadoop-2.7.2-src.tar.gz(2)jdk...

2018-11-21 14:18:51 142

原创 Hadoop运行环境搭建

目录Hadoop运行环境搭建虚拟机网络模式设置为NAT克隆虚拟机修改为静态ip修改主机名关闭防火墙在opt目录下创建文件安装jdk安装HadoopHadoop运行模式本地运行Hadoop 案例官方grep案例官方wordcount案例伪分布式运行Hadoop案例启动HDFS并运行MapReduce程序YARN上运行MapReduce 程序配置临时文件存储路径配置历史服务器配置日志的聚集配置文件说明...

2018-11-21 11:47:27 1512

原创 mysql高级(四)——锁

表锁(基于MYISAM引擎)读锁 (共享锁)针对同一份数据多个操作同时进行而不会互相影响 当前session 其他session 可以查询当前锁定的表 可以查询被锁定的表 不可以查询其他未被锁定的表 可以查询其他未被锁定的表 不可以更新当前锁定的表,报错 可以更新被锁定的表,但是阻塞 释放读锁 阻塞结束...

2018-09-17 16:21:09 314

原创 mysql高级(三)——sql调优

小表驱动大表 使用in的sql:select * from A where id in (select id from B) 等价于: for select id from B for select * from A where A.id = B.id 当B表的数据小于A表的数据集时,用in 使用exists的sql:select * from A w...

2018-09-16 22:30:41 12141 1

原创 mysql高级(二)——索引实战

上述就是mysql索引失效的各种原因,下面我们来实战 ALTER TABLE tb_user ADD INDEX idx_user_nap(NAME,age,pos);//建立复合索引 带头大哥不能死 前面我们建立了(name,age,pos)的复合索引 可以看出这三种都用到了索引,索引条件越...

2018-09-16 12:40:31 414

原创 mysql高级(一)——索引和explain介绍

什么是索引? 可以理解为排好序的快速查找数据结构 优势: 1.类似大学图书馆建书目索引,提高数据检索的效率,降低数据库的IO成本 2.通过索引对数据进行排序,降低数据排序的成本,降低了CPU的消耗 劣势: 1.实际上索引也是一张表,保存了主键和索引字段,并指向实体表的记录,所以索引也是要占用空间的 2.虽然索引提高了查询速度,但同时却降低了更新表的速...

2018-09-15 17:20:03 577

原创 类文件结构(四)

Class文件是一组以8位字节为基础单位的二进制流,各个数据项严格按照顺序紧凑地排列在Class文件中,中间没有任何分隔符,整个Class文件存储的内容几乎全是程序运行的必要数据,没有空隙存在。当遇到8位字节以上空间的数据项时,则按照高位在前的方式分割成若干个8位字节进行存储。 根据Java虚拟机规范,Class文件格式采用一种类似c语言结构体的伪结构来存储数据,这种伪结构中只有两种数...

2018-09-13 11:50:34 181

原创 jvm性能检测命令(三)

java的自动内存管理归结为:给对象分配内存和回收分配给对象的内存;下面我们来验证在使用Serial / Serial Old收集器下的内存分配和回收策略。对象优先在Eden分配 大多数情况下,对象在新生代Eden区中分配。当Eden区没有足够的空间进行分配时,jvm发起一次Minor GC。 虚拟机提供了-XX:+PrintGCDetails这个收集器日志参数,告诉虚拟机在发生垃圾回收...

2018-09-07 11:41:44 177

原创 垃圾收集算法和垃圾收集器(二)

对象已死吗引用计数算法 : 给对象添加一个引用计数器,每当有一个地方引用它就+1,当引用失效时-1,任何时候当引用计数为0就证明可以被回收了.客观来说,引用计数实现简单,判断效率很高,但是解决不了循环引用的问题 python\actionScript3等一些语言使用引用计数来管理内存,但是jvm没有使用引用计数,原因就是没办法解决循环引用的问题可达性分析算法 : 从一些列成为 ” gc...

2018-09-06 20:30:04 171

原创 Java内存模型和内存泄漏实战(一)

java虚拟机在执行java程序过程中会把它所管理的内存划分为不同的数据区域。有的区域随着虚拟机进程的启动而存在,有些区域则依赖用户线程的启动和结束而简历和销毁。 上图的java运行时数据区,大体分为线程私有区和线程共享区线程私有区程序计数器:一块较小的内存空间,可以看做是当前线程所执行的字节码的行号指示器。字节码解释器工作的时候就是通过改变这个计数器的值来选取下一条需...

2018-09-05 23:21:54 421

原创 mybatis源码 (五) —— mybatis的事务如何被spring管理

要想使用spring的事务,要加入mybatis-spring依赖包 <!-- 引用插件依赖:MyBatis整合Spring --> <dependency> <groupId>org.mybatis</groupId> <artifactId>myba...

2018-08-28 20:04:26 1923

原创 mybatis源码 (四) —— 一级缓存和二级缓存

MyBatis的缓存分为两种一级缓存,一级缓存是SqlSession级别的缓存,对于相同的查询,会从缓存中返回结果而不是查询数据库(也叫本地缓存)默认会启用二级缓存,二级缓存是Mapper级别的缓存,定义在Mapper文件的标签中并需要开启此缓存,默认关闭先看二级缓存:开启 org.apache.ibatis.executor.CachingExecutor#query ...

2018-08-28 17:15:34 149

原创 mybatis源码 (三) —— mapper 动态代理以及select操作

String resource = "com/analyze/mybatis/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(resource);SqlSessionFactory sqlSessionFactory = new SqlSessionFactoryBuilder().buil...

2018-08-28 16:46:33 618

原创 mybatis源码 (二) —— SqlSession的创建

SqlSession session = sqlSessionFactory.openSession();org.apache.ibatis.session.defaults.DefaultSqlSessionFactory#openSession() private SqlSession openSessionFromDataSource(ExecutorType execType...

2018-08-28 15:28:37 314

原创 mybatis源码 (一) —— SqlSessionFactory创建和mapper的解析

这篇主要分析SqlSessionFactory的构建过程,以及mybatis mapper文件的解析 先来看SqlSessionFactory的创建过程String resource = "org/mybatis/example/mybatis-config.xml";InputStream inputStream = Resources.getResourceAsStream(res...

2018-08-28 14:29:00 1777

原创 Netty源码解析(九) —— channel的write操作

io.netty.channel.AbstractChannel#write(java.lang.Object) @Override /** * channel的写操作 */ public ChannelFuture write(Object msg) { //调用pipline的write操作 return pip...

2018-08-27 17:25:11 2456

原创 Netty源码解析(八) —— channel的read操作

客户端channel在建立连接之后会关注read事件,那么read事件在哪触发的呢? NioEventLoop中 /** * 读事件和 accept事件都会经过这里,但是拿到的unsafe对象不同 所以后续执行的read操作也不一样 * NioServerChannel进行accept操作 ...

2018-08-25 14:41:47 20527 1

原创 Netty源码解析(七) —— Pipeline的工作机制

Pipeline是一个由HandlerContext节点构成的双向环形链表,结构如下图,最前面是HeadContext,末尾是TailContext中间是用户自定义的HandlerContext节点 先来看pipLine的构造参数 /** * channelPipLine的默认构造方法 * @param channel */ protect...

2018-08-24 15:43:04 584

原创 Netty源码解析(六) —— 服务端channel如何完成注册

先看ServerBootstrap的继承关系 ServerBootstrap的成员变量 //worker group private volatile EventLoopGroup childGroup; //设置进来的childHandler private volatile ChannelHandler childHandler;Abstra...

2018-08-23 17:19:48 1464

原创 Netty源码解析(五) —— 客户端channel如何完成注册

上一篇我们拿到所有的accept到的channel之后,我们回头看事件通知 还记得io.netty.bootstrap.ServerBootstrap#init服务端启动的时候, ch.eventLoop().execute(new Runnable() { @Override pu...

2018-08-23 14:18:00 556

原创 Netty源码解析(四) —— NioEventLoop处理io

NioEventLoop处理io的一些操作方法io.netty.channel.nio.NioEventLoop#run /** * 启动服务 轮询selector */ @Override protected void run() { for (;;) { try { ...

2018-08-23 14:15:31 1831

原创 Netty源码解析(三) —— NioEventLoop初始化

这节我们来分析NioEventLoop的代码实现,还记得上节在NioEventLoopGroup中我们创建NioEventLoop,下面先看它的继承关系 构造方法 /** * @param parent NioEventLoopGroup * @param executor 线程执行器 每次调用会创建一个name为nioEventLoopGroup-...

2018-08-22 17:31:03 777

原创 Netty源码解析(二) —— NioEventLoopGroup(boss worker线程模型)

Netty的源码里面有example,参照echo demo启动netty服务public final class EchoServer { static final boolean SSL = System.getProperty("ssl") != null; static final int PORT = Integer.parseInt(System.getPrope...

2018-08-22 16:01:37 2745 1

iStat Menus 6.4.dmg

iStat Menus for Mac是一款Mac系统上优秀的系统监视器,能够在系统菜单栏实时监控CPU、GPU、内存、硬盘、网络、温度、电池以及系统时间等,通过iStat Menus 6for Mac我们可以时刻了解自己 Mac 电脑上发生各种情况,比如查看硬件温度,查看即时网速以及查看内存和硬盘使用率等。

2020-06-15

Transmit v5.6.3.dmg

Transmit是一款功能齐全的FTP客户端。兼容FTP,SFTP和TLS/SSL协议,提供比Finder更加迅速的iDisk账户接入。与此同时,用户还可以通过Transmit在任意应用程序中无须下载即可实时编辑文档,方便简洁,一步到位。 除此之外,用户还可以通过Transmit的标签系统同时进行多处连接,简单快捷的获取目录并使用多种功能。 当然,Transmit中还提供如打包下载,同步Mac电脑或服务器和服务器传输等功能,如果你正需要这样一款实用工具,那就快来试试吧!你一定会乐此不彼的。

2020-06-15

Clover Configurator.app.rar 黑苹果efi

Clover 四叶草是一款黑苹果系统引导工具,也称幸运草,黑苹果社区收集发布最新版本,包括PKG安装包、EFI文件夹、IOS后缀Windows版。

2020-03-29

balenaEtcher-Portable-1.5.71黑苹果镜像制作工具

Etcher是一款u盘镜像制作工具,可以将镜像刻录到u盘,只要是可以连接USB,都可以使用,Etcher新版包括SD卡,它可以将isp、img、disk、raw等多种镜像格式,操..

2020-03-29

屏幕亮度调节 黑苹果亮度调节驱动

本教程碍于很多小白安装好黑苹果后不知道怎么弄亮度调节,而百度到一些老大教程...就是亮度无法调节,有亮度滑块,但是拖动的时候亮度不会变化,拖到左边...

2020-03-29

RDM.app 开启HIDPI,黑苹果白苹果通用

开启HIDPI,黑苹果白苹果通用 HiDPI本质上是软件实现的,即:由Mac系统的Hidpi渲染实现,这其实就是Hidpi的由来(用软件的方式实现单位面积内的高密度像素,苹果并不是单纯以分辨率来定义显示器的)。所以,开启Hidpi会增加系统负荷(忽略不计,Air非retina屏的不建议开启,发热量会增加)。在显示器达不到Hidpi渲染的硬件最低要求(分辨率小于2K)的情况下,只好采用暴力的方法(借助Quartz Debug):强制开启,这也是本文采用的方式。请大家在开启Hidpi的时候考虑一下有没有必然强制开启

2020-03-29

windows python-3.6.5-amd64

Python是一种解释型脚本语言,可以应用于以下领域: [2] Web 和 Internet开发 科学计算和统计 人工智能 桌面界面开发 软件开发 后端开发 网络爬虫

2020-03-29

jdk8 windows

JDK8.0是Java虚拟机的最新版本,加入了很多新的特性。Oracle甲骨文公司Oracle公司如期发布了Java 8正式版!现在你就可以下载Java 8正式版了,同期发布的还有JDK 8。JDK8的特性已经基本准备就绪,虽然一些特性还不是特别完善,但开发人员已经开始庆祝这一里程碑事件了。 据官方公告介绍:Java 8是款革命性开发平台,其全面升级现有Java编程模式,带来一项协同开发的JVM、 Java语言以及库。Java 8平台集合生产力、易用性、多语种编程、更高安全性和稳定性等特色。 JDK(Java Development Kit)是整个Java的核心,包括了Java运行环境、Jav

2019-12-15

字节码可视化工具

字节码可视化工具,对于查看十六进制的字节码文件非常方便

2018-09-13

spring ioc+mvc代码

自己实现的spring ioc+mvc框架,具体流程参考的spring,可以加深对spring源码流程的理解

2018-07-18

mongodb v3.2

MongoDB绿色版是一款由C++语言编写基于分布式文件存储的数据库,介于关系数据库和非关系数据库之间的产品,在非关系数据库中功能最为丰富。在高负载的情况下,添加更多的节点,可以保证服务器性能。MongoDB 旨在为WEB应用提供可扩展的高性能数据存储解决方案。MongoDB 将数据存储为一个文档,数据结构由键值(key=>value)对组成,字段值可以包含其他文档,数组及文档数组。

2018-06-13

Sublime Text 3170注册版

Sublime Text 3170是一个代码编辑器,也是HTML和散文先进的文本编辑器。Sublime Text具有漂亮的用户界面和强大的功能,例如代码缩略图,Python的插件,代码段等。还可自定义键绑定,菜单和工具栏。最新版本Sublime Text 3.1 build 3170新增支持Windows 10(8.1)每个显示器DPI的缩放,并全面提高分辨率支持,去除自动检测升级提示,增加自动换行等功能

2018-06-13

sqlyog windows 64位

软件介绍下载地址猜你喜欢用户评论sqlyog是由Webyog公司研发的一款mysql数据库图像化管理工具,它和Navicat for mysql是属于相同类型的数据库编辑和查看工具,它拥有强大的数据库转储功能和编辑功能,可以将数据库保存到sql,同同时可以查找和替换指定内容,并列出全部的匹配标记,让你的数据库管理变得轻松便捷。 而sqlyog 64位破解版是针对于64位版本的操作系统进行数据管理的软件,通过提供软件注册码的方式将软件进行激活使用,免除软件的使用限制,同时在支持64位WIN7及以后版本的系统奠定了完善的兼容性保障,支持创建新的存储过程、函数、表、视图、触发器及事件,在删除及截位数据库功能上也能进行更好的使用,是您数据库图形化工具的不二选择。

2018-06-13

java项目代码生成器

非常好用的代码生成器,最新版,传智播客出品,支持多种代码模板生成,包括前端页面,csdn首发.支持springboot+springdatajpa微服务;ssh+angularjs+bootstrap;ssh+easyui;ssm+dubbox+angularjs等多种模板的代码自动生成,可以极大提高开发效率,秒杀一切单表操作,支持oracle+mysql多数据库,开发人员必备工具,现提供给广大开发人员 选择你的数据库,然后就可以根据字段生成增删改查代码,再配合mybatis逆向工程,一键构站

2018-06-11

zookeeper-3.4.12 linux

zookeeper-3.4.12 linuxzookeeper-3.4.12 linuxzookeeper-3.4.12 linux

2018-06-11

linux 64位 jdk1.7

linux 64位 jdk1.7,使用tar -xvf可以解压文件,配置环境变量即可

2018-06-11

xshell6+xftp6 school免费版

xshell6+xftp6 school免费版 不会提示超过评估期 这个是school免费版的,用来用去还是xshell好用

2018-06-06

windows 64位 jdk1.7

windows 64位 jdk1.7 windows 64位 jdk1.7 windows 64位 jdk1.7

2018-06-04

空空如也

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

TA关注的人

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