腾讯teg云架构平台-后台一面
昨晚看雷军的十周年演讲就没有及时整理,所以到今天可能有些忘了,记录的不够完整。顺便说一句,小米牛逼,永远相信美好的事情即将发生!
网络
- tcp三次握手说一下
- 如果第三次握手的ack丢失会怎样
- 你刚刚说第二次握手服务端会将连接放到半连接队列,那你知道SYN攻击吗,怎么解决
- 你说的SYN cookie具体说一下
- 那SYN cookie从代码的角度怎么去设置打开这个选项知道吗(这个确实不知道……)
- 那在linux上是怎么去查看tcp的状态的,如果被SYN泛洪攻击了状态会怎样
- 客户端第一次握手时可以顺便携带数据吗
- 第一次不行那如果是第三次呢,可以带数据吗
这里插个话,不得不说腾讯对基础考得很深入,这里推荐一篇关于三次握手和四次挥手的博客,写的很好,说实话要不是看过这篇博客我这几个问题可能就答不好了---https://juejin.im/post/6844903958624878606
- http和https有了解吗,他们有什么不同
- https的加密过程知道吗
- 如果有个网站,你会怎么选择使用http还是https
(这里我感觉没答好)我就只是答了如果涉及隐私的,例如密码那就用https更安全,如果只是新闻类网站不需要登录也没有隐私可言就http更快,但是事后想想其实https还可以做网站本身的验证,例如可以解决钓鱼网站等问题 - 知道http的长连接和短连接吗
- 那有个网页,你会怎么选择使用短连接还是长连接
c++
- c++里面的const知道吗
- 那底层是怎么保证const变量不会被改变的呢(我说难道不是编译时就能发现语法错误了吗)
- 好,那如果让你来做编译器,你会怎么去处理const呢(不知道了……)
- 参数传递时的按值传递、按指针传递、按引用传递说一下
- 按指针传递的情况,我在函数内部对这个指针改变他的指向,会对外面的变量有影响吗(不会影响,按指针其实是指针复制了一份)
- 如果要在函数中改变外部变量,你一般使用指针还是引用
- (接上一问)有没有什么场景是指针能办到而引用不行的(不知道……)
- c++里面的智能指针说一说
- (我刚说完share_ptr)那share_ptr是怎么实现的
- share_ptr的使用会有什么问题吗(说了循环引用)
- 解决方法呢(weak_ptr)
- 智能指针是线程安全的吗(这里有点懵,我记得不是线程安全的,但是没理解透,导致下一题错了)
- 为什么不是线程安全的(答:比如引用计数的加减被多线程竞争读写的话计算结果会错)
其实这里是答错了,引用计数本身是安全且无锁的(原子性的),但对象的读写则不是,参考这篇博客https://blog.csdn.net/D_Guco/article/details/80155323
数据库
- 数据库了解多吗
- mysql的存储引擎是什么
- 索引的数据结构是什么
- B+树和B树的区别
- 查找时B树和B+树的时间复杂度(难道不都是log吗)
- 那有没有什么情况用B树更好,一定要无脑用B+树吗(这个确实不懂)
- 那如果我insert一条记录,mysql会怎么储存这个数据知道吗(由于数据库不熟,想了一会怎么说,结果没等我说呢,他说没事,那我们做一道题)
编程题
数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字,否则返回0。比如长度为9的数组{1,2,3,2,2,2,5,4,2},数组中2出现了5次,超过数组长度的一半,因此输出2
我没能想出最好方法,就说了两种,一种是用unordered_map计数(O(n)),另一种是排序后对中间元素计数(O(logn))。实在没想到更好的,他就叫我实现这两种。不过我快排还没写完呢,就说时间到了要不先这样。