自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

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

原创 如何从PostgreSQL中的Json数组中获取元素

如果我谈到上面的例子,我想获得属性"attrkey2"的值,以便在我的结果中显示.我知道它是一个数组,所以它可能与平常不同,例如我的数组的所有值都将作为一个不同的行,所以我可能必须编写子查询但不知道如何做.此外,我无法静态编写索引并从某个特定索引获取json元素的属性.我的查询将动态生成,所以我永远不会知道json数组中有多少元素.这是json数组,我想在我的结果中得到"attrkey3".为了从Json获得特定的密钥,我可以使用。类型列,它似乎是一个JSON数组(如你的例子).

2023-08-03 09:53:33 679 1

原创 【Activiti】一文搞定最强工作流引擎

工作流(Workflow),就是通过计算机对业务流程自动化执行管理。它主要解决的是“使在多个参与者之间按照某种预定义的规则自动进行传递文档、信息或任务的过程,从而实现某个预期的业务目标,或者促使此目标的实现”。Alfresco软件在2010年5月17日宣布Activiti业务流程管理(BPM)开源项目的正式启动,其首席架构师由业务流程管理BPM的专家 Tom Baeyens担任,Tom Baeyens就是原来jbpm的架构师,而jbpm是一个非常有名的工作流引擎,当然activiti也是一个工作流引擎。

2023-08-03 09:52:53 1315

原创 实现高并发秒杀的 7 种方式

三、四、五方式主要是数据库的锁来解决并发问题,方式三是利用for upate对表加行锁,方式四是利用update来对表加锁,方式五是通过增加version字段来控制数据库的更新操作,方式五的效果最差。六、七方式是通过队列来解决并发问题,这里需要特别注意的是,在代码中不能通过throw抛异常,否则消费线程会终止,而且由于进队和出队存在时间间隙,会导致商品少卖。利用阻塞队类,也可以解决高并发问题。经过测试,发现使用Disruptor队列队列,与自定义队列有着同样的问题,也会出现超卖的情况,但效率有所提高。

2023-05-12 13:08:59 666 1

原创 ureport2 打印导出按钮的显示与隐藏

在上面的工具栏中,一共有9个按钮,分别用于实现打印及导出其它格式报表, 在实际使用中,如果希望这个工具栏只出现其中某些个工具的话,我们可以参数在URL后面添加_t参数来实现,_t参数如果不指定,那么会显示所有的按钮,否则只显示_t参数指定的按钮。上面这些按钮的显示分别对应参数值:1、2、3、4、5、6、7、8、9,多个参数间用“,”分隔,下面是一些示例:示例说明_t=1,3显示第一个和第三个按钮。_t=1,2,3,4,5显示第一个,第二个,第三个,第四个和第五个按钮。

2023-04-20 11:35:03 776

原创 Maven 打包跳过测试的 5 种方法

平时开发时的工作的话之主要负责写代码就行了,什么发布项目啊,好吧不是我们干的事。在我们的了解中打包发布项目应该不是一个困难的问题。对,最简单的方法就行使用直接使用maven插件打包,甚至我们都不需要知道他是怎么实现的,插件能帮我们将项目打包为一个jar包,然后使用就能运行我们的项目。我们平时使用的在开发中使用的是开发或测试的数据库,和生产上面的一般是隔离的,意味着打包的时候需要激活生产的配置文件,但是我们不一定有访问生产库的权限,此时我们直接打包就会出现问题。

2023-04-19 14:03:25 1099

原创 Spring Boot 接口加解密

在我们日常的Java开发中,免不了和其他系统的业务交互,或者微服务之间的接口调用如果我们想保证数据传输的安全,对接口出参加密,入参解密。但是不想写重复代码,我们可以提供一个通用starter,提供通用加密解密功能接口相应数据的时候,返回的是加密之后的数据 接口入参的时候,接收的是解密之后的数据,但是在进入接口之前,会自动解密,取得对应的数据。

2023-04-19 13:56:12 1389

原创 分布式一致性机制

