自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(171)
  • 资源 (1)
  • 收藏
  • 关注

原创 【无标题】

科技助力未来提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档文章目录科技助力未来前言一、系泊系统二、geospatial (地理位置)三、 服务商城前言如今智能化软件应有尽有,助力中国和中国市场取得科技霸权,今天我将从以下三个案例分析,揭示智能软件对于智能化生产工作的意义。1.舟山港系泊系统助力中国成为世界航运第一强国2.交友软件:geospatial (地理位置)实现附近的人3.商城小程序助力小超市收入三千万一、系泊系统系泊系统(Mooring Systems)不论

2022-04-05 12:13:57 2741

原创 【无标题】

ServiceMesh架构前言总所周知,Java的技术发展日新月异,每当我们去学习一项新技术时,另一项新技术又如雨后春笋一样拔然而起。在微服务后,ServiceMesh架构进入Java工程师的视野。当软件架构演进至基于Kubernetes实现的微服务时,已经能够相当充分地享受到虚拟化技术发展的红利,如应用能够灵活地扩容缩容、不再畏惧单个服务的崩溃消亡、立足应用系统更高层来管理和编排各服务之间的版本、交互。可是,单纯的Kubernetes仍然不能解决我们面临的所有分布式技术问题,在此前对基于Kube

2022-02-05 17:12:15 205

原创 【无标题】

ConcurrentHashMap的实现原理与使用文章目录ConcurrentHashMap的实现原理与使用前言一、Concurrent HashMap的结构二、初始化1.初始化segments数组2.初始化segmentShift和segmentMask3.初始化每个segment总结前言在并发编程中使用HashMap可能导致程序死循环。在多线程环境下,使用HashMap进行put操作会引起死循环,导致CPU利用率接近100%,所以在并发情况下不能使用HashMap。而使用线程安全的HashTab

2021-12-06 21:52:45 689

原创 【无标题】

