自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

badly的博客

努力成就非凡

  • 博客(98)
  • 资源 (5)
  • 收藏
  • 关注

原创 手把手带你撸zookeeper源码系列目录

手把手带你撸zookeeper源码(前言) 手把手带你撸zookeeper源码(配置文件) 手把手带你撸zookeeper源码(如何启动一个zookeeper服务) 手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么? 手把手带你撸zookeeper源码-zookeeper启动(二) 手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的) ...

2020-08-01 22:45:29 585 1

原创 git统计个人代码行数

git log --since="开始日期" --before="结束日期" --author="提交账号" --pretty=tformat: --numstat | awk '{ add += $1 ; subs += $2 ; loc += $1 - $2 } END { printf "added lines: %s removed lines : %s total lines: %s\n",add,subs,loc }'执行之后可见如下结果:added lines: 19697 rem

2021-08-03 14:45:17 354

原创 基于java socket来进行网络通信的小例子

在之前分析zookeeper源码的过程当中,有两个地方使用到了基于java socket进行通信的地方第一个地方是在集群启动时,集群节点之间会发起leader投票选举,此时zookeeper底层是基于java socket来进行网络通信的,感兴趣的小伙伴可以看手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的)这篇文章第二个地方是当集群中新加入一个zk节点或者某个节点宕机恢复启动的时候,需要恢复数据,并且从leader中同步..

2020-08-27 06:12:01 289

原创 手把手带你撸zookeeper源码-客户端如何发送数据到zk集群服务端的

接上篇文章继续分析手把手带你撸zookeeper源码-zookeeper客户端如何和zk集群创建连接上篇文章我们分析到了org.apache.zookeeper.ClientCnxn.SendThread#primeConnection 这个方法里面的代码,我粘贴几行比较重要的代码如下// 创建链接请求的对象 ConnectRequest conReq = new ConnectRequest(0, lastZxid, sessionTimeout..

2020-08-26 22:50:53 475

原创 手把手带你撸zookeeper源码-zookeeper客户端如何和zk集群创建连接

上篇文章手把手带你撸zookeeper源码-zookeeper集群如何接收客户端的连接的分析了zk集群通过监听2181端口,通过NIO的方式来等待客户端的连接,这篇文章我们主要分析一下看看客户端如何去和zk集群创建连接的客户端的入口类是org.apache.zookeeper.ZooKeeper, 如果大家通过原生的代码使用zookeeper客户端和服务段建立连接的时候,就是首先需要实例化一个Zookeeper对象,然后传递zk集群的节点ip和端口号,设置超时时间,以及监听器public Zo..

2020-08-25 22:46:35 726

原创 手把手带你撸zookeeper源码-zookeeper集群如何接收客户端的连接的

截止到目前为止, zookeeper集群启动时如何进行leader选举以及正常启动、故障恢复时zookeeper如何去恢复内存数据, 如何去leader中同步数据,这两大点都已经分析完了,感兴趣的小伙伴可以去看一下之前的文章手把手带你撸zookeeper源码系列目录接下里该分析客户端连接集群的代码了,如: 客户端如何和客户端建立的连接、会话是如何创建的、zk集群如何去维护会话的、客户端的创建、删除、修改、查询等操作、持久化节点、临时节点、以及监听通知如何实现的、写请求如何转发到leader上然后lea.

2020-08-22 18:05:37 435

原创 记不住的四种位运算

运算表符号 描述 运算规则 & 与 1 & 1 = 1 1 & 0 = 0 0 & 1 = 0 0 & 0 = 0 | 或 1 | 1 = 1 1 | 0 = 1 0 | 1 = 1 0 | 0 = 0 ^ 异或 1 ^ 1 = 0 1 ^ 0 = 1 0 ^ 1 = 1 0 ^ 0 = 0

2020-08-20 19:30:22 167

原创 深入java底层源码, 揭开ArrayList神秘面纱

一般情况下,当我们想用一个List集合时,首先想到的是ArrayList,其次就是LinkedList,但是我相信大部分小伙伴在项目中用到的ArrayList远比LinkedList,为什么呢?什么样的情况下优先选择ArrayList,什么样的情况下优先选择LinkedList? 哪种数据结构在什么样的条件下的性能更好?以及为什么在阿里开发规范中对集合要强调必须要初始化大小呢?还有为什么在并发情况下去remove数据的时候会出现ConcurrentModificationException呢?等等,我们将先

