日拱一兵

其他

猿猿有责,维持整洁的 Git 提交记录,三个锦囊送给你

log造成这个问题的根本原因就是随意提交代码。代码都提交了,那还有什么办法拯救吗?三个锦囊,就可以完美解决了善用
2021年11月22日
其他

Swagger 遇上 Torna,擦出了不一样的火花

Swagger作为一款非常流行的API文档生成工具,相信很多小伙们都在用!用多了可能会觉得它界面丑、功能弱。今天给大家推荐一款工具Torna,配合Swagger使用可以搭建界面漂亮、功能强大的API文档网站,希望对大家有所帮助!Torna简介
2021年11月18日
其他

看了这,计算任务执行时间你还 new Date() 吗?

在实践过程中,我们经常需要记录一个任务执行的耗时,这是评价代码好坏,评测代码性能,排查业务执行问题的重要操作。那么,你是如何来获取并计算任务执行耗时的呢?通过new
2021年11月15日
其他

工作多年,还只会用数据校验的皮毛?

接收这种方式需要在Controller层的每个接口方法参数中指定,Validator会将校验的信息自动封装到其中。这也是上面例子中一直用的方式。如下:@PostMapping("/add")
2021年11月11日
其他

三层缓存架构用 12 张图安排的明明白白

中了。我们再来看下其中的一种缓存结构:读写缓存。四、读写缓存读写缓存,顾名思义,就是既可以进行读,也可以进行写的缓存。读主要是给只读缓存来读取的。写主要是将缓存更新到自己的
2021年11月8日
其他

你真懂了?看完这 10 张图再说你会用ThreadPoolExecutor

:线程工厂,用来生产一组相同任务的线程。主要用于设置生成的线程名词前缀、是否为守护线程以及优先级等。设置有意义的名称前缀有利于在进行虚拟机分析时,知道线程是由哪个线程工厂创建的。handler
2021年11月4日
其他

这几个设计模式秀起来,工作中的 CRUD 不一样了

