- 博客(724)
- 资源 (7)
- 收藏
- 关注
原创 idea运行单元测试报Could not find method on interface org.apache.ibatis.executor.Executor named queryCursor
直接关闭掉这个插件,就能正常运行了org.apache.ibatis.exceptions.PersistenceException: ### Error opening session. Cause: org.apache.ibatis.plugin.PluginException: Could not find method on interface org.apache.ibatis.executor.Executor named queryCursor. Cause: java.lang.NoS
2024-03-27 10:23:54 1018
原创 每天100w次登陆请求, 8G 内存该如何设置JVM参数
对象进入老年代的动态年龄判断规则(动态晋升年龄计算阈值):Minor GC 时,Survivor 中年龄 1 到 N 的对象大小超过 Survivor 的 50% 时,则将大于等于年龄 N 的对象放入老年代。核心的优化策略是:是让短期存活的对象尽量都留在survivor里,不要进入老年代,这样在minor gc的时候这些对象都会被回收,不会进到老年代从而导致full gc。
2023-12-18 23:53:31 1341
原创 事务没有生效
本文总结了 8 种事务失效的场景,其实发生最多就是自身调用、异常被吃、异常抛出类型不对这 3 个了,像文章开头说的那样,本文不一定总结得全,只是总结常见的事务失效的场景,如果你还知道其他场景也欢迎留言分享。
2023-12-18 23:50:41 1114
原创 二维码扫码登录的原理
我们从登陆的本质出发,探索二维码扫码登录是如何做到的告诉系统我是谁向系统证明我谁在这个过程中,我们先简单讲了两个前提知识,一个是二维码原理,一个是基于token的认证机制。然后我们以二维码状态为轴,分析了这背后的逻辑: 通过token认证机制与二维码状态变化来实现扫码登录.需要指出的是,前面的讲的登录流程,它适用于同一个系统的PC端,WEB端,移动端。
2023-12-18 23:49:52 1251
原创 Redis源码
由此一来,我们会发现,这些数据结构又是更为「底层」的模块,所以我们在阅读数据类型模块时,就需要重点聚焦在这些模块上,也就是 sds.c、ziplist.c、quicklist.c、dict.c、intset.c 文件,而且这些文件都是比较独立的,阅读起来就可以更加集中。而且,由于这条主线的代码逻辑,已经覆盖了「所有命令」的执行流程,我们下次再去读其它命令时,比如 SADD,就只需要关注「处理命令」部分的逻辑即可,其它逻辑有 80% 都是相同的。这样,我就对整个项目有了一个「宏观」的了解。
2023-12-18 23:47:52 898
原创 BitMap用法
Bitmap主要用于快速检索关键字状态,通常要求关键字是一个连续的序列(或者关键字是一个连续序列中的大部分), 最基本的情况,使用1bit表示一个关键字的状态(可标示两种状态),但根据需要也可以使用2bit(表示4种状态),3bit(表示8种状态)。要表示8个数,我们就只需要8个Bit(1Bytes),首先我们开辟1Byte的空间,将这些空间的所有Bit位都置为0,然后将对应位置为1。最后,遍历一遍Bit区域,将该位是一的位的编号输出(2,3,4,5,7),这样就达到了排序的目的,时间复杂度O(n)。
2023-12-18 23:46:47 1007
原创 CompletableFuture使用
是jdk8的新特性。实现了接口和Future接口,前者是对后者的一个扩展,增加了异步会点、流式处理、多个Future组合处理的能力,使Java在处理多任务的协同工作时更加顺畅便利。
2023-12-18 23:45:40 774
原创 EasyExcel 带格式多线程导出百万数据(实测好用)
以下为结合实际情况作的方案设计,导出阈值以及单sheet页条数都可以根据实际情况调整大佬可直接跳过新手教程,直接查看文末代码资源占用内存(也是资源的一个,单独说明)响应时间针对以上三个问题,大方向考虑的是多线程结合数据流写入的方式。多线程:使用空间换时间,主要是加快接口响应时间,但是这里线程数不宜过多,一味加快响应时间提升线程数,资源占用会非常严重,故会考虑线程池,线程池的线程数为10;
2023-12-18 23:43:49 2825 1
原创 万能的导出excel工具
没错就是这么简单, 当然也是抛转引玉, 希望大家看了这篇文章,可以借鉴这些反射的函数玩法,做更多的好玩的封装,比如加上一些自定义注解的解析,比如加上一些前后置拦截器拓展等等。上面的示例中导出的表头是属性名,如果正式的导出通常需要自定义表头名称,我们这里可以使用自定义注解来完成。因为类不确定,那么我们就采取反射把类全部字段属性作为key丢到map里面,同时把值丢到value里面。但是呢我们封装出来的函数,要足够支撑不同的类,我们自动去读取遍历list ,然后导出生成文件。District?
2023-12-18 23:42:53 410
原创 订单超时未支付自动取消5种实现方案
在开发中,往往会遇到一些关于延时任务的需求。比如最近大家都在忙抢回家的火车票,当你下了一个订单没有支付时,会有一个倒计时,提示你半小时之内支付,否则会自动取消。这样的场景是如何实现的呢?
2023-12-18 23:33:26 3594
原创 布隆过滤器与布谷鸟过滤器
比如你的系统里本来只留下 1kw 个元素,但是整体上来过了上亿的流水元素,布隆过滤器很无奈,它会将这些流失的元素的印迹也会永远存放在那里。因为不同的元素被 hash 到同一个位置的可能性还是很大的,而且指纹只有一个字节,256 种可能,同一个位置出现相同的指纹可能性也很大。布谷鸟过滤器和布谷鸟哈希结构一样,它也是一维数组,但是不同于布谷鸟哈希的是,布谷鸟哈希会存储整个元素,而布谷鸟过滤器中只会存储元素的指纹信息(几个bit,类似于布隆过滤器)。这 8 个座位上的值都是一样的,都是这个元素的指纹。
2023-12-18 23:31:26 1155 1
原创 Redis 最全面试题
Redis 中的事务是一组命令的集合,将一组需要一起执行的命令放到multi和exec两个命令之间。multi 命令代表事务开始,exec命令代表事务结束。它可以保证一次执行多个命令,每个事务是一个单独的隔离操作,事务中的所有命令都会序列化、按顺序地执行。但是要注意Redis的事务功能很弱。在事务回滚机制上,Redis只能对基本的语法错误进行判断。如下,当语法命令错误时,会造成整个事务无法执行,事务内的操作都没有执行:如下,当命令错误时,虽然有异常提示,但是事务执行成功。
2023-12-18 23:30:02 838
原创 MyBatis源码中有多少设计模式
这里用到的就是装饰器模式,也叫俄罗斯套娃模式。就像MyBatis 中的MapperProxy 实现类, 代理工厂实现的功能就是完成DAO 接口的具体实现类的方法,配置的任何一个DAO 接口调用的CRUD 方法,都会被MapperProxy 接管,调用到方法执行器等,并返回最终的数据库执行结果。正是因为有太多的日志框架,包括Log4j、Log4j2 和Slf4J 等,而这些日志框架的使用接口又各有差异,为了统一这些日志框架的接口,MyBatis 定义了一套统一的接口,为所有的其他日志框架的接口做相应的适配。
2023-12-18 23:29:15 750
原创 Redis 实现限流的三种方式
他的数据结构也不仅仅是只有String,Hash,List,Set,Zset。我们在使用Redis的分布式锁的时候,大家都知道是依靠了setnx的指令,在CAS(Compare and swap)的操作的时候,同时给指定的key设置了过期实践(expire),我们在限流的主要目的就是为了在单位时间内,有且仅有N数量的请求能够访问我的代码程序。当然这种做法的弊端是很多的,比如当统计1-10秒的时候,无法统计2-11秒之内,如果需要统计N秒内的M个请求,那么我们的Redis中需要保持N个key等等问题。
2023-12-18 23:27:51 586
原创 消息推送平台
消息推送平台,支持短信、邮件、微信服务号、微信小程序、企业微信、钉钉等多种消息类型,对消息生命周期全链路追踪。不错的学习项目,也比较适合校招的小伙伴作为项目经验。涉及到的知识点比较全面,且代码比较规范,附带详细的学习文档(需付费)。后端基于 Spring Boot + JPA + MySQL + Redis + XXL-JOB + MQ + Apollo & Nacos + Hive + Hadoop,前端基于 Amis。
2023-12-18 23:25:29 1584
原创 CRUD 开发效率工具
仓库地址: https://github.com/GooseCoding/utilsbox。在线地址:https://utilsbox.cn/
2023-12-18 23:22:26 428
原创 CRUD 开发效率工具
仓库地址: https://github.com/GooseCoding/utilsbox。在线地址:https://utilsbox.cn/
2023-09-01 16:51:00 215
原创 开源支付系统
Jeepay是一套适合互联网企业使用的开源支付系统,支持多渠道服务商和普通商户模式。已对接微信支付支付宝云闪付官方接口,支持聚合码支付。Jeepay使用和开发,集成实现权限管理功能,是一套非常实用的web开发框架。
2023-08-27 20:35:24 410
原创 基于 ThreadLocal 实现一个上下文管理组件
在工作中,我们经常需要维护一些上下文,这样可以避免在方法调用过程中传入过多的参数,需要查询/修改一些数据的时候,直接在当前上下文中操作就行了。举个具体点的例子:当web服务器收到一个请求时,需要解析当前登录态的用户,在后续的业务执行流程中都需要这个用户名。如果只需要维护一个上下文状态数据还比较好处理,可以通过方法传参的形式,执行每个业务方法的时候都通过添加一个表示用户名方法参数传递进去,但是如果需要维护上下文状态数据比较多的话,这个方式就不太优雅了。一个可行的方案是通过。
2023-08-27 20:23:19 276
原创 JVM 锁优化和逃逸分析详解
这里的答案是不会,x + y + z 操作的优化「经过逃逸分析」过后,他的动态作用域被限制在了 concatStr方法内,就是说当前实际执行的 StringBuilder 的操作在 concatStr 方法内部,「其他的外部线程无法访问」到,所以这里「虽然有锁,但是可以被安全的消除掉。原则上,我们在写代码的时候,总是推荐将同步块的作用范围限制得尽可能的小--只在共享数据的实际操作作用域中才进行同步,这样也是为了使得需要同步的操作尽可能的变少,即使存在锁的竞争,等待的锁的线程也能很快的获取到锁。
2023-08-27 20:08:47 120
原创 Redis 客户端
我们看了这三种方式,这里仅仅是做了个入门,每个里面都有很多细节的地方需要去研究和使用,整体的感觉是要想使用的简单,那么存储在Redis中的数据就要量少,量大后,就需要自己来定制了,那基本上要用RedisTemplate来做一些工作。
2023-08-27 20:04:08 106
原创 Spring 事务失效的十种常见场景
Spring针对Java Transaction API (JTA)、JDBC、Hibernate和Java Persistence API(JPA)等事务 API,实现了一致的编程模型,而Spring的声明式事务功能更是提供了极其方便的事务配置方式,配合Spring Boot的自动配置,大多数Spring Boot项目只需要在方法上标记注解,即可一键开启方法的事务性配置。
2023-08-27 20:02:16 137
原创 MySQL 中的 distinct 和 group by 哪个效率更高
DISTINCT和GROUP BY都是可以使用索引进行扫描搜索的。例如以下两条sql(只单单看表格最后extra的内容),我们对这两条sql进行分析,可以看到,在extra中,这两条sql都使用了紧凑索引扫描。所以,在一般情况下,对于相同语义的DISTINCT和GROUP BY语句,我们可以对其使用相同的索引优化手段来进行优化。但对于GROUP BY来说,在MYSQL8.0之前,GROUP Y默认会依据字段进行隐式排序。可以看到,下面这条sql语句在使用了临时表的同时,还进行了filesort。
2023-08-27 19:53:00 269
原创 Redis 性能更强的数据库KeyDB
KeyDB是Redis的高性能分支,专注于多线程,内存效率和高吞吐量。除了多线程之外,KeyDB还具有仅在Redis Enterprise中可用的功能,例如Active Replication,FLASH存储支持以及一些根本不可用的功能,例如直接备份到AWS S3。KeyDB与Redis协议,模块和脚本保持完全兼容性。这包括脚本和事务的原子性保证。由于KeyDB与Redis开发保持同步,因此KeyDB是Redis功能的超集,从而使KeyDB取代了现有Redis部署。
2023-08-27 19:50:37 378 1
原创 分布式十二问
分布式事务是相对本地事务而言的,对于本地事务,利用数据库本身的事务机制,就可以保证事务的ACID特性。而在分布式环境下,会涉及到多个数据库。多数据库分布式事务其实就是将对同一库事务的概念扩大到了对多个库的事务。目的是为了保证分布式系统中的数据一致性。分布式事务处理的关键是:需要记录事务在任何节点所做的所有动作;事务进行的所有操作要么全部提交,要么全部回滚。什么是幂等性?同一个接口,多次发出同一个请求,请求的结果是一致的。简单说,就是多次调用如一次。什么是幂等性问题?
2023-08-27 19:42:20 101
原创 顶级Java类库
下面是收集的一些有用的第三方库,Java 开发人员可以在他们的应用程序中使用它们来完成很多有用的任务。从 JDK 8 开始,没有理由使用 Joda,因为您可以在 JDK 8 的新日期和时间 API中获得所有这些功能,但是如果您使用的是较旧的 Java 版本,那么 JodaTime 是一个值得学习的库。优秀且经验丰富的 Java 开发人员的特点之一是对 API 的广泛了解,包括 JDK 和第三方库。在 Java 8 之前,JDK 的数据和时间库有很多缺陷,因为它们不是线程安全的、不可变的和容易出错的。
2023-08-27 19:15:47 80
原创 Sa-Token 实现分布式登录鉴权(轻量级,超简单)
Sa-Token 是一个轻量级 Java 权限认证框架,主要解决:登录认证、权限认证、单点登录、OAuth2.0、分布式Session会话、微服务网关鉴权 等一系列权限相关问题。功能结构图@Data@Component // 保证此类被SpringBoot扫描,完成Sa-Token的自定义权限验证扩展/*** 返回一个账号所拥有的权限码集合*/@Override// 本list仅做模拟,实际项目中要根据具体业务逻辑来查询权限//从redis中获取权限/**
2023-08-27 19:12:16 1699 1
原创 ES+Redis+MySQL
但在实际使用的过程中,申请了该账号的同事,可能异动到其他部门了,此时他可能也会调用会员系统,为了省事,他不会再次申请会员账号,而是直接沿用以前的账号过来调用,这导致我们无法判断一个会员账号的具体使用场景是什么,也就无法实施更精细的流控和降级策略。所以,我们采取的策略是,在试运行期间,主写 SqlServer,然后通过线程池异步写 MySQL,如果写失败了,重试三次,如果依然失败,则记日志,然后人工排查原因,解决后,继续双写,直到运行一段时间,没有双写失败的情况。我们有两个机房,分别是机房 A 和机房 B。
2023-08-26 22:11:15 188
原创 连接一个不存在的 IP 地址,会发生什么
因为目标地址不存在 IP 地址,客户端的内核在发 arp 请求的时候,广播询问这个目标 IP 地址是谁的,由于网络中不存在该目标 IP 地址,所以没有设备应答客户端的 arp 请求。第二题不难,难在的是第一题,如果你没有把两台电脑之间是怎么通信的搞清楚,那么你是无从下手回答的,所以建立好体系化的网络知识,面对这类的场景题目,就能做到举一反三了。这时候数据链路层的 arp 请求,会广播询问 IP 地址(路由器 IP 地址)是谁的,路由器发现是自己的 IP 地址,于是就会将自己的 MAC 地址告诉客户端。
2023-08-26 22:04:07 131
原创 HTTPS细节
* 单向加密:** 不可逆,只要输入的内容一样,输出的密文一定是一样的,有任何修改, 产生的密文都是不同的** 对称加密:** 加密和解密使用同一把密钥,加密解密速度特别快非对称加密: 使用公钥和私钥进行加密和解密,公钥加密私钥解,私钥加密公钥解。加密解密的过程非常慢所谓公钥,就是可以公开给别人的所谓私钥,就是不可以公开给别人,是自己私有保留的。注:以上内容,纯粹是加密的知识,和。
2023-08-26 22:01:00 122
原创 如何测试代码的性能
如果你通过我们一系列的工具,定位到了热点代码,要测试它的性能数据,评估改善情况,就可以交给JMH。如果你的JSON有很多自定义的配置,使用全局的变量更能凸显它的优势。当然,由于ObjectMapper有很多的特性需要配置,你可能会为不同的应用场景分配一个单独使用的ObjectMapper。一般的工具类,都是单例的,同时是线程安全的。ObjectMapper也不例外,它也是线程安全的,你可以并发的执行它,不会产生任何问题。我的cpu有10核,直接就分配了10个线程的并发,cpu在测试期间跑的满满的。
2023-08-26 21:56:42 145
原创 10个解放双手实用在线工具
代码生成图片,这个不写博客的小伙伴可能不太常用,像我会时常分享一些技术类的文章,里边难免会贴出代码块,出于观看方便和样式美观就会转成图片。的所有功能,又在其基础上增加了很多实用功能,它几乎可以集成当下所有主流技术,只要勾选相应的模块就可以自动集成进来。地址:http://www.html580.com/tool/nginx/index.php。里的数据,自动生成对应的统计图形,样式可以自由切换,生成PDF、JPG等格式。是一个自动生成代码的工具,JAVA代码自动生成,还有H5样式布局器。
2023-08-26 21:55:07 86
原创 我的创作纪念日
博客基本上都是碎片化知识,必须要先系统化学习,构建一个自己的框架。继续提高编程的质量,写出更优秀的代码。记录常见的bug,让记忆更深刻。一次偶然的机会认识了csdn。巩固已学的知识,提高代码质量。
2023-08-19 12:22:18 103
原创 用开源管理系统做项目
基于 Spring+SpringMVC+Mybatis 分布式敏捷开发系统架构,提供整套公共微服务服务模块:集中权限管理(单点登录)、内容管理、支付中心、用户管理(支持第三方登录)、微信平台、存储系统、配置中心、日志分析、任务和通知等,支持服务治理、监控和追踪,努力为中小型企业打造全方位 J2EE 企业级开发解决方案。集成EF Core、多租户、缓存、数据校验、鉴权、事件总线、动态 API、通讯、远程请求、任务调度、gRPC 等众多黑科技。代码简洁、易扩展,让开发更简单、更通用、更流行!
2023-07-03 16:56:20 384
原创 订单超时怎么处理?我们用这种方案
背景在企业的商业活动中,订单是指交易双方的产品或服务交易意向。交易下单负责创建这个交易双方的产品或服务交易意向,有了这个意向后,买方可以付款,卖方可以发货。在电商场景下,买卖双方没有面对面交易,许多情况下需要通过超时处理自动关闭订单,下面是一个订单的流程:如上图所示,一个订单流程中有许多环节要用到超时处理,包括但不限于:买家超时未付款:比如超过15分钟没有支付,订单自动取消。商家超时未发货:比如商家超过1个月没发货,订单自动取消。
2023-07-03 16:55:43 248
原创 轻量级分布式日志标记追踪神器,十分钟即可接入到项目
TLog提供了一种最简单的方式来解决日志追踪问题,它不收集日志,也不需要另外的存储空间,它只是自动的对你的日志进行打标签,自动生成TraceId贯穿你微服务的一整条链路。并且提供上下游节点信息。适合中小型企业以及想快速解决日志追踪问题的公司项目使用。支持dubbo,dubbox,spring cloud三大RPC框架。TLog默认只打出spanId和traceId,以这种模板打出,当然你能自定义其模板。还能加入其它的标签头你只需要在springboot的$preApp:上游微服务节点名称。
2023-07-03 16:53:01 417
原创 真正的缓存之王
前言Guava Cache,他的优点是封装了get,put操作;提供线程安全的缓存操作;提供过期策略;提供回收策略;缓存监控。当缓存的数据超过最大值时,使用LRU算法替换。这一篇我们将要谈到一个新的本地缓存框架:Caffeine Cache。它也是站在巨人的肩膀上-Guava Cache,借着他的思想优化了算法发展而来。本文主要介绍Caffine Cache 的使用方式,以及Caffine Cache在SpringBoot中的使用。1. Caffine Cache 在算法上的优点-W-TinyLFU。
2023-07-03 16:52:26 690
原创 SpringBoot分片上传、断点续传、大文件极速秒传功能
分片上传,就是将所要上传的文件,按照一定的大小,将整个文件分隔成多个数据块(我们称之为Part)来进行分别上传,上传完之后再由服务端对所有上传的文件进行汇总整合成原始的文件。断点续传是在下载或上传时,将下载或上传任务(一个文件或一个压缩包)人为的划分为几个部分,每一个部分采用一个线程进行上传或下载,如果碰到网络故障,可以从已经上传或下载的部分开始继续上传或者下载未完成的部分,而没有必要从头开始上传或者下载。本文的断点续传主要是针对断点上传场景。
2023-07-03 16:52:04 465
Spire.Doc-FE_2.7.3.rar
2020-03-13
Oracle可执行文件,包含导入导出可执行文件
2019-12-16
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人