自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

奋斗的edison

一个不热爱学习的摄影师不是一个好的程序员

  • 博客(29)
  • 收藏
  • 关注

原创 【Hystrix】接口超时熔断】

背景是这样,小年的项目在跑定时任务时,发现抛出大量的异常:从异常信息来看,应该像是 Hystrix 开启了断路器,触发了熔断限流。查阅了一下相关资料,又翻阅了源码,得出的结论与小年开始的猜测是基本一致。而代码中没有 Fallback 处理的方法,所以程序就直接把异常抛出来。Hystrix 有一个断路器的概念,当断路器开启时,也就是触发熔断机制阻断请求。

2024-03-17 17:45:05 869 1

原创 业务复杂多变?Groovy魔法让你轻松应对

最近,小年在项目中使用Groovy对业务能力进行了一些扩展,感觉比较有意思,而且效果也不错,所以来分享一下使用经验。先来简单概述一下小年的项目需求背景:有一个支付业务场景需要接入多个运营商的支付能力,每个运营商在支付后都会返回支付结果,但是每个运营商的支付结果报文格式各不相同。要实现起来并不难,只需要针对每个运营商的报文格式制定不同的解析规则,当然问题并没有这么 easy运营商的支付结果报文格式可能会变化后面可能还需要接入新的运营商。

2024-01-05 14:13:04 818

原创 【深入浅出系列】分布式事务Seata TCC模式

Seata TCC 模式,是蚂蚁金服在 2019 年 3 月为其社区贡献的。Try:业务资源的检查和预留Confirm:执行业务操作和提交Cancel:预留资源的释放与 AT 模式相同的是,TCC 模式的核心思想也是通过二阶段提交。一阶段:调用业务服务的 Try 接口,对业务资源预留;若所有业务服务 Try 接口返回成功,调用 Confirm 接口,执行业务操作;否则,调用 Cancel 接口,释放预留的业务资源不过,从实现层面上来对比的话,二者是有所区别的。

2023-06-06 13:48:01 890 2

原创 【深入浅出系列】分布式事务Seata AT模式

AT 模式的核心思想,通过二阶段提交,从而实现分布式事务。也通过结合具体的使用场景,更加深刻的了解 AT 模式的原理和实现方式。总的来说,AT 模式对比与其他模式来说,使用其实是最为简单易用的。因为复杂的逻辑处理都有客户端处理而屏蔽掉,但也因此在扩展性、性能等方面上也有一定的限制。分布式事务本身就是一个非常复杂问题,面对的纷繁复杂的业务模式和架构,需要切身结合实际的业务场景具体分析。没有最好的,只有更好的。

2023-04-04 10:19:51 410 2

原创 针不戳!GitHub Actions 入坑指南

前言相信关注技术前沿的同学,多少也了解过 GitHub Actions小年我碰巧最近遇上使用的需求,体验了一番之后,感觉两个字:真香!什么是 GitHub Actions ?GitHub Actions 是 GitHub 推出的持续集成(Continuous Integration,简称 CI)服务,它提供了整套虚拟服务器环境,基于它可以进行构建、测试、打包、部署项目等等操作。持续集成(CI \ CD)主要有三个: 持续集成、持续交付、持续部署。我们一般的软件开发流程是:开发人员本地代码

2021-05-09 11:37:54 1099 2

原创 面试官:AQS了解吗?

面试官:AQS 了解吗,讲一讲吧。我:…告辞了。这是一个老生常谈的面试题,相信大家都可能会碰到过。有关这一块资料其实网上一搜便是一堆,今天肥壕主要是想结合自己的理解,用更加通俗易懂的方式表达出来,也不涉及任何的源码。实现原理AQS(AbstractQueuedSynchronizer),抽象的队列式同步器AQS 维护了一个 state(共享资源变量)和一个 FIFO 线程等待队列(CLH 队列),多个线程竞争 state 被阻塞时就会进入此队列中。Statestate 是用 volat.

2021-03-14 10:15:37 321

原创 这道阿里笔试题,你懂吗?

