自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 阶段九模块二 kafka

内容输出来源:拉钩教育Java就业训练营1 消息队列1.1 什么是消息队列消息队列是一种帮助开发人员解决系统间异步通信的中间件,常用于解决系统解耦和请求的削峰平谷的问题。我们可以把消息队列比作是一个存放消息的容器,当我们需要使用消息的时候可以取出消息供自己使用。消息队列是分布式系统中重要的组件,使用消息队列主要是为了通过异步处理提高系统性能和削峰、降低系统耦合性。队列 Queue 是一种先进先出的数据结构,所以消费消息时也是按照顺序来消费的。比如生产者发送消息1,2,3…对于消费者就会按照1,2,3

2021-06-07 21:47:57 190 3

原创 阶段九模块二 ElasticSearch

内容输出来源:拉钩教育Java就业训练营1 ElasticSearch 介绍Elastic有一条完整的产品线:Elasticsearch、Logstash、Kibana等,前面说的三个就是大家常说的ELK技术栈。如上所述,Elasticsearch具备以下特点:高速、扩展性、最相关的搜索结果分布式:节点对外表现对等,每个节点都可以作为入门,加入节点自动负载均衡JSON:输入输出格式是JSONRestful风格,一切API都遵循Rest原则,容易上手近实时搜索,数据更新在Elasticsear

2021-06-05 10:04:04 249

原创 第九阶段模块二 Lucene

内容输出来源:拉钩教育Java就业训练营1 全文检索1.1 数据分类结构化数据:指具有固定格式或有限长度的数据,如数据库,元数据等。非结构化数据:指不定长或无固定格式的数据,如邮件,word 文档等磁盘上的文件1.2 结构化数据搜索常见的结构化数据也就是数据库中的数据。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-0FHlQ4Ld-1622531350336)(Lucene.assets/01-lucene&elasticsearch.jpg)]数据库

2021-06-01 15:09:29 160

原创 第九阶段模块三 分库分表技术

内容输出来源:拉钩教育Java就业训练营1 分库分表指通过某种特定的条件,将我们存放在同一个数据库中的数据分散存放到多个数据库(主机)上面,以达到分散单台设备负载的效果。分库分表的目的是为了解决由于数据量过大而导致数据库性能降低的问题,将原来单体服务的数据库进行拆分.将数据大表拆分成若干数据表组成,使得单一数据库、单一数据表的数据量变小,从而达到提升数据库性能的目的。分库分表使用场景:单机存储容量遇到瓶颈.连接数,处理能力达到上限1.1 分库分表方式分库分表包括: 垂直分库、垂直分表、水

2021-05-29 16:29:46 297

原创 阶段九模块一 SpringCloud

内容输出来源:拉钩教育Java就业训练营1 SpringCloudSpring Cloud是一系列框架的有序集合(Spring Cloud是一个规范)开发服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监控等利用Spring Boot的开发便利性简化了微服务架构的开发(自动装配)PS:Spring Cloud其实是一套规范,是一套用于构建微服务架构的规范,而不是一个可以拿来即用的框架。1.1 SpringCloud应用场景Spring Cloud 规范及实现意图要解决的问题其实就是微

2021-05-16 21:29:48 312

原创 阶段九模块一 Thymeleaf

​ ## 内容输出来源:拉钩教育Java就业训练营Thymeleaf是一种现代的基于服务器端的Java模板引擎技术,也是一个优秀的面向Java的XML、XHTML、HTML5页面模板,它具有丰富的标签语言、函数和表达式,在使用Spring Boot框架进行页面设计时,一般会选择Thymeleaf模板1 Thymeleaf语法标签在HTML页面上使用Thymeleaf标签,Thymeleaf 标签能够动态地替换掉静态内容,使页面动态展示。为了大家更直观的认识Thymeleaf,下面展示一个在HTML文

2021-05-11 15:32:04 192 1

原创 阶段九模块一 SpringBoot(一)

