字节跳动影像团队实习面经

目录

一面

12-10 16:00 - 17:00

  • 自我介绍

  • 讲一下你觉得挑战最大的项目

    我讲了一个数据库的项目,语言组织的不是很好,后面还得多练练

  • 既然讲到数据库,那你知道数据库索引是用的什么结构吗

    b+树

  • b+树相对于其它的树有什么优势

  • 堆和栈概念

  • 堆和栈性能上的区别,地址生成的方向

    这个当时蒙了有一会,想起来微机原理课上讲过栈的原理是向低地址扩展的,应该后面的CPU都是这样的吧,但是堆我还真不太了解。

    栈:在Windows下,栈是向低地址扩展的数据结构,是一块连续的内存的区域。这句话的意 思是栈顶的地址和栈的最大容量是系统预先规定好的,在WINDOWS下,栈的大小是2M(也有的说是1M,总之是一个编译时就确定的常数),如果申请的空间超过栈的剩余空间时,将 提示overflow。因此,能从栈获得的空间较小。 堆:堆是向高地址扩展的数据结构,是不连续的内存区域。这是由于系统是用链表来存储 的空闲内存地址的,自然是不连续的,而链表的遍历方向是由低地址向高地址。堆的大小 受限于计算机系统中有效的虚拟内存。由此可见,堆获得的空间比较灵活,也比较大。

  • 虚拟内存了解吗?

  • 虚拟内存有什么好处

    当时只说了扩展可用内存大小,面试官跟我解释说还起到了一个保护数据安全的作用,涨知识了,这块还得多学习

  • 进程和线程的区别

  • 线程有没有单独的堆和栈空间

    这个没答好,现在查了一下才知道线程可以分配到独立的栈,但是堆是共享的

    不同的线程有不同的stack栈空间,以及共享的heap堆空间。每个线程确实可以new一片新的内存空间在堆里面,这种方法被称为Thread Local Storage (TLS),但是某一个线程建立的heap空间别的线程也是可以访问的。比如某一个线程使用 Object* o = new Object() 新建一个对象,这个对象是在heap中,而指针o是在stack中,只要这个线程把指针o的值发给别的线程,然后别的线程用另一个指针p来接收,那么别的线程依然能够访问这个线程new的对象,这就是共享heap空间的解释。

  • 死锁了解吗

  • 说说数组和链表

  • 效率上面的差别

    一开始我只是很笼统地说了一下,在面试官提示下我才知道要分查找、插入、删除情况来说

  • 说说你了解的排序算法还有它们的复杂度

  • 那讲讲快速排序的过程

  • 哈希碰撞了解吗

  • 那怎么解决哈希碰撞的问题

    真不知道,随口扯了个二次哈希。。。

  • 找出数组中第 k 大元素的位置

    一开始没听清,还以为是求第 k 大元素值,直接优先队列。面试官又说了一遍题目才反应过来是求位置,加个哈希表存原始位置再放进优先队列搞定。面试官也被我整乐了。然后他再问如果用快排的思想来做呢?想了一会大概给出了方案,就是判断基准数此时在数组中的位置,小于 k 就往右边搜索,大于 k 就往左边搜索

  • 那我们来聊聊计网吧?我们现在用的飞书面试走的是 UDP 还是 TCP?

  • 我看你简历上写了一个 TCP 的实现,可以讲讲吗?

    这个我也说的挺乱的,看来简历上的东西还是得多准备准备

  • 讲讲 TCP 的拥塞控制和流量控制?

  • 那来做个智力题吧,八个小球,里面有一个质量比较小的,用最小的次数找出这个球

    笑死,一开始自信满满跟他说小学奥数题,答了个三次,被问还有没有更好的办法,我直接懵了。大脑空白想了半天没想出来,面试官一提示第一次两边各放三个,瞬间就明白了。2333

  • 100 瓶药水,一瓶有毒,用最少的老鼠试出有毒的那瓶水

  • 剑指offer 11 找出旋转数组中最小值

  • 今天就差不多到这里,你有什么想问的吗

    我问了对我今天的面试有什么评价,面试官说还ok

    总体来说这次面试气氛还是挺轻松愉快的,就是自己还是太紧张了,算法题一个挺明显的错误看了半天没看出来,差点没撕过,属实不应该。还有就是一些语言组织的不是很好,还需要多加修炼啊


