<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[Coder_Joker的博客 joke a joker]]></title><description><![CDATA[github地址:https://github.com/ItsFunny 如果事与愿违,请相信一定另有安排]]></description><link>https://blog.youkuaiyun.com/Coder_Joker</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; Coder_Joker]]></copyright><item><title><![CDATA[Talk Is Cheap,Show Me The Code: Eth2.0源码解析]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/127894917</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/127894917</guid><author>Coder_Joker</author><pubDate>Wed, 16 Nov 2022 22:30:06 +0800</pubDate><description><![CDATA[eth2.0 源码解析]]></description><category></category></item><item><title><![CDATA[Talk Is Cheap,Show Me The Code: 三种语言个人框架压测(Java/Go/Rust)]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/126776612</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/126776612</guid><author>Coder_Joker</author><pubDate>Fri, 09 Sep 2022 09:45:32 +0800</pubDate><description><![CDATA[Java/Rust/Go 个人框架压测]]></description><category></category></item><item><title><![CDATA[Talk Is Cheap,Show Me The Code. Rust]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/124887692</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/124887692</guid><author>Coder_Joker</author><pubDate>Fri, 20 May 2022 17:35:20 +0800</pubDate><description><![CDATA[github链接


记录

2022-05-20

记录下rust 吧,学了快一个月了,写个rust框架




]]></description><category></category></item><item><title><![CDATA[源码分析-Golang Mutex]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/121416553</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/121416553</guid><author>Coder_Joker</author><pubDate>Fri, 19 Nov 2021 10:15:31 +0800</pubDate><description><![CDATA[锁的实现
数据结构
type Mutex struct {
   state int32
   sema  uint32
}



一个mutex 总共只占8个字节,因此是一个充分使用位的数据结构


state意义:

最后3位充当状态的概念

第0位: mutexLocked: 表示互斥锁的状态为锁定状态,既是否被某个goroutine所持有,是否已经被加锁
第1位: mutexWoken: 是否被唤醒(既某个goroutine尝试获取锁)
第2位: mutexStarving:表示当前的互斥锁处于 饥]]></description><category></category></item><item><title><![CDATA[Talk Is Cheap Show Me The Code - 枯燥乏味的leetcode刷题]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/121416401</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/121416401</guid><author>Coder_Joker</author><pubDate>Fri, 19 Nov 2021 10:10:28 +0800</pubDate><description><![CDATA[工作至今,解决过的最难的问题,莫过于实现一个bft 算法,弄懂bft 算法,但是后来发现,在leetcode面前,bft就是毛毛雨昂
刷不完的题,一段时间不刷,就忘了思路,关键做不到每天刷(毕竟已经工作了 ????)
头疼的刷题啊


重刷

层次遍历,得重新刷几次

汇总


滑动窗口的临界条件是right&lt;len(s),而不是 left&lt;right


二维数组:arr[m][n] 代表的是n行m列,所以m是列,n是行


回溯算法或者说是深度优先dfs算法考虑以下问题

什么时候添加到结果]]></description><category></category></item><item><title><![CDATA[Task Is Cheap Show Me The Code-个人Java框架-整合Nacos & prometheus & 网关 & 多集群]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/121319478</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/121319478</guid><author>Coder_Joker</author><pubDate>Sun, 14 Nov 2021 16:37:48 +0800</pubDate><description><![CDATA[框架地址

TODO

 http
 gateway
 prometheus
 rpc
event: 后续会重构,写的不好
discovery: 重构,写的不好
db
一些遗留问题

extension 并不是都是需要注入为bean的
clean cache



BUG

当extension中通过plugin注解注册的时候,会发现 其他实例可能会无法autoplugin ,使用@Bean注解就行

简单设计

数据流转:





example


demo


主要为这个demo


简单架构图
.]]></description><category></category></item><item><title><![CDATA[源码分析-Golang Map]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/120342027</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/120342027</guid><author>Coder_Joker</author><pubDate>Fri, 17 Sep 2021 09:20:41 +0800</pubDate><description><![CDATA[相关常量解析
bucketCntBits = 3 // 代表的是bit 
bucketCnt     = 1 &lt;&lt; bucketCntBits // 代表的是一个bucket(bmap)最大存储8个key

loadFactorNum = 13
loadFactorDen = 2 // 通过这2者计算得出 负载因子(负载因子关乎到什么时候触发扩容)

maxKeySize  = 128  
maxElemSize = 128 // 

emptyRest      = 0  : 代表该topHa]]></description><category></category></item><item><title><![CDATA[源码分析-Golang Select]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/120218075</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/120218075</guid><author>Coder_Joker</author><pubDate>Fri, 10 Sep 2021 11:12:46 +0800</pubDate><description><![CDATA[实现原理


每个select 在编译期间会被转换成OSELECT节点,每个OSELECT节点都有对应的OCASE信息,


不同的写法,编译器会有不同的操作



select 不存在任何的 case；
select 只存在一个 case；
select 存在两个 case，其中一个 case 是 default；
select 存在多个 case；



相关的函数在: cmd/compile/internal/gc/select.go#walkselectcases


第一种情况: select 不]]></description><category></category></item><item><title><![CDATA[源码分析-Golang Chan]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/120177760</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/120177760</guid><author>Coder_Joker</author><pubDate>Wed, 08 Sep 2021 13:05:31 +0800</pubDate><description><![CDATA[channel结构体


src/runtime/chan.go


内部存储是以循环队列的形式存储额


type hchan struct {
	qcount   uint           // 代表着这队列中总共有多少元素
	dataqsiz uint           // 创建时的容量设置,既make时候的大小,
	buf      unsafe.Pointer // 存储的数据
	elemsize uint16 // chan数据对象的自身大小,既make的时候的参数类型的大小
	clos]]></description><category></category></item><item><title><![CDATA[Talk Is Cheap,Show Me The Code-GoLang动态监听chan]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/119852345</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/119852345</guid><author>Coder_Joker</author><pubDate>Sun, 22 Aug 2021 14:35:13 +0800</pubDate><description><![CDATA[通常而言,监听chan的做法为(忽略退出条件,以及close情况:))
生产消费模型:
func TestForSelect(t *testing.T) {
	c := make(chan int)
	go func() {
		for {
			select {
			case v := &lt;-c:
				fmt.Println(v)
			}
		}
	}()
	go func() {
		for {
			time.Sleep(time.Second)
			c &lt;- 1
		}
	}()]]></description><category></category></item><item><title><![CDATA[Golang 锁源码分析]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/119594352</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/119594352</guid><author>Coder_Joker</author><pubDate>Wed, 11 Aug 2021 09:24:37 +0800</pubDate><description><![CDATA[锁的实现
数据结构
type Mutex struct {
   state int32
   sema  uint32
}


一个mutex 总共只占8个字节,因此是一个充分使用位的数据结构
state意义:

最后3位充当状态的概念

第0位: mutexLocked: 表示互斥锁的状态为锁定状态,既是否被某个goroutine所持有,是否已经被加锁
第1位: mutexWoken: 是否被唤醒(既某个goroutine尝试获取锁)
第2位: mutexStarving:表示当前的互斥锁处于 饥饿模式]]></description><category></category></item><item><title><![CDATA[jmeter docker 分布式压测]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/111828618</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/111828618</guid><author>Coder_Joker</author><pubDate>Sun, 27 Dec 2020 23:58:51 +0800</pubDate><description><![CDATA[背景

fabric 框架源码改完了之后需要测试性能,然后发现怎么也无法打满cpu,所以只能多来几台服务器,多跑几个jmeter了

使用方式:
docker pull jokerlvccc/bench-jmeter:1.0.0
docker tag  jokerlvccc/bench-jmeter:1.0.0 bidsun.com/bench-jmeter:1.0.0


需要将自己的计划文件映射到 : /home/services/bidsun/bench/bashes/

如 -v /Users/jo]]></description><category></category></item><item><title><![CDATA[Talk Is Cheap,Show Me The Code-个人框架(无缝衔接Spring)]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/109956324</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/109956324</guid><author>Coder_Joker</author><pubDate>Sun, 22 Nov 2020 16:15:23 +0800</pubDate><description><![CDATA[框架

以Java为主,先把Java的整了,再写Go的框架

模块划分
core/base模块(业务相关)
配置模块
日志模块
dao模块
service模块
http模块
网关模块
缓存模块
任务模块
MQ模块

]]></description><category></category></item><item><title><![CDATA[Hyperledger Fabric 国密改造 & 兼容多证书 & 兼容证书升级]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/109711113</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/109711113</guid><author>Coder_Joker</author><pubDate>Sun, 15 Nov 2020 22:21:13 +0800</pubDate><description><![CDATA[fabric-sdk-java

 兼容多证书
 允许同个channel中的所有节点(peer/orderer)共用同一套算法体系
 允许同个channel中的节点使用不同的算法(peer0.org1.com 使用ecdsa而peer0.org2.com使用SM2)
 节点配置错误时,内存增长控制范围内

fabric-ca

 国密支持
 权威机构颁发的证书国密支持


...]]></description><category></category></item><item><title><![CDATA[mac brew缓慢]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/109596954</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/109596954</guid><author>Coder_Joker</author><pubDate>Tue, 10 Nov 2020 13:17:52 +0800</pubDate><description><![CDATA[天下文章一大抄
# 更新 brew
cd "$(brew --repo)"
git remote set-url origin https://gitee.com/brew-cn/brew.git

# 更新 homebrew-core
cd "$(brew --repo)/Library/Taps/homebrew/homebrew-core"
git remote set-url origin https://gitee.com/brew-cn/homebrew-core.git

````


...]]></description><category></category></item><item><title><![CDATA[Java Maven 修改第三方库源码]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/109503417</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/109503417</guid><author>Coder_Joker</author><pubDate>Thu, 05 Nov 2020 09:36:49 +0800</pubDate><description><![CDATA[背景

修改fabric-sdk-java 源码,然后涉及到grpc,需要修改grpc的源码

工具

jd-gui
idea

步骤


创建一个新的maven工程,maven工程的名字任意


用jd-gui打开所依赖的第三方库的源码,如grpc-core


找到具体的class文件,ctrl+all


在新创建的maven工程中,创建package(要与grpc-core所修改的类的package一致)


创建一个相同名称的类,粘贴进去,然后修改,使得没有错误(当然这个maven工程的pom包也]]></description><category></category></item><item><title><![CDATA[指标监控 & 日志采集 系统]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/108507825</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/108507825</guid><author>Coder_Joker</author><pubDate>Thu, 10 Sep 2020 09:50:13 +0800</pubDate><description><![CDATA[相关的

Golang
Prometheus
Grafana


]]></description><category></category></item><item><title><![CDATA[共识算法]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/108024615</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/108024615</guid><author>Coder_Joker</author><pubDate>Sat, 15 Aug 2020 17:55:32 +0800</pubDate><description><![CDATA[共识算法
POW 工作量证明

暴力破解的方式

实现原理

关键字:

难度系数 Difficulty
随机值 Nonce


将新生成的区块信息(包含上一个hash,nonce,difficulty)等信息通过Sha256计算hash值,再对hash值进行判断,判断前缀是否符合难度系数,如难度系数为5,代表生成的hash值前面有5个0,则代表这个区块是一个合法区块,如果区块不合校验规则,则Nonce++ 的方式不停的重试

区块校验

区块结构语法有效
验证pow,区块头的hash满足难度系数
区块时间]]></description><category></category></item><item><title><![CDATA[SpringBoot 整合mybatis 和mybatis-plus]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/107573168</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/107573168</guid><author>Coder_Joker</author><pubDate>Sat, 25 Jul 2020 07:02:04 +0800</pubDate><description><![CDATA[起由

之前使用的是mybatis,后面为了再简化开发,引入plus ,期间发现相关问题




依赖:


引入mybatis-spring-boot-starter 的原因在于 ,原先是基于mybatis开发,内部使用到了 MybatisAutoconfiguration ,后面要基于plus ,因此 exclude 原先的依赖


 &lt;dependency&gt;
            &lt;groupId&gt;org.mybatis.spring.boot&lt;/groupId&gt;]]></description><category></category></item><item><title><![CDATA[Hyperledger Fabric 源码 浅谈]]></title><link>https://blog.youkuaiyun.com/Coder_Joker/article/details/107523712</link><guid>https://blog.youkuaiyun.com/Coder_Joker/article/details/107523712</guid><author>Coder_Joker</author><pubDate>Wed, 22 Jul 2020 21:27:04 +0800</pubDate><description><![CDATA[更新日志

2020-07-22

添加创建channel时候的相关debug





Orderer
创建channel:


路口处理方法为:
// Handle reads requests from a Broadcast stream, processes them, and returns the responses to the stream
func (bh *Handler) Handle(srv ab.AtomicBroadcast_BroadcastServer) error {
	]]></description><category></category></item></channel></rss>