点击上方“3D视觉工坊”,选择“星标”

干货第一时间送达

来源@新智元

【导读】有位外国小哥在自己的博客上通过解答一道面试题,发布了自己在谷歌担任工程师和面试官的经验,分享了对于科技公司面试者的一些建议。

「金九银十」的求职季也只剩下了一个尾巴,不知道正在求职的你结果如何呢?

如果你是一名学生或者正在申请技术类的工作,希望你在读完这篇文章之后能够更好地应对即将到来的面试。

面试「脑筋急转弯」,你怎么答?

想象一个电话拨号盘,从某个位置开始只能以大写字母 「L」的形状移动: 水平移动两步,垂直移动一步,或水平移动一步,垂直移动两步:

假设您在键盘上只能使用这种方式来拨号,拨下一个键并进行下一跳。起始位置计算为正在拨号的键。

那么,从一个特定的起始位置开始,能以 N 跳的方式拨多少个不同的号码?

回答的套路:由浅至深的讨论

面试基本上分为两部分: 首先找到一个该问题的算法解决方案,然后面试者用代码来实现它。

在面试的整个过程中,面试官通常不是一个沉默的旁观者: 在松弛的环境中花45分钟设计和实现任何东西时间都不充足,更不用说在有压力的情况下了。

面试官通常会让面试者在讨论中发挥带头作用,产生想法,提出解决问题的实例等,但作者有时也非常乐意在正确的方向上给予对方推动。

面试者的水平越高,他倾向于给出的暗示就越少,但是作者还没有看到过一个候选人完全不需要他的参与。

作为一个面试官,通常不会坐视别人失败,「我想写尽可能多的积极的反馈,我会尽量给你机会让我写关于你的好东西,提示是我说:好吧,我给你一点提示」,只有这样才能让一些面试者继续前进,看看他们对问题的其他部分有什么看法。

话虽如此,作者希望面试者听到这个问题后的第一个行动应该是走到白板前,手工解决这个问题的一些小实例。

「永远不要一头扎进代码里!解决小的实例可以让你发现模式,观察和边缘情况,也有助于在你的头脑中明确解决方案」。

举个例子,假设起始位置从6开始,你有两跳的机会。则序列将会是:

以上总共有六个序列。如果试着用铅笔和纸来推导这些,总比只是盯着它静静地思考,会带来更好的结果。

黄铜答案:初级面试者通常给出的方案

Level 1:到达下一跳

作者作为面试官经常会感到惊讶的是,求职者经常会陷入计算键值的困境,其实恰恰可以从一个给定的位置跳到这个键值,也就是我们所说的邻居(neighbors)。

作者的建议是: 当有疑问的时候,可以写一个空的占位符,然后问面试官是否可以稍后实现它。

这个问题的复杂性不在于邻居的计算,而是如何很好地计算完整的数字,任何花费在邻居计算上的时间都被浪费掉了。

通常可以假设有一个函数会传给邻居值,如下图所示:

当然,这个空函数功能最终也是需要被实现的,但前提是面试剩余的时间还足够。

而且,如果问题的复杂性在其他地方的话,面试者通常不会因为要求使用空函数而被留下坏印象,面试官通常都会同意这种做法。

如果没有别的复杂问题,面试官还会要求面试者实际执行它。

至于这里的邻居函数,考虑到它从不改变,可以简单地创建一个 map 并返回相应的值:

Level 2:递归生成数字

不管怎样,我们来看看解决方案。也许你已经注意到这个问题可以通过列举所有可能的数字并计算它们来解决,可以使用递归来生成这些值:

这是一种非常普遍的想法。然而,生成的数字并没有真正的使用它们。这个问题要求的是数字计数,而不是数字本身。

一旦计算了一个数字,就再也不会重访它了。作为一般的经验法则,作者建议注意当解决方案计算一些不使用的东西时,在通常情况下可以把它删除,然后得到一个更好的解决方案。

钻石方案:高级一些的想法

Level 3:「不计数的计数」

怎样才能在不产生电话号码的情况下计算电话号码呢?请注意,从 n 跳中给定的起始位置生成的数字计数等于从 n 跳中的每个相邻位置生成的数字计数之和。

从数学角度来说,它是一个递推关系式,看起来像这样:       

有很多实现使用了这个公式的思想,但是让我们从我在面试中最常见的一个开始: 「朴素的递归方法」:

接下来这个问题会经常从面试中听到: 「这个解决方案的复杂度是多少」。对于那些不知道的人来说,O(N)复杂度是一种速率,一个解决方案所需的计算量随着函数输入大小的变化而增长。对于这个问题,输入的大小是跳数。

对于这种实现,每次递归调用 count _ sequences ( ) 至少两次,因为每个键至少有两个邻居。由于我们递归的次数等于所需的跳数,并且每次调用时计算 _ sequences ()的调用数量至少翻了一番,因此运行时的复杂度至少为指数级。

接下来通常的做法就是解决时间复杂度太高的问题。

Level 4:降低复杂度