北京百度Java中级面试springBeanFactory 和 ApplicationContext 有什么区别BeanFactory 可以理解为含有 bean 集合的工厂类。BeanFactory 包含了种 bean 的定义,以便在接收到客户端请求时将对应的 bean 实例化。BeanFactory 还能在实例化对象的时生成协作类之间的关系。此举将 bean 自身与 bean 客户端的配置中解放出来。BeanFactory 还包含了 bean 生命周期的控制,调用客户端的初始化方法(initia

2021-11-27 21:52:44 243

原创 【无标题】

java.lang.ThreadLocal类详解文章目录java.lang.ThreadLocal类详解前言一、基础概念类声明类方法类构造函数二、使用案例总结前言java.lang.ThreadLocal 类提供线程局部变量,所以ThreadLocal并不是一个Thread,而是Thread的局部变量。很多公司都注重使用java.lang.ThreadLocal 类,因为ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。它通过为每个线程提供一个独立的变量副本解决了变量并发访问的冲突

2021-11-27 16:55:59 336

原创 【无标题】

谷歌力作Guava第一章 Guava环境设置第二章 Guava Optional类第三章 Guava Preconditions类第四章 Guava Ordering类第五章 Guava Objects类第六章 Guava Range类第七章 Guava Throwables类第八章 Guava集合工具第九章 Guava缓存工具第十章 Guava字符串工具第十一章 Guava数学工具文章目录谷歌力作Guava前言第一章 Guava环境设置1.下载Guava存档2.设置Guava环境

2021-11-27 15:10:06 396

原创 【无标题】

记阿里巴巴P6的一次面试文章目录记阿里巴巴P6的一次面试前言面试题目1.自我介绍2.项目情况3.基础模块考察4.算法题前言面试简单,说深很难。面试题目1.自我介绍2.项目情况1> 选择最为熟悉的一到两个项目说明,提及该项目中的难点问题,以及如何针对该项目的开展2> 为什么做这个项目(避免被动安排这个话题)3> 解释项目中遇到的难点是如何攻克,最难的点是什么。3.基础模块考察1> 模块化的好处2> http协议3> HashMap和Concur

2021-11-25 23:38:25 203

原创 【无标题】

FileReader和BufferedReader的区别文章目录FileReader和BufferedReader的区别前言一、FileReader二、BufferedReader总结前言FileReader和BufferedReader都可以去读文件,读内容,但是,filereader只能够去读文件,但是bufferedreader既可以去还可以一行一行地去读文件内容。一、FileReaderFileReader不能一行行读。FileReader fr = null; tr

2021-11-25 10:24:58 143

原创 【无标题】

创建对象文章目录创建对象前言一、用静态工厂方法代替构造器创建对象二、遇到多个构造器参数时要考虑使用构建器总结前言构建对象大有内容。一、用静态工厂方法代替构造器创建对象对于类而言,为了让客户端获取它自身的一个实例,最传统的方法就是提供 个公有的构造器 还有种方法,也应该在每个程序员的工具箱中占有一席之地,类可以提供一个公有的静态工厂方法,它只是一个返回类的实例的静态方法,本条目中所指的静态工厂方法并不直接对应于设计模式中的工厂方法。构造器方法:class People{ String na

2021-11-23 23:20:27 197

原创 【无标题】

减少上下文切换实战文章目录减少上下文切换实战前言实战前言众所周知,有时候并发并不一定比串行更快,很简单,因为并发多线程不可避免会面临线程上下文切换问题。对于正在使用的线程,我们先不管,我们着重去看处于等待状态的线程,今天我们来看一下如何解决等待状态多线程上下切换问题。实战第一步:用jstack命令dump线程信息,看看pid为31227的进程里的线程都在做什么。sudo -u admin /opt/ifeve/java/bin/jstack 31227 > /home/tengfei.

2021-11-22 19:36:48 265

原创 【无标题】

阿里巴巴泛集团P6,P7Java面试(二)文章目录阿里巴巴泛集团P6,P7Java面试(二)前言前言时间的格式化方法定时器用什么做的线程如何退出结束java 有哪些锁?乐观锁 悲观锁 synchronized 可重入锁 读写锁,用过 reentrantlock 吗?reentrantlock 与 synmchronized 的区别ThreadLocal 的使用场景java 的内存模型,垃圾回收机制为什么线程执行要调用 start 而不是直接 run(直接 run,跟普通方法没什么区别,

2021-11-20 16:19:28 334

原创 【无标题】

阿里巴巴泛集团P6,P7Java面试(一)文章目录阿里巴巴泛集团P6,P7Java面试(一)前言前言junit 用法,before,beforeClass,after, afterClass 的执行顺序分布式锁nginx 的请求转发算法,如何配置根据权重转发用 hashmap 实现 redis 有什么问题(死锁,死循环,可用 ConcurrentHashmap)线程的状态线程的阻塞的方式sleep 和 wait 的区别hashmap 的底层实现一万个人抢 100 个红包,如何实现(

2021-11-20 16:15:30 2051

原创 【无标题】

tomcat调优文章目录tomcat调优前言一、JVM 参数调优二、禁用 DNS 查询三、调整线程数其他优化经验利用缓存和压缩采用集群前言tomcat是spring的容器,有很强的的实用性。一、JVM 参数调优-Xms 表示 JVM 初始化堆的大小,-Xmx表示 JVM 堆的最大值。这两个值的大小一般根据需要进行设置。当应用程序需要的内存超出堆的最大值时虚拟机就会提示内存溢出,并且导致应用服务崩溃。因此一般建议堆的最大值设置为可用内存的最大值的 80%。在catalina. bat 中,设置

2021-11-20 16:05:12 1648

原创 【无标题】

Java底层:如何创建对象文章目录Java底层:如何创建对象前言一、单一构造函数二、多构造函数三、JavaBean 方式四、Builder 方式总结前言java中,一说起创建对象,很多人肯定说有new一个对象,反射创建,序列化创建还有clone创建,大家都清楚这些事创建对象的方法,但是我们今天来看一下如何优雅地创建对象,比如利用单一构造函数,多构造函数,JavaBean 方式,Builder 方式创建对象。一、单一构造函数public class Person { // 姓名(必填) pr

2021-11-20 15:36:04 105

原创 【无标题】

如何保证单机保证3w tps 访问量文章目录如何保证单机保证3w tps 访问量前言一、从IO,并行,空间角度二、从请求合并,异步角度总结前言这个问题是个开放性问题,我个人觉得这个问题禁不住去思考,只要一思考,慢慢都会有些思路。一、从IO,并行,空间角度容器比如tomcat的最大并发量也就几千,但是IO大有可为,IO模型使用NOI,能够处理小数据大并发的请求,然后从代码优化上说要尽量并行处理逻辑,以及优化JVM,调整堆大小,减少FullGC,使停顿时间减少,最终使每个请求的处理时间减少。二、

2021-11-20 14:57:19 265

原创 【无标题】

阿里巴巴校招面试集锦文章目录阿里巴巴校招面试集锦前言面试总结Java基础TCP和UDP的区别,TCP为什么是三次握手ArrayList和LinkedList的区别和应用场景Collection集合接口和Map接口的区别Java中异常的分类怎么给List排序Java虚拟机的生命周期及体系结构JVM是如何判定两个 Java 类是相同的类似-Xms、-Xmn这些参数的含义sleep( ) 和 wait( n)、wait( ) 的区别synchronized 关键字ThreadLocal(线程局部变量)框架dub

2021-11-20 12:09:19 225

原创 【无标题】

互联网大厂分布式消息队列面试文章目录互联网大厂分布式消息队列面试前言一、消息队列应用场景1.异步处理2.应用解耦3.流量削锋4.日志处理二、应用场景1.消息通讯2.JMS 消息服务消息模型消息消费编程模型三、 消息队列天团1 Kafka2 RabbitMQ3 ZeroMQ4 ActiveMQ5 Jafka6 MSMQ7 Redis总结前言消息队列中间件是分布式系统中重要的组件,主要解决应用耦合,异步消息,流量削锋等问题。实现高性能,高可用,可伸缩和最终一致性架构。是大型分布式系统不可缺少的中间件。

2021-11-20 11:39:16 170

原创 【无标题】

RESTful登录(基于Spring及Redis的Token鉴权)文章目录RESTful登录(基于Spring及Redis的Token鉴权)前言一、交互过程二、案例分析1.创建实体类2.restful接口总结前言REST (Representational State Transfer) 是一种软件架构风格。它将服务端的信息和功能等所有事物统称为资源,客户端的请求实际就是对资源进行操作,它的主要特点有: - 每一个资源都会对应一个独一无二的 url - 客户端通过 HTTP 的 GET、POST、P

2021-11-18 00:01:07 107

原创 【无标题】

Docker (Nginx)部署前端项目文章目录Docker (Nginx)部署前端项目前言项目部署1.安装 Docker2.在项目根目录创建 Dockerfile 文件3.在项目根目录创建 .dockerignore 文件4.在项目根目录创建 nginx.conf 文件5.构建你的 Docker 镜像6.运行你的 Docker 镜像前言目前部署已经不只是运维的工作,很多程序员也需要自己部署项目。项目部署在 Docker 容器中使用 Nginx 部署你的应用。1.安装 Docker2.在项

2021-11-17 21:06:20 120

原创 【无标题】

PM2来部署nodejs项目文章目录PM2来部署nodejs项目前言一、pm2是什么?特性安装二、命令大全1.安装启动操作2.进程操作前言如果直接通过node app来启动,如果报错了可能直接停在整个运行,supervisor工具感觉只是拿来用作开发环境的。再网上找到pm2.目前似乎最常见的线上部署nodejs项目的有forever,pm2这两种工具。使用场合:supervisor工具是开发环境用。forever工具管理多个站点,每个站点访问量不大,不需要监控。pm2工具网站访问量比较大,需

2021-11-16 23:00:41 94

原创 2021-11-15

字节跳动,阿里巴巴,美团架构设计细则文章目录字节跳动,阿里巴巴,美团架构设计细则前言一、分布式技术栈分布式全局ID策略二、接口幂等性原则三、缓存管理和监控四、异步处理五、流量削峰与资源加锁六、分库分表与事务七、消息系统组件选型微服务架构数据存储八、自动化部署蓝绿部署滚动发布Jenkins集成Docker容器K8S容器管理总结前言现在字节跳动,阿里巴巴,美团架构设计追求集约化,我们来了解一下功能模块集约化的架构。一、分布式技术栈分布式全局ID策略雪花算法生成分布式ID,Twitter公司开源的

2021-11-16 19:07:18 1104

原创 2021-11-16

自定义注解大全文章目录前言一、注解“开卷有益”二、使用步骤1.引入库2.读入数据总结前言官网上称Java 注解用于为 Java 代码提供元数据。作为元数据,注解不直接影响你的代码执行,但也有一些类型的注解实际上可以用于这一目的。Java 注解是从 Java5 开始添加到 Java 的。显然注解是一种元数据,可以将它理解为注释、解释,它为我们在代码中添加信息提供了一种形式化的方法,它用于帮助我们更快捷的写代码。一、注解“开卷有益”示例:pandas 是基于NumPy 的一种工具,该工具是为了解决

2021-11-16 10:48:55 114

原创 2021-11-15

小红书Java 面试文章目录小红书Java 面试面试内容1 自我介绍2 Java 基础static 关键字是用来干什么的,static 修饰的方法里面可以使用非静态的成员变量吗,为什么呢private 修饰的方法是否可以被子类覆盖,覆盖和重载有什么区别进程跟线程的区别Java 中创建线程有几种方式 ,线程有那些状态,线程被中断跟被阻塞有什么区别什么是死锁,JVM 的场景下怎么去发现死锁Java 中有哪些集合类如何权衡使用有序数组还是无序数组Java 垃圾回收的目的是啥,程序中把一个对象的引用直接置为 nu

2021-11-15 23:23:54 700

原创 2021-11-15

K8s - 安装部署Kafka文章目录K8s - 安装部署Kafka前言一、创建 NFS 存储二、创建 ZooKeeper 集群三、创建 Kafka 集群测试前言在 K8s下部署 Kafka 集群,搭建后除了可以从 K8s 内部访问 Kafka 服务,也支持从 K8s 集群外部访问 Kafka 服务。服务的集群部署通常有两种方式:一种是 StatefulSet,另一种是 Service&Deployment。本次我们使用 StatefulSet 方式搭建 ZooKeeper 集群,使用 Se

2021-11-15 23:07:26 1792

原创 2021-11-15

设计模式:策略模式和状态模式对比文章目录设计模式:策略模式和状态模式对比前言一、策略模式二、状态模式总结前言在设计模式中,有很多类似的设计模式。比如之前设计的适配器模式和代理模式,今天我们要分析的策略模式和状态模式也是十分类似的设计模式。提示:以下是本篇文章正文内容,下面案例可供参考一、策略模式策略模式属于对象的行为模式。策略模式中定义算法族,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户端。我们分析一下策略模式的图解:框架代码如下:public cla

2021-11-15 15:50:50 263

原创 2021-11-15

互联网大厂双十一高并发实战文章目录互联网大厂双十一高并发实战前言一、数据库架构设计数据库架构降低只读实例和主实例的延迟提升缓存命中率二、系统调优1.扩容优化2.参数调优三、稳定可用1 .设置超时时间2 . 禁用部分语法3 . 异步清理大表4 . 突发SQL访问控制5 .数据恢复DMS数据追踪控制台克隆实例/库表级别恢复总结前言双十一购物始于2009年,历年的订单创建、支付笔数与交易总额都是成倍增长,这不仅带来许多商业机遇,也给后端技术、架构等各个模块带来技术沉淀。双11为MySQL带来了高并发场景

2021-11-15 13:35:37 1029

原创 2021-11-15

互联网大厂面试:MySQL高可用设计文章目录互联网大厂面试:MySQL高可用设计前言一、数据一致性二、集群架构1.单主多从模式2.多主多从模式三、数据同步与一致性数据同步冲突检测四、适用场景1.弹性复制2.高可用分片3.替代主从复制4.高可用方案五、全面分析框架缺陷事物一致性流监机制1.流控机制的功能2.基本机制3.基本队列4.流控过程总结前言本次实践高可用,是基于MGR上的实践,目前很多互联网公司实践高可用都有一套框架,比如这次阿里就在MGR基础上实践MySQL高可用的,MGR是具备强大的分布式协

2021-11-15 10:37:36 385

原创 2021-11-14

docker 安装 kafka文章目录docker 安装 kafkadocker 安装 kafka1. jar 包部署2.启动 zookeeper3.启动 kafkadocker 安装 kafkakafka 依赖 zookeeper 进行管理所以需要先安装 zookeeper1. jar 包部署docker pull zookeeperdocker pull wurstmeister/kafka2.启动 zookeeperdocker run -d --name zookeeper -

2021-11-14 22:48:43 857

原创 2021-11-14

Apache Pulsar 与 Apache Kafka 消息队列对比文章目录Apache Pulsar 与 Apache Kafka 消息队列对比前言一、pandas是什么?Pulsar 的特性Pulsar 存储架构二、Kafka1.kafka 的好处2.发布与订阅系统总结前言Apahce Pulasr 是一个企业级的发布-订阅消息系统,最初是由雅虎开发,是下一代云原生分布式消息流平台,集消息、存储、轻量化函数式计算为一体,采用计算与存储分离架构设计,支持多租户、持久化存储、多机房跨区域数据复制,

2021-11-14 22:35:37 509

原创 2021-11-14

Java系统宕机之进程闪退文章目录Java系统宕机之进程闪退前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言提示:这里可以添加本文要记录的大概内容:例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。提示:以下是本篇文章正文内容,下面案例可供参考一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):

2021-11-14 22:17:25 731

原创 2021-11-14

生产环境 JVM 内存溢出引发思考文章目录生产环境 JVM 内存溢出引发思考前言一、分析问题二、收集内存溢出Dump文件1.收集dump文件设置 JVM 启动参数使用 jmap 命令收集2.分析 Dump 文件总结前言发生内存泄露,通常情况下是由于代码的原因造成的,一般无法立即对代码进行修复,很容易会发送连锁反应造成应用服务器一台一台接连宕机,故障面积会慢慢扩大,针对此种情况,应快速定位发生内存泄露的原因,将该服务进行降级,避免对其他服务造成影响。最简单的降级方法是根据 F5(Nginx)转发策略,

2021-11-14 20:42:12 311

原创 2021-11-14

PostgreSQL 集群宕机后恢复文章目录PostgreSQL 集群宕机后恢复前言宕机恢复前言公司使用的数据库是PostgreSQL,作为一种免费的数据库,现在广泛应用。前段时间出现了集群中主数据库宕机情况。宕机恢复将宕机 master 中的 recovery.done 修改为 recovery.conf 使其变为从库mv recovery.done recovery.conf启动宕机的数据库pg_ctl start进入 pgpool 激活节点pcp_attach_node -

2021-11-14 19:50:17 406

原创 2021-11-14

大厂出品:Java面试大全文章目录大厂出品:Java面试大全前言一、面试大全JavaOOPJava 集合/泛型Java 异常Java 中的 IO 与 NIOJava 反射Java 序列化多线程 &并发JVMMysqlRedisMemcachedMongoDBSpringSpring BootSpring CloudRabbitMQDubboMyBatisZooKeeper数据结构ElasticsearchKafka微服务Linux二、项目经验高并发系统秒杀架构设计秒杀系统时应该注意的 5 个架构原

2021-11-14 19:15:38 241

原创 2021-11-14

服务集成分库分表文章目录服务集成分库分表前言一、水平分割1、水平分库2、水平分表二、Shard-jdbc 中间件1.架构2.架构特点三、项目案例数据库配置数据库分库策略前言现在互联网公司数据量膨胀,以前的数据库配置已经不能满足需求,现在分库分表已经成为一种潮流。一、水平分割1、水平分库以字段为依据,按照一定策略,将一个库中的数据拆分到多个库中。每个库的结构都一样;数据都不一样;所有库的并集是全量数据。2、水平分表以字段为依据,按照一定策略,将一个表中的数据拆分到多个表中。每个表的结构都一

2021-11-14 15:02:29 110

原创 2021-11-14

阿里巴巴:JVM面试文章目录前言一、JVM基础JVM的整体结构1、类加载器2、运行时数据区3、执行引擎JVM生命周期HotSpot虚拟机二、类加载机制1.类加载加载过程1.加载阶段类加载器2、连接阶段验证准备解析3、初始化阶段2.机制策略双亲委派模式沙箱安全机制三、运行时数据区内存与线程内存空间元数据空间堆空间虚拟机栈程序计数器本地方法栈四、垃圾回收垃圾对象标记1、引用计数法2、可达性分析算法垃圾回收机制1、标记清除算法2、标记整理算法3、复制算法4、分代收集算法前言虚拟机(Virtual Mach

2021-11-14 14:37:51 408

原创 2021-11-14

新技术研究:quarkus文章目录新技术研究:quarkus前言一、pandas是什么?二、使用步骤1.引入库2.读入数据总结前言一、pandas是什么?示例:pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的。二、使用步骤1.引入库代码如下(示例):import numpy as npimport pandas as pdimport matplotlib.pyplot as pltimport seaborn as snsimport warni

2021-11-14 13:16:50 733

原创 2021-11-13

Kafka 服务器宕机文章目录Kafka 服务器宕机前言一、挂机事件二、解决步骤1.登录服务器2.移动目录总结前言现在很多公司工具都分开部署,从而保证安全性。而且如果使用 Docker 安装 Kafka 集群的话,也需要把 Kafka 集群的服务器硬盘分配的大一些,因为很多服务的通信、数据的流转、日志采集的传输等,都是通过 Kafka 消息总线进行的。一、挂机事件公司2019年后,业务量扩大,也更新了之前的消息队列,换成了kafka,所以使用 Docker 安装 Kafka 集群的话,特意叮嘱

2021-11-13 15:54:18 594

原创 2021-11-12

后端接受前端数据的常用注解文章目录后端接受前端数据的常用注解前言一、通过HttpServletRequest接收二、@RequestParam注解三、@PathVariable注解四、@RequestBody注解总结前言有人说java工程师就是spring工程师,也有人说java工程师就是接口工程师,其实都不准确,我个人人外java工程师就是要和数据打交道,那今天我们就来了解一下后端接受前端数据的常用注解。一、通过HttpServletRequest接收并不推荐这种方式,这种方式很麻烦,而且是

2021-11-13 14:59:19 511

原创 2021-11-13

并发编程:ThreadPoolExecutor 类文章目录并发编程:ThreadPoolExecutor 类前言一、线程池是什么?1.线程池类扩展2.创建线程池常用的类3.线程池实例的几种状态4.ThreadPoolExecutor类讲解5 .线程池创建流程6 .线程池执行队列7 .线程池拒绝策略8 .常用方法二、线程池使用步骤1. newCachedThreadPool()2. newFixedThreadPool(int nThreads)总结前言java中创建线程池来创建线程已经成为了一种时尚

2021-11-13 14:28:25 109

原创 2021-11-13

互联网大厂面试文章目录互联网大厂面试前言一、大厂面什么?二、面试详解1.技术考点1.基本功底(Java 基础+算法+数据结构)2.常用技术(Spring 系列+Mybatis+JPA+Redis+MQ+Mysql+ZooKeeper+Docker+k8s 等)3.技术深度(JVM 原理+多线程+中间件+分布式缓存+框架+源码等)4.技术经验(高并发+分布式架构设计+Mysql 数据库性能优化+设计模式+微服务等)2.项目经验商城项目: 微服务+分布式架构设计+高并发场景应对方案+分布式事务场景策略+分布式

2021-11-13 11:53:59 435

自动微分一阶

资源是自动微分,自动微分技术是一种微分技术,在计算导数时能够提高效率,目前c++经常使用重载运算符计算,Python则有专门的Tensor工具。

2019-04-12

空空如也

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

TA关注的人

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