【历史资料整理】校招算法工程师求职准备

【注意】以下资料均是去年忘记在哪里搜集到的当时觉得对自己有用的东西,想分享在这里,也作为一个记录,如有朋友受到冒犯我会立即删除

简历每个模块怎么写

简历不一定非要控制在一页,两页也可以

姓名电话邮箱,如果有好的开源代码给git主页,有好的技术博客给博客链接,其他不需要写

教育经历:学校 - 专业 - 学历 - 成绩 - 获奖信息(奖学金、国际大奖等等)
教育背景给到学校和专业即可,除非你导师很牛逼或者成绩很拿得出手,否则不需写
列出你拿得出手的奖项,如果没有,可以列奖学金,奖项应该是专业相关的
如果你不是CS或相关专业背景的,可能需要给出与面试相关的主干课程或自学过的课程,你列出来的课程,不管是自学还是学校的,都要做好被考察的准备。
不要列出没有意义的证书,例如全国计算机等级考试X级,CET4成绩。但如果这个证书是一项有难度的、能证明你自驱的,请列出

专业技能:这个部分主要是放这个计算机相关技能的,按三个程度来整,掌握 - 熟悉 - 了解,比如“掌握Java基本语法、多线程等内容”,“熟悉JVM内存结构、垃圾回收机制等”。轻易不要用精通,精通意味着你会激发面试官的挑战欲

实习经历和项目经历

不必按时间排,按牛逼程度降序排。不要写无关紧要的实习经历

按STAR法则写,背景 - 目标 - 你针对什么困难(技术上,开发流程上,部门沟通上)-采取了什么行动 - 达到什么收益效果-个人收获是什么

先从宏观介绍:我们的这个服务主要是在美团优选的xxxx场景下,服务包含三大块,分别是xxx,xxx,xxx,整个服务的流程是这样的,用户先请求xxx,再xxxxxxx,最后xxx。我能接触到的是xxxx模块的业务代码,期间完成了一些产品需求,主要是xxxx。

再用STAR法则介绍你完成的工作(其实就是准备几个故事):(Situation)在xxxx的背景下提出了xxxx需求,(Task)我在其中主要就是负责完成一个数据查询接口的实现和性能监控工作,(Action)我用了xxx工具,期间遇到xxx困难,针对这个困难我通过使用xxxx进行性能分析,发现指标xxxx出现异常,之后做了xxxx工作解决了这个问题。(Result)最终达到了xxx的并发效果。

写你所取得的最牛逼的成绩,加粗。

个人收获

  • 技术上成长 (学习了哪些技术组件,自己有没有去深挖)
  • 代码风格上 (如何写出易于维护的代码)
  • 开发流程上 (单元检测,打日志,Git团队合作)
  • 对业务理解能力上 (如果把业务场景转为系统设计转为工程代码,都考虑了哪些问题)

项目要求

有一定的复杂度,方便扩展
你在其中承担了比较多的工作,且有一定难度和挑战性
具有领域特点的专业词汇及其通俗解释
项目的背景和价值,价值最好要关联到应用层面甚至商业化层面。
你参与的部分在整个项目中的作用,最忌自己的部分说的清清楚楚,跟其他部分怎么合作一脸懵逼,这是典型的没有大局观,自己把自己当螺丝钉。
过程中遇到的困难和解决方案,这部分需要深入挖掘整理,很多同学做事情的时候其实挺困难的,做完以后又云淡风轻觉得不过如此,感觉也没有讲的必要,这是非常不可取的。需要review到当时的能力和状态,完整梳理当时为什么会卡壳,都试了哪些错,为什么那些错误的方向不work,怎么想到正确的方案的,正确的方案为什么work。
从现在的角度出发,回顾项目,提出现存的问题及更优的解法或提升方案。

讲解项目要达到下面的程度:

对于没有领域背景,或只有比较通用的、一般的算法知识的人,能够比较轻松的理解你所讲的内容,明确你工作的价值
有的同学把项目的重点总是放在算法细节上,这对于方向跟你一致、背景跟你相似的面试官而言是合适的,但对大部分面试官不合适。我如果连你构建的场景和问题都没有代入,基本上就不用谈对你的算法有什么看法了,更无法理解其中的精妙之处。如果我对你所说的名词没有一个基本认知,连算法都无从谈起。
算法的精妙需要大量的背景和前序知识铺垫,带着面试官进入场景,分析问题,让你的solution自然而然浮现,这是比较好的状态。讲得清楚才说明理解的到位,讲不清楚,就是没理解


