自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 Java NIO使用

Java NIO概念Java NIO(New IO),No Blocking IO 非阻塞IO,是从Java1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。NIO与原来的IO有同样的作用和目的,但是使用的方式完全不同,NIO支持面向缓冲区的,基于通道的IO操作。NIO将以更加高效的方式进行文件读写操作IO和NIO的区别IONIO面向流(Stream Oriented)面向缓冲区(Buffer Oriented)阻塞IO(Blocking I

2020-09-21 22:49:38 6424 3

原创 Redis底层原理实现

简单动态字符串Redis 是用 C 语言写的,但是对于Redis的字符串,却不是 C 语言中的字符串(即以空字符’\0’结尾的字符数组),它是自己构建了一种名为 简单动态字符串(simple dynamic string,SDS)的抽象类型,并将 SDS 作为 Redis的默认字符串表示。SDS 定义:struct sdshdr{ //记录buf数组中已使用字节的数量 //等于 SDS 保存字符串的长度 int len; //记录 buf 数组中未使用字节的数量

2020-09-15 21:58:50 6743 1

原创 MySQL锁机制

1、表锁MylSAM引擎使用表锁,并且不支持事务语法--展示表是否加锁SHOW OPEN TABLES;--加锁 read (读锁) write (写锁)LOCK TABLE table1 read(write), table2 read(write)...--全部解锁UNLOCK TABLES;读锁主机A给表加上表锁(读锁)以后主机A和其他主机都可以读取该表的信息主机A不能读取库中其他表的信息,但其他主机可以读取库中所有表的信息如果要修改被锁表的信息 :主机A如果对表进行

2020-08-30 15:08:36 6204

原创 关联查询优化

建表CREATE TABLE IF NOT EXISTS `class` (`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NOT NULL, PRIMARY KEY (`id`));CREATE TABLE IF NOT EXISTS `book` (`bookid` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT, `card` INT(10) UNSIGNED NO

2020-08-30 14:40:35 1644

原创 单表查询优化

1、全值匹配很快捷基本表DROP TABLE IF EXISTS `t_emp`;CREATE TABLE `t_emp` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL, `age` int(3) NULL DEFAULT NULL, `deptId` int(11) NULL DEFAULT

2020-08-30 11:43:47 1048 1

原创 Explain sql性能分析

概念使用 EXPLAIN 关键字可以模拟优化器执行 SQL 查询语句,从而知道 MySQL 是如何处理你的 SQL 语句的。分析你的查询语句或是表结构的性能瓶颈用法--EXPLAIN + SQL语句,如:EXPLAIN SELECT * FROM t_dept;分析准备工作CREATE TABLE t1(id INT(10) AUTO_INCREMENT,content VARCHAR(100) NULL , PRIMARY KEY (id));CREATE TABLE t2(id IN

2020-08-30 10:47:17 114

原创 索引

什么是索引MySQL 官方对索引的定义为:索引(Index)是帮助 MySQL 高效获取数据的数据结构。可以得到索引的本质: 索引是数据结构。可以简单理解为:排好序的快速查找数据结构索引的优缺点优点提高数据检索的效率,降低数据库的IO成本通过索引列对数据进行排序,降低数据排序的成本,降低了CPU的消耗缺点虽然索引大大提高了查询速度,同时却会降低更新表的速度,如对表进行INSERT、UPDATE和DELETE。因为更新表时,MySQL不仅要保存数据,还要保存一下索引文件每次更新添加了

2020-08-30 10:06:38 137

原创 MySql七种join理论

7种JOIN建表语句CREATE TABLE `t_dept` (`id` INT(11) NOT NULL AUTO_INCREMENT, `deptName` VARCHAR(30) DEFAULT NULL, `address` VARCHAR(40) DEFAULT NULL, PRIMARY KEY (`id`)) ENGINE=INNODB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;CREATE TABLE `t_emp` (`id` INT(11

2020-08-30 09:45:56 198

原创 Java中的引用:强引用,软引用,弱引用,虚引用

Java中的引用前言在原来的时候,我们谈到一个类的实例化Person p = new Person()在等号的左边,就是一个对象的引用,存储在栈中而等号右边,就是实例化的对象,存储在堆中其实这样的一个引用关系,就被称为强引用整体架构强引用当内存不足的时候,JVM开始垃圾回收,对于强引用的对象,就算是出现了OOM也不会对该对象进行回收,打死也不回收~!强引用是我们最常见的普通对象引用,只要还有一个强引用指向一个对象,就能表明对象还“活着”,垃圾收集器不会碰这种对象。在Java中最常见的

2020-08-21 15:21:12 706

原创 JVM参数调优

JVM参数调优前言请问如何盘点查看JVM系统默认值使用jps和jinfo进行查看-Xms:初始堆空间-Xmx:堆最大值-Xss:栈空间-Xms 和 -Xmx最好调整一致,防止JVM频繁进行收集和回收JVM参数类型标配参数(从JDK1.0开始一直存在,很稳定)-version-helpjava -showversionX参数(了解)-Xint:解释执行-Xcomp:第一次使用就编译成本地代码-Xmixed:混合模式XX参数(重点)Boolean类型公式

2020-08-21 14:55:02 230

原创 java的锁:公平锁,非公平锁,可重入锁,自旋锁,独占锁(写锁) / 共享锁(读锁) / 互斥锁

公平锁和非公平锁公平锁是指多个线程按照申请锁的顺序来获取锁,类似于排队买饭,先来后到,先来先服务,就是公平的,也就是队列非公平锁是指多个线程获取锁的顺序,并不是按照申请锁的顺序,有可能申请的线程比先申请的线程优先获取锁,在高并发环境下,有可能造成优先级翻转,或者饥饿的线程(也就是某个线程一直得不到锁),类似于允许排队加塞。。。如何创建并发包中ReentrantLock的创建可以指定析构函数的boolean类型来得到公平锁或者非公平锁,默认是非公平锁synchronized修饰的也是非公平锁/

2020-08-19 11:09:51 348

原创 SpringBoot集成Swagger

Swagger简介一:swagger是什么?Swagger是一款RESTFUL接口的文档在线自动生成+功能测试功能软件。Swagger是一个规范和完整的框架,用于生成、描述、调用和可视化RESTful风格的Web服务。目标是使客户端和文件系统作为服务器以同样的速度来更新文件的方法,参数和模型紧密集成到服务器。这个解释简单点来讲就是说,swagger是一款可以根据resutful风格生成的生成的接口开发文档,并且支持做测试的一款中间软件。二:为什么要使用swaager?2.1:对于后端开发人员来说

2020-08-18 19:41:26 108

原创 CAS底层原理和ABA问题

CAS底层原理概念CAS的全称是Compare-And-Swap,它是CPU并发原语它的功能是判断内存某个位置的值是否为预期值,如果是则更改为新的值,这个过程是原子的CAS并发原语体现在Java语言中就是sun.misc.Unsafe类的各个方法。调用UnSafe类中的CAS方法,JVM会帮我们实现出CAS汇编指令,这是一种完全依赖于硬件的功能,通过它实现了原子操作,再次强调,由于CAS是一种系统原语,原语属于操作系统用于范畴,是由若干条指令组成,用于完成某个功能的一个过程,并且原语的执行必须是连续

2020-08-18 16:45:26 336

原创 Volatile禁止指令重排

Volatile禁止指令重排计算机在执行程序时,为了提高性能,编译器和处理器常常会对指令重排,一般分为以下三种:源代码 -> 编译器优化的重排 -> 指令并行的重排 -> 内存系统的重排 -> 最终执行指令单线程环境里面确保最终执行结果和代码顺序的结果一致处理器在进行重排序时,必须要考虑指令之间的数据依赖性多线程环境中线程交替执行,由于编译器优化重排的存在,两个线程中使用的变量能否保证一致性是无法确定的,结果无法预测。指令重排 - example 1public vo

2020-08-18 14:54:12 5781 4

原创 Volatile不保证原子性

Volatile不保证原子性前言可见性解析: 链接.通过前面对JMM的介绍,我们知道,各个线程对主内存中共享变量的操作都是各个线程各自拷贝到自己的工作内存进行操作后在写回到主内存中的。这就可能存在一个线程AAA修改了共享变量X的值,但是还未写入主内存时,另外一个线程BBB又对主内存中同一共享变量X进行操作,但此时A线程工作内存中共享变量X对线程B来说是不可见,这种工作内存与主内存同步延迟现象就造成了可见性问题。原子性不可分割,完整性,也就是说某个线程正在做某个具体业务时,中间不可以被加塞或者被分

2020-08-18 11:43:39 304

原创 谈谈对Volatile的理解

JUC(java.util.concurrent)进程和线程进程:后台运行的程序(我们打开的一个软件,就是进程)线程:轻量级的进程,并且一个进程包含多个线程(同在一个软件内,同时运行窗口,就是线程)并发和并行并发:同时访问某个东西,就是并发并行:一起做某些事情,就是并行JUC下的三个包java.util.concurrentjava.util.concurrent.atomicjava.util.concurrent.locks谈谈对Volatile的.

2020-08-18 10:54:54 125

原创 spring security原理粗略解析

结构总览Spring Security所解决的问题就是安全访问控制,而安全访问控制功能其实就是对所有进入系统的请求进行拦截,校验每个请求是否能够访问它所期望的资源。根据前边知识的学习,可以通过Filter或AOP等技术来实现,SpringSecurity对Web资源的保护是靠Filter实现的,所以从这个Filter来入手,逐步深入Spring Security原理。当初始化Spring Security时,会创建一个名为 SpringSecurityFilterChain 的Servlet过滤器,类型为

2020-08-17 19:37:08 147

原创 spring security快速上手

Spring Security是一个能够为基于Spring的企业应用系统提供声明式的安全访问控制解决方案的安全框架。由于它是Spring生态系统中的一员,因此它伴随着整个Spring生态系统不断修正、升级,在spring boot项目中加入springsecurity更是十分简单,使用Spring Security 减少了为企业系统安全控制编写大量重复代码的工作。依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http:

2020-08-17 14:57:23 294 1

原创 spring security学习

什么是认证进入移动互联网时代,大家每天都在刷手机,常用的软件有微信、支付宝、头条等,下边拿微信来举例子说明认证相关的基本概念,在初次使用微信前需要注册成为微信用户,然后输入账号和密码即可登录微信,输入账号和密码登录微信的过程就是认证。系统为什么要认证?认证是为了保护系统的隐私数据与资源,用户的身份合法方可访问该系统的资源。认证 :用户认证就是判断一个用户的身份是否合法的过程,用户去访问系统资源时系统要求验证用户的身份信息,身份合法方可继续访问,不合法则拒绝访问。常见的用户身份认证方式有:用户名密码登

2020-08-17 11:41:34 213

原创 springBoot 整合ElasticSearch

依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.

2020-08-16 22:02:30 157

原创 ElasticSearch环境搭建

Elasticsearch安装百度百科Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。Elasticsearch是用Java语言开发的,并作为Apache许可条款下的开放源码发布,是一种流行的企业级搜索引擎。Elasticsearch用于云计算中,能够达到实时搜索,稳定,可靠,快速,安装使用方便。官方客户端在Java、.NET(C#)、PHP、Python、Apache Groovy、Ruby和许多其他语言中都是可

2020-08-16 20:01:26 8636 3

转载 @ModelAttribute运用详解

用法1:用在入参运用在参数上,会将客户端传递过来的参数按名称注入到指定对象中,并且会将这个对象自动加入ModelMap中,便于View层使用;用在方法的入参上依次做如下操作:从隐含对象中获取隐含的模型数据将请求参数绑定到隐含对象中将隐含对象传入到入参将入参绑定到Model用法2:用在方法上被@ModelAttribute注释的方法会在此controller的每个方法执行前被执行 ,如果有返回值,则自动将该返回值加入到ModelMap中。因此对于一个controller映射多个URL的用法

2020-08-08 15:58:24 45543 3

原创 Linux上安装Docker,解决速度太慢---使用国内阿里云镜像加速安装

https://docs.docker.com/engine/install/centos/这是Docker官方给的安装教程地址看完后,总结出以下几步:1、卸载旧版本sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \

2020-07-29 11:35:44 2482 3

原创 jvm虚拟机栈

虚拟机栈虚拟机栈概述由于跨平台性的设计,Java的指令都是根据栈来设计的。不同平台CPU架构不同,所以不能设计为基于寄存器的。优点是跨平台,指令集小,编译器容易实现,缺点是性能下降,实现同样的功能需要更多的指令。有不少Java开发人员一提到Java内存结构,就会非常粗粒度地将JVM中的内存区理解为仅有Java堆(heap)和Java战(stack)?为什么?首先栈是运行时的单位,而堆是存储的单位栈解决程序的运行问题,即程序如何执行,或者说如何处理数据。堆解决的是数据存储的问题,即数据怎么放,

2020-07-29 09:59:16 268

原创 jvm程序计数器

程序计数器介绍JVM中的程序计数寄存器(Program Counter Register)中,Register的命名源于CPU的寄存器,寄存器存储指令相关的现场信息。CPU只有把数据装载到寄存器才能够运行。这里,并非是广义上所指的物理寄存器,或许将其翻译为PC计数器(或指令计数器)会更加贴切(也称为程序钩子),并且也不容易引起一些不必要的误会。JVM中的PC寄存器是对物理PC寄存器的一种抽象模拟。它是一块很小的内存空间,几乎可以忽略不记。也是运行速度最快的存储区域。在JVM规范中,每个线程都有它自

2020-07-28 15:49:12 1004

原创 jvm运行时数据区概述及线程

运行时数据区概述及线程前言运行时数据区,也就是下图这部分,它是在类加载完成后的阶段当我们通过前面的:类的加载-> 验证 -> 准备 -> 解析 -> 初始化 这几个阶段完成后,就会用到执行引擎对我们的类进行使用,同时执行引擎将会使用到我们运行时数据区也就是大厨做饭,我们把大厨后面的东西(切好的菜,刀,调料),比作是运行时数据区。而厨师可以类比于执行引擎,将通过准备的东西进行制作成精美的菜品内存是非常重要的系统资源,是硬盘和CPU的中间仓库及桥梁,承载着操作系统和应用程

2020-07-28 15:45:31 300

原创 jvm类加载子系统和双亲委派机制

类加载子系统概述完整图如下如果自己想手写一个Java虚拟机的话,主要考虑哪些结构呢?类加载器执行引擎类加载器子系统作用类加载器子系统负责从文件系统或者网络中加载Class文件,class文件在文件开头有特定的文件标识。ClassLoader只负责class文件的加载,至于它是否可以运行,则由Execution Engine决定。加载的类信息存放于一块称为方法区的内存空间。除了类的信息外,方法区中还会存放运行时常量池信息,可能还包括字符串字面量和数字常量(这部分常量信息是Class文

2020-07-28 14:47:14 295

原创 JVM与Java体系结构

JVM与Java体系结构前言作为Java工程师的你曾被伤害过吗?你是否也遇到过这些问题?运行着的线上系统突然卡死,系统无法访问,甚至直接OOMM!想解决线上JVM GC问题,但却无从下手。新项目上线,对各种JVM参数设置一脸茫然,直接默认吧然后就JJ了每次面试之前都要重新背一遍JVM的一些原理概念性的东西,然而面试官却经常问你在实际项目中如何调优VM参数,如何解决GC、OOM等问题,一脸懵逼。大部分Java开发人员,除会在项目中使用到与Java平台相关的各种高精尖技术,对于Java技术的

2020-07-28 14:06:32 164

原创 springboot 多环境切换

Profile1、多Profile文件我们在主配置文件编写的时候,文件名可以是 application-{profile}.properties/yml默认使用application.properties的配置;2、yml支持多文档块方式server: port: 8081spring: profiles: active: prod---server: port: 8083spring: profiles: dev---server: port

2020-07-26 16:57:55 93

原创 浅显分析一下springboot是怎么样扫描配置

主程序类,主入口类@SpringBootApplicationSpring Boot应用标注在某个类上说明这个类是SpringBoot的主配置类,SpringBoot 就应该运行这个类的main方法来启动SpringBoot应用;@Target({ElementType.TYPE})@Retention(RetentionPolicy.RUNTIME)@Documented@Inherited@SpringBootConfiguration@EnableAutoConfiguration@

2020-07-26 15:39:41 1056

原创 spring中的事务实现

什么事务( 1)事务是数据库操作最基本单元,逻辑上一组操作,要么都成功,如果有一个失败所有操作都失败(2)典型场景:银行转账lucy 转账 100 元 给 marylucy 少 100, mary 多 100事务四个特性(ACID)(1)原子性(2)一致性(3)隔离性(4)持久性环境准备搭建环境,先确保可以执行<?xml version="1.0" encoding="UTF-8"?><beans xmlns="http://www.springframe

2020-07-25 22:35:41 335

原创 Spring中JdbcTemplate

什么是JdbcTemplate不引入其它框架,Spring框架对jdbc操作的封装,使用JdbcTemplate对数据库的操作JdbcTemplate的使用导入依赖<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

2020-07-25 16:52:07 92

原创 Spring中的AOP

什么是AOPAspect Oriented Programming 的缩写,翻译为:面向切面编程。利用AOP可以对业务逻辑的各个部分进行隔离,从而使得业务逻辑各部分之间的耦合度降低,提高程序的可重用性,同时提高了开发的效率。用一个例子解释下AOP,我们现在有一个完整的登录功能代码,但我们想在加入一个权限控制,在原始方式,我们需要去修改源代码,加入具体逻辑,不需要的时候还需要逐行修改,很麻烦。现在我们利用AOP,先写一个权限管理的模块,通过AOP的方式加入到源代码中,不需要的时候把,对该模块的使用删掉

2020-07-25 15:39:28 267

原创 spring 的IOC

什么是IOC控制反转,把对象创建和对象之间的调用过程,交给spring进行管理使用spring的目的:为了耦合度降低DI:依赖注入,注入属性,是IOC中的一种具体实现。对ioc的简单理解在平时的java应用开发中,我们要实现某一个功能或者说是完成某个业务逻辑时至少需要两个或以上的对象来协作完成,在没有使用Spring的时候,每个对象在需要使用他的合作对象时,自己均要使用像new object() 这样的语法来将合作对象创建出来,这个合作对象是由自己主动创建出来的,创建合作对象的主动权在自己手上

2020-07-24 18:15:34 154

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

垃圾回收算法.十种GC回收器Serial 回收器单线程收集针对新生代使用复制算法会产生较长时间的停顿(Stop the world),进行垃圾收集时,必须暂停所有工作线程,直到完成不会产生线程切换的开销Serial Old 回收器老年代单线程回收使用标记整理算法Parallel Scavenge回收器jdk 1.8默认的垃圾回收器多线程并行回收新生代回收器,采用复制算法追求高吞吐量,充分利用CPU资源【吞吐量优先】进行垃圾收集时,必须暂停所有工作线程,直到完成

2020-07-24 09:23:15 103

原创 GC垃圾回收算法 和 GC回收器 (一)

什么是垃圾?类比日常生活中,如果一个东西经常没被使用,那么就可以说是垃圾。同理,如果一个对象不可能再被引用,那么这个对象就是垃圾,应该被回收。垃圾:不可能再被引用的对象。finalize方法在对象没有被引用时调用在Object类里定义新生代与老年代新生代分为三个区域,一个Eden区和两个Survivor区,它们之间的比例为(8:1:1),这个比例也是可以修改的。通常情况下,对象主要分配在新生代的Eden区上,少数情况下也可能会直接分配在老年代中。Java虚拟机每次使用新生代中的Eden和其

2020-07-24 08:51:35 304

原创 synchronized锁升级过程以及64位jvm的Mark Word

synchronized的三种应用方式修饰实例方法,作用于当前实例加锁,进入同步代码前要获得当前实例的锁静态方法,作用于当前类对象加锁,进入同步代码前要获得当前类对象的锁修饰代码块,指定加锁对象,对给定对象加锁,进入同步代码库前要获得给定对象的锁。锁的四个状态锁的状态总共有四种,级别由低到高依次为:无锁、偏向锁、轻量级锁、重量级锁,这四种锁状态分别代表什么,为什么会有锁升级?其实在 JDK 1.6之前,synchronized 还是一个重量级锁,是一个效率比较低下的锁,但是在JDK 1.6后,

2020-07-23 14:56:40 1484 1

原创 注释一定不会执行吗

public class Notation { public static void main(String[] args) { String name="张三"; // \u000d name="李四"; System.out.println(name); }}单纯从代码上来看,问题应该出在那串特殊的字符上——\u000d,如果不是它在作怪,把 name 的值由“张三”修改为了“李四”,就没有别的原因了。\u000d 虽然看上去比较陌生

2020-07-22 15:20:35 496

原创 深入理解Java中的final关键字

在Java中声明类、变量和方法时,可使用关键字final来修饰,表示“最终的”。final用来修饰一个类:被修饰的类不能再被其他类继承。- 例如:String类、StringBuffer类、System类等final用来修饰方法:表明被修饰的方法不能再被子类重写。- 例如:Object类中的getClass()方法final用来修饰变量:此时的“变量”就是一个常量,名称大写,且只能被赋值一次。final修饰属性:可以赋值的位置有:显示初始化、代码块中初始化、构造器中初始化。

2020-07-18 16:58:53 100

原创 java创建一个对象的过程以及对象的内存布局

进行判断java在new一个对象的时候,会先查看对象所属的类有没有被加载到内存,如果没有的话,就会先通过类的全限定名来加载。加载并初始化类完成后,再进行对象的创建工作。第一次使用分为加载并初始化类和创建对象加载并初始化类java是使用双亲委派模型来进行类的加载的,所以在描述类加载过程前,我们先看一下它的工作过程:双亲委托模型的工作过程是:如果一个类加载器(ClassLoader)收到了类加载的请求,它首先不会自己去尝试加载这个类,而是把这个请求委托给父类加载器去完成,每一个层次的类加载器都是如此

2020-07-18 08:29:10 691

bootstrap.zip

Bootstrap 是一个用于快速开发 Web 应用程序和网站的前端框架。Bootstrap 是基于 HTML、CSS、JAVASCRIPT 的。基本结构:Bootstrap 提供了一个带有网格系统、链接样式、背景的基本结构。这将在 Bootstrap 基本结构 部分详细讲解。 CSS:Bootstrap 自带以下特性:全局的 CSS 设置、定义基本的 HTML 元素样式、可扩展的 class,以及一个先进的网格系统。这将在 Bootstrap CSS 部分详细讲解。 组件:Bootstrap 包含了十几个可重用的组件,用于创建图像、下拉菜单、导航、警告框、弹出框等等。这将在 布局组件 部分详细讲解。 JavaScript 插件:Bootstrap 包含了十几个自定义的 jQuery 插件。您可以直接包含所有的插件,也可以逐个包含这些插件。这将在 Bootstrap 插件 部分详细讲解。

2020-04-29

空空如也

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

TA关注的人

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