自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

转载 sofa-seata

sofa seataMay 23, 2020最近工作好不容易有点空闲时间,工作上又碰到了分布式事务的问题,正好最近又在看sofa rpc,于是很自然的过渡到了sofa的seata,一个star很多的分布式事务框架。原理官网讲的很清楚了:Seata AT 模式前提基于支持本地 ACID 事务的关系型数据库。 Java 应用,通过 JDBC 访问数据库。整体机制两阶段提交协议的演变:一阶段:业务数据和回滚日志记录在同一个本地事务中提交,释放本地锁和连接资源。 二阶段: 提

2020-05-24 23:20:24 54

原创 为什么加了锁还是出现库存扣超的情况

最近碰到一个需求,库存扣减,要保证在高并发情况下不出问题。第一想到的就是redis分布式锁,为了保证原子操作,加锁和解锁都使用lua脚本,但是在压力测试的时候发现,TPS只有个位数,而且成功率不好控制,我是自己控制尝试获取锁的次数,因此造成了大量的线程阻塞。后面找了一些资料,改为redisson,TPS能达到100以上,成功率在90%以上,以为就此完结,后来自己做测试的时候发现数据总是有误...

2019-11-25 16:01:04 155

原创 1024

听说今天发帖能有1024勋章?

2019-10-24 08:51:02 1890

原创 MHA概念

MHA简介MHA(Master High Availability)目前在MySQL高可用方面是一个相对成熟的解决方案,它由日本DeNA公司的youshimaton(现就职于Facebook公司)开发,是一套优秀的作为MySQL高可用性环境下故障切换和主从提升的高可用软件。在MySQL故障切换过程中,MHA能做到在0~30秒之内自动完成数据库的故障切换操作,并且在进行故障切换的过程中,MHA能...

2019-04-12 10:39:04 305

原创 mysql半同步复制原理

复制架构衍生史在谈这个特性之前,我们先来看看MySQL的复制架构衍生史。在2000年,MySQL 3.23.15版本引入了Replication。Replication作为一种准实时同步方式,得到广泛应用。这个时候的Replicaton的实现涉及到两个线程,一个在Master,一个在Slave。Slave的I/O和SQL功能是作为一个线程,从Master获取到event后直接apply,没...

2019-04-12 10:37:02 125

转载 ArrayList打印出来为什么会有空格

问题描述 List<String> list=new ArrayList<String>();list.add("张三");list.add("李四");list.add("王五");System.out.println(list.toString()); 结果输出:[张三, 李四, 王五]结果中我们不难发现,从第二个数据开始,每个...

2019-04-09 12:34:36 781 1

转载 http head头

1、HTTP请求方式如下表: GET 向Web服务器请求一个文件 POST 向Web服务器发送数据让Web服务器进行处理 PUT 向Web服务器发送数据并存储在Web服务器内部 HEAD 检查一个对象是否存在 D...

2019-04-08 18:37:01 290

原创 redis的5种数据结构讲解及使用场景

redis提供了5种数据结构,理解每种数据结构的特点对于redis开发运维非常重要。一、字符串字符串类型是redis最基础的数据结构,首先键是字符串类型,而且其他几种结构都是在字符串类型基础上构建的,所以字符串类型能为其他四种数据结构的学习尊定基础。 字符串类型实际上可以是:简单的字符串、复杂的字符串(xml、json)、数字(整数、浮点数)、二进制(图片、音频、视频),但最大不能...

2019-04-08 17:45:44 97

原创 Java序列化的几种方式

序列化和反序列化序列化:可以将对象转化成一个字节序列,便于存储。反序列化:将序列化的字节序列还原优点:可以实现对象的”持久性”, 所谓持久性就是指对象的生命周期不取决于程序。原生序列化方式序列化方式一: 实现Serializable接口(隐式序列化)通过实现Serializable接口,这种是隐式序列化(不需要手动),这种是最简单的序列化方式,会自动序列化所有非static...

2019-04-08 17:44:05 1805 1

原创 如何实现靠谱的分布式锁

分布式锁,是用来控制分布式系统中互斥访问共享资源的一种手段,从而避免并行导致的结果不可控。基本的实现原理和单进程锁是一致的,通过一个共享标识来确定唯一性,对共享标识进行修改时能够保证原子性和和对锁服务调用方的可见性。由于分布式环境需要考虑各种异常因素,为实现一个靠谱的分布式锁服务引入了一定的复杂度。分布式锁服务一般需要能够保证:同一时刻只能有一个线程持有锁; 锁能够可重入; 不会发...

