分享 如何找加拿大CS/MLE相关工作

avatar 284817
oefox000000
18002
55
我去年决定放弃留在美国,来加拿大。看到有不少地里朋友有类似的困惑,比如怎么加拿大工资这么低,怎么找到相对高收入的工作,怎么能够拿到LMIA等。这里分享一下CS找工作的一些体会。

这里不聊的是为啥我选加拿大,也不聊具体多少工资(NDA,我只能告诉比在美国的时候工资高)。另外,猎头的联系方式抱歉我想告知。这里只有方法和过程。

去年我决定离开美国的时候,有小3年大厂经验,也包括做Vendor一年。找工作过程还是蛮难。
我的目标是除了美国之外有好的工作机会的地方,所以当时锁定了国内、日本、英国、德国、加拿大。从网上的调研看,每个地方面试侧重点也不一样。

- 国内考算法难度蛮大,要非常快速的写hard题解,还有很多机器学习模型基础问答,考点注重业务经验,也会涉及大数据的原理(比如Spark shuffle的过程,如何调优处理小文件问题)。没有看到考系统设计。
- 加拿大、日本等其他地方面试的主要是国际公司,所以和美国的面试差不多,算法+系统设计,MLE额外还有ML系统设计(比如设计推荐系统)

我大概脱产准备了1个半月,开始投递简历。我的经验:
- 不要海投,优先找猎头和内推,尤其是加拿大,公司一般招人会优先从内部招,其次是内推,最后才会看外部候选人。而且海投大概率你会被机器人刷掉。但猎头的消息非常灵通(他们有客户关系),而且猎头可以帮你节省大把时间,找到匹配的职位。还有如果面试遇到问题,可以利用猎头去影响决策,包括后面谈工资,有第三方出面你完全不用担心和雇主撕破脸皮。我当时使用谷歌搜索了蛮久,一家家的发了邮件询问,也找了自己的朋友推荐猎头,最后大概联系了5家。(注意:找到的猎头一分钱不需要你花,是雇主出钱)。
- 面试过程也出现过一些问题,当时无论国内、加拿大、还是日本的猎头都蛮给力,没有面好的帮忙换组接着安排面试,也有帮忙申请福利和工资(比如LMIA / Work Permit/ EE等)
- 我自己也有尝试过直接找公司HR,不过效果不是很理想就放弃了(时间投入产出不好)。

关于薪水: 加拿大的平均薪水开始的时候也让我打退堂鼓,听说毕业生才7万加币。不过实际找工作是完全不一样的,别用市场平均数去衡量自己,尤其如果你有大厂经验的话。要拿到主动权,你需要有多个Offer 去Compete,这样会有非常大的选择空间,不仅体现在薪水、股票,也包括身份申请、搬家等各种福利。我后来也有朋友来了加拿大,经验和技术都蛮强,但就是没有Compete Offer,议价空间就比较难。当时几个猎头都怕自己丢单子,拼命去申请更好的机会和薪水(心里蛮感激和也蛮愧疚)。

关于身份,如果还不够分走EE,加拿大的雇主会提供律师来协助办理Work Permit。一年后可以ECE用LMIA加分来走EE。建议尽早考雅思G。

------------------------
下面是一些我自己用过的找MLE工作资源:
- 刷题:我上过九章算法强化班、高频班,也爱偶尔打打周赛,后来刷过LeetCode一段时间,感觉还好,不过面国内的时候还是很紧张,需要很快写出来,还是需要熟练
- 系统设计:我之前的经验会接触到一些微服务架构,自己看了Educative.io的课,模拟画了不少的图,后来跟九章系统设计课又走了一遍,选的课主要是为了节省自己时间。而且觉得自己不是很聪明,喜欢看视频学习。另外,蛮推荐Udemy,尤其上Kafka的课程对解耦设计很有帮助。
- ML系统设计:这个90%考推荐系统,我看了Educative.io的ML System Design,但觉得太粗浅了,很多实施细节没有讲到,于是自己尝试去画大概的设计是怎样的,比如如何扩展深度学习的服务。工具需要知道Airflow / MLflow 等(要知道设计的架构原理,起码知道有哪些Components,Scheduler的算法还是需要知道的),加上平时工作会用到Docker和K8s来部署。
- ML模型:基本概念肯定得秒答,什么L1/L2有什么区别、优劣势?SVM的Core各种使用?Imbalanced data如何处理?如何搞定Overfit?还有不用调包手写常见的loss function、K-means,复杂一点的像xgboost的loss原理(泰勒展开)也有考到。深度学习我感觉考的比较多的是vanish grad怎么解决,adam优化是什么。复习方法我是自己在国内牛客网、还有谷歌搜索,然后整理了一大串的面试问题,然后一个一个搜索,不懂的就请教别人一点点弄通的。我也找过蛮久的针对性课程,但很可惜没有。。Udemy的太粗浅,书本上的信息太多,没有那么多时间筛选。倒是Youtube上搜中文能找到不少华人做的模型推导视频,我感觉很有帮助。

另外,有的公司会发送一个Assignment,给一周的时间完成,可能是一个spark job(可能是我在简历有写scala,所以有的公司要求我使用scala)的大数据小项目,让你对一个非常紊乱的数据进行统计分析,或者建模。也可能是一个机器学习的Assignment,需要做预测。

- 大数据工具。有的公司会考,尤其国内的,因为他们的技术栈会用到Spark/Flink等,我主要是看知乎别人总结的架构,了解Spark基本原理,比如有哪些工作方式,reduce的过程和hadoop mapreduce有什么不一样,还有看了美团的技术博客(真的很赞)总结了很多Spark调优的技巧,比如如何设置CPU数量、缓存策略,以及如何处理不平衡数据的问题(比如大表join小表)。

关于MLE的一些澄清:很多学Data的朋友会问,怎么找MLE的工作?其实我每次聊了比较深入后,发现不少人对MLE有误解。首先,如果是想做模型的应用,比如调参,设计新模型,那么更适合你的是Applied Scientist或者Researcher。MLE在公司要解决的是把模型转换为profitable的产品,所以更多是工程问题而不是研究问题(可能有的公司会有点差别)。MLE首先是SDE,再加上ML的背景,有统计当然更好,但不是必须的,所以公司更愿意招SDE, ML。 我自己是学统计出身,后来工作过程发现想去的MLE其实更多需要解决工程问题,所以决定重新一点点学CS,包括底层、架构,还有各种工具的使用。

就分享到这里,希望能帮助需要的朋友少走一些弯路。
最后,祝大家好运,疫情早日过去。
  • 179
55条回复