字节| C++ |面经|2021|
13598
2020.10.23
2020.10.24
发布于 湖北

btdc.png

目前大厂已经有些部门陆续开奖啦,讲一下面字节的过程

个人情况:
985 硕(科班),没论文(在学校是做算法相关的,论文投失败),没开发项目,本科有竞赛经历和奖项(ACM),准备了几个月 C++ 岗的内容。准备的内容包括:C++ primer,STL 源码剖析,计算机网络,Linux,OS,数据库,设计模式,还有就是 LeetCode 重点的刷题,剑指 offer 和自己看面经总结的一些常考的类型。(这些之前的有提到)

先说下字节的笔试题:

只能说 “算法性” 比较强
T1:
求一个字符串最小循环长度

输入:ababab    输出:2
输入:abcabc    输出:3
输入:abcabca   输出:0

题意大概是这样,样例是自己造的,因为不记得原题的具体数据了,大概是这样
数据有 这么大,当时我就没想着暴力了,用的 KMP,求 next 数组 用 len-next[len] 就是最小循环长度啦
结束后问了别人,发现 写的好点的暴力 也能过了~~~

T2:
实现一个简单的计算器,有加法,乘法和幂运算功能,结果对p取模
数据范围大概是 ~
这题主要的问题在于幂运算直接算肯定是超市啦,要用快速幂,不会的同学可以学学,比较简单(位运算+分治思想)
找了下力扣链接,372. 超级次方

T3:
二维邮局选址问题,距离是曼哈顿距离

把二维的拆分成两个一维,用前缀和维护答案(大概讲个思路,这题好像已经好多小伙伴跪了,不过暴力可以得一部分分啦)

T4:
具体题目大概是 树中节点分正面反面,把父亲节点翻转,那么相连子节点也需要翻转,求把树翻转为全为正面得最小次数
树形 DP,一个节点翻或者不翻的最小次数与它的父节点的状态相关,推出转移方程即可
会做简单的换根 DP,这题应该也可以推出来。想起来这题:834. 树中距离之和

总的来说,感觉字节的笔试题还是难的,每一题都有考察具体的算法,这次考察的东西有:字符串处理 KMP 快速幂 二分 前缀和 树形DP 对于开发岗校招来说感觉还是蛮有难度的,所以想冲字节的童鞋们,刷题 真 不能含糊了

下面讲下面试环节。

一面:

自我介绍

  1. 介绍 C++ 多态
  2. C++ 类对象的初始化顺序,有多重继承情况下的顺序
  3. 内联函数和宏,什么时候使用内联函数
  4. 虚函数
  5. 介绍网络 5 层模型,每一层都实现什么功能
  6. MAC 地址和 IP 地址分别有什么作用
  7. TCP 和 UDP 的区别
  8. TCP 的连接释放具体步骤
  9. 如果三次握手时候每次握手信息对方没收到会怎么样,简答
  10. 说几个设计模式
  11. 写单例模式
  12. 虚拟内存
  13. 进程通信的几种方式
  14. 撕代码
    LRU 三角形数组路径最大和

上来难度并不高 0.0 后面越来越难

二面:

自我介绍

  1. C++ 中 Map 底层数据结构
  2. B+ 树的分裂过程(哇,我忘了,没想到会问)
  3. AVL 和红黑树的差别
  4. 事务的特点
  5. 隔离级别
  6. 不可重复读如何实现
  7. 进程和线程
  8. 虚拟内存空间分为哪些部分,虚拟内存的好处,虚拟地址如何转为物理地址
  9. 线程的同步机制
  10. 用户态和内核态区别
  11. 没做过项目,有关注的开源项目/框架吗,讲讲。
  12. Redis 基本数据类型有哪些
  13. 手撕
    数据流中位数(用对顶堆实现)

有一种将字母编码成数字的方式:'a'->1, 'b'->2, ... , 'z'->26。现在给一串数字,返回有多少种可能的译码结果(如果想到 DP,就挺好推,Dp[i]:前i个数字的可能结果数,观察 Dp[i]Dp[i-1]Dp[i-2] 的关系)

没有项目,基础问题问了蛮多,简历上写的东西也都会深入的了解,在学校做的东西,打的比赛都会让你讲述一下。 这波手撕 难了一些,还好做过吧(差点没想起来 对顶堆,差点想用 set + 指针),感觉没做过的话就翻车了(有同学就碰到一些不会算法/姿势,跪了)

三面:

  1. 做的项目,遇到什么难点,如何解决的,有什么收获;感兴趣的知识
  2. 讲下本科的竞赛。研究生比赛中用到什么算法,会看 top 队伍的实现吗。
  3. 在 C++ 继承关系中,父类的析构函数为什么定义为虚函数;全局静态变量在什么阶段初始化
  4. STL 相关的几个问题
  5. TCP 是如何数据传输的可靠性
  6. 说一下滑动窗口,如果接收方滑动窗口满了,发送方会怎么做
  7. 虚拟内存是什么和存在的意义?
  8. 页面置换算法
  9. 死锁是什么?和如何解决死锁问题?
  10. 分布式和集群能介绍一下吗
  11. 数据库存储过程的作用
  12. 索引

手撕代码:说下 两个有序数组中位数 思路
最长上升子序列(讲了下 方的思路,写的 的写法)
最后又搞了一道 DP。。。。。不相邻子序列的最大和,这不就是 打家劫舍

总结:

手撕代码的题目,大多是 LeetCode 上做过的题目或者相似的,有些没见过的,一开始没啥思路,面试官会慢慢和你讨论,不用紧张,顺着思路一般能找到方向,一般都会让你看看有没有优化的可能了,时间复杂度能不能优化呢?空间能不能优化呢?出的题目一般都是 解法有梯度的,不同的解法带来 时空复杂度不一样,面试官一般会指引你慢慢优化,当然你要是直接知道最优解,直接讲清楚就好。计算机基础部分其实答的不太好,问了好多,很多不太记得了,感觉还是复习的深度不够,毕竟半路转的。。。。
感觉总体来说,还是比较 硬核,不管是算法部分还是计算机基础,简历的经历也会深入的了解考察。希望各位先做好选择和规划,认真刷题,啃书,来年不至于被“卷"的头疼

评论 (5)