go channel close后读写
非阻塞读,panic写 nil的channel,无论收发都会阻塞
io多路复用,select/poll/epoll的区别
select原则上是通过遍历fd句柄,查找到可读的句柄,所以时间复杂度为O(N),epoll是将已经就绪的fd推送给应用层,所以时间复杂度为O(1) select由于数据结构原因支持的句柄最大值为1024/2048个,poll为链表型结构,句柄无最大值。 epoll存储fd为红黑树结构,fd就绪后存储在就绪链表中,调用回调函数唤醒epoll_wait https://blog.csdn.net/nanxiaotao/article/details/90612404
Linux进程调度原理
https://blog.csdn.net/zhoutaopower/article/details/86290196
进程间通信的方法
无名管道、有名管道、内核消息队列、共享内存、信号量、信号、socket
slice和array的区别
https://blog.csdn.net/u010918487/article/details/85490028
interface理解
是声明多个方法的集合,如果目标类型实现了接口中定义的所有方法,那么就视为实现了该接口
type iface struct {
tab *itab
data unsafe.Pointer
}
tab中包含三个字段,接口类型名称/接口方法集,实际对象类型,实际方法地址 只有当两个字段都为空时,才能和nil做判断
channel理解
type hchan struct {
dataqsiz uint
buf unsafe.Pointer
elemsize uint16
eletype *_type
}
https://mp.weixin.qq.com/s?__biz=MzUzMjk0ODI0OA==&mid=2247483766&idx=1&sn=eb605a64bed0b2066a12083f26fb04b6&chksm=faaa3501cdddbc177121ba14a6604743d5ea881ca8299d5609ac8eb9b6eca4f2a142ad5aabfd&token=1213124593&lang=zh_CN#rd
waitGroup理解
https://zhuanlan.zhihu.com/p/344973865
session存储
在分布式情况下session大都有两种存储策略,一种是通过hash将相同用户的请求打到同一台服务器上,这时只需要在当前机器上存储session就可以了;另外一种也可以设计一个session服务,专门存储用户session信息,或者直接使用缓存进行存储
map理解
https://studygolang.com/articles/14583 该文章的扩容触发条件有待还缺少了溢出桶的个数判断条件 在向 map 插入新 key 的时候,会进行条件检测,符合下面这 2 个 条件,就会触发扩容:
1 装载因子loadFactor := count / (2^B) 超过阈值,源码里定义的阈值是 6.5,此时会扩充一倍的bucket数量
2 overflow 的 bucket 数量过多:当 B 小于 15,overflow 的 bucket 数量超过 2^B;当 B >= 15,如果 overflow 的 bucket 数量超过 2^15,此时不会扩充Bucket,而是对原bucket做内存整理
|