- 博客(79)
- 资源 (1)
- 收藏
- 关注
原创 SpringBoot 优雅实现超大文件上传,通用方案
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。在实现分片上传的过程,需要前端和后端配合,比如前后端的上传块号的文件大小,前后端必须得要一致,否则上传就会有问题。其次文件相关操作正常都是要搭建一个文件服务器的,比如使用fastdfs、hdfs等。
2024-06-04 18:35:27 889
原创 如何做到无感刷新token?
解决方案:自动刷新tokentoken续约思路如果Token即将过期,你在验证用户权限的同时,为用户生成一个新的Token并返回给客户端,客户端需要更新本地存储的Token,还可以做定时任务来刷新Token,可以不生成新的Token,在快过期的时候,直接给Token增加时间。
2024-06-04 18:30:23 879
原创 SpringBoot接口防抖(防重复提交)
在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。从测试的结果上看,防抖是做到了,但是随着缓存消失、锁失效,还是可以发起同样的请求,所以要真正做到接口幂等性,还需要业务代码的判断、设置数据库表的UK索引等操作。其次,两次请求提交的参数比对,不一定要全部参数,选择标识性强的参数即可;Redisson的核心思路就是抢锁,当一次请求抢到锁之后,对锁加一个过期时间,在这个时间段内重复的请求是无法获得这个锁,也不难理解。
2024-06-03 21:55:28 1720 2
原创 参数设置错误导致的 OOM
2024 年 5 月 10 日 14 时 19 分,C 公司开发人员向 A 公司开发人员反映某开放接口从 2024 年 5 月 10 日 14 时许开始无法访问和使用。该系统为某基础数据接口服务,基于 HTTP 协议进行通信。按照惯例,首先排查网络是否异常,经运维人员检查,证明网络连通性没有问题。A 公司开发组于 2024 年 5 月 10 日 14 时 30 分通知运维人员重启应用服务,期间短暂恢复正常。但是,很快,十分钟后,电话再次响起,告知服务又出现异常,无法访问。
2024-06-01 10:00:07 730
原创 5种方法,教你判断线程池是否全部完成
最近写代码的时候用到了 CountDownLatch 计数器,然后顺便想了想判断线程池全部结束有多少种方法。isTerminated() 判断方式,在执行 shutdown() ,关闭线程池后,判断是否所有任务已经完成。ThreadPoolExecutor 的 getCompletedTaskCount() 方法,判断完成任务数和全部任务数是否相等。CountDownLatch 计数器,使用闭锁计数来判断是否全部完成。手动维护一个公共计数 ,原理和闭锁类似,就是更加灵活。
2024-06-01 09:49:48 816
原创 数据库性能优化8大方案
数据库的优化方案核心本质有三种:减少数据量、用空间换性能、选择合适的存储系统,这也对应了开篇讲解的慢的三个原因:数据总量、高负载、查找的时间复杂度。这里大概解释下收益类型:短期收益,处理成本低,能紧急应对,久了则会有技术债务;长期收益则跟短期收益相反,短期内处理成本高,但是效果能长久使用,扩展性会更好。静态数据意思是,相对改动频率比较低的,也无需过多联表的,where 过滤比较少。动态数据与之相反,更新频率高,通过动态条件筛选过滤。
2024-05-31 09:47:29 1310
原创 MyBatisPlus 一个依赖轻松搞定权限问题!
属性 @FieldEncrypt 注解即可加密存储,会自动解密查询结果,支持全局配置加密密钥算法,及注解密钥算法,可以实现 IEncryptor 注入自定义算法。属性 @FieldSensitive 注解即可自动按照预设策略对源数据进行脱敏处理,默认 SensitiveType 内置 9 种常用脱敏策略。@Sharding 注解使数据源不限制随意使用切换,你可以在 mapper 层添加注解,按需求指哪打哪!可以开启主从策略,当然也是可以开启健康检查!不仅仅可以固定执行,也可以动态执行!注解(实体分包使用)
2024-05-31 09:14:02 598
原创 MySQL 常见夺命15问,你能接几招?
原子性:事务是最小的执行单位,不允许分割。事务的原子性确保动作要么全部完成,要么完全不起作用;一致性:执行事务前后,数据保持一致,多个事务对同一个数据读取的结果是相同的;隔离性:并发访问数据库时,一个用户的事务不被其他事务所干扰,各并发事务之间数据库是独立的;持久性:一个事务被提交之后。它对数据库中数据的改变是持久的, 即使数据库发生故障也不应该对其有任何影响。死锁是指两个或多个事务在同一资源上相互占用,并请求锁定对方的资源,从而导致恶性循环的现象。常见的解决死锁的方法。
2024-05-30 09:21:50 1185
原创 秒杀场景:如何通过 Redis 减库存?
Redis扣库存,主要目的是减少对数据库的访问,之前的减库存,直接访问数据库,读取库存,当高并发请求到来的时候,大量的读取数据有可能会导致数据库的崩溃。系统初始化的时候,将商品库存加载到 Redis 缓存中保存收到请求的时候 , 现在 Redis 中拿到该商品的库存值,进行库存预减,如果减完之后库存不足,直接返回逻辑 Exception 就不需要访问数据库再去减库存了,如果库存值正确,进行下一步。
2024-05-30 09:11:59 439
原创 Redis 击穿、穿透、雪崩产生原因以及解决思路
大家都知道,计算机的瓶颈之一就是IO,为了解决内存与磁盘速度不匹配的问题,产生了缓存,将一些热点数据放在内存中,随用随取,降低连接到数据库的请求链接,避免数据库挂掉。需要注意的是,无论是击穿还是后面谈到的穿透与雪崩,都是在高并发前提下,比如当缓存中某一个热点key失效。
2024-05-29 09:36:36 663
原创 Sharding-Jdbc 实现读写分离 + 分库分表
ShardingSphere-Jdbc定位为轻量级Java框架,在Java的Jdbc层提供的额外服务。它使用客户端直连数据库,以jar包形式提供服务,可理解为增强版的Jdbc驱动,完全兼容Jdbc和各种ORM框架。
2024-05-29 09:30:02 1025
原创 MySQL 性能优化的 9 种姿势,面试再也不怕了!
设想一下,要把某个数据同时插入两个相关联的表中,可能会出现这样的情况:第一个表中成功更新后,数据库突然出现意外状况,造成第二个表中的操作没有完成,这样就会造成数据的不完整,甚至会破坏数据库中的数据。而且这些被用来JOIN的字段,应该是相同的类型的。尽管事务是维护数据库完整性的一个非常好的方法,但却因为他的独占性,有时会影响数据库的性能,尤其是很大的应用系统中。Mysql是一种关系型数据库,可以很好地支持大数据量的存储,但是一般来说,数据库中的表越小,在它上面执行的查询也就越快。
2024-05-28 09:45:43 935
原创 Spring Boot + MyBatis + MySQL 实现读写分离!
读写分离要做的事情就是对于一条SQL该选择哪个数据库去执行,至于谁来做选择数据库这件事儿,无非两个,要么中间件帮我们做,要么程序自己做。因此,一般来讲,读写分离有两种实现方式。第一种是依靠中间件(比如:MyCat),也就是说应用程序连接到中间件,中间件帮我们做SQL分离;第二种是应用程序自己去做分离。这里我们选择程序自己来做,主要是利用Spring提供的路由数据源,以及AOP。
2024-05-28 09:24:43 1022
原创 干掉 XML、Mapper,Fluent Mybatis 牛逼
使用fluent mybatis可以不用写具体的xml文件,通过java api可以构造出比较复杂的业务sql语句,做到代码逻辑和sql逻辑的合一。不再需要在Dao中组装查询或更新操作,在xml或mapper中再组装参数。那对比原生Mybatis, Mybatis Plus或者其他框架,FluentMybatis提供了哪些便利呢?
2024-05-27 09:10:30 972
原创 还用 BeanUtils 拷贝对象?MapStruct 才是王者!
MapStruct 是一个代码生成器,它基于约定优于配置方法,极大地简化了 Java bean 类型之间映射的实现。
2024-05-25 10:29:18 773
原创 SpringBoot 接入 支付宝
支付宝推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大) ,老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口采用的证书验签方式。使用新接口要将sdk版本升级到最新版本,博主升级时最新版本是4.10.97。接下来看集成步骤。
2024-05-24 09:46:43 521
原创 SpringBoot 的线程池
前两天做项目的时候,想提高一下插入表的性能优化,因为是两张表,先插旧的表,紧接着插新的表,一万多条数据就有点慢了后面就想到了线程池ThreadPoolExecutor,而用的是Spring Boot项目,可以用Spring提供的对ThreadPoolExecutor封装的线程池ThreadPoolTaskExecutor,直接使用注解启用。
2024-05-24 09:38:15 600
原创 扫码登录的本质与原理
在日常生活中,二维码出现在很多场景,比如超市支付、系统登录、应用下载等等。了解二维码的原理,可以为技术人员在技术选型时提供新的思路。对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码,防止上当受骗。二维码,大家再熟悉不过了购物扫个码,吃饭扫个码,坐公交也扫个码在扫码的过程中,大家可能会有疑问:这二维码安全吗?会不会泄漏我的个人信息?更深度的用户还会考虑:我的系统是不是也可以搞一个二维码来推广呢?这时候就需要了解一下二维码背后的技术和逻辑了!
2024-05-23 09:48:57 702
原创 这样打印日志,才能助我们快速定位问题
在程序中打错误日志的主要目标是为更好地排查问题和解决问题提供重要线索和指导。但是在实际中打的错误日志内容和格式变化多样,错误提示上可能残缺不全、没有相关背景、不明其义,使得排查解决问题成为非常不方便或者耗时的操作。而实际上,如果编程的时候稍加用心,就会减少排查问题的很多无用功。在阐述如何编写有效的错误日志之前, 了解错误是怎么产生的, 非常重要。
2024-05-23 09:34:03 935
原创 买了份KFC,意外理解了5种 IO 模型
基本概念(相关系统调用函数,同步&异步,阻塞&非阻塞)阻塞IO模型非阻塞IO模型IO多路复用模型信号驱动IO模型异步IO模型Java中的BIO,NIO,AIO由于我对于C语言不熟悉,几个系统函数参考了一些文章,如果错误欢迎指出!recvfromLinux系统提供给用户用于接收网络IO的系统接口。从套接字上接收一个消息,可同时应用于面向连接和无连接的套接字。
2024-05-22 11:02:21 921
原创 盘点最常见且坑爹的Java事故现场,你中招了几个?
jdk作为我们每天必备的调用类库,里面大量提供了基础类供我们使用.可以说离开jdk,我们的java代码寸步难行,jdk带给我们的便利可谓是不胜枚举,但同时这些方法在使用起来也存在一些坑,如果不注意就很容易掉入到陷阱里面,导致程序抛出错误。jdk中的很多方法都不会做非null判断,可能设计jdk的作者默认开发者已经处理好null值了.不过这个设计可能会造成很严重的后果,实在是暗藏杀机。
2024-05-22 09:40:29 1167
原创 掌握这35个 Java 优化小技巧,让你代码水平提升
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是减小代码的体积。
2024-05-21 10:05:00 1073
原创 Minio 断点续传和断点下载实现方案
在之前,我们实现了常用的上传下载、分片上传、秒传等功能,实际一个文件存储管理系统,这些远远还是不够的,比如断点续传。可以参考阿里的文档,是怎么实现这些功能的。阿里OSS开发文档:https://help.aliyun.com/zh/oss/developer-reference/resumable-upload-10。
2024-05-21 09:34:31 713
原创 Minio MD5秒传原理及入门案例
摘要算法是一种能产生特殊输出格式的算法,这种算法的特点是:无论用户输入什么长度的原始数据,经过计算后输出的密文都是固定长度的,这种算法的原理是根据一定的运算规则对原数据进行某种形式的提取,这种提取就是摘要,被摘要的数据内容与原数据有密切联系,只要原数据稍有改变,输出的“摘要”便完全不同,因此,基于这种原理的算法便能对数据完整性提供较为健全的保障。
2024-05-20 09:56:00 956
原创 Minio 分片上传文件putObject接口流程源码分析
为了更好的理解和优化Minio文件上传,本篇文档对MInio中上传文件putObject接口源码分析以下。基于Java 客户端 API.build());
2024-05-20 09:42:07 1885
原创 Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩
第十章 Minio WebUploader上传文件的高级用法之进度条显示、文件过滤、图片预览、图片压缩。
2024-05-18 16:19:49 629
原创 Minio 使用 WebUploader上传文件到 Minio 服务器
WebUploader是由Baidu WebFE(FEX)团队开发的一个简单的以HTML5为主,FLASH为辅的现代文件上传组件。在现代的浏览器里面能充分发挥HTML5的优势,同时又不摒弃主流IE浏览器,沿用原来的FLASH运行时,兼容IE6+,iOS 6+, android 4+。两套运行时,同样的调用方式,可供用户任意选用。采用大文件分片并发上传,极大的提高了文件上传效率。
2024-05-18 16:14:42 942
原创 Minio 对象存储 OSS概述
系列文章目录对象存储 OSS基本概念存储空间(Bucket)对象(Object)ObjectKeyRegion(地域)Endpoint(访问域名)AccessKey(访问密钥)强一致性数据冗余机制OSS与文件系统的对比应用场景图片和音视频等应用的海量存储网页或者移动应用的静态和动态资源分离云端数据处理。
2024-05-16 11:10:44 1583
原创 Minio Admin 使用详解
MinIO Client(mc)提供了“ admin”子命令来对您的MinIO部署执行管理任务。service 服务重启并停止所有 MinIO 服务器update 更新更新所有 MinIO 服务器info 信息显示 MinIO 服务器信息user 用户管理用户group 小组管理小组policy MinIO 服务器中定义的策略管理策略config 配置管理 MinIO 服务器配置heal 修复 MinIO 服务器上的磁盘,存储桶和对象profile 概要文件生成概要文件数据以进行调试。
2024-05-15 21:29:10 1048
原创 Minio Client使用详解
MinIO Client 简称mc,是minio服务器的客户端,对ls,cat,cp,mirror,diff,find等UNIX命令提供了一种替代方案,它支持文件系统和兼容Amazon S3的云存储服务(AWS Signature v2和v4)。ls 列出文件和文件夹。mb 创建一个存储桶或一个文件夹。cat 显示文件和对象内容。pipe 将一个 STDIN 重定向到一个对象或者文件或者 STDOUT。share 生成用于共享的 URL。cp 拷贝文件和对象。
2024-05-15 21:17:49 1807
原创 Minio 纠删码及分布式Minio集群环境搭建
纠删码是一种用于重建丢失或损坏数据的数学算法。纠删码(erasure coding,EC)是一种数据保护方法,它将数据分割成片段,把冗余数据块扩展、编码,并将其存储在不同的位置,比如磁盘、存储节点或者其它地理位置。Minio采用Reed-Solomon code将对象拆分成N/2数据和N/2 奇偶校验块。这就意味着如果是12块盘,一个对象会被分成6个数据块、6个奇偶校验块,你可以丢失任意6块盘(不管其是存放的数据块还是奇偶校验块),你仍可以从剩下的盘中的数据进行恢复。
2024-05-12 10:00:18 879
原创 Minio 简介及单机部署
系列文章目录简介优点高性能可扩展性云的原生支持开放全部源代码 + 企业级支持与Amazon S3 兼容简单全世界增长最快的对象存储系统特性擦除码Bitrot保护加密WORM身份认证和管理连续复制全局一致性多云网关架构设计Minio Windows/Linux/K8S单机部署Minio下载WindowsLinuxDockerK8SMinIO 是一个基于Apache License v2.0开源协议的对象存储服务。
2024-05-12 09:40:36 1232
基于springboot项目中短信接口的开发
2018-03-02
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人