前言分布式中一致性是非常重要的,分为弱一致性和强一致性。现在主流的一致性协议一般都选择的是弱一致性的特殊版本:最终一致性。下面就从分布式系统的基本原则讲起,再整理一些遵循这些原则的协议或者机制,争取通俗易懂。但是要真正实施起来把这些协议落地,可不是一篇文章能说清楚的,有太多的细节,要自己去看论文呐(顺着维基百科找就行了)。

2023-04-07 11:25:36 329

原创 11 款顶级 MySQL 图形化工具

MySQL 是一个非常流行的小型关系型数据库管理系统,2008年1月16号被Sun公司收购。目前 MySQL 被广泛地应用在中小型 网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了 MySQL 作为网站数据库。MySQL 的管理维护工具非常多,除了系统自带的命令行管理工具之外,还有许多其他的图形化管理工具,工具好用是一方面,个人的使用习惯也很重要,这里介绍 11 款 MySQL 图形化管理工具,供大家参考。

2023-03-31 13:52:58 767

原创 Spring Boot 实现日志链路追踪

从文章标题就知道,这篇文章是介绍些什么。这是我一位朋友的问题反馈:好像是的,确实这种现象是普遍存在的。有时候一个业务调用链场景,很长,调了各种各样的方法,看日志的时候,各个接口的日志穿插,确实让人头大。模糊匹配搜索日志能解决吗?能解决一点点。但是不能完全呈现出整个链路相关的日志。那要做到方便,很显然,我们需要的是把同一次的业务调用链上的日志串起来。什么效果?先看一个实现后的效果图:这样下来,我们再配合模糊匹配查找日志,效果不就刚刚的了。或者。

2023-03-31 13:52:37 1242

原创 如何在千万级数据中查询 10W 的数据并排序

在开发中遇到一个业务诉求,需要在千万量级的底池数据中筛选出不超过 10W 的数据,并根据配置的权重规则进行排序、打散(如同一个类目下的商品数据不能连续出现 3 次)。下面对该业务诉求的实现,设计思路和方案优化进行介绍,对「千万量级数据中查询 10W 量级的数据」设计了如下方案多线程 + CK 翻页方案ES深翻页方案ES + Hbase 组合方案RediSearch + RedisJSON 组合方案本文从一个业务诉求触发,对「千万量级数据中查询 10W 量级的数据」介绍了不同的设计方案。

2023-03-31 13:47:42 848

原创 Spring Boot 分片上传、断点续传、大文件上传、秒传

文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。断点续传是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传或者下载未完成的部分,而没有必要从头开始上传或者下载。

2023-03-03 14:48:00 579

原创 一个跟蘑菇结缘的企业老板

销售部三个领导 2个业务员,伺候领导都伺候不过来。就跑到楼道大垃圾桶那里把蘑菇找回来。记得那是一个很久以前的一家公司了。记得当时董事长大声地在公司说。董事长办公室里中的大型盆栽。四五十个业务员裁的剩下两个。保洁阿姨被调到对面公司去了。董事长第二天来浇水的时候。因为阿姨是写字楼物业的人。我坐在工位上,差点笑出声。要不 公司会逐渐壮大。毕竟我是受过专业训练的。

2023-02-23 14:54:58 344

原创 致每一位软件人

用vue给你做了一件又一件鲜艳的外衣。我给你new了许许多多的小伙伴。再也不需要我半夜起来哄你入睡了。我们写的程序就像我们的孩子。孩子的成长离不开父母的养育。程序的成长离不开我们的维护。我不知在多少个凌晨哄你入睡。朝九晚五对我已经是一种奢望。给你建造了一座数据库大城堡。当第一行代码敲下的时候。为了让你的童年不在孤单。只是为了让你少调皮一些。愿你对得起我这几根头发。刚开始的你总是很调皮。你终于毕业走向了社会。愿你经受住社会的毒打。

2023-02-23 09:52:19 151

原创 多线程事务怎么回滚