自我描述:展示你的自评、上述模块未介绍,但你觉得值得一说的东西
最好是描述词 + 事例的方法,如果没有事例就省略这个自我描述这一项。
比如“我的抗压能力强 - 曾经在两天内完成xxx系统搭建/软件开发/数据比赛,并取得了xxx的成绩”
列出你的技能点,包括编程语言能力、算法能力等


面试核心要求

  1. 具有 快速成长潜力 的同学,并在面试中表现出来你是。
  2. 很基础的思考方式和代码风格,比较顺畅的过easy题,有medium题目的思路,有点计算复杂度的概念,能讲出问题的分析思路,编程语言层面上的理解到位,相关工具能够正确使用,那就够。比起你已经知道的东西,证明“我能快速学会”更重要。例如,一个问题或一种概念你不了解,但能根据你已经有的知识猜测或推断出它是什么,应该用什么关键词去检索能够获取的相关知识,能够设计实验来验证你的猜想。相对而言,更好的编码习惯和对运行效率的敏感更重要一些。
  3. paper在不同方面有一两个,够证明自己的
  4. 独自寻找问题,迎接挑战,持续自驱的做出成绩。竞赛、开源代码建设、以及任何具有一定挑战性的,能证明你是自驱的,你总能通过持续的自我驱动去学习、研究、尝试,达到你的目标。
  5. 洞察力。给你一个开放问题,你能不能理解出题人想要考察的方向,能不能正确建模问题,思考出合乎逻辑的解决方案,能不能正确评估方案的优缺点和瓶颈,能不能对后续迭代有一些想法?洞察力最明显的一种体现就是建模和迁移能力,针对面试官的问题,你能回答出这两句话:这个问题本质上是一个XXX问题,这个XXX问题与YYY问题的思路是相通的,我们可以基于YYY问题上的研究成果设计XXX问题的解决方案如下 。。。表现出你的快速学习,归纳总结,逻辑推导能力。
  6. 团队作战。真正的程序员既要写代码,又要想算法,既要对接产品经理,又要对领导做汇报,既要管理下属和同事,又要管理领导和合作伙伴,表现出你的能力和意愿
  7. 性格积极但有分寸,阳光但不幼稚,思想开放不偏激,有灵活度又不失原则。需要你思想正面,听话好带,讲道理能讲通。
  8. 实习经历需要下面两个点至少占一个:- 通过实习参与了实际的产业实践,了解了公司工作的套路方法、工具链,并且对业务有了一定认识和洞察; - 实习的工作本身未必特别难,但你做出了有特色的成果。

开放题

开放问题主要考察:

  • 业务问题的抽象:能不能抓住主要矛盾,忽略次要矛盾,把一个产品经理提来的,笼统的需求转换为一个算法问题。
  • 可行性评估:对于这个算法问题,你所需要的资源是否是可接受的,你所需要的前置算法是否是存在或满足需求的。
  • 沟通:对你所不掌握的情况,你是否会主动确认,在整个解决问题的过程中,与面试官有良性互动。

例如:

  • 如果说你是一个聪明人,你认为你聪明在什么地方?理由是什么?
  • 你的实习/项目/paper中,难点在哪里,为什么困难?你是如何解决的?
  • 挑战包括对项目的挑战,也包括一些意外情况 你迄今为止觉得自己最牛逼,最得意的一件事是什么?
  • 你觉得工作的意义是什么,你期望中理想的工作是什么样的?

回答思路:

  • 多做铺垫:讲算法先讲思路,讲项目先讲背景。
  • 合理推测:也许你不知道准确思路或定义,但你可以合理猜测一个,给出你猜测的理由并寻求验证。
  • 实事求是:永远不要尝试糊弄面试官!
  • 无需争执:不要在一个点上与面试官反复拉锯
  • 注意细节:细节体现真实,细节体现差异。可以主动提出具体的tricks分享给面试官,千万避免泛泛而谈。
  • 坚守本心:能不能接受加班?平常有什么爱好?这类问题怎么想的怎么说,是什么样就说什么样,毕竟你的终极目标就是要找到一个合适的工作。

