
这篇文章的标题听起来像是史诗般的失败,但实际上,一切还不是很清楚。 总体而言,尽管不是在Google上,但这个故事的结局非常积极。 但这是另一篇文章的主题。 在同一篇文章中,我将讨论三件事:我的准备过程如何进行,在Google上进行的面试如何进行以及我认为为什么一切都不像看起来那么清晰。
一切如何开始
在一个寒冷的塞浦路斯冬天的傍晚,我突然想到我对古典计算机科学的知识与平均水平相差甚远,因此需要采取一些措施。 顺便说一句,如果突然有人没有读懂为什么晚上是塞浦路斯和寒冷,那么您可以
在这里找到有关的
信息 。 经过一番思考,决定开始上一门有关算法和数据结构的在线课程。 我从前同事那里听说过罗伯特·塞奇威克(Robert Sedgewick)关于Coursera的课程。 该课程包括两个部分(
第1 部分和
第2部分 )。 如果链接突然更改,则您始终可以使用作者姓名在Google上搜索。 每个部分需要6周。 讲座在本周初开始,一周内仍需练习。 本课程的第一部分涵盖基本数据结构,排序的主要类型以及算法的复杂性。 第二部分已经更高级了,从图形开始到以线性编程和难处理性之类的东西结束。 考虑了以上所有内容后,我得出结论,这正是我所需要的。 顺便说一句,在这里好奇的读者可能会问,Google与它有什么关系。 确实,直到那一刻,他都与之无关。 但是我需要一个目标,因为没有目标很难在晚上进行12周的训练。 获得新知识的目的是什么? 当然,它们在实践中的应用。 在日常生活中,这是很成问题的,但是在一家大公司里接受采访很容易。 一个快速的谷歌显示,谷歌(对我的重言式感到抱歉)是欧洲(我认为是欧洲)最大的公司之一,在这些公司中进行了此类采访。 即,他们的办公室在瑞士苏黎世。 因此,我们决定-我们学习并接受Google的采访。
首次运行准备
12个星期没有引起注意,我完成了两个课程。 我对课程的印象不只是正面的,我可以向所有感兴趣的人推荐它们。 我喜欢这些课程的原因如下:
- 讲师英语说得很清楚
- 该材料结构良好。
- 华丽的演示文稿展示了每种算法的内幕
- 合适的材料选择
- 有趣的练习
- 在站点上自动检查练习,然后创建报告
我在这些课程上的工作通常如下。 1-2天,我听了讲座。 然后通过了对材料知识的快速测试。 一周的其余时间分多次进行了练习。 在第一个获得30-70%的分数后,随后的结果达到了97-100%的分数。 该练习通常由某些算法的实现组成,例如
Seam cutting或
bzip 。
完成课程后,我意识到很多知识就是很多悲伤。 如果以前我只是知道我什么都不知道,那么现在我开始意识到那是我不知道的。
由于仍然只有5月份,并且我计划在秋天进行一次面试,因此我决定继续接受教育。 在查看了职位空缺的要求之后,决定在两个方向上并行进行:继续研究算法并学习机器学习基础课程。 为了实现第一个目标,我决定从课程转向一本书,并选择了史蒂文·斯基埃纳(Steven Skiena)的经典著作《算法》。 开发指南”(算法设计手册)。 不像纳特那样具有纪念意义,但仍然如此。 为了第二个目标,我再次去Coursera并注册了Andrew Ng
机器学习课程。
又过了三个月,我完成了课程和书。
让我们从这本书开始。 尽管不容易,但阅读结果却很有趣。 原则上,我会推荐这本书,但不要马上推荐。 总的来说,这本书对我在课程中学到的内容进行了更深入的分析。 另外,我从正式的角度发现了启发式和动态编程之类的东西。 自然,我以前曾经使用过它们,但是我不知道它们的名字。 书中也有一定数量的作者生平故事(战争故事),这在一定程度上淡化了学术表现。 本书的后半部分可以省略,而是对现有问题及其解决方法进行了描述。 如果在实践中定期应用它会很有用,否则将立即被忘记。
该课程使我感到非常高兴。 作者很清楚自己的工作,并讲了一些有趣的故事。 另外,我从大学记得,有很多东西,即线性代数和神经网络的基础知识,所以我没有遇到任何特殊的困难。 课程结构是相当标准的。 该课程分为几个星期。 每个星期,讲座首先都会进行短期测试。 讲座结束后,将给出任务,该任务需要完成,发送并自动检查。 简而言之,课程清单如下:
-成本函数
-线性回归
-梯度下降
-功能缩放
-正态方程
-逻辑回归
-多类分类(一个对所有)
-神经网络
-反向传播
-正则化
-偏差/方差
-学习曲线
-错误指标(精度,召回率,F1)
-支持向量机(大幅度分类)
-K均值
-主成分分析
-异常检测
-协同过滤(推荐系统)
-随机,小批量,批量梯度下降
-在线学习
-地图缩小
-天花板分析
完成课程后,对所有这些主题都有了理解。 2年后,几乎所有事物自然都被遗忘了。 我向那些不熟悉机器学习并且想对下一步的基本知识有很好了解的人推荐它。
第一次跑
已经九月份了,该考虑一次采访了。 由于通过该网站提交的信息非常灾难性,因此我开始寻找在Google工作的朋友。 这个选择落在
datacompboy上 ,因为它是我直接知道的唯一一个(尽管不是个人)。 他同意转移我的简历,不久我就收到招聘人员的来信,信中准备在他的日历上预留一个空位以进行第一次对话,几天后,电话就打了。 我们尝试通过环聊进行交流,但质量很差,因此我们改用了手机。 首先,他们迅速讨论了该标准的方式,原因和原因,然后转向技术筛选。 它以“插入到哈希表中的复杂性是什么”,“您知道什么是平衡树”的精神包含了十二个问题。 如果对这些东西有基本的了解就不难了。 筛选进行得很顺利,并根据结果决定一周内组织第一次采访。
采访也是通过环聊进行的。 首先,他们谈论了我大约5分钟,然后继续困惑。 任务在图表上。 我很快意识到该怎么做,但是选择了错误的算法。 当我开始编写代码时,我意识到了这一点,并切换到了我添加的另一个选项。 面试官问了有关算法复杂性的几个问题,询问它是否可以更快。 我莫名其妙地变钝了,不能。 这时,它发生了,我们说了再见。 然后,大约10分钟后,我突然意识到,可以使用专门针对该任务的广度优先搜索来代替我使用的Dijkstra算法,这样会更快。 一段时间后,招聘人员打电话说,整个面试进行得很顺利,应该再安排一次面试。 同意在另一个星期后。
这次情况变得更糟了。 如果面试官第一次是友好而友善的,这次就有点阴郁了。 尽管我提出的想法原则上可以解决问题,但我无法立即解决问题。 结果,经过面试官的几点建议,我做出了一个决定。 这次再次证明是广度优先的搜索,只有几点。 我在时限内写下了决定,但忘记了边界案件。 一段时间后,招聘人员打来电话,说这次面试官不满意,因为在他看来,我需要太多提示(3或4条),并且在编写时不断更改代码。 根据两次采访的结果,如果我有这样的愿望,则决定不进一步讨论,而是将下一次采访推迟一年。 对于sim和说再见。
我对这个故事得出了一些结论:
- 理论很好,但您需要快速浏览
- 没有实践的理论将无济于事。 有必要解决问题并使代码编写自动化。
- 在很大程度上取决于面试官。 没什么可做的。
第二种方法的准备
考虑了这种情况后,我决定在一年后再试一次。 并略微修改了目标。 如果以前的主要目标是学习,而在Google上进行的采访就像是遥不可及的胡萝卜,那么现在通过采访是目标,学习是一种手段。
因此,制定了一个新计划,其中包括以下项目:
- 通过阅读书籍和文章继续学习理论。
- 解决500-1000件算法问题。
- 通过观看视频继续学习理论。
- 通过课程继续学习理论。
- 探索他人在Google面试的经历。
该计划由我在一年内完成。 接下来,我将描述我对每个要点所做的工作。
书籍和文章
我什至不记得我读过多少文章,我用俄语和英语都读过。 可能
这是最有用的网站。 这是带有代码示例的大量有趣算法的描述。
我读了5本书:算法,第4版(Sedgewick,韦恩),算法入门第3版(Cormen,Leiserson,Rivest,Stein),《破解编码面试》第4版(Gayle Laakmann),编程面试公开了第2版(Mongan,Suojanen) ,吉格勒(Giguere),《编程面试的要素》(Aziz,Lee,Prakash)。 它们可以分为2类。 第一本书包括塞奇威克和科尔曼。 这是一个理论。 剩下的就是面试的准备。 书中的塞奇威克讲述了与他的课程相同的事情。 只是书面形式。 如果您已经学习了该课程,那么仔细阅读毫无意义,但是无论如何您都应该忽略它。 如果您没有看这门课,那么阅读是很有意义的。 科曼对我来说似乎太无聊了。 他诚实地精通困难。 他只提取了
主定理 ,以及一些很少使用的数据结构(Fibonacci堆,van Emde Boas树,基数堆)。
一本准备面试的书至少值得一读。 它们都是基于大致相同的原理构建的。 他们描述了大型技术公司的面试过程,提供了计算机科学的基础知识,这些基础知识的任务,解决问题和分析解决方案。 在这三项中,我可能会建议将“破解编码面试”作为主要方面,其余部分则根据需要进行。
算法任务
这可能是最有趣的培训点。 当然,您可以坐下来愚蠢地解决问题。 有很多不同的网站。 我主要使用三个:
Hackerrank ,
CodeChef和
LeetCode 。 在CodeChef,任务是按复杂性而不是按主题划分的。 关于Hackerrank,无论是复杂性还是主题。
但是,正如我立即为自己发现的那样,还有一种更有趣的方法。 这些就是竞赛(编程挑战或编程竞赛)。 这三个站点都提供了它们。 没错,LeetCode存在问题-时区不舒服。 因此,我没有参加此站点。 Hackerrank和CodeChef提供了大量不同的比赛,比赛时间从1小时到10天不等。 不同的格式有不同的规则,是的,这可以讨论很长时间。 竞争良好的要点是在学习过程中引入竞争性(以及重言式)元素。
我总共参加了Hackerrank的37场比赛。 其中,有32项获得了评分,有5项得到了赞助(我什至在其中一项中获得了25美元)或由粉丝赞助。 在评分中,我输入了最高4%的10倍,最高12%的11倍和最高25%的5倍。 最好的结果是每3小时27/1459,每周22/9721。
当Hackerrank的比赛不那么频繁时,我改用了CodeChef。 我总共参加了5场比赛。 在为期十天的比赛中,最佳成绩是426/5019。
总共,在比赛之类的问题上,我解决了1000多个问题,这些问题符合计划的要求。 不幸的是,现在没有空闲时间可以继续竞争活动,也没有可以归因于非空闲时间的目标。 但这很有趣。 我建议那些对找到志趣相投的人感兴趣的人。 在一起或成组在一起更有趣。 我和这个朋友玩得很开心,所以也许进展顺利。
观看影片
从原则上看了斯基恩的书后,我对他的所作所为产生了兴趣。 像塞奇威克一样,他是大学的教授。 在这方面,您可以在网络中找到他课程的视频。 我决定参加
COMP300E-编程挑战-2009科大课程。 我不会说我真的很喜欢。 首先,视频质量不是很好。 其次,我没有尝试自己解决课程中遇到的问题。 因此参与程度不是很高。
另外,在解决问题的过程中,试图找到正确的算法,我遇到了Tushar Roy视频。 他曾在亚马逊工作,现在在苹果公司工作。 后来我自己发现,他有
一个YouTube频道 ,在其中发布了各种算法的分析。 在撰写本文时,该频道包含103个视频。 我必须说,执行过程中的分析非常出色。 我曾尝试看过其他作者,但不知何故。 因此,我绝对推荐该频道进行观看。
通过课程
然后,我没有做任何特别的事情。 我观看了来自Google的Android开发人员Nanodegree的视频,并观看了ITMO的“
如何赢得编码比赛:冠军的秘密”课程。 尽管我自然不会从那里学到任何新东西,但是完全可以想象到纳米度。 ITMO从理论上讲的课程有些混乱,但任务很有趣。 我不建议从此开始,但是原则上花时间在上面是有充分理由的。
探索他人的经历
当然,许多人都尝试使用Google。 有人击中,有人没有击中。 一些人写了有关此的文章。 在有趣的事情中,我可能会提到
这一 件事 。 在第一种情况下,一个人已经为自己准备了要成为一名软件工程师并加入Google所需学习的清单。 他最终进入了亚马逊,但这并不是那么重要。 第二本手册由Google工程师Larisa
Agarkova (
Larrr )
撰写 。 除了本文档,您还可以阅读
她的博客 。
阅读有关Glassdoor采访的反馈很有意义。 它们或多或少都相似,但是可以获取一些有用的信息。
我不会提供其他小文章的链接,您自己可以在Google中找到它们。
第二次
现在一年过去了。 事实证明,他对学习非常满意。 但是到了秋天,我有了更深的理论知识和实践技能。 在我准备工作的
最后期限之前还有几周的时间,当时突然有一封Google招聘人员的信挂在邮件中,问我是否仍然有为Google工作的愿望,以及是否想和他谈谈。 自然,我并不反对。 同意在一周内打电话。 我还被要求提供一份更新的简历,并在其中简要介绍了我这一年在工作中的工作原理。
聊了一辈子后,他们决定像去年一样,在一周内会进行环聊采访。 一个星期过去了,是时候进行面试了,但是面试官没有出现。 10分钟过去了,我已经开始变得紧张起来,突然之间有人聊天了。 事后发现,我的面试官由于某种原因无法出现,因此他被迫找人替代。 在设置计算机和进行采访方面,该人都没有做好准备。 但随后一切顺利。 我很快解决了问题,描述了哪里有花样,如何解决它们。 我们讨论了该问题的几种不同选择,即算法的复杂性。 然后他们又聊了5分钟,工程师告诉了他对他在慕尼黑工作的印象(他们在苏黎世没有看到紧急的接班人),于是他们分开了。
当天,一名招聘人员联系了我,并说面试非常好,他们准备邀请我去办公室面试。 第二天,他们通过环聊致电并讨论了详细信息。 由于我需要签证,我们决定在一个月内安排一次面试。
在准备文件的过程中,我与招聘人员讨论了即将面试的内容。 Google的标准面试包括4种算法和一项系统设计。 但是,由于我获得了Android开发人员的工作,所以被告知面试的一部分将针对Android的细节。 我不会动摇招聘人员的确切身份和细节。 据我了解,它是最近才推出的,他本人并不是很及时。 我还参加了两个培训课程:如何进行算法面试和如何进行系统设计面试。 这些会议具有中等实用性。 在那里,也没人能告诉我Android开发人员的要求。 因此,我本月的准备工作归结为以下几点:
- 购买白板并从内存中写出2-3种最流行的算法。 每天3-5件。 每个总计写了几次。
- 刷新我每天不使用的各种Android信息
- 观看一些有关“大规模”的视频
正如我所说,与此同时,我正在为旅行做文件。 首先,要求我提供数据以发出邀请函。 然后我花了很长时间试图找出塞浦路斯的谁来瑞士签证,因为瑞士大使馆不这样做。 事实证明,这是奥地利的领事馆。 我打电话预约了。 他们要求提供一堆文件,但没有什么特别有趣的。 照片,护照,居留证,一堆不同的证明以及自然而然的邀请函。 同时,这封信没有来。 结果,我选择了通常的打印输出,并且确实有效。 3, FedEx . FedEx'e , , , (5 , ). , , . , . , . , , .
, . . — . . , , . ( ) Google. Google . . - , «» Google. . - , , . 3 , 2 .
Android. . , . , . UI . , . RxJava, , . , , Android . . , Activity, . . 30-50 , Android , «, , ». - 3 . 即 - , .
. . , (shadow interviewer). . . , . - . - , , .
System Design, Android. . , , . , . Job Scheduler . , , , . . , , . . . , . Android . .
, . Google . , . . , , , .
- . , , ( ) . . , . , 5-10 . .
Android . , ?
. . , , . . « », « », « Z». - , , , , . , . . .
, . , , , . . . Google . , . , . .
, . , «a bit below the bar». . , 2 , 2 , System Design . 3 , , . .
, , , . Google .
结论
. , Google. 真伤心 , . , .
, , . . ( ), 8 . 但这是一个完全不同的故事。 , , Google , , 2 .
. IT, Google (Amazon, Microsoft, Apple ..). , - . , , . , , ( ) , , . , , . :)