为了找到下一个函数,让我们把这个函数调用的函数映射出来。让我们考虑 count _ sequences (6,4)的情况。注意: 为了简洁起见,使用 c 作为函数名:

注意这里 c (6,2)调用执行了三次,每次执行相同的计算并返回相同的值。这里关键的一点是,这些函数调用会重复调用,每次都返回相同的值。一旦你计算了他们的结果,就不需要重新计算了。

使用制表法可以解决这个问题 ,这基本上意味着我们可以记录之前看到的函数调用的结果,并使用这些结果来代替重复工作。

这样,当我们在调用图中遇到不必要地重新计算整个子树的位置时,可以立即返回已经计算的结果。下面是一个实现:

经过这样的处理,复杂度就已经降到了线性的结果。

这个解决方案依旧有一些不足之处,主要的缺点是它是递归的。大多数语言都对其调用堆栈的最大大小进行限制,这意味着总是需要考虑可以支持最大的跳数。

Level 5:动态规划

请注意,n 跳的结果仅依赖于 n-1 跳调用的结果。同时,缓存包含每个(非零)跳数的条目。

学过归纳法的人都知道,可以使用递推关系式归纳步骤,可以从零跳数的基本情况开始,并归纳推导出所有大于零的值。下面是它的一个实现:

还有没有比递归的深度优先解决方案更好的版本呢?不是很多,但也有一些。

首先,不是递归的意味着可以运行非常大的值而不会崩溃。

其次,使用常量内存,因为只需要两个固定大小的数组,而不需要不断增长的制表解决方案的缓存。

最后,仍然是线性时间复杂度: 可以在20秒内计算200,000跳。

在求职面试中设计和实现一个线性时间、常数空间的解决方案通常都会得到一个很好的结果。当作者使用这个问题进行面试时,经常给那些使用动态规划方案的面试者一个很好的反馈。

最后,作者还列出了为了准备面试和今后的工作你应该养成的习惯:

1.始终从手推一个小实例开始。

2.注意你的解决方案做的哪些计算是不必要的。

3.清楚地使用递归。

4.知道你解决方案的O(N)。

5.总是寻找机会来回忆,如:编写一个空函数。

现在正值「金九银十」和校招季,希望大家都能找到自己心仪的工作!

参考链接:

https://alexgolec.dev/google-interview-questions-deconstructed-the-knights-dialer/

本文仅做学术分享,如有侵权,请联系删文。

下载1

在「3D视觉工坊」公众号后台回复:3D视觉即可下载 3D视觉相关资料干货,涉及相机标定、三维重建、立体视觉、SLAM、深度学习、点云后处理、多视图几何等方向。

下载2

在「3D视觉工坊」公众号后台回复:3D视觉github资源汇总即可下载包括结构光、标定源码、缺陷检测源码、深度估计与深度补全源码、点云处理相关源码、立体匹配源码、单目、双目3D检测、基于点云的3D检测、6D姿态估计汇总等。

下载3

在「3D视觉工坊」公众号后台回复:相机标定即可下载独家相机标定学习课件与视频网址;后台回复:立体匹配即可下载独家立体匹配学习课件与视频网址。

重磅!3DCVer-学术论文写作投稿 交流群已成立

扫码添加小助手微信,可申请加入3D视觉工坊-学术论文写作与投稿 微信交流群,旨在交流顶会、顶刊、SCI、EI等写作与投稿事宜。

同时也可申请加入我们的细分方向交流群,目前主要有3D视觉CV&深度学习SLAM三维重建点云后处理自动驾驶、CV入门、三维测量、VR/AR、3D人脸识别、医疗影像、缺陷检测、行人重识别、目标跟踪、视觉产品落地、视觉竞赛、车牌识别、硬件选型、学术交流、求职交流等微信群。

一定要备注:研究方向+学校/公司+昵称,例如:”3D视觉 + 上海交大 + 静静“。请按照格式备注,可快速被通过且邀请进群。原创投稿也请联系。

▲长按加微信群或投稿

▲长按关注公众号

3D视觉从入门到精通知识星球:针对3D视觉领域的知识点汇总、入门进阶学习路线、最新paper分享、疑问解答四个方面进行深耕,更有各类大厂的算法工程人员进行技术指导。与此同时,星球将联合知名企业发布3D视觉相关算法开发岗位以及项目对接信息,打造成集技术与就业为一体的铁杆粉丝聚集区,近2000星球成员为创造更好的AI世界共同进步,知识星球入口:

学习3D视觉核心技术,扫描查看介绍,3天内无条件退款

圈里有高质量教程资料、可答疑解惑、助你高效解决问题

觉得有用,麻烦给个赞和在看~  

