Tencent interview

Posted by Keal on November 16, 2021

事情的开始,是11.15早上,接到了腾讯HR的电话,约了11-16晚上的面试。

毕竟腾讯是我在国内最喜欢的公司, 国内几个大厂里,阿里给我的感觉像个成熟大叔,什么都懂但是很无趣。字节跳动像个蛮劲很大的年轻人,只有腾讯给我的感觉是年轻自由且开放的。虽然还没有打算跳槽,但是我没法拒绝腾讯的第一次邀请.

接到面试后,整个人的状态就变了。变得紧张,兴奋,和担忧。后果是引发了情绪性胃炎,直到我码字的这一刻,胃仍然在隐隐作痛。患得患失是不行的.

说说跟面试相关的吧。

接到面试邀请后,之后收到HR发来的短信邀请码,在微信公众号腾讯招聘中需要用到这个邀请码确认接受面试。

面试方式是通过腾讯会议,记得升级你的腾讯会议,因为期间要用到一些功能可能在新版本才有.(比如打开外部插件IDE)

面试重点内容。

  1. 自我介绍
  2. 找你最熟悉的项目,讲一遍整体的架构,以及各种细节问题。
  3. redis的数据结构
  4. redis的集群用过吗,故障时的数据丢失怎么办,主节点故障怎么办。
  5. 为什么要用celery
  6. 为什么要用消息队列
  7. websocket相比http的特点,为什么要用websocket
  8. websocket是如何建立连接的
  9. golang的gc
  10. golang的channel,channel的操作和注意事项
  11. channel一定要关闭吗?
  12. 编程题 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)

}

总结

  1. 不要患得患失
  2. 为喜欢的事情做好充足的准备
  3. 面试不要机械问答,多拓展.
  4. 手写编程要熟练