7 小时前 / Tiny_熊
## 同步模式### full syncfull 模式会在数据库中保存所有区块数据,同步时从远程节点同步 header 和 body 数据,而 state 和 receipt 数据则是在本地计算出来的。在 full 模式下,downloader 会同步区块的 header 和 body 数据组成一个区块,然后通过 blockchain 模块的 `BlockChain.InsertChain` 向数据库中插入区块。在 `BlockChain.InsertChain` 中,会逐个计算和验证每个块的 `state` 和 `recepit` 等数据,如果一切正常就将区块数据以及自己计算得到的 `state`、`recepit` 数据一起写入到数据库中。
1 天前 / HelloGitHub
作者:HelloGitHub- 小鱼干 前几天,“机智号” 所用的飞行软件框架 F′ 被 NASA 开源了,想看 F′ 这个嵌入式的代码不妨考虑下 Sourcetrail 这个神器,刚好它支持 C++,能让你快速 Get 这个飞行框架的代码体系。说到阅读源码学习,本周热点之一的 ziglings 便是一个让你通过修复小 Bug 来学习 Zig 编程语言的项目。 以下内容摘录自微博 @HelloGitHub 的 GitHub Trending 及 Hacker News 热帖(简称 HN 热帖),选项标准:新发布 | 实用 | 有趣,根据项目 release 时间分类,发布时间不超过 14 day 的项目会标注 New...
5 天前 / cyhone
一致性 Hash 常用于缓解分布式缓存系统扩缩容节点时造成的缓存大量失效的问题。一致性 Hash 与其说是一种 Hash 算法,其实更像是一种负载均衡策略。 GroupCache 是 golang 官方提供的一个分布式缓存库,其中包含了一个简单的一致性 Hash 的实现。其代码在 github.com/golang/groupcache/consistenthash。本文将会基于 GroupCache 的一致性 Hash 实现,深入剖析一致性 Hash 的原理。 本文会着重探讨以下几点内容: 传统的 Hash 式负载均衡在集群扩缩容时面临的缓存失效问题。一致性 Hash 的原理。Golang 的开源库 GroupCache 如何实现一致性 Hash。
6 天前 / 吴大山
框架介绍英文原版 TestNG is a testing framework inspired from JUnit and NUnit but introducing some new functionalities that make it more powerful and easier to use, such as:* Annotations.* Run your tests in arbitrarily big thread pools with various policies available (all methods in their own thread, one thread per test class, etc...).* Test that your code is multithread safe.* Flexible test configuration.* Support for data-driven testing (with @DataProvider).* Support for parameters.* Powerful execution model (...
9 天前 / Ryan众乐
首发于 nodejs 源码分析写文章为什么要读 nodejs 源码?the gcnodejs 爱好者 113 人赞同了该文章前几天有个同学和我说,他在看 nodejs 源码,但是不知道为什么需要看,也不知道从中可以学到什么。所以今天想聊一下关于阅读 nodejs 源码的意义。阅读其他源码也类似。 首先,阅读源码的目的无非两个 1 深入了解和理解他或一些底层的原理 2 从中学到一些优秀的设计思想和实践。 如果你没有两个目的,那其实就没有必要去看源码了。那接下来聊一下从阅读 nodejs 源码中,可以得到什么。
14 天前 / Golang梦工厂
前言哈喽,大家好,我是 asong,这是我并发编程系列的第三篇文章,上一篇我们一起分析了 sync.once 的使用与实现,今天我们一起来看一看 sync.WaitGroup 的使用与实现。 快过年了,这是年前最后一篇推文了,待我积累一下,年后加大力度写干货,在这里先预祝大家新春快乐,身体健康,万事如意! 什么是 sync.WaitGroup 官方文档对 sync.WatiGroup 的描述是:一个 waitGroup 对象可以等待一组协程结束,也就等待一组 goroutine 返回。有了 sync.Waitgroup 我们可以将原本顺序执行的代码在多个 Goroutine 中并发执行,加快程序处理的速度。
18 天前 / 跨界架构师
这里是 Z 哥的个人公众号 每周五 11:45 按时送达 当然了,也会时不时加个餐~ 我的第「179」篇原创敬上 大家好,我是 Z 哥。 最近有位小伙伴求职遇到一些挫折,来找到我聊,其中有问到一个涉及到「阅读源码的必要性」的问题:“有很多场面试,面试官都有问到某个框架的某个功能是怎么实现的,难道真的要去看源码吗?但是感觉看源码除了面试有用,平时没啥用……” 我想可能有不少人都有一样的想法,所以我把我对阅读源码这件事的看法在这里和大家分享交流一下。 我曾经和一位同事聊天的时候打趣说,程序员可以分为 4 个层次。
19 天前 / cyhone
sync.Cond 条件变量是 Golang 标准库 sync 包中的一个常用类。sync.Cond 往往被用在一个或一组 goroutine 等待某个条件成立后唤醒这样的场景,例如常见的生产者消费者场景。 本文将基于 go-1.13 的源码分析 sync.Cond 源码,将会涉及以下知识点: sync.Cond 的基本用法 sync.Cond 的底层结构及原理分析 sync.Cond 的惯用法及使用注意事项 sync.Cond 的基本用法在正式讲 sync.Cond 的原理之前,我们先看下 sync.Cond 是如何使用的。
20 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! Seata 是一款阿里开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案,github 地址:https://github.com/seata/seata。 RM 模块是 seata 中全局事务参与者,其核心逻辑有: 启动 netty 客户端:会启动 RM 客户端与 TC 通信 数据源切面代理:SQL 解析、分支事务注册 / 提交、undolog 保存、分支事务状态上报 Rpc 代理:在 RPC 流程中传递 seata 上下文(xid 等,非本文分析重点) 同 TM 类似...
21 天前 / 飘移1族
Go 源码阅读系列是我的源码阅读笔记。因为本人的电脑上 Go 的版本是 1.13.4,所以就选择了该版本作为学习的版本。为此我在 Github 上 Fork 了 Go 的源码,并创建了 study1.13.4 分支,来记录对于源码的个人理解或者说中文注释也行。每当阅读完一个包后都会进行一下小结,就像这篇是对 flag 包的总结整理。当然在整理的过程中发现 Go 夜读系列视频,也让我受益颇多。 简介 文件结构 运行测试 总结 接口转换能实现类似 C++ 中模板的功能 函数 vs 方法 newvsmake 指针赋值给接口变量 flag 文件夹中有 flag_test 包 作用域 后续深入 TODO 参考文献 简介 flag 包...
23 天前 / 闲鱼技术
背景「让每一个用户在最短的时间内看到页面上重要的内容」一直以来都是前端工程师们精益求精的方向。对于一个 H5 的源码页面,我们已经有了很多缩短首屏渲染时间的方法,比如数据预取,离线缓存。但在目前看来,由于数据预取和离线缓存都依赖客户端的能力,很多时候会给我们带来一些限制。比如用于增长业务的外投拉新页面,我们并不能知晓第三方 APP 是否具备这样的能力。再比如使用离线缓存能力,我们受制于命中率高低,以及缓存对 APP 性能带来的负面影响这样的问题。
25 天前 / Golang梦工厂
前言有看源码的朋友应该会发现,Go 标准库中大量使用了 unsafe.pointer,要想更好的理解源码实现,就要知道 unsafe.pointer 到底是什么?所以今天就与大家来聊一聊 unsafe 包。 什么是 unsafe 众所周知,Go 语言被设计成一门强类型的静态语言,那么他的类型就不能改变了,静态也是意味着类型检查在运行前就做了。所以在 Go 语言中是不允许两个指针类型进行转换的,使用过 C 语言的朋友应该知道这在 C 语言中是可以实现的,Go 中不允许这么使用是处于安全考虑,毕竟强制转型会引起各种各样的麻烦,有时这些麻烦很容易被察觉,有时他们却又隐藏极深...
26 天前 / binecy
前面文章说了,ChannelHandlerContext#write 只是将数据缓存到 ChannelOutboundBuffer,等到 ChannelHandlerContext#flush 时,再将 ChannelOutboundBuffer 缓存的数据写到 Channel 中。 本文分享 Netty 中 ChannelOutboundBuffer 的实现以及 Flush 过程。 源码分析基于 Netty 4.1 每个 Channel 的 AbstractUnsafe#outboundBuffer 都维护了一个 ChannelOutboundBuffer。 ChannelOutboundBuffer,出站数据缓冲区,负责缓存 ChannelHandlerContext#write 的数据。通过链表管理数据,链表节点为内部类 Entry。
30 天前 / luoxn28
戳蓝字「TopCoder」关注我们哦! Seata 是阿里开源的分布式事务解决方案,致力于提供高性能和简单易用的分布式事务服务。Seata 将为用户提供了 AT、TCC、SAGA 和 XA 事务模式,为用户打造一站式的分布式解决方案,github 地址:https://github.com/seata/seata。 seata 定义 3 个组件来协调分布式事务的处理过程: Transaction Coordinator (TC):事务协调器,维护全局事务的运行状态,负责协调并驱动全局事务的提交或回滚。 Transaction Manager (TM):控制全局事务的边界,负责开启一个全局事务,并最终发起全局提交或全局回滚的决议。
30 天前 / Joinncat
切换 Druid 连接池在分析 SpringBoot 自动配置实现原理之前,先来看一下在使用 SpringBoot 开发的项目代码中如何将数据库连接池切换成 Druid。 对于数据库连接池的选择,SpringBoot 官方更偏向于推荐使用 HikariCP,原因是他们认为 HikariCP 的性能和并发性比较好,如果当前代码的 classpath 路径下存在 HikariCP 的 jar 包,则会优先使用 HikariCP 数据库连接池;如果当前代码的 classpath 路径下不存在 HikariCP 的 jar 包,存在 Tomcat 数据库连接池的 jar 包...