抓住「金九银十」的尾巴!技术面试如何准备,谷歌面试官亲授相关推荐

  1. 【剑指金九银十】今天来谈一下一份高质量「简历」是如何撰写出来的

    都说九月十月是跳槽的高峰期 (也有金九银十的说法),所以 近期 计划出一些 面试求职 相关的文章,如果 觉得不错,请点赞/留言,莫要白嫖~ 01. 简历是什么 我们在 上一篇文章 有过 「简历是一份工 ...

  2. 2021年的“金九银十”你准备好了吗?,腾讯、字节、百度、阿里、快手等一线互联网公司面试真题分享

    前言 职场的"金三银四"跳槽季过去了,但是紧接着,眼下"金九银十"又来了. 不同的是今年比往年「冷」一些,形式更加严峻一些,大家多多少少可能都听到或看到一些信息 ...

  3. 2021金九银十面试讴歌系列,Android面试不可不看的经验,android网络层框架设计实战

    技术博客或者github主页没有什么内容也写到简历里.记住技术博客或者github主页这一类的,本来都属于加分项,可有可无的,但是如果你写了,面试官誓必会满怀期待地点进去看,如果这个时候呈现给他的却是 ...

  4. 2022 年已经铜三铁四,金九银十还会有吗?

    大概率是没有了. 所谓金三银四,其实更多是针对于社招人士.一方面刚过完年,很多企业在这个时间会发放年终奖,拿了年终奖就跑是很多职场人的想法:另一方面企业开年一般都会有新的人员架构变动,或许会优化掉尾部 ...

  5. 快要“金九银十”了,你开始准备了吗?

    还有一个多月,就是"金九银十"的秋招热潮,前几天有个小伙伴去[字节跳动]面试,回来后跟我说了很多他面试的经过,我稍稍整理了一下,在这里分享给大家,希望能够对大家在面试时有一丢丢帮助 ...

  6. 面试宝典(一) - 让你不再错过“金九银十“的求职浪潮之简历包装篇

    文章标题 一: 简历的包装 (一):基础资料模块: (二):教育背景模块: (三):工作/实习经历模块: (四)求职意向模块: (五)掌握的技能模块: (六)项目经验模块: (七)技能证书模块: (八 ...

  7. 备战金九银十,Java研发面试题+答案整合PDF,走到哪刷到哪

    八月在即,马上就是"金九银十",又是跳槽招聘季.咱们这行公认涨薪不如跳槽加的快.但不建议频繁跳槽,还是要学会融合团队,抓住每个机会提升技能. 在这里给大家整理了一套各大互联网公司面 ...

  8. 金九银十,不要跳槽!

    前言: 又到了求职的金九银十的黄金月份,我相信有不少小伙伴已经摩拳擦掌的准备寻找下一份工作. 就目前国内的面试模式来讲,在面试前积极的准备面试,复习整个 Java 知识体系将变得非常重要,可以很负责任 ...

  9. 备战金九银十,阿里P8师兄指导完整攻略(附:学习资料+面试宝典+项目实战笔记)

    前言 还剩下两个月就到了金九银十,一般来说,秋招的含金量明显是高于春招的. 那么如何准备即将到来的面试热潮呢?运筹帷幄之后,决胜千里之外! 坚决不打毫无准备的仗是小编的原则:不论是笔试还是面试都是有章 ...

最新文章

  1. HOMEBREW安装之后需要需要把他安装到路径之中
  2. eclipse 在 Linux中常用命令,持续更新....
  3. C# 子类实例化基类 基类使用不了子类的方法_C#学习笔记11--接口/泛型
  4. 一个监测IIS,并定时重新启动的程序。
  5. QQProtect.exe(Q盾)
  6. 【转】WPF从我炫系列4---装饰控件的用法
  7. 安卓拍照上传php服务器,Android拍照上传至PHP服务器并写入MySql数据库(下)
  8. Eclipse编辑HTML,JSP,JS等时的卡顿问题,非常有效!!!
  9. __construct __destory __call __get __set
  10. Exchange2010部署 配置证书
  11. web 前端(轮番插件)
  12. 《Sanmill 直棋游戏》创作之旅
  13. ABB机器人指令列表分类详解
  14. 贪心高性能神经网络与AI芯片~学习笔记总计1
  15. 算法:什么是棒球游戏问题?
  16. cypress测试脚本_用 Cypress 拯救业务项目的前端自动化测试
  17. 鸿蒙太空是什么意思,“我所居兮,青埂之峰;我所游兮,鸿蒙太空。谁与我逝兮,吾谁与从?渺渺茫茫兮,归彼大荒”的意思...
  18. 求职简历中一些常见的问题
  19. 批处理文件rd \s\q **是什么意思?
  20. php 调取百度天气api

热门文章

  1. 开源中国git关联xcode操作步骤
  2. RedHat Enterprise Linux 5.0之LVM逻辑卷管理
  3. 如何保证MySQL和Redis的数据一致性?
  4. 快手二面:Java 里的 for (;;) 与 while (true),哪个更快?
  5. 8000字 | 32 张图 | 一文搞懂事务+隔离级别+阻塞+死锁
  6. 震惊!ConcurrentHashMap里面也有死循环,作者留下的“彩蛋”了解一下?
  7. 漫谈云计算、虚拟化、容器化--云平台技术栈05
  8. 百度程序员抱怨:告诉下家去哪里,才给批准离职!
  9. DBA很忙—MySQL的性能优化及自动化运维实践
  10. 谈谈SaaS创业和企业服务的常识