- 博客(96)
- 收藏
- 关注
原创 抽丝剥茧—Go哈希Map的鬼魅神功
抽丝剥茧—Go哈希Map的鬼魅神功Go语言中的哈希Map是江湖上极厉害的一门武功,其入门简单,即便是掌握到了2、3层也具有四两拨千斤的神奇功效.因此成为江湖人士竞相研习的技艺,风头一时无两.但即便是成名已久的高手,也鲜有能修炼到最高层的.本文不仅介绍了哈希Map基本的使用方式,还深入源码介绍了哈希Map的至高心法.希望本文有助于你对Go哈希Map的理解臻于化境.哈希表Go语言中的Map,又称为Hash map(哈希表)是使用频率极高的一种数据结构,重要程度高到令人发指。哈希表的原理是将多个
2020-06-27 21:33:47
356
原创 golang快速入门[9.2]-深入数组用法、陷阱与编译时
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-04-07 19:46:11
907
原创 golang快速入门[9.1]-深入字符串的存储、编译与运行
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-04-01 21:32:03
637
原创 golang快速入门[8.4]-常量与隐式类型转换
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-03-27 13:59:26
755
原创 golang快速入门[8.3]-深入理解IEEE754浮点数
前文 golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言...
2020-03-24 15:56:16
2548
原创 golang快速入门[8.2]-自动类型推断的秘密
golang快速入门[8.2]-自动类型推断的秘密前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]...
2020-03-21 21:34:21
570
原创 计算机网络快速入门[3]- 物理层、双绞线、终端
前文计算机网络快速入门[1]-前言 计算机网络快速入门[2]-网络设备-电缆、集线器、交换机、路由器前言在上节中介绍了各种网络设备 在本小节将介绍物理层的细节物理层在某些方面,网络模型的物理层是最复杂的。它的主要重点是从链接的一端移动1和0到另一端。但是,非常复杂的数学,物理和电气工程原理正在发挥作用,以不可思议的速度跨细线传输大量数据,对我们来说幸运的是,其中大多数技术...
2020-03-20 12:10:42
893
1
原创 计算机网络快速入门[2]-网络设备-电缆、集线器、交换机、路由器
前文计算机网络快速入门[1]-前言前言在上节中介绍了计算机网络快速入门写作的初衷、计算机网络的内涵以及计算机网络5层模型与ISO7层网络模型 可以使用许多不同的电缆和网络设备来使计算机彼此正确通信。在本文结束后,您将能够识别和描述各种网络电缆和网络设备。电缆(Cables)了解如何区分不同的网络设备对于您的成功至关重要。让我们从有线网络的最基本组件电缆开始电缆可以将不同的设备...
2020-03-18 20:27:19
2956
1
原创 计算机网络快速入门[1]-前言
前言在从事软件工程领域的多年里,发现大多数编程人员对于网络方面的知识都非常匮乏。然而网络又是如此的重要,以至于我们每时每刻都在与其打交道。当碰到一些网络通信问题时,许多人感到束手无策,这就是这系列计算机网络快速入门文章诞生的原因。如果把学习IT比作是练功,那么网络显然是修炼内功的过程。在接下来的课程中,一起来修炼吧~计算机网络计算机之间的交流非常像人类的方式。以口头交流为例,两个人需要...
2020-03-16 11:30:33
328
原创 golang快速入门[8.1]-变量类型、声明赋值、作用域声明周期与变量内存分配
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-03-11 19:32:30
326
原创 golang快速入门[7.2]-北冥神功—go module绝技
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-03-07 20:48:58
474
原创 golang快速入门[7.1]-项目与依赖管理-gopath
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-03-03 12:43:29
404
原创 golang快速入门[6.2]-集成开发环境-emacs详解
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-02-29 21:47:50
2038
原创 golang快速入门[6.1]-集成开发环境-goland详解
前文golang快速入门[1]-go语言导论 golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5...
2020-02-28 14:25:26
639
原创 golang快速入门[5.3]-go语言是如何运行的-内存分配
前文golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5.1]-go语言是如何运行的-链接器 go...
2020-02-23 13:00:24
424
原创 golang快速入门[5.2]-go语言是如何运行的-内存概述
前文golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码 golang快速入门[5.1]-go语言是如何运行的-链接器前言...
2020-02-19 15:14:16
319
原创 6.824分布式系统[4]-Zookeeper在主从复制的应用
准备工作阅读论文ZooKeeper: wait-free coordination for internet-scale systems 阅读raft理论与实践[6]-lab3a-基于raft构建分布式容错kv服务为什么要阅读这篇文章Zookeeper是广泛使用的主从复制状态机服务 受Chubby(Google的全局锁定服务)启发 最初在Yahoo得到应用,后来在Mesos, HB...
2020-02-17 20:55:01
541
原创 golang快速入门[5.1]-go语言是如何运行的-链接器
前文golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld golang快速入门[4]-go语言如何编译为机器码前言在上一篇文章中,我们详细介绍了go语言编译为机器码经历的:词法...
2020-02-16 14:45:04
820
原创 raft理论与实践[6]-lab3a-基于raft构建分布式容错kv服务
raft理论与实践[6]-lab3a-基于raft构建分布式容错kv服务准备工作阅读raft论文 阅读raft理论与实践[1]-理论篇 阅读raft理论与实践[2]-lab2a 阅读raft理论与实践[3]-lab2a讲解 阅读raft理论与实践[4]-lab2b日志复制 阅读raft理论与实践[5]-lab2c日志复制 阅读模拟RPC远程过程调用前言在之前的文章中,我们...
2020-02-15 14:50:19
343
原创 golang快速入门[4]-go语言如何编译为机器码
前文golang快速入门[2.1]-go语言开发环境配置-windows golang快速入门[2.2]-go语言开发环境配置-macOS golang快速入门[2.3]-go语言开发环境配置-linux golang快速入门[3]-go语言helloworld 在上文中,我们详细介绍了第一个helloworld程序package mainimport "fmt"func ma...
2020-02-11 13:43:55
2775
原创 golang快速入门[3]-go语言helloworld
golang快速入门[3]-go语言helloworld在之前,我们介绍了如何在windows、macos以及linux平台构建go语言的开发环境 [golang快速入门[2.1]-go语言开发环境配置-windows]() [golang快速入门[2.2]-go语言开发环境配置-macOS]() [golang快速入门[2.3]-go语言开发环境配置-linux]() 本文将...
2020-02-08 18:54:57
408
原创 golang快速入门[2.3]-go语言开发环境配置-linux
golang快速入门[2.3]-go语言开发环境配置-linuxlinux安装Go语言开发包默认读者会使用linux的基本操作 配置go语言的开发环境的第一步是要在go官网下载页面下载开发包 linux需要下载tar.gz压缩文件 这里我们下载的是 64 位的开发包,如果读者的电脑是 32 位系统或者有特殊的需求,则需要下载 32 位的开发包 在上图所示页面中...
2020-02-07 12:44:50
333
原创 golang快速入门[2.2]-go语言开发环境配置-macOS
golang快速入门[2.2]-go语言开发环境配置-macOSmacos安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包 macOS需要下载pkg后缀文件 macOS和iOS操作系统Apple软件包使用.pkg扩展名,在内部使用Xar格式Mac OS 的Go语言开发包是 .pkg 格式的,双击我们下载的安装包即可开始安装,一路点击“继续”即...
2020-02-07 12:06:47
404
原创 golang快速入门[2.1]-go语言开发环境配置-windows
golang快速入门[2.1]-go语言开发环境配置-windows接下来,我们将讲解在windows、linux、macos三大平台上配置go语言的开发环境。windows安装Go语言开发包配置go语言的开发环境的第一步是要在go官网下载页面下载开发包 windows需要下载msi后缀文件,msi是windows下的安装包文件格式,用于安装,存储和删除程序这里我们下载的是...
2020-02-06 20:00:25
766
原创 微服务理论与实践[1]-什么是微服务
微服务理论与实践[1]-什么是微服务什么是微服务微服务 (Microservices) 是一种软件架构风格,将应用程序构造为围绕业务的小型自治服务的集合 微服务以专注于单一责任与功能的小型功能区块 (Small Building Blocks) 为基础。每个服务都是独立的,并实现单个业务功能 微服务利用模块化的方式组合出复杂的大型应用程序,各功能区块使用与语言无关的 API ...
2020-02-04 19:49:21
338
原创 golang快速入门[1]-go语言导论
golang快速入门[1]-go语言导论声明这是一套帮助初学者从0到1学习go语言的开源教程,致力于打造最完整、最强悍、最有深度的Go语言学习体系 我希望这套课程能够涵盖Go语言的所有体系、并致力于用大量的案例来诠释其用法 鉴于作者水平有限,真诚地希望能够集所有人的智慧,完善此项目,链接附后简介Go(又称Golang)是Google开发的一种静态强类型、编译型、并发型,并具有垃圾...
2020-02-01 19:10:04
570
原创 6.824分布式系统[3]-主从复制
准备工作阅读:Fault-Tolerant Virtual Machines为什么要阅读这篇文章了解分布式系统的容错机制 本文是对于容错机制的比较特殊的实现,其并不是要设计一个应用程序级别的容错系统,而是一个系统级别的。需要处理CPU中断,能够为了实现一个容错的虚拟机系统(VM-FT),难度更大。容错(Fault tolerance)容错是即使发生故障也会继续提供服务的能力 ...
2020-01-31 18:56:18
306
原创 6.824分布式系统[2]-GFS案例学习
准备工作阅读:GFS论文背景GFS是Google在2003年发出的经典论文,其作为分布式文件系统,实际应用在Google的MapReduce框架实现中,作为原始数据和最终结果存储的基础服务。 为其他上层基础系统比如BigTable提供服务,Hadoop中的HDFS就是其开源实现。 这篇文章讨论了诸如一致性、容错、网络性能等分布式系统工程中的经典问题,启发了后续很多分布式文件系统的发...
2020-01-30 22:34:27
229
原创 6.824分布式系统[2]-GFS案例学习
准备工作阅读:GFS论文背景GFS是Google在2003年发出的经典论文,其作为分布式文件系统,实际应用在Google的MapReduce框架实现中,作为原始数据和最终结果存储的基础服务。 为其他上层基础系统比如BigTable提供服务,Hadoop中的HDFS就是其开源实现。 这篇文章讨论了诸如一致性、容错、网络性能等分布式系统工程中的经典问题,启发了后续很多分布式文件系统的发...
2020-01-30 22:26:43
184
原创 raft理论与实践[5]-lab2c-持久化
准备工作1、阅读raft论文2、阅读raft理论与实践[1]-理论篇3、阅读raft理论与实践[2]-lab2a4、阅读raft理论与实践[3]-lab2a讲解5、阅读raft理论与实践[4]-lab2b日志复制6、查看我写的这篇文章: 模拟RPC远程过程调用持久化 如果基于Raft的服务器重新启动,则应从中断的位置恢复服务。 这就要求Raft保持持久状态,使其在重启后仍然...
2020-01-19 17:12:27
427
原创 raft理论与实践[4]-lab2b
准备工作1、阅读raft论文2、阅读raft理论与实践[1]-理论篇3、阅读raft理论与实践[2]-lab2a4、阅读raft理论与实践[3]-lab2a讲解5、查看我写的这篇文章: 模拟RPC远程过程调用执行日志我们需要执行日志中的命令,因此在make函数中,新开一个协程:applyLogEntryDaemon()funcMake(peers[]*labrpc.Cl...
2020-01-18 21:35:18
313
原创 s081[2]-unix内存分配方式-malloc实现
内存分配前序课程操作系统接口:https://dreamerjonson.com/2020/01/04/6-s081-1/系统编程(Systems programming)wiki参考与应用程序编程相比,系统编程的主要区别在于,应用程序编程旨在产生直接向用户提供服务的软件。系统编程主要为其他应用程序提供服务,直接操作操作系统。它的目标是实现对可用资源的有效利用。例如:unix...
2020-01-16 15:30:35
296
原创 s081[1]-操作系统原理
操作系统操作系统接口前言实验1需要我们调用unix操作系统保持出的接口,因此首先需要了解unix操作系统有关的知识。操作系统(operating system)的功能操作系统的任务是在多个程序之间共享一台计算机,并提供比单独的硬件所支持的更为有用的服务集。操作系统管理和抽象化低级硬件,因此,例如,文字处理器不必担心自己正在使用哪种类型的硬件。操作系统允许多个程序之间共享硬...
2020-01-16 15:26:11
359
原创 raft理论与实践[3]-lab2a讲解
lab2a实验讲解1、raft.go 的raft结构体 补充字段。 字段应该尽量与raft论文的Figure2接近。type Raft struct { mu sync.Mutex // Lock to protect shared access to this peer's state peers []*labrpc.ClientEnd // RP...
2020-01-15 22:13:19
304
原创 raft理论与实践[2]-lab2a实验说明
准备工作1、阅读raft论文2、阅读我写的raft理论与实践[1]-理论篇3、由于我们需要模拟rpc远程调用, 因此需要查看我写的这篇文章: 模拟RPC远程过程调用4、实验开始,我们首先需要拉取代码:git clone git@github.com:dreamerjackson/golang-deep-distributed-lab.gitgit checkout --hard 4...
2020-01-15 21:39:48
399
原创 go语言渐入佳境-网络[5]-tcpaddr
TCPAddrtype TCPAddr struct {IP IPPort int}ResolveTCPAddr函数用于创建TCPAddr其中参数net是“tcp”,“tcp4”或“tcp6”之一,addr是由主机名或IP地址组成的字符串,后跟“:”后面的端口号,例如“www.google.com:80“或”127.0.0.1:22“。客户端测试...
2020-01-14 21:52:09
306
原创 go语言渐入佳境-网络[4]-port
端口port服务器运行在主机上。 IP地址将定位主机。但是在每台计算机上可能有很多服务,需要一种简单的方法来区分它们。 TCP,UDP,SCTP等使用的方法是使用端口号。有许多“标准”端口。 Telnet通常使用端口23,TCP协议。 DNS使用端口53,使用TCP或UDP。 FTP使用端口21和20,一个用于命令,另一个用于数据传输。HTTP通常使用端口80,但它通常使用端口8000,80...
2020-01-14 21:46:02
210
原创 Golang 笔记之深入浮点数
引言下面的一段简单程序 0.3 + 0.6 结果是什么?1 var f1 float64 = 0.32 var f2 float64 = 0.63 fmt.Println(f1 + f2)有人会天真的认为是0.9,但实际输出却是0.8999999999999999(go 1.13.5)问题在于大多数小数表示成二进制之后是近似且无限的。以0.1为例。它可能是你能想到的最简...
2020-01-13 15:34:50
1469
原创 go语言渐入佳境-网络[3]-IPAddr
IPAddrtype IPAddr {IP IP}此类型的主要用途是对IP主机名执行DNS查找。测试ResolveIPAddr函数将对主机名执行DNS查找,并返回单个IP地址。但是,主机可能有多个IP地址,通常来自多个网卡。它们也可能有多个主机名,充当别名。其中一个地址将被标记为“规范(canonical)”主机名。如果您希望找到规范名称,请使用...
2020-01-10 13:19:41
204
原创 go语言渐入佳境-网络[2]-ipmask
IPMaskipmask存储掩码,掩码是指定ip地址中前多少位是网络地址的。type IPMask []byte测试本文链接:https://dreamerjonson.com/2019/01/18/go-network-2-ipmask/ 版权声明:本博客所有文章除特别声明外,均采用CC BY 4.0 CN协议许可协议。转载请注明出处! go语言交流...
2020-01-10 13:14:07
662
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人