首页 > 腾讯 CSIG 22届实习一、二、三面(已 offer)
头像
糜杨
编辑于 2021-04-14 16:21
+ 关注

腾讯 CSIG 22届实习一、二、三面(已 offer)

一面(3.12,1h)

1.自我介绍

2.实习是自己找的还是学校找的(自己)

3.项目相关

  • 介绍项目
  • 介绍下令牌桶算法
  • 令牌桶算法和漏斗算法的区别
  • 如果令牌桶一秒放一个令牌,但是10秒才来一个请求,这样的话放令牌的那个线程就浪费了令牌资源,能不能来一个请求就放一个令牌?
    • 答:我觉得这样做违反了令牌桶的概念,如果此时一下来了10个请求呢,你那种做法满足不了我这个情况。(面试官说:我的意思是 每次去令牌桶取令牌的时候都去统计一下该生成多少个令牌,就能满足我的要求了。不过我觉得你这个答法答的还可以)

4.介绍下 GC 算法(八股文)

5.你了解 STW 吗(八股文)

  • STW 为什么要暂停所有应用线程
    • 如果并发执行的话会有浮动垃圾,而浮动垃圾会导致 Concurrent Mode Failure 异常

6.说下 HashMap(八股文)

  • 扩容为多大(两倍)
  • 为什么两倍(这样数组的大小永远都是2的幂次方,可以使用位运算代替取模运算,提高效率)
  • 1.8 以后有什么变化

7.TCP 三次握手四次挥手(八股文)

  • 为什么挥手要四次
  • 为什么要有 TIME_WAIT 状态
  • 说下快重传(这里没答好,忘记了)
  • 了解 TCP 的 no_delay 吗(不了解)

8.HTTP 状态码(八股文)

  • 被限流后返回什么状态码(返回 20X,蒙的)
  • 了解 429 吗(不了解)

9.浏览器输入 url 后发生了什么(八股文)

10.DNS 用的 TCP 还是 UDP(蒙了个 TCP。正确答案是:DNS占用53号端口,同时使用TCP和UDP协议。)

11.抓包 HTTPS 报文,里面有什么东西(密文)

  • 你能看到哪些内容(懵了,没有做过实验)
  • 你能看到域名吗(能看到。乱蒙的)
  • 为什么能看到(不能看到的话怎么请求响应(继续蒙))
  • 但是域名可以服务端解密啊,作为中间人的话能不能看到域名(应该看不到。蒙的)
  • 其实可以看得到。你为什么上不去 Google 就是这个原理(不懂)

被耍了一波,哭了。

12.访问 80 端口,然后重定向到 443 端口。假如在访问 80 端口的时候,被中间人劫持了,不给你重定向到 443         端口,直接返回 HTTP 报文。HTTPS 怎么解决这种情况(这里讨论了一下,要通过 CA 证书证明)

13.介绍最左前缀原则(八股文)

14.线上查询接口比较慢,怎么定位(先排查代码效率;再排查 SQL,看是否命中索引)

  • 如果没有命中索引,你该怎么加索引呢

15.主键为什么要自增(维护索引方便,直接往后插入,不需要往中间插)

  • 往中间插入有什么问题(索引节点会分裂,影响效率)

16.算法题:字符串删除掉连续的3个重复的字符。比如 "abbbc",返回"ac";"abbbaac",返回"c"

  • 说思路
  • 时间复杂度

17.有什么要问我的吗

  • 我有哪些需要加强的地方(代码写的不是很流畅,大体思路很清晰;基础还可以,但是深入的话还需要加强)

二面(3.16,2h)

腾讯会议面试

1.直接发来一套在线笔试题:基础知识选择题 + 算法题(二叉树非递归遍历、LRU、数组中重复的数字 ) + 简答题。花了一个小时

2.设计 hash 函数(取模,这样更加散列)

  • 初始大小设为多少(2 的整数次幂,这样可以使用位运算代替取模运算,提高效率。面试官好像不认可)

3.设计数据库表,一个老师可以教多个课程,一个课程只能被一个老师教,一个学生能选修多门课程,一个课程也能被多个学生选修。(一个 teacher 表,一个 course 表,course 有 teacher_id 的外键,一个 student 表,因为学生和课程是多对多,所以需要一个中间表维护关系)

