首页
AI Coding
NEW
沸点
课程
直播
活动
AI刷题
APP
插件
搜索历史
清空
创作者中心
写文章
发沸点
写笔记
写代码
草稿箱
创作灵感
查看更多
会员
登录
注册
游戏人间的NPC
掘友等级
获得徽章 0
动态
文章
专栏
沸点
收藏集
关注
作品
赞
16
文章 16
沸点 0
赞
16
返回
|
搜索文章
最新
热门
全面了解 DNS 与 DoH/DoT | 创作者训练营
权威 NS 记录:域名服务器记录,用来指定该域名由哪个 DNS 服务器来进行解析。若不指定,默认一般由注册商的 DNS 服务器提供免费的域名解析服务 上图就是我们非常熟悉的互联网域名解析流程,客户端会到本地 DNS 服务器递归查询出记录结果,而本地 DNS 服务器的缓存中没有相…
深入浅出 Go - sync/atomic 源码分析
对于并发操作,原子操作 (不可异常/中断的一系列操作) 是一个绕不开的话题,典型的就是 i++ 问题,并发场景下,有多个 CPU 并发执行 i++,原本只想执行一次,实际上变成执行多次,这就涉及到我们今天要聊的 sync/atomic 了。常见的原子操作有。常见的原子操作有 早…
hashmap 是如何炼成的
hashmap 是程序员日常使用频率比较高的数据结构之一,是一种 key-value 结构,它最大的特点是查找的时间复杂度为 O(1)。那么它的底层原理是如何实现的呢?今天我们通过这篇文章来了解下 hash 映射就是通过 hash 函数确定 key 与 index 的映射关系。…
沉默的性能杀手 - false sharing
一般在做性能优化时,我们往往着眼于代码层面,很少关注硬件层面。这篇文章的主题是 false sharing (伪共享),在介绍 false sharing 前,我们首先需要了解下什么是 CPU Cache 计算机存储器是分层次的,离 CPU 越近的存储器速度越快,每字节的成本越…
深入浅出 Go - sync.Pool 源码分析
在开发过程中我们可能需要用到对象。一般的做法是在函数中进行实例化对象,使用完后交给 GC 处理,但是这种方式在高并发场景下会导致 GC 时间过长,进而影响系统性能。这也就牵扯到我们今天要讲的 sync.Pool sync.Pool 起到了临时对象池的作用,避免频繁实例化临时对象…
尾调用与尾递归
我们知道,函数调用的时候在内存会生成一条调用记录,我们称它为调用桢 (call frame),保存着函数地址和局部变量等信息。如果函数 A 的内部调用了函数 B,那么在调用记录 A 的上方会 PUSH 调用记录 B,当函数 B 执行完成后会 POP 调用记录 B,这听起来其实就…
LeetCode 热题 - 递归
递归其实就是函数调用自身,它的作用是将一个大规模问题缩小规模,转换为子问题,将看似复杂的问题变得简洁和易于理解。这里首先给出一套递归的解题模板,如下 斐波那契数是非常经典的递归题,这里我们通过斐波那契数来加深下对递归的理解,题目地址为 Fibonacci Number。首先通过…
深入浅出 Go - sync.Map 源码分析
Go 的 map 在并发场景下,只读是线程安全的,读写则是线程不安全的。Go1.9 提供了并发安全的 sync.Map,通过阅读源码我们知道 snyc.Map 通过读写分离的机制,降低了锁的粒度,以此来提高并发性能 Delete 采用的是延迟删除的机制,首先会到 read 查找…
深入浅出 Go - sync.Once 源码分析
比较 done 是否等于 0,为什么有的地方用的是 atomic.LoadUint32,有的地方用的却是 o.done。主要原因是 atomic.LoadUint32 可以保证原子读取到 done 值,是并发安全的,而在 doSlow 中,已经加锁了,那么临界区就是并发安全的,…
个人成就
文章被点赞
17
文章被阅读
8,497
掘力值
337
关注了
52
关注者
12
收藏集
1
关注标签
6
加入于
2016-09-06