咳咳,肥壕最近…碰上阿里的一道笔试题目,虽说题目不是非常难,但对于平时疏于练习的肥壕来说,还是花费了些许时间。今天就特意花点时间整理一下,方便以后大家碰到这类问题能得心应手,手撕面试官。写一个多线程,3 个线程,第一个线程打印 One,第二个打印 Two,第三个打印 Three,同时启动三个线程,要求按照 one two three 顺序打印出来题目分析题目本意比较简单,主要考察多线程之间的通信。3 个线程的启动是随机的,那如何让这 3 个线程按顺序打印呢。我们知道,线程之间无非就两种关系:

2021-01-28 18:12:30 153

原创 RocketMQ源码解析-通信模块

这篇文章和 《RocketMQ源码解析-开篇》 隔了非常久,肥壕真是惭愧不已。一方面是忙于工作(摸鱼),另一方面一直纠结从哪个方面入手会让大家更加容易理解,而且如果贴上太多的源码,阅读的效果可能会适得其反。所以为了提高文章的阅读质量,肥壕决定删繁就简,摒弃过度的源码解析,结合更多的设计图,目的是:看完直呼好家伙!在消息队列架构中,各个角色可能随时都要进行通信交互,数据传输。因此,通信模块在消息队列设计中是不可或缺的核心模块。而且一个优秀良好的网络通信模块,很大程度上决定了消息传输的能力和整体性能.

2021-01-06 17:19:36 499

原创 Elasticsearch写入过程

Elasticsearch 作为主流的分布式搜索引擎,查询速度快,扩张性强,查询结果近实时。也许有些小伙伴跟肥壕有同样的好奇,为什么查询结果是近实时的呢?带着好奇心,让我们深入了解 Elasticsearch 的写入过程。整体流程我们知道每个索引 会被分成多个分片, 分片 又被分为主分片(primary shard)、副分片(replica shard)。增删改的操作都必先经过经过主分片,再同步到副分片。当有数据写入的时候,首先请求节点会根据 _routing路由规则找到对应的 primary

2020-12-15 15:35:09 716

原创 ES大数据量同步,如何又快又稳?

背景需求要根据商家名称、经纬度对商家列表进行地理位置检索和全文检索,目前这部分数据是缓存在 MongoDB 上,虽然说 MongoDB 支持全文索引,但是对于中文检索,MongoDB 似乎做的还不是非常好,线上也会经常出现查询超时的情况。所以经过考虑研究后,决定改用 Elasticsearch 作为搜索引擎。目前线上的百万数据需要同步到 Elasticsearch,那么如何能够安全又快速的实现大数据量的同步呢?方案验证测试数据量: 200w方案一:单线程同步线程数耗时11h

2020-12-15 15:32:02 2098

原创 MySQL事物-学习笔记

前言在梳理 MySQL 事物和锁这一块知识的时候,发现其实自己了解的只是冰山一角,经过认真的查阅和研究之后,其实这一块的知识其实还真的有很多的学问。所以后面还是需要研读一下《高性能MySQL》这本书。正文谈到 MYSQL 的事物, 相信大家对这几个概念都不会陌生:四大特性:ACID并发问题脏读不可重复读幻读隔离级别Read Uncommitted(读未提交)Read Committed(读提交)Repeatable Read(可重读)Serializable(可串行化)

2020-08-07 18:23:07 445

原创 Executor看不懂?教你如何盘它

前言肥壕最近在复习线程这一块知识, Executor、ExecutorService、ThreadPoolExecutor 这三兄弟总感觉很难辨认,每次看完后没过多久又会忘,所以今天特地来盘一下 Executor 框架。正文Executors 是在 JDK1.5 引入的,位于 java.util.concurrent包下,其主要目的是简化线程调用,管理线程的生命周期(启动、执行、关闭)。在 JDK1.5 之前我们使用线程的姿势是:new Thread(new RunnableTask()).sta

2020-08-07 09:15:48 120

原创 RocketMQ源码解析-开篇