2020-08-19 07:23:49 164

原创 手把手带你撸zookeeper源码-zookeeper集群之间如何进行ping探活机制

上两篇文章手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(二)已经详细的把zookeeper故障重启时如何恢复数据给详细的剖析完了,这篇文章我们继续剖析一下在leader和follower数据同步完成之后,leader还会继续做哪些事情,以及如何实现ping机制的在上篇文章讲到leader同步完数据之后,会发送一个UPTODATE的通知给follower,表示数据已经同步完毕,fo

2020-08-16 07:24:59 907 1

原创 手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(二)

上篇文章手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)分析了在zookeeper启动的时候从本地日志文件中如何恢复数据,先获取快照文件中的数据然后反序列化到内存中,接着再对日志文件进行增量逐条回放,本篇文章详细分析一下在启动的时候如何和leader建立连接,然后从leader中如何同步数据到本地内存的如果当前存在一个zookeeper集群,现在不管是对原有的zookeeper进行重启,还是新加入一台zookeeper节点,此时zookeeper要么是obse...

2020-08-15 18:10:49 926

原创 手把手带你撸zookeeper源码-zookeeper故障重启时如何恢复数据(一)

在之前的文章手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?有分析过一部分follower启动时会调用syncWithLeader(zxid)方法, 此时方法会从leader中同步数据,但是回过头来看,感觉分析的不够深入,所以准备单独拉取出来一篇文章,来分析一下当follower启动时如何恢复数据的其实当一个zookeeper进程启动加入现有集群时,会有以下几种情况:1、当前zookeeper是新增的服务器, 然后作为observer角色加入集群...

2020-08-13 22:31:23 1437

原创 Java基础面试题看过来

2020-08-09 22:38:07 111

原创 手把手带你撸zookeeper源码-zookeeper的sessionId生成策略和follower调用链初始化

继上篇文章手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?,分析到了follower启动之后和leader建立了链接,并且把自己本地最新的zxid发送给leader,然后leader根据follower发送过来的zxid来判断如何把最新的数据同步给follower今天继续分析Learner.syncWithLeader()方法中的代码, 首先我们来看下面的一行代码zk.createSessionTracker();看字面意思是创建会话跟踪器,..

2020-08-09 12:07:36 614

原创 手把手带你撸zookeeper源码-zookeeper中follower启动的时候会做什么?

上篇文章手把手带你撸zookeeper源码-zookeeper通信序列化协议,简单说了一下zookeeper的jute序列化通信协议,写了一个简单的demo,以及如何避免粘包和拆包的,也顺带写了一点有关dubbo的序列化协议和如何自己自定义序列化协议回到上上篇文章手把手带你撸zookeeper源码-zookeeper确定好角色后会做什么?主要分析了zookeer中leader启动的时候都会做些什么事,分析到了leader启动的时候会对server.x=zk1:2888:3888,中的2888端...

2020-08-08 11:17:22 3310

原创 手把手带你撸zookeeper源码-zookeeper通信序列化协议

上篇文章分析到了zookeeper集群之间通信时用到了jute序列化协议,本篇文章来简单了解jute如何序列化和反序列化以及如何解决粘包拆包的问题的今天上网看了一下查了一下zookeeper jute,其实网上也有很多这方面的资料,我就简单的写了一个demo先来展示一下,最后给大家一点自己如何自定义传输协议,如何解决粘包拆包的问题...

2020-08-05 22:31:23 293

原创 手把手带你撸zookeeper源码-zookeeper确定好角色后会做什么?

接上文手把手带你撸zookeeper源码-zookeeper启动(五)leader选举投票归档-确认当前zk服务的角色上篇文章主要分析了leader选举的最终阶段,根据zk集群的相互投票之后,进行投票归档,然后判断某个zk获得投票数是否大于集群数量的一半,如果未超过一半,则继续下一轮的投票选举,如果有某个zk有超过一半的选票,则leader确定,然后其他zk服务则为follower或者observer不知道大家有没有搭建过三台zk的集群,如果你是按照myid从小到大依次启动三台服务器,一般情况下都.

