golang 包是什么

golang 中的包包括源文件和其他报的目录
源文件有函数变量和类型都通过链接形式
improt package

golang 类型转换

显示转换
如 j := xxx 或 int(xx)

什么是Goruntine 如何停止

Goruntine 是一个函数或者是一个方法,通过使用关键字go 来同启动。
向Goruntine 发送一个信号通道来停止他。

如何在运行是检测变量

使用switch 检测变量

Go 两个接口存在的关系

如过2个接口有相同的方法列表,那么他们是等价的可以相互赋值。

Go同步锁有什么特点?作用是什么

当一个Goruntine 获得Mutex 后,其他Goruntine, 就只能等待除非释放该锁,RWmutex在读锁占用时会阻止写不会阻止读,写锁时会阻止写和读。

Go语言中channel 特点,需要注意什么?

如果给一个nil 的channel 发送数据会堵塞
如果给一个nil的channel 接收数据也会阻塞
给一个已经关闭的channel 发送数据会panic
一个已经关闭的channel 接收数据会返回0

channel 缓冲去有什么特点

无缓冲channel 是同步, 有缓冲是异步

golang new 和 make
new 创建一个类型的实例,返回指向实列的指针
new 函数分配空间
new函数传递的是个类型不是
返回值是指向这个新分配的地址的指针

make 作用于slice,map, chan的初始化

golang 值传递和地址传递
值传递会把参数的值复制一份放到对应的函数中
地址传递将变量本身传递到对用的函数中,在函数中可以对其修改

golang 切片扩容
新容量大于2倍的旧容量,最终申请就是新申请的容量
旧切片的长度小于1024 最终容量是以前的2 倍
大于等于1024增加原来的1/4

map的实现
map的扩容
map的查找

channel
channel的实现

mutex的状态
mutexLocked 锁定状态
mutexWoken 唤醒
mutexStarving 饥饿
waitersCount 等待上锁的个数

GMP
G:协程是用户级别的线程
M:内核线程的封装对应cpu的数量
P:用来调节G和M的关联关系可以通过GOMAXPROCS设置

GMP的调度过程
GMP work stealing
GMP hand off

协作式的抢占式调度
基于信号的抢占式调度
GMP阻塞情况

三色标记
写屏障
插入写屏障
删除写屏障
混合写屏障

GC 触发的时机
GC流程
GC优化