今天是2019年的9月1日,距离今年结束还有4个月,可以说是时间非常快了,新的学期已经开始了一周,我感觉经过这么一段时间找工作的忙碌,可以稍微停下来回顾一下自己这段时间做的东西,并且规划一下后一段时间该怎样走了。

今年最重要的事情可以说是找工作,从3月份开始找实习到现在,已经走过了6个月,整整半年时间。3月上旬,人生的第一面就是献给了腾讯,当时因为具体方向还没有确定,就选择的后台岗位,很快被捞起进行面试,但是当时自己连C++都没学多少呢,更别说STL、计算机网络、操作系统和数据库了,但是很欣慰的是,面试官的态度还是很好,虽然肯定挂了,但是感觉还是有所锻炼。后续的实习面试,就坚定了走音频算法这条道路,先后面了阿里巴巴、CVTE、腾讯等,都是一面挂,这是必然的,因为自己当时真的还是处在朦胧之中,很多基础知识并不清楚,对于MVDR、TDOA、DOA、VAD、后置滤波、WebRTC等都几乎没有了解。所以索性在4月中下旬就放弃了找实习,专心准备秋招了。

今年上半年,花了半年时间将自己修改的MVDR工程进行了彻底阅读了一遍,重新绘制了流程图,后续又结合师兄的论文,对程序进行了研究,总算对MVDR有了一个相对比较深入的了解,但是实际上缺乏阵列信号处理知识、雷达波束形成知识的我,还是欠缺很多。另一方面,结合老师的需求,我在从Google WebRTC中提取Noise Suppression模块的同时,对这部分的源码进行了深入的阅读,对每一个函数都进行了研究,对每一个公式进行了推导,整理出来了若干页的笔记,部分也发布在了博客之上。7月份,按照老师的要求,编写了定点数处理和浮点数处理的WebRTC Noise Suppression又让我对该模块的原理有了更深入的了解。在7月底和8月初从家里回校之后,我又趁热打铁,阅读了WebRTC中VAD和AEC的代码,并整理了函数说明书和流程图、函数调用关系图等,为后续做了准备。

我的秋招是从6月上旬开始的,曾经打算来一个开门红,但是结果正好与预期相反,出师未捷身先死,VIVO跪在了笔试之上,其实题目还是很简单的,但是第一次参加秋招的笔试,对于很多编程题和编程思想还没有滚瓜烂熟,导致了我最后可能只AC了一道题,很不幸没有进入面试。6月底我又先后报名了TP_LINK和OPPO的提前批,也都挂在了简历筛选上。可以说整个6月和7月上旬都挺失败的。

但是相反的,崔崔的秋招开始却比我顺利多了,虽然6月初一样挂了VIVO的笔试,但是在7月初顺利斩获了OPPO提前批的offer,让我倍感压力,甚至感觉都要找不到工作了。

也许是冥冥之中的注定,7月1日投递了字节跳动之后,一直没有下文,直到老师快要允许我回家的时候,字节跳动约了一面,但是一面那天我因为失眠等一些原因导致状态极差,本想联系面试官推迟和取消面试,但是正好HR打电话过来说面试官有事要求推迟面试,我想既然如此,那大概就是一定要让我面了。一面推迟到了回家第一天,当天下午4点多到家,吃完饭散了散步就坐在了电脑前准备迎接人生第一次视频面,也是秋招第一面。面试很快40多分钟过去了,由于自己之前对字节跳动的敬畏,也由于自己之前没有过一次一面,所以没有报什么希望。不过没想到,第二天晚上在跟张耕去吃自助的时候,接到了字节跳动HR的电话说通过了一面,要约二面,由于周三要去看球赛,所以二面推迟到了周五。这一次我进行了彻彻底底的准备,除了将项目认认真真看了一遍之外,还把字节跳动仅两年以来所有关于算法、C++岗位的面试资料全部整理并认真研究了一遍。而后,通过了二面和三面,在8月2日接到了offer call。

在第二天,已经毫无音讯半个月的大华给我打来了电话,进行了一面,借着还剩下的那点激情,用一个星期面完了大华的两轮技术面+1轮HR面,最后8月15日也收到了意向书。

