- 博客(43)
- 收藏
- 关注
原创 一张长图透彻理解SpringBoot 启动原理,架构师必备知识,不为应付面试!
下图代码说明了,Spring在初始化全部 单例Bean以后,会执行 SmartInitializingSingleton 接口。SpringBoot 会在Spring完全启动完成后,才开启Http流量。这给了我们启示:应该在Spring启动完成后开启入口流量。Rpc和 MQ流量 也应该如此,所以建议大家在 SmartLifecype 或者 ContextRefreshedEvent 等位置 注册服务,开启流量。
2024-06-22 17:47:14
933
原创 优雅!优化if-else代码的八种方案
如果if-else代码块包含return语句,可以考虑通过提前return,把多余else干掉,使代码更加优雅。if(!return;
2024-06-20 11:29:39
405
1
原创 10 个优化技巧,减少 Docker 镜像大小
Docker 是一种容器引擎,可以在容器内运行一段代码。Docker 镜像是在任何地方运行您的应用程序而无需担心应用程序依赖性的方式。要构建镜像,docker 使用一个名为 Dockerfile 的文件。Dockerfile 是一个包含许多指令(RUN、COPY、EXPOSE 等)的文件。成功执行这些命令后,docker 将创建一个镜像供我们在任何地方使用。
2024-01-20 16:23:13
863
原创 面试官:宕机了,Redis 如何避免数据丢失?
如果有人问你:“你会把 Redis 用在什么业务场景下?我想你大概率会说:“我会把它当作缓存使用,因为它把后端数据库中的数据存储在内存中,然后直接从内存中读取数据,响应速度会非常快。没错,这确实是 Redis 的一个普遍使用场景,但是,这里也有一个绝对不能忽略的问题:「一旦服务器宕机,内存中的数据将全部丢失」。目前,Redis 的持久化主要有两大机制,即 「AOF(Append Only File)日志和 RDB(Redis DataBase) 快照」。
2024-01-17 16:08:10
865
原创 谈谈Spring中Bean的生命周期?(让你瞬间通透~)
Spring中Bean的生命周期就是Bean在Spring中从创建到销毁的整个过程。实例化设置属性:进行Bean的注入和装配初始化使用Bean销毁Bean这五步构成,并且任何顺序都不可以随意调换。Bean的执行流程属于常见面试题,一定要在理解的基础上牢记!
2024-01-05 17:43:34
935
原创 Spring Event 别瞎用!从我司的悲剧中,我总结了6 条最佳实践
今天我们重点聊聊使用 Spring Event 最为关键的几个问题。这是我司线上生产环境实际踩坑后,总结的极为宝贵的经验!Spring Event框架实现了基于事件的发布订阅机制。开发者可以自定义事件,在某些业务场景发布事件,Spring 会将该事件广播给监听该事件的监听者。监听者可以实现Spring 的监听者接口 ApplicationListener注册自己,也可以使用 EventListener注解注册自己。
2024-01-05 17:13:51
916
原创 如何在SpringBoot中优雅地重试调用第三方API?
Spring Retry是Spring框架提供的一个模块,它通过提供注解或编程方式的方式,帮助我们实现方法级别的重试机制。在Spring Boot中,可以很方便地集成并使用Spring Retry。在Spring Boot项目中,通过集成Spring Retry模块,我们可以优雅地实现对第三方API调用的重试机制。通过@Retryable注解,我们能够很方便地在方法级别上添加重试策略。同时,异步方法和异常类型的支持使得我们能够更灵活地应对不同的业务场景。
2024-01-05 14:40:50
1109
原创 SpringBoot 中实现订单30分钟自动取消的策略
在电商和其他涉及到在线支付的应用中,通常需要实现一个功能:如果用户在生成订单后的一定时间内未完成支付,系统将自动取消该订单。本文将详细介绍基于Spring Boot框架实现订单30分钟内未支付自动取消的几种方案,并提供实例代码。方案一:定时任务利用Spring Boot中的@Scheduled注解,我们可以轻松地实现定时任务。该任务将周期性地扫描数据库,检查未支付的订单,如果订单生成30分钟未支付,则自动取消。方案二:延迟队列。
2024-01-05 14:23:22
1027
原创 阿里面试:redis 为什么把简单的字符串设计成 SDS?
空间预分配策略用于优化SDS字符串增长操作,当修改字符串并需对SDS的空间进行扩展时,不仅会为SDS分配修改所必要的空间,还会为SDS分配额外的未使用空间free,下次再修改就先检查未使用空间free是否满足,满足则不用在扩展空间。而我们开发中使用redis,往往会经常性的修改字符串的值,这个时候就会用SDS来表示字符串的值了。这时候键值对的键和上边一样,还是一个由SDS实现的字符串对象,键值对的值是一个包含两个字符串对象的列表对象了,而这两个对象的底层也是由SDS实现。
2024-01-04 19:39:12
1167
1
原创 面试官:Spring在多线程环境下如何确保事务一致性
如果我希望将步骤1和步骤2并行执行,然后确保步骤1和步骤2执行成功后,再执行步骤3,等到步骤3执行完毕后,再提交全部事务,这个需求该如何实现呢?
2023-08-31 14:50:29
144
原创 优化重复冗余代码的8种方式!
使用 AOP框架可以在不同地方插入通用的逻辑,从而减少代码重复。业务场景:假设你正在开发一个Web应用程序,需要对不同的Controller方法进行权限检查。每个Controller方法都需要进行类似的权限验证,但是重复的代码会导致代码的冗余和维护困难。if (!if (!就这样,不管多少个Controller方法需要进行权限检查,你只需在方法上添加相应的注解即可。
2023-08-22 14:50:59
86
原创 Java 8 中的 CompletableFuture 太好用了!20 个示例全分享
这篇文章介绍 Java 8 的 CompletionStage API 和它的标准库的实现 CompletableFuture。API通过例子的方式演示了它的行为,每个例子演示一到两个行为。既然CompletableFuture类实现了CompletionStage接口,首先我们需要理解这个接口的契约。它代表了一个特定的计算的阶段,可以同步或者异步的被完成。
2023-08-18 15:30:15
130
原创 面试官:一个 SpringBoot 项目能处理多少请求?(小心有坑)
这篇文章是基于“一个 SpringBoot 项目能同时处理多少请求?”这个面试题出发的。但是经过我们前面简单的分析,你也知道,这个问题如果在没有加一些特定的前提条件的情况下,答案是各不一样的。比如我再给你举一个例子,还是我们的 Demo,只是使用一下 @Async 注解,其他什么都不变:再次启动项目,发起访问,日志输出变成了这样:同时能处理的请求,直接从 Tomcat 的默认 200 个变成了 8 个?因为 @Async 注解对应的线程池,默认的核心线程数是 8。
2023-08-17 10:47:32
79
原创 线程数突增!领导:谁再这么写就滚蛋!
如果只是在局部方法中使用线程池,线程池对象不是 bean 的情况时,记得要合理的使用shutdown或者shutdownnow方法来释放线程和线程池对象,如果不使用,会造成线程池和线程对象的堆积。
2023-08-04 19:59:07
39
原创 面试官:说一下SSO 单点登录和 OAuth2.0 的区别
授权码(authorization code)方式,指的是第三方应用先申请一个授权码,然后再用该码获取令牌。这种方式是最常用的流程,安全性也最高,它适用于那些有后端的 Web 应用。授权码通过前端传送,令牌则是储存在后端,而且所有与资源服务器的通信都在后端完成。这样的前后端分离,可以避免令牌泄漏。
2023-08-03 10:45:01
70
原创 面试官:谈谈分布式系统中的补偿机制如何设计?
我们知道,应用系统在分布式的情况下,在通信时会有着一个显著的问题,即一个业务流程往往需要组合一组服务,且单单一次通信可能会经过 DNS 服务,网卡、交换机、路由器、负载均衡等设备,而这些服务于设备都不一定是一直稳定的,在数据传输的整个过程中,只要任意一个环节出错,都会导致问题的产生。这样的事情在微服务下就更为明显了,因为业务需要在一致性上的保证。也就是说,如果一个步骤失败了,要么不断重试保证所有的步骤都成功,要么回滚到以前的服务调用。
2023-07-27 10:36:01
725
原创 SpringBoot 整合 MinIO 实现视频的分片上传/断点续传(亲测可行)
SpringBoot 整合 MinIO 实现视频的分片上传/断点续传(亲测可行)
2023-07-22 10:53:37
474
原创 Spring 赌上未来的一击,响应式的 WebFlux 框架更优雅,性能更强!
spring-webflux是spring在5.0版本后提供的一套响应式编程风格的web开发框架,大量测评证明,使用WebFlux开发接口能够大幅提升接口的吞吐量。
2023-07-21 14:57:21
195
原创 面试官:Java中Class.forName和ClassLoader到底有啥区别?
面试官:Java中Class.forName和ClassLoader到底有啥区别?
2023-07-20 10:25:41
56
原创 实现高并发秒杀的七种方式 !
解决商品超卖3.1 方式一(改进版加锁)3.2 方式二(AOP版加锁)3.3 方式三(悲观锁一)3.4 方式四(悲观锁二)3.5 方式五(乐观锁)3.6 方式六(阻塞队列)3.7.方式七(Disruptor队列)
2023-07-19 16:24:46
53
原创 springboot项目打jar包报Failed to execute goal org.apache.maven.plugins:maven-jar-plugin:3.1.2:jar
在springboot2.2.0.RELEASE版本的项目中想通过maven打jar包时,出现以下错误错误提示说我缺少maven-jar-plugin:3.1.2:jar包,可我在maven仓库中是有这个jar包的。而org/codehaus/plexus/components/io/resources/PlexusIoResourceCollection是在plexus-io.jar包中的。通过spring-boot-dependencies-2.2.0.RELEASE的pom文件中进入maven-
2023-03-10 13:55:16
2224
原创 JFinal整合WebSocket做服务器向浏览器推送通知
记录一下使用jdk1.6版本采用JFinal整合WebSocket做消息推送JFinal版本3.3<dependency> <groupId>com.jfinal</groupId> <artifactId>jfinal</artifactId> <version>3.3</version></dependency>AppConfig中@Overridepublic void c
2020-07-26 22:51:26
371
原创 RabbitMQ的通过Spring AMQP实现的五种消息模式
1.简单模式Spring AMQP实现首先需要在pom.xml中添加Spring AMQP的相关依赖;<!--Spring AMQP依赖--><dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-amqp</artifactId></dependency>然后修改appl.
2020-06-10 20:56:14
292
原创 Mybatis的分页插件xml配置
<plugins> <!-- com.github.pagehelper为PageHelper类所在包名 --> <plugin interceptor="com.github.pagehelper.PageHelper"> <!-- 4.0.0以后版本可以不设置该参数 --> <property name="dialect" value="mysql"/> <!-- 该参数默认
2020-05-18 00:16:12
481
原创 逆向工程的配置文件
<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN" "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd"><generatorConfiguration> <con
2020-05-17 13:44:25
266
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人