2020-08-03 23:14:56 3433

原创 手把手带你撸zookeeper源码-zookeeper启动(五)leader选举投票归档-确认当前zk服务的角色

接上文手把手带你撸zookeeper源码-zookeeper启动(四)leader选举投票发送以及响应本篇文章主要来看看当每个zk接收到其他服务器发送过来的投票之后,接下来会怎么处理 //投票归档 recvset.put(n.sid, new Vote(n.leader, n.zxid, n.electionEpoch, n.peerEpoch)); if (termPredicate(rec..

2020-08-02 16:12:59 1329

原创 手把手带你撸zookeeper源码-zookeeper启动(四)leader选举投票发送以及响应

上篇文章手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的)写了zookeeper集群之间如何基于socket建立的连接,连接建立完毕之后,接下来就是开始发送投票和接收投票,然后对投票结果进行整理,最终选定哪台服务器是leader,哪个是follower本篇文章我们接着看一下投票数据是如何发送出去的,以及如何接收到其他zk服务器发送过来的投票数据结合上篇文章所讲,我们知道,QuorumCnxManager.toSend()...

2020-08-02 06:26:02 522

原创 手把手带你撸zookeeper源码-zookeeper启动(三)(zookeeper选举时是如何基于socket建立连接的)

接上文手把手带你撸zookeeper源码-zookeeper启动(二)结合上两篇文章写的zookeeper启动时,都干了些什么,画了一张图,把涉及到的组件都在图中给展示出来,大家可以参考一下在这个图片中把之前写的源码中的所有组件都给包括了,以及每个组件是做什么用的,接下来我们会一步步的去梳理整个zookeeper源码,也会把这张图给进一步完善,最终形成一个完整的zookeeper架构原理图的上篇文章最后,我们知道调用到QuorumPeer.start方法中,在这个方法中做了好几件事,..

2020-08-01 17:37:08 627 1

原创 手把手带你撸zookeeper源码-zookeeper启动(二)

接上文手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么?先说点题外话,因为我想着把整个zookeeper源码分析作为系列文章来写,所以每一篇文章只会分析一部分源码,而不是长篇大论去粘贴源码,然后哪个方法进入哪个方法,然后一带而过。而是抓住主线,然后去分析主要方法,用我的理解,用通俗的语言通过书面的形式表达出来,希望对想学习zookeeper源码的你有帮助先抛出个目标,本篇文章主要写一下zookeeper集群之间是如何建立连接的?先贴一下上文最后的一段代码,有.

2020-07-29 23:11:12 389

原创 手把手带你撸zookeeper源码-从源码角度分析zookeeper启动时都做了什么?

前言上篇文章手把手带你撸zookeeper源码(如何启动一个zookeeper服务)主要是讲解了如何通过脚本启动一个zk服务,还有一些简单的基本操作,以及如何去根据我们的服务器配置来设置JVM参数,接下来的文章就开始干zk源码了,这篇文章我们先找找启动zookeeper服务的入口,然后看看zookeeper启动的时候都做写什么?看源码技巧相信各位小伙伴大家都应该看过源码,但很多时候看源码要么就是一掠而过,方法调用方法,进去出来,根本就没有想过为什么这么设计?有没有用什么设计模式?有没有...

2020-07-27 23:04:07 661

原创 手把手带你撸zookeeper源码(如何启动一个zookeeper服务)

前言上一篇文章手把手带你撸zookeeper源码(配置文件)讲解了一下zookeeper里面的配置文件中都有哪些配置,可以结合自己公司的生产环境去配置相应的信息或者针对性的优化。当然有些配置会在以后讲解相关源码的地方讲到,本篇文章主要是带着大家一步步去使用一下zookeeper,以及简单的一些操作,还有如何去配置zookeeper里面的一些JVM参数启动zookeeper进程第一步: 修改配置文件大家把之前下载好的apache-zookeeper-3.6.1-bin.tar.gz文...

2020-07-26 07:15:14 1146

原创 手把手带你撸zookeeper源码(配置文件)

