Go 学习方向
通过几次面试,来总结一些现在阶段,对于自己的职业规划的发展与思考!
经历了三四次面试,收获挺大的。面试不是目的,只是一种过程,要在不断的面试中,找到适合自己发展的领域才是面试的目的!
1、现阶段发展的方向
首先,Go 语言的云原生跟云中件发展是非常迅速的,而且 Go 语言社区中,讨论最多的也是云计算的发展,docker、K8S集群、普罗米修斯,都是云中件的代表,所以去学习其中设计的思想、源码的思想是非常重要的!
2、Go 面试
总结一下面试的问题:
1、数组与链表的区别(数据结构基础知识)
2、进程、线程、协程有什么区别 (操作系统的知识,加 Go 语言特有的协程)
3、Redis 与 MYSQL 熟悉吗,Redis 有哪几种数据结构,缓存过期(TTL 网络中的生存时间),Redis 一般使用在哪一些场景里面(针对热点数据进行缓存、限时数据缓存、热点权值数据进行缓存)
4、channel 有几种类型(自己回答是读、写、读写三种,不一定对,也可能chan int、string、byte)
5、控制 Goroutine 数量的几种方式(channel 控制,sync.WaitGroup 控制)
6、Go 语言调度模型:GMP 模型(hand off 机制没回答特别好)
7、Go 语言的 GC (标记清除法、三色标记法、混合写屏障机制)
8、Go GC 在什么时候会导致 GC 效率不高(STW 次数多的时候效率不高,毕竟依赖于 STW 机制)
9、TCP 的 CLOSE_WAIT 状态出现在那一步
10、slice 与 map 底层源码 (slice 底层为指针 Array 类型,Go 中的 map 是 slice + list 数组加链表,而 java 里面是最简单的是 数组, 规模达到一定程度转换为数组 + 链表或数组 + 红黑树的形式)
11、Go 语言的内存泄漏、内存逃逸问题 (内存逃逸就是栈上开辟空间存放的变量,逃逸到堆上去了,内存泄漏主要是看 OS 的环境, Linux 下使用 top/htop)
12、几道 Go 语言面试的题目:闭包传参、向空 slice append 数等
13、Go 语言如何 debug (自己回答是 采用单元测试的办法、pprof 等方式方法)
14、算法题目:三数之和,返回二维数组,二维数组内不能有重复值,即数组内元素相等
3、5 月 21 日温故而知新
1、Go 语言中协程出现了panic 的情况,有什么样的机制保证协程恢复并继续执行下去?
2、Go 语言中的调试信息使用什么查看?
3、Go 语言中的内存模型与内存回收机制
4、Go 与 Python 语言的协程对比有什么区别
5、Mysql 里面执行计划的概念(之前复盘都没有听出来这个问题,一个劲在说不知道)
6、redo-log、undo-log、bin-log 三个 log 文件的作用与区别,如何使用 redo 与 bin 两种日志去保证数据的一致性?
7、数据库出现过性能问题嘛,千万级数据量的表如何进行一个排查+ 处理
8、grom 操作数据库是如何操作的 ?
9、redis 中 AOF 与 RDB 两种快照日志主要是为了解决什么样的问题?
10、gin 框架的源码看过吗,里面路由具体的实现机制是怎样的
11、平时关注那样一些开源技术?