使用策略模式如何使用呢?我们借助spring的生命周期,使用ApplicationContextAware接口,把对用的策略,初始化到map里面。然后对外提供resolveFile方法即可。/**
2021年11月1日
其他

有了它,谁还写 Bean mapping 的代码啊?

平时做项目的时候,经常需要做PO、VO、DTO之间的转换。简单的对象转换,使用BeanUtils基本上是够了,但是复杂的转换,如果使用它的话又得写一堆Getter、Setter方法了。今天给大家推荐一款对象自动映射工具MapStruct,功能真心强大!关于BeanUtils
2021年10月28日
其他

分布式事务方案有多种,为何独爱阿里开源的Seata?

文章有点长,耐心看完,看完你还不懂分布式事务,欢迎来捶我......文章目录如下:什么是分布式事务?分布式对应的是单体架构,互联网早起单体架构是非常流行的,好像是一个家族企业,大家在一个家里劳作,单体架构如下图:但是随着业务的复杂度提高,大家族人手不够,此时不得不招人,这样逐渐演变出了分布式服务,互相协作,每个服务负责不同的业务,架构如下图:分布式架构因此需要服务与服务之间的远程协作才能完成事务,这种分布式系统环境下由不同的服务之间通过网络远程协作完成事务称之为分布式事务,例如用户注册送积分
2021年10月26日
其他

作为程序员,你还对代码怀着敬畏之心吗?

神秘邀请、童年游戏、秘密场所、456、刺激闯关、生存死亡。这些词,一听就是近期现象级网剧《鱿鱼游戏》。神秘邀请、代码游戏、秘密基地、1024、刺激闯关、真实自我。这些,属于程序员的代码游戏—《2021年83行代码挑战赛》。10.24-10.31🔥情开赛!前3关“剧照”元宇宙设定、剧本杀元素、游戏闯关玩儿法,在轻松趣味的科幻、悬疑设定下,让所有开发者来一场代码切磋,也给自己的算法/规约/安全/性能/重构能力做一次综合体检。除了情怀和硬核大“制作”,还有MacBook
2021年10月26日
其他

高手解决 Maven Jar 包冲突是有技巧的

这里基于Maven项目介绍几种场景下解决Jar冲突的方法:Maven默认处理:采用此种方法,要牢记Maven依赖调节机制的基本原则,路径最近者优先和第一声明优先;排除法:上面Maven
2021年10月25日
其他

有图有真相,ZooKeeper的选举机制和同步机制超详细讲解

前言zookeeper相信大家都不陌生,很多分布式中间件都利用zk来提供分布式一致性协调的特性。dubbo官方推荐使用zk作为注册中心,zk也是hadoop和Hbase的重要组件。其他知名的开源中间件中也都出现了zk的身影。有很多童鞋认识zk很久了,知道其基本理念,知道如何使用。但当面试时问到集群zk之间的选举和数据同步机制时,就陷入了盲区。其实很多的分布式中间件的选举和同步,都和zk有异曲同工之妙。这篇文章我就来重点聊下关于zk集群之间的选举和同步机制。ZK集群的部署首先我们来看下半数运行机制:集群至少需要三台服务器,且官方文档强烈建议使用奇数个服务器,因为zookeeper是通过判断大多数节点的的存活来判断整个服务集群是否可用的,比如3个节点,它的一半是1.5,向上取整就是2。挂掉了2个就是表示整个集群挂掉。而用偶数4个的话,挂掉2个也表示不是大部分存活,因此也会挂掉。所以用4台服务器的话
2021年10月21日
其他

讲真,你是没懂 volatile 的设计原理,所以不会用

写volatile的文章非常多,本人也看过许多相关文章,但始终感觉有哪里不太明白,但又说不上来说为什么。可能是过于追求底层实现原理,老想问一个为什么吧。而写这篇文章的目的很简单,就是突然之间明白了volatile为什么要这样设计了。好东西当然要拿出来分享了,于是就有了这篇文章。我们就从硬件到软件,再到具体的案例来聊聊volatile的底层原理,文章比较长,可收藏之后阅读。CPU缓存的出现
2021年10月20日
其他

阿里限流神器 Sentinel 夺命连环 17 问,你能坚持到第几个?

localhost:80804、新建一个测试接口下面新建一个测试接口,用于测试相关规则,如下:@RestController@RequestMapping("/sentinel")public
2021年10月18日
其他

一网打进,高并发中的 限流、熔断、降级、预热、背压

首先,我们需要明确一下这几个名词出现的场景:分布式高并发环境。如果你的产品卖相不好,没人鸟它,那它就用不着这几个属性。不需要任何加成,低并发系统就能工作的很好。分布式系统是一个整体,调用关系错综复杂,其中某个资源异常,大概率会造成级联故障。当系统处于超负荷的压力之下,容器或者宿主机,将表现的异乎寻常的脆弱。load飙升、拒绝响应,甚至于雪崩,造成的后果都比较严重。鉴于分布式系统病娇娘样式的反应,我们有各种手段来处理这些异常状况。接下来,我们将简要介绍一下这些场景,还有常用的手段。1.
2021年10月14日
其他

Java 18 种队列图解,还有比这更好的安排吗?

从原理图上理解BlockDequeBlockQueue满了,两端的Take操作被阻塞BlockingDeque满了BlockQueue为空,两端的Take操作被阻塞BlockQueue为空7.2
2021年10月12日
其他

IDEA 画图这么方便,就是搞定点语法的事,完全没难度

程序员在工作中,经常会有绘制时序图、流程图的需求,尤其是在写文档的时候。平时我们会选择ProcessOn这类工具来绘制,但有时候用代码来画图可能会更高效一点,毕竟没有比程序员更熟悉代码的了。今天给大家推荐一款画图工具PlantUML,可以配合IDEA使用,画图更高效!PlantUML简介
2021年10月9日
其他

相见恨晚,MVCC 这么理解,早就通关了

四大隔离级别为了解决并发事务存在的脏读、不可重复读、幻读等问题,数据库大叔设计了四种隔离级别。分别是读未提交,读已提交,可重复读,串行化(Serializable)。1.4.1
2021年10月8日
其他

错不了,5种微服务注册中心如何选型?这几个维度告诉你!

1、前言微服务的注册中心目前主流的有以下五种:ZookeeperEurekaConsulNacosKubernetes那么实际开发中到底如何选择呢?这是一个值得深入研究的事情,别着急,今天陈某就带大家深入了解一下这五种注册中心以及如何选型的问题。2、为什么需要注册中心?随着单体应用拆分,首当面临的第一份挑战就是服务实例的数量较多,并且服务自身对外暴露的访问地址也具有动态性。可能因为服务扩容、服务的失败和更新等因素,导致服务实例的运行时状态经常变化,如下图:商品详情需要调用营销、订单、库存三个服务,存在问题有:营销、订单、库存这三个服务的地址都可能动态的发生改变,单存只使用配置的形式需要频繁的变更,如果是写到配置文件里面还需要重启系统,这对生产来说太不友好了;服务是集群部署的形式调用方负载均衡如何去实现;解决第一个问题办法就是用我们用伟人说过一句话,没有什么是加一个中间层解决不了的,这个中间层就是我们的注册中心。解决第二问题就是关于负载均衡的实现,这个需要结合我们中间层老大哥来实现。3、如何实现一个注册中心?对于如何实现注册中心这个问题,首先将服务之间是如何交互的模型抽象出来,我们结合实际的案例来说明这个问题,以商品服务为例:当我们搜索商品的时候商品服务就是提供者;当我们查询商品详情的时候即服务的提供者又是服务的消费者,消费是订单、库存等服务;由此我们需要引入的三个角色就是:中间层(注册中心)、生产者、消费者,如下图:整体的执行流程如下:在服务启动时,服务提供者通过内部的注册中心客户端应用自动将自身服务注册到注册中心,包含主机地址、服务名称等等信息;在服务启动或者发生变更的时候,服务消费者的注册中心客户端程序则可以从注册中心中获取那些已经注册的服务实例信息或者移除已下线的服务;上图还多一个设计缓存本地路由,缓存本地路由是为了提高服务路由的效率和容错性,服务消费者可以配备缓存机制以加速服务路由。更重要的是,当服务注册中心不可用时,服务消费者可以利用本地缓存路由实现对现有服务的可靠调用。在整个执行的过程中,其中有点有一点是比较难的,就是服务消费者如何及时知道服务的生产者如何及时变更的,这个问题也是经典的生产者消费者的问题,解决的方式有两种:发布-订阅模式:服务消费者能够实时监控服务更新状态,通常采用监听器以及回调机制,经典的案例就是Zookeeper;主动拉取策略:服务的消费者定期调用注册中心提供的服务获取接口获取最新的服务列表并更新本地缓存,经典案例就是Eureka;对于如何选择这两种方式,其实还有一个数据一致性问题可以聊聊,比如选择定时器肯定就抛弃了一致性,最求的是最终一致,这里就不深入展开了,另外你可能还会说服务的移除等等这些功能都没介绍,在我看来那只是一个附加功能,注册中心重点还是在于服务注册和发现,其他都是锦上添花罢了。4、如何解决负载均衡的问题?负载均衡的实现有两种方式:服务端的负载均衡;客户端的负载均衡;
2021年9月27日
其他

Java 17了,还没玩转 Record 特性,代码看着就太臃肿了

17,而且不影响已有的项目。借着这个机会也对Record类进行了介绍和讲解,希望在你初次接触这种新定义的时候能够帮助你短小精悍,MySQL日志15连问,看完直接通关了2021-09-22
2021年9月24日
其他

短小精悍,MySQL日志15连问,看完直接通关了

层接收到SQL请求后,对其进行分析、优化、执行等处理工作,将生成的SQL执行计划发到InnoDb存储引擎层执行。InnoDb存储引擎层将a修改为1的这个操作记录到内存中。记录到内存以后会修改redo
2021年9月22日
其他

请 接 招! MySQL 灵魂 20 问(典藏版)

log文件中的日志,并解析成sql语句逐一执行;主从复制存在数据丢失问题的解决方案:在使用过程中需要开启半同步复制;主从复制的使用场景主要有以下两种:HA、读写分离。高可用(HA)架构:MySQL
2021年9月17日
其他

openFeign 夺命 9 连斩,你能 hold 住吗?

的@FeignClient可以解析SpringMVC的@RequestMapping注解下的接口,并通过动态代理的方式产生实现类,实现类中做负载均衡并调用其他服务。5、环境准备本篇文章Spring
2021年9月14日
其他

一网打进 Kafka 核心知识,敢说你没收藏吃灰?

也依然能够对外提供服务「备份机制」备份的思想很简单,就是把相同的数据拷贝到多台机器上,而这些相同的数据拷贝被称为副本定义了两类副本:领导者副本和追随者副本前者对外提供服务,这里的对外指的是与
2021年9月13日
其他

如此炫酷的写文档,B格一下就上来了

build命令可以将项目打包成静态文件,输出文件目录为docs/.vuepress/dist;接下来把dist目录下的所有文件复制到Nginx的html目录下即可完成部署,部署后显示内容如下。总结
2021年9月10日
其他

Spring 声明式事务用就完了,还学啥呢?

种失效场景,也不一定能覆盖到你可能踩到的坑。所以本文中,课代表将结合几个常见失效情况,从源码层面解释其失效原因。认真读完本文,相信你会对声明式事务有更深刻的认识。文中所有代码已上传至课代表的
2021年9月9日
其他

为所欲为,推荐一款高颜值的前后端分离脚手架

从零开始搭建项目,没有好用的脚手架怎么行!最近发现一款高颜值的前后端分离脚手架sa-plus,自带代码生成器,可一键生成前端、后端、API文档代码,推荐给大家!sa-plus简介
2021年9月6日
其他

不吃灰了,详解20道Redis经典面试题!

缩短时,不是回收多余的内存空间,而是free记录下多余的空间,后续有变更,直接使用free中记录的空间,减少分配。二进制安全:Redis可以存储一些二进制数据,在C语言中字符串遇到'\0'会结束,而
2021年9月2日
其他

玩王者荣耀,竟然让我深度理解了「主从架构」原理

前言玩过王者荣耀的同学,应该都知道里面有个英雄叫做镜,她释放技能时,会出现一个长相一模一样的分身,而且动作也是一样的。那么我们今天要讨论的主从架构原理其实就是多个节点中有一个作为本体,其他节点作为分身存在,但是本体和分身的数据都是一样的,数据总是保持一致,是不是和镜很相似呢?为了保证缓存的高可用,我们经常听到采用主从架构来保证高可用,那如何去理解主从架构核心原理呢?这次我们还是用最熟悉的
2021年9月1日
其他

从bio到nio到aio,再到响应式编程,你这么说我就懂了

要问计算机系统里,有哪些概念比较折腾人,nio绝对能算上一个。配合着多是异的网络编程,nio加上多线程一般能够完成双杀。Linux有5种常见的IO模型。其中,阻塞IO就是bio,IO复用就是nio,异步IO就是aio,我们本篇文章就聚焦于此。阻塞式IO
2021年8月30日
其他

开箱即用的微服务权限解决方案,你打几分?

我们将采用Nacos作为注册中心,Gateway作为网关,使用Sa-Token提供的微服务权限解决方案,此方案是基于之前的解决方案改造的,对这些技术不了解的朋友可以看下下面的文章。Spring
2021年8月25日
其他

写Java代码,顺带就看了Mysql的binlog,如何?

最近在工作中,遇到了这样一个业务场景,我们需要关注一个业务系统数据库中某几张表的数据,当数据发生新增或修改时,将它同步到另一个业务系统数据库中的表中。一提到数据库的同步,估计大家第一时间想到的就是基于binlog的主从复制了,但是放在我们的场景中,还有几个问题:第一,并不是需要复制所有表的数据,复制对象只有少量的几张表第二,也是比较麻烦的,两个业务系统数据库表结构可能不一致。例如,要同步数据库1的A表中的某些字段到数据库2的B表中,在这一过程中,A表和B表的字段并不是完全相同这样的话,我们只能通过代码的方式,首先获取到数据库1表中数据的变动,再通过手动映射的方式,插入到数据库2的表中。但是,获取变动数据的这一过程,还是离不开binlog,因此我们就需要在代码中对binlog进行一下监控。先说结论,我们最终使用了一个开源工具mysql-binlog-connector-java,用来监控binlog变化并获取数据,获取数据后再手动插入到另一个库的表中,基于它来实现了数据的同步。这个工具的git项目地址如下:https://github.com/shyiko/mysql-binlog-connector-java在正式开始前,还是先简单介绍一下mysql的binlog,binlog是一个二进制文件,它保存在磁盘中,是用来记录数据库表结构变更、表数据修改的二进制日志。其实除了数据复制外,它还可以实现数据恢复、增量备份等功能。启动项目前,首先需要确保mysql服务已经启用了binlog:show
2021年8月23日
其他

简单的Postman,还能玩出花?花到起飞呗

Postman是一款我们在工作中使用频率非常高的API调试工具,估计很多童鞋在使用它时也比较粗暴,填好接口地址、参数,直接send就完事了,估计大家要说了,这么简单的东西还能玩出什么花来。今天就和大家安利几个非常实用、但是可能一直被忽视的功能,用完之后,简直不要太香!环境变量我们通过一个例子来看一下环境变量的用法,在一个项目的生命周期中,可能会有开发环境、测试环境、预上线环境、线上环境等众多的不同环境,这时候就可以通过环境变量来管理接口的地址以及端口。点击左侧的Environments,系统中默认已经存在了一个Globals的全局环境,在这里可以存放一些通用的公共变量的值。先在这里写入host和port信息:在需要使用变量时,可以在访问接口时使用双大括号包裹变量,以{{variable}}的方式进行引用:除了默认的全局环境外,也可以自己创建新的环境来存放变量。在下面的例子中,创建了local和test两个环境,这样我们可以直接在两个环境间进行切换激活,简化了开发中测试接口的过程,不再需要频繁的改动接口的地址。如果激活的环境和全局环境中有名称重复的变量,那么当前激活的环境中的变量具有更高的优先级,它会直接覆盖globals环境中变量的值:在上面,我们将环境变量分为了两类,普通环境变量和全局变量。总的来说,全局变量具有更高的使用范围,即使切换到自己创建的环境,全局变量仍然可用。但是我们自己创建的环境之间是相互隔离的,如果切换到一个环境,那么其他环境中的变量将不再可用。像上面这样手动写入变量的值,在某些时候可能不太方便满足一些需求,因此postman提供了一种方法,允许使用脚本来改变环境变量的值。我们来看一下发送请求中的Pre-request
2021年8月18日
其他

值得拥有!吊炸天的可视化安全框架,轻松搭建自己的认证授权平台!

之前我们在学习Oauth2的时候,需要通过写代码来实现认证授权服务。最近发现一款可视化的安全框架Keycloak,只需几个命令就可以快速搭建认证授权服务,无需自行开发。原生支持SpringBoot,使用起来非常简单,推荐给大家!简介
2021年8月16日
其他

Gitlab 的 CI/CD 功能,贼带劲!

-f。这实际上不是强制性的,但我想删除服务器上所有未使用的镜像。拉取最新版本的Docker镜像(该镜像是在上一个阶段中构建并推送的)。最后,使用以下命令运行Docker镜像:docker
2021年8月11日
其他

面试不怂,2W字!梳理50道经典计算机网络面试题(收藏版)

在交互过程中如果数据传送完了,还不想断开连接怎么办,怎么维持?这个问题记住keep-alive就好,也就是说,在HTTP中响应体的Connection字段指定为keep-alive即可10.
2021年8月9日
其他

Redis 多线程模型解读,一张图就懂了

读取客户端请求命令并解析,却没有真正去执行命令。所有客户端命令最后还需要回到主线程去执行,因此对多核的利用率并不算高,而且每次主线程都必须在分配完任务之后忙轮询等待所有
2021年8月4日
其他

五十五张图告诉你微服务的灵魂摆渡者Nacos究竟有多强?

前言Nacos是阿里巴巴开源的服务注册中心以及配置中心,致力于给开发者提供一款便捷、简单上手的开源框架。Nacos究竟有什么惊人的地方呢?看下图:从上图不难看出阿里巴巴的野心,一个Nacos干掉了Spring
2021年8月2日
其他

单例模式,关键字级别详解,面试官都快问吐了

是静态内部类,当外部类Singleton被加载的时候并不会创建任何实例,只有当Singleton.getInstance()被调用的时候,才会创建Singleton实例,这一切由
2021年8月2日
其他

干掉 Postman?测试接口直接生成API文档,这个工具我爱了

前几天粉丝群有小伙伴问,有啥好用的API文档工具推荐,无意间发现了一款工具,这里马不停蹄的来给大家分享一下。ShowDoc一个非常适合团队的在线API文档工具,也支持用docker自建文档服务,不过为了方便演示,我直接用了平台在线服务。官网地址:https://www.showdoc.com.cn/item/index可以使用markdown语法来写API文档、数据字典文档、技术文档、在线excel文档。但像我这种资深的懒人程序员,其实更看重的是showdoc的自动化生成文档的特性,它可以从代码注释中自动生成API文档,或者搭配RunApi客户端(类似postman的api调试工具)一边调试接口、一边自动生成文档。下边从头演示下,来瞅瞅这玩意好用在哪?主页初识
2021年7月28日
其他

花钱上自习,你会这么做吗?

背景各种事情夹杂在一起,身心疲惫,躺在床上的下一秒,就已呼呼大睡忙的杂乱无章,忙的没有方向,看似很忙,却感觉什么也没收获到。我知道我需要一点独处的空间,静静地思考寻找空间这个空间要去哪里找?在寻找空间之前,我梳理了一下我的需求:安静
2021年7月26日
其他

十个形象比喻,助你理解计算机面试必备的知识点

1.如何理解HTTP的无状态?每次HTTP请求都是独立的,无相关的,默认不需要保存上下文信息的。我们来看个便于理解的例子:有状态:A:今天吃啥子?B:罗非鱼!A:味道怎么样呀?B:还不错,好香。无状态:A:今天吃啥子?B:罗非鱼!A:味道怎么样呀?B:?啊?啥?什么鬼?什么味道怎么样?加下cookie这玩意:A:今天吃啥子?B:罗非鱼A:你今天吃的罗非鱼味道怎么样呀?B:还不错,好香。2.
2021年7月26日
其他

给你一个亿的keys,Redis如何统计?

前言不知你大规模的用过Redis吗?还是仅仅作为缓存的工具了?在Redis中使用最多的就是集合了,举个例子,如下场景:签到系统中,一天对应一系列的用户签到记录。电商系统中,一个商品对应一系列的评论。交友系统中,某个用户的一系列的好友。Redis中集合的特点无非是一个Key对应一系列的数据,
2021年7月22日
其他

终于理解 Spring Boot为什么如此青睐 HikariCP了,这图太透彻

工作中很多时候都是需要自定义的,我司虽然也是用的普罗米修斯监控,但是因为HikariCP原生的普罗米修斯收集器里面对监控指标的命名并不符合我司的规范,所以就自定义了一个,有类似问题的不妨也试一试。🍁
2021年7月20日
其他

Dubbo用了这么久,异常处理的最佳实践是什么?

在日常业务开发过程中,我们为了让业务代码更健壮,遇到错误时返回的提示更友好,一般会自定义一些业务异常。根据业务需要,分为自定义受检异常和非受检异常知识点回顾Exception类及其子类,但不包括
2021年7月14日
其他

高速流水线,Jenkins Shared Pipeline

就已经不是问题了,如果你项目中有类似需要优化的情况,撸起袖子干吧,做可以帮组内成员省力气的事情,都是加分项哦......面霸:从Redis高频问题透视核心原理2021-07-07
2021年7月12日
其他

面霸:从Redis高频问题透视核心原理

开始,网络断了之后,主从库会采用增量复制的方式继续同步。增量复制:用于网络中断等情况后的复制,只将中断期间主节点执行的写命令发送给从节点,与全量复制相比更加高效。断开重连增量复制的实现奥秘就是
2021年7月7日
其他

动态代理总结,面试你要知道的都在这里,无废话!

前言面试题:讲讲jdk动态代理,cglib区别,实现原理,优缺点,怎么实现方法的调用的代理模式代理模式是一种设计模式,提供了对目标对象额外的访问方式,即通过代理对象访问目标对象,这样可以在不修改原目标对象的前提下,提供额外的功能操作,扩展目标对象的功能一个比方:在租房的时候,有的人会通过房东直租,有的人会通过中介租房。这两种情况哪种比较方便呢?当然是通过中介更加方便。这里的中介就相当于代理,用户通过中介完成租房的一系列操作(看房、交押金、租房、清扫卫生)代理模式可以有效的将具体的实现与调用方进行解耦,通过面向接口进行编码完全将具体的实现隐藏在内部。分类:静态代理:
2021年7月5日
其他

看第一张图,你会爱上这全新一代API网关吗?

Token访问路由接口,会返回401,接口地址:http://192.168.5.78:9080/auth/在请求头Authorization中添加JWT
2021年7月5日
其他

10个解放双手的 IDEA 插件,节省下来的时间摸鱼不好吗?

API的调试,可以清晰的看到每一步操作数据的变化过程。easy_javadoceasy_javadoc一个可以快速为Java的类、方法、属性加注释的插件,还支持自定义注释样式,IDEA自身的Live
2021年6月28日