2019-04-05 17:16:23 101

原创 websocket

现在,很多网站为了实现推送技术,所用的技术都是 Ajax 轮询。轮询是在特定的的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。HTML5 定义的 WebSock...

2019-04-04 11:09:48 94

原创 一秒钟搞懂webservice

虽然现在都是http的api,但是有些老项目依然用的是webservice,如果碰到了也需要用webservice来调用。所以像这种可能会用到的知识,花一秒钟搞懂概念就行,用到的时候再说。webservice(SOAP)与HTTP接口的区别什么是web service?soap请求是HTTP POST的一个专用版本,遵循一种特殊的xml消息格式Content-type设置...

2019-04-03 18:23:51 104

原创 实现生产者与消费者问题的几种方式

生产者与消费者问题是多线程同步的一个经典问题。生产者和消费者同时使用一块缓冲区,生产者生产商品放入缓冲区,消费者从缓冲区中取出商品。我们需要保证的是,当缓冲区满时,生产者不可生产商品;当缓冲区为空时,消费者不可取出商品。下面介绍java中几种解决同步问题的方式 wait()与notify()方法 Lock与Condition机制 BlockingQueue阻塞队列 ...

2019-03-28 12:04:32 390

原创 Java单例模式的五种写法

在设计模式中单例模式看上去是最简单的一种模式,但是考虑安全性和性能的话,它并不简单。第一种(懒汉,线程安全): public class Singleton { private static Singleton instance; private Singleton (){} public static synchronized Singlet...

2019-03-22 13:41:00 46

原创 Apache Shiro

Apache Shiro是一个强大且易用的Java安全框架,执行身份验证、授权、密码和会话管理。shiro基本模块Subject:主体,可以看到主体可以是任何可以与应用交互的 “用户”; SecurityManager:相当于 SpringMVC 中的 DispatcherServlet 或者 Struts2 中的 FilterDispatcher;是 Shiro 的心脏;所有...

2019-03-17 20:01:35 126

原创 spring security+oauth2的SSO方案

springboot项目加入spring security其实是很简单的事情,主要就是config方法的重写。客户端 @EnableOAuth2Sso@Configurationpublic class SecurityConfig extends WebSecurityConfigurerAdapter { @Override protected vo...

2019-03-17 19:59:43 206

原创 王者人机模式有Bug

用米莱迪站在对面水晶与高地塔之间的安全区机器人是看不见的,然后用米莱迪的技能慢慢的把对方的水晶推掉,其他人守塔就行,要赶紧,估计版本更新这个bug也就修复了,那时候再要过人机20级可就难喽~NEXT...

2019-03-14 10:25:50 169

原创 我们都一样

{% blockquote %}我做了一个梦,很梦幻的梦,醒来之后才发现,这只是世界跟我开的一个玩笑,更加可笑的是他跟很多人都开了同一个玩笑。{% endblockquote %}故事FM我是故事FM的一名听众,从第一集听到现在,一集不落,从里面筛选了跟我经历类似的四个故事,记录一下,时刻警醒自己对美好生活的珍惜。...

2019-03-14 10:23:14 40

原创 域名解析

记录类型A记录: 将域名指向一个IPv4地址(例如:8.8.8.8) CNAME:将域名指向另一个域名(例如www.qcloud.com) MX:将域名指向邮件服务器地址 TXT:可任意填写,长度限制255,通常做SPF记录(反垃圾邮件) NS:域名服务器记录,将子域名指定其他DNS服务器解析 AAAA:将域名指向一个iPv6地址(例如:ff06:0:0:0:0:0:0:c3) S...

2019-03-10 16:21:40 260

原创 MyBatis数据库操作空指针异常

有时候,你认为出问题的地方并不是你想的地方。明明数据库都设置了id自增,xml也做了相关的配置 useGeneratedKeys="true" keyProperty="id"@Resourceprivate static AccountMapper accountMapper; 但数据insert依然报空指针异常,控制台很明显可以看出id为nul...

2019-03-10 15:15:39 1925

原创 跨域问题

要解决跨域问题先来看看什么是同源策略。同源策略如果两个页面的协议,端口(如果有指定)和域名都相同,则两个页面具有相同的源。下表给出了相对http://store.company.com/dir/page.html同源检测的示例:没有同源策略限制的两大危险场景浏览器是从两个方面去做这个同源策略的,一是针对接口的请求,二是针对Dom的查询。试想一下没有这样的限制上述两...

2019-03-05 14:14:37 81

转载 Introduction to JSON Web Tokens

What is JSON Web Token?JSON Web Token (JWT) is an open standard (RFC 7519) that defines a compact and self-contained way for securely transmitting information between parties as a JSON object. Th...

2019-03-05 14:10:28 135

原创 zookeeper之ZAB协议

ZAB协议介绍(Zookeeper Atomic Broadcast)ZAB协议包含两种基本模式,分别是:崩溃恢复之数据恢复 消息广播之原子广播当整个集群正在启动时,或者当leader节点出现网络中断、崩溃等情况时,ZAB协议就会进入恢复模式并选举产生新的leader,当leader服务器选举出来后,并且集群中有过半的机器和该leader节点完成数据同步后(同步指的是数据同步,用来...

2019-03-04 18:06:38 70

原创 Statement 和 PreparedStatement之间的区别

Statement执行不带参数的简单SQL语句,并返回它所生成结果的对象,每次执行SQL语句时,数据库都要编译该sql语句PreparedStatement用来执行带参数的预编译的SQL语句PreparedStatement的优点 效率高 使用PreparedStatement执行SQL命令时,命令会被数据库编译和解析,并放到命令缓冲区.以后每当执行同一个PreparedSt...

2019-03-04 18:05:14 67

原创 分布式事务

现在面试,分布式系统成了标配,而分布式系统带来的分布式事务也成了标配了。因为你做系统肯定要用事务吧,如果是分布式系统,肯定要用分布式事务吧。先不说你搞过没有,起码你得明白有哪几种方案,每种方案可能有啥坑?比如 TCC 方案的网络问题、XA 方案的一致性问题。分布式事务的实现主要有以下 5 种方案:XA 方案 TCC 方案 本地消息表 可靠消息最终一致性方案 最大努力通知方案两阶段...

2019-03-02 14:13:59 238

原创 一分钟搞懂netty

Netty 是互联网中间件领域使用最广泛最核心的网络通信框架。上图中可以看到,几乎所有互联网中间件或者大数据领域均离不开 Netty。NIONIO编程模型中,新来一个连接不再创建一个新的线程,而是可以把这条连接直接绑定到某个固定的线程,然后这条连接所有的读写都由这个线程来负责,那么他是怎么做到的?我们用一幅图来对比一下IO与NIOIO模型中,一个连接来了,会创建一个线程,对...

2019-03-01 18:54:35 105

原创 一秒钟搞懂倒排索引

正排索引就是扫描所有的文档,然后匹配文档关键字。倒排索引就是只搜索你要查询的关键字,看看跟这个关键字相关的文档有哪些。正排索引就是好维护,因为要扫描所有文档,速度太慢。倒排索引就是扫描快,不用全局扫描,维护要比正排复杂点。来一张倒排索引的原理图:...

2019-03-01 13:28:26 1203

原创 Hystrix的线程池隔离和信号量隔离

信号量的隔离:it executes on the calling thread and concurrent requests are limited by the semaphore count.每次调用线程,当前请求通过计数信号量进行限制,当信号大于了最大请求数(maxConcurrentRequests)时,进行限制,调用fallback接口快速返回。最重要的是,信号量的调用...

2019-02-26 19:08:48 5149 1

原创 Beanstalk(内存队列)

Beanstalk是一个高性能、轻量级的、分布式的、内存型的消息队列系统。最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟。其实Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格。其基本设计思想很简单:高性能离不开异步,异步离不开队列,而内部都是生产者-消费者模式的。Beanstalk介绍:  那下面开始说beanstal...

2019-02-26 17:17:02 516

原创 Spring REST Docs 介绍

Spring REST Docs 是一个为 Spring 项目生成 API 文档的框架,它通过在单元测试中额外添加 API 信息描述,从而自动生成对应的文档片段。本文会以一个最简单的示例介绍如何在一个 Spring Boot 应用中使用 Spring REST Docs,并在最后与目前最常见的 SpringFox 进行一些对比,分别介绍其特点和优劣。 基础准备首先需要一个 Spri...

2019-02-26 14:38:27 1319 1

原创 hexo-bugs-000

在hexo本地服务器模式下,一旦文章内容过多(具体没测试,可以多放些内容试试),则生成的html在本地就会出问题,没有上一页下一页以及脚标信息,在浏览器里查看网页源代码发现都是些小方格,不知道是什么鬼。但是用户不知道啊,我搞了半天,发现原来是个bug,部署到github上一切正常,真的是脑壳痛……...

2019-02-25 20:17:16 44

原创 使用 Protocol Buffers 代替 JSON 的五个原因

 原因一: 模式本身很不错有一种痛苦的讽刺指向一个事实,我们小心谨慎地在我们的数据库里面编写数据模型,维护各个层次的代码,保持这些数据模型处于控制之中,当我们想要发送数据连接到另一个服务的时候,要求所有的疑虑都要被考虑到。然而,我们往往依靠的是在边界上与我们的系统之间不一致的代码,我们的系统不能强制结构化我们的数据组件,这是如此的重要,编码的语义是你曾经的业务对象,在proto格式中,...

2019-02-25 18:09:42 115

原创 图书列表清单

阅读清单2018-12-08第一批次Java编程思想 第4版 Head First 设计模式 深入理解Java虚拟机 JVM高级特性与最佳实践 Effective Java英文版 第三版 重构 改善既有代码的设计 Docker技术入门与实战 Hadoop权威指南第四版 Hive编程指南 Spark快速大数据分析  2019-01-24第二批次Effect...

2019-02-25 09:46:29 833

原创 按键精灵编码最佳实践

总来来说就是一次循环就执行一个动作,代码按照界面来操作(到了这个界面应该做什么动作)遵循这个理论下面是具体的执行标准代码规范用else if代替单条if 每条else if代表一个界面Debug技巧刚修改的地方全部注释,缩小范围 注释一整段if语句,缩小范围...

2019-02-22 16:16:36 819

原创 hexo admin注意事项

这是一个坑安装方式我就不说了,就是按照网上说的那样,我主要说一下Deploy中的脚本怎么配置,网上都是类似这种./xxxx.sh完了我也傻不拉几的按照这种方式写,后来发现这就是一个脚本,你不用deploy就用命令行运行也是一样的,admin只是一个写markdown的工具,部署只是提供给你一个快捷键罢了,问题是我是Windows,居然也用.sh真是尴尬,改成.bat路径前面也不需...

2019-02-22 14:20:13 1084

原创 ETL工具Kettle(数据清洗好帮手)

ETL是将业务系统的数据经过抽取、清洗转换之后加载到数据仓库的过程,目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据。 ETL是BI项目重要的一个环节。 通常情况下,在BI项目中ETL会花掉整个项目至少1/3的时间,ETL设计的好坏直接关接到BI项目的成败。...

2019-02-20 20:05:01 1314

原创 一秒钟搞懂zookeeper实现的分布式锁

 分布式锁获取思路a、在zookeeper指定节点(locker)下创建临时顺序节点。b、客户端调用createNode方法在locker下创建临时顺序节点,然后调用getChildren(“locker”)来获取locker下面的所有子节点,注意此时不用设置任何Watcher。c、客户端获取到所有的子节点path之后,如果发现自己创建的子节点序号最小,那么就认为该客户端获取到了锁。...

2019-02-19 21:46:09 55

原创 else if的运作流程

 今天工作中碰到了一个else if,我一直以为else if跟if一样都会判断,然而,事情并不是我想的那样。 /** * @author R.oldmee * @date 2019/2/19 5:59 PM */public class ElseIfTest { @org.junit.Test public void test() { int...

2019-02-19 18:10:25 141

转载 快速排序(最容易理解的版本)

高快省的排序算法有没有既不浪费空间又可以快一点的排序算法呢?那就是“快速排序”啦!光听这个名字是不是就觉得很高端呢。假设我们现在对“6  1  2 7  9  3  4  5 10  8”这个10个数进行排序。首先在这个序列中随便找一个数作为基准数(不要被这个名词吓到了,就是一个用来参照的数,待会你就知道它用来做啥的了)。为了方便,就让第一个数6作为基准数吧。接下来,需要将这个序列中所有比...

2019-02-18 13:19:01 105

原创 redis 过期策略

redis 过期策略redis 过期策略是:定期删除+惰性删除。所谓定期删除,指的是 redis 默认是每隔 100ms 就随机抽取一些设置了过期时间的 key,检查其是否过期,如果过期就删除。假设 redis 里放了 10w 个 key,都设置了过期时间,你每隔几百毫秒,就检查 10w 个 key,那 redis 基本上就死了,cpu 负载会很高的,消耗在你的检查过期 key 上了。...

2019-02-16 15:46:30 59

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