自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(133)
  • 资源 (6)
  • 收藏
  • 关注

原创 面试官,请不要再问我MySQL InnoDB B+树底层原理了

文章目录1. InnoDB页结构2. InnoDB行格式3. InnoDB数据页结构4. B+树索引4.1 InnoDB中B+树索引原理4.2 聚镞索引4.3 如何正确使用索引呢?4.4 浅谈InnoDB的二级索引(辅助索引)以及联合索引等概念4.5 InnoDB中的页分裂参考只有学习底层原理才能变得更强1. InnoDB页结构InnoDB是用于将表中的数据存储到磁盘上的一款存储引擎。更大维度了解MySQL内部组成结构MySQL其实就是一款软件,可以分为客户端、服务器端以及引擎层。服务器端

2020-09-01 22:18:48 2614 1

原创 深入解读CompletableFuture源码与原理

1 前言最近在看公司源码,发现有些服务大量使用到了CompletableFuture,学了这么久Java,对这个类还是挺陌生的,实在惭愧。于是利用了业余时间认真学习并总结了下CompletableFuture的特性以及用法。2 正文CompletableFuture是JDK8中的心特性,主要用于对JDK5中加入的Future的补充。CompletableFuture实现了Completion...

2019-11-28 11:24:25 11983 7

原创 向Chat GPT提问:“作为一个Java后端开发工程师,在这个极度内卷的社会如何提升自己的竞争力?”

总之,要提高自己的竞争力,就需要不断学习、积累经验、不断提升自己的技术能力和综合素质。作为一个Java后端开发工程师,在这个极度内卷的社会如何提升自己的竞争力。向Chat GPT提问得出几个要点,非常有参考意义。

2023-04-13 10:02:40 316 1

原创 MacPro M1 搭建kafka2.8.0源码环境

MacPro M1搭建kafka2.8.0源码环境并调试

2023-02-17 00:42:26 678

原创 RocketMQ底层源码解析——事务消息的实现

RocketMQ事务消息原理分析

2023-02-11 23:37:50 946

原创 项目开发中代码风格以及规范总结(持续更新...)

文章目录前言1. 长函数2. 重复代码前言已经有小半年没有更新博客了,这小半年时间了完成了许多的人生大事,为2022年开了一个好头,忙完过后也该继续进行自己的技术沉淀、技术“修炼之路”。相信许多人都将技术学习放在第一位,疯狂的学习框架、技术、原理,但是不要忘了代码coding,工程能力也要跟上,本文将总结工作中的“代码异味”,时刻提醒自己规范代码风格,本文将持续更新,希望有同感的小伙伴留言共同讨论,共同进步。1. 长函数在实际工作中,对于代码的业务开发有点“平铺直叙”的感觉,即1. a做了什么,2

2022-01-17 17:09:49 345

原创 Git通过配置config维护多个账号,区分个人账号和公司账号

1. 生成多个不同的sshkey秘钥1.1 生成新的id_rsa公钥(个人)ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/id_rsa1.2 生成新的tc_pub公钥(公司)ssh-keygen -t rsa -C "[email protected]" -f ~/.ssh/tc_pub2. 在.ssh目录下新建一个config(无后缀文件)(.ssh目录一般在C:/Users/xxx/.ssh目录)# 个人accountHost

2021-10-09 16:52:13 1533

原创 【Netty源码分析一】初识Netty以及Netty线程模型

好久没在CSDN发表博客了,前端时间一直在研究学习中间件原理,经过一段时间的“艰难”地啃源码,算是理清了Netty的大致流程,接下来将开始Netty相关的源码分析文章系列,用于自己巩固Netty底层原理的知识,文中有描述不对或者理解错误之处,还望各位读者多多指教。1. 回顾BIO和NIOBIO流程图如下:BIO缺陷:BIO中,作为服务端开发,使用ServerSocket 绑定端口号之后会监听该端口,等待accept事件,accept是会阻塞当前线程;当我们收到accept事件的时候,程序就会拿

2021-08-16 11:16:23 258

原创 一篇文章彻底弄懂零拷贝底层原理

