腾讯暑期实习-C++后台开发四轮回
腾讯暑期实习四轮回
先说个人情况,985本,科班,平平无奇的带三学生,没打过acm也没拿过奖;寒假花了两个月准备,该看的基本都看了唯独没看数据库。简历上项目只写了一个自己做的,按书的话c++只了解到《Effective C++》的程度,STL什么的只用过底层也没看过。
pcg
楼主的人生第一次面试,本来没想着第一个面腾讯的以为要笔试就投了,没想到投的当天就call我约面试
- 介绍项目
- 比单Reactor更高效的方式(主从Reactor)
- 不同链接,它的请求有多有少,怎么实现负载均衡
- 项目主要实现逻辑(之前没终结过说的有点乱)
- 有没有不用加锁的方式,是否知道无锁队列
- selcet、poll、epoll简要说出区别(没总结过,答了具体原理,面试官说是要一个点一个点那种的总结)
- 问用了ET还是LT
- 为什么用ET,ET为什么高效
- LT、ET应用场景
- 问项目服务器性能
- 原理提到了红黑树,问是否知道(说了下效率,和AVL对比了下)
- 是否有其他用到了红黑树(答map)。
- 是否知道STL六大组件(不知道)
- vector,reserve和resize区别、内存不足
- B树B+树区别
- 为什么mysql用B+树
- 什么是TCP粘包,如何解决(答了Http协议有Content-length问还有没有其他)
- 进程间通信方式有?哪种效率最高
- 什么是虚拟内存
- 进程线程切换的区别
- 线程独有什么?
- 线程间通信方式
- 算法题leetcode442,要求不能额外空间(没a出来,我是***)
- 反问(问了说是做存储之类的,还问我知不知道redis)
当天下午查挂了,桑心;总结下一是回答问题表述的不是很好,二是题没写出来
csig 一面
这面的面试官不错,不会的问题会引导你回答
- C++为什么析构函数要是虚的
- STL的map里面的元素是否有序
- 怎么定义自己的比较函数
- free(void* ptr)怎么正确释放指针(内存释放free函数如何知道内存大小_bdss58的专栏-CSDN博客)
- 前面这段地址被破坏了只怎么办(采取一定的校验措施确保这段地址即使被破坏也能被发现)
- linux怎么看CPU占用(top)
- top命令可以看到哪些信息
- linux进程和线程的区别
- time_wait的作用
- TCP怎么保证可靠交付
- 什么情况下会重传
- UDP的包大小有限制吗,最大是多少
- UDPheader中指明长度的字段占多少字节(因为我不知道大小所以问了)
- 是否知道Nagle算法
- 怎么关闭(答了改内核参数,追问还能设置socket的什么选项去关闭)
- 100万数据找top100(一开始答成了100亿,让我算100万INT有多大哈哈哈)
- 快排的划分是怎么样的
- 一个函数rand,生成1的概率是p,生成0的概率是1-p,怎么封装这个函数使得产生0、1的概率都一样(不会,引导我知道了怎么做:先后调用函数生成两个数,易知生成10、01的概率都是一样的,那么规定这两个一个为一一个为0即可,如果生成了11或者00那么再调用直到生成10/01为止)
- K个一组反转链表(leetcode hard,觉得能过很大程度是因为写出来了这道题,一定要好好学好算法做多点题啊)
面完没一会就显示过了
csig 二面
这面各种各样的烂,很多会的东西想不起来了
- 项目难点
- mmap、sendfile
- 为什么是零拷贝,具体实现(怎么从内核页缓存发送到网卡的,协议头具体在哪里添加)
- client与server建立tcp长连接,第一种情况服务器直接挂了,第二种情况服务器进程挂了,两种情况下client端会做出什么反应
- ping原理
- arp原理
- C++空类,编译器会为它默认生成哪些函数
- 为什么基类的构造函数要先于派生类
- 类成员何时初始化,初始化顺序
- 成员变量初始值是什么,比如int的初始值
- 反问
面完马上gg了
TEG 电话一面
记不得了,问的都是一些八股文和项目相关的一些技术吧,时长半个钟
TEG 二面
没太记,时间才20分钟
- 对数据库的了解
- 解释CRUD
- 了解什么数据库引擎
- 引擎之间有什么区别
- 职业规划
- 性格
- 告诉我要横向对比,择优录取,两三天会出结果
- 之前的面试表现如何
- 反问(技术栈主要go,数据库用的比较多)
- 转正情况(要看上头的指标,现在不知道)
- 我:我对操作系统、计网了解的比较多(面试官回答的大概意思是每个面试官都有各自的问法)
面完很难受,虽然没马上挂但是从技术栈看得出来我应该不太match,隔天接到pcg的电话约面试就知道自己挂了
PCG 一面
这面挺突然的吧,在电话里约了1h后腾讯会议面试,表现的话自己觉得不是很好,期间耳机还出问题听不见对面声音,挺难受的
- 什么时候可以开始实习,实习多久
- 指针和引用的区别
- 讲下c++里的map
- 讲下unoredered_map
- 两个各自在什么情况下用
- 讲下C++内存分布
- static变量和全局变量区别
- 一个局部变量的初值
- 讲下对mysql的了解,包括索引、引擎的一些实现都可以讲(直接吐血)
- b树和b+树区别
- 数据库表大小特别大怎么优化查询
- tcp三次握手、四次挥手
- time_wait持续多久
- 项目中有修改这个持续时间吗(没有,说了改了nagle以及原因)
- 查看进程命令
- 项目有什么比较花了心思的地方
- 讲讲超时管理
- 讲了两个算法题,口述思路:1、怎么判断链表有环;2、两个栈实现队列
- 给了两个leetcode题目的链接(lc1143、lc223),自己二选一,共享屏目直接打开做
- 反问
- 问:技术栈 答:有c++和golang
- 问:对数据库要求如何 答:对数据库没啥要求(淦,那怎么还问了),对c++的要求非常高,要支持大流量高并发的一些模型,总之技术挑战比较大。
这面也给了我个教训吧,问的东西相关的会的都说出来,不要只答一点点等面试官来问你,可能他觉得你答一点点不太会就不会接着问了
PCG 二面
这面是在一面当天面的,自我感觉表现尚可,面试官人也很好会引导你,下面问题的顺序只是大概的
- 项目目的,干嘛的。
- 项目有几个模块
- 项目用的什么触发
- epoll和select的区别
- 解释下LT和ET
- 为什么epoll能支持两个工作模式(不会)
- ET应用场景
- 解释项目里的定时器
- 进程和线程的区别
- 项目是怎么创建线程的
- 系统是怎么设计的(说明主要工作逻辑)
- 项目里面怎么往一个链接对应的socket写呢(这个问题很简单只是我一下子没明白他要问什么,大概就是问一个链接对象怎么对应到相应的socket)
- 三次握手过程
- 共享屏幕随便开个文档,写生产者消费者(就课本上的东西)
- 解释什么是排序稳定性
- 稳定排序有哪些
- 开IDE,写个类实现矩阵加减乘法和重载赋值操作符(一开始没想太多用了二维矩阵,后面在面试官引导下说出可以用一维数组)
- 为什么一维数组访问要比二维快
- 重载赋值操作符的函数为什么要返回reference
- 对实习地有什么要求吗
- 学院保研要求(楼主渣渣没资格保研)
- 几时能来实习,能实习多久(答7月去,能实习到过年)
- 反问
- 问:部门技术栈 答:c++、多线程、网络编程
- 问:对数据库要求 答:基本不太要求
- 问:有几轮面试 答:一般2-3
hr面
电话面的,不太记得了,就常规的hr面吧,隔了个周末就收到oc了
虽然现在已经拿到offer了,但也是只高兴了那么一下吧,考虑到自己可能7月才去实习然后腾讯的转正答辩8月底就完了,觉得自己实习的太晚了不太好转正,所以到时可能要面临一边实习一边秋招的情况,现在还是挺焦虑的。
c++的话除了基础的,推荐大家读下《Effective C++》和《深度探索C++对象模型》,os读下《Linux内核设计与实现》,计网读下《TCP/IP:卷一》。虽然拿了春招offer,但是我觉得自己该接着准备秋招了(哭了,找工作真难)
#实习##面经##C++工程师##腾讯#