前言在上一篇手把手带你撸zookeeper源码(前言)中zookeeper源码系列文章的一些问题和准备工作,看一个框架或者系统源码是需要循序渐进的逐步学习,不能一口吃个胖子,一飞冲天成为专家或者高手,需要踏实放下心,慢慢磨练自己的底层技术能力。在我们手动启动一个zookeeper server时,会先让你上网下载apache-zookeeper-3.6.1-bin.tar.gz, 然后解压到本地目录里面,接着会让你修改conf/zoo_sample.cfg配置文件为zoo.cfg,然后进入bin目录下执

2020-07-25 13:48:51 1227

原创 手把手带你撸zookeeper源码(前言)

先提出两个问题:1、我们用zookeeper来做什么事?2、你所熟知的业务系统、分布式中间件系统中都有哪些使用了zookeeper?用zookeeper做了什么事?前言 既然标题写的是手把手的带你撸zookeeper源码,那么我们总要有一个开头,那怎样学习一个中间件系统呢?首先你得我们得知道它用来干什么的?主要有哪些功能?你让有必须使用它的优点,同时也要考虑各种特殊情况下,它可能会出现什么问题?比如故障宕机、数据丢失、是否支持高并发、高可用等问题。把它的功能摸清楚之...

2020-07-25 07:56:35 717

原创 如何判断一个链表是否是回文链表

leetcode连接:https://leetcode-cn.com/problems/palindrome-linked-list/给一个简单的回文题:有一个数组,长度为n,判断此数组是否时回文数组如:[1,2,2,1] 长度4这种问题比较简单,今天就不说了,回看一下上面的leetcode的问题,判断一个链表是不是回文链表,如何判断回文?肯定时拿后半部分和前半部分一一对比,如果有...

2020-03-31 11:01:03 701

原创 leetcode 移除链表中的元素(递归方法)

leetcode 203号题https://leetcode-cn.com/problems/remove-linked-list-elements/submissions/public class LinkedNode<E> { public E e; public LinkedNode<E> next; LinkedNode(E...

2019-12-26 11:50:51 403

原创 单链表反转

常常面试我们会遇到考察列表反转的问题如 1-->2-->3-->4-->5-->null这样的一个链表进行反转成为null<--1<--2<--3<--4<--5/** * @description 链表节点 * @date 2019/12/25 16:23 * @version: 1.0 **/public ...

2019-12-26 11:48:12 121

原创 mysql查看表数据大小以及索引数据大小

