腾讯PCG暑期实习 - 后台开发(已拿offer,反馈牛客)
一面 - 2020/3/7 - 11:00 - 33分钟
1. 自我介绍
2. 介绍一下程序运行的项目
Django + Vue,巴拉巴拉。。。
3. 介绍一下我们都是升旗手的项目
flask,巴拉巴拉。。。
4. 为什么使用flask呢
轻
5. django和flask的区别
首先,flask比较轻量;其次,django自带ORM框架,而flask没有,扩展性更好。
6. 项目所有数据都是存在MySQL里面吗?有没有做一些缓存呢
没有
7. 项目访问量大概多少
几百人这样
8. 讲讲你对Mysql的了解
MySQL有两个主要的引擎Innodb和MyISAM。然后,Innodb的原理是B+树(这里傻了。。。B+树是MySQL索引的原理)。
你觉得Innodb整个是B+树吗?
应该是(自己挖的坑。。。自己还跳进去了。。)
你理解Innodb是个什么样的东西吗?
首先,他是一种储存引擎
对,它其实并不是一个单纯的B+树,它是一个引擎对吧?
嗯
那你说的B+树是用于哪方面的,你知道吗?
就数据存储和数据读取的时候(越说越不对。。。对数据库还是不够理解。。。)
你觉得如果在MySQL里面创建一个表,每一个数据都是用B+树存的吗?
应该是,应该是存在叶子结点上。
你知道索引吗?你能讲一下你对索引的理解吗?
(这里面试官已经在提醒我了,可我还是没有察觉。。。)索引就是为了方便找到那条记录,不可能去遍历整个数据表,这样效率太低了。B+树的话,也是遍历,但它是二叉树遍历,比数组形式的遍历要快很多。
你能讲一下B+树的结构吗?为什么速度更快一些?
首先,它是个二叉树(我人傻了。。。),搜索肯定快一点。然后,中间节点会存在很多索引,通过比较大小,就可以找到下一层。然后,直到叶子结点,叶子结点上就会储存相关的数据。
数据是存储在叶子结点,还是路径结点上呢?
应该是储存在叶子结点上,路径结点上只有索引。
你对Innodb或者MySQL的了解还有哪些?
(本来准备说事务的,但他又接着问了下一个问题,哎。。。)
9. 你有用过慢查询吗
没有
10. 假如你去写一个table,你会设计哪些字段呢
id字段,创建时间,删除时间这些。
11. 其实,我刚才想问你的是说,你在类型方面有没有使用过char或者varchar呢
varchar使用过
12. 你知道varchar跟char有什么区别知道吗
不太清楚
13. 你对Nginx的使用能讲一讲吗
当时是用flask来做反向代理,因为flask自带的服务器性能不太好,就通过Nginx反向代理指向flask。
是用Nginx指向多个flask实例吗?
不,就一个。
14. 你对Java比较熟悉还是对python比较熟悉
这两个都一般,我对C++比较熟悉(尴尬地笑了)。
15. 那你有哪些项目是用过C++的
只用来写过桌面程序。还有平时算法用的就是C和C++。
16. 你对Go也有使用吗
之前大二接的一个项目,后端就是用Go写的,当时是用的beego框架。
17. 能简单讲讲你对spring boot的使用吗
就把它当作后端框架吧,也用了一些像JDBCTemplate、fastjson之类的库,然后其它的用得也比较少。
18. 你觉得一个成熟的后端框架应该有哪些内容呢
日志处理吧,还有做一些请求转发。然后,像spring这样的话,还会有一些IoC、AOP那样的工作,方便你代码编写的。
(这里说得乱七八糟,没答到点。。。
19. 你在python里面有没有使用过协程
没有
20. 你了解线程和进程的区别吗
进程的话,有一个虚拟内存空间,然后线程共享这块内存空间。线程是由进程调用的,每个进程至少有一个线程。
21. 平时有使用过一些多线程编程的技术吗
没有
22. 通过系统调用去创建一个线程,需不需要进入内核
系统调用的话,必须经过内核。因为系统调用的话,必须跳到系统内核中去。
23. 能简单讲一下网络的技术模型吗
巴拉巴拉,五层协议模型
24. 你觉得TCP和UDP是在哪一层呢
运输层
25. 你能讲一下TCP和UDP的一个区别吗
首先,TCP有一个握手阶段,而UDP没有;其次,TCP是可靠数据传输,而UDP是不可靠。
26. TCP是怎么保证可靠传输的
接收方会返回确认号,如果发送方没有收到确认号,会进行重传。
27. 三次握手和四次挥手
巴拉巴拉
28. 为什么握手是三次,而挥手是四次
握手时,是客户端单方面发起请求的,巴拉巴拉。而挥手四次,是因为TCP是全双工的,假如一方终止了,另一方的数据还没发送完,就会产生错误。
29. 除了TCP和UDP,你还了解其它网络协议吗
应用层的协议都还算了解。
他说,不限制于应用层,只要是网络协议都行。
然后,我就讲了一下HTTP协议,一直讲到请求报文的格式内容、响应报文的格式内容。
30. 你知道有哪些常见的状态码吗
讲了一下1、2、3、4、5开头的状态码
31. 看到你的获奖证书中,有很多关于信息安全竞赛的,你能讲讲你对信息安全的理解吗
我在信息安全竞赛中主要负责二进制安全,对网络安全也了解一些,但不是我专攻的方向。
32. 能简单讲一讲二进制安全吗
栈溢出、格式化字符串、堆溢出
33. 你对HTTP安全有了解吗
比如sql注入。
那你能说说什么是sql注入吗?
(这里讲错了,就不列出来了。。。
那你觉得对sql注入的防范,是在SQL层,还是在MySQL层?
SQL层吧。
34. 你了解SSl吗
SSL,安全套接字。
嗯,对,能简单讲一下吗?
它主要用了一个非对称加密。在握手阶段,服务器会返回一个机构的证书,证书里面会有用机构私钥加密的服务器公钥。然后,用户使用机构公钥解密之后,就会拿到服务器的公钥。然后,用户再用服务器的公钥加密一个对称加密的密钥。之后,他们就用这个对称加密的密钥进行通信。
35. 你了解其它的网络攻击吗?比如XSS
XSS不太了解,我知道有一个网络攻击,叫跨站请求攻击(应该是跨站请求伪造攻击)。就用户在访问一个恶意网站的时候,恶意网站会用你原来网站的cookie去访问原来的网站,拿到访问权限。
你知道它是怎么获取到这个cookie的吗?
通过一个按钮之类的(这里瞎讲的)。
那假如没有这个按钮呢?开发人员没有留这个后门呢?
有可能是用户去访问一个恶意网站,然后恶意网站中,会有一个被伪装的访问原网站的链接,就会被拿到cookie。
36. 平时有使用过redis吗
没有深入过,就简单地安装尝试过。
37. 那你觉得redis跟MySQL的区别是什么呢
内存型数据,支持很多类型(最重要的忘记了,redis是非关系型数据库,而MySQL是关系型数据库。。。)
38. 那你了解过什么是微服务吗
不太了解
39. 你有没有什么问题想问我的
问了一下,这次面试表现怎么样
还不错,但在DB这一块还是得加强。
二面 - 2020/3/11 - 20:47 - 24分钟
1. 自我介绍
2. 选一个项目,讲一下其中遇到的重难点
讲了第一个项目。
3. MySQL索引的数据结构
B+树
为什么索引用B+树?
减少磁盘io次数。叶子节点,顺序遍历更方便。查找的时间复杂度低。
索引的效率是由什么决定的呢?
树的高度,和节点中数据个数。
4. 有一个一百亿个随机数,在其中找出最大的一百万个数
一百万大小的小顶堆。新来一个数,就与根结点比较,如果小则不要;如果大则替换,然后进行筛选。
你这个方法的时间复杂度是多少呢?
O(nlog一百万)
还有别的方法吗?
可以用排序。先根据内存大小,将一百亿个数分为若干文件,然后对这些文件分别进行快速排序。最后,对这些文件一部分一部分地进行多路归并排序,得到前一百万个则停止。
5. 排序算法中空间复杂度最小的是哪个算法
快速、选择、插入这些。(说错了,快速不是
6. 100G的数据,4G的内存,需要排序
归并排序,思路跟第4题第二种方法一样。
7. 说一下你参加的软件测试比赛
考查覆盖率,变异测试。
8. 那你是怎么提高覆盖率的呢
(其实比赛难在读程序。。。
等价划分、数据流图,软件测试知识有点忘了,后面单纯在瞎扯。。。
9. 工作还是读研
10. 有什么想问的
总结
3月16号接到offer call,17号收到offer。对比字节的,最终签了腾讯的offer,base深圳,PCG,具体部门还不清楚。
最初,其实并没打算投腾讯岗位,只在腾讯招聘官网上填了信息。然后,在二月底的时候,收到一个微信好友请求,备注是腾讯实习生招聘,说在简历库看到我的简历,问我是否考虑投递简历。我当时没想太多,就把简历发过去了。当天晚上,他打电话过来,跟我进行了20分钟左右的通话,问了一些简单的技术问题。结束后,说不是正式面,只是预先沟通。
再然后,就是收到了一面通知。一面感觉很差,数据库那部分简直在胡言乱语(学校大三下才学数据库。。。都是自己先看博客学了一些),面完感觉凉了,挺难受的。
结果,晚上收到二面面试官的微信好友请求,瞬间把我从抑郁的情绪中拽了出来。然后就是二面了,感觉比一面简单些,也只有20分钟。
本以为还有三面,却收到了HR面试电话,喜出望外。
总体感觉都不是太难,只有两面,也没写代码,可能是我运气太好了hh。不过听说腾讯实习生转正率不高,所以实习面试就可能相对简单一些吧。最后,感谢牛客网大佬们提供的面经。
#腾讯##实习##面经#