01
go 指针和内存分配详解
了解指针之前,先讲一下什么是变量。每当我们编写任何程序时,我们都需要在内存中存储一些数据/信息。数据存储在特定地址的存储器中。内存地址看起来像0xAFFFF
(这是内存地址的十六进制表示)。现在,要访问数据,我们需要知道存储它的地址。我们可以跟踪存储与程序相关的数据的所有内存地址。但想象一下,记住所有内存地址并使用它们访问数据会有非常困难。这就是为什么引入变量。变量是一种占位符,用于引用计算机的内存地址,可理解为内存地址的标签。
什么是指针?指针是存储另一个变量的内存地址的变量。所以指针也是一种变量,只不过它是一种特殊变量,它的值存放的是另一个变量的内存地址。
原文链接:
https://segmentfault.com/a/1190000017473672
原文二维码:
02
知乎推荐系统的实践及重构之路
那么基于以上优缺点,我们重构为什么选择 Golang ?
1、Golang 天然的优势,支持高并发并且占用资源相对较少。这个优势恰恰是推荐系统所需要的,推荐系统存在大量需要高并发的场景,比如多路召回,特征计算等等。
2、知乎内部基础组件的 Golang 版生态比较完善。目前我们知乎内部对于 Golang 的使用越来越积极,大量基础组件都已经 Golang 化,包括基础监控组件等等,这也是我们选择 Golang 的重要原因。
但我需要强调一点,语言的选择不是只有唯一答案的,这是跟公司技术和业务场景结合的选择。
原文链接:
https://zhuanlan.zhihu.com/p/53130925
原文二维码:
03
go-runtime/debug 分析
程序包调试了包含程序在运行时进行调试功能,本节就针对 api 进行一一讲解
1.强制进行垃圾回收
2.设置垃圾回收的目标百分比
3.设置被单个 go 协程调用栈可使用的内存最大值
4.设置 go 程序可以使用的最大操作系统线程数
5.设置程序请求运行是只触发 panic,而不崩溃
6.垃圾收集信息的写入 stats 中
7.将内存分配堆和其中对象的描述写入文件中
8.获取 go 协程调用栈踪迹
9.将堆栈踪迹打印到标准错误
原文链接:
https://www.jianshu.com/p/0b3d11f7af57
原文二维码:
04
如何用 GO 语言编写缓存服务?
当我们决定要用 Go 语言编写一个缓存服务的时候,首先想到的就是 HTTP 服务。因为用 Go 语言写基于 HTTP 的缓存服务真的是太方便了,我们只需要一个 map 来保存数据,写一个 handler 负责处理请求,然后调用 http.ListenAndServe,最后用 go run 运行。一切就是这么简单,你不需要去考虑复杂的并发问题,也不需要自己设计一套网络协议,Go 语言的 HTTP 服务框架会帮你处理好底层的一切。
原文链接:
https://www.epubit.com/selfpublish/article/5105
原文二维码:
05
Golang TLS 双向身份认证 DoS 漏洞分析
如果程序源代码使用Go语言编写,并且用到了单向或者双向 TLS 认证,那么就容易受到 CPU 拒绝服务(DoS)攻击。Go 语言的 crypto/x509 标准库中的校验算法存在逻辑缺陷,攻击者可以精心构造输入数据,使校验算法在尝试验证客户端提供的 TLS 证书链时占用所有可用的 CPU 资源。为了保护正常服务,大家应立即升级到 G0 v1.10.6、v1.11.3或者更新版本。
原文链接:
https://www.anquanke.com/post/id/168383
原文二维码:
职位推荐:
【上海】七牛云招聘资深架构师
【深圳】明源云客招聘中高级 Golang 开发工程师
【上海】晓信科技招聘 Go工程师
点击 “阅读原文” 了解更多招聘详情