当前位置: 首页 > 学习社区 > 转行经历 > 文章

非科班人转行AI如何以最快的方式学习和找到算法工作?

我是小将 2019-01-28 19:12 854

忙忙碌碌之中,校招越来越走到了尾声。现在静下心来写一点找工作以来的心得与体会,由于自己是非科班生,所以也算是给其他人提供一个参考,但仅代表个人观点,看官勿笑勿喷。


先介绍一下个人基本情况,985硕士,211本科,本硕都是材料,但是硕士做的是与计算机相关工作,有点沾边吧。求职岗位是算法工程师。你们说人工智能也好,或者具体说是计算机视觉和自然语言处理也好。反正就是求的工作是算法。硕士会接触计算机相关知识和项目,其他都是自补。硕士做的偏信息系统,进来后我觉得自己可能之后会做数据库,后来进来知乎,爱上了Python,再后来就开始接触数据挖掘和机器学习,那个时候深度学习还是没那么很火,主流的框架还是theano和torch,自己感兴趣就开始关注一些,然后认真地学习了一些,谁承想一个Alpha go把人工智能给彻底推上了天,或许这就是机缘巧合吧。比较幸运的是暑假在某大厂实习。一线和二线互联网,创业公司,林林总总,都面过,最终也拿到了一些offer。由于是算法,自己就谈的是算法工程师的面试经历,你们说是面经也罢。


算法工程师面试的东西我总结为三个方面:代码(coding),经历(这里包括实习与项目)以及算法(这里的算法是岗位里面的算法,不是数据结构与算法里面的算法)。可能不同企业侧重点不同,当然这也和面试官有关。不过面试的东西大概不会超出这个范围。面试一般都是几轮技术面然后加上HR面。有人会问几轮技术面会不会有层次感,或者各有偏重点。然而经历了这么多,倒真没有觉得有啥不同,可能连续几轮技术面问的方面都是一样的。不过有一点,一般最后一轮技术面会是主管面或者总监面,这个技术面一般谈一些大而广的东西,比如问你对这个行业的看法,有时候面试官会给你讲他们公司以及他们团队正在做什么,所以一般不会死抠技术细节。


下面我具体谈一下这三个方面:
首先是代码,就是coding,再直白一点就是数据结构与算法。这个一般是基础功,但是也是很多算法工程师的弱项。但是大部分公司关注的第一个技术点就是代码,如果代码不过,那就没有然后了。所以,要想横扫千军,还是要对代码足够重视。不过,大家也不用太担心,一般公司不会太难为人。基本上大家刷刷剑指offer和leetcode,都可以勉强过关。数据结构和算法是连在一起的,大家也要对数据结构至少有个基础了解,最好能有深入的理解。再来说说形式,现场面一般都是手撕代码了,一般要求写完整的代码,有时候时间不够,面试官会要求写伪代码或者思路。有时候没有思路,nice的面试官会给你一些idea。一般会问你复杂度的问题,当然如果有时候涉及复杂度优化。如果是远程面试,有可能会是远程桌面,这个你写的代码面试官在那边是可以立即看到的。没有远程桌面的电话面试,可能就只能说解题思路了。其实,我觉得解题思路是最重要的吧。考察的重点一般是排序,链表,二叉树和动态规划。这些基本上是最容易出错,所以经常写,比如快速排序好多要手写这个。


然后是经历。这里包括实习经历和大赛经历。这一块一般是应聘者能体现自己能力的一个最重要方面。这块大家最好有个亮点。比如你拿了什么比赛的前几名,或者在某个大厂实习过,或者你做了什么牛逼的科研项目,发了什么牛逼的会议或者文章。当然这些经历一般要和应聘的岗位相关。作为渣硕的我,只有一个实习经历,其他的项目都不大起眼。如果确实没啥亮点,你可以写写博客或者github,这些有可能成为加分项。反正我是这样做了,起了一点作用吧。作为经历这一块,基本上是你来讲,所以你要好好准备,别自己没有理解到位,这其实是给自己挖坑。因为面试官一般听完你讲之后,会追问一些细节,甚至可能延伸一下,这都是对你能力的考查。经历应该是最重要的一块,因为面试官可以通过这些经历大致看到你过去的努力,并评估你的能力。所以,不可小觑!


接下来就是算法了。这些问的一般是机器学习算法和深度学习算法。比如面试官会问了你知道哪些机器学习算法,你可能答了支持向量机,那么接下来就可能问你它的基本原理,应用场景,以及优缺点等等。算法考察的是数学功底,有时候面试官让你手撕算法公式,比如LR和SVM。所以,还是诚实点,不太理解的不要乱说。万一追问起来,那就起到反效果了。从另外一方面,仅仅会调用库,这是不够的,要对算法原理至少有基本的认识与理解。还有一点,有些面试官不直接问算法,他会给你一些应用场景。然后让你选择算法去解决。这就是要考察你的经验了,所以说你也不能只懂算法原理,不会将它应用,这也是很尴尬的。按理说,算法工程师面试时算法这一块应该是重点,然而有时候这一块面试官会问的很少。可能他们更看重前面的基本功吧。不过,专业的面试官可能就死抠这一块的算法了。不打无准备的仗,都好好准备准备。


我只说了只是大致是前面三个方面,当然还会有其他。比如有人问算法工程师会不会考察操作系统与网络呢。当然会有面试官会问,但是不会像研发工程师那样问的多与深。相对来说,简单地懂一些是可以过关的。有些面试官会考察思维题。还有的面试官会问数学方面的,比如概率论与线性代数。当然这都是个例。不要纠结啊。对于库和框架,有时候也会问。比如让你大致讲讲tensorflow的机理。这都是有可能会问到的。


最后,简单说说HR面。HR面基本上就是个人情况简单调查,比如你家的情况,是否单身。然后就是性格与压力测试。很经典的比如:你觉得你最受挫的一件事是什么。当然后面有可能会有追问。下面就是问你的工作意向,问问你拿了哪些offer以及期望薪资。我觉得HR面要自信点就好,不要怕,逻辑不出乱就是OK的。


突然想起来了,忘了一点,比较重要的一点。那就是一般每个面试后,面试官会让你问他问题。当然你可以说,我没有什么要问的了。那么,面试就结束了。但是,我觉得还是要问几个问题。所以,自己面前好好想一下,自己可以问哪些问题。不要刁钻就好。


这真的是最后了,想谈一下自己找工作以来比较深刻的几点认识:
(1)前期还是多投简历,不要着急,后面会有很多机会的;
(2)不要迁就,就按照自己想做的岗位去投,要不然到时候你拿到了offer也纠结;
(3)运气有时候真的很重要,所以不要怕,万一你是lucky dog呢;
(4)找到一份好工作又是一个好起点,但是不要忘了,它仅仅是起点,起点,未来真的是无限可能。

勿笑,勿喷,勿挖!


作者:我是小将
链接:https://www.zhihu.com/question/265041005/answer/288520113
来源:知乎