前言咳咳… RocketMQ 源码解析 第一篇 ???? Action!!!其实嘛在第一次使用 RocketMQ 后就有对源码研究的想法,并不是说它相比与其他 MQ 有非常独特的优势,而是肥壕觉得有这么简单的几个理由吧,还是很值得我们研读一番滴~基于 Java 栈的中间件作为阿里系的开源产品,自然大多数都是 Java 为主。所以对于 Java 开发者来说是阅读起来还是比较相对轻松的。当然现在的也支持 C/C++, Python, Go多个语言版本有助于提升个人代码的风格和技巧枯燥冗长

2020-08-07 09:14:48 2194 1

原创 消息疯狂堆积!RocketMQ出Bug了?

前言用过 MQ 的同学,可能会遇到过消息堆积的问题。而肥壕最近也踩上了这个坑,但是发现结果竟然是这么一个意料之外的原因而导致的。正文那一晚月黑风高,肥壕正准备踏上回家的路,突然收到告警短信轰炸!“MQ 消息堆积告警 [TOPIC: XXX] ”肥壕心里“万只草泥马崩腾~” 第一反应是:“怎么肥事?刚下班就来搞事情???”于是乎赶回公司赶紧打开电脑,登上 RocketMQ 后台查看(公司自己搭建的开源版RocketMQ)握草 (キ`゚Д゚´)!!! 竟然堆积了3亿多条消息了???要知道

2020-08-07 09:14:00 1398 1

原创 Java-线程池异常处理

线程池,在平时的项目开发中是很常见的,关于这方面的资料在网上应该也很多。这次呢,主要是想总结一下,之前的项目中曾经遇到的一个坑。其实也是一个很简单的bug,就是线程池调度的线程抛异常了,但是没有捕捉,导致找到问题花费了不少时间。所以今天就想总结一下,有关线程池在调度线程的时候,线程抛异常的处理场景。代码1:public void demo1() { ExecutorS...

2020-02-17 16:45:55 244

原创 排序算法-归并排序

归并排序的主要思想是分而治之,将一个大问题分解成小的子问题来解决。是一种十分高效的稳定排序算法,而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)比如[11, 8, 3, 9, 7, 1, 2, 5] 采用递归的方法实现归并排序,递归深度为log2n/** * 归并排序 * @param arrays */public void sort(int[] arr...

2019-02-06 17:54:11 105

原创 选择排序

插入排序算法的实现思路有点类似插入排序,也分已排序区间和未排序区间,但是选择排序每次都会从未排序区间中找到最小的元素,将其放到已排序区间的末尾。 代码如下:/** * 插入排序 * @param arrays */public void sort(int[] arrays) { if (arrays == null) { retur...

2019-02-04 10:05:32 89

原创 CyclicBarrier

概念:CyclicBarrier与CountDownLatch非常相似,它可以使一组线程任务到达一个屏障,只有当最后一个线程到达屏障,屏障才会被打开,所有线程才会被继续执行,而且能多次重用。CyclicBarrier有两个构造函数:CyclicBarrier(int parties)  & CyclicBarrier(int parties, Runnable barrierAct...

2018-08-19 17:48:37 179

原创 CountDownLatch

前言:         今天开始java.util.concurrent的学习,concurrent包下的类主要用于解决并发问题,先从比较简单的CountDownLatch开始讲解吧。 概念:        CountDownLatch主要用于协调线程之间的同步,你可以想CountDownLatch对象设置一个初始计数值,任何在这个对象上调用wait() 方法都会被阻塞,直到这个计...

2018-08-18 22:15:35 104

原创 记一次shell脚本入门编写

最近入门linux的bashshell脚本语言,笔者看了一些入门的知识之后,便想写一些简单的脚本入门。比如服务器的数据库远程连接mysql -hhost -uroot -ppassword  数据库定时备份#保存备份个数number=3#备份保存路径backup_dir=/root/mysqlbackup#日期dd=`date +%Y%m%d`#备份工具t...

2017-10-21 13:44:29 401 1

原创 排序算法-堆排序

堆排序算法可以看做是一种树形的数据结构,它的特点是在排序的过程中,将数组看成一棵完全二叉树的顺序存储结构。那么先来讲一下完全二叉树的一些定义1.任意一节点指针i:父节点:i==0?null:(i-1)/ 2                                左孩子:2*i + 1                                右孩子:2*i + 22

2017-10-07 09:23:31 195

原创 Java中的volatile

volatile是java中个关键字,与Java的内存模型有关现在程序过程是:数据从主存复制到高速缓存,cpu运算直接冲关村读取并写入,结束后缓存同步到主存并发编程中的三个概念:1.原子性:一个事务的完整性2.可见性:当多个线程访问同一个变量,一个线程修改了改变量,其他线程能够立即看到3.有序性:程序执行的顺序按照代码的先后顺序执行。要想并发程序正确运行,必须保证这三个条件

2017-09-24 15:50:02 139

原创 Java中的synchronized

在线程同步中,synchronized是一个必不可少的概念,synchronized是Java中的关键字,是一种同步锁。它修饰的对象有以下几种:代码块、方法、静态的方法、类1.synchronized(this)同步代码块/** * 同步线程 */class SyncThread implements Runnable { private static int cou...

2017-09-21 21:25:38 159

原创 java编程思想-注解

今天开始本人对java编程思想的总结,每章的总结都希望能够通过博客的形式记录下来。那么先从个人觉得比较简单的注解开始吧注解(元数据)提供了一种形式化的方法,使我们可以在稍后某个时刻非常方便地使用这些数据。这是书本上的定义,楼主在实际项目中,通常用于aop日志和类加载的对象注入。jdk5有三个内置标准注解@Override,表示当前的方法定义将覆盖超类中的方法。@Deprecated...

2017-09-03 10:25:53 348

原创 排序算法-希尔排序

希尔排序实际上是插入排序的优化,根据分组从而实现插入排序的最优public void shellsort1(int a[], int n){ int grap, i, j, temp; // 每次为原来的一半 for (grap = n/2; grap > 0; grap /= 2){ for (i = grap; i ; i++){

2017-09-02 15:21:10 159

原创 排序算法-插入排序

插入排序不是通过交换位置而是通过比较找到合适的位置插入元素来达到排序的目的的。这个原理其实和插入排序是一样的。举个栗子,对5,3,8,6,4这个无序序列进行简单插入排序,首先假设第一个数的位置时正确的,想一下在拿到第一张牌的时候,没必要整理。然后3要插到5前面,把5后移一位,变成3,5,8,6,4.想一下整理牌的时候应该也是这样吧。然后8不用动,6插在8前面,8后移一位,4插在5前面,从5开始...

2017-08-30 22:54:45 151

原创 排序算法-冒泡排序

冒泡排序的基本思想:比较两个相邻的元素,交换顺序假设【12、35、99、18、76】第一次:35 12 99 18 76第二次:35 99 12 18 76第三次:35 99 18 12 76第四次:35 99 18 76 12此时最小数已经排好序了public void BubbleSort(int[] a, int n){ for(int

2017-08-29 20:45:31 246

原创 排序算法-快速排序

排序算法的平均时间复杂度为O(Nlogn),最差时间复杂度为O(n2)以下是个人对快速排序法的理解和代码。针对高效率的快速排序算法还有待研究/** * 快速排序法 */ public void quickSort(int[]a, int left, int right){ int i,j,t,temp; if(left>right

2017-08-28 23:03:28 352

转载 RSA加密原理

必备数学知识  RSA加密算法中,只用到素数、互质数、指数运算、模运算等几个简单的数学知识。所以,我们也需要了解这几个概念即可。素数  素数又称质数,指在一个大于1的自然数中,除了1和此整数自身外,不能被其他自然数整除的数。这个概念,我们在上初中,甚至小学的时候都学过了,这里就不再过多解释了。互质数  百度百科上的解释是:公因数只有1的两个数,叫做互质数。;

2017-04-01 21:49:42 282

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除