Go: 关于锁的1234 (www.felix021.com)

【简介】

其实锁很适合用来做套题,比如可以这么切入:sync.Mutex 是悲观锁还是乐观锁?

有些候选人不了解它们的区别,回答靠猜,缺乏逻辑以至于我都记不住。虽然这只是一个概念性的知识,但是却很能反映候选人的工作经验,比如读多写少的并发场景,乐观锁可以减少加锁冲突带来的开销。

当然大多数人还是知道的,于是可以继续问:你有了解过锁是怎么实现的吗?

很多人都能想到:维护一个初值为 false 的变量,当一个线程加锁成功的时候,将它置为 true ,就可以保证其他线程无法再获取。

逻辑是没错,但真正的问题是:两个线程同时检查,发现它的值都是 false ,如何保证只有一个线程会把它置为 true 呢?

这样的提问让不少候选人意识到,自己其实并没有真正理解锁。

点击查看全文 >>

@技术头条 2021-06-13 23:27分享 / 原作者微博:@Slyar / 0个评论
赞过的人: IT技术博客大学习
要不要再学学下面的文章?
面试官提问三个Go接口的概念, 10年gopher竟无言以对 (colobu.com)
自 Go 1.18后, Go的interface的含义有所变化, 三个新的和Go接口有关的概念很多人还不知道: type set(类型集合)、specific type(特定类型)和structural type(结构类型)。
by @技术头条 2022-05-06 23:30 分享 查看详情
Go泛型系列:再简化,省略接口 (colobu.com)
如果你一直关注Go泛型的设计和实现,一定知道Go泛型代码实现是通过类型参数(type parameter)实现的,当运行泛型代码时,类型参数(type parameter)由类型参数(type argument)替代。(很遗憾parameter和argument都被翻译成了中文参数)

类型参数(type parameter)也有类型,也就是描述这个参数类型行为的元数据,被成为约束(constraint)。最通用的约束就是内建的any类型,它代表任意的类型。
by @技术头条 2022-05-06 23:16 分享 查看详情
Go泛型不支持泛型方法,这是一个悲伤的故事 (colobu.com)
根据Go 泛型提案的描述,Go不支持泛型方法:No parameterized methods。主要原因Go泛型的处理是在编译的时候实现的,泛型方法在编译的时候,如果没有上下文的分析推断,很难判断泛型方案该如何实例化,甚至判断不了,导致目前(Go 1.18)Go实现中不支持泛型方案。

不过,泛型方法的缺失,多多少少给程序员带来一丝丝的忧伤的情绪,在一些场景之下,使用起来特别不方便。我最近看到了几个因为缺乏泛型方法导致的问题,在本文中总结一下,和大家探讨。
by @技术头条 2022-05-06 23:15 分享 查看详情
一个Go语言实现的数据库 (mp.weixin.qq.com)
rosedb 是一个稳定、高性能、快速、内嵌的 k-v 数据库,支持多种数据结构,包含 String、List、Hash、Set、Sorted Set,接口名称风格和 Redis 类似。

rosedb 数据文件布局基于 LSM Tree 和 WAL,纯 Golang 实现,易于使用、扩展。我们的愿景是打造一个高效的 k-v 存储引擎,你可以给我们提任何建议,也请给我们一个 start ✨ 吧,非常感谢!
by @code小生 2022-03-27 23:42 分享 查看详情
推荐一本免费的Go书籍! (mp.weixin.qq.com)
相信你一定见过一些难以维护的复杂软件,这些软件往往是决定一个初创企业是否能够成功的关键,但没有人愿意去碰它,为了避免出现这样的软件,开发者们开始学习领域驱动设计先关的书籍,阅读有关清洁架构的博客,并观看有关CQRS和事件驱动编程的演讲。
by @code小生 2022-03-13 23:29 分享 查看详情
谷歌 Android 12 Go 正式发布! (mp.weixin.qq.com)
12 月 15 日,谷歌发布了适用于小型或廉价智能手机的 Android 12 Go 版本操作系统。全新登场的 Android 12 Go 版本更流畅、更省电、更安全。
by @code小生 2021-12-19 19:46 分享 查看详情
Go语言将成为恶意软件开发者的首选 (mp.weixin.qq.com)
自从 2012 年发现了第一个使用 Go 语言编写的恶意软件之后,Go 语言就在恶意软件领域渐渐流行起来了。2019 年 7 月,Palo Alto Networks 发布了一份使用 Go 语言编写的恶意软件分析报告。报告发现,2019 年以前使用 Go 语言编写恶意软件是一件罕见的事情,但到了 2019 年,这种情况每天都会发生,2017 年到 2019 年,基于 Go 语言的恶意软件的样本数量增加 1944%。在这些恶意软件中,92% 是针对 Windows,4.5 是针对 Linux,3.5% 是针对 macOS。
by @code小生 2021-09-20 11:15 分享 查看详情
私有化仓库的 GO 模块使用实践 (zhuanlan.zhihu.com)
GO 在 1.11 版本开始引入 Module 的特性;1.13 版本引入 Module 校验和检查,加强了 Module 的安全性;现在的 1.16 版本已经默认使用 Module 模式。日前 GO 团队在博客上表明,将在 1.17 版本时删除对 GOPATH 的支持……
by @又拍云 2021-07-02 14:28 分享 查看详情
开箱即用的微服务框架 Go-zero(进阶篇) (zhuanlan.zhihu.com)
本文以 blog 的网站后台为例,着重介绍一下如何使用 Go-zero 开发 blog 的用户模块。

用户模块是后台管理系统常见的模块,它的功能大家也非常熟悉。管理用户涉及到前端操作,用户信息持久化又离不开数据库。所以用户模块可谓是 "麻雀虽小五脏俱全"。本文将详细介绍一下如何使用 go-zero 完成用户模块功能,如:用户登录、添加用户、删除用户、修改用户、查询用户 等
by @又拍云 2021-06-30 10:37 分享 查看详情
go-zero:开箱即用的微服务框架 (zhuanlan.zhihu.com)
go-zero 在设计时遵循了 “工具大于约定和文档” 的理念,所以 go-zero 包含极简的 API 定义和生成工具 goctl,可以根据定义的 API 文件一键生成 Go、iOS、Android、Kotlin、Dart、TypeScript、JavaScript 代码,并可直接运行。
by @又拍云 2021-06-29 14:16 分享 查看详情