1,最近有一个大数据量插入的操作入库的业务场景,需要先做一些其他修改操作,然后在执行插入操作,由于插入数据可能会很多,用到多线程去拆分数据并行处理来提高响应时间,如果有一个线程执行失败,则全部回滚。注解去控制事务,使出现异常时会进行回滚,在多线程中,这个注解则不会生效,如果主线程需要先执行一些修改数据库的操作,当子线程在进行处理出现异常时,主线程修改的数据则不会回滚,导致数据错误。可以发现子线程组执行时,有一个线程执行失败,其他线程也会抛出异常,但是主线程中执行的删除操作,没有回滚,测试结果:抛出异常,

2023-02-16 17:10:46 3492 1

原创 MySQL 中的 distinct 和 group by 哪个效率更高

在大多数例子中,DISTINCT可以被看作是特殊的GROUP BY,它们的实现都基于分组操作,且都可以通过松散索引扫描、紧凑索引扫描(关于索引扫描的内容会在其他文章中详细介绍,就不在此细致介绍了)来实现。例如以下两条sql(只单单看表格最后extra的内容),我们对这两条sql进行分析,可以看到,在extra中,这两条sql都使用了紧凑索引扫描。但从Mysql8.0开始,Mysql就删除了隐式排序,所以,此时在语义相同,无索引的情况下,子句,MySQL将保留一个NULL值,并删除其它的NULL值,因为。

2023-02-16 16:59:31 497

原创 MyBatis 插件 + 注解轻松实现数据脱敏

方法二:有方法一到出现对所有重大问题的影响,需要考虑到问题的出现,并且需要考虑可能出现的组员时添加数据的方法。在项目中需要对用户敏感数据进行脱敏处理,例如身份号、手机号等信息进行加密再入库。就是:一种最简单直接的方式,在所有涉及数据敏感的查询到对插入时进行密码加解密。Mybatis 的是通过拦截器实现的,Mabatis 支持对当事人进行拦截。定义特定注解,在切入时需要检查字段中是否包含注解来是否加解密。Mybatis插件的使用就是通过实现Mybatis中的。设置对参数中带有敏感参数字段的数据时进行加密。

2023-02-16 16:56:18 716 1

原创 为什么 MySQL 不推荐使用 join

但是问题来了,如果匹配到的数据量太大就不行了,也会导致返回的分页记录跟实际的不一样,解决的方法可以交给前端,一次性查询,让前端分批显示就可以了,这种解决方案的前提是数据量不太,因为sql本身长度有限。2.子查询就更别用了,效率太差,执行子查询时,MYSQL需要创建临时表,查询完毕后再删除这些临时表,所以,子查询的速度会受到一定的影响,这里多了一个创建和销毁临时表的过程。关联查询的好处是可以做分页,可以用副表的字段做查询条件,在查询的时候,将副表匹配到的字段作为结果集,用主表去in它。2.分布式的分库分表。

2023-02-16 16:47:00 744

原创 还在用 Xshell?你 out 了,推荐一个更现代的终端连接工具,好用到爆!

结果不是,它默认是新建一个针对本地电脑的终端窗口,比如如果你的电脑是windows 系统就会新建一个 cmd 控制窗口,如果是 macOs 系统就会新建一个 terminal。如果你想把服务器上的文件传输到本地电脑,你只需要找到服务器的文件,然后点击,就会弹出保存文件的提示。如果你想把本地电脑的文件放到服务器上,只需要把文件拖拽到对应的目录就行。所以,要想新建一个连接服务器的终端,要点击「Settings」,进入到配置页面。保存完后,就会出现刚新增的终端配置,然后点击运行的图标就可以了。

2022-11-18 15:26:48 185

原创 权限系统设计