在如此迅速拿到了两个意向书后,其实内心是有些膨胀,一直以来自己坚持的延迟愉悦也没有坚持,自己很快就投了科大讯飞、阿里、腾讯、欢聚时代、ZOOM等,感觉自己找一个工作的备胎会很容易,但是没想到过于自大带来了问题,自己高估了自己的能力,于是在接下来的每一次战斗中,我都被打得落花流水,毫无缚鸡之力,腾讯到现在也没有接到面试预约电话。

也正是这一次次失败,让我认识到了自己一些现实,从而为自己后续做什么做好了准备。我感觉:

  1. 为什么我科大讯飞、阿里巴巴、ZOOM会一面挂的如此惨呢?这主要是因为阿里巴巴和ZOOM都有做麦克风阵列语音增强方向的专业人员,他们对这方面比较了解,而且这方面是当前的一个热点。对于我来说,虽然我的毕业设计题目是“基于环形麦克风阵列的语音增强系统”,但是我的重点放在了“语音增强”之上,却忽视了前面的“环形麦克风阵列”这一前缀,这一点实际在中期答辩的时候老师已经给我指出来了,但是我当时并没有认识到他的意思,反而继续坚持在语音增强上。实际上,“环形”和“麦克风阵列”两个词都是非常重要的,第一个词牵扯到了麦克风阵列如何设计的问题,算法本身只有与阵列设计紧密结合,语音增强的效果才能做到最好,然而实验室的条件限制了我真正去参与设计麦克风阵列的可能,我所掌握的知识仅仅是他人经验和理论,却无法有自己的经验。第二个词牵扯到了“波束形成”,这是一块非常重要的知识,也是我项目的核心所在,我只是从所学过的《自适应信号处理》角度,对波束形成进行了较为深入的理解,却因为没有学过《阵列信号处理》,而没有从其本身概念入手进行理解,所以我知道LMS准则、ML准则、MMSE准则,却不知道主瓣性能、旁瓣性能,无法从雷达波束合成上彻彻底底了解波束形成究竟是什么、如何实现的、为什么会这样等几大问题,所以直到现在,如果说波束形成和语音增强是两条腿,那么我就算一个瘸子,波束形成这方面短板太多。
  2. 为什么字节跳动、大华能过呢?对于大华来说,其更重视的是学历,从我了解来看,我们学校几个主要实验室几乎没有挂的(也有极个别挂在了一面或者二面),大多数都收到了意向书,当然其本身要求也注明了要求211/985院校、硕士以上学历。对于字节跳动来说,一方面其更重视的是编程能力,由于从大学以来做的各种比赛、毕业设计、项目等等,我都是亲自去写去设计,另外最近半年也在疯狂练习和总结回顾剑指offer和leetcode,所以编程能力还算合格;另一方面,字节跳动目前的语音领域还是主要集中在语音增强、语音特效等领域,所以正好和我一直以来关注的重点相符合,因此我推测这两者应该是原因。

发现了问题,自然是要解决问题。现在距离老师给找工作的时间还有不到1个月,我感觉我的重点将是放在学习波束形成方面,对于缺乏阵列信号处理、雷达波束形成知识的我来说,这一点至关重要。我计划如下:

  1. 未来一个月的时间用来阅读《优化阵列信号处理:波束优化理论与方法》,一定要尽可能弄明白MVDR的原理,弄明白当前波束形成主要的目的是什么、怎么做的、为什么这样做能够得到这样的结果、性能为什么会有差别。
  2. 理论结合实际。首先是将MATLAB语言的Delay by extraction尽快改写为C语言版本,并在我的工程里面尽快做出接口替换;其次是结合理论知识和MATLAB代码,尽快确定工程波束形成领域的改进方向;最后是尽快将WebRTC的单通道去噪的噪声估计输入声源修改为6通道音频,解决采取何种方法来使6个通道的噪声估计结果更准确,然后利用6通道音频的噪声估计提升维纳滤波的准确性。

总之,前进的道路充满荆棘,但是依然必须迎风破浪,解决一个又一个问题。未来一个月,乃至未来一年、工作以后,都绝不允许自己有所松懈。