7月1日投了字节跳动,然而直到提前批结束都没有收到一面通知,以为是挂了,没想到在7月18日收到了一面通知,然而当时自己很劳累,本来想推迟,结果没想到面试官也因为有事所以直接推迟了一面。于是乎实际一面是7月22日,二面是7月26日,三面是7月28日。

字节跳动面试(一面)反思记录

问题记录

1. C++中的虚函数是用来干什么的

2. 多线程和多进程的区别

3. 32位和64位操作系统编程的区别

4. PCM和WAV文件中存储的是啥

5.采样率和采样深度的物理意义

6. C++中malloc/free 和new/delete的区别

7.128点FFT变换,16kHz的音频,可以分为多少个子带?

编程题:

查找缺失的最小的正整数

项目:

1.WebRTC VAD中的GMM模型过程

2.维纳滤波和谱减法的区别

3.时延估计的实现

4.你用的VAD的是做什么用的,原理是什么,遇到突发噪声怎么处理?

5.WebRTC NS中的噪声估计用到的三个特征值是什么?它们分别的定义是什么?

6.有没有了解WebRTC中的回声消除? 7.研究生项目的下一步改进计划

问题点

1.对采样深度不懂。采样位深,音频的位深度决定动态范围。我们常见的16Bit(16比特),可以记录大概96分贝的动态范围。那么,您可以大概知道,每一个比特大约可以记录6分贝的声音。同理,20Bit可记录的动态范围大概就是120dB;24Bit就大概是144dB。音频位速,也叫码率,或者比特率。位速是指在一个数据流中每秒钟能通过的信息量,也可以理解为:每秒钟用多少比特的数据量去表示。96kbps的WMA音频格式的音质明显要比96kbps的MP3音质好。为什么会这样呢?因为不同的压缩算法,对数据的利用率不同而造成的差异。再举例,假如MP3压缩至48kbps以下,已经惨不忍睹,而如果是AAC音频格式,同样是48kbps的位速下,音质明显比MP3好。

2.问题7答案继续查找。

3.WebRTC的VAD中GMM模型过程。4.LRT均值的定义。

总结反思

1.Linux和C++基础必须重新看一遍。这些计划7月份大体完成。

2.WebRTC的VAD、NS部分必须重新回顾,再深入理解,推导,一遍一遍仔细看。

3.对音频的格式问题得有深入了解。 4.陆续对回声消除、AGC部分进行了解。

字节跳动面试(二面)反思记录

问题记录

1.介绍自己的项目。

2.麦克风阵列的物理结构特性有哪些指标?你的麦克风阵列的指标都是怎样的?

3.都用了哪些噪声种类?现在机器学习几百种噪声,为什么用这么少?

4.在哪些噪声环境下语音增强的效果比较差?

5.增强语音的结果的衡量标准是什么?

6.指针和引用的区别

7.多线程(因为知道非计算机专业的,所以提了一下就没有问)

8.TCP和UDP的区别?TCP的拥塞控制策略有哪些?

9.一个绳子切三段,可以组成三角形的概率是多少?

编程题:寻找第k个数字

问题点

1.对麦克风阵列物理结构了解不够。由于个人偏向于做算法这一块,所以对麦克风阵列的相关性能指标理解较少,且没有考虑结合物理结构去完成语音增强这一块。

2.结合新技术的东西太少。应该多阅读最新论文,了解问题的解决方案。

3.仍需要增加噪声种类进行全方位测试。4.计算机网络方面仍需要进行了解。

总结反思

1.对麦克风阵列的物理指标进行广泛查询搜集,然后进行整理,确定自己使用的麦克风的参数。

2.广泛阅读最新论文,结合论文对算法进行优化。

3.增加测试噪声。

4.考虑对于多说话人的时候如何实现背景说话人的噪声。

5.对计算机网络的基本知识仍需要进行全方位的了解。 6.接下来对项目仍然需要深挖,以应对各种实际情况,并结合面试官问题,在下一步项目推进的时候做的更完善。

问题记录

1.你平时是用VS多还是Linux编程多?VS你都是怎么调试?

2.你知道VS下面断点调试的底层原理是什么吗?

3.你项目中的时延估计是做什么的?

编程题:

代码可否正确输出?

1.递归写出n个数字的子集(包含空集)

n个数字的子集有多少个? 2.二叉树的右视图

问题点

1.对C++虚函数的基本还是有欠缺。虽然知道代码能够正确输出,但是没有100%的理论确定这一点。2.对递归编程这个领域熟悉还不够。

总结反思

下一步要做以下工作:

1.抓住C++基础不放松,特别是虚函数、多态、智能指针等这几个常问的关键点。2.继续加快LeetCode编程题的学习工作,坚持每天刷3~5道题,把一些基本题型的medium和hard题都要刷且弄明白。