自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(157)
  • 资源 (2)
  • 论坛 (9)
  • 问答 (13)
  • 收藏
  • 关注

原创 IDEA+Dubbo+Zookeeper+SpringBoot 整合详细教程

放上一张Dubbo的架构图刚刚学过SpringCloud,Dubbo虽然没有Spring家族那么强悍,但始终不能违背Dubbo是一款高性能优秀的RPC框架。click官网地址了解更多自己也是初学者,想自己动手做一个简单的demo,于是上网查资料,发现针对那种入门的案例,网上主要有两个比较经典的,一个是尚硅谷雷神版,还有一个是官网推荐的入门 案例。雷神的Dubbo视频教程 大神讲解视频中用的eclipse开发,习惯IDEA开发的我们不免手痒想要使用IDEA整合一波。1. 提出需求业务拆分.

2021-06-02 23:42:13 2985 15

原创 mysql explain解读

1. explain工具价绍翻译:解释的意思,在mysql中,使用explain关键字可以模拟优化器的执行sql语句,从而知道mysql是如何处理你的sql语句,从分析你的sql语句或者表结构问题引起的sql性能瓶颈2. 用法mysql > expalin sql语句3. 执行结果4. 查询字段解读4.1 idmysql查询的序列号,包含一组数字,表示查询中执行select 子句或者操作表的顺序三种情况:id相同,执行顺序由上到下mysql内部对关联表查询的执行的顺序分别

2021-09-21 19:00:20 31

原创 Git reset使用与注意点

Reset也就是撤回操作,场景一般使用在合并代码撤回,commit后发现不对撤回。直接看IDEA的操作这种操作不会将commit的信息删除掉。但是如果使用然后无论选择soft,mix,还是hard都会讲commit的日志删除掉。简单总结一下:–soft:只会撤销commit的操作,并且撤销后会有明显的本地和仓库代码不同步的问题(文件变蓝)–mix:撤销commit,并且如果该文件是在当前head中加入,此时还会从暂存区从该文件删除(文件变红)–hard:撤销commit + 撤销缓冲

2021-08-29 00:08:20 48

原创 面试官问我分布式系统的CAP原则是什么?

CAP原则:分布式系统设计非常重要的一个环节。学过的东西,特别是理论,很容易就会忘记,勤做笔记,加深理解。分布式系统最大的难点:各个服务之间的状态如何同步,CAP是这一方面的基本定理,也是理解分布式系统的起点。CAP:由三个字母组成,分别是C(Consistency)一致性,A(Availability)可用性,P(Partition tolerance)分区容错性。一致性:指的是在分布式系统中,当读写的服务被分布在了不同的服务器上,此时如果我们访问服务器1进行写操作修改了一个字段的值,后台可能

2021-06-20 13:58:57 103

原创 面试官问我Dubbo的高可用如何实现?

高可用(HA):通过设计,减少系统不能提供服务的时间通常由三种策略:1. Zookeeper宕机与dubbo直连默认情况下,当Zookeeper宕机时,服务还是可以正常提供,并且消费者还是可以正常访问生产者,这中间靠的是本地缓存通信,这体现了Zookeeper注册中心的健壮性。dubbo直连:指的是生产者可以通过配置@Reference(url = "127.0.0.1:20880") 来执行目标的生产者,实现服务间的指向性通信。2. 集群下Dubbo的负载均衡配置按权设置随机访问ord

2021-06-20 11:19:29 93

原创 通俗语言介绍Java 线程池

