一些个人为美国公司远程工作的经验分享 -- 面试部分

本贴最后更新于 1664 天前,其中的信息可能已经时移世改

原贴地址: https://eleduck.com/posts/POGfvp

闲的没事儿接上期讲一讲 Toptal 或者其他工作的面试流程吧。上个帖子地址:https://eleduck.com/posts/ez1fgq

在北美,完全支持远程工作的公司很少。一般我们耳熟能详的,比如 Github,GitLab,Stackoverflow 等等。这些公司一般都只招聘 Senior 甚至更有资历的程序员。所以一般的国内开发很难加入到这样的团队中。另外,北美远程工作中有很重要的一点就是,他们对时区还是有很重要的要求的。并不是说,你是远程工作者,你就能在国内某个十八线小城市轻松拿着硅谷的工资赚汇率差了。一般就算是远程工作者,公司也会要求至少 4 到 8 小时的时间重合。也就是说,你应该是身处在北美或者南美时区的。当然,在哪个城市无所谓。当然了,考虑到某些特别的网络情况,所以总体而言在国内给一个合法正规的北美公司做远程这样的机会是比较少见的。更多的是国内背景的公司创始人可能会考虑招聘国内远程开发来降低用人成本。这点在电鸭这个平台应该也有很好的体现。而不管是否是远程工作者,对于一般的公司来讲,面试流程和正常坐班工作者不会有很大区别。所以想找到一个合适的远程工作机会,确实不容易。

这也是我选择 Toptal 的理由,因为 Toptal 本身严格的面试流程加上社区化的管理,使得你在 Toptal 这个平台上的面试流程会被大大简化。基本上 Toptal 上的公司不会再过多过问技术问题,只是聊一下公司文化是否符合,就可以轻松决定是否给你一个远程的工作合约。注意,Toptal 严禁开发和公司私自签订任何雇佣合同,不管是合同工还是全职工,而 Toptal 本身只提供合同工机会,所以所有上面的工作都是以合同工的形式出现的。也就是说,你所有的工作都是以每小时计时,而不是年薪,也不包括任何福利,股票,等等。但是 Toptal 本身好的一点是,它保证你的收入,因为你的工资是 Toptal 发给你的,所以你不用担心企业拖欠你的工作报酬。企业拖欠的话,也是 Toptal 受到损失,而不是你。这是我非常看重的一点。

然后就讲一讲面试流程好了。上一个帖子说到了,第一个面试是英语。针对开发者,接下来还有三轮面试。

首先是一个在 Codility 上的在线解题测试。一共三道题,每道题 100 分。Codility 会做准确率测试和优化测试两种测试,一般每种测试各占 50 分。当然有的题目不适合做优化(速度)测试的话,那么准确率测试会占到 100 分。三道题一共 300 分,拿到 210 分以上就可以过关。题目都是英文描述,主流编程语言都支持。这个没什么好说的,就是 leetcode。当然了,边写题边 Google 也没人管你,如果能找到原题,那么恭喜你白拿 100 分。答题结束以后,Toptal 会给你一封邮件,让你选择一个时间进行接下来的面试。原则上说如果你不到 210 分是不能下一轮的,但是我有个朋友只得了 180 分也让他进行下一轮了,不是很懂发生了什么。

下一轮,是和一个 Toptal 平台上的 Senior 开发做视频面试,面试者都是随机分配的。内容就是在两个十五分钟之内快速写完两个方程。这里要强调快速是因为他只看准确率,而不看优化。每个方程给最多 15 分钟的时间,语言任选,在线上 REPL 或者本地 IDE 或者终端写都无所谓,你需要分享你的屏幕给面试者,他会看着你写。15 分钟很严格,不能超时。不过题目不会是很难得题,一般就是 Leetcode 里面简单难度的题。写完以后对方会当场给你几个简单的测试,全过就是过了。我当时全过的所以我不太清楚如果只过部分会是什么结果,这个还真的看面试者心情。当然了,如果时间内没写出来的话,肯定是挂的。另外,有可能在面试开始前,如果你上一轮在线测试不到 210 分的话,面试者可能会跟你探讨一下上面的题目,看看你的思路等等。这是我朋友遇到的情况,不过因为朋友没有在 15 分钟之内写出来题目,所以挂在这轮了。当然就算你过了 210 分他还是可能会问你思路的。

说句题外话,Toptal 上大多数都是欧洲人,所以斯拉夫口音非常重,印度人来面试的不多,所以去 Toptal 上面试要适应一下俄罗斯口味的英语。

