【翻译】Go 程序诊断
原文地址:https://tip.golang.org/doc/diagnostics
原文地址:https://tip.golang.org/doc/diagnostics
在 for 循环的 select case 中使用 break 和 continue
根据Go Blog: Go 1.18 is released!一文的概要,了解下Go 1.18的新特性。
本文简单讨论两个问题: (1)对于一个给定的go binary文件,如何获取构建它的go版本? (2)如何将go版本、构建时间、构建环境、git分支和commit id等信息植入到binary文件中?
(1)来自调度器作者的演讲视频,应该算是权威: Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency
原文:Go’s work-stealing scheduler
原文:A complete journey with Goroutines
Dave Cheney 的演讲总结:
记录下今天排查一个goroutine泄露问题的过程:
在Go中,string可以看作是字节切片,即[]byte。 字符串的长度 len(string) 是相应的字节切片的长度 对字符串取索引或者按照索引循环,取的也是其中的字节 对字符串按照索引和值做循环,取的是 rune 记住,type byte = uint8, type rune = int3...
Go语言内置的log库提供的API很简洁: Default方法返回内置的标准Logger:无prefix,日志写到 os.Stderr New方法用于自定义Logger,该方法的函数签名是 func New(out io.Writer, prefix string, flag int) *Logger。...
对于map和slice,如果使用过程中需要做频繁的扩容操作,而这部分代码又是热点代码,那么就有必要对其做性能优化。 一个常见的优化手段是在变量声明时,若事先知道其后续大小,则可指定其容量,避免在扩充过程中频繁的resize或reallocation操作。
看下面这段程序: ```go func main() { a := []int{1, 2, 3} fmt.Println(len(a), cap(a))
看下面这段程序: ```go package main
翻译、整理自:The Go Memory Model。
阅读了官方的 code review 建议文档,将其中有启发的或是此前未曾听过的观点记录下来。
视频地址:Go Anti-Patterns
序列化
使用 map 的注意事项
原文链接和视频
执行基准测试的命令: go test -run=XXX -bench=. -benchmem -cpuprofile cpu.out -memprofile mem.out
go 官方提供了一个 benchstat 的命令行工具,用于计算和比较 benchmark 的统计结果。
看了一篇使用 go 语言实践 DDD 的文章,内容比较浅,但也了解了一些基本的概念。
go vet check
记录工作中遇到的一个小问题。
这是阅读博客 Sync vs. Async Python: What is the Difference? 时记录下的笔记。
这里来梳理一下 python 中和 for 循环有关的两个概念:iterable 和 iterator。
每个 Python 开发者或多或少都写过类似如下的代码: ```python class Foo: def init(self, attr_a, attr_b): self.attr_a = attr_a self.attr_b = attr_b
在学习 Redis University 的 RU102PY-Week1 课程时,遇到了 DAO 模式。之前一直以为这种都是 Java 领域的概念,看来是误解了。
在开发 flask 应用时,一个常见的需求是能够全局捕获异常并根据异常类型返回相应的 response。 flask 框架提供了这种能力,通过注册 errorhandler 函数来实现。它会将某种异常和对应的异常处理函数“绑定”在一起,当异常发生时调用该处理函数。 一般地,可以在 create_app 函数中添加...
今天学到的一个 Python 小技巧:如何正确地在日志中记录 exception? 方法就是,捕获到异常后打印异常信息,使用 repr(e) 而不是 str(e),因为前者包含了异常类型和异常的 message,而后者只有 message。
如何管理资源是写代码时必须要注意的一个问题。这里的资源常常指的是文件描述符、锁、网络或数据库连接等。在很多语言中,往往通过 try-catch-finally 的范式来处理。但是 Python 提供了 with 语句来做这类事情,更为简便、优雅:
Python 是一种解释型语言,有时在运行的时候会对 None 对象获取属性值,从而抛出异常。例如: >>> foo = None >>> foo.bar Traceback (most recent call last): File "<stdin>", li...
Python 中有的对象是有 bool 属性的,比如空列表、空字符串、空字典、数字 0 都可以表示为 False。
原文地址:Understanding ClickHouse Data Skipping Indexes
ClickHouse官网最近更新了文档,浏览时发现一篇文章对主索引介绍得非常详细,图文并茂,值得阅读学习:A Practical Introduction to Sparse Primary Indexes in ClickHouse
Low Cardinality 数据类型 用来“包装”其他的数据类型,语法是LowCardinality(data_type),这里的data_type可以是String,FixedString,Date,DateTime,除了Decimal外的其他数字类型。它本质上是对被包装的data_type做了字典编码,使...
part包含了一张表中部分行的数据。一个part在磁盘上就是一个单独的目录。 part 目录的命名规则:{partition_name}_{min_block_number}_{max_number_block}_{level},例如 202202_1_6017_451
了解ClickHouse中的数据压缩有助于在配置、建表时选择恰当的压缩方法,减少数据占用的磁盘空间,节省资源。
《趣谈 Linux 操作系统》专栏第5讲笔记
这里记录一些学习过程中浏览到的工具和资料。
《趣谈 Linux 操作系统》专栏第4讲笔记,记录下之前不太熟悉的命令。
通过专栏开篇的题目知道自己对操作系统的了解到什么程度,有哪些知识点是盲区。
《趣谈 Linux 操作系统》专栏第5讲笔记
这里记录一些学习过程中浏览到的工具和资料。
《趣谈 Linux 操作系统》专栏第4讲笔记,记录下之前不太熟悉的命令。
通过专栏开篇的题目知道自己对操作系统的了解到什么程度,有哪些知识点是盲区。
(1)来自调度器作者的演讲视频,应该算是权威: Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency
原文:Go’s work-stealing scheduler
原文:A complete journey with Goroutines
记录下今天排查一个goroutine泄露问题的过程:
在这里记录下学习system-design-primer的过程,希望不要放弃得太快。
以下记录阅读教材 The Twitter Problem 的笔记。
阅读了一个系列博客 Scalability for Dummies,内容比较浅显易懂,讲述了 scalability 的基本概念和实践,适合我这种小白了。
记录一次接口耗时调优过程和体会。
执行基准测试的命令: go test -run=XXX -bench=. -benchmem -cpuprofile cpu.out -memprofile mem.out
go 官方提供了一个 benchstat 的命令行工具,用于计算和比较 benchmark 的统计结果。
观看学习了Björn Rabenstein在PromCon 2016上的演讲The Prometheus Time Series Database。
阅读Prometheus storage: technical terms for humans记录笔记。
看了演讲PromCon 2017: Best Practices and Beastly Pitfalls - Julius Volz,记录一些有用的知识点:
观看学习了Björn Rabenstein在PromCon 2016上的演讲The Prometheus Time Series Database。
TICK 是Influx Data基于InfluxDB这个时序数据库打造的监控技术栈。下面来初步认识下它。
最近看了一篇介绍 Facebook Gorilla 时序数据库的论文:Gorilla: A Fast, Scalable, In-Memory Time Series Database,做一些笔记摘要。
从这里出发,开始一段既平淡也不缺乏激情的旅程。
You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different wa...
go vet check
记录工作中遇到的一个小问题。
SonarQube 社区版不支持对 Swift 和 Objective-C 的扫描,需要借助于开源插件 sonar-swift 来实现。
执行基准测试的命令: go test -run=XXX -bench=. -benchmem -cpuprofile cpu.out -memprofile mem.out
go 官方提供了一个 benchstat 的命令行工具,用于计算和比较 benchmark 的统计结果。
对于map和slice,如果使用过程中需要做频繁的扩容操作,而这部分代码又是热点代码,那么就有必要对其做性能优化。 一个常见的优化手段是在变量声明时,若事先知道其后续大小,则可指定其容量,避免在扩充过程中频繁的resize或reallocation操作。
使用 map 的注意事项
对于map和slice,如果使用过程中需要做频繁的扩容操作,而这部分代码又是热点代码,那么就有必要对其做性能优化。 一个常见的优化手段是在变量声明时,若事先知道其后续大小,则可指定其容量,避免在扩充过程中频繁的resize或reallocation操作。
看下面这段程序: ```go func main() { a := []int{1, 2, 3} fmt.Println(len(a), cap(a))
看了演讲PromCon 2017: Best Practices and Beastly Pitfalls - Julius Volz,记录一些有用的知识点:
Dave Cheney 的演讲总结:
原文:Go’s work-stealing scheduler
原文:A complete journey with Goroutines
最近看了一篇介绍 Facebook Gorilla 时序数据库的论文:Gorilla: A Fast, Scalable, In-Memory Time Series Database,做一些笔记摘要。
在学习 VictoriaMetrics时,作者的文章提到其存储类似于ClickHost的MergeTree,而MergeTree又和LSM-Tree(Log Structured Merge Tree)相似,于是借此机会了解了下LSM Tree是什么东西和使用场景,初步整理如下。
ZooKeeper Overview 内容
You’ll find this post in your _posts directory. Go ahead and edit it and re-build the site to see your changes. You can rebuild the site in many different wa...
一级标题 二级标题 三级标题 四级标题
一级标题 二级标题 三级标题 四级标题
JMS vs AMQP
JMS vs AMQP
JMS vs AMQP
JMS vs AMQP
简介 Vault 是 HashCorp 公司出品的用于管理和存储各种密码、令牌、证书等的软件。
今天学到的一个 Python 小技巧:如何正确地在日志中记录 exception? 方法就是,捕获到异常后打印异常信息,使用 repr(e) 而不是 str(e),因为前者包含了异常类型和异常的 message,而后者只有 message。
在开发 flask 应用时,一个常见的需求是能够全局捕获异常并根据异常类型返回相应的 response。 flask 框架提供了这种能力,通过注册 errorhandler 函数来实现。它会将某种异常和对应的异常处理函数“绑定”在一起,当异常发生时调用该处理函数。 一般地,可以在 create_app 函数中添加...
在学习 Redis University 的 RU102PY-Week1 课程时,遇到了 DAO 模式。之前一直以为这种都是 Java 领域的概念,看来是误解了。
每个 Python 开发者或多或少都写过类似如下的代码: ```python class Foo: def init(self, attr_a, attr_b): self.attr_a = attr_a self.attr_b = attr_b
go vet check
SonarQube 社区版不支持对 Swift 和 Objective-C 的扫描,需要借助于开源插件 sonar-swift 来实现。
SonarQube 社区版不支持对 Swift 和 Objective-C 的扫描,需要借助于开源插件 sonar-swift 来实现。
学到一个英文大小写字母间快速转换的小技巧: (1)大写转换成小写:和 0x20 做或运算,即: 'A' | 0x20 = 'a' (2)小写转换成大写:和 0xdf 做与运算,即: 'a' & 0xdf = 'A'
学到一个英文大小写字母间快速转换的小技巧: (1)大写转换成小写:和 0x20 做或运算,即: 'A' | 0x20 = 'a' (2)小写转换成大写:和 0xdf 做与运算,即: 'a' & 0xdf = 'A'
当拿到一台新的 mbp 时,要做哪些安装和配置来 setup 一个适合自己的舒适的工作环境呢? 我尝试在这里记录一下,并可能不时更新,为了方便之后的自己。
看了一篇使用 go 语言实践 DDD 的文章,内容比较浅,但也了解了一些基本的概念。
这是阅读博客 Sync vs. Async Python: What is the Difference? 时记录下的笔记。
阅读了一个系列博客 Scalability for Dummies,内容比较浅显易懂,讲述了 scalability 的基本概念和实践,适合我这种小白了。
缓存失效 Cache Invalidation
原文链接和视频
序列化
翻译、整理自:The Go Memory Model。
Go语言内置的log库提供的API很简洁: Default方法返回内置的标准Logger:无prefix,日志写到 os.Stderr New方法用于自定义Logger,该方法的函数签名是 func New(out io.Writer, prefix string, flag int) *Logger。...
在Go中,string可以看作是字节切片,即[]byte。 字符串的长度 len(string) 是相应的字节切片的长度 对字符串取索引或者按照索引循环,取的也是其中的字节 对字符串按照索引和值做循环,取的是 rune 记住,type byte = uint8, type rune = int3...
记录下今天排查一个goroutine泄露问题的过程:
Dave Cheney 的演讲总结:
原文:Go’s work-stealing scheduler
(1)来自调度器作者的演讲视频,应该算是权威: Dmitry Vyukov — Go scheduler: Implementing language with lightweight concurrency
阅读Prometheus storage: technical terms for humans记录笔记。
在学习 VictoriaMetrics时,作者的文章提到其存储类似于ClickHost的MergeTree,而MergeTree又和LSM-Tree(Log Structured Merge Tree)相似,于是借此机会了解了下LSM Tree是什么东西和使用场景,初步整理如下。
最近看了一篇介绍 Facebook Gorilla 时序数据库的论文:Gorilla: A Fast, Scalable, In-Memory Time Series Database,做一些笔记摘要。
最近多次看到Bloom Filter这个数据结构,于是搜集了一些资料加以了解,整理如下。
记录一次接口耗时调优过程和体会。
记录一次接口耗时调优过程和体会。
本文简单总结下怎样在终端打印带颜色的字符串。
本文简单总结下怎样在终端打印带颜色的字符串。
本文简单总结下怎样在终端打印带颜色的字符串。
fsync 是一个系统调用,用于强制将缓冲区中的数据写入磁盘。
fsync 是一个系统调用,用于强制将缓冲区中的数据写入磁盘。
fsync 是一个系统调用,用于强制将缓冲区中的数据写入磁盘。
TICK 是Influx Data基于InfluxDB这个时序数据库打造的监控技术栈。下面来初步认识下它。
TICK 是Influx Data基于InfluxDB这个时序数据库打造的监控技术栈。下面来初步认识下它。
本文简单讨论两个问题: (1)对于一个给定的go binary文件,如何获取构建它的go版本? (2)如何将go版本、构建时间、构建环境、git分支和commit id等信息植入到binary文件中?
How to Write a Git Commit Message Conventional Commits commitlint工具 Gist: Semantic Commit Messages Git commit message
Base64和Base32是两种常见的编码方式。Base64早已接触过,比如在Basic Auth中对用户名和密码做编码,对图像做编码后将图像内容放在HTTP请求体中(在yitu工作时见过)。而Base32则是最近看ULID资料时看到的。
Base64和Base32是两种常见的编码方式。Base64早已接触过,比如在Basic Auth中对用户名和密码做编码,对图像做编码后将图像内容放在HTTP请求体中(在yitu工作时见过)。而Base32则是最近看ULID资料时看到的。
Graphviz是一款著名的图形可视化软件。我初次听闻该软件还是使用go pprof时,第一感觉挺酷的。