4.name LIKE "张%" 会命中索引吗(会命中索引,因为是以张开头的,因为 B+ 树有序,所以可以根据张来进行查找)

  • name LIKE "%张%" 会命中吗(不会,因为不知道 "张" 前面还有什么字符,所以 B+ 树无法查找)
  • name LIKE "张%" age < 21,这种可以使用索引吗(可以啊,建立一个联合索引(name, age))

5.写个 SQL,查询选修语文课程且年龄小于 21 姓张的学生(一顿连表查,简简单单)

6.5.9 亿个 IP 地址,都为白名单,判断某个 IP 是否在该白名单中,内存管够(HashMap、布隆过滤器、桶排序,看在哪个桶的范围内,桶内二分查找)这个问题扯了好久,面试官一直问还有没有别的;如果白名单是动态的呢,怎么维护布隆过滤器。

7.二分查找和 HashMap 哪个比较省内存(二分查找)

  • 哪个更快(HashMap 更快,为 O(1);二分查找 O(logn))
  • 为什么二分比较省空间(因为二分查找使用数组;HashMap 用拉链法解决冲突,链表中会维护 next 指针)

8.用什么做主键比较好(自增主键比较好)

  • 用学号做主键可以吗(会有点问题,因为学号不是自增的)
  • 为什么自增的好(因为自增的话 B+ 树直接往后面插入就行了,不是自增的话会往中间插入,往中间插入有可能会分裂节点,增加开销)

9.有多个 IP 请求过来,如果某个 IP 超过了 10次调用/5秒,就限流。使用 MySQL/Redis 实现,使用内存来实现,分别给两个解决方案。(这里我扯了一大堆有的没的,耽误了很长时间。内存实现:一个 IP 对应一个令牌桶线程;面试官说这样大体是可以,但是会有内存限制,说勉强过吧。MySQL/Redis 我一直想不出来,面试官就说跳过)这道题花了 20 多分钟。


后面思考的几种思路:

内存实现:

  • 每个 IP 对应一个大小为 10 的循环队列,队列里面存储请求的时间。比如现在队列满了 10 个,第 11 个请求来了,就拿第 11 个请求的时间减去第一个请求的时间,如果小于等于 5 秒,就拒绝第 11 个请求,如果大于5秒,就删掉第一个请求,再把第11个请求加入循环队列。
  • 用个 HashMap 来存令牌,key 就是 ip,value 就是对应的令牌,每次放的时候就放所有 ip 的令牌,频率为 10次调用/5秒。
  • 滑动窗口,一个 ip 对应一个滑动窗口类

Redis 实现:

  • 使用 zset 实现滑动窗口,key 是 ip,value 是请求次数,score 是时间,可以使用 zrangebyscore  key  startScore  endScore 查看局部分数范围内的值,可以用来统计滑动窗口中的请求次数。

10.TCP 的 TIME_WAIT(八股文)

11.TCP 拥塞控制(八股文)

12.TCP 连接中怎么判断对面断开了(蒙了一个:会有异常)

13.介绍下项目

  • 你做了什么

14.使用 golang 有没有问题

15.什么时候可以实习(暑期)

16.你有什么想问的

  • 我问:我觉得我今天发挥的不太好,你对我有什么建议吗

答:没啥建议,我觉得你很急躁,第 9 道题回答的不是很好,数据库你还可以,毕竟做过项目的。

  • 我问:下一轮还是技术面吗

答:是的

  • 我问:有转正机会吗

答:暑期实习不错的话是可以转正的

  • 我问:是做产品,还是来一个项目就做一个项目

答:物联网开发平台产品迭代


面了两个小时,感觉被榨干。

三面(3.18,19min)

1.系统性能怎么改善(不会,乱扯一通。加机器、CPU转速更快)

2.TCP、UDP 区别(八股文)

3.TCP 为什么可靠(八股文)

4.SELECT、EPOLL 区别(八股文)

5.HTTP 协议说下(八股文)

6.MySQL 遇到过什么问题(说了下索引失效)

7.为什么学 Java(学校课程教了 Java,我就选择了 Java 这个方向,扯了下自学的过程)

8.能不能接收转 C++(我说语言只是工具,随便换)

9.什么时候来实习(暑期)


面试官直接说过了。

更多模拟面试

全部评论

(15) 回帖
加载中...
话题 回帖

推荐话题

相关热帖

近期热帖

近期精华帖

热门推荐