事情的开始,是11.15早上,接到了腾讯HR的电话,约了11-16晚上的面试。
毕竟腾讯是我在国内最喜欢的公司, 国内几个大厂里,阿里给我的感觉像个成熟大叔,什么都懂但是很无趣。字节跳动像个蛮劲很大的年轻人,只有腾讯给我的感觉是年轻自由且开放的。虽然还没有打算跳槽,但是我没法拒绝腾讯的第一次邀请.
接到面试后,整个人的状态就变了。变得紧张,兴奋,和担忧。后果是引发了情绪性胃炎,直到我码字的这一刻,胃仍然在隐隐作痛。患得患失是不行的.
说说跟面试相关的吧。
接到面试邀请后,之后收到HR发来的短信邀请码,在微信公众号腾讯招聘中需要用到这个邀请码确认接受面试。
面试方式是通过腾讯会议,记得升级你的腾讯会议,因为期间要用到一些功能可能在新版本才有.(比如打开外部插件IDE)
面试重点内容。
- 自我介绍
- 找你最熟悉的项目,讲一遍整体的架构,以及各种细节问题。
- redis的数据结构
- redis的集群用过吗,故障时的数据丢失怎么办,主节点故障怎么办。
- 为什么要用celery
- 为什么要用消息队列
- websocket相比http的特点,为什么要用websocket
- websocket是如何建立连接的
- golang的gc
- golang的channel,channel的操作和注意事项
- channel一定要关闭吗?
- 编程题 1个channel, 两个协程,一个读,一个写,打印1,5,4,3,2.
自我感觉
以高要求来说,如果满分100,我应该最多70,大致60分左右吧。主要有两个地方回答的有些问题,
1是redis的哨兵模式在主节点挂掉之后的新主节点选举没能确认是用到了raft算法。(只是提到了有可能是这个)
2是编程题我已经不知道怎么看待自己了. 这里详细说下我犯的错吧,加粗警示
一开始是腾讯会议版本不对,没法用IDR,面试官让我用聊天框输。我在聊天框里输入的东西简直惨不忍睹
chan的声明把关键字chan写成channel。 函数传参对chan使用了一个取指针符号,以及func(c chan int(5))这种我也看不懂的传参。。
特别是在争取到面试官同意使用本地IDE的时候,依然没有办法很好的去编写。最后只是口述了一下
主观当然可以为自己解释是因为最近都在写python相关的内容。一时没反应过来,但是客观评分会告诉你,you are fired。
面试完后,写了个能运行的解,就这样吧。下次继续努力。共勉
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
package main
import "sync"
var ch = make(chan int, 5)
var wg sync.WaitGroup
func writec(c chan int) {
for _, x := range []int{1, 3, 5, 4, 2} {
c <- x
}
wg.Done()
}
func readc(c chan int) {
var i int
Loop:
for {
select {
case i = <-c:
print(i)
if i == 2{
break Loop
}
}
}
wg.Done()
}
func main() {
wg.Add(2)
go writec(ch)
go readc(ch)
wg.Wait()
close(ch)
}
总结
- 不要患得患失
- 为喜欢的事情做好充足的准备
- 面试不要机械问答,多拓展.
- 手写编程要熟练