- 博客(203)
- 资源 (5)
- 问答 (1)
- 收藏
- 关注
原创 分布式事务-tcc( 与 2PC 的对比与代码示例)
/ === 订单服务 ===@Service// 幂等检查:防止重复Try// 绑定全局事务ID// 幂等处理// 可能Try未执行// === 库存服务 ===@Service// 幂等检查// 冻结库存(实际库存不变)// 幂等// 实际扣减库存并解冻// 解冻库存// === 支付服务 ===@Service// 预授权资金(冻结金额)// 实际扣款// 释放预授权。
2025-03-13 14:01:35
671
原创 分布式事务-2pc
分布式事务是指涉及多个独立资源(如数据库、消息队列、缓存等)的事务操作,需要保证所有资源要么全部提交成功,要么全部回滚,以确保数据的一致性。准备阶段(Prepare Phase):● 协调者询问所有参与者是否可以提交事务。● 参与者执行事务操作,并返回准备结果(成功或失败)。提交阶段(Commit Phase):● 如果所有参与者都准备成功,协调者发送提交请求。● 如果任一参与者准备失败,协调者发送回滚请求。2PC 是分布式事务的基础协议,通过准备和提交两个阶段保证事务的原子性。
2025-03-13 09:51:22
228
原创 持续迭代,做一个可以投入项目真正使用的业务容器及插件
上一篇文章中已经可以允许插件中有自己的依赖jar包了(原理就是插件中依赖jar包交给插件专属的插件类加载器PluginClassLoader进行加载,业务系统中依赖的jar包交由业务类加载器AliooClassLoader进行加载)大家知道java中是尽可能面向对象编程的,如果请求插件中的功能类方法返回值类型是一些常见的3方jar,比如com.alibaba.fastjson.JSONObject,按照之前的设计会存在2种情况:业务系统中没有依赖fastjson业务系统中也依赖fastjson。
2024-12-07 16:11:45
813
原创 再接再厉,让插件真的像个正儿八经的插件
将插件绑定到package阶段,当执行mvn package时会自动触发此插件的运行try {//创建plugin.propertiesif (!continue;//如果依赖的jar包是system类型,则直接将依赖的jar包添加到fatJar中的lib目录下// 创建 classes 目录条目// 创建 lib 目录条目//采用json的风格,输出入参对象的各个属性。
2024-12-01 21:11:11
342
原创 Git基础操作:git tag 相关命令举例讲解
git tag 是 Git 中用于给某个特定的提交创建标签的命令。标签通常用于标识重要的时刻,比如发布版本。与分支不同,标签是静态的,它们指向一个特定的提交。当你想要标记某个重要的状态,以便将来可以轻松地找到或引用它时,标签会非常有用。默认情况下,标签不会自动推送到远程仓库。你需要显式地推送它们。
2024-11-27 15:30:58
150
原创 小有所成,总算搞懂了类加载器
/自定义一个classloader@Overridetry {is.read(b);//此处结果为 myClass:class com.alioo.classloader.v1.CustomClassLoaderTest//此处结果为 systemClassLoader:jdk.internal.loader.ClassLoaders$AppClassLoader@512ddf17//此处值为:false。
2024-11-25 12:09:08
515
原创 jstack结果提取特定线程池线程的堆栈
这里假设你已经知道如何定位java进程PID,以及如何执行jstack命令进行导出,下面仅提供相关命令,及示例。
2024-08-20 15:07:51
275
1
原创 Git基础操作:git stash 相关命令举例讲解
git stash 是 Git 提供的一个强大的工具,它允许你临时保存(或“暂存”)当前工作目录和索引(暂存区)的改动,从而可以切换分支或执行其他操作而不影响当前的工作状态。
2024-01-11 10:00:30
773
原创 “程序员35岁危机”,程序员危机的核心原因是年龄吗?
这篇文章讨论了程序员在当前时代面临的危机,主要源于年龄与技能的匹配问题。作者认为,35岁是一个重要的年龄节点,许多程序员在这个年龄段会感到焦虑,因为他们的工作经验似乎没有与之相匹配的增长。文章分析了个人焦虑的原因,包括自身年龄和圈子的影响,以及收入增长率放缓的恐慌。作者提到,个人收入增长率放缓可能是个人因素和外部环境因素的结果。外部环境因素包括程序员供给增多和市场需求减少,而程序员的供给已经过饱和,市场需求也开始下降。
2024-01-03 23:30:49
1229
原创 Git基础操作:合并某个分支的一个目录到另一个分支
有的时候不小心在错误的分支A上开发了一点代码,也已经提交了;或者分支A原计划先上线的,但是业务调整需要插一个需求进来,但是插进来的需求中有一部分代码在分支A中已经写过了。
2023-11-27 14:34:28
674
原创 利用ssh端口转发
localhost:80 是目标地址和端口,这里的 localhost 是相对于SSH服务器来说的,所以 localhost:80 表示SSH服务器上的80端口。这个命令是利用了ssh的端口转发功能,SSH 命令的 -L 选项可以创建一个在本地机器上的端口转发,可以把本地的一个端口的流量转发到远程的一个端口。你的本地机器IP是192.168.1.100,你有一个远程服务器,假设IP是 203.0.113.0,上面运行了一个web服务在 80 端口。8080 是你本地机器上监听的端口。
2023-11-20 23:42:55
805
原创 Git常见问题:git pull 和 git pull --rebase二者区别
总之,git pull 和 git pull --rebase 都可以将远程的更改合并到本地分支,但它们的合并方式不同。这意味着,如果在本地和远程分支上有新的提交,git pull 会创建一个新的提交(称为 “merge commit”),该提交将两个分支的历史合并在一起。由于这样的合并方式,你的 Git 提交历史可能会变得非线性,包含许多分叉和合并。git rebase:将本地分支上的提交 “重放”(重新应用)在远程分支上,而不是创建一个新的合并提交。这可以使你的提交历史保持线性,不包含分叉和合并。
2023-09-04 17:44:39
3453
原创 hive基础: sql处理树状结构,扁平展示,以及节点打标
背景:部门表是树状结构需求1: 将每个部门的所有的父级节点水平展示出来需求2: 为每个部门打标归类,父级任意一级节点中含有1的归类成'aaaa',父级任意一级节点中含有2的归类成'bbbb',否则归类成'其它';
2023-04-17 21:23:05
922
原创 Git常见问题:Your branch and ‘xxx/xxx‘ have diverged
Your branch and ‘xxx/xxx‘ have diverged
2023-03-09 12:17:20
2349
原创 长期主义就是坚持重复的做一件事?
“长期主义”最近这个词比较热,个人在阅读文章时经常会遇到,说得俗一点,“长期主义”这个词有些泛滥成灾了,也引发了我个人的一些思考:长期主义等于坚持?长期主义等于重复的做一件事?大家口中的长期主义,到底多长时间才算长期?
2023-02-17 16:36:45
313
原创 自己动手实现javap
纸上得来终觉浅,绝知此事要躬行,今天就动手实现一个jdk自带的工具javap- 阅读本文可以带你完整的自己实现javap的全部功能- 本文只提到了核心代码,完整代码git地址请访问:https://github.com/lzc-alioo/itstack-demo-jvm- 项目访问入口类是com.lzc.wuxin.Jad1,com.lzc.wuxin.Jad2,将分别代表javap,javap -v的实现逻辑,如果你在运行过程中有任何问题欢迎留言,看到后一定为你解答,同时如果你发现代码的缺陷,
2022-04-17 21:44:28
572
原创 Git高级操作:变更git仓库地址
有时候公司仓库地址变化了,或者从GitHub仓库克隆了一个开源项目,后来想修改下,但是代码不能直接提交到别人的项目中,打算克隆到自己github仓库下再进行修改,便可以通过下面的命令直接修改
2022-04-04 20:53:56
711
原创 Git高级操作:git设置别名,研发提效必备技能( git alias)
以这个命令为例```git status```经过上面设置以后,直接运行 git st 就和 git status 有一样的效果了,其它的就不一一举例了
2022-03-28 10:22:30
1336
原创 JavaAgent的那点秘密
JavaAgent的那点秘密前言大家都知道Java文件编译成Class文件之后才能在Jvm中运行的,而Class文件自有一套规范:不必一定是Java文件经由javac编译产生;其它编程语言也可以直接生成Class文件交由Jvm运行;既然其它语言都可以生成Class文件,理论上Java语言自己是不是也可以修改/篡改Class文件呢?答案是肯定的。那么是否有这方面的需求呢(用Java语法去直接修改Class文件)我举个例子:需要去增强别人的二方包,需要针对其中大量的方法进行增强程序运行期间
2021-10-31 20:43:22
409
原创 Git基础操作:git只删除远程文件
比如我使用idea进行开发,不小心将.idea目录提交到远程仓库了,即使后增加了.gitignore忽略此目录,但是之前已经提交到仓库的文件是不管用的,按照下面命令即可只删除远程仓库的文件夹git rm -r --cached .idea //--cached不会把本地的.idea删除git commit -m 'delete remote .idea dir'git push -u origin master...
2021-10-25 11:08:33
371
原创 去除网页水印
按f12打开开发者工具面板,定位div,一般是找到外层的div(水印所在的最外层div),找到它的style=“background: url(data:image/png;base64,iVBORw0K…) left top repeat;”,把这一大坨delete掉,就可以了。
2021-08-18 21:07:09
10993
4
原创 Git基础操作:git merge之后如何回滚
git merge这个命令大家都会用了,但是有时候执行完merge发现一堆冲突后悔了,这个时候该怎么办呢?mac@localhost$ git merge master Auto-merging javademo/src/main/java/a/b/c/Hello.javaCONFLICT (content): Merge conflict in javademo/src/main/java/a/b/c/Hello.java...Automatic merge failed; fix conf.
2021-08-17 16:17:08
7500
原创 Redis 主从数据不一致有哪些场景以及如何解决
主从切换生产环境的主从间的数据复制通常都是异步进行的,当进行failover时,可能会出现在数据没有完全同步到从库的情况下进行了主从切换解决方案:• 【择优选择】主从切换时优先选择同步进度更加靠前的节点,尽可能的减少数据丢失• 【缩短主库持久化的周期性间隔】主从延迟主从延迟带来的现象主要有以下2种情况主库有从库没有主库没有从库却有上述情况1大家都好理解,这里我重点介绍下情况2.主库没有从库却有的情况,举个例子,当一个key设置过期时间比如1分钟,expire 60 到redis中过期时
2021-05-11 10:25:49
1580
转载 redis常见问题和解决方案
持久化、主从问题(1) Master最好不要做任何持久化工作,如RDB内存快照和AOF日志文件(a) Master写内存快照,save命令调度rdbSave函数,会阻塞主线程的工作,当快照比较大时对性能影响是非常大的,会间断性暂停服务,所以Master最好不要写内存快照。(b) Master AOF持久化,如果不重写AOF文件,这个持久化方式对性能的影响是最小的,但是AOF文件会不断增大,AOF文件过大会影响Master重启的恢复速度。Master最好不要做任何持久化工作,包括内存快照和AOF日志
2021-05-11 00:37:04
856
原创 Git基础操作:合并某个分支的一个commit到另一个分支
有的时候不小心在错误的分支A上开发了一点代码,也已经提交了,这个时候如果想把这部分代码移到正确的分支B上可以如下操作使用git log命令找到错误提交的那次commitidgit logcommit 8b19200eed045d5bef5b304c30eb76d74f3943ea (HEAD -> A, origin/A)Author: alioo <xxx@yyy.com>Date: 2021-03-08T21:45:40+08:00 取消没有必要的Recom
2021-03-08 22:33:25
1160
1
转载 Shell特殊变量:Shell $0, $#, $*, $@, $?, $$和命令行参数
前面已经讲到,变量名只能包含数字、字母和下划线,因为某些包含其他字符的变量有特殊含义,这样的变量被称为特殊变量。例如,$ 表示当前Shell进程的ID,即pid,看下面的代码:$echo $$运行结果29949特殊变量列表变量 含义$0 当前脚本的文件名$n 传递给脚本或函数的参数。n 是一个数字,表示第几个参数。例如,第一个参数是$1,第二个参数是$2。$# 传递给脚本或函数的参数个数。$* 传递给脚本或函数的所有参数。$@ 传递给脚本或函数的所有参数。被双引号(" ")包含时,与
2020-12-17 16:29:47
235
转载 HTTPS
本文首发于我的个人技术博客【看完还不懂HTTPS我直播吃翔】存在即合理http是非常常见的应用层协议,是超文本传输协议的简称,其传输的内容都是明文的。在这个混乱的世界,明文传输信息想想就可怕,网络“小混混”的手段远比我们这些凡人高明得多,他们有一万种方式劫持,篡改我们的数据。对于一个网站或者服务,如果你给你的用户两个选择:通讯数据明文传输,速度快;通讯数据加密传输,但是速度可能会稍微慢一点.我想,只要脑袋没有长歪的用户都宁愿牺牲一点速度去换取数据传输的安全。这样,https的存在就具备了合理性,
2020-12-08 16:31:29
697
原创 Wireshark抓包解释说明
Wireshark与对应的OSI七层模型TCP三次握手TCP三次握手的理论知识wireshark三次握手对应的报文情况图中可以看到wireshark截获到了三次握手的三个数据包。第四个包才是HTTP的, 这说明HTTP的确是使用TCP建立连接的。第一次握手数据包:客户端发送一个TCP,标志位为SYN,序列号为0, 代表客户端请求建立连接。 如下图:点评:报文中有2个序列号,上面截图中写着是Seq=0,表示是相对的relative sequence number,其实真实的序列号Sequ
2020-12-06 13:58:25
8170
原创 分布式锁实现方案3、基于Redis的SET操作实现的分布式锁
在我的上一篇文章中,关于redis分布式锁的写法,释放锁还有些缺陷,细节见评论部分,本文进一步做了完善。分布式锁实现方案2、基于Redis的SET操作实现的分布式锁package me.ele.biz.alpaca.common.lock;import java.util.Collections;import java.util.concurrent.TimeUnit;import lombok.extern.slf4j.Slf4j;import me.ele.config.resourc
2020-11-08 18:02:32
220
原创 Mysql有则更新无则新增的几种方案
环境准备mysql版本:5.7.29测试表创建及初始化:--建表CREATE TABLE `test_user` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT COMMENT '主键', `uid` bigint(20) unsigned NOT NULL COMMENT '用户id', `name` varchar(128) NOT NULL COMMENT '用户名', PRIMARY KEY (`id`), UNIQ
2020-10-21 00:08:38
5462
1
原创 Git基础操作:git log简洁模式
这里采用了git alias方式git config --global alias.logp 'log --pretty=format:%cd:%cn:%h:%s'git config --list|grep aliasalias.st=statusalias.ck=checkoutalias.br=branchalias.cf=configalias.fc=fetchalias.brv=branch --valias.geturl=config --get remote.origin
2020-09-24 20:38:41
1142
Servlet 中文乱码问题
2014-10-20
CMPP2.0 CMPP3.0 接口协议
2014-10-20
java中获取HashMap中的table?
2017-05-18
TA创建的收藏夹 TA关注的收藏夹
TA关注的人