3/18 深信服实习二面面经[Golang](oc)
3/18 深信服实习二面面经[Golang]
一面一小时、二面一个半小时
自我介绍、项目介绍;
做题:
defer相关知识 的考察(读代码题)
树的子结构, leetcode 原题目,按照原题的要求写了,面试官说好像不是这样的,提了个新的要求,然后又按照新的要求重写了,最后代码没跑;
这次又忘记录音了,凭印象写一些:
-
Go 的 panic 和 recover 原理,panic 的是什么,;
-
panic 可以 被其他 recover 捕获吗;
-
map 的数据结构,及一些相关机制;
-
go map 线程安全吗;
-
说说线程安全的 map ,sync.map 和 cmap 的实现原理;
-
goroutine 的结构;
-
讲讲 gmp,分别讲讲 g m p(go 有什么特殊的办法防止 协程长期抢占一个 m);
-
goroutine 的 开销小,为什么小;
-
channel 的结构,同步与异步,同步的实现原理;
-
Go 的 gc,三色标记、插入写屏障、删除写屏障、混合写屏障(场景复杂,还真不太好讲清楚,就做了个简单概括),提问这几个发展的区别,混合写屏障还有 STW 吗?
-
了解哪些锁;
-
流量控制、拥塞控制;滑动窗口有几个,讲讲接收端和发送端等等等等一系列追问,记不起来了;
-
https;
-
四次挥手;四次挥手为什么要 time_wait,为什么是2 MSL;
-
了解 websocket 吗?
-
tcp 和 http 分别在哪一层,讲讲 why http;
-
有些 rpc 的实现,使用的是私有协议,为什么不用 http?
-
二进制和基于文本协议的区别,他们底层不应该都是二进制吗?
-
操作系统的僵尸进程与孤儿进程;
-
僵尸进程过多会怎样;
-
Linux 的文件系统;
-
Linux 的内存管理;
-
Linux 的进程调度机制;
-
死锁、死锁的产生条件;
-
MySQL 的 隔离级别与实现机制;
-
mvvc,怎么实现;
-
MySQL 的锁怎么实现;
-
几个日志;
-
索引、结构、区别、为什么;
-
事务是怎么实现的;
-
框架和库的区别;
-
gin 框架讲讲;
-
了解哪些 Nosql(redis、mongodb,后者只是用过一下);
-
docker 和 k8s;
-
pod deployment service 都讲讲;
-
为什么用 deployment 而不是直接声明 pod;
-
保活机制;
-
orm 了解多少
-
关于 k8s 还准备追问,一口气爆了几个我完全不懂的(我简历写的只是有一些搭建和使用的经验而已!!)
剩下应该还有不少,但是全程被面试官追着提问和引导思考,根本没什么余力去记住问了啥。。。
总结:
这次面试感觉特别难,不仅局限与我上面提到的问题,还会反复追问,引出思考;
面试官感觉特别厉害,懂得很多,也很耐心和善,会引导回答。
虽然不容易,但是是我认为收获最大的一次面试;自己还有特别特别多的不足;
再次十分感谢面试官为我浪费时间!