实习面经汇总:腾讯、阿里、字节
前言
楼主背景成都某双非末流本科,科班,大三上期从嵌入式转行学后端(嵌入式从入门到入土),目前腾讯、阿里已offer,许愿字节hr面、offer!!!
先在成都找了一家十几个人的小公司面试,被拒绝。一气之下投了几个大厂,面试都很顺利,所以人不逼一下自己都不知道自己还有这本事??
腾讯客户端 腾讯会议
3/30 20:00 一面 40 min深挖项目,投屏展示项目,找到自己觉得做起来比较困难的地方,进行展示说明。 30min
项目用到的设计模式,展示说明一下
有无windows开发经验 无
qt的信号与槽机制的优点与缺点(项目用到了qt)
项目里面是否用到了c++11 没有
c++11的新特性,move的作用,说一说
之前move说到了智能指针,说一下shared_ptr底层怎么实现的
堆、栈,说一下
算法:
转置链表
反问:
实习生进去大概做些什么样的东西? 简单开发
大概会用什么工具? vs qt 等等
用到什么语言? 主要是C++,其它语言相信你C++都会了,应该学得很快。
3/31 21:00 二面 35min
说一下项目难点,优点。15min
我们会议聊天的数据是怎么传输的
函数调用的栈过程
虚函数实现原理
类的内存分布规律,说了字节对齐、空类大小
操作系统如何管理内存
你说所有程序共享0-3G,是怎么实现互不干扰的
虚拟内存如何实现的
平时有没有遇到过内存崩溃的场景?怎么解决的?
有用过dump解决内存崩溃吗?回答了解但是没用过
dump是怎么实现地址与汇编代码的映射的?敷衍了一下
会些什么设计模式,说一说。 说了单例、观察者
qt 的 win32 项目创建的过程,细节
毕业以后怎么打算
就业地点有没有限制
反问:
base在哪? 北京、深圳都有,就成都没有
我需要改进的地方?项目经历、客户端开发要去了解win32如何构建
4/7 16:00 三面 30min
介绍项目、项目有些细节如何实现 12min
tcp为什么是三次握手
ddos攻击是如何攻击的?
ddos主要攻击tcp连接的哪个过程
qt用过哪些界面
qt一个list里面如果有几千个项,需要为每个项建立对象吗?
qt自定义控制需要实现哪些东西?
说说对qt信号与槽的理解
内存泄漏是怎么回事?
知道什么检测内存泄漏的的工具吗?valgrind
valgrind原理知道吗?
平时写c++用些什么工具
vscode有用过吗
如何打断点?知道哪些断点方式?条件断点、数据断点?
近期有在学什么东西?答shell脚本。问为什么学这个?
智力题:8个球,一个天平,有一个球要重一点,如何用最少的次数找出重的那一个?
专业排名前多少?哪些课程学得好?哪些学得不好,为什么?
近期做得非常不错的一件事?
自己性格怎么样?有什么需要改变的地方吗?
最快什么时候能来实习?
未来规划是什么?
反问:
base在哪?主要深圳,北京也有
我有哪些需要改进的地方?基础挺扎实,qt的底层需要了解
总结:腾讯面试很友好,但流程相对较慢,客户端岗位,不是非常喜欢,所以应该会拒绝。
阿里C++工程师 优酷
4/12 14:00 一面 57min虚表知道吗?深挖其实现细节:什么时候生成,如何生成,如何覆盖 。。。
锁了解吗?说了互斥说、读写锁、自旋锁。(面试官主要想听互斥与与自旋锁的区别)。
自旋锁与互斥锁各自的应用场景?
知道http协议吗?浏览器输入一个url发生了什么?
dns解析协议是什么层?基于udp还是tcp?http是什么层?tcp、udp是什么层?
http各种版本说一说?
如果使用的是http1.0,发送完毕后会怎么样?答关闭连接。又问:哪方发起关闭?关闭过程?为什么要TIME_WAIT?为什么要2MSL?
http中大文件如何传输的?答分包处理。又问:在tcp层面如何传输的?答了滑动窗口、缓冲区、拥塞控制。又问:拥塞控制说一说?
为什么要做这个项目?
项目里面buffer如何实现的?可以如何改进?环形缓冲区如何实现?为什么当时没有这样改进?
buffer是单线程的吧?如何实现多线程控制?如何不加锁多线程控制?cas了解吗?全称是什么?如何实现的?答了乐观锁的思想,最后面试官好像不大满意。
mysql了解吗?binlog、redolog是做什么的?早期没有innodb的时候还有什么引擎?innodb与myisam的区别?(八股文背到一半被中断施法-_-)
mysql如何组织文件?答索引。又问:索引数据结构?B+树的优点?(答到磁盘io就终止,他想了解这个)
打开一个文件如何读入数据?扯到了DMA,又问:DMA是什么?需要cpu干预吗?读取开始和结束时会通知内核吗?如何通知?(中断)
上面不小心扯到了磁盘调试算法(嘴贱,还没复习到这来),又问:说一说你了解的磁盘调试算法?磁盘读取时如何索引到文件位置?
另一个项目是课程设计吗?项目里面的哈夫曼算法是如何实现的 ?哈夫曼算法的特点?
图了解吗?最短路径算法如何实现?说了Dijkstra,又问:还有其它算法吗?Dijkstra复杂度如何?现在还能写出来吗?说一说Dijkstra如何选取的?
stl里面的vector用过吗?vector删除一个迭代器指向的元素后,会发生什么?答后面的迭代器失效
设计模式了解哪些?说一说单例模式?说了半天,不小心说到了因为指令重排导致双检查锁也有问题。又问:指令重排主要是哪三条指令?(申请空间、构造、指针赋值)。双检查锁的论文看过吗?开始忘了指针赋值这一步。面试官一直引导这个过程,试图让我记起,最后终于是记起来了。又问:指令重排如何导致它出现问题?
发链接做题:
char* itoa(int v, char * str, int base); 开始不是写的base,而是f,让我猜是想干什么。。猜到了。
十进制转base进制,存入字符串。很多细节没考虑到,基本是指导一下改一下
一、十进制以后的abcdef没考虑到
二、除法取余后,未将字符串反转
三、未考虑到负数
四、未考虑到负数 v = -v 过程的溢出问题
五、未考虑到负数时字符串的反转时的起始坐标
六、好像最后还有问题。。。。时间到了结束了
base:北京、上海,你填的意向是成都,能接受来北京上海这边吗?当然能接受
面试官部门是优酷的,主要做数据处理,难怪对数据部分问得这么多。
最后问有什么反问的,我说你已经说了。
这是面过最恐怖的一次面试,拿着简历,挨着问,问得非常非常细节,基本每一步都要深挖,基础一定要扎实啊。。。。
4/13 16:30 二面 22min 电话突击
项目难点说一说
OSI七层模型
哪些网络设备跑在网络层?
应用层跑了哪些协议?
说一说对DNS的理解,怎么运作?ip与域名的对应关系是谁写进去的?(运营商)
TCP和UDP有什么区别?
哪些服务用TCP,哪些服务用UDP?
普通文件压缩?音频文件压缩?视频文件压缩?(真的一点也不会,尬了半天)
对缓存了解多少?有哪些缓存淘汰算法?说一说。说了LRU的原理
浏览器输入一个url,发生了什么?
假设网址是https://,比普通http://多哪些步骤?直接背了一遍https握手过程
估计什么时候能来实习?
期望工作地点有要求吗?
总结:无三面,直通hr,总感觉去了转正概率低。感觉比较边缘化,很大可能去字节。
字节后端 技术中台
4/11 15:00 一面 57min介绍项目 2min
说一说对io多路复用的理解
说一下epoll、epoll的数据结构
浏览器输入url后发生了什么
mysql索引用的什么
说一说B+树的优点,和hash索引相比怎么样?
mysql聚集索引和非聚集索引的区别
进程和线程的区别
算法题,每道给20min:
1、一亿以内的中文转数字,如:五千四百三十万四千零二十一 ------> 54304021
2、leetcode 1143 最长公共子序列。写完后又问:如果要求公共子序列是什么,怎么写?(乱说了一通)
平时有写过ACM题吗?答只刷了leetcode
什么时候能来实习?
能实习多久?
4/20 14:00 二面 48min
操作系统页面转换算法有哪些?
说一说LRU如何实现,时间复杂度如何?
进程间的通信方式有哪些?你用过哪些?管道如何使用的?
linux的kill命令的做什么用的? 发送信号
linux如何查找进程? ps -aux | grep …
TCP四次挥手过程?服务器最后一个FIN怎么确定丢失了?定时器定时多久?
SYN泛洪攻击是如何攻击的?服务器如何防御?(TCP代理、TCP源探测)
哈希如何实现?冲突如何解决?扩容实现过程?旧数据如何搬移?
HTTP状态码:500、404、502、301
cookie和session是用来做什么的?有什么区别?用session是因为它相比cookie更安全吗?客户端会保存session吗?
HTTPS和HTTP有什么区别?说一说HTTPS握手的过程?密钥商量过程和数据传输过程分别用的哪种加密算法?对称密钥和非对称密钥谁更快?为什么用非对称密钥商量密钥?
mysql默认引擎是什么?
主键索引和非主键索引有什么区别?
事务的特性有哪些?
事务的持久性如何实现?redo log 和 bin log分别是什么?它们都是用来实现持久性的吗?如何用redo log来恢复?
事务的原子性如何实现?答undo log 。如何用它来实现原子性?
事务的一致性如何实现?答四种隔离级别。隔离级别不是隔离性里面的东西吗?答也能对一致性起作用。
redis了解过吗?没有,不能给自己挖坑。。。
算法题:
1、剑指offer 54 二叉树搜索树的第k大节点
2、leetcode 15 三数之和,a+b+c=0
可以实习多久?
来北京没问题吧?
4/21 11:00 三面 56min
挑一个最有技术含量的项目说一说 5min
有没有对项目进行过压测?怎么样?
epoll边缘触发和水平触发的区别?
项目的http报文解析过程?
epoll相比select、poll的优点?
epoll的底层是如何实现的?什么数据结构?
操作系统的多任务是如何实现的?
操作系统会为每个进程分配哪些资源?
时间片轮转的时候会做些什么?
虚拟内存为什么会被提出?是如何映射到物理地址的?
操作系统有多种存储结构,由速度从快到慢分别解释?缓存、内存、硬盘、外设
局部性原理具体是怎么样的?
日常用什么语言编程?C++
C++的vector是如何实现的?
智能指针为什么会被提出?说一说几种智能指针?
算法题:
一、算法题:一个队列,实现enque deque max,O(1)时间获取max,其它操作的时间复杂度尽可能的低。
//一开始想到了用两个队列,但是方法不对,后来自己又想到了用单调队列实现O(1)max
二、概率题:两人掷硬币,一人掷一次,正面向上的赢。先掷的人赢的概率是多少?
//2/3
三、情景题:长链接如何转成短链接。
//说了用进制转换的策略,面试官肯定了这个方法,最后提示还可以在服务端用映射表实现。
//又提到了转换后的链接是服务器回发找到的资源吗?还是什么?说了重定向
日常会在什么地方学习?
未来怎么样规划学习新东西?
redis了解吗?说只学了一丢丢,不敢给自己挖坑。
实习时间如何规划的?
有面试过哪些公司?有哪些有offer?
反问:
部门用什么样的技术栈?
主要go语言、、、、、、balabala
总结:字节的面试是比较难顶的,每轮至少两道算法题打底,好在运气不错。许愿hr面试!!许愿offer!
最后:如果不清楚自己该如何复习,如何准备的话,推荐大家也可以尝试一些专门的课程,比如牛客就有C++秋招集训营,基础知识和做项目都包括在内,能少走弯路,在更短时间内达到一个通过笔试和面试的水平。
------------------------------
2021/6/16 补充:字节流程走完了,但是offer审批没通过,到底什么原因也不好深究了,自行体会。最后去了阿里。