开放问题还有一个特点,就是如果你答的不错,你自己是知道的,有一种”我的思路很对头“的感觉。


算法八股

  1. 常见的传统机器学习算法,如决策树、随机森林、梯度提升树、SVM、LR、PCA能够讲出其核心思想,优缺点与适用情况,能够讲出其优化目标,能够讲出这个算法为什么叫这个名字。应该有一两天的集中复习就足够。

  2. 在至少一个细分领域了解当前技术的大体进展,SOTA方法,思路,能对流行的方法有自己的评价,言之成理。如果你有好好做研究,不管有没有paper,这点应该是默认具备的。

  3. 对广泛的深度学习话题,能够了解具有相当影响力的重要工作,能够讲出其核心idea和大体思路。这个“广泛的深度学习话题”既包括大的应用领域:CV、NLP或Audio,也包括近期比较热门的话题,如AI艺术创作,也包括一些理论:自监督学习、领域自适应、元学习等。最差你也需要对大领域的关键工作能说出来一二三。这点比较难,因为话题广泛,难免了解过于粗浅,最佳状态是平时就很关注学界动态,牛逼的工作出来以后有好奇心能去看一眼,稍微研究一下。

  4. 深度学习/机器学习的基本理论有本质层面的认识,能够从原理层面回答深度学习的各类常用组件“why”的问题。建议博采众长的回答,取为己用

  5. 熟练至少一种深度学习框架,所谓熟练:

  • 你对这个学习框架的设计思路基本了解,你清楚各个模块的作用和工作机理
  • 你能够用这个深度学习框架实现自定义的结构,而非只是简单调用高层API
  • 你对这个深度学习框架的常见坑点很熟悉,了解大部分情况下的最佳实践
  • 对常见的CS概念有基本了解,也就是正儿八经的八股文了,特别是:
  • 对linux有基本了解,了解常见的命令,能够搞定一般的环境和工具配置,了解一些基本的概念,知道bashrc、根目录下的几个文件夹分别是干嘛的
  • 了解git的一些基本概念和用法
  • 了解HTTP、web服务、SQL、NoSQL、消息中间件、微服务、容器技术等等乱七八糟的概念,不用深入,基本上知道“是什么,解决什么问题,什么时候用”就可以了。
  • 了解分布式的一些基本框架、工具或理论
  • 知道常见算法的时空复杂度和大体思路,知道常见数据结构的概念和适用场景。
  • 其他八股文:进程线程,内存,动态/静态链接库等等等,网上搜一个八股文面经看一下
  • 最好能会除Python以外的一门静态语言,水平能够达到能看懂,能写一些不太复杂的功能。以C++为例,基本上C++ primer模版之前的内容能大体了解,就足够了。
  1. 代码能力
    模拟类的问题:这类问题通常不难,思路直接,主要练习用代码实现出来的能力
    DP类的问题:算法上能够解决DP类问题就足够了,DP可能是面试中最常见的难度稍高的问题。
    练习代码题请注意如下几点:
    前期以熟悉为主,后期要限定时间,一般面试中的代码考察最长不会超过1h,通常是30min一个题,如果到时间没有解决,你需要练习基于已经有的部分阐述思路,讲解代码,给出没有做出来的理由,甚至可以向面试官寻求帮助。
    写完代码需要看题解,了解自己代码的时空复杂度,是否还有优化的空间。通常代码题是一套一套的,面试官允许你用低效的方法实现,但一旦你实现,下来的问题就是复杂度如何,可否进一步优化。

一个算法工程师应该是
产品中最懂算法的,
码农中最懂业务的,
科学家中最懂工程的,
工程师里最懂理论的。


这样一个处在交界地中的角色,
既能够有深刻的业务洞察明晰价值,
又有足够的工程能力应付落地,
又有足够的科学素养调研推导,
从而成为一个“擅长理解问题和解决问题”的人


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器学习模型机器
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值