RBAC 全称为用户角色权限控制,通过角色关联用户,角色关联权限,这种方式,间阶的赋予用户的权限,如下图所示对于通常的系统而言,存在多个用户具有相同的权限,在分配的时候,要为指定的用户分配相关的权限,修改的时候也要依次的对这几个用户的权限进行修改,有了角色这个权限,在修改权限的时候,只需要对角色进行修改,就可以实现相关的权限的修改。这样做增加了效率,减少了权限漏洞的发生。权限是资源的集合,这里的资源指的是软件中的所有的内容,即,对页面的操作权限,对页面的访问权限,对数据的增删查改的权限。举个栗子。

2022-11-18 15:20:06 411

原创 Nginx + Spring Boot 轻松实现负载均衡

在介绍Nginx的负载均衡实现之前,先简单的说下负载均衡的分类,主要分为,硬件负载均衡是使用专门的软件和硬件相结合的设备,设备商会提供完整成熟的解决方案,比如F5,在数据的稳定性以及安全性来说非常可靠,但是相比软件而言造价会更加昂贵;软件的负载均衡以Nginx这类软件为主,实现的一种消息队列分发机制。简单来说所谓的负载均衡就是把很多请求进行分流,将他们分配到不同的服务器去处理。

2022-11-18 15:08:28 944

原创 MyBatis 批量插入别再乱用 foreach 了,5000 条数据花了 14 分钟。。

从上述资料可知,耗时就耗在,由于我foreach后有5000+个values,所以这个PreparedStatement特别长,包含了很多占位符,对于占位符和参数的映射尤其耗时。所以,如果非要使用 foreach 的方式来进行批量插入的话,可以考虑减少一条 insert 语句中 values 的个数,最好能达到上面曲线的最底部的值,使速度最快。近日,项目中有一个耗时较长的Job存在CPU占用过高的问题,经排查发现,主要时间消耗在往MyBatis中批量插入数据。的方式来插入,可以提升性能的方式。

2022-11-18 15:04:40 270

原创 注解完美解决接口数据脱敏

下午惬意时光,突然产品小姐姐走到我面前,打断我短暂的摸鱼time,企图与我进行深入交流,还好我早有防备没有闪,打开点单页面,暗示没有一杯coffee解决不了的需求,需求是某些接口返回的信息,涉及到敏感数据的必须进行脱敏操作,我思考一反,表示某问题,马上安排。

2022-11-18 15:00:43 259

原创 Spring Cloud 轻松解决跨域

如果请求中设置的Origin的值与我们自己设置的是同一个,例如生产环境设置的都是自己的域名xxx.com或者开发测试环境设置的都是*(浏览器中是无法设置Origin的值,设置了也不起作用,浏览器默认是当前访问地址),那么可以选用。,而不是修改Gateway的配置文件。加载进来,作为handler返回,但在返回前,先进行CORS校验,获取配置后,交给corsProcessor去处理,即。去做的,这种做法,会从此filter开始,重新执行一遍它后面的其他filter,一般我们会添加一些认证或鉴权的。

2022-11-18 14:40:53 3172

原创 Nginx 限流的天坑

而页面上的 css、js 文件数量却达到了 8 个,如果在一秒之内加载完整个页面及附带的 8 个资源,那其他 4 个资源势必会被限流规则挡住,如果是 2 秒加载完就没问题(每秒 4、5 个)。也就是说,虽然我只向浏览器发起了一个请求,实际上是向服务器发起了 N 个请求,这和页面上引用到的 css、js 文件数量有关系,这些静态资源的请求也会纳入一个新请求。但这样可能又会影响所有的页面,包括接口,因为每个页面的资源文件数量是不同的,纯接口又是没有页面跳转的,也就不大可能会引用静态资源文件。

2022-09-28 10:59:56 221

原创 Nginx + keepalived 实现高可用 + 防盗链 + 动静分离

比如http://www.dbspread.com/download/av123.rmvb 这个视频下载地址被其他网站引用,比如在www.test.com的index.html引用download/av123.rmvb就叫盗链,我们要禁止这种引用就。区分开来,动静资源做好了拆分以后,我们就可以根据静态资源的特点将其做缓存操作,这就是网站静态化处理的核心思路。4). 修改nginx.conf的location, 匹配静态资源请求。在nginx的nginx.conf的server里面配置如下代码。