内容输出来源:拉钩教育Java就业训练营1 SpringBoot基本应用1.1 约定优于配置Spring Boot 是所有基于 Spring 开发的项目的起点。SpringBoot 的设计是为了让你尽可能快的跑起来 Spring 应用程序并且尽可能减少你的配置文件。约定优于配置(Convention over Configuration),又称按约定编程,是一种软件设计范式。本质上是说,系统、类库或框架应该假定合理的默认值,而非要求提供不必要的配置。1.2 SpringBoot分析1.2.1

2021-05-09 16:20:48 270 1

原创 阶段七模块二 RabbitMQ

内容输出来源:拉钩教育Java就业训练营面试题:避免消息堆积workqueue,多个消费者监听同一个队列接收到消息后,通过线程池,异步消费1 RabbitMQ1.1 MQ(Message Queue)消息队列消息队列中间件,是分布式系统中的重要组件主要解决,异步处理,应用解耦,流量削峰等问题从而实现高性能,高可用,可伸缩和最终一致性的架构1.1.1 异步处理[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-7BLezibG-1618660866150)(R

2021-04-17 20:01:26 154

原创 阶段七模块一 Dubbo

内容输出来源:拉钩教育Java就业训练营1 doubboDubbo是分布式服务框架,是阿里巴巴的开源项目,现交给apache进行维护Dubbo致力于提高性能和透明化的RPC远程服务调用方案,以及SOA服务治理方案1.1 RPCRPC【Remote Procedure Call】是指远程过程调用,是一种进程间通信方式RPC基本的通信原理在客户端将对象进行序列化底层通信框架使用netty(基于tcp协议的socket),将序列化的对象发给服务方提供方服务提供方通过socket得到数据文件之后

2021-04-09 16:27:35 86

原创 阶段七模块一 分布式锁实现商品秒杀

内容输出来源:拉钩教育Java就业训练营锁:我们在多线程中接触过,作用就是让当前的资源不会被其他线程访问!在zookeeper中使用传统的锁引发的 “羊群效应” :1000个人创建节点,只有一个人能成功,999人需要等待![外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tu2wtPme-1617846797778)(分布式锁实现商品秒杀.assets/zookeeper详解.jpg)]避免“羊群效应”,zookeeper采用分布式锁[外链图片转存失败,源站可能有防盗链

2021-04-08 09:53:42 217

原创 阶段七模块一 分布式——Zookeeper

内容输出来源:拉钩教育Java就业训练营1 Zookeeper概述Zookeeper是一个开源的分布式(多台服务器干一件事)的,为分布式应用提供协调服务的Apache项目。1.1 工作机制Zookeeper从设计模式角度来理解:是一个基于观察者模式(一个人干活,有人盯着他)设计的分布式服务管理框架它负责 存储 和 管理 大家都关心的数据然后接受观察者的注册,一旦这些数据的发生变化Zookeeper就将负责通知已经注册的那些观察者做出相应的反应从而实现集群中类似Master/Slave管理模

2021-04-08 09:53:03 131

原创 zookeeper集群启动第一个状态为standalone,后俩个状态为Error contacting service

问题zookeeper集群启动发生错误首先先检查一下自己在复制出来的zoo.cfg(文件名可以自定义)中查看自己配置的IP是否正确。ip地址应配置为三个虚拟机自己的ip地址。同时在配置集群之前在zookeeper中我们会创建两个文件夹(文件夹名字课自定义)[root@localhost zookeeper]# mkdir zkData[root@localhost zookeeper]# mkdir zkLog在之前的zoo.cfg文件中我们也要设置这两个文件夹的路径dataDir=/

2021-04-07 12:18:45 821

原创 阶段六模块五 项目部署于发布

内容输出来源:拉钩教育Java就业训练营1 后台项目部署1.1 环境准备安装所需软件jdk、tomcat、MySQL、nginx​ 2.关闭防火墙​ 3.使用SQLYog连接Linux上的MySQL, 导入SQL脚本 创建项目所需的数据库1.2 项目打包发布通过maven的相关配置来在打包时指定各个环境对应配置文件1.2.1 第一步:创建配置文件在项目的src/main/resources 下面创建filter目录, 再创建 development.properties ,

2021-04-04 14:21:40 87

原创 阶段六模块四 Git

内容输出来源:拉钩教育Java就业训练营1 版本控制系统概述1.1 版本控制系统版本控制系统能追踪项目,从开始到结束的整个过程。对编程人员而言,版本控制技术是团队协作开发的桥梁,助力于多人协作同步进行大型项目开发。软件版本控制系统的核心任务:查阅项目历史操作记录、实现协同开发。常见的两种版本控制类型:集中式版本控制工具集中式版本控制工具,版本仓库是集中存放在中央服务器的,team里每个人工作时,从中央服务器下载代码。每个人个人修改后,提交到中央版本仓库。提交(commit)代码需要联网(如SV

2021-03-31 15:38:52 72

原创 阶段六模块四 MD5加密算法

​## 内容输出来源:拉钩教育Java就业训练营MD5加密全程是Message-Digest Algoorithm 5(信息-摘要算法),它对信息进行摘要采集,再通过一定的位运算,最终获取加密后的MD5字符。1 MD5的特点MD5加密的特点主要有以下几点:1、针对不同长度待加密的数据、字符串等等,其都可以返回一个固定长度的MD5加密字符串。(通常32位的16进制字符串);2、其加密过程几乎不可逆,除非维护一个庞大的Key-Value数据库来进行碰撞破解,否则几乎无法解开。3、运算简便,且可实现方

2021-03-29 15:37:13 126

原创 阶段六模块四 maven依赖传递及聚合工程

内容输出来源:拉钩教育Java就业训练营1 maven的依赖传递在maven中,依赖是可以传递的,假设存在三个项目,分别是项目A,项目B以及项目C。假设C依赖 B,B依赖A,那么我们可以根据maven项目依赖的特征不难推出项目C也依赖A。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-FwwGrtUF-1616806045215)(maven依赖传递及聚合工程.assets/屏幕截图 2021-03-26 090723.jpg)]依赖冲突由于依赖传递现象的存在, sp

