自我介绍一.channel底层原理?答:channel有几个重要的字段:1.buf指向底层的循环数组,只有设置为有缓存的channel才会有buf2.sendx和recvx分别指向底层循环数组的发送和接收元素位置的索引3.sendq和recvq分别表示发送数据的被阻塞的goroutine和读取数据的goroutine,两个都是双向链表结构4.sendq和recvq的结构为等待队列类型,sudog是goroutine的一种封装二.channel是如何发送数据的?答:1.首先看看recvq是否为空,如果不为空,直接从recvq队头取出一个goroutine,将数据发送过去,并唤醒goroutine2.如果recvq为空,则将数据放入到buffer中3.如果buffer满了则将goroutine放入sendq队列中,并将当前goroutine置为waiting状态三.golang中如何拼接字符串?哪种效率最高?答:1.在已有字符串数组的场合,使用 strings.Join() 能有比较好的性能2.在一些性能要求较高的场合,尽量使用 buffer.WriteString() 以获得更好的性能3.性能要求不太高的场合,直接使用运算符,代码更简短清晰,能获得比较好的可读性4.如果需要拼接的不仅仅是字符串,还有数字之类的其他需求的话,可以考虑 fmt.Sprintf()四.介绍下项目的主要内容?五.单点登陆怎么实现的?六.说说你对Elasticsearch的了解?七.说说平时是怎么优化程序性能的?八.说说对kafka和zookeeper的了解?九.项目中你是怎么使用kafka的?十.说说DevOps自动化工作流你是怎么搭建的?算法:一、判断链表是否有环?二、算法三数之和?