大龄非科班留学码农:如何在美国当地拿到CV算法80万offer

660 阅读8分钟

我正在参加中秋创意投稿大赛,详情请看:中秋创意投稿大赛

基本情况:

双非本科+藤硕。在本科与硕士之间在国内做了若干年的算法工程师,有一定的算法基础。本科与硕士专业都是医学工程,而非CS。

专业方面,找coding的工作很尴尬,虽然所学的知识大部分属于计算机或电子一类的,但是常常会被误认为是拿手术刀的。在HR刷简历阶段就会无辜错失很多机会。

强项是有多年的算法基础。Coding能力很强,在美国读书时常带着同学们(其实都是比我小8-10岁的小弟小妹们)做项目而在效率和效果上甩爆其他组。

现在工作:

现在在美国一家公司做医学图像分析。薪资没达到预期,但是由于工作对口,已经很满意了。

求职过程:

因为拖延的坏习惯,今21年毕业后才开始找工作。时间比较紧,因为3个月内找不到工作就得回国了。投过了几百份简历,做了一个excel表,对投递的每个一个职位都做了记录,总共有几十个回复和面试。最后拿到2个offer,都是医学图像分析方面。

先说我选择的offer。第一上来就是技术面,这个让我有点意外,因为美国的习惯先让HR和你聊一些无关紧要的基础问题,下一面再安排个coding面试,下一面再聊技术啥的。技术面的时候,面试者对我的简历上面的一个医学图像项目非常感兴趣,问了我许多关于这个项目的问题,我都很好地回答了。

接下来又简单地问了我一些深度学习的基础知识,都很简单。可能第一个技术面就确定要我了,后面很快安排第二面与第三面,都是简单地与领导聊聊天,后来的领导很健谈,有的时候就是我听领导在吹水,我就负责拍马屁夸他牛逼就行了。再接下来是HR和我谈offer,一切都很顺利。

另一个offer,第一次是HR和我简单聊一下,然后是技术老大面我,很幸运的是我简历上的一个医学项目正是他正在进行的项目,相同的技术,不同的应用领域。技术老大不掩饰他的兴奋。过了一段时间是一个印度小哥面我,由于小哥英语有一点口音,我们交流起来有一点点困难。面后几天甩过来一个链接,是他们公司的一个数据包,让我自己设计一个深度学习模型来解决他提出的问题。因为我有类似的项目经验,这个题目直接用分割就能解决,但是我觉得这样一个太平凡的模型提交了没啥意思,于是设置了一个检测+分割结合的模型,这个模型充分考虑了器官间的相对位置信息,神经网络更轻量化,速度也更快,预期效果也要比通用模型好很多。但是事实测试效果比通用模型差一点点。应该是他们公司出于保密的考虑,给我的数据量有限,而且很多数据是来自同一病人,用这样的数据对现有的网络做评估也意义不大。

我在他们的规定时间一周之内完成了这个项目,并在报告中写到如果给的数据多一些,并且病人数量多一些,会有更好的效果的。在提交报告与代码一段时间后收到邮件要我与CEO聊一聊,但是由于当时确定不去这个公司了,就说不聊了。

美国求职经验:

我觉得在美国和在中国求职还是有挺大差别的。

第一就是身份问题。国际生需要用OPT来工作,这与美国的学生相比就减少了很多的竞争力。

第二就是语言问题。我会用一部分时间用在看视频提升英语听力上。不过在计算机和算法等自己的领域方面,还是可以顺畅交流的。为了准备面试,曾计划过把简历上所写项目的每个细节都用英语讲出来。但是人懒还是没去做,后来面试多了这些内容都说熟了。

对于我个人来说,第三个问题,就是前面提过的专业问题,很多机会在HR看简历的时候就失去了。

说了这些,我只是想说,在美国找工作其实是挺难的。倒不是难在他要求有多高,而是会在很多客观的原因中失去机会。我在找工作的过程中遇到了最多的情况就是,人家和我约了面试,聊也聊得挺好,之后就不理我了,或者把我拒了。所以在美国找工作一定不能偷懒,简历要多投。投的多了,基数大了,总有眼不瞎的公司不会因这样那样的客观原因不考虑你。

刷题:

LeetCode。从还没留学的时候,就有人跟我说要刷题;在美国的时候,看到很多同学在刷题;在和七月的老师们聊天的时候,也都强调要刷题。而我做了多年的程序员,却很不喜欢这些题目。总是感觉这些题目都是奇技淫巧,在实际项目中用不上,对编程能力提升也没啥帮助。可能是因为我的知识还是太浅了才这样认为的吧。但是题还是要刷的。因为确实好多公司会从题库里面抽题来考你。另外对于每道题还会做时间空间复杂度分析,人家会问的。

七月在线培训:

非常感谢七月在线的培训。我之前做了几年的算法工程师,但是更多的是用传统的算法解决问题。因为之前的好多算法在嵌入式平台上运行,复杂的深度学习模型在嵌入式上面根本跑不动,最多是跑一些三层全连接神经网络。当我还是一只青蛙被放在嵌入式这锅温水里煮的时候,我有点意识到外面的世界在变化了,后来水快煮沸了我意识到自己被局限多时了。

自己去学习一些深度学习的东西,后来来美国读书,后来接受到七月在线专业的、系统的培训(报的CV高级班 第5期)。Seven老师手把手带我们做项目,王老师详细给我们讲一个强大的detectron2库,这些都对我加深对深度学习的认识及设计模型大有帮助。各位老师在培训中对于一些重要的知识点详细讲解,这些知识在自己做项目中都很有用,而且在面试中也经常会被问到。

面试问题:

上面说过,老师们在培训中讲过与强调过的一些细节,往往是项目中会遇到的问题,也是在面试中常被问到的问题。七月在线的网站上有一个面试题库,我把这里面的CV和深度学习部分保存下来,对于不懂的地方自己弄懂了并做注释,面试中就可以对付很多他们提出的问题了。

面试中发现C++很重要,面试中常会被问到。我一直是用C语言在嵌入式平台做算法,所以如果问我C++面向对象方面的一些问题,问得深入一些,我就回答得不好了,曾经花时间补过,但是由于时间短,效果不明显。给同学们的建议就是在学习和工作中对于很重要且会很长久存在的技术,尽量去接触和学习,并在工作中使用,这样才能更好地掌握他。对于C++这种东西,个人感觉在职业生涯中总会用到的,还是花时间好好学一学吧。

下面是我从自己的面试记录里面找到的一些被问到的问题:

1.      讲述一种你熟悉的用于物体检测与分割的模型,并详述其结构。

2.      物体检测中如何确定anchor的大小。

3.      C++的问题:静态变量,引用和指针参数的区别,拷贝构造函数,静态变量,继承,虚类。

4.      在你实际的项目中,你是如何建立图像数据库的。

5.      在图像算法中,你是如何决定对某是任务是使用传统方法还是深度学习方法的?

6.      在为嵌入式平台设计图像算法的时候,你需要考虑什么tradeoffs吗?

7.      说出你用过的loss函数,并讲述其意义和用途。

8.      在深度学习中,concatenate的作用是什么?

9.      在数据量不足的情况下,你是如何训练并测试你的模型的?

10.  讲述语义分割与实例分割的区别。