2021-03-27 08:47:45 301 1

原创 阶段六模块三 SSM整合

内容输出来源:拉钩教育Java就业训练营1 SSM整合任务程序分析使用ssm框架完成对account 表的增删改查操作。步骤1. 准备数据库和表记录2. 创建web项目3. 编写mybatis在ssm环境中可以单独使用4. 编写spring在ssm环境中可以单独使用5. spring整合mybatis6. 编写springMVC在ssm环境中可以单独使用7. spring整合springMVC2 搭建环境1)准备数据库和表记录在sqlyog中创建数据库级其表格2)创建web项目

2021-03-24 20:07:41 123

原创 阶段六模块三 SpringMVC进阶

内容输出来源:拉钩教育Java就业训练营1 ajax异步交互Springmvc默认用MappingJackson2HttpMessageConverter对json数据进行转换,需要加入jackson的包;同时使用<mvc:annotation-driven /><dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-data

2021-03-24 09:04:41 64

原创 阶段六模块三 SpringMVC

内容输出来源:拉钩教育Java就业训练营1 SpringMVC1.1 MVC模式MVC是软件工程中的一种软件架构模式,它是一种分离业务逻辑与显示界面的开发思想。* M(model)模型:处理业务逻辑,封装实体* V(view) 视图:展示内容* C(controller)控制器:负责调度分发(1.接收请求、2.调用模型、3.转发到视图)[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-leSvnhXk-1616393107804)(SpringMVC.assets

2021-03-22 14:05:38 169

原创 阶段六模块二 Spring JDBCTemplate

内容输出来源:拉钩教育Java就业训练营1 JdbcTemplateJdbcTemplate是spring框架中提供的一个模板对象,是对原始繁琐的Jdbc API对象的简单封装。核心对象JdbcTemplate jdbcTemplate = new JdbcTemplate(DataSource dataSource);核心方法int update(); 执行增、删、改语句List<T> query(); 查询多个T queryForObject(); 查询一个 new Be

2021-03-18 15:35:36 69

原创 阶段六模块二 AOP

内容输出来源:拉钩教育Java就业训练营1 转账案例使用spring框架整合DBUtils技术,实现用户转账功能1.1 基础功能1)创建java项目,导入坐标<dependencies> <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-java</artifactId> <versi