二面

12-14 20:00 - 21:00

一上来面试官问了问武汉的天气,然后就是经典自我介绍,我依稀听到他说我简历很牛逼??属实吓到我了。

  • c++ 指针和引用的区别

  • 引用在内存上的表现,引用可能会为空吗?

  • 函数参数里面 (int a) (int &a) 的区别

  • 左值引用和右值引用

  • 讲讲继承和多态

  • static_cast, 强制转换不一致的话会崩溃吗

  • 内联函数 inline,内存上是一份还是多份

  • C++ 编译过程和相应产物

  • 静态链接和动态链接,他们的好处

  • HTTPS 和 HTTP 的区别

  • SSL 层面上服务端和客户端的交互

  • 中间人截获密钥

  • 加密不安全所以需要通过数字证书,讲一下完整的过程

  • 最终加密的内容是对称加密还是非对称加密

  • 大概讲一下 DNS 协议

  • 子网掩码

  • 客户端和服务端在建立连接后,如果服务端突然挂掉了,会发生什么

  • 链表倒数第 k 个结点(口述)

  • 讲一下快排的思想,时间复杂度?

  • 画了一个二叉树,写出前中后序遍历还有层序遍历的字母顺序

  • rand5 求 rand7

  • 箱子里 100 个球,两个人轮流拿球,每次可以拿 1 到 5 个,确保自己一定要拿到第 100 个球,怎么个取法

  • 写代码,最长回文子串

    我用了状态压缩 dp,写了差不多 10 分钟过了,还好没像上一次那样犯傻

  • 今天就到这里,你有什么想问的吗

    能不能介绍一下部门? 影像应用工具相关

    部门只负责一个 app 吗? 不止一个,都做

    新人培养机制

    面试评价 还不错,C++ 底层原理还需要再加深

    这次面试还是比上次放松多了。面试官会根据你的回答继续往下扩展直到你不了解为止。面试官看我没学过操作系统基本也就没问。总的来说还是 C++ 的部分需要再补一补,继续加油⑧


三面

12-21 16:00 - 17:00

面试官简单介绍了一下自己,说要对前面的内容做一下补充问答,然后连自我介绍都省掉了,直接开始灵魂发问。

  • 实习的时间,对自己的期望

  • 聊项目,阿里数据库比赛

  • seda 异步事件框架,异步多线程并发优点

    异步事件我这里扯了半天,还是不太了解,估计是没答到点上,他直接跳下一个问题了

  • 编译原理,词法解析大致过程

  • 语法分析过程

  • 聊sql,group by 和 order by

  • 一个表没有主键,把重复的行删掉剩一行

  • C++,平常都用在哪

  • 左值和右值

  • C++ 为什么需要右值引用

  • 智能指针

  • shared_ptr 原理

  • 什么时候需要用到 weak_ptr

  • shared_ptr 引用计数

  • OOP 三大特性

  • C++ 多态怎么实现

  • 父子结构,父类析构函数声明成虚函数原因

  • 不声明成虚函数内存泄漏的是哪一部分

  • C++ 菱形继承带来什么问题

  • C++ 怎么解决这类问题(虚继承)

  • 怎么实现一个动态数组(vector)

  • 讲一个平衡查找树,AVL树就不讲了

  • STL 里的 map 为什么要用红黑树

  • b+ 树做了什么,为什么数据库要用 b+ 树

  • 工程上有没有什么了解,git 和 c++ build system

  • 手撕代码,二叉树到叶结点路径和等于目标值

  • 如果不用递归可以怎么做

心情有点低落,面完就知道自己差不多凉凉了,这面真的答得稀烂,听录音的时候都像在坐牢。面试官的气场着实有点强,第一个问题就差点把我干蒙了,再往后脑子越来越不清醒,答得连我自己都听不下去了。虽然代码题算是秒撕了,不过挂了还算是意料之中的事情。

怎么说呢,虽然这次面试安排的算是无心之举,和考试周撞了让我也没有很多时间来准备;不过还是能在一定程度上说明一些我学习上的问题的,也希望之后在实践中更多关注到底层的原理,做到知其然也要知其所以然吧

打赏一个呗

取消

感谢您的支持,我会继续努力的!

扫码支持
扫码支持
扫码打赏,你说多少就多少

打开支付宝扫一扫,即可进行扫码打赏哦