阿Q说代码

其他

原理+配置+实战,Canal一套带走

哈喽大家好,我是阿Q!前几天在网上冲浪的时候发现了一个比较成熟的开源中间件——Canal。在了解了它的工作原理和使用场景后,顿时产生了浓厚的兴趣。今天,就让我们跟随阿Q的脚步,一起来揭开它神秘的面纱吧。简介canal
2023年3月14日
其他

实战:画了几张图,终于把OAuth2搞清楚了

哈喽大家好,我是阿Q。对于身份认证和用户授权,之前写过几篇关于Shiro和Security的文章。从发送口令获取源码的反馈来看,大家还是比较认可的。今天给大家带来一种新的授权方式:oauth2。理论
2022年11月16日
其他

重磅出击,20张图带你彻底了解ReentrantLock加锁解锁的原理

点击“阿Q说代码”,关注,设为星标每日技术干货,第一时间送达!哈喽大家好,我是阿Q。最近是上班忙项目,下班带娃,忙的不可开交,连摸鱼的时间都没有了。今天趁假期用图解的方式从源码角度给大家说一下ReentrantLock加锁解锁的全过程。系好安全带,发车了。简单使用在聊它的源码之前,我们先来做个简单的使用说明。当我在IDEA中创建了一个简单的Demo之后,它会给出以下提示提示文字在使用阻塞等待获取锁的方式中,必须在try代码块之外,并且在加锁方法与try代码块之间没有任何可能抛出异常的方法调用,避免加锁成功后,在finally中无法解锁。1、如果在lock方法与try代码块之间的方法调用抛出异常,那么无法解锁,造成其它线程无法成功获取锁。2、如果lock方法在try代码块之内,可能由于其它方法抛出异常,导致在finally代码块中,unlock对未加锁的对象解锁,它会调用AQS的tryRelease方法(取决于具体实现类),抛出IllegalMonitorStateException异常。3、在Lock对象的lock方法实现中可能抛出unchecked异常,产生的后果与说明二相同。java.concurrent.LockShouldWithTryFinallyRule.rule.desc还举了两个例子,正确案例如下:Lock
2022年10月20日
其他

领导看了我写的关闭超时订单,让我出门左转!

因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。支持一下阿Q吧!哈喽大家好,我是阿Q!前几天领导突然宣布几年前停用的电商项目又重新启动了,带着复杂的心情仔细赏阅“儿时”的代码,心中的酸楚只有自己能够体会。这不,昨天又被领导叫进了“小黑屋”,让我把代码重构下进行升级。看到这么“可爱”的代码,心中一万只“xx马”疾驰而过。让我最深恶痛觉的就是里边竟然用定时任务实现了“关闭超时订单”的功能,现在想来,哭笑不得。我们先分析一波为什么大家都在抵制用定时任务来实现该功能。定时任务
2022年3月2日
其他

快速尝鲜:RabbitMQ 搭建完就得用起来

因为公众号平台更改了推送规则,如果不想错过内容,记得读完点一下“在看”,加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。支持一下阿Q吧!哈喽大家好,我是阿Q!上文我们已经完成了RabbitMQ的安装,安完就要让它发挥点作用,今天就在SpringBoot项目里集成一下子,尝尝鲜!在项目真正开始之前我们先来简单介绍下RabbitMQ的工作流程:生产者往交换机中发送消息;交换机通过规则绑定队列,通过路由键将消息存储到队列中;消费者获取队列中的消息进行消费;环境:SpringBoot
2022年2月23日
其他

CentOS8 安装 erlang 和 RabbitMQ

然后就可以用新账号进行登陆因为公众号平台更改了推送规则,如果不想错过内容,记得读完加个“星标”,这样每次新文章推送才会第一时间出现在你的订阅列表里。支持一下阿Q吧!
2022年2月21日
其他

开工:Spring 完美导入 IDEA

