- 博客(166)
- 收藏
- 关注
原创 Git 你只会 pull 和 push?这 5 条命令可以提高效率的!
Git 你只会 pull 和 push?这 5 条命令可以提高效率的!
2024-07-17 22:05:32 658 1
原创 高性能必杀技:Java中的池化技术
作为一名Java开发人员,池化技术或多或少在业务代码中使用。常见的包括线程池、连接池等。也是因为Java语言超级丰富的基建,基本上这些池化能力都有着相对成熟的“工具”。比如,需要使用线程池的时候常常会选择Spring提供的,工具内部替我们维护了线程的生命周期与任务的状态变化。
2024-07-15 20:57:47 319
原创 实时消息推送系统,写得太好了!
websocket 协议是在 http 协议上的一种补充协议,是 html5 的新特性,是一种持久化的协议。其实 websocket 和 http 关系并不是很大,不过都是属于应用层的协议。关于更多概念大家可以参考下面文章讲述的很详细,接下来我们就开始实战。
2024-07-09 20:06:59 552
原创 接口不能对外暴露怎么办?
在业务开发的时候,经常会遇到某一个接口不能对外暴露,只能内网服务间调用的实际需求。面对这样的情况,我们该如何实现呢?将对外暴露的接口和对内暴露的接口分别放到两个微服务上,一个服务里所有的接口均对外暴露,另一个服务的接口只能内网服务间调用。该方案需要额外编写一个只对内部暴露接口的微服务,将所有只能对内暴露的业务接口聚合到这个微服务里,通过这个聚合的微服务,分别去各个业务侧获取资源。该方案,新增一个微服务做请求转发,增加了系统的复杂性,增大了调用耗时以及后期的维护成本。
2024-07-08 22:08:59 848
原创 Spring Boot + liteflow 居然这么好用!实战
在我们的日常开发中,经常会遇到一些需要串行或并行处理的复杂业务流程。那我们该如何利用结合liteflow规则引擎来简化我们的业务流程先看一个实战案例!!在电商场景下,当订单完成后,我们需要同时进行积分发放和消息发送。这时候,我们可以利用liteflow进行规则编排,处理这些并行任务。
2024-07-06 09:37:39 394
原创 想要打造超高性能的接口API?试试这12条小技巧。
提供了一种优雅而强大的方式来处理并发请求和任务。然而,正如在处理高并发时使用过多的线程会导致资源浪费和效率下降一样,使用过多的也会导致同样的问题。这种现象被称为 "线程调度问题",它会导致性能下降和吞吐量下降(P99 值较高)。因此,我们需要在使用时考虑实际场景和负载情况,并根据需要使用恰当的技术来优化性能。
2024-07-02 21:50:19 942
原创 如何优雅的将设计模式运用到实际项目中去?
*** 支付*/@OverrideSystem.out.println("支付宝支付...");@OverrideSystem.out.println("微信支付...");@OverrideSystem.out.println("银联支付...");/*** 支付策略枚举*/@Getter设计模式(Design pattern) 代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。
2024-07-01 19:54:29 652
原创 SpringBoot 实现热插拔 AOP解决日志开关需求!!
包括 “around”, “before” and “after 等 Advice,大体上分为了三类:BeforeAdvice、MethodInterceptor、AfterAdvice。“通知者”,它持有 Advice,是 Spring AOP 的一个基础接口。本文实现热插拔AOP就在于对advice、advised、advisor、pointcut概念的理解,这是实现热插拔AOP的前提。,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!
2024-06-30 17:16:37 360
原创 多级校验、工作流,这样写代码才足够优雅!
表示处理器抽象类,负责抽象处理器行为。其有3个子类,分别是:NullValueCheckHandler:空值校验处理器PriceCheckHandler:价格校验处理StockCheckHandler:库存校验处理器AbstractCheckHandler 抽象类中,
2024-06-26 19:38:14 688
原创 写了一个责任链模式,bug 无数...
既然每个关卡中都有下一关的成员变量并且是不一样的,那么我们可以在关卡上抽象出一个父类或者接口,然后每个具体的关卡去继承或者实现。如何解决这个问题,我们可以通过链表将每一关连接起来,形成责任链的方式,第一关通过后是第二关,第二关通过后是第三关....这种代码不仅冗余,并且当我们要将某两关进行调整时会对代码非常大的改动,这种操作的风险是很高的,因此,该写法非常糟糕。设计模式确实是一门艺术,仍需努力呀!实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
2024-06-24 20:42:57 363
原创 微服务改造启动多个 SpringBoot 的陷阱与解决方案
在系统运行了一段时间后,业务量上升后,生产上发现java应用内存占用过高,服务器总共64G,发现每个SpringBoot占用近12G的内存,我们项目采用微服务架构,有多个springboot应用。一下子内存就不够用了,springboot出现假死了。可以看到内存基本被使用完了,为什么Java程序会占用这么大内存呢?
2024-06-22 11:10:11 656
原创 别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!
别再手动拼接 SQL 了,MyBatis 动态 SQL 写法应有尽有,建议收藏!
2024-06-20 20:24:54 739
原创 封装一个工具类,拒绝重复代码!
为了简化开发过程并提高代码的可维护性,我们可以创建一个统一的工具类来处理这些需求。在本文中,我将介绍如何使用SpringBoot创建一个返回多级菜单、多级评论、多级部门、多级分类的统一工具类。数据库设计「主要是介绍是否需要tree_path字段。多级节点的数据库大家都知道,一般会有id,parentId字段,但是对于tree_path字段,这个需要根据设计者来定。优点:如果你对数据的读取操作比较频繁,而且需要快速查询某个节点的所有子节点或父节点,那么使用tree_path字段可以提高查询效率。
2024-06-18 20:50:23 292
原创 再也不怕离职同事泄露配置文件的密码了
用法其实很简单,不得不说这个工具很实用。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!
2024-06-17 20:33:43 229
原创 用Stream代码丑爆了?那是姿势不对,别瞎喷
stream和parallelStream的简单区分:stream是顺序流,由主线程按顺序对流执行操作,而parallelStream是并行流,内部以多线程并行执行的方式对流进行操作,但前提是流中的数据处理没有顺序要求。Java 8 是一个非常成功的版本,这个版本新增的Stream,配合同版本出现的 Lambda ,给我们操作集合(Collection)提供了极大的便利。Stream将要处理的元素集合看作一种流,在流的过程中,借助Stream API对流中的元素进行操作,比如:筛选、排序、聚合等。
2024-06-16 22:13:04 773
原创 Spring Boot结合Netty,WebSocket消息推送轻松搞定
Component/*** 一旦连接,第一个被执行*/@Overridelog.info("有新的客户端链接:[{}]", ctx.channel().id().asLongText());// 添加到channelGroup 通道组/*** 读取数据*/@Overridelog.info("服务器收到消息:{}", msg.text());// 获取用户ID,关联channel// 将用户ID作为自定义属性加入到channel中,方便随时channel中获取用户ID。
2024-06-13 22:10:31 213
原创 40个小细节,轻松告别“辣鸡“代码,性能起飞~
在JAVA程序中,性能问题的大部分原因并不在于JAVA语言,而是程序本身。养成良好的编码习惯非常重要,能够显著地提升程序性能。
2024-06-09 10:31:33 693
原创 一万八千条线程,线程为啥释放不了?
其实这个算比较低级的错误,很简单的并发问题,但是一不注意就容易写出来。但是排查难度挺高的,因为大量的线程都是没有我们一点业务代码堆栈,根本不知道线程是从哪里创建出来的,和以往的排查方法算是完全不同。这次是属于运气爆棚然后找到的代码,排查完问题我也想过,有没有其他的方法来定位这么多相同的线程是从哪里创建出来的呢?我试着用内存快照去定位,确实有一点线索,但是这属于是马后炮了,是我先读过源码才知道内存快照可以定位到问题,有点从结果来推过程的意思,没啥好说的。
2024-06-08 10:09:24 794
原创 在多支付渠道中这个设计模式无敌好用!
PS:我们通过定义支付策略接口及其实现类、创建支付上下文类、订单类以及订单服务类,实现了对不同支付方式的灵活管理和调用。,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!除了基本的支付逻辑,还展示了如何通过Spring框架自动加载和管理支付策略,进一步增强了灵活性和可扩展性。通过策略模式来实现,管理不同的支付方式,并根据需求快速添加新的支付方式。最后说一句(求关注!
2024-06-04 22:51:22 262
原创 Spring Boot API 编写的十个最佳实践,你知道几个?
这些最佳实践其实很简单,但很多人平时并不太注意。最后说一句(求关注!别白嫖!woniuxgg,在公众号中回复:笔记 就可以获得蜗牛为你精心准备的java实战语雀笔记,回复面试、开发手册、有超赞的粉丝福利!
2024-06-03 22:16:16 888
原创 Spring 定时任务与 XXL-JOB 灵活切换方案
在使用XXL—JOB的实现定时任务过程中,有时候可能由于部署环境的要求,就只能用Spring自带的实现方式。所以为了通用性和灵活性,突发奇想地看看能不能实现在不修改原本Spring定时任务代码的前提下,通过配置灵活控制定时任务具体的实现,同时任务的日志的管理也要同步进行切换。
2024-06-02 22:11:36 664
原创 SpringBoot + 虚拟线程,性能炸裂!
虚拟线程是Java19开始增加的一个特性,和Golang的携程类似,一个其它语言早就提供的、且如此实用且好用的功能,作为一个Java开发者,早就已经望眼欲穿了。从上面的性能对比来看,虚拟线程在性能方面有明显的优势,但是要注意的是,我们上面的测试都是让线程等待了50ms,这是模拟什么场景?没错,是IO密集型场景,即线程大部分时间是在等待IO,这样虚拟线程才可以发挥出它的优势,如果是CPU密集型场景,那么可能效果并不大。
2024-05-30 23:37:36 915
原创 请求合并的3种技巧,性能起飞!
工作中,我们常见的请求模型都是”请求-应答”式,即一次请求中,服务给请求分配一个独立的线程,一块独立的内存空间,所有的操作都是独立的,包括资源和系统运算。我们也知道,在请求中处理一次系统 I/O 的消耗是非常大的,如果有非常多的请求都进行同一类 I/O 操作,那么是否可以将这些 I/O 操作都合并到一起,进行一次 I/O 操作,是否可以大大降低下游资源服务器的负担呢?最近我工作之余的大部分时间都花在这个问题的探究上了,对比了几个现有类库,为了解决一个小问题把。
2024-05-29 22:08:31 570
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人