- 博客(26)
- 收藏
- 关注
原创 改造Mybatis-plus逻辑删除(附带mybatis-plus部分源码解读)
AbstractMethod该抽象类是其他增删改查 method的模板抽象父类。/*** EntityWrapper方式获取select where* @param newLine 是否提到下一行* @param table 表信息*/true);//
2024-12-05 11:51:29
1106
原创 Alibaba EasyExcel 导入导出全家桶
首先说下EasyExcel相对 Apache poi的优势:EasyExcel也是阿里研发在poi基础上做了封装,改进产物。它替开发者做了注解列表解析,表格填充等一系列代码编写工作,并将此抽象成通用和可扩展的框架。相对poi,在数据量比较大的时候,它有着更优越的性能体现。导出的时候,easyexcel使用优化的反射技术,避免poi频繁的去创建cell和row对象;
2024-12-05 11:16:37
1461
原创 JRebel插件,全教程
当程序员在开发环境中对任何一个类或者资源作出修改的时候,这个变化会直接反应在部署好的应用程序上,从而跳过了构建和部署的过程,可以省去大量的部署用的时间。设置compiler.automake.allow.when.app.running,快捷键ctr+shift+A,搜索:registry或者按快捷键 Ctrl+Shift+Alt+/,选择 Registry(注册表)修改代码(只测试了Java代码的修改)后,按快捷键 Ctrl+F9,运行后会提示有变化是否重新加载,选yes。本篇文章来给大家解决这个烦恼。
2024-11-11 18:27:31
655
原创 jdk9为何要将String的底层实现由char[]改成了byte[]
在java的世界里,一个字符(char)就是2个字节,从\u0000到\uFFFF,占4个字节的字符,在java里是用两个char来存储的,而String的各种操作,都是以java的字符(char)为单位的,charAt是取得第几个char,subString取的也是第几个到第几个char组成的子串,甚至length返回的都是char的个数,从来没有哪个方法可以让你“通过下标取出字符串中第几个'现实意义'中的字符”,所以UTF-16在java的世界里,就可以视为一个定长的编码。
2024-10-10 23:31:41
348
1
原创 java SE 基础知识指南
36. Lock(上):相比Java synchronized,JUC Lock有什么优势?19. io类库:http://java.io类库如此庞大,怎么才能全面系统的掌握它?51. 线程状态:为何synchronized和Lock这两种锁对应的线程状态不同?34. synchronized(上):线程释放锁之后,如何通知其他线程获取锁?13. HashMap(上):为何HashMap中数组的大小必须是2的幂次方?37. Lock(中):如何使用AQS(抽象队列同步器)实现JUC Lock?
2024-10-10 23:27:39
1124
1
原创 2024最新 Navicat Premium 17 简体中文版安装图文详细教程
Navicat 17 引入了一系列新特性,旨在提升用户体验和工作效率。以下是一些值得关注的新功能:模型工作区的全面重新设计:包含了增强的图表设计、更强大的同步工具、数据字典支持等多项功能。这有助于在一个工作区中创建多个模型,使在单个图表中说明不同的模型对象成为可能,从而简化了复杂系统的浏览和理解。数据剖析:数据查看器现在集成了数据分析工具,为数据提供了一个可视化且全面的视图,增强了数据的完整性。数据字典:为各种服务器平台中的数据库内的每个元素提供文档和描述。
2024-10-07 23:30:03
7090
原创 面试官:如何实现分布式系统的限流?
本来在单服务器部署系统中,滑动时间窗口计数器限流方式由于要计算上一次和下一次的请求事件间隔,记录每次请求的时间这是比较麻烦的。(相对令牌桶算法有RateLimiter-API直接支持,自己去实现缓存也比较麻烦)而且没有令牌桶算法平滑,但是在分布式系统中,因为不可能只用一个本地API就能解决多台服务器进程的请求限流,因为没办法保持一致性。关键点在于,相同的接口,每次请求都会覆盖前一次的请求时刻,这就很好的解决了滑动窗口记录请求时间的麻烦之处。原理:在客户端实现限流逻辑,控制发送请求的频率。
2024-10-07 08:06:03
918
原创 【2024版本】Mac/Windows IDEA安装教程
IDEA 2024版本真的很强大,此外JDK发布了最新稳定版 JDK21 ,只有新版本支持JDK 21、JDK22。原来数据库插件不支持redis等一些NoSql的数据库的连接,如果要使用需要自己单独装收费的插件。直接打开idea就很吃内存了,再打开其他一大堆的客户端,留给我们实际运行内存就不多了。新版本性能强大,对资源占用的更少,打开项目速度提升了一倍。1、建议大家直接在官网下载最新版本,登陆官网,up主下载的是的2024.1.4,2023最新版本以及2022版本以上的版本都支持。
2024-10-04 20:14:27
3693
原创 面试官:分布式幂等如何实现?(拦截器篇)
幂等操作是指对某个操作进行多次执行,其结果与执行一次的结果相同。这一特性在分布式系统和网络服务中非常重要,尤其是在处理请求失败、重试或并发操作时。
2024-10-04 20:07:26
1105
原创 反射第二弹:用注册器动态注册(用自定义的注解标注的)策略,实现策略模式的设计
Java的反射机制允许程序在运行时检查和操作类、方法和字段。通过反射,你可以在运行时获取类的信息(如类名、字段、方法等),并且可以动态地创建对象、调用方法和访问/修改字段。以下是Java反射机制的一些重要概念和用法:class类: Java中的每个类都有一个与之关联的Class对象,它包含了该类的完整信息。Class
2024-10-04 19:43:35
1131
原创 数据库(mysql)锁查询,杀灭死锁进程教程
后面我还会出一篇,关于实际开发过程中,所遇到的死锁出现的场景,比如:主键(或唯一键)键冲突,失败的insert变成共享锁,导致死锁,如何排查,如何解决、优化的博文。假如数据发生死锁,导致数据库表无法更新、插入、删除,业务流程无法进行,你知道该如何查询锁信息,死锁信息,然后杀灭死锁进程吗?这个命令展示了当前的锁信息,包括锁的类型、空间ID、页面号、索引记录等,帮助你理解哪些锁正在被持有以及哪些请求正在等待。此命令可以显示锁等待的详细信息,包括请求锁的事务ID和被等待的事务ID,以及涉及的锁和索引等。
2024-09-28 19:19:25
945
原创 我决定远离c死d嗯
开始学习开发也有几年了,从最开始的特别喜欢在c死d嗯找技术博客,到逐渐和同学吐槽c死d嗯,最后到难以忍受,我思考了很久,最终决定将战略中心转移。无论如何,我都感激那些无私分享资料的前辈,让我模糊的感受到开源的魅力。
2024-07-07 23:55:40
198
原创 group by 效率高还是distinct效率高?你得先看什么数据库。
其实取消这种操作也好,众多数据库中也就mysql有这种排序操作,而且只排序第一个group by 子句中的字段,对于不需要排序的查询需求,无疑是增加不必要的执行负担。可是group by在不同的数据库中语法是区别很大的:比如mysql中比较灵活,group by子句中的字段和select子句中字段关联不大,group by中的字段可以出现在select 中,也可以不出现。而mysql的排序还是仅限于对紧跟group by的第一个字段进行排序,多字段分组的情况下,除了第一个字段,其他的并不做排序。
2024-06-21 17:29:18
1196
原创 需求:用户自定义字段展示,怎么设计?利用JAVA反射机制解决
反射在Java中使用的是比较频繁的,很多设计都会使用到,值得注意的是有些私有属性getFields()是无法获取的,必须要使用 getDeclaredFields() 方法获取全部属性。如果要操作某些属性,比如spring中的自动装配,给私有属性赋值,则需要设置field.setAccessible(true)。更多资源分享,请关注我的公众号:搜索或扫码 砥砺code。
2024-06-07 13:17:12
754
原创 面试官问:数据库如果不是SERIALIZABLE隔离级别,读和写操作可以并行(同时)执行,为什么分摊数据库压力要读写分离,不能简单的负载均衡吗?
读操作可以从从库获取数据,减少主库的压力,从而提高整体数据库性能。2、节省技术成本:将读写分离,可以降低数据库的技术成本,更多的集中精力在主库的性能优化和开发工作上。3、数据安全:将读写分离,可以显著降低主库的注入风险,保障数据库系统的安全性。4、更好的事务控制:将读写分离,可以更好的控制事务,保障数据库的完整性和一致性。5、增加可用性:将读写分离,可以有效避免主库出现故障而影响系统的可用性。(某种意义上也起到了灾备的作用)
2024-05-31 23:23:20
1019
原创 定时任务线程池源码解读(读这一篇就够了)
在《并发编程的艺术》一书中对ScheduledThreadPoolExecutor的介绍还是基于jdk1.6版本,而在jdk1.7之后ScheduledThreadPoolExecutor发生了较大的变化,其使用的阻塞队列由之前的DelayQueue变成了DelayedWorkQueue。DelayedWorkQueue是DelayQueue(take进行delay判断)和PriorityQueue(堆结构)的结合。
2024-05-06 22:58:47
1218
1
原创 ConcurrentHashMap的线程安全处理真的能应对所有的线程安全,数据一致性的需求场景吗?如果ConcurrentHashMap解决不了的并发业务场景,就要用Hashtable来实现吗?
因为可能同一个业务中的另一个方法共用此Map,但是只需要put方法做互斥,防止扩容出现线程不安全等,后面会重点复现该场景)。所以很多人一提到ConcurrentHashMap就说它是线程安全的Map集合,虽然也没毛病,因为大部分的先获取再修改的逻辑,也有线程安全的computeIfAbsent,putIfAbsent来实现,但其实还是太了解它的设计目的,因为它的线程安全范围真的太小了,想要依靠JDK自带的一个集合就可以解决实际应用中复杂多变并发的线程安全和高吞吐量的需求,是很不现实的。
2024-03-11 18:54:50
2051
原创 并发限流算法的实践
保护高并发系统的三把利器是缓存、降级、限流。缓存之前讲过了,内存读取,提升相应速率,对高并发请求做暂存缓冲。熔断降级暂时也不做过多讲述,本篇主要讲限流。前面聊过网关流量控制(限流),熔断降级功能。那么限流是如何实现控制的呢?限流分瞬时流量控制和时间窗口流量;被限流的端口仍然可以提交任务,只是任务被阻塞,缓存在内存,会有OOM的风险;是对下游服务的一种保护;限流的目的是通过对并发访问/请求进行限速或者一个时间窗口内的的请求进行限速来保护系统,一旦达到限制速率则可以拒绝服务或进行流量整形。
2024-02-29 21:50:22
678
原创 你知道线程池的线程是如何复用的吗?线程池的源码解读
线程数的设计因为不太好复现CPU的时间,所以一般都是预估;比较忌讳队列容量比较小,最大线程数又比较大,这样会造成大量的线程上下文切换,栈内存也有可能会被爆掉;也比较忌讳将阻塞队列设置成无界,会有OOM的风险不说,还会造成饥饿(虽然饥饿可以多做几个线程池解决,但是OOM肯定是无法规避)。
2024-02-03 22:43:05
963
原创 鉴权 OAuth 2.0的实现(Spring_Security_Oauth2)
可以理解为客户端和服务器之间的一次私密谈话,在一次对话中可能会有多个请求和响应;同时要具有鉴别多个请求是来自同一个客户端的一次对话的功能;用户认证通过后,为了避免用户的每次操作都进行认证,可将用户的信息保证在会话中。会话就是系统为了保持当前用户的登录状态所提供的机制,常见的有基于session方式、基于token方式等。
2024-01-28 03:23:45
3607
1
原创 用synchronized实现的就一定是非公平锁吗?ReentrantLock(true)得到的“公平锁”真的公平吗?
如果调用了Object中的wait方法,那么节点会转移到waitSet队列中,只有再次调用notify方法 才能将waitSet队列中的头节点放入entryList或者cxq,notifyAll 全部节点加入到cxq中(EntryList头结点线程叫做 OnDeck Thread,notifyAll不管cxq中是否为空,都会将待唤醒的线程节点都放到cxq中),然后在由线程释放锁之后进行唤醒On Deck线程。而我们平时所用的传参obj,其实不是锁对象,而是被锁的对象,也叫参照对象。也不是绝对的公平的机制。
2024-01-02 22:54:36
1858
原创 redisson实现的MultiLock、RedLock分布式锁使用场景和可能存在的问题。
Redisson是一个在Redis的基础上实现的Java驻内存数据网格(In-Memory Data Grid)。它是一个基于Redis实现的高级分布式锁客户端。同时Redisson是Redis官网指定的RedlLock使用Java语言的实现。网络上沿着Redisson的官方文档的介绍已经很多,公平锁、读写锁、信号量、闭锁的用法和源码解析。我这里就不做赘述。本篇博文主要讲使用联锁MultiLock和红锁RedLock的必要场景,以及可能出现的问题。
2023-11-01 00:34:18
2550
原创 redis 6.0之后它的主线程是多线程吗?为什么要这样设计?事务、Lua脚本的支持有什么区别?管道和lua脚本又有什么区别?本篇带你来了解。
之前跟某某居公司的高级开发有交流过Redis现在是多线程还是单线程,其实我觉得聊这种八股文问题没啥意思,毕竟他又没有说明,他问题前提是问的主线程是否为单线程。因为Redis 在 2.6 版本,会启动 2 个后台线程,分别处理关闭文件、AOF 刷盘这两个任务;所以这时候起redis就不是单线程了,不过我知道他的意思还是想问主线程是怎么回事。那么我给出我的答案,主线程到现在仍然是单线程。然后这位兄弟就着急了,redis 6.0版本之后处理业务线程也变成多线程了。
2023-10-29 02:16:32
207
原创 Springboot集成Klock简单实现分布式锁
同一个方法,不同参数,来修改一个hash结构缓存的不同field,可以将field作为二级key,那么不同的field就有不同的lockKey,不会互相影响的业务,就可以不用阻塞了。但是如果是订单中,同一个订单中有不同的品名ID的商品,这些品名对应不同的key,在下单的时候,防止超卖,每个品命的库存都需要被保护的,即使其他的业务方法,想修改多个key中的其中的一个key,都不行,那么@Klock的注解实现方式就不可行。lockType:锁的类型,目前支持(可重入锁,公平锁,读写锁)。
2023-10-27 21:10:42
802
原创 synchronized(obj) 中的waitSet称为“等待队列”,那么这个队列是FIFO机制吗?或者是当调用obj.notify()方法后,是最先进入waitSet中的一个线程被唤醒吗?
本篇探究jdk Monitor机制在Java中的实现,MESA模型中,等待唤醒的机制是如何实现的。
2023-08-03 18:42:11
339
1
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人