当前位置: 首页 > 面试经验 >

腾讯游戏安全暑期一面(非典型)

优质
小牛编辑
126浏览
2023-03-28

腾讯游戏安全暑期一面(非典型)

这份凉经参考意义不大,面试没有拷打计算机基础、mysql、redis等,也没有手撕代码
问题记录
1-2 自我介绍等
3. 你觉得c++和golang有什么差异和共同点
4. 有人说go是面向结构的开发语言,c++是面向对象的开发语言,你怎么看待这个说法?
5. 那在go中要实现多态,应该如何实现
6. interface它底层是怎么实现的?
7. 假如让你实现interface在语言层面的管理,你会如何实现呢?
8. 那这个(方法计数)要单独记录还是要跟新声明的类型绑定在一起?
9. 如果你的计数绑定在interface那块,小猫怎么能调到它的方法呢?
此处对该问题纠缠两分钟左右,面试官对我的回答不太满意
10. 如果你的类型是动物interface,它怎么能够调到小猫或者小狗类型里面去呢,是如何找到它的?
11. 介绍一下channel的底层实现
channel它包含一个指向hchan结构的指针,hchan中有几个我认为比较重要的字段,主要是互斥锁、缓冲区buf数组、等待接收数据的goroutine队列、等待写出数据的goroutine队列
12. channel协程通知的功能怎么实现的
(估计面试管指的是那两个goroutine等待队列)
13. 那等待的goroutine是什么时候开始运行呢?它会立即唤醒它吗?
它是先拷贝完再唤醒
14. 拷贝完后是立即唤醒吗?
等待接收的goroutine被拷贝数据过去后,会被放入goroutine全局队列中;然后如果有一个逻辑处理器P绑定在线程M上面,并且它们处于空转状态,此时会考虑从全局队列中拉取goroutine。那么这个时候goroutine会被唤醒执行
15. 为什么要引入这个P呢?
(后面在面试官的引导下,想到了GM模型没有P的本地队列,涉及到竞争问题)
因为在GM模型下,每个线程M都需要从全局队列中去互斥竞争,这点性能开销比较大;而引入P之后,有了P的本地队列,线程M可以直接从P本地队列中获取,没有的时候再去全局队列中拿;这一点和golang的内存管理很像,它们都是多级管理的方式(想把话题引到内存管理)
面试官仍然不打算放过,想让我就GMP的其他优势,说服它GMP确实好
16-26项目相关
27. 反问环节#腾讯面试#
 类似资料: