首页
学习
活动
专区
工具
TVP
发布

数据小冰

专栏作者
139
文章
62173
阅读量
27
订阅数
redis SDS设计与实现分析
本系列文章从源码角度分析redis的设计与实现,分析的源码为最新版本7.2.4。下载地址(https://github.com/redis/redis/tree/7.2.4)。
数据小冰
2024-03-22
790
Go语言中常见100问题-#100 Not understanding the impacts of running Go ..
2021年Go开发者调查(https://go.dev/blog/survey2021-results)表明,用Go编写服务是最常见的用法,见下图。与此同时,Kubernetes是部署这些服务最广泛使用的平台。
数据小冰
2024-02-23
980
Go语言中常见100问题-#99 Not understanding how the GC works
垃圾回收♻️(GC)是Go语言关键特性,帮助开发人员大大减轻心智负担。我们知道内存有栈和堆区之分,栈内存无需手动释放,但是堆内存需要我们手动释放。在Go语言中,GC会跟踪和释放不再使用的堆内存,每个Gopher都应该了解其工作原理,这非常有助于我们对程序进行优化。
数据小冰
2024-02-23
1220
Go语言中常见100问题-#98 Not using Go diagnostics tooling
Go语言提供了一些优秀的分析工具,可以帮助我们定位程序的性能问题。本文关注最关键的两个工具:pprof和trace。pprof和trace都是Go语言自带的性能分析工具,pprof可以采集内存分配、goroutine等信息,使用trace可以分析并发、阻塞事件以及GC情况。
数据小冰
2024-02-23
1580
Go语言中常见100问题-#97 Not relying on inlining
内联是指用函数体内容替换函数调用。内联过程是由编译器自动完成的,了解内联的基本原理有助于我们对一些场景下的代码进行优化。
数据小冰
2024-02-01
1130
Go语言中常见100问题-#96 Not knowing how to reduce allocations
减少内存分配是Go应用程序的一个常见优化事项。本系列文章已介绍了不少减少堆上内存分配的方法:
数据小冰
2024-02-01
1010
Go语言中常见100问题-#95 Not understanding stack vs. heap
在Go语言中,变量可以分配在栈上,也可以分配在堆上。栈内存和堆内存有着本质不同,会对数据密集型应用产生重大影响。本文主要讨论编译器将一个变量分配到栈上还是堆上规则。
数据小冰
2024-01-22
940
Go语言中常见100问题-#94 Not being aware of data alignment
数据对齐是指数据在内存中的分配方式。规则的内存分配可以加速CPU访问内存速度。如果不了解数据对齐,会导致编写的程序消耗额外的内存,并且程序性能低下。
数据小冰
2024-01-10
840
Go语言中常见100问题-#93 Not taking into account instruction-level ...
指令级别并行也是严重影响程序性能的一个原因。在理解什么是指令级并行之前,先来看一个具体的例子,并分析如何优化它。下面的函数接收一个长度为2的int64类型数组,函数内部将迭代一定次数,在每轮迭代时,执行如下操作:
数据小冰
2024-01-02
920
Go语言中常见100问题-#92 Writing concurrent code that leads to false ...
在Go语言中常见100问题-#91 Not understanding CPU caches中讨论了缓存基本概念,可以看到一些特定的缓存(通常是 L1 和 L2)并不在所有逻辑内核之间共享,而是属于一个特定物理内核。这种特殊性会产生一些影响,比如并发时伪共享,这会导致性能显著下降。下面通过一个具体例子来说明什么是伪共享,以及如何预防这种情况发生。
数据小冰
2023-12-13
1410
Go语言中常见100问题-#91 Not understanding CPU caches
机械同理心(mechanical sympathy)是三届F1世界冠军杰基·斯图尔特 (Jackie Stewart) 创造的一个术语。
数据小冰
2023-11-29
1570
Go语言中常见100问题-#90 Not exploring all the Go testing features
单元测试是每个开发人员必须掌握的开发技能,Go语言特别注重单元测试,所以每个Gopher需要知道如何进行单元测试,使用什么参数控制测试效果,提升我们编写的代码质量,本文讨论相关单测技巧。
数据小冰
2023-09-10
1840
Go语言中常见100问题-#89 Writing inaccurate benchmarks
我们不要猜测程序性能,在对代码进行优化的时候,可能会有很多因素发挥作用,所以需要综合考虑,进行测试验证准没错。然而,编写benchmark并不是一件简单的事情,很容易因编写错误的benchmark导致做出不正确优化。本章节将列举一系列非正确编写benchmark问题点。
数据小冰
2023-08-17
2010
Go语言中常见100问题-#88-2 the iotest package
iotest包 https://pkg.go.dev/testing/iotest 提供了测试 readers和writers 函数集合。很多Gopher不知道有这个包,本文讲如何使用该包,方便我们编写测试代码。
数据小冰
2023-08-17
1580
Go语言中常见100问题-#41 substrings and memory leaks
在Go语言中常见100问题-#26 slices and memory leaks讨论切片可能导致的内存泄露问题,其实对于字符串也可能会导致内存泄露。下面来分析在操作字符串的时候如何防止内存泄露。
数据小冰
2023-08-17
1630
Go语言中常见100问题-#40 Useless string conversions
当编码操作的类型既可以是 []byte 又可以是 string时,大多数程序员倾向使用string类型,因为这样可能更方便。但是大多数的 I/O 操作采用的类型是 []byte。例如 io.Reader、io.Writer 和 io.ReadAll. 如果拿到的类型是string,但又要使用这些接口意味着需要进行类型转换,strings包提供了相关的转换函数。
数据小冰
2023-08-17
990
Go语言中常见100问题-#39 Under-optimized string concatenation
在Go语言中,字符串连接主要有两种方法,其中一种在某些时候是非常低效的,通过本文学习我们应该掌握在不同的场景下选择最合适的方法。
数据小冰
2023-08-17
970
Go语言中常见100问题-#38 Misusing trim functions
很多Gopher常犯的一个错误是混合使用strings包中的 TrimRight 和 TrimSuffix 函数,因为这个两个函数提供的功能相似,极容易产生误用。下面通过具体的例子说明。
数据小冰
2023-08-17
1270
Go语言中常见100问题-#37 Inaccurate string iteration
对字符串进行迭代是一个非常常见的操作,例如我们想要对字符串中的每个rune做一些操作或者实现一个查找具体子串的函数。但是字符串迭代中存在一些误区,需要了解掌握,避免踩坑。
数据小冰
2023-08-17
1370
Go语言中常见100问题-#36 Not understanding the concept of a rune
通过字符可以简化字符集定义,但是在Unicode中,使用代码点来标识字符,字符集中的每个字符都有唯一的代码点值。例如,中文汉字的代码点值是U+6C49. 如果采用UTF-8编码,汉字存储占3个字节:0xE6,0xB1,0x89. 理解这些非常重要,因为在Go语言中,1个rune字符是一个代码点。
数据小冰
2023-08-17
1400
点击加载更多
社区活动
腾讯技术创作狂欢月
“码”上创作 21 天,分 10000 元奖品池!
Python精品学习库
代码在线跑,知识轻松学
博客搬家 | 分享价值百万资源包
自行/邀约他人一键搬运博客,速成社区影响力并领取好礼
技术创作特训营·精选知识专栏
往期视频·千货材料·成员作品 最新动态
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档