前言零拷贝是网络编程的关键,很多性能优化都离不开零拷贝,很多优秀的开源框架底层都用的零拷贝,如Netty、RocketMQ、Spark等正文1. 再看IO在深入零拷贝机制之前,先来了解下传统BIO通信底层发生了什么,为什么会这么“消耗资源”。Linux服务器是现在绝大多数系统的首选,它的优点就不再赘述,下面的分析都基于Linux环境来进行。作为一台服务器,最常见的功能就是获取客户端发送过来的请求,然后再去查数据库DB获取到想要的数据,再将数据以一定的业务逻辑处理后传回给客户端,这一过程主要会调用L

2021-02-27 09:35:32 1035 1

转载 SpringBoot 内部方法调用,事务不起作用的原因及解决办法

在做业务开发时,遇到了一个事务不起作用的问题。大概流程是这样的,方法内部的定时任务调用了一个带事务的方法,失败后事务没有回滚。查阅资料后,问题得到解决,记录下来分享给大家。场景我在这里模拟一个场景,大概的调用方式就如下面的代码这样。@Override@Transactional(rollbackFor = RuntimeException.class)public void insertUser(User user) { userMapper.insertUser(user); t

2021-01-07 14:26:04 3777

原创 【同程艺龙面经】一年Java开发经验面经(部门老大面)

公司:同程艺龙成都BU现场部门老大面之前的同程艺龙电话一面过了,然后通知到同程艺龙成都办公地点现场进行部门老大面,面经如下:你在项目中学习到了哪些?或者是遇到了哪些困难?怎么解决的?如何保证你的调用链路的稳定性?如何保证服务调用链路请求的幂等性?mq消息的幂等性如何保证?mq如何保证顺序消费?线程池创建有哪几种方式?线程池核心参数有哪些?线程池中拒绝策略有几种?分别说一下各自的作用?Redis都用到了哪些场景?除了缓存还有其他场景吗?缓存雪崩、穿透、击穿是什么?如何解决?对于穿透解

2020-09-06 09:28:39 1155 2

原创 【同程艺龙面经】一年Java开发经验面经

公司:同程艺龙成都BU电话面试大约1h直接上面经内容:请求响应断链如何解决?请求下单之后,网络断开了,我们这边请求没接收到下单的结果怎么办?重复出票怎么处理?重复下单怎么处理?分布式锁如何实现的?redis分布式锁和zk分布式锁有什么区别?redis分布式锁实现的话,setnx和expire命令,如果A线程将expire操作操作到了B线程了,也就是expire了另一个线程的资源,这种怎么避免?线程池是什么?Future是什么?有什么作用?线程池核心数是20个,最大线程数是40个,讲一下任

2020-09-03 10:07:57 1526 5

原创 【东信北邮成都研发中心】一年Java开发经验面经

记一年Java开发面经,公司为东信北邮成都研发中心,直接上面经:一面1h40min:线程池核心参数有哪些?线程池线程数该怎么分配?依据是什么?Future、FutureTask、Runnable、Callable有什么区别?你们线上处理数据的服务有多少台?分配了多少内存?你们系统中下单的时候为什么要用线程池?可以用其他的实现方案吗?搜索时延这么高,该如何进行优化?如何提高响应速度?如何优化以提升用户体验度?规定给出的并发量外,如果有额外的流量访问进来了,如何做熔断处理?Redis基础数据

2020-08-28 19:44:53 1731 3

原创 深入浅出SpringBoot源码——启动加载器

前言在SpringBoot中,启动加载器的作用是,当SpringBoot程序执行后立马需要执行其他回调程序时,就可以通过SpringBoot的启动类加载器来实现。正文1. CommandLineRunnerSpringBoot的CommandLineRunner是一个启动加载器的核心,CommandLinerRunner是一个接口,该接口定义如下:@FunctionalInterfacepublic interface CommandLineRunner { // 启动加载器的回调方法 v

2020-08-20 22:26:18 413

原创 深入浅出SpringSecurity和OAuth2(四)—— SecurityContextPersistenceFilter以及ExceptionTranslationFilter

前言相信了解过SpringSecurity或者是OAuth2的读者,会发现网上会有非常多的相关文章,或是纯概念的,或是带有demo的,无论是哪种类型的文章,本人去阅读之后,对于整个框架的概念还是一知半解,也仅仅是实现了某些功能、某些效果而已,若遇到某些问题时无从下手,只能去百度去Google。这是因为对于SpringSecurity和OAuth2的知识没有一个整体概念的把握,知识体系没有形成系统,遂决定写一个关于SpringSecurity和OAuth2的系列专栏,在建造自己知识体系的同时还希望能帮助有同

2020-08-19 11:58:00 632

原创 深入浅出SpringSecurity和OAuth2(三)—— WebSecurity建造核心逻辑

文章目录前言正文前言相信了解过SpringSecurity或者是OAuth2的读者,会发现网上会有非常多的相关文章,或是纯概念的,或是带有demo的,无论是哪种类型的文章,本人去阅读之后,对于整个框架的概念还是一知半解,也仅仅是实现了某些功能、某些效果而已,若遇到某些问题时无从下手,只能去百度去Google。这是因为对于SpringSecurity和OAuth2的知识没有一个整体概念的把握,知识体系没有形成系统,遂决定写一个关于SpringSecurity和OAuth2的系列专栏,在建造自己知识体系的同

2020-08-10 14:10:40 506

原创 深入浅出SpringSecurity和OAuth2(二)—— 安全过滤器FilterChainProxy

文章目录前言正文1. FilterChainProxy什么时候注入Spring容器中的2. springSecurityFilterChain()方法的作用3.前言相信了解过SpringSecurity或者是OAuth2的读者,会发现网上会有非常多的相关文章,或是纯概念的,或是带有demo的,无论是哪种类型的文章,本人去阅读之后,对于整个框架的概念还是一知半解,也仅仅是实现了某些功能、某些效果而已,若遇到某些问题时无从下手,只能去百度去Google。这是因为对于SpringSecurity和OAuth

2020-07-28 17:26:41 2289

原创 深入浅出SpringSecurity和OAuth2(一)—— 初识SpringSecurity

文章目录前言正文1. 初识SpringSecurity2. Spring Security项目核心jar包介绍3. SpringSecurity核心注解3.1 @EnableWebSecurity3.2 @EnableGlobalMethodSecurity总结参考前言相信了解过SpringSecurity或者是OAuth2的读者,会发现网上会有非常多的相关文章,或是纯概念的,或是带有demo的,无论是哪种类型的文章,本人去阅读之后,对于整个框架的概念还是一知半解,也仅仅是实现了某些功能、某些效果而已,

2020-07-27 10:26:48 2996 1

原创 实战电商后端系统(三)—— 以vue-element-admin为基础的前端项目对接后端接口

文章目录前言正文1. 项目初始化2. 精简项目3. 替换mock接口,对接后端接口3.1 修改/src/api/user.js3.2 修改项目中请求方式4. 效果展示参考相关文章前言本系统技术栈用到了Dubbo、Zookeeper、SpringBoot、Oauth2、Swagger、Nginx,项目刚开始起步,每完成一个大功能都会专门写一篇博文来记录技术细节以及遇到的技术难点,如项目中有哪些设计或者架构不太正确的地方,请大家在留言区中提出,互相学习~前两篇博文已经详细讲解了如何搭建项目基础架构以及My

2020-07-26 18:41:09 2900 3

原创 实战电商后端系统(二)—— 将OAuth2认证和权限信息存入MySQL数据库

文章目录前言正文一、关键表结构二、添加MySQL方式获取授权信息2.1 添加数据相关驱动以及插件依赖前言本系统技术栈用到了Dubbo、Zookeeper、SpringBoot、Oauth2、Swagger、Nginx,项目刚开始起步,每完成一个大功能都会专门写一篇博文来记录技术细节以及遇到的技术难点,如项目中有哪些设计或者架构不太正确的地方,请大家在留言区中提出,互相学习~上一章中,已经搭建好了项目的基础环境,则本文章则将OAuth2和MySQL集成起来,方便在认证和授权时能从MySQL数据库中读取c

2020-07-24 19:17:32 1100 1

原创 后端学习Vue系列之——Vuex

前言作为一个内心骚动想做点小系统的后端来说,学习Vue是过不去的一个坎,毕竟香嘛~遂写一篇博文用于记录在Vue中用的比较多的,且不容易记的知识点,方便自己在需要使用时能够查找到相关知识点以及如何快速使用。在基础篇中,已经介绍了关于Vuex中的一些基础知识点,下面就会陆续介绍Vuex中进阶的一些知识点,总结出来方便自己随时查阅。正文在官网上,对于Vuex的介绍为,Vuex是一个专为Vue.js应用程序开发的状态管理模式,说白了就是为了实现组件之间数据的共享。对于Vue来说,组件之间共享数据的方式:

2020-07-08 15:29:34 2852 2

原创 后端学习Vue系列之——基础知识总结篇

前言作为一个内心骚动想做点小系统的后端来说,学习Vue是过不去的一个坎,毕竟香嘛~遂写一篇博文用于记录在Vue中用的比较多的,且不容易记的知识点,方便自己在需要使用时能够查找到相关知识点以及如何快速使用。正文1. $emit方法$emit会申明一个事件的绑定,例如:..methods: { clickfun: function() { this.count++; // 自定义一个clicknow事件,就像click事件样。 this.$e

2020-07-03 18:41:26 617

原创 二进制运算以及源码、补码、反码概念讲解

前言在学习框架源码底层时,有非常多的二进制运算,由于大学学习计算机基础时抓梦脚(jio),没有学习牢固,所以在看底层源码的算法逻辑时遇到二进制运算比较吃力,遂通过一篇博文来总结下二进制运算,记录一下。正文1. 二进制基础因为计算机底层是通过二进制来进行计算的,所以在计算机底层会将十进制转换为二进制。十进制就是逢10进1,二进制就是逢2进1。就十进制来说,比如一百可以分为三位,个位、十位、百位, 用位数在下列表示 101这个十进制数。百位十位十位101因此对于十进

2020-07-01 13:58:38 3737 2

原创 深入浅出SpringBoot源码——监听器与事件机制

前言先看下Spring官方文档对于事件以及监听器的解释与说明。监听器官方说明总结起来就是几点:除了通常的Spring框架自带的事件例如:ContextRefreshedEvent,SpringApplication还会发送一些额外的事件。对于事件的监听,需要通过监听器来实现。在SpringBoot中,监听器可以通过三种方式来注册,① 通过SpringApplication.addListeners(…)② 通过SpringApplicationBuilder.listeners(…)③

2020-06-23 22:50:34 969 2

原创 实战电商后端系统(一)—— 项目搭建以及Dubbo+SpringBoot+Oauth2+Swagger2的集成

前言本系统技术栈用到了Dubbo、Zookeeper、SpringBoot、Oauth2、Swagger、Nginx,项目刚开始起步,没完成一个大功能都会专门写一篇博文来记录技术细节以及遇到的技术难点,如项目中有哪些设计或者架构不太正确的地方,请大家在留言区中提出,互相学习~光学习理论源码不动手实践是不得行的,阅读底层源码能力上来了,编码工程能力也要齐头并进!!正文1. 项目工程目录介绍先声明下版本:SpringBoot: 2.1.14.RELEASEDubbo: 2.6.2Zookeepe

2020-06-18 15:32:02 1648 3

原创 深入浅出SpringBoot源码——系统初始化器

前言前一章已经讲解了SpringBoot的SpringFactoriesLoader类的功能以及作用,即读取spring.factories文件中的工厂类,其中就包括了系统初始化器。在SpringBoot中,系统初始化器名称为ApplicationContextInitializer,它是一个接口,只定义了一个initialize方法。下面将详细介绍下SpringBoot的系统初始化器的原理以及作用,并且自定义一个系统初始化器,并在此基础上讲解下常见的使用场景。正文1. 初始ApplicationCo

2020-06-08 15:25:32 624 2

原创 深入浅出SpringBoot源码——SpringFactoriesLoader

前言 要想深入学习源码,那么就得先学会读懂它的注释,毕竟是一手知识嘛。大家都知道SpringBoot是一款多么优秀的框架,它给Java开发者带来了极大的便利,再也不用去整合SSM了,这里就不继续赞美SpringBoot了。相信大家都会很好奇SpringBoot底层源码是怎么运行的?它是怎么神奇的让我们可以快速开发JAVAEE企业级项目?如何快速整合第三方框架?接下来的深入学习SpringBoot源码系列,让我和各位小伙伴们一同学习SpringBoot底层源码。这里先学习下 SpringFactories

2020-06-05 14:21:13 717

原创 一篇文章快速深入学习ThreadLocal

前言最近开始空闲起来了,深入学习系列以及自我提升系列都得提上日程了。本次学习的ThreadLocal,是由JDK提供的一个用于存储每个线程本地副本信息的类,它的编写者就是著名的并发包大神Doug Lea。要想深入学习一个类,首先得先阅读它的官方类注释: * This class provides thread-local variables. These variables differ from * their normal counterparts in that each thread tha

2020-05-16 14:42:45 525

转载 深入分析 Java I/O 的工作机制

最近国内疫情已逐渐趋于稳定,我也要回归CSDN了,项目代码实操要跟上,专业知识原理的学习也不能落下。在学习Java IO工作机制时,发现一片写的非常好的博文,为了避免重复造轮子,遂拿来作为转载文章,以供自己学习。https://www.ibm.com/developerworks/cn/java/j-lo-javaio/Java 的 I/O 类库的基本架构I/O 问题...

2020-04-30 11:24:47 291

原创 SpringBoot+OAuth2+Google关联登录

前言最近公司需要将Google关联登录整合到项目的资源服务器中,但是其中遇到了很多坑,在这里记录一下。环境:操作系统:win7jdk版本:1.8IDEA:2019.2SpringBoot版本:2.1.6.RELEASESpring-cloud-starter-oauth2版本:2.1.0.RELEASE注意,要做Google关联登录,当然得先翻墙才行。正文一、关于oAuth2的...

2020-01-08 17:43:54 4390 3

原创 k8s集群kubectl实用命令

前言最近在一直学习k8s集群搭建以及k8s的组件学习,在学习过程中涉及非常多的kubectl命令,为了方便查阅,于是总结摘录到本博文中。正文1. 查询kubelet启动日志journalctl -xefu kubelet2. 查看kubelet日志journalctl -xeu kubelet3. kebectl的健康检查curl -k https://localhost:6443...

2019-12-06 16:22:19 998

原创 深入学习InnoDB可重复读隔离级别下如何避免幻读

一、InnoDB可重复读隔离级别下如何避免幻读在理解什么是幻读之前,先了解下脏读、幻读、不可重复读在实操场景中的现象。脏读:指的就是一个事务读取到了另一个事务还未提交的数据,当该事物将数据回滚,则读取到的就是脏数据。脏读造成的结果:事务拿着脏的数据(还未提交的数据,如果回滚了)去执行业务操作,会影响业务。脏读解决方案:将数据库事务隔离级别改为RC,所以事务只能读取到其他事务已经提交的数据。...

2019-10-25 12:30:05 3825 1

转载 JVM出现连续的FullGC该怎么办?

前言之前已经介绍了下使用GCeasy来通过图形化界面的形式分析GC日志,下面将转载一篇写的比较好的关于FullGC的文章,介绍了线上JVM连续出现FullGC的场景以及解决方案。转载文章FullGC是垃圾回收过程中一个非常重要的事件。当发生FullGC的时候,垃圾收集器为了回收更多的垃圾对象,它会从JVM的所有内存中回收垃圾(Young、Old、Perm、Metaspace)。FullGC有...

2019-09-25 18:39:44 3155

原创 一文学会使用GCeasy——一款超好用的在线分析GC日志的网站

前言打印出GC日志之后,就可以拿去GCeasy官网上进行GC可视化分析了。下文将详细讲解下GCeasy的图形化分析结果。(此次的GC分析,用的是ParallelGC的日志)进入GCeasy官网之后,选择需要导入的GC日志文件导入即可。正文JVM Heap Size这一部分分别使用了表格和图形界面来展示了JVM堆内存大小。如图所示:左侧分别展示了年轻代的内存分配分配空间大小(All...

2019-09-23 23:48:31 17306 4

原创 使用JProfiler和MAT打开内存超大的hprof文件时报错的解决方案

前言最近在排查公司线上BUG时,发现程序报OOM异常。在线上截取好了堆栈快照,然后下载hprof文件到本地用JProfiler或MAT打开,结果发现由于hprof有4G左右,JProfiler和MAT都无法打开hprof文件。正文在网上找到了MAT的解决方案,就是修改MAT目录下的MemoryAnalyzer.ini配置文件,修改为下列:-vmargs-Xmx4g然后再去启动MAT,...

2019-09-20 16:17:34 4450 4

原创 一篇文章让你快速弄清Java虚拟机的GC过程

前言要弄清Java虚拟机GC的整个过程,就得弄明白Java虚拟机用什么来进行GC?Java虚拟机在哪里GC?什么时候GC?GC什么?开门见山GC(Garbage Collection)垃圾收集,JVM一个非常重要的功能。本文将围绕着JVM的GC这个动作展开,来过一遍GC的整个运作过程。JVM用什么来进行GCJVM是GC的发起者,准确说是VMThread是GC的发起者,那用什么来进行GC呢...

2019-09-02 11:13:21 721

原创 深入学习SpringAOP源码(三)——揭开JDK动态代理和CGLIB代理的神秘面纱

前言版本:【Spring 5.1.4】、【SpringAOP 5.1.4】经过前两个章节的介绍,已经了解了Spring是如何注册解析AnnotationAwareAspectJAutoProxyCreator,然后AnnotationAwareAspectJAutoProxyCreator又是如何解析通知、创建代理,创建代理的目的又是什么呢?那么接下来本片文章将从深入解析源码的方式并借以《深入...

2019-08-26 18:38:58 600

原创 深入学习SpringAOP源码(二)—— 深入AnnotationAwareAspectJAutoProxyCreator

前言版本:【Spring 5.1.4】、【SpringAOP 5.1.4】经过博文深入学习SpringAOP源码(二)—— AnnotationAwareAspectJAutoProxyCreator的介绍之后,相信大家都了解到了AnnotationAwareAspectJAutoProxyCreator试如何被解析然后注册到SpringIOC中的。接下来开始深入学习AnnotationAwa...

2019-08-23 16:51:13 511

原创 深入学习SpringAOP源码(一)——注册AnnotationAwareAspectJAutoProxyCreator

前言版本:【Spring 5.1.4】、【SpringAOP 5.1.4】原本想从网上博客学下SpringAOP源码逻辑,结果都看的我一头雾水,知识点都是东一块西一块的,根本都无法了解到SpringAOP源码逻辑的来龙去脉。本人干脆自己通过断点的方式,从SpringAOP源码一步一步打断点来学习SpringAOP源码,并通过系列博文的形式记录一下自己对SpringAOP的理解与总结。下面来看...

2019-08-23 10:30:54 443

原创 【设计模式】从Spring源码中学习——策略模式

前言策略模式听起来高大上,吓退了很多初学小伙伴,下面就来揭开策略模式的神秘面纱,并看看在Spring源码中是如何应用到策略模式的。正文一、先看看初学者都会的多重if-else判断public int count(int num1, int num2, String operation) { if (operation.equals("+")) { return nu...

2019-08-01 16:51:23 1376

ideavim自定义配置文件.pdf

IDEAVIM的快捷键,每个功能键都是作者精心挑选的,希望能够帮助到大家。

2019-07-05

rabbitmqproducer.rar

基于springboot的rabbitmq可靠性投递实现方案,谈到消息的可靠性投递,无法避免的,在实际的工作中会经常碰到,比如一些核心业务需要保障消息不丢失等。

2019-05-15

Java Spring技术栈构建完整前后台团购网站视频教程附源码

Java Spring技术栈构建完整前后台团购网站视频教程附源码

2018-06-12

spin.min.js

spin js文件-spin.min.js,ajax请求loading加载图片显示。

2018-04-21

spring jar包、源码包

Spring jar包、源码包、doc包。方便所有spring的学习者。

2018-02-20

JSON的7个jar包

包括了commons-beanutils-1.7.0.jar、common-collections-3.2.1.jar等7个json相关的jar包

2017-10-28

空空如也

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

TA关注的人

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