BlogHide Resteemscccoinx (29)in go • 27 days agoGo底层原理相关(1)string类型 string类型的底层数据结构(本质是一个 只读的字节切片 ,使用UTF-8字符编码) // StringHeader is the runtime representation of a string.cccoinx (29)in cn • 5 months agogolang的GMP调度浅析GMP数据结构 G: 表示goroutine,包含了协程的状态,栈,上下文等信息。(基础大小2kb,可理解为打包代码段) M: 表示machine, 也就是工作线程,就是真正用来执行代码的线程。 包含线程的状态,寄存器,信号数据等,由go routime管理生命周期。(2个特殊的M,一个是主线程M,专门用来处理主线流程;另外一个是监控线程M,无需P可执行。…cccoinx (29)in cn • 5 months agogolang内存管理初探内存的理解 可以把内存看成一个数组,内存地址可以看成是数组的下标。 CPU执行指令时,通过内存地址(虚拟内存)将物理内存上的数据载入到寄存器执行机器指令。 对于频繁访问的指令会缓存到CPU的多级缓存中。(CPU常规有一级缓存(几十KB),二级缓存,三级缓存等) 寄存器 是一种硬件设备。在计算机中用来存储数据。(可以是指令数据,控制数据,操作数据等等)…cccoinx (29)in cn • 5 months agogo的GC理解GC实现方式有哪些 GC (Garbage Collection)泛指垃圾回收机制,在高级编程语言中,实现自动化的内存管理(内存分配与回收)。 自动GC 可以使得开发者更关注业务代码,无需管理程序内存分配与回收,有效的提高开发效率。 手动GC 手动GC可以更精确的通过API管理内存,可以极致利用资源。 GC实现方式 主要有两类,包括…cccoinx (29)in cn • 5 months agogo程序启动过程总结Go程序启动流程 大体流程主要是: 编译 -> 加载准备 (初始化环境:内存分配器,调度器,垃圾回收器等模块) -> 运行 (调用main函数) -> 程序退出(资源释放,关闭协程等)。 源代码调试 func main() {cccoinx (29)in cn • 6 months agogolang基础面试题(2)函数调用时struct参数传递问题 在调用一个函数,入参是struct类型对象时候,是进行传值还是引用的传递? 在Go中,函数的参数传递都是 值传递 ,并且传递的实参数都是原始数据的一份拷贝; 就是直接值部的拷贝,如果直接值部包含间接值部的引用,则两者共享相同的间接值部。 slice, map,function,chan都是包含底层的间接值部,go中的 赋值操作 和…cccoinx (29)in cn • 6 months agogolang基础面试题(1)Go包管理的方式有哪些 GOPATH: go version < Go1.5 通过统一包存放的路径实现包管理;不支持依赖包的版本控制。 GOPATH 模式 :是指我们通过GOPATH来管理我们的包。 GOPATH路径 :指的是GOPATH这个环境变量的路径。 独立用户GOPATH配置,不同开发者使用不同版本的GO, 可以设置GOPATH在…cccoinx (29)in cn • 7 months ago网络层的路由与IP协议概览网络层服务 在发送 主机和接收主机 对之间传送段(segment) 在发送端将段封装刀数据报中 在接收端,将段上交给传输层实体 网络层协议存在于每一个主机和路由器 路由器检查每一个经过它的IP数据报的头部 关键功能 转发 将分组从路由器的输入接口转发到合适的输出接口 路由…cccoinx (29)in cn • 7 months agogolang内置net/rpc功能的使用关于go sdk中的rpc的实现源代码参见google open source go/net/rpc 远程过程调用(Remote Procedure Call,RPC)是一个计算机通信协议, 该协议允许运行于一台计算机的程序调用另一台计算机的子程序,而开发者无需额外地为这个交互作用编程。 关键字 通信协议 / 数据编码 SDK 内置rpc 支持…cccoinx (29)in cn • 7 months ago关于io.Discard在tcp连接中使用场景使用场景 一个常用的CS架构的http的请求代码例子: request, err = http.NewRequest(method, reqUrl, nil) cccoinx (29)in cn • 7 months agoTCP可靠传输基础概念概述 点对点: 一个发送方,一个接收方 可靠的,按顺序的 字节流 : 没有报文边界 管道化(流水线):TCP拥塞控制和流量控制设置窗口大小,分组发送和接收。 发送和接收 缓存 全双工 :在同一连接中数据双向流动,按照MSS(最大报文段)进行数据报传递。 面向连接 :…cccoinx (29)in cn • 8 months ago数字资产与通证经济简述数字资产是什么 数字资产是指以电子形式存在并具有经济价值的资产。它们是通过数字技术创建、存储、交易和管理的资产,可以在互联网和数字网络中进行传输和使用。 数字资产的概念非常广泛,包括但不限于以下几类: 加密货币:如比特币(Bitcoin)、以太币(Ethereum)等,是一种基于区块链技术的去中心化数字货币,可以用于在线交易和投资。…cccoinx (29)in cn • 8 months ago以太坊上价值表示与转移简述价值表示与流转概览 1.物理世界的价值表示与转移: 价值表示: 我们的钱(法币)是用银行或者三方可信机构的账本进行表示的,我们的钱就是银行账户上的数字。 价值转移:当交易过程中确认付钱时,它们从我们的银行账户中减去这笔金额,在商店的银行账户中加上相应的金额,从而完成钱的转移。 2.数字世界的价值表示与转移: 信息传递的主要方式是复制 。…cccoinx (29)in cn • 8 months ago区块链上智能合约浅谈价值不仅可以通过数字货币锚定,还可以有任意独特的承载方式。 如果将区块链技术分层, 智能合约 就相当于区块链技术体系架构中的能力层,它是 外部世界与区块链网络交互的媒介 。…cccoinx (29)in cn • 8 months ago区块链上的共识基础节点数据一致性 区块链网络上的交易从连接的链上节点开始逐步向外扩散,最终会有一个时刻,所有的节点都可以收到该交易。这也就意味着去中心化网络中,想要实时保证每个节点数据状态一致比较困难,网络越分散,数据扩散的时间也越久,一致性也越难以达成。 在交易扩散过程中,还可能存在专门搞破坏的作恶者,故意阻碍所有节点数据最终一致性的达成。…cccoinx (29)in cn • 8 months ago区块链中的网络结构和交易扩散点对点网络是搭建区块链建筑的混凝土。 网络模型 在日常工作生活中,我们接触的大部分网络应用架构都是客户端 - 服务器模型( CS应用架构 )。 CS模型的运行机制是这样的:各个客户端向服务器发送请求,而服务端负责接收并处理请求,最终给客户端返回处理结果。 可以清晰认识到这是一个 中心化的网络架构…cccoinx (29)in cn • 8 months ago滑动协议窗口的交互可靠数据传输(rdt) rdt可靠数据传输,在应用层,传输层和数据链路层都很重要。 rdt主要保证数据传输过程中: 不出错,不重复,不丢失 。 基础的rdt发送和传输模型 发送方一次发送一个数据分组 接收方接收到发送方分组数据,返回一个分组确认 发送方得到分组确认,再次发送下一个分组数据。 流水线协议…cccoinx (29)in cn • 8 months ago区块链中的哈希与签名总的来说,只需要理解两类基本算法就可以,那就是 哈希算法以及非对称加密算法 。 对于应用开发者来说,大可以把密码学当作黑盒,你不需要太关注其技术原理,而只需要理解它的特性以及应用场景就可以了。 哈希算法 哈希算法又称 散列函数 ,它可以将任意长度的数据转换成短的、固定长度的数据指纹。 哈希算法不是只有一个固定的实现,而是一类算法的统称(Secure Hash…cccoinx (29)in cn • 8 months ago区块链节点存储核心概念单个区块链节点的链存储设计重点:交易,区块,状态。 存储示意图: 一个区块中有很多条交易,根据区块状态能得知块内交易的处理状态。 交易( Transaction) 从行为的角度解释,交易等同于操作(Operation)。 我们向区块链网络提交一笔交易实质上是发起了一个操作, 而操作的具体内容与特定区块链协议有关…cccoinx (29)in cn • 8 months ago初探区块链基础比特币 还原了支付原来的样子 贸易支付的本质其实是买家与卖家的供需关系,只是由于买卖双方的不信任,才需要引入双方都信任的第三方进行担保,为双方的买卖行为背书。 去掉第三方担保的可能性,设计了一套 基于密码学、无需买卖双方彼此信任就可以完成支付的数字货币系统 。 就是创新性地引入了支付脚本 支付脚本…