后端常用技术
文章平均质量分 91
java常用并发开发技术
奔走的蚂蚁~
这个作者很懒,什么都没留下…
展开
-
SpringBoot 优雅实现超大文件上传,通用方案
文件上传是一个老生常谈的话题了,在文件相对比较小的情况下,可以直接把文件转化为字节流上传到服务器,但在文件比较大的情况下,用普通的方式进行上传,这可不是一个好的办法,毕竟很少有人会忍受,当文件上传到一半中断后,继续上传却只能重头开始上传,这种让人不爽的体验。在实现分片上传的过程,需要前端和后端配合,比如前后端的上传块号的文件大小,前后端必须得要一致,否则上传就会有问题。其次文件相关操作正常都是要搭建一个文件服务器的,比如使用fastdfs、hdfs等。原创 2024-06-04 18:35:27 · 696 阅读 · 0 评论 -
如何做到无感刷新token?
解决方案:自动刷新tokentoken续约思路如果Token即将过期,你在验证用户权限的同时,为用户生成一个新的Token并返回给客户端,客户端需要更新本地存储的Token,还可以做定时任务来刷新Token,可以不生成新的Token,在快过期的时候,直接给Token增加时间。原创 2024-06-04 18:30:23 · 647 阅读 · 0 评论 -
SpringBoot接口防抖(防重复提交)
在Web系统中,表单提交是一个非常常见的功能,如果不加控制,容易因为用户的误操作或网络延迟导致同一请求被发送多次,进而生成重复的数据记录。从测试的结果上看,防抖是做到了,但是随着缓存消失、锁失效,还是可以发起同样的请求,所以要真正做到接口幂等性,还需要业务代码的判断、设置数据库表的UK索引等操作。其次,两次请求提交的参数比对,不一定要全部参数,选择标识性强的参数即可;Redisson的核心思路就是抢锁,当一次请求抢到锁之后,对锁加一个过期时间,在这个时间段内重复的请求是无法获得这个锁,也不难理解。原创 2024-06-03 21:55:28 · 1569 阅读 · 2 评论 -
RabbitMQ 总结,从基础到进阶
RabbitMQ是基于AMQP协议的,通过使用通用协议就可以做到在不同语言之间传递。原创 2024-06-03 21:25:17 · 1073 阅读 · 0 评论 -
5种方法,教你判断线程池是否全部完成
最近写代码的时候用到了 CountDownLatch 计数器,然后顺便想了想判断线程池全部结束有多少种方法。isTerminated() 判断方式,在执行 shutdown() ,关闭线程池后,判断是否所有任务已经完成。ThreadPoolExecutor 的 getCompletedTaskCount() 方法,判断完成任务数和全部任务数是否相等。CountDownLatch 计数器,使用闭锁计数来判断是否全部完成。手动维护一个公共计数 ,原理和闭锁类似,就是更加灵活。原创 2024-06-01 09:49:48 · 652 阅读 · 0 评论 -
SpringBoot 集成 WebSocket ;轻松实现消息推送
使用 Spring Boot 整合 websocket原创 2024-05-25 09:49:13 · 725 阅读 · 0 评论 -
SpringBoot 接入 支付宝
支付宝推出了新的转账接口alipay.fund.trans.uni.transfer(升级后安全性更高,功能更加强大) ,老转账接口alipay.fund.trans.toaccount.transfer将不再维护,新老接口的一个区别就是新接口采用的证书验签方式。使用新接口要将sdk版本升级到最新版本,博主升级时最新版本是4.10.97。接下来看集成步骤。原创 2024-05-24 09:46:43 · 465 阅读 · 0 评论 -
SpringBoot 的线程池
前两天做项目的时候,想提高一下插入表的性能优化,因为是两张表,先插旧的表,紧接着插新的表,一万多条数据就有点慢了后面就想到了线程池ThreadPoolExecutor,而用的是Spring Boot项目,可以用Spring提供的对ThreadPoolExecutor封装的线程池ThreadPoolTaskExecutor,直接使用注解启用。原创 2024-05-24 09:38:15 · 561 阅读 · 0 评论 -
扫码登录的本质与原理
在日常生活中,二维码出现在很多场景,比如超市支付、系统登录、应用下载等等。了解二维码的原理,可以为技术人员在技术选型时提供新的思路。对于非技术人员呢,除了解惑,还可以引导他更好地辨别生活中遇到的各种二维码,防止上当受骗。二维码,大家再熟悉不过了购物扫个码,吃饭扫个码,坐公交也扫个码在扫码的过程中,大家可能会有疑问:这二维码安全吗?会不会泄漏我的个人信息?更深度的用户还会考虑:我的系统是不是也可以搞一个二维码来推广呢?这时候就需要了解一下二维码背后的技术和逻辑了!原创 2024-05-23 09:48:57 · 638 阅读 · 0 评论 -
买了份KFC,意外理解了5种 IO 模型
基本概念(相关系统调用函数,同步&异步,阻塞&非阻塞)阻塞IO模型非阻塞IO模型IO多路复用模型信号驱动IO模型异步IO模型Java中的BIO,NIO,AIO由于我对于C语言不熟悉,几个系统函数参考了一些文章,如果错误欢迎指出!recvfromLinux系统提供给用户用于接收网络IO的系统接口。从套接字上接收一个消息,可同时应用于面向连接和无连接的套接字。原创 2024-05-22 11:02:21 · 896 阅读 · 0 评论 -
盘点最常见且坑爹的Java事故现场,你中招了几个?
jdk作为我们每天必备的调用类库,里面大量提供了基础类供我们使用.可以说离开jdk,我们的java代码寸步难行,jdk带给我们的便利可谓是不胜枚举,但同时这些方法在使用起来也存在一些坑,如果不注意就很容易掉入到陷阱里面,导致程序抛出错误。jdk中的很多方法都不会做非null判断,可能设计jdk的作者默认开发者已经处理好null值了.不过这个设计可能会造成很严重的后果,实在是暗藏杀机。原创 2024-05-22 09:40:29 · 1040 阅读 · 0 评论 -
掌握这35个 Java 优化小技巧,让你代码水平提升
代码优化 ,一个很重要的课题。可能有些人觉得没用,一些细小的地方有什么好修改的,改与不改对于代码的运行效率有什么影响呢?这个问题我是这么考虑的,就像大海里面的鲸鱼一样,它吃一条小虾米有用吗?没用,但是,吃的小虾米一多之后,鲸鱼就被喂饱了。代码优化也是一样,如果项目着眼于尽快无BUG上线,那么此时可以抓大放小,代码的细节可以不精打细磨;但是如果有足够的时间开发、维护代码,这时候就必须考虑每个可以优化的细节了,一个一个细小的优化点累积起来,对于代码的运行效率绝对是有提升的。代码优化的目标是减小代码的体积。原创 2024-05-21 10:05:00 · 727 阅读 · 0 评论 -
并发相关的常见的面试题
1、 守护线程是一个不阻止Java虚拟机(JVM)退出的线程当所有非守护线程终止时,JVM只是放弃所有剩余的守护线程;2、 守护线程通常用于为其他线程执行一些支持或服务任务,但我们应该考虑到它们可能随时被放弃;3、 要将一个线程作为守护线程启动,应该在调用start()之前使用setDaemon()方法设置为守护线程如下所示;"));奇怪的是,如果将上面的代码放在 main() 内运行,则可能无法打印该消息。原创 2024-04-30 15:37:09 · 552 阅读 · 0 评论 -
并发常用技术点二
线程并不是一直都在执行的,调度器会把暂时空闲的线程的 CPU ( 还是在 RUNNABLE 状态 )让出来,让其它需要的线程去运行。线程同步的问题,我们已经有了个大概的了解,接下来,我们看一个简单的 Sender-Receiver ( 发送者 - 接收者 ) 应用程序,这个应用程序将利用wait() 和 notify() 方法建立它们之间的同步。但,有一点要注意的是,对于任意一个线程,但在我们允许其继续执行之前,请始终快速检查继续执行该线程所需的条件。有时可能会发生线程被唤醒,但实际上并没有满足条件。原创 2024-04-30 15:23:26 · 772 阅读 · 0 评论 -
并发常用技术点一
主线程只要简单的将异步任务封装在 Future 里,然后开始等待 Future 的完成,在这段等待的时间内,可以处理一些其它逻辑,一旦 Future 执行完毕,就可以从中获取执行的结果并进一步处理。这意味着当消费者尝试将元素添加到已经满了的队列时,结果取决于添加元素的方法( offer() 、add() 、put() ) ,它将阻塞,直到有足够的空间可以插入元素。我们重用前面的示例,但是这次开启了了数千个线程而不是 5 个线程,很可能许多早期的线程在后面的线程上调用 start() 之前已经完成了处理。原创 2024-04-28 19:13:36 · 849 阅读 · 0 评论 -
Java 中的异步计算
异步计算很难推理的,因为我们的大脑是同步的,会将任何计算看成是一系列的同步计算。我们在实现异步计算时,往往会把回调的动作分散在代码中或者深深地嵌套在彼此内部,这种情况下,当我们需要处理其中一个步骤中可能发生的错误时,情况变得更糟。直到Java 8,才引入了 CompletableFuture 类。该类不仅实现了 Future 接口,还实现了 CompletionStage 接口。此接口定义了可与异步计算步骤组合的异步计算步骤契约。原创 2024-04-28 14:58:04 · 549 阅读 · 0 评论 -
Java 线程池
本文我们讲解了 Java 中的线程池 ( Thread Pool ),从 Java 标准库中的线程池的不同实现开始,到 Google 开发的 Guava 库的前世今生。原创 2024-04-28 09:52:01 · 754 阅读 · 0 评论 -
Java Fork-Join
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档。原创 2024-04-27 19:14:37 · 911 阅读 · 1 评论 -
Java ExecutorService
ExecutorService原创 2024-04-27 18:16:06 · 1008 阅读 · 0 评论