如果上一轮快速写代码的测试过了的话,最后一轮是写一个 APP。这轮说难不难说简单不简单。这个 APP 一般要求有用户登陆和注册页面,要求有不同的用户组,不同的权限。再加上两到三种不同的数据,做一些列表,实现每种列表的 CRUD 功能。网页或者手机 APP 都可以。比如说,用户 -> 发帖 -> 评论 这样的列表关系。用户只能更新或者删除自己帖子,也能删除自己帖子下的评论但是不能更新,也能删除或者更新自己在别的用户下的评论。超级管理员可以增删查改用户,增删查改评论,增删查改发帖,同时也能给予或者移除一个用户的权限等等。有时候会有三种权限,比如普通用户,管理员用户,Root 管理员用户等等。反正会是一个很符合实际逻辑的小应用。会有最多两周的时间来完成。如果是手机应用的话,可以用 Firebase。网页应用的话,从前端到后端要自己完成,不用放在服务器上。UI 自己设计,不作要求,但是不能一点儿 CSS 没有,基本上简单的 Materials,Bootstrap,jQuery UI 或者 AntD 就可以满足需求了。如果什么地方要求描述不清的话一般可以自由发挥,只要符合实际即可。

完成了以后,需要再约另一个面试者,也是 Toptal 上的 Senior 开发。他会要求你本地启动 APP,然后完成演示功能。再让你打开代码,随机问你一些实现方式,如果你有任何非主流的实现方式或者安全漏洞。他会和你探讨,或者询问。这一轮基本上是面试你的实际写代码能力。如果有一些简单的需求实现没有完成的话无伤大雅。比如我当时就忘了实现一个列表对日期的筛选,但这些都是小事情。他主要考察,一方面你实现某些功能的方式是否足够安全,实现方式是否主流。一方面你的代码风格,架构,是否使用了合理的框架,数据库实现是否合理。一方面你是否能按需求独立完成一个应用。这些主要体现在,用户登陆认证结构设计,请求的权限管理结构设计,数据库的结构设计等等。如果你用 ORM 的话,是否会被 SQL 注入等。还有安全方面的,是否会被 XSS 攻击,是否使用了 HTTPS,如何应对 DDoS 攻击,如何应对爬虫等等。考察的算是比较全面的了。

最后如果你全都通过的话,那么你就正式加入了 Toptal,下次我会更新加入了 Toptal 以后开始工作的一些经验。

  • 电鸭
    10 引用 • 27 回帖
  • 远程工作
    22 引用 • 107 回帖 • 3 关注
  • 面试

    面试造航母,上班拧螺丝。多面试,少加班。

    325 引用 • 1395 回帖
  • 英语
    36 引用 • 154 回帖 • 1 关注

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...
  • tracverson

    请问这样在国内找到海外的远程工作难不难(在国内办公,拿美元工资),曾经留学过伦敦,普通交流没有问题,目前在做后端,前端也会一点

    ,另外想问的是,这样的工作机会一般在哪可以找到?国外的远程工作平台?

    听说找这样的工作,工资是国内同等技术水平的好几倍,不知道是否是真的呢?我工作经验目前有 7 年

    恳切期盼楼主的答复