查看表数据占用的字节数以及索引大小的字节数是在库information_schema下的tables中,可以看下一下tables的表结构字段解析:字段 备注 DATA_LENGTH 表数据大小 INDEX_LENGTH 索引大小 TABLE_ROWS 行数 select table_name, table_rows, concat(ro...

2019-10-22 18:54:03 973

原创 技术人员如何写好一篇高效的操作集成文档

背景公司前端时间引入了xxl-job,是另外一个小组的小伙伴们经过调研、使用、上线整条链路,最终经历千辛万苦把这个定时任务组件给顺利推上线了,经历了一段时间的线上验证,稳定运行没有任何问题,接下来他们需要把这个组件推给其他小组去使用,最终使整个公司的定时任务统一规范,统一使用,然后他们准备了一篇wiki,也是基于此篇wiki,才有了这篇文章的产生正文很多程序员沉迷于代码,觉得写好...

2019-09-18 11:19:21 618

原创 spring中的Aware接口的作用以及代码剖析

前言 不知道大家有没有遇到这样的场景,比如,我自己有一个PersonService, 实现类是PersonServiceImpl,我想在PersonServiceImpl中使用applicationContext,怎么去做呢?如果使用xml的话,我们当然可以使用构造函数方式注入,要么用setter方式注入,也使用@Resouce或者@Autowired(在springboot中可以...

2019-09-17 11:37:25 4754 1

原创 rockermq使用docker安装

docker run -d -p 9876:9876 -v `pwd`/data/namesrv/logs:/root/logs -v `pwd`/data/namesrv/store:/root/store --name rmqnamesrv -e "MAX_POSSIBLE_HEAP=100000000" rocketmqinc/rocketmq:4.3.0 sh mqnamesrvdo...

2019-09-11 15:42:09 391

原创 公司举办的问题大赛所想

1、分析题目,什么样的问题算问题 告警分两部分: 1、误报(正常业务输出到sentry的告警信息), 2、bug类型的问题 慢sql问题: 多维度思考优化,可能最终不能解决问题,关键在于思考的过程,突破慢sql优化无从下手, 不知如何解决 规范性blocker点2、分组 搜...

2019-09-10 17:36:01 109

原创 elasticsearch重新索引reindex方式

前言 相信使用过elasticsearch的同学都知道,ES能给我们的搜索带来巨大的性能提升,使用起来也很简单方便,可以通过springboot的集成,直接用repository来保存数据,查询数据,方便至极,也可以使用ElasticsearchTemplate模板类来调用api,coding人相对来说会比较简单,但是前期的设计需要认真思考,更多的是结合当前的业务场景以...

2019-09-10 17:26:36 3404

原创 springcloud之 zookeeper

上篇文章整合了springcloud与eureka,参考:springcloud之eureka这篇文章继续以zookeeper为注册中心,如何整合到springcloud呢?废话不多说,直接上代码1、在pom.xml中添加配置:<?xml version="1.0" encoding="UTF-8"?><project xmlns="http://maven.ap...

2019-04-28 17:42:54 185

原创 springcloud之eureka

说起springcloud,大家同时也会想到dubbo,这是业界使用最多的两种微服务架构,springcloud是基于http,背靠spring大家族。而dubbo从2013年不维护之后,也重新开始维护,并且捐献给了apache,并且成为了顶级项目。 springcloud全家桶包括:eureka(注册中心)、openfeign、ribbon(负载均衡)、hyst...

2019-04-17 22:00:03 516

原创 java并发可重入锁ReentrantLock非公平锁

说明: /** * Creates an instance of {@code ReentrantLock}. * This is equivalent to using {@code ReentrantLock(false)}. */ public ReentrantLock() { sync = new Nonfair...

2019-04-16 21:57:52 360

原创 java并发之ReentLock可重入锁(公平锁) 加锁过程

当线程1进行了加锁,而线程2加入了等待队列,此时如果线程1全部完成了自己的业务逻辑,接下来要释放锁,那么,线程1在释放锁的时候,会唤醒等待队列里面的线程,然后等待队列中的线程2,再次尝试获取锁,一些列的操作逻辑,获取锁成功,修改state=1, 设置加锁线程=线程2等等,依次执行下去...

2019-04-16 21:43:27 1053 1

原创 git删除本地和远程分支

1、查看本地和远程所有分支    git branch -a2、删除本地分支    git branch -D branch_name3、删除远程分支    git push origin -d branch_name

2018-06-25 09:49:58 6091

原创 解决git clone时出现的Filename too long问题

在我们使用Git Bash去git clone一个项目的时候,如果项目中某个文件的名字太长,就会报错误如:此时我们去对应的文件夹下查看,是没有检出这个文件的那么我们需要执行   git config --global core.longpaths true然后在去git clone即可--global              use global config file--system     ...

2018-06-23 23:09:45 2415

原创 redis中批量删除key

1、删除所有的key,可以使用redis自身的命令:flushdb  删除当前数据库中的所有Key  flushall  删除所有数据库中的key  2、使用linux中的xargs来删除所有的keyredis-cli keys "*" | xargs redis-cli del3、删除包含有某些关键字的keyredis-cli keys "xxx*" | xargs redis-cli del4...

2018-05-16 10:35:35 16764

zookeeper学习图谱

zookeeper学习知识点, 脑图

2018-04-22

供应链金融精华

了解供应链金融的发展,以及供应链金融的未来。。。。

2018-02-05

格鲁夫给经理人的第一课

如何从技术开发到技术经理,如何学会管理自己的团队。

2018-02-05

傻瓜oracle100问

oracle的基础知识 小问题,大解答 从基础看起,对后面的知识很有帮助哦

2013-06-04

oracle 10g

oracle 10g的文档, 很全面的哦

2013-03-10

空空如也

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

TA关注的人

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