Go、golang、channel、sync、slice等面试问题

go的垃圾回收机制:1.8混合写屏障;runtime.GC主动垃圾回收

引用计数;
标记-清扫:三色标记算法
节点复制;
分代收集;

go的goroutine调度机制:调度器,GMP(src/runtime/runtime.h源码)

G代表一个goroutine对象,每次go调用的时候,都会创建一个G对象;
M代表一个线程,每次创建一个M的时候,都会有一个底层线程创建;所有的G任务,最终还是在M上执行;
P代表一个处理器,每一个运行的M都必须绑定一个P,就像线程必须在每一个CPU核上执行一样;
P的个数就是GOMAXPROCS(最大256),启动时是固定的,一般不修改;M的个数和P的个数不一定一样多(会有
休眠的M)(M最大10000);每个P保存着本地G任务队列,也有一个全局G任务队列;全局任务队列和各个本地G
任务队列按照一定策略相互交换(满了,则把本地队列的一半送给全局队列)

go语言能够适应高并发的原因;

详解slice与map数据结构;

Defer recover panic 执行顺序;

Chan select panic;

结构体绑定方法后的继承顺序;

protobuf

protobuf:二进制格式;message代表实体结构,由多个消息字段field组成;field消息字段:包括数据类型,字段名,字段规则,字段唯一标识,默认值;
message中嵌套数组:使用字段规则repeated标示为数据可以重复,相当于array或list;
定义.proto文件,命名proto文件packageName.MessageName.proto;
编译.proto文件为目标语言文件;
序列化与反序列化;

并发

sync:Mutex互斥锁;RWMutex RLock();Once once.Do();Cond,Pool,
channel

slice下标越界后的后果?

猜你喜欢

转载自blog.csdn.net/MENCO_/article/details/109157681