推荐标签 标签

  • jsDelivr

    jsDelivr 是一个开源的 CDN 服务,可为 npm 包、GitHub 仓库提供免费、快速并且可靠的全球 CDN 加速服务。

    5 引用 • 31 回帖 • 58 关注
  • QQ

    1999 年 2 月腾讯正式推出“腾讯 QQ”,在线用户由 1999 年的 2 人(马化腾和张志东)到现在已经发展到上亿用户了,在线人数超过一亿,是目前使用最广泛的聊天软件之一。

    45 引用 • 557 回帖 • 67 关注
  • Gzip

    gzip (GNU zip)是 GNU 自由软件的文件压缩程序。我们在 Linux 中经常会用到后缀为 .gz 的文件,它们就是 Gzip 格式的。现今已经成为互联网上使用非常普遍的一种数据压缩格式,或者说一种文件格式。

    9 引用 • 12 回帖 • 134 关注
  • 星云链

    星云链是一个开源公链,业内简单的将其称为区块链上的谷歌。其实它不仅仅是区块链搜索引擎,一个公链的所有功能,它基本都有,比如你可以用它来开发部署你的去中心化的 APP,你可以在上面编写智能合约,发送交易等等。3 分钟快速接入星云链 (NAS) 测试网

    3 引用 • 16 回帖
  • Jenkins

    Jenkins 是一套开源的持续集成工具。它提供了非常丰富的插件,让构建、部署、自动化集成项目变得简单易用。

    53 引用 • 37 回帖
  • 单点登录

    单点登录(Single Sign On)是目前比较流行的企业业务整合的解决方案之一。SSO 的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

    9 引用 • 25 回帖
  • Firefox

    Mozilla Firefox 中文俗称“火狐”(正式缩写为 Fx 或 fx,非正式缩写为 FF),是一个开源的网页浏览器,使用 Gecko 排版引擎,支持多种操作系统,如 Windows、OSX 及 Linux 等。

    8 引用 • 30 回帖 • 407 关注
  • wolai

    我来 wolai:不仅仅是未来的云端笔记!

    2 引用 • 14 回帖
  • Openfire

    Openfire 是开源的、基于可拓展通讯和表示协议 (XMPP)、采用 Java 编程语言开发的实时协作服务器。Openfire 的效率很高,单台服务器可支持上万并发用户。

    6 引用 • 7 回帖 • 94 关注
  • RYMCU

    RYMCU 致力于打造一个即严谨又活泼、专业又不失有趣,为数百万人服务的开源嵌入式知识学习交流平台。

    4 引用 • 6 回帖 • 51 关注
  • C++

    C++ 是在 C 语言的基础上开发的一种通用编程语言,应用广泛。C++ 支持多种编程范式,面向对象编程、泛型编程和过程化编程。

    107 引用 • 153 回帖
  • 创造

    你创造的作品可能会帮助到很多人,如果是开源项目的话就更赞了!

    179 引用 • 995 回帖
  • OkHttp

    OkHttp 是一款 HTTP & HTTP/2 客户端库,专为 Android 和 Java 应用打造。

    16 引用 • 6 回帖 • 62 关注
  • OnlyOffice
    4 引用 • 3 关注
  • 设计模式

    设计模式(Design pattern)代表了最佳的实践,通常被有经验的面向对象的软件开发人员所采用。设计模式是软件开发人员在软件开发过程中面临的一般问题的解决方案。这些解决方案是众多软件开发人员经过相当长的一段时间的试验和错误总结出来的。

    200 引用 • 120 回帖
  • Lute

    Lute 是一款结构化的 Markdown 引擎,支持 Go 和 JavaScript。

    25 引用 • 191 回帖 • 16 关注
  • Ubuntu

    Ubuntu(友帮拓、优般图、乌班图)是一个以桌面应用为主的 Linux 操作系统,其名称来自非洲南部祖鲁语或豪萨语的“ubuntu”一词,意思是“人性”、“我的存在是因为大家的存在”,是非洲传统的一种价值观,类似华人社会的“仁爱”思想。Ubuntu 的目标在于为一般用户提供一个最新的、同时又相当稳定的主要由自由软件构建而成的操作系统。

    125 引用 • 169 回帖 • 1 关注
  • Log4j

    Log4j 是 Apache 开源的一款使用广泛的 Java 日志组件。

    20 引用 • 18 回帖 • 31 关注
  • 安全

    安全永远都不是一个小问题。

    199 引用 • 816 回帖 • 1 关注
  • MongoDB

    MongoDB(来自于英文单词“Humongous”,中文含义为“庞大”)是一个基于分布式文件存储的数据库,由 C++ 语言编写。旨在为应用提供可扩展的高性能数据存储解决方案。MongoDB 是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似 JSON 的 BSON 格式,因此可以存储比较复杂的数据类型。

    90 引用 • 59 回帖 • 1 关注
  • Solo

    Solo 是一款小而美的开源博客系统,专为程序员设计。Solo 有着非常活跃的社区,可将文章作为帖子推送到社区,来自社区的回帖将作为博客评论进行联动(具体细节请浏览 B3log 构思 - 分布式社区网络)。

    这是一种全新的网络社区体验,让热爱记录和分享的你不再感到孤单!

    1434 引用 • 10054 回帖 • 490 关注
  • golang

    Go 语言是 Google 推出的一种全新的编程语言,可以在不损失应用程序性能的情况下降低代码的复杂性。谷歌首席软件工程师罗布派克(Rob Pike)说:我们之所以开发 Go,是因为过去 10 多年间软件开发的难度令人沮丧。Go 是谷歌 2009 发布的第二款编程语言。

    497 引用 • 1387 回帖 • 283 关注
  • GitLab

    GitLab 是利用 Ruby 一个开源的版本管理系统,实现一个自托管的 Git 项目仓库,可通过 Web 界面操作公开或私有项目。

    46 引用 • 72 回帖
  • JRebel

    JRebel 是一款 Java 虚拟机插件,它使得 Java 程序员能在不进行重部署的情况下,即时看到代码的改变对一个应用程序带来的影响。

    26 引用 • 78 回帖 • 664 关注
  • RabbitMQ

    RabbitMQ 是一个开源的 AMQP 实现,服务器端用 Erlang 语言编写,支持多种语言客户端,如:Python、Ruby、.NET、Java、C、PHP、ActionScript 等。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。

    49 引用 • 60 回帖 • 362 关注
  • Postman

    Postman 是一款简单好用的 HTTP API 调试工具。

    4 引用 • 3 回帖 • 3 关注
  • FreeMarker

    FreeMarker 是一款好用且功能强大的 Java 模版引擎。

    23 引用 • 20 回帖 • 463 关注