2021-03-17 15:01:49 126

原创 阶段六模块二 Spring IOC

内容输出来源:拉钩教育Java就业训练营1 Spring 概述Spring是分层的 Java SE/EE应用 full-stack(全栈式) 轻量级开源框架。全栈式:对各种主流技术和框架都进行了整合,同时对三层解构都提供解决方案。提供了表现层 SpringMVC和持久层 Spring JDBC Template以及 业务层 事务管理等众多的企业级应用技术,还能整合开源世界众多著名的第三方框架和类库,逐渐成为使用最多的Java EE 企业应用开源框架。两大核心:以 IOC(Inverse Of Co

2021-03-16 13:59:31 144

原创 阶段六模块一 Mybatis加载策略及注解开发

内容输出来源:拉钩教育Java就业训练营1 Mybatis加载策略1.1 延迟加载就是在需要用到数据时才进行加载,不需要用到数据时就不加载数据。延迟加载也称懒加载。* 优点:先从单表查询,需要时再从关联表去关联查询,大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。* 缺点:因为只有当需要用到数据时,才会进行数据库查询,这样在大批量数据查询时,因为查询工作也要消耗时间,所以可能造成用户等待时间变长,造成用户体验下降。* 在多表中:一对多,多对多:通常情况下采用延迟加载一对一

2021-03-11 14:17:26 105

原创 阶段六模块一 Mybatis复杂映射

内容输出来源:拉钩教育Java就业训练营1 Mybatis高级查询1.1 ResutlMap属性resultType如果实体的属性名与表中字段名一致,将查询结果自动封装到实体类中ResutlMap如果实体的属性名与表中字段名不一致,可以使用ResutlMap实现手动封装到实体类中<resultMap id="userResultMap" type="user"> <id column="uid" property="id"></id> <resu

2021-03-10 11:53:13 115

原创 阶段六模块一 Mybatis基本应用

内容输出来源:拉钩教育Java就业训练营1 框架1.1 三层框架软件开发常用的架构是三层架构,之所以流行是因为有着清晰的任务划分。一般包括以下三层:持久层:主要完成与数据库相关的操作,即对数据库的增删改查。因为数据库访问的对象一般称为Data Access Object(简称DAO),所以有人把持久层叫做DAO层。业务层:主要根据功能需求完成业务逻辑的定义和实现。因为它主要是为上层提供服务的,所以有人把业务层叫做Service层或Business层。表现层:主要完成与最终软件使用用户的交互,

2021-03-08 14:31:21 163

原创 阶段五模块二 Vue-cli

内容输出来源:拉钩教育Java就业训练营1 Vue组件化开发组件化是Vue的精髓,Vue项目就是由一个一个的组件构成的。 我们主要的工作就是开发的组件.1.1 常见组件页面级别的组件页面级别的组件,通常是views 目录下的.vue组件,是组成整个项目的各个主要页面业务上可复用的基础组件这一类组件通常是在业务中被各个页面复用的组件,这一类组件通常都写到components 目录下,然后通过import在各个页面中使用1.2 组件的组成template : 组件的HTML部分

2021-03-03 20:16:06 176 1

原创 阶段五模块二 Vue

内容输出来源:拉钩教育Java就业训练营​Vue 的核心库只关注视图层,不仅易于上手,还便于与第三方库或既有项目整合。另一 方面,当与现代化的工具链以及各种支持类库结合使用时,Vue 也完全能够为复杂的单页应用提供驱动。​ 自底向上逐层应用:作为渐进式框架要实现的目标就是方便项目增量开发(即插即用)。为什么使用Vue声明式渲染: 前后端分离是未来趋势渐进式框架: 适用于各种业务需求简单易学: 国人开发,中文文档,不存在语言障碍,易于理解和学习1 Vue.js基础1.1 Vue.js的使用

2021-03-02 18:36:53 478

原创 阶段五模块一 Ajax

内容输出来源:拉钩教育Java就业训练营1 Ajax概述传统的网页如果需要更新内容,必须重载整个网页页面。每当用户向服务器发送请求,哪怕只是需要更新一点点的局部内容,服务器都会将整个页面进行刷新。这种方式的缺点是:性能会有所降低 (一点内容,刷新整个页面!)用户的操作页面会中断(整个页面被刷新了)1) 什么是AjaxAjax 即"Asynchronous Javascript And XML",是指一种创建交互式网页应用的网页开发技术。Ajax = 异步 JavaScript 和