2022-09-28 10:57:32 644

原创 程序员坐牢了,继续被安排写代码。。

海南省琼海市嘉积镇的黄某某就是其中之一,他利用网上打麻将软件,开设赌场聚众赌博,两年多内赚取利润20万余元,参赌人员达到180人,总流水金额达到541万余元。所以,张工是提醒我,切记别忘了拖时间,把握好把柄。一看,好家伙,服务器没问题,内存给的很大,应该不是这方面的问题。后来,和朋友聊了聊才知道,我朋友把我的举报信发给了检察院,纪委,市长热线,等举报渠道,并且通过记者朋友进行了宣传,煽动舆论。陈工左右看了看,压低声音对我说:其实我也没指望这领导能给我多少好处,这领导一看就是个抠门精,只会画饼,不干实事。

2022-09-28 10:50:14 1059

原创 Spring Boot + Web Socket 打造实时监控异常

此异常非彼异常,标题所说的异常是业务上的异常。最近做了一个需求,消防的设备巡检,如果巡检发现异常,通过手机端提交,后台的实时监控页面实时获取到该设备的信息及位置,然后安排员工去处理。因为需要服务端主动向客户端发送消息,所以很容易的就想到了用WebSocket来实现这一功能。WebSocket就不做介绍了,上链接:前端略微复杂,需要在一张位置分布图上进行鼠标描点定位各个设备和根据不同屏幕大小渲染,本文不做介绍,只是简单地用页面样式进行效果呈现。绿色代表正常,红色代表异常。

2022-09-28 10:46:51 316

原创 Spring Boot + minio 实现高性能存储服务

引用官网:MinIO是根据GNU Affero通用公共许可证v3.0发布的高性能对象存储。它与Amazon S3云存储服务兼容。使用MinIO构建用于机器学习,分析和应用程序数据工作负载的高性能基础架构。

2022-09-28 09:39:16 291

原创 for 与 foreach 的区别

for与foreach都可以遍历数组/集合,不过for则在较复杂的循环中效率更高。foreach不可以删除/修改集合元素,而for可以foreach和for都可以修改元素里面的属性所以相比较下来for循环更为灵活。

2022-07-15 10:38:09 100

原创 order by limit 先排序再分页会导致数据丢失或者重复

