
Spring
文章平均质量分 79
微特尔普拉斯
非典型软件开发者!我不生产代码,我只是二进制数据的搬运工!
展开
-
深入解析数据倾斜:原因、影响与优化方案
如果大部分用户的订单数较少,但有个别用户(如大客户)拥有海量订单,某些计算节点的负载就会远高于其他节点,形成数据倾斜。• 表现:在分布式计算框架(Spark、Flink)中,如果 Join 关联的 Key 分布不均衡,某些计算节点会接收过量数据,导致计算瓶颈。• 方案:在 Key 前添加随机前缀,如 user_1 → 1_user_1、2_user_1,打散 Key 分布。• 方案:对大 Key 进行拆分,如 common_key_1_a、common_key_1_b,减少单个节点压力。原创 2025-03-02 12:39:12 · 442 阅读 · 0 评论 -
如果redis的热点key被频繁访问,导致频繁读取,更新怎么办?
这样,当Redis缓存不命中时,可以先访问本地缓存,只有在本地缓存也没有时,才访问Redis,再从Redis获取数据后同步到本地缓存。如果Redis的某个热点Key(即被频繁访问的数据)成为瓶颈,可能会导致该Key被频繁读取、更新,甚至造成Redis的性能下降,进而影响整个系统的稳定性。•问题:热点数据可能会长时间存在缓存中,如果缓存不及时过期,可能导致访问的热点数据一直处于缓存中,过期数据无法及时更新。•问题:对于热点数据的访问,多个客户端可能会同时访问并修改,造成Redis的频繁读写,甚至数据不一致。原创 2025-02-10 18:50:39 · 310 阅读 · 0 评论 -
认识一下redis的分布式锁
SETNX只会在指定的键不存在时设置键的值,如果键已存在,则获取锁失败。3. 锁的超时:为了防止死锁,分布式锁通常会设置一个超时机制,在客户端没有释放锁的情况下,Redis会在一段时间后自动释放锁。2. 锁的释放:客户端持有锁时,通过某些操作完成任务后,应该释放锁,通常使用DEL命令删除锁的键。设置一个合理的锁过期时间(如EX 30),即使客户端因为故障未能释放锁,锁会在超时后自动过期,避免死锁问题。• my_random_value: 比对锁的值,确保只有持有该锁的客户端才能释放锁。原创 2025-02-10 18:27:30 · 505 阅读 · 0 评论 -
前端实现与Spring后端请求的实时流式响应,打造类 AI流式回复效果
本文介绍了如何利用WebSocket和SSE两种技术实现前端与Spring后端的长连接,并以ChatGPT的流式回复为例,给出了具体的代码实现和技术原理分析。在实际应用中,需要根据具体需求选择合适的方案。如果需要双向实时通信,WebSocket是更优选择;如果只需服务器单向推送数据,SSE则更为轻量级。无论选择哪种方案,掌握长连接和流式数据处理都是构建现代化实时交互应用的关键。希望本文能帮助你更好地理解和应用实时流式响应技术,为用户打造更加流畅、自然的交互体验!原创 2024-08-11 23:58:11 · 1727 阅读 · 0 评论 -
Java 电商秒杀系统:消息队列、异步处理与库存一致性
本文介绍了如何使用消息队列、异步处理等技术构建高性能的 Java 电商秒杀系统。通过合理的设计和技术选型,我们可以有效地应对秒杀场景下的高并发挑战,同时保证数据一致性和用户体验。当然,实际的秒杀系统设计远比本文所述复杂,还需要考虑诸如前端限流、接口防刷、数据库优化等方面。希望本文能够抛砖引玉,激发您对构建高性能电商系统的兴趣和探索。原创 2024-08-10 23:44:59 · 1039 阅读 · 0 评论 -
Java后端处理前端字符串与 JSON 数据:安全拼接与转义技巧
在 Spring Boot 中处理前端传递的字符串和 JSON 数据时,需要注意潜在的 JSON 特殊字符问题。我们可以通过手动转义或借助 Jackson 库来安全地拼接字符串和 JSON 数据,确保数据完整性和程序稳定性。希望本文能够帮助您更好地理解 Spring Boot 中字符串与 JSON 数据处理的相关技巧,并在实际项目中得心应手。原创 2024-08-09 14:14:58 · 680 阅读 · 0 评论 -
文件上传——存储上传进度解决方案及断点续传
为了在上传意外中断后能够恢复进度,需要将上传进度持久化存储。的唯一性,以便准确地标识一个上传任务,实现断点续传功能。无论选择哪种方案,都需要确保。原创 2024-08-01 05:10:58 · 403 阅读 · 0 评论 -
文件上传——springboot大文件分片多线程上传功能,前端显示弹出上传进度框
希望这些更详细的步骤和代码片段能够帮助您更好地理解和实现 Spring Boot 断点续传、多线程分片上传功能!要在分片上传的基础上实现断点续传,需要在服务端记录每个文件的上传进度,并在客户端请求上传时返回已上传的分片信息。使用 JavaScript 实现文件分割、分片上传、合并请求和上传进度展示等功能。创建一个简单的 HTML 页面,包含文件选择按钮、上传进度条和相关信息展示区域。创建一个新的 Spring Boot 项目,添加 Web 依赖。的唯一性,以便准确地标识一个上传任务,实现断点续传功能。原创 2024-07-31 05:25:27 · 731 阅读 · 0 评论 -
Spring的Bean的生命周期,Bean的装配和注入
10.经过流程9之后,就可以正式使用该Bean了,对于scope为singleton的Bean,Spring的ioc容器中会缓存一份该bean的实例,而对于scope为prototype的Bean,每次被调用都会new一个新的对象,期生命周期就交给调用方管理了,不再是Spring容器进行管理了。该属性控制着bean对象的作用域。3.如果Bean实现了BeanNameAware接口,会回调该接口的setBeanName()方法,传入该Bean的id,此时该Bean就获得了自己在配置文件中的id,原创 2023-02-26 01:39:38 · 646 阅读 · 0 评论 -
redis缓存穿透解决之布隆过滤器
布隆过滤器原创 2022-09-29 00:27:02 · 1566 阅读 · 0 评论 -
redis的基本知识和应用,redis缓存雪崩,缓存击穿,缓存穿透
redis基本使用与详解,redis命令,redis缓存原创 2022-09-28 22:58:16 · 213 阅读 · 0 评论 -
macOS根目录上无法写入文件和创建目录的问题
问题起源:springboot项目启动报错 在根目录下无法创建/data 存放项目日志Failed to create parent directories for [/home/app/log/myweb/myweb.log]试着手动创建去解决,失败admin@admindeMacBook-Pro-2 ~ % cd / admin@admindeMacBook-Pro-2 / % sudo mkdir dataPassword:mkdir: data: .原创 2022-03-03 16:19:24 · 4861 阅读 · 0 评论 -
Spring项目中使用Jwt完成Token验证
一、什么是JWT?为什么使用JWT?Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该token被设计为紧凑且安全的,特别适用于分布式站点的单点登录(SSO)场景。JWT的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。随着技术的发展,分布式web应用的普及,通过se.原创 2021-10-24 21:44:31 · 4713 阅读 · 0 评论 -
数据结构与算法—Java快速排序
之前写的快速排序采用的是固定位置法,即每一次取得基准都是当前所排序区域的最左边的元素。接下来看一下快速排序的优化。一. 随机选取基准法这就是随机选取基准法,,在所排序的区域随机选取一个数与当前的基准交换,这个随机数就成了新的基准。然后进行一次快速排序。这种方法适用于数组本身有序,就会提高排序的效率。public static int partition(int[] array,int start,int end){//返回基准的下标 int low = start; int原创 2021-10-14 15:59:40 · 186 阅读 · 0 评论 -
Java中单例设计模式,饿汉式和懒汉式
单例模式所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法。如果我们要让类在一个虚拟机中只能产生一个对象: 将类的构造器的访问权限设置为private,这样,就不能用new操作符在类的外部产生类的对象了,但在类内部仍可以产生该类的对象。 提供一个public方法作为该类的访问点,用于创建该对象,必须是static修饰的,因为在类的外部开始还无法得到类的对象,只能通过类调用该方法。 缓存已创...原创 2021-10-12 16:06:55 · 551 阅读 · 0 评论 -
使用MyBatisPlus自动生成Java、xml模板
MyBatisPlus自动生成Java、xml模板使用MyBatisPlus使用MyBatisPluspublic class CodeGenerator { // 作者 private static final String author = "garry"; // 数据库 private static final String url = "jdbc:mysql://localhost:3306/test?useUnicode=true&useSSL=false&char原创 2020-12-16 17:21:41 · 1507 阅读 · 1 评论 -
使用Freemarker模板来生成model,service,mapper,mapper.xml等
项目工程:https://gitee.com/geekcjj/code-generator.git原创 2020-12-11 17:41:44 · 587 阅读 · 0 评论 -
视频格式转换工具,用到ws.schild.jave,之前是用的it.sauronsoftware.jave,作者已经不维护了
package com.maike.common.util;import java.io.File;import java.io.FileInputStream;import java.io.IOException;import java.nio.channels.FileChannel;import java.util.ArrayList;import java.util.List;import org.slf4j.Logger;import org.slf4j.LoggerFact.原创 2020-12-11 17:40:37 · 9739 阅读 · 16 评论 -
Java中banner字符画,可生成各种图案
http://patorjk.com/software/taaghttp://www.network-science.de/ascii/http://www.degraeve.com/img2txt.phhttp://patorjk.com/software/taaghttp://www.network-science.de/ascii/http://www.degraeve.com/img2txt.php原创 2020-11-26 11:47:55 · 4058 阅读 · 0 评论 -
springboot + redis + 注解 + 拦截器用Token 实现接口幂等性校验
一、概念幂等性, 通俗的说就是一个接口, 多次发起同一个请求, 必须保证操作只能执行一次比如:订单接口, 不能多次创建订单 支付接口, 重复支付同一笔订单只能扣一次钱 支付宝回调接口, 可能会多次回调, 必须处理重复回调 普通表单提交接口, 因为网络超时等原因多次点击提交, 只能成功一次 等等二、常见解决方案唯一索引 -- 防止新增脏数据 token机制 -- 防止页面重复提交 悲观锁 -- 获取数据的时候加锁(锁表或锁行) 乐观锁 -- 基于版本号version实现, 在更新原创 2020-11-25 15:03:32 · 461 阅读 · 0 评论 -
windows下使用批处理文件快速启动redis
windows下redis启动,需要进入redis安装目录,然后shift+右键,选择“在此处打开命令窗口”,然后输入./redis-server redis.conf,就可以启动redis了。如下所示: 这种情况有一个问题,就是每次需要进入redis安装目录对应的文件夹,然后打开命令行,输入redis启动命令,因此有了更进一步的改进,就是利用批处理脚本来完成这些操作,减少麻烦。批处理脚本如下:startup-redis.bat@echo offtitle redis-se...原创 2020-11-25 10:00:31 · 971 阅读 · 0 评论 -
关于mysql中模糊查询,使用instr和like
一、like,不区分大小写1.%:可代表任意(0-n)长度的字符串select * from A where name like '%指定内容'表示查出“指定内容”前有任意内容的记录,即以“指定内容”结尾的记录select * from A where name like '指定内容%'查询以该内容结尾的记录,后面是任意内容select * from A where name like '%指定内容%'查询包含指定内容的记录,只要有一个字符相等,就查询出来2._:可.原创 2020-11-19 09:52:44 · 601 阅读 · 0 评论 -
关于自增型主键的表中插入新数据后同时获取主键的值,useGeneratedKeys和keyProperty
在开发项目中遇到一个问题,就是在A表插入一条新的数据后,同时插入该条数据相关联的B表中一条数据,关联字段为A表中的主键,而这个主键时自增的,那么我如何在插入这条新数据的同时获取该数据主键id的值。在我看来要在插入的同时获得这个主键id的值一步是完成不了的,可能需要两部,先插入,后查询出来获取id的值,但这样两次访问数据库感觉有点不太安全,于是,而且插入数据后,你怎么知道查询后取出来的时你刚刚插入的那条数据,这些都没法判断,万一插入的数据时相同的没有一些显著的区分条件,你无法从A表中找到刚刚才新插原创 2020-11-17 15:51:22 · 662 阅读 · 0 评论 -
java读取properties中的中文值会乱码
在项目的应用中,经常将一些配置放入properties文件中,在代码应用中读取properties文件,就需要专门的类Properties类,通过这个类可以进行读取。web-name=池塘网web-author=麦科特web-describe=一个有趣的网站在项目中读取properties配置文件中如果有中文则会出现乱码的现象,如:第一种方式:private static final String FILE_PATH="webinfo.properties";Properties原创 2020-06-04 16:59:54 · 1235 阅读 · 2 评论 -
Intellij IDEA四种热部署配置
热加载热加载可以使代码修改后无须重启服务器,就可以加载更改的代码。(其实分 java 和非 java 代码, 本处可以让 java 代码立即生效且不重启服务)第 1 种:修改服务器配置,使得 IDEA 窗口失去焦点时,更新类和资源菜单 Run -> EditConfiguration , 然后配置指定服务器下,右侧 server 标签下 on frame deactivation = Update classes and resource。优点:简单缺点:基于 JVM 提供的热加载原创 2020-05-11 11:21:43 · 432 阅读 · 0 评论 -
no applicable action for [springProfile], current ElementPath is [[configuration][springProfile]]
Spring启动时logback打印出很多日志,还有错误信息09:00:16,520 |-INFO in ch.qos.logback.classic.LoggerContext[default] - Could NOT find resource [logback.groovy]09:00:16,520 |-INFO in ch.qos.logback.classic.LoggerCon...转载 2019-11-07 09:54:31 · 1298 阅读 · 0 评论