Java 线程池这玩意前几天面试被问到了,和数据库连接池搞混了,没答好,随手mark一下吧。线程池核心类:ThreadPoolExecutor主要介绍它的核心构造方法public ThreadPoolExecutor(int corePoolSize,int maximumPoolSize,long keepAliveTime,TimeUnit unit, BlockingQueue<Runnable> workQueue,ThreadFactory threadFac

2021-06-18 23:58:15 58

原创 Java static关键字的执行时机

简单复习一波JVM底层知识Java源文件经过javac编译后,形成.class的字节码文件,然后由类加载器ClassLoader加载进JVM虚拟机中进入运行时数据区后,运行时数据区内部结构如下方法区:又称静态区,被所有线程共享; 存放类文件相关信息,静态变量/方法/代码块相关信息。虚拟机栈:存储的是自定义对象的引用(不是真实对象)和基础数据类型的对象,属于每个线程私有。本地方法栈:与虚拟机栈功能类型,只不过虚拟机栈是为虚拟执行的Java方法(字节码)服务,而本地方法栈是为虚拟机执行的Nati

2021-06-18 09:56:24 64 1

原创 Java 跨域问题的解决手段

1. 为什么会有跨域浏览器出于对于浏览网页安全性问题的考虑,引入的同源策略。什么是同源策略,听着很官方,简单一幅图说明:同源指的是URL地址三要素(协议,主机,端口号)必须不变协议主机端口httpwww.baidu.com80例如我客户端访问80端口的百度,只要协议,和端口不变访问http://www.baidu.com:80/aaa/bbb 满足同源策略,访问京东同样如此。2. 什么是跨域同样如上图,如果出现了在百度页面可以访问京东的页面,这中间就出现了跨

2021-06-01 21:40:36 65 2

原创 JavaWeb常见解决表单重复提交思路

问题描述:用户下订单购买,因为各种原因(网络卡,快递点击等)重复提交2个或者以上一模一样的订单,由于是同时提交的,第一个订单执行扣款生成订单未完成时候,第二个已经进来了,导致付一笔钱购买了2次或多次商品常见的解决思路前端通过控制JS来控制重复提交按钮,第一次可以提交,提交后直接变成灰色,这样看起来就解决了问题,但是并不能从根本上解决问题(刷新页面可能就会失效)!借助中间件Redis key value 的 incry原子性性质,第一次提交的时候incry会将变量值 + 1 ,第二次提交的.

2021-06-01 11:39:53 90 1

原创 两个例子说明 ElasticSearch 分词是什么

引入:分词的概念环境说明:Kibana + ElasticSearch我们百度搜索:Java学习路线可以看到高亮的字,都是我们搜索使用的关键字匹配出来的,我们在百度框框中输入的关键字,经过分词后,再通过搜索匹配,最后才将结果展示出来。ik_smart和ik_max_word的区别使用kibana演示分词的效果:借助es的分词器:类型:ik_smart,称作搜索分词GET _analyze{ "analyzer": "ik_smart", "text": "我爱你我的祖.

2021-05-29 19:55:55 101 1

原创 集群服务器Session共享问题解决手段

集群服务器之间的Session共享问题引入一张图这是一张传统型的多服务器部署的场景(假设已经实现负载均衡,ribbon或者网关或者nginx等负载均衡技术)客户端第一次登录从服务器1拿到session,此时服务器1当然也会存储一份,所以访问服务器1是不用再登录了。但是此时如果服务器1宕机,客户端就不能拿着从服务器1获取的session数据去登录服务器2,此时一般会提示重新登录。解决方案,因知识面有限,列举两种:方案1搭建Nginx反向代理服务器回顾一下反向代理和正向代理的区别:反向代理

2021-05-23 12:05:21 58 1

原创 巨坑!!!Mybatis 返回List集合 All elements are null

在工作中遇到这个问题好多次了,不得不记录一下,因为这确实是新手开发常犯的毛病。场景:我们在用Mybatis查询,返回List的过程中遇到的如:以下SQLSELECT t4.template_price_id, t4.price_name, t4.price, t4.production_line, t4.type, t4.MODE FROM project_card t LEFT JOIN dyeing_notice t1 ON t1.dyeing_notice_id = t.dye

2021-04-07 22:58:58 448

原创 RabbitMQ基础入门学习

RabbitMQ消息模型登录官网可以看到:RabbitMq的消息模型1. “Hello World!” 直连模式这个是最简单的消息队列模型,其中生产者和消费者是一一对应的。消息队列为红色部分,类似于一个邮箱,P就类似与一个邮递员,可以往邮箱中传递邮件,邮箱充当邮件消息的缓冲,C就类似于我们收件人,可以从邮箱中去出邮件。步骤1:导入MQ相关Maven依赖:<!-- rabbit mq相关依赖--><dependency> <groupId>com.r

2021-03-31 23:21:20 159 1

原创 ReentrantLock基础知识

翻译成中文,ReentrantLock表示可重入锁,与synchronized一样,都是属于可重入锁。与synchronized相比具有如下特点:可中断:synchronized只能等待同步代码块执行结束,不可以中断,而reentrantlock可以调用线程的interrupt方法来中断等待,继续执行下面的代码。可以设置超时时间:调用lock.trylock(),如果没有设置等待时间的话,没获取到锁,将返回false可以设置为公平锁:公平锁其实是为了解决饥饿问题,当一个线程由于优先级太低的时候,就

2021-02-19 17:07:31 972 3

原创 Java程序员个人服务器搭建流程

个人服务器选用服务器有分硬件和云端的服务器。市场上有非常多服务器厂商,大型企业选用的一般是硬件服务器,因为它的性能和稳定性方面要优越与云端的服务器。近年来随着云计算的技术迅速发展,云服务器迅速占领市场,比较有名的有腾讯云,阿里云,华为云等等服务器厂商。这两种类型的服务器都需要付费的,硬件的还会偏贵一点,最后还有一种服务器就是本地的服务器,也就是从服务器的官网下载官方镜像iso,然后本地安装,缺点就是不借助工具的情况下无法通过外网访问。博主是一个刚入职不到一年的Java程序员小白一枚,还在学习阶段,选用的

2021-02-17 19:05:31 488 2

原创 Java 多线程park unpark 原理

介绍:park unpark 与wait、notify很像,但是park unpark是属于每个线程私有的,而wait、notify是属于Object对象的,相同的就是两者调用后都会进入WAIT状态,没去唤醒的话就一直等待下去。park 对象由三部分组成_counter,_cond,-mutex。看一个例子来说明:public static void main(String[] args) { Thread t1 = new Thread(() -> {

2021-02-06 11:31:20 414 1

原创 Java多线程 异步模式之生产者消费者模式

之前学习过的同步模式是保护性暂停,存在一定的缺陷,我们当初举例是两个线程,线程A收信人,线程B送信人,使用一个信箱充当一个中间过渡的介质。在多任务的情况下,收信人存在多个,发信人就得存在多个,而且只有当送信者将信件送到指定的收信人手中,一个任务才算完成,这中间的操作是同步进行的,因此属于同步模式下的多线程任务。弊端也很明显,实际情况下,送信者只需要把信件放入信箱通知收信人即可,而不需要等到收信人拿到信才算结束,因为送信人把信收到信箱通知收信人后还可以接着送下一份信件,这中间送信人的时间没有得到充分的利用。

2021-01-31 17:14:17 97

原创 Java多线程 同步模式之保护性暂停

1. 保护性暂停定义即 Guarded Suspension,用在一个线程等待另一个线程执行结果。重点:有一个线程的结果需要传递给另一个线程,让它们关联同一个GuardedObject如果有结果连续不断由一个线程传递另一个线程,则需要考虑消息队列JDK中,join(),Future采用的就是这种模式因为这是一方要等待到另一方的结果,所有这是一种同步模式。图示:2. 实现根据上图实现一个t1线程等待t2线程下载响应@Slf4j(topic = "c.TestGuardedObject

2021-01-30 20:52:26 67

原创 Java多线程wait/notify原理

1. 引入wait/notify回顾:在之前的学习中,当我们创建一个对象后,synchronized给对象上锁,JVM会给对象头关联一个Monitor对象,这个Monitor由三部分组成。一是Owner对象,里面存储的是创建该对象的线程二是EntryList,想试图获取该对象资源的其它堵塞线程队列三是WaitSet,存储的是放弃对象锁的线程Owner线程中的锁对象,如果发现条件不满足,调用wait()方法,既可以进入到WaitSet变为WAITING状态EntryList下和WaitSet下

2021-01-30 16:44:01 137

原创 Java Monitor对象与Synchronized原理

Java对象头Java的世界里,万物皆对象,对象是类的实例,类是抽象的,对象是具体的…这些都是Java对象的一些常见介绍。今天我们要学习的是Java对象的底层结构对象头的部分,它是Java对象的一部分,看一张HotSpot虚拟机中 Java对象的结构图:在32位虚拟机中普通Java对象头,占8个字节:KlassWord (32bits):指的是该对象的类型,占4个字节MarkWord (32bits):存放Monitor 对象的指针的引用地址,待介绍。数组对象头,占16个字节:与普通J

2021-01-24 22:16:49 261 1

原创 JDK 8使用Lambda操作List工具类

写在前面:因为公司代码的List操作大多数用到了lambda表达式,这种代码写起来也比较简洁。自己闲着将一些常用的方法封装了一下,用起来也比较方便了。可以复制粘贴直接使用,其它的操作有用到后面会慢慢补充,觉得不错的大爷们可以点个????package com.hgfzp.textile.common.utils.lambda;import com.baomidou.mybatisplus.extension.api.R;import org.apache.poi.ss.formula.functi

2021-01-23 22:11:09 244 2

原创 两个经典的线程安全示例分析

示例1:卖票与买票@Slf4j(topic = "c.CASE1")public class CASE1 { //随机数 public static Random random = new Random(); public static int getRandom(){ return random.nextInt(5) + 1; } public static void main(String[] args) { //开始有200

2020-12-13 14:34:41 125

原创 Java线程的6种状态

Thread.StateThread的6种状态对应了Thread.State的一个枚举类 public static enum State { NEW, RUNNABLE, BLOCKED, WAITING, TIMED_WAITING, TERMINATED; private State() { } }NEW 新生状态RUNNABLE

2020-11-29 15:25:45 83

原创 守护线程

守护线程名字很熟悉,却一直记不住是干嘛用的,最近在学多线程,随手mark一下。所谓守护,其实在有参照物的情况下,例如线程t1,t2两个线程同时启动,默认情况下两个线程都不是守护线程,因为它们都没有可以 ''守护''的线程。此时如果t2设置为守护线程,t1就是它的守护对象,此时有一个特点,就是t1线程只要一执行完毕,t2也会跟着结束进程。可以观察一个例子://当t1,t2没有守护线程时,同时启动t1,t2线程,//t1指的是main,t2指的是thread @Slf4j(topic = "c.Te

2020-11-29 14:38:46 77

原创 Java多线程之两阶段终结模式

场景:我们如何在t1 线程中终止t2 线程呢?错误思路❌stop():调用Thred的静态方法直接杀死线程System.exit(int):除了直接杀死线程,还会直接停止掉运行线程的应用程序为什么说这是错误的思路呢?比如t1 调用了 t2线程,此时需要终止掉t2线程,但是在t2 线程体中还有被锁住的共享资源,此时还未释放锁,如果直接调用stop()方法去终止线程,那么t1就无法得到共享资源,显然这两种方法存在一定的弊端!!两阶段终结模式引入两阶段终结模式,也就是为了解决上述存在的弊端。简.

2020-11-28 16:32:21 90 1

转载 Java List去重之JDK 8Lambda表达式

JDK 8提供了Lambda表达式进行流式编程,还提供了对List进行去重的简便写法。List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 5, 5, 5, 6, 7);List<Integer> distinctNumbers = numbers.stream().distinct().collect(Collectors.toList());System.out.println(distinctNumbers);//

2020-11-19 11:54:55 118

原创 ERP审批流程的制作

1. 业务场景: 公司为开发一套适用性强的审批系统,并且灵活性可以高一点,灵活性高指的是:我们审批流通常是xxx人发起审批单,A审批=>B审批=》C审批通过,这个审批单才算结束,但防中间有一个审批人拒绝,这审批单也结束,我们想制作成,可以自定义的选择审批顺序,已达到灵活的选择审批人的目的。例如:项目场景:项目中有用户表oa_user,底下关联着角色表oa_role,另有客户表,我们登录的用户这边指的是业务员,也有可能登录的这个用户是客户,区分以这个用户的一个字段customer_type如果是2的

2020-11-14 21:30:34 679

原创 Spring Cloud入门到实战

文章目录1. 引入Spring Cloud1.1 Spring Cloud简介1.2 单体应用开发的弊端1.3 分布式、集群的概念1.4 Spring Cloud的出现1.5 为什么是Spring Cloud2. Eureka(服务治理)2.1 实战:搭建注册中心2.2 实战:注册一个微服务提供者2.3 实战:RestTemplate的使用2.4 实战:注册一个服务消费者2.5 实战:Zuul服务网关2.6 实战:Ribbon负载均衡2.7 实战:Feign声明式接口调用1. 引入Spring Cl..

2020-11-08 20:23:36 136 1

原创 工作中Integer类型传参遇到的陷阱

遇到的问题//i = 0Integer integer=new new Integer(i); //i改成4tempList = this.commonCalMainProcess(list,indexList,integer,position,null); //i还是等于0i = integer;误区:传对象传的就是地址的引用,所以改变integer的值,它的指向的值也会跟着改变。一个单元测试@Test public void test02(){ Integer

2020-11-04 10:15:20 153

原创 SpringCloud集成组件Ribbon 报错:java.lang.IllegalStateException: No instances available for localhost

1. 报错信息java.lang.IllegalStateException: No instances available for localhost2. 问题重现服务提供者向外暴露接口,我们可以访问。但是ribbon调用服务提供者的接口时,报错!!@RestController@RequestMapping("ribbon")public class RibbonController { @Autowired private RestTemplate restTemp

2020-10-24 23:28:29 305

原创 MyBatis-plus报错:Error evaluating expression ‘ew.sqlSegment != null

报错信息Caused by: org.apache.ibatis.builder.BuilderException: Error evaluating expression 'ew.sqlSegment != null '. Cause: org.apache.ibatis.ognl.OgnlException: sqlSegment [com.baomidou.mybatisplus.core.exceptions.MybatisPlusException: not support this colu

2020-10-23 10:50:32 11677

原创 MyBatis + MyBatis Plus日期范围的查询问题

情况1:从前端接收到字符串类型的日期 <if test="startTime!=null and startTime.trim() neq ''"> and date_format(p.create_time,'%Y-%m-%d %H:%i:%s') &gt;= str_to_date(#{startTime},'%Y-%m-%d %H:%i:%s') </if> <if test="endTime!=null and endTime.trim() n

2020-10-22 15:01:42 6010

原创 Java中获取当天的0点时间和明天的0点时间

Java中获取当天的0点时间和明天的0点时间 DateFormat format = new SimpleDateFormat("yyyy-MM-dd"); Calendar calendar = Calendar.getInstance(); calendar.setTime(new Date()); calendar.set(Calendar.HOUR_OF_DAY, 0); calendar.set(Calendar.MINUTE, 0); calendar.set(Calendar.S

2020-10-22 13:48:34 1569

原创 5个非技术的面试问题

1. 谈谈你的职业规划模板“感谢你提出这么深刻的问题。我的兴趣是XXX,优势是XXX,因此我选择了XXX行业/职业,这是一个可以将我的兴趣和工作结合起来的行业,是我非常喜欢的,所以我会很用心对待XXX岗位。““说到职业规划,近期三到五年,我打算在XXX行业做到XXX,希望可以稳定提升,持续学到更多的知识,后续可以在XXX行业/XXX岗位独当一面,独立负责XXXX事务,解决XXXX问题。”“谈到远期规划,我会根据环境的变化,工作内容的变化,以及我自身能力的变化,不断进行调整的。对于职业规划,我暂时的考

2020-07-16 14:08:28 261

原创 阿里巴巴面试题:考察Java函数传值特性

题目class Value{ public int i=15;}public class Test{ public static void main(String argv[]){ Test t=new Test( ); t.first( ); } public void first( ){ int i=5; Value v=new Value( ); v.i=25; second(v,i); Syst

2020-07-11 23:48:30 160

原创 Leetcode:35-搜索插入位置

35. 搜索插入位置给定一个排序数组和一个目标值,在数组中找到目标值,并返回其索引。如果目标值不存在于数组中,返回它将会被按顺序插入的位置。你可以假设数组中无重复元素。示例 1:输入: [1,3,5,6], 5输出: 2示例 2:输入: [1,3,5,6], 2输出: 1示例 3:输入: [1,3,5,6], 7输出: 4示例 4:输入: [1,3,5,6], 0输出: 0思路这道题相对简单点,需要考虑的地方也很明确,画出思维导图:代码class Solution {

2020-07-11 20:58:02 107

原创 Leetcode:26-删除排序数组中的重复项

26. 删除排序数组中的重复项给定一个排序数组,你需要在 原地 删除重复出现的元素,使得每个元素只出现一次,返回移除后数组的新长度。不要使用额外的数组空间,你必须在 原地 修改输入数组 并在使用 O(1) 额外空间的条件下完成。示例 1:给定数组 nums = [1,1,2],函数应该返回新的长度 2, 并且原数组 nums 的前两个元素被修改为 1, 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,0,1,1,1,2,2,3,3,4],函数应该返回新的长度

2020-07-11 00:19:09 91

原创 面试题:统计字符串中出现次数最多的字符

统计字符串中出现次数最多的字符,假设无重复的字符分析抓住HashMap的特点:如果遇到重复的key,则返回前前一个重复的key如果遇到不重复的,则返回null于是思路就很明确的!准备好两个Map,一个用于存字符串,key为字符串的每一个字符,value为1另一个Map用于出现重复字符时存储重复的次数,key为重复的字符,value为重复的次数但是此时又该如何获取到最大的value,对应的key呢?让人头疼!!可以先求出最大的value值。然后再获取map的entrySet,从中拿出valu

2020-07-10 21:02:55 524

原创 Leetcode:28-实现 strStr()

28. 实现 strStr()实现 strStr() 函数。给定一个 haystack 字符串和一个 needle 字符串,在 haystack 字符串中找出 needle 字符串出现的第一个位置 (从0开始)。如果不存在,则返回 -1。示例 1:输入: haystack = “hello”, needle = “ll”输出: 2示例 2:输入: haystack = “aaaaa”, needle = “bba”输出: -1解题思路一直以来,做题有一个想法,自己认为可以做出来的方法一

2020-07-10 18:01:41 88

原创 Leetcode:27-移除元素

27. 移除元素给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度。不要使用额外的数组空间,你必须仅使用 O(1) 额外空间并 原地 修改输入数组。元素的顺序可以改变。你不需要考虑数组中超出新长度后面的元素。示例 1:给定 nums = [3,2,2,3], val = 3,函数应该返回新的长度 2, 并且 nums 中的前两个元素均为 2。你不需要考虑数组中超出新长度后面的元素。示例 2:给定 nums = [0,1,2,2

2020-07-10 15:10:12 91

基于Spring Boot的个人博客设计与研究-毕业设计.zip

**技术组合:** * 后端:Spring Boot + JPA + thymeleaf模板 * 数据库:MySQL * 前端UI:Semantic UI框架 **工具与环境:** * IDEA * Maven 3 * JDK 8

2020-04-24

基于JavaWeb的学生信息管理系统

知识点:isp servlet,MySQL数据库的基本操作,前端easyui框架。 适合人群:Java初学者、在校学生,(已经学过Java基础语法,对html有简单的了解,熟悉is、iguery语法)。 用到的工具:eclipse、MySQL

2020-04-24

2020考研党苦于毕业设计

发表于 2019-09-01 最后回复 2019-09-05

Deepin 系统与 win 10无法开机切换系统问题

发表于 2019-04-18 最后回复 2019-04-18

好像内存泄漏了

发表于 2019-03-20 最后回复 2019-03-22

VS2013炸了

发表于 2019-03-17 最后回复 2019-03-18

字符串指针的一个小问题

发表于 2019-03-11 最后回复 2019-03-13

学了几天了,还是有点问题,在这边问一下一道数据结构的哈夫曼哈夫曼树问题,不知道合不合适。

发表于 2019-03-06 最后回复 2019-03-06

C语言的一个指针问题

发表于 2019-01-22 最后回复 2019-02-04

新手求助:二叉树的递归删除

发表于 2019-01-30 最后回复 2019-01-31

二叉树的建立

发表于 2019-01-29 最后回复 2019-01-30

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

TA关注的人 TA的粉丝

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