category_name`varchar(64)CHARACTERSETutf8COLLATEutf8_general_ciDEFAULTNULLCOMMENT'分类名称',`sort`intDEFAULTNULLCOMMENT'分类排序',我的最终解决办法是,将排序字段添加索引,排序的时候走索引,使排序不走堆排序httpshttpshttpshttpshttps。...

2022-06-01 12:52:37 572

转载 activiti数据库表注释

Activiti 工作流总共包含 23 张数据表(现在是25张,新增了 ACT_EVT_LOG 和 ACT_PROCDEF_INFO )一、结构设计1、逻辑结构设计Activiti使用到的表都是ACT_开头的。表开头 说明 ACT_RE_* ’RE’表示repository(存储),RepositoryService接口所操作的表。带此前缀的表包含的是静态信息,如,流程定义,流程的资源(图片,规则等) ACT_RU_* ‘RU’表示runtime,运行时表-Runt

2022-05-16 10:22:27 1136 1

原创 跨域问题解决

当你遇到跨域问题,不要立刻就选择复制去尝试,请详细看完这篇文章再处理,我相信它能帮到你。分析前准备:前端网站地址:http://localhost:8080服务端网址:http://localhost:59200首先保证服务端是没有处理跨域的,其次,先用postman测试服务端接口是正常的​当网站8080去访问服务端接口时,就产生了跨域问题,那么如何解决?接下来我把跨域遇到的各种情况都列举出来并通过nginx代理的方式解决(后台也是一样的,只要你理解的原理)。跨域主要涉及4个

2022-03-29 11:44:10 1472

原创 nacos下载和安装使用

1.背景介绍nacos官网文档介绍:https://nacos.io/zh-cn/docs/what-is-nacos.html2.下载和安装使用本地开发可下载windows版本的nacos也可以在服务器部署,下载linux版本地址:https://github.com/alibaba/nacos/releases/tag/1.4.0下载后解压,进入nacos-server-1.4.0/nacos下,需要做一些配置:(1) 新建数据库新建一个实例名为nacos的数据库

2022-02-15 16:36:01 1941

原创 从生活角度解读微服务,通俗易懂

架构图是根据自己的理解,结合自己大学暑假实践绘制的微服务架构图,目前整体架构图还在慢慢改进,后期会更新图片,加入更多的自己理解的内容,如有大神路过,发现哪里有不对的,不吝指教!...

2021-12-20 17:21:57 672

原创 脑裂是什么?Zookeeper是如何解决的?

什么是脑裂脑裂(split-brain)就是“大脑分裂”,也就是本来一个“大脑”被拆分了两个或多个“大脑”,我们都知道,如果一个人有多个大脑,并且相互独立的话,那么会导致人体“手舞足蹈”,“不听使唤”。脑裂通常会出现在集群环境中,比如ElasticSearch、Zookeeper集群,而这些集群环境有一个统一的特点,就是它们有一个大脑,比如ElasticSearch集群中有Master节点,Zookeeper集群中有Leader节点。本篇文章着重来给大家讲一下Zookeeper中的脑裂问题,以及

2021-12-02 14:26:59 247

原创 springCloud五大核心组件介绍

Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智能路由,微代理,控制总线)。分布式系统的协调导致了样板模式, 使用Spring Cloud开发人员可以快速地支持实现这些模式的服务和应用程序。他们将在任何分布式环境中运行良好,包括开发人员自己的笔记本电脑,裸机数据中心,以及Cloud Foundry等托管平台。” -----来自官网。

2021-12-01 12:37:13 29294 16

原创 关于mysql处理百万级以上的数据时如何提高其查询速度的方法

1、应尽量避免在 where 子句中使用!=或<>操作符,否则将引擎放弃使用索引而进行全表扫描。2、对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引。3、应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如:select id from t where num is null可以在num上设置默认值0,确保表中num列没有null值,然后这样查询:select id f...

2021-12-01 10:29:52 2377

原创 单例模式总结

前言单例模式是面向对象的编程语言23种设计模式之一,属于创建型设计模式。主要用于解决对象的频繁创建与销毁问题,因为单例模式保证一个类仅会有一个实例。大部分对单例模式应该都知道一些,但面试的时候可能回答不会很完整,不能给自己加分,甚至扣分。单一的知识点并不能对自己在面试的时候带来加分,而系统的知识树则会让面试官另眼相看*,而本文会系统的介绍单例模式的基础版本与完美版本,基本上将单例模式的内容完全包括。如果认为有不同的意见可以留言交流。单例模式最重要的就是保证一个类只会出现一个实例,那么超过一个就不

2021-11-26 14:26:45 205

原创 git合并分支(一看就懂)

假如我们现在在dev分支上,刚开发完项目,执行了下列命令:git add .git commit -m '提交的备注信息'git push -u origin dev想将dev分支合并到master分支,操作如下:1、首先切换到master分支上git checkout master2、如果是多人开发的话 需要把远程master上的代码pull下来git pull origin master//如果是自己一个开发就没有必要了,为了保险期间还是pull

2021-11-26 14:00:22 153

原创 如果抛开 Spring,如何自己实现 AOP

读书读的是什么?是真正理解作者的思想,明白作者想歌颂什么、批判什么。框架学的是什么?不只是为了提高开发效率,而是在使用的时候,就像与设计者交流一样,能真正明白框架设计者的思想,才算用明白一款框架。如果我们都能做到这般,又何愁设计不出一款真正属于自己的框架呢?

2021-11-25 10:35:06 873

Linux安装java、maven、mysql、rabbitmq.docx

Linux安装java、maven、mysql、rabbitmq.docx

2021-07-16

空空如也

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

TA关注的人

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