2021腾讯暑期实习面经
TEG 一二面
一面 2021.03.12
3.10的上午接到第一次电话,但是在上课就挂了,打回去结果是AI
3.11下午还在摸鱼,然后又打过来了,问第二天下午3点有没有时间,然后冲了(
头一天接到电话没有问是什么部门的,面试开始的时候面试官自己介绍了一下是TEG的(我怎么还被广州捞了啊
首先是自我介绍
结束了之后开始问项目(整个面试过程都在问项目,一点算法都没问),项目是寒假赶工赶出来的俱乐部Web
- Web程序有用户鉴权吗(有,但是只针对管理员)
- 你的这个项目使用了Django,那么你知道Django的用户鉴权是怎么实现的你清楚吗(不清楚,没来得及看过)
- 怎么存储的用户信息,例如密码,怎么保证安全性,如果让你来设计保存,会怎么进行保存(哈希,加盐)
- 加盐的话使用的字符串都是同一个吗(在我构想的加盐方案中是这样)
- 加盐是为了防止什么(防止暴力跑彩虹表之类的)
- 你的项目里还使用了RSA,主要是用来干什么?(登录认证,balabalabala)
- 你使用公钥对用户信息进行加密,但是中间人截取不是也可以用来进行登录(不能,用户一旦登录成功服务器会销毁记录)
- 项目用的什么数据库(Postgresql)
- 以前用过什么数据库(mysql)
- 那我给你一个场景,你写一下sql语句(中间被我打断了,直接说自己对sql语句不熟悉,主要用的是Django里面封装的模型)
- 那么你对数据库比较深刻的是些什么(最近看的书里面,才看了三章,随便说了一下四种隔离和MVVC)
- ACID是什么,有了解吗(说了原子性、隔离性、一致性,然后一时忘了持久性)
- 说一下你使用的谷歌验证码是什么吧,还有你知道这个东西是什么吗(挑战应答,HMAC)
- 你们这个项目会有部署的过程吧,有没有自己进行部署(有,用docker搞了三个容器)
- 那么你的代码怎么传到服务器上(scp)
- 这里面还有爬虫是吧,能说一下使用爬虫的过程中遇到的困难吗(微信文章反爬,只能selenium渲染抓取,图片使用正则表达式获得链接进行下载保存)
- 你使用爬虫应该需要使用到浏览器内核吧,能说一下怎么把他放到容器里面吗(构建镜像的时候直接复制到对应位置)
- 三个容器怎么进行通信(使用选项进行连接,但是我忘了是啥选项(
docker-compose.yml
中的links
))
结束这部分之后问了我线程和进程的区别是什么(经 典 老 问),顺便问了下我觉得容器里面跑的后端是单进程还是多进程(我觉得是单进程)
然后到了下一个项目,是课设写的文件传输的东西(Camel-Server),顺着就开始问计网了
- 你能描述一下TCP的结束过程吗(四次挥手)
- 那么在挥手过程中会有一方timeout状态,你知道是哪一方吗(不知道)
- 说一下tcp和udp的区别(可靠和不可靠,是否建立连接)
- 什么情况下需要udp(视频传输服务,实时视频,例如我们现在这样)
- 你知道HTTP协议吗,还有HTTPS协议
- 经常使用的HTTP协议中的类型是哪些(POST\GET)
- 你有熟悉的HTTP头部中的键值对吗(没有)
- 能不能简单说一下HTTPS的实现(主要说了没有ssl证书的版本)
- 既然用户已经有了服务器的公钥为什么还要发送自己的公钥(因为服务器报文也需要加密(猜的),这里正要说证书版本的被打断了)
- 为什么需要证书(防止中间人进行攻击)
- 能不能说一下你第一个项目里面可能存在的风险问题(可能存在中间人攻击,但是需要保证一开始进行劫持,否则截获了登录信息也不能用于第二次的登录)
- 比如你现在是在宿舍,那么你觉得使用HTTPS协议的情况下,你觉得你们学校的网络管理员能够看到哪些信息(GET请求的url连接中携带的参数信息,其他的不太清楚)
小程序的项目问了一下我负责做了些什么,但是没有进行深入的问,问了一下有没有使用第三方服务器
然后开始问安全方面的问题,看到了专业(可是我网安技术真的不行)
- 有没有学习过一些网络攻击的技术,例入注入之类的(学过,但是不是特别清楚)
- 知不知道sql注入,简单说一下它的原理(没有进行字符串的校验直接放入sql导致的)
- 怎么防止sql注入(不太清楚,但是我觉得可以通过屏蔽一些语句符号来达到目的,例入#号)
- 但是例如你们填写的表格,就是需要填入#号,这种情况下怎么防止(不清楚)
结束,等看有没有二面通知了,我自己觉得挺慌的,然后最后觉得也还行,就是不知道面试官对我的印象咋样了(
说起来写了四个项目但是参加比赛的项目没有问,估计是面试官也不太懂区块链的东西吧hhhhh
已经尽量回忆了,如果还有忘了没写的会补充×
二面 2021.03.15
还是首先自我介绍
然后问了最近有没有做过什么web项目,然后就说了俱乐部的网站
面试官问是不是部署了,然后扔了链接过去
过了一会问是不是纯展示页面,没有登录鉴权之类的(有,只有后台)
- 怎么实现的(不清楚,这几天没有查到相关资料,但是大致知道是通过cookies之类的东西来实现)
- 用的什么数据库(postgresql)
- 有没有了解过mysql(有,最近在看《高性能mysql》)
- 那么目前的收获是什么(了解了索引,以及前面一些调试的东西但是没有来得及实现)
- 讲一下索引吧,以及一些应用的场景(应用的场景不太清楚,但是知道它的实现,balabalabala)
- 那么现在给定一个场景,要实现秒杀功能应该要怎么实现(口胡了加锁之类的,但是实在不知道具体实现啊)
- 换一个问法,你觉得需要考虑一些什么(高并发,登录的有效,安全性)
- 这几个点应该怎么实现(口胡了一堆,然后忘记怎么说的了)
- 对于高并发怎么处理(没怎么接触过,但是我觉得可能需要使用分布式的服务器之类的?)
- 有没有了解过一些Web的攻击(sql注入,xss)
- 那么对这两种的防范怎么做(sql实在不清楚,xss主要是检查用户输入)
- 怎么检查用户输入(不会)
- sql注入的原理知道吗(知道,balabalabala)
问完高并发就结束了,中间好像也没有问什么问题
- 你这边最早什么时候可以过来
- 大概能实习多久
- 技术栈是go,看你主要使用c++,排斥吗(不排斥,能学)
- 有什么需要问我的吗
然后问了部门是做什么的、自己这次表现怎么样、部门对算法的要求高不高
之前看到面试邮件里面写了会考察代码能力,然后看了一堆算法,结果一直都是问项目,自己像个小丑(不过也还好)
最后二面凉了,被wxg捞了,不知道能不能顺利一点(
WXG
一面 2021.03.19
这次没开视频,然后我还问了一下需不需要开视频(
常规自我介绍。。。
然后让我讲一下最近的项目(内心:?我不是都写到简历里面了吗
接着讲了一下俱乐部的展示网站
- 你这里面用了爬虫,能说一下怎么做的吗(说了一下selenium但是面试官没听清楚,我确实也念不清楚,就说了是python里面一个控制浏览器内核的包
- 你们这个为什么还需要爬取文章啊(答了一下因为俱乐部的活动原因,顺便还聊了一下腾讯俱乐部主要平常干啥。。
- 我看你的登录操作用了RSA,你知道RSA是怎么实现的吗(是非对称加密,反问了一下我需不需要讲完整的原理
- 这样吧,你告诉我它主要是基于什么问题来实现的(大整数难分解问题
- 你们网站的密码是怎么存储的(用了Django中的默认方法,应该是哈希+加盐的方法
- 你这个怎么保证的安全性,能说一下吗(公钥加密给服务器
- 但是服务器还是能知道用户的口令啊(这个没有考虑过,只考虑了不被第三方拦截
- 讲一下你上面这个区块链的项目吧(内心:?合着那边有简历还需要我来自己讲,然后随便讲了一下
- 那么这个存储的用处是什么(保证时间戳是正确的没有被篡改啊
- 你们这个是用什么语言(前端vue.js,后端Java
- Java里面有一个反射的概念,知道吗(后端不是我写的,平常使用C++,所以不太清楚
- 我看你可能接触前端比较多,能说一下HTTP和HTTPS的区别吗(一个加密一个非加密
- 那么HTTPS使用的是非对称还是对称(讲了非对称,然后面试官说不对,是使用非对称协商密钥然后使用对称密钥传输
- 协商认证是用了什么来实现清楚吗(证书
- 能讲一下证书的实现原理吗(讲不清楚,说了一下是客户端进行处理之后传给第三方进行验证
- 每一次都需要第三方验证?(不太清楚,面试官说本地会存储证书
这里记忆可能比较乱,在中间还问了数据库的
- 了解mysql吗(了解一点点
- 说一下事务型数据库的特性吧(ACID
- 现在给100亿条数据,怎么进行查询(这种情况需要建立索引吧
- 能讲一下有索引的数据结构吗(B树或者B+树
- 那么我们能不能通过哈希来进行查询(有哈希索引
- 现在通过哈希索引来进行范围查找,怎么实现(?哈希索引还能范围查找的,可以使用B+树和哈希索引进行组合索引吧
这里面试官的意思是说不同的索引方式有一定的优缺点,哈希索引的缺点在于不能进行范围查询
- 那么为什么不通过别的一些数据结构比如说数组来进行索引(太占用内存了,使用B+树的分页方式可以通过文件IO来进行数据的查找
然后是C++的部分
- 能说一下C++的特性吗(继承、封装、多态
- 多态是怎么实现的(使用虚表来进行实现,balabalabala
- 你提到了虚函数表,能讲一下虚函数表吗(然后又随便讲了一些虚函数表
- 虚函数表里面的函数指针是什么时候定下来的(编译的时候根据虚函数的声明顺序确定
- 在C++里面是每个对象有一个虚表还是每个类有一个虚表(即答:每一个对象
这里的表达有错了,其实想说的应该是每个对象有一个指向对应的类的虚表指针,然后面试官一直问我函数不是和对象没关系吗,搅了一会我才发现我表达的意思错了,虚表是每个类一份,但是每个对象指向其对应类的虚表
然后这个时候有另外两个面试官进来了,但是也没问问题就只是看着(慌得一笔
- 你用的C++比较多,那么知道智能指针吗(浅显的聊了一些
- C++11里面的move知道吗(不了解
- 除了这个你还知道哪些其他的新特性(lambda表达式和遍历方法
- 所以其实你对新的特性了解得不是很多对吧(是的,没怎么用到新特性
大概就是这样,然后让我打开屏幕共享写题(草,终于有一次写代码的面试了?
- 写一下最大公约数怎么求吧(用递归很快就写完了,啪的一下,很快啊
- 但是我的输入不保证大小怎么办(好说,再套一个函数
- 我现在有一个100级的台阶,每次可以走1阶或者2阶,怎么做(啪的一下一个动态规划也出来了啊,想了一下是不是可以用矩阵快速幂,然后当时有点慌了没有把正确的矩阵写出来,就觉得好像是没法优化的
- 那么如果有n阶的话,怎么办(100变成n,优化了一下空间,cnmd我怎么还是没有想到这个就是斐波拉契数列可以矩阵快速幂优化
- 如果n特别大的情况下怎么做(如果是超过long long表示范围的话需要取模,但是后面下来我才想起来面试官应该是想让我优化时间复杂度
- 现在有一个字符串,只有字母和空格,求一下最后一个单词的长度(用了一个标识然后遍历写完了
- 解释一下代码
最后还是经典环节,有没有什么需要反问的,没什么问的就只好问这个岗位是干什么的了,听了面试官的说明后还反问了一下是不是对数据库和分布式要求比较高
许愿二面(
好了又挂了,果然是我太菜了cnm
企业微信
一面 2021.03.26
首先自我介绍
一上来就给了一个小时写四个题: 二叉树的层序遍历 II、合并两个有序链表、滑动窗口最大值
最后一个是给定一个rand5的函数,通过这个函数得到rand3和rand7
前两个没什么太大的问题,第三个用优先队列水过去了,但是面试官说考虑一下只用队列能不能实现,当时没有想到双向队列,然后就没优化出来
最后一个算是脑筋急转弯吧,当时也没转出来,之前水群的时候看到hrdg面试有个类似的题目但是当时查了一下就忘了怎么做
做法就是使用两个rand5,算一下$(rand5() - 1) * 5 + rand5()$,然后不在范围内的就扔了,直到找到为止
然后那边有点吵,面试官提示了几次也没有听清楚,就直接开始问一些基础问题了
- C++里面有new函数,那么new和mallco的区别是什么(一个会构造,一个不会构造)
- 那么mallco开辟内存空间是在内核的哪个位置(当时想和new应该是不一样的,就猜了一个栈,实际上两个都是在堆上面申请的
- 有没有接触过一些高并发的应用场景(没有,内心:我平常我怎么接触到高并发场景啊。。
- 线程和进程的区别是什么
- 多线程之间进行同步的方式知道吗(互斥,加锁,通信管道
- 有没有用过hashmap这种结构(说在C++里面用过unordered_map和map,然后面试官提示前者实际上就是hashmap实现的
- 它们两者有什么区别(前面的是hashmap,后面的是红黑树
- 那么hashmap怎么解决冲突问题(还好前面看过一点,在冲突的时候建立类似于链表的结构
- 你简历里面写到了TCP,能说一下TCP和UDP的区别吗
- 那么能讲一下TCP和UDP的应用场景吗
- TCP既然实现可靠传输,那么知道怎么实现的吗(快速重传、ACK序号,这里其实是口胡的((((
- 能讲一下拥塞控制算法吗(具体算法名记不清了,把实现的流程讲了一遍
- 那么拥塞控制和流量控制的区别是什么(拥塞控制查找最大的发送窗口能有多大,而流量控制只是通过发送窗口进行控制
- 看你写了SSL,知道SSH协议吗(不太清楚,只是我项目用了OpenSSL进行RSA、AES加密
- 那么讲一下对称和非对称加密的区别
- 能说一下它们的安全性有什么区别吗(安全性我觉得没有什么区别吧,主要是加密效率的问题
- 那换个问法,它们的效率有什么区别(内心:这能叫换一个问法吗。。。。(非对称因为要进行多次乘法运算所以效率对称低
前面问的好像差不多这些,然后都差不多结束了,让我反问,就问这次面试有什么不足吗
面试官说最好补一补数据结构算法(听到这句我觉得我半截入土了,前面那些题确实一时没想起来优化方法),然后接触一些高并发的实现,然后到这里又问我接触过socket的东西
我说接触过,在项目里面用过,然后问了一个什么算法没听过,因为当时只是注重于应用
- 那么socket编程有哪些主要的api(创建结构体的构造、bind、listen和客户端的connect,然后关闭ACK延迟等待还有一个函数记不清了((((((草,忘了说accept和send
- 能讲一下TCP连接建立过程吗(就讲三次握手对嘛?
- 那么连接断开呢?(四次挥手吗?需要讲一下具体过程吗?
- 讲一下挥手过程吧(balabalabala,最后等待2MSL
- 为什么要等待2MSL(等待的时间没有收到多余的数据包就默认服务端收到了,所以关闭
- 就是一个TIME-WAIT的过程对吧(嗯,对
然后到这里才结束了,其他也没有什么问题能问面试官(因为才一面问人家做啥的有什么用啊呜呜呜呜呜
二面 2021.03.29
在马原第一节课接到的电话,然后看到是广州打过来的,有点奇怪,这里还是后面复盘才想清楚的
在三面结束之后和群友们水群的时候学长说leader都是在广州,所以面试是广州那边的电话很正常
所以说其实后面这两次面试都是企业微信的,只是官问的状态和实际的面试状态没有同步而已。。
打电话过来说是约代码复试,然后觉得有点奇怪我不是上次被WXG挂了吗,但是也没有详细问
到了下午还没发面试链接,然后傍晚6点过才又打电话问我有没有收到链接。。。
然后19:30进了面呗,等了10多分钟面试官一直没说话,还在群里吐槽了一下说腾讯的面试官还真守时间
实在觉得奇怪然后点了一下面呗里面的代码测试。。原来就是选了题等我自己做了对面看
第一个题还是合并两个有序链表(你们怎么这么喜欢这个题(((((
然后是一个进制题Excel表列序号,刚好之前水力扣的时候水了一下,不过没水过也能写
剩下的两个题是在排序二叉树中查找第五大的数
和给定一个字符串,使用逗号进行分割,每个数字的大小都小于1112,输出所有情况
都是毕竟常规的题,比较迷惑的是后面面试官打了电话说看不到代码,提交之后我就没有联系上面试官了。。。
在面呗里面等了一个多小时就关了,第二天进去看到面试官还在里面挂着
你们腾讯都不下班的吗
三面 2021.03.31
在早上突然收到的短信,直接给安排了下午下课之后
然后上来也是直接给两个题(感觉企业微信的都喜欢直接甩题过来?)
第一题:假设一个直播平台场景,给了直播间管理类LiveMrg
的定义,每个直播间有id和热度score,然后会调用函数add(int64_t _id, int64_t _score)
添加或修改直播间,以及函数delete
进行删除操作,还会调用一个函数查询当前热度最高的100个直播间,返回id和热度列表
这里一开始想了一下用set
,但是发现set不便于进行修改操作,后面就改成了map
,然后取最高的使用了一个优先队列,重载了一下比较函数,限制优先队列只能存在100个元素
第二题:有30w个员工,以及给定一个rand
函数会产生$[0, 65535]$之间的数,要求给30w员工进行一个抽奖,抽10w名,保证抽奖算法是公平的
这个题类似于一面的时候问的rand5()
生成rand3()
和rand7()
,在进制里面做一下手脚就可以,这里我看65535模5为0,所以选了5进制生成一个数,直到得到满足要求的数
但是在代码写完提交给面试官之后我发现这里其实可以改成一个$O(n)$的洗牌算法,我觉得随机算法可能会比较慢,不过保证概率一样其实也可以
插牌法
从前往后进行扫描,把当前位置的数据随机插入到前面数据的某个位置,然后把选取到的数据与当前数据进行交换,这个算法的时间复杂度和空间复杂度都是$O(n)$的
然后6点过面试官才打电话过来(这个时候我在撕泡面,幸好还没有开始泡
先问了我第一题是思路,然后给我说优先队列地方为什么每次都要push
和pop
,一开始没清楚他问的意思,后面提示了一下我才知道如果需要push
的元素比堆顶小的话就可以省去,减少时间开销
然后又问我map
是什么结构,可不可以考虑优化一下,才反应过来应该用unordered_map
来写,时间复杂度其实我还没看,但是比前者低,这个时候面试官就笑我说怎么一开始没有想到。。。后面讲了一下第二题的思路,然后就开始问简历了
- 我看你项目里面有信安大赛一等奖,能说一下这个项目吗(其实问的是前面的文件传输的课设,但是电话里听不清,所以这里我就讲区块链的项目了,面试官好像听的一愣一愣的
- 然后后面对面问了我才开始讲文件传输的那个课设
- 你是用什么加密的(RSA来进行密钥协商,然后ASE进行文件传输加密
- 协商协议是你自己想的吗,还是用了别人的(看了其他的协议然后自己也想了一些添加进去
- 那么有没有了解过D&¥&协议(这里重复了很多次我都没听清楚。。。我觉得他在说的是DH协议吧。。这里开始就信号不好了,然后出寝室讲
- TCP协议的三次握手什么(balabalabala,然后第三次是怎么样的突然忘了,就随便水了一下
- 你每次发送的seq都是随机的?(第一次发送给对方的都是随机选取的,ack是对方序列号+1
- 你怎么这个都讲不清楚,是不是计网课没有好好上,你是不是经常逃课啊(内心:草,电话里不好讲又听不清楚,不过之前讲的时候确实忽略了这些细节
- 虚拟内存是怎么实现的(这里开始xjb讲分页和段页还有寻址,没抓住重点
- 我知道,我是想问内存没有这么大,那么它是怎么实现的(哦哦哦哦哦,将不需要的页换出到外部的存储空间中
- 那么它的目的是什么(内心:你不是都说了是因为内存不够大吗
- 有没有什么想问我的(你们是上次微信那个组的吗,然后说是企业微信的,我:?,我还以为你们那边是成都这里的
- 不是,企业微信在成都和广州都有,你的意向城市是成都对吧(对,但是如果要去广州也没问题
然后面试官听到后面“没问题”三个字就以为我没有问题了。。。然后就结束了
总而言之企业微信后面的两次面试有点迷。。。然后晚上去实验课的时候官问状态变成了复试,实验完了回来变成了HR面(合着你们官问和实际的不统一
在写这里的时候收到了HR面的通知,但是是在明晚没时间啊草草草草草草草草草草草,只能选协调时间了(千万不要给我选在周五和字节的撞一起(((其实现在我想把字节的面试咕了,快挂我吧秋梨膏
希望我不会成为以前看到的面经里面的HR面挂了的人(
HR面 2021.04.01
没啥能写的,主要就是聊一下以前做的项目里面的一些分工,还有遇到的比较大的挑战
整个过程里面还是有点紧张的,在摄像头前面看不出来,其实背一直在抖(((