"http://maven.aliyun.com/nexus/content/groups/public"}其目的就是为了换成国内的镜像(init.gradle
2022年2月7日
其他

看了西游记,你可知道孙悟空是如何召唤土地的吗?

小时候最开心的事莫过于躺在沙发上看《西游记》了。大闹天宫、三打白骨精、真假美猴王......一幕幕精彩的故事萦绕脑海,现在想来,回味无穷。不知道你有没有注意到这个细节:每当孙悟空到了一个新的环境需要了解本地的“风土人情”时,都会挥舞一下金箍棒,将土地召唤出来。那么你可知道,土地公公接收孙悟空召唤的原理是什么吗?事件通知机制我们可以先将其理解为“事件通知机制”,即每当孙悟空将金箍棒敲在地上时,就相当于给土地发了一封
2021年12月1日
其他

看了同事写的代码,我竟然开始默默的模仿了。。。

不见了?要回答这个问题,我们就得了解下HandlerMethodArgumentResolverComposite这个类了,以下简称Composite。SpringMVC
2021年11月11日
其他

实战篇:断点续传?文件秒传?手撸大文件上传

各位看官大家好,今天给大家分享的又是一篇实战文章,希望大家能够喜欢。开味菜最近接到一个新的需求,需要上传2G左右的视频文件,用测试环境的OSS试了一下,上传需要十几分钟,再考虑到公司的资源问题,果断放弃该方案。一提到大文件上传,我最先想到的就是各种网盘了,现在大家都喜欢将自己收藏的「小电影」上传到网盘进行保存。网盘一般都支持断点续传和文件秒传功能,减少了网络波动和网络带宽对文件的限制,大大提高了用户体验,让人爱不释手。说到这,大家先来了解一下这几个概念:「文件分块」:将大文件拆分成小文件,将小文件上传\下载,最后再将小文件组装成大文件;「断点续传」:在文件分块的基础上,将每个小文件采用单独的线程进行上传\下载,如果碰到网络故障,可以从已经上传\下载的部分开始继续上传\下载未完成的部分,而没有必要从头开始上传\下载;「文件秒传」:资源服务器中已经存在该文件,其他人上传时直接返回该文件的URI。RandomAccessFile平时我们都会使用FileInputStream,FileOutputStream,FileReader以及FileWriter等IO流来读取文件,今天我们来了解一下RandomAccessFile。它是一个直接继承Object的独立的类,底层实现中它实现的是DataInput和DataOutput接口。该类支持随机读取文件,随机访问文件类似于文件系统中存储的大字节数组。它的实现基于「文件指针」(一种游标或者指向隐含数组的索引),文件指针可以通过getFilePointer方法读取,也可以通过seek方法设置。输入时从文件指针开始读取字节,并使文件指针超过读取的字节,如果写入超过隐含数组当前结尾的输出操作会导致扩展数组。该类有四种模式可供选择:r: 以只读方式打开文件,如果执行写入操作会抛出IOException;rw: 以读、写方式打开文件,如果文件不存在,则尝试创建文件;rws: 以读、写方式打开文件,要求对文件内容或元数据的每次更新都同步写入底层存储设备;rwd: 以读、写方式打开文件,要求对文件内容的每次更新都同步写入底层存储设备;在rw模式下,默认是使用buffer的,只有cache满的或者使用RandomAccessFile.close()关闭流的时候才真正的写到文件。API1、void
2021年8月23日
其他

实战篇:Security+JWT组合拳 | 附源码

jdbc:mysql://127.0.0.1:3306/cheetah?characterEncoding=utf-8&useSSL=false&serverTimezone=UTC
2021年7月2日
其他

Battle:你会TLAB,我会逃逸分析

“噔噔噔......”传来一阵敲门声,把我从美梦中惊醒了。朦胧间听到有人在说话“阿Q,在家不?”“来了来了”,推门一看,原来是“赵信”兄弟。「赵信」:自称常山赵子龙,一把三爪长枪耍的虎虎生风,见人上去就是一枪,人送外号“菊花信”。TLAB尽管不是所有的对象实例都能够在TLAB中成功分配内存(因为它的空间比较小),但JVM明确是将TLAB作为内存分配的首选;一旦对象在TLAB空间分配内存失败时,JVM就会尝试着通过使用加锁机制确保数据操作的原子性,从而直接在Eden空间中分配内存。「参数设置」-XX:UseTLAB:设置是否开启TLAB空间;-XX:TLABWasteTargetPercent:设置TLAB空间所占Eden空间的百分比大小,默认仅占1%;堆是分配对象的唯一选择吗?如果经过逃逸分析(Escape
2021年6月23日
其他

醒酒菜:动画图解核心内存区--堆

端午佳节一下子就过完了,大家是不是还沉迷在假期的欢乐气氛中无法自拔?今天阿Q为大家准备了上好的“醒酒菜”——JVM运行时数据区的核心内存区——堆。堆的概述一般来说:一个Java程序的运行对应一个进程;一个进程对应着一个JVM实例(JVM的启动由引导类加载器加载启动),同时也对应着多个线程;一个JVM实例拥有一个运行时数据区(Runtime类,为饿汉式单例类);一个运行时数据区中的堆和方法区是多线程共享的,而本地方法栈、虚拟机栈、程序计数器是线程私有的。堆空间差不多是最大的内存空间,也是运行时数据区最重要的内存空间。堆可以处于物理上不连续的内存空间,但在逻辑上它应该被视为连续的。在方法结束后,堆中的对象不会马上被移除,仅仅在垃圾收集的时候才会被移除。堆,是GC(Garbage
2021年6月15日
自由知乎 自由微博
其他

故事篇:终于给老婆讲明白什么是logback了!

故事会迟到,但他从不会缺席。今天的故事开始了,你准备好了吗?前奏简单介绍一下我的老婆:集智慧与美貌于一身的女子——阿狸,一句“我们心有灵犀,不是吗?”让我瞬间“沦陷”。正题LogBack简介常见的日志框架呢有以下几种:JUL(Java
2021年6月4日
其他

故事篇:数据库架构演变之路

故事的开头总是这样,适逢其会、猝不及防。今天我哼着“也是黄昏的沙滩上,有着脚印两对半......”在海边散步,迎面走来了一位身穿黄金甲的男子,来海边还穿这么花哨,真是个傻X。定睛一看,这不是嘉文吗?❝背景介绍:嘉文四世,德玛西亚皇子,是有名的高富帅。与盖伦、菊花信并称草丛三剑客,整天嚷嚷着“犯我德邦者,虽远必诛”。❞「嘉文:」
2021年5月24日
被用户删除
其他

校招进腾讯,二本也可以?

其实一开始是没抱太大希望,但是出乎意料,初试、复试相继通过,这时候就很难保持平常心,渴望担忧兴奋。。。各种情绪交替出现,导致在HR面时表现得很紧张。因为听说HR面筛人的概率很低,就还是抱有很大希望。
2021年5月19日
其他

面试篇:虚拟机栈5连问?一听心里就乐了

众所周知,栈只有进栈和出栈两种操作,所以它是一种快速有效的分配存储方式。对于它来说,它不存在垃圾回收问题,但是它的大小是动态的或者固定不变的,因此它会存在栈溢出或者内存溢出问题......
2021年5月17日
其他

包邮送书了!Redis之父走了,但Redis不会凉!

量示意图例的形式呈现,以求让读者在最短的时间内,以最舒服的方式,获得最核心的知识。本书系统化介绍Redis命令及其应用场景,内容深入,图文并茂,巨细靡遗,是掌握Redis的案头必备参考书。
2021年5月15日
其他

方法调用:一看就懂,一问就懵?

所有依赖静态类型来定位方法执行版本的分派动作称为静态分派。静态分派的典型应用就是方法重载。静态分派发生在编译阶段,因此确定静态分派的动作实际上不是由虚拟机来执行的,而是由编译器来完成。
2021年5月14日
其他

20张图助你了解JVM运行时数据区,你还觉得枯燥吗?

虚拟机栈主管Java程序的运行,保存方法的局部变量(8种基本数据类型、对象的引用地址)、部分结果,并参与方法的调用和返回,那它内部到底是什么构造呢?虚拟机栈内部保存着一个一个的栈帧(Stack
2021年5月7日
其他

面试必备常见存储引擎与锁的分类,请查收

CHARSET=utf8相对其他数据库而言,MySQL的锁机制比较简单,其最显著的特点是不同的存储引擎支持不同的锁机制。比如,MyISAM和MEMORY存储引擎采用的是表级锁(table-level
2021年4月20日
其他

InnoDB解决幻读的方案--LBCC&MVCC

此处我们演示的是update的情况,对于删除的情况可以认为是update的特殊情况,会将版本链上最新的数据复制一份,然后将trx_id改成删除操作的trx_id,同时在该条记录的头信息(record
2021年4月13日
其他

JVM集合之类加载子系统

符号引用验证:主要是针对符号引用转换为直接引用的时候,是会延伸到第三解析阶段,主要去确定访问类型等涉及到引用的情况,主要是要保证引用一定会被访问到,不会出现类等无法访问的问题。
2021年4月7日
其他

ElastricSearch第三弹之存储原理

在默认情况下会对合并流程进行资源限制,所以搜索仍然有足够的资源很好地执行。限流阈值默认是20MB/s,如果是SSD,可以考虑100-200MB/s;如果是机械磁盘而非SSD,需要增加设置
2021年4月2日
其他

详细到你无法拒绝

分钟。一提到Redis,相信大家都不会感到陌生吧。今天就让我们在阿里云上安装一下Redis,为以后使用它做个准备。一、下载1,下载页面:https://redis.io/2,下载wget
2021年3月2日
其他

CentOs安装MySQL

‘username’@‘host’;五、Navicat等可视化工具连接上述步骤结束之后,发现可视化工具并不能连接,所以需要我们开放服务器的端口号,步骤如下:打开实例列表,点击“
2021年2月26日