2021-02-27 20:46:49 792

原创 阶段五模块一 FileUpload工具类

内容输出来源:拉钩教育Java就业训练营FileUpload工具类1. 导入依赖FileUpload包可以很容易地将文件上传到你的Web应用程序.IOUtils封装了Java中io的常见操作,使用十分方便 ,需要下载 commons-io-1.4.jar 包<dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> &

2021-02-27 20:46:19 196

原创 阶段五模块一 后台系统搭建

内容输出来源:拉钩教育Java就业训练营1 前后端分离开发1.1 前后端分离架构介绍前后端分离已成为互联网项目开发的业界标准使用方式,将前端和后端的开发进行解耦。并且前后端分离会为以后的大型分布式架构、微服务架构、多端化服务(各种客户端,比如浏览器、车载终端、安卓、IOS等)打下坚实的基础。前后端分离的核心思想就是前端HTML页面通过AJAX调用后端的API接口,并通过JSON数据进行交互。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KCbkFseM-161406

2021-02-23 15:57:11 276

原创 模块五阶段一 后台系统搭建

内容输出来源:拉钩教育Java就业训练营1 前后端分离开发1.1 前后端分离架构介绍前后端分离已成为互联网项目开发的业界标准使用方式,将前端和后端的开发进行解耦。并且前后端分离会为以后的大型分布式架构、微服务架构、多端化服务(各种客户端,比如浏览器、车载终端、安卓、IOS等)打下坚实的基础。前后端分离的核心思想就是前端HTML页面通过AJAX调用后端的API接口,并通过JSON数据进行交互。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ao3jouHH-161406

2021-02-23 15:55:27 249 2

原创 模块四阶段二 Shell编程

内容输出来源:拉钩教育Java就业训练营1 Shell编程Shell是一个命令行解释器,可以接收应用程序或用户命令,然后访问操作系统内核。Shell是一个功能相当强大的编程语言,易编写、易调试、灵活性强;1.1 编写程序使用vi工具创建xxx.sh的文件。以#!/bin/bash开头并编写代码后保存。1.2 执行Shell程序的方式方式一:./文件名,此方式需要执行权限。方式二:/bin/bash 文件名,此方式不需要执行权限。1.3 变量的定义语法格式:​ 定义变量:变量=值​

2021-02-20 17:02:46 77

原创 阶段四模块二 Linux系统概述和编程基础

内容输出来源:拉钩教育Java就业训练营1 Linux系统概述计算机由计算机硬件和计算机软件两个部分组成,其中计算机软件(Computer Software)可分为系统软件和应用软件,系统软件就是操作系统,是其他软件的基础。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZilMxVHg-1613714093358)(Linux系统概述和编程基础.assets/第六章 Linux系统概述和编程基础.jpg)]Linux系统诞生于1991年,在林纳斯·托瓦兹(Linus

2021-02-19 13:55:08 119

原创 阶段四模块二 Filter+Listener核心技术

内容输出来源:拉钩教育Java就业训练营1 Filter过滤器(重点)Filter本意为”过滤“的含义,是JavaWeb的三大组件之一,三大组件为:Servlet、Filter、Listener。过滤器是向 Web 应用程序的请求和响应处理添加功能的 Web 服务组件。过滤器相当于浏览器与Web资源之间的一道过滤网,在访问资源之前通过一系列的过滤器对请求进行修改、判断以及拦截等,也可以对响应进行修改、判断以及拦截等。1.1 工作方式[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接

2021-02-18 14:16:43 130

原创 阶段四模块二 EL和JSTL核心技术

内容输出来源:拉钩教育Java就业训练营1 EL表达式1.1 主要功能依次访问pageContext、request、session和application作用域对象存储的数据。获取请求参数值。访问Bean对象的属性。访问集合中的数据。输出简单的运算结果。1.2 访问内置对象的数据1.2.1 访问方式<%=request.getAttribute(“ varName”)%>用EL实现: ${ varName }1.2.2 执行流程[外链图片转存失败,源站可能有防盗链机制

2021-02-17 14:03:21 199

原创 阶段四模块一 JSP核心技术

内容输出来源:拉钩教育Java就业训练营1 JSP概述JSP是Java Server Pages的简称,跟Servlet一样可以动态生成HTML响应, JSP文件命名为xxx.jsp。与Servlet不同,JSP文件以HTML标记为主,然后内嵌Java代码段,用于处理动态内容。JSP与Servlet的关系:[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ErauPghz-1612855029264)(JSP核心技术.assets/第三章 JSP核心技术.jpg)]2

2021-02-09 15:17:29 149

原创 阶段四模块一 Servlet核心技术(下)

内容输出来源:拉钩教育Java就业训练营1 Servlet+JDBC应用(重点)在Servlet中可以使用JDBC技术访问数据库,常见功能如下:查询DB数据,然后生成显示页面,例如:列表显示功能。接收请求参数,然后对DB操作,例如:注册、登录、修改密码等功能。为了方便重用和便于维护等目的,经常会采用DAO(Data Access Object)模式对数据库操作进行独立封装。[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-fiJtDx4T-1612599357345)

2021-02-06 16:16:15 92 1

原创 阶段四模块一 Servlet核心技术(上)

内容输出来源:拉钩教育Java就业训练营1 基本概念1.1 C/S架构​ C/S架构(Client/Server,客户端/服务器模式),是一种比较早的软件体系结构,也是生活中很常见的结构。这种结构将需要处理的业务合理地分配到客户端和服务器端,客户端通常负责完成与用户的交互任务,服务器通常负责数据的管理。C/S架构的主要优点如下:客户端的界面和功能可以很丰富。应用服务器的负荷较轻。响应速度较快。C/S架构的主要缺点如下:适用面窄,用户群固定。维护和升级的成本高,所有的客户端都需要更新版本。

2021-02-05 17:36:45 152

原创 阶段三模块二 Bootstrap

内容输出来源:拉钩教育Java就业训练营1 Bootstrap的使用1.1 表格1.1.1 标签<table> 为表格添加基础样式<thead> 表格标题行的容器元素(<tr>)<tbody> 表格主体中的表格行的容器元素(<tr>)<tr> 表格行<td> 默认的表格单元格。<th> 特殊的表格单元格,(居中和加粗的效果)。必须在<thead> 内使用。<caption&

2021-02-02 21:49:12 163

原创 阶段三模块二 Bootstrap

内容输出来源:拉钩教育Java就业训练营1 Bootstrap的使用1.1 表格1.1.1 标签<table> 为表格添加基础样式<thead> 表格标题行的容器元素(<tr>)<tbody> 表格主体中的表格行的容器元素(<tr>)<tr> 表格行<td> 默认的表格单元格。<th> 特殊的表格单元格,(居中和加粗的效果)。必须在<thead> 内使用。<caption&

2021-02-02 21:48:11 130

空空如也

空空如也

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

TA关注的人

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