程序员如何提问面试官(针对工程师、技术经理及CTO的提问指南)

导读:面试是工程师在职业生涯中总会碰见的问题。相信很多工程师对怎么回答面试官的问题已经有自己的总结。面试是双向的过程,面试官在面试你的过程中,你也在面试公司。你可以从面试中获取公司很多信息。本文作者总结了面试中针对不同面试官的不同问题。由高可用架构翻译,转载请注明出处。

程序员如何提问面试官(针对工程师、技术经理及CTO的提问指南)
文章图片


面试的时候,面试官通常最后会问:“你有什么问题吗?”,面试者往往回答说:“没有”。 如果这种情况总是发生在你身上,那么很有可能你对面试有一个非常片面的理解。专注于面试公司,因为他们同时也专注于面试您。那你应该问公司什么问题呢?

你会和谁谈?

在面试中,您通常会遇到三种角色。根据公司的规模,可能是一个人或多个人:

  • 软件工程师
  • 技术经理(技术负责人,中层管理人员)
  • 公司领导(副总裁,CTO,首席执行官,部门经理)

我将在下面列出针对这些不同角色的不同问题。我有时会对多个角色重复相同的问题,以了解和比较他们的答案。

针对软件工程师的问题

1、你怎么明确每天的工作?

这个问题的目的是确定是否有协作上的问题。我想从 2 - 3 名工程师那里得到答案。如果公司领导说他们遵循一定的过程,但工程师不会谈论这个过程,那就是协作问题的征兆。如果您从不同的工程师那里得到不同的答案,这是另一个工作协作问题的征兆。我对工程师实际的日常“如何做的事情”更有兴趣,而非工作过程的使用的标签。

2、用于版本控制的工具是什么?

使用良好的工具是好团队的特征。如果一个团队正在使用一个古老的版本控制系统,那么他们可能会使用一些其他过时的工具。此外,他们可能不重视投资良好的工具以实现工作效率增长。

3、在这里工作你喜欢什么?

正面的答案:我从我所做的工作中获得了满足。




4、你写单元测试吗?

(面试官:咳咳(尴尬),旁白由高可用小编贡献)

根据单位测试实践对工程团队作出结论时要小心。当我询问单元测试时,如果一个团队兴奋不已,这通常是一个好兆头。另一方面,如果他们不能解释为什么需要单元测试,或单元测试的缺点,这可能是盲目的教条主义。如果他们无法给出不写测试的理由(特别是像我们没有时间这一借口),那对我来说是一个糟糕的迹象。

  • 你喜欢单元测试还是集成测试?
  • 你有验收测试吗?
  • 你使用什么测试框架?你喜欢它吗?
  • 您的单元测试要运行多长时间?

5、你有持续集成吗?

好的软件开发团队使用 Jenkins,Travis 和 Buildbot 等工具。如果团队没有持续集成,我会尝试衡量他们是否熟悉这个概念。如果不是不熟悉,在我的经验中这是一个坏迹象。持续集成系统意味着团队可能相信自动化,这在我经验中通常是好迹象。

  • 当 CI 报告失败时,您的团队需要多长时间才能解决问题?
  • 你喜欢/不喜欢你的 CI 系统?
  • 您的 CI 运行一次需要多长时间?你会让他们更快吗?


6、你会观测你系统中哪些东西?

这是一个开放式问题,旨在了解该团队是否努力观测其软件。对于 Web 开发团队,答案往往侧重于性能指标,如服务器响应时间,请求吞吐量,用户数量,客户端响应等。但是讨论可以涉及到像不同语言的用户数量,浏览器崩溃,缓存命中/错失率以及无数其他主题。

如果团队没有花时间来观测,那可能是他们没有使用真实数据作为决策的指标。这可能是过早的优化。我重视一个根据真实的测量数据做出决策的团队(特别是关于绩效),这也适用于许多其他事情。

  • 您最重要的产品指标是什么?
  • 你使用什么观测系统? (例如,MixPanel,statsd 等)


7、如何查找和修复 bug?

一个强大的团队通常有专门的测试人员,与此同时团队的开发人员也专注于质量。一个真正强大的团队有令人印象深刻的自动化测试。有些团队太小而无法拥有专门测试人员,但这并不意味着他们是一个糟糕的团队。当我问这个问题时,我试着去感受他们的测试过程。他们是否总是火烧眉毛?他们是否有一个理智发现和优先考虑错误的过程?他们是否依赖用户查找 bug?

  • 如何优先处理错误?
  • 使用什么错误跟踪器? (和你讨厌什么)
  • 使用Excel来跟踪错误吗? (nooo!)
  • bug跟踪器有多少个bug?
  • 错误需要多长时间修复(最小/最大/典型)?


8、你使用什么协作工具?

根据我的经验,好团队使用大量的协作工具。他们经常使用聊天服务(Slack,IRC,HipChat,Jabber),代码审查服务(Gerrit,GitHub,GitLab,Review Board),当然还有电子邮件。我正在寻找每个人如何知道其他开发人员在做什么的方式。我并非在寻找细节,更多的是为了通识。此外,我希望看到同协作工具集成。最简单的例子是可以发送自动构建失败消息的电子邮件。 web-dev团队的另一个例子是自动化错误记录服务,当严重错误发生时或当关键指标跨越某个阈值时通知团队。


9、你使用什么框架?

我个人对框架的态度:

  1. 我喜欢现代的东西
  2. 我喜欢令我感到新奇的东西

所以如果一个团队在 Motif 中构建一个 AIX 桌面应用程序,我可能不感兴趣。但对你来说这可能是一个有趣的主题,你应该对自己的喜好有一个很好的了解。


10、我们什么时候可以尝试一起工作?

如果您想要清楚地了解与该团队合作的内容,那么请尝试与他们一起工作。我从来没有做过这件事,但我有一个朋友做过(有可能是故事)。我认为这是一个好主意。如果你想了解有关团队的任何事情,请和他们一起工作半天。当然这可能需要您签署 NDA。如果团队愿意考虑这个想法,我认为这是一个非常好的迹象。


11、你的下一个截止日期是什么时候?(由 Evan Farrer 撰写)

这个问题旨在让您更了解公司实际遵循的开发过程。这个问题本身并不能带来丰富的信息,但是当你提出这些问题时,事情会更加有趣:

  • 谁设定这个期限?
  • 你在最后的截止日期前完成工作了吗?如果没有,为什么不?

高质量的团队一致同意截止日期并设定该日期。任意修改的截止日期可能是工作协同出现问题的征兆,或者至少说明在确定时间表时工程师没有话语权。


12、建立新的开发环境需要多长时间?(作者 Evan Farrer)

这个问题有助于衡量公司在开发者体验方面付出的努力。新的开发人员需要几个小时,几天或几周的时间来设置计算机并准备开始编码?是自动还是手动?这将告诉您,团队在“支持活动”中的熟练程度(与编写软件无关,但有助于支持该目标)。团队是否认真对待这一问题?

针对技术经理的问题

1、你最后一次写代码是什么时候?

(面试官:咳咳(尴尬),旁白由高可用小编贡献)

我喜欢拥有强大技术背景的经理人。无意冒犯我的 MBA 朋友,但我真的喜欢那些和我有类似经历的经理。


2、你是怎么成为一名经理的?

我认为好的经理是发自内心的喜欢而非被迫成为经理。我喜欢管理人员专注于为他们的团队服务。我最喜欢的经理是那些专注于自己的团队改善而不是“管理”的人。他们认为自己是团队的帮手和保护者。他们有一种服务态度,他们会认为最重要的工作是让团队成员工作的更好。


3、你的工程师如何知道每天的工作?

既然我问了工程师同样的问题,我就会和经理的答案进行比较,看看他们是否匹配。如果不匹配,可能意味着有一些协作上的矛盾。工作中最可怕的问题是无法辨识的问题。我认为这是经理的工作,确定工作中的问题并解决它。


4、现在团队最大的挑战是什么?

他们通常回答说是工作人员短缺。因为这是一个显而易见的答案(他们毕竟是招聘),所以我想问第二大挑战是什么。我正在寻找像延迟时间表,产品质量问题和人际关系的问题。每个团队都有问题,所以你得到的答案取决于几个因素:

  • 经理对问题的意识
  • 经理是否诚实地对待你
  • 队伍中的问题的严重性


5、你如何衡量员工的个人表现?

熟练的经理将有很好的技术手段来做到这一点。当评估个别团队成员的表现时,最好的经理将会仔细收集整个团队的反馈意见。不好的经理将会根据自己的观察点作出评价,而不咨询小组。


6、你做正式的绩效面谈吗?

我喜欢为那些重视反馈意见并帮助团队成员改进的经理工作。绩效评估可能是痛苦,也可能是积极的过程。根据我自己的观察,我认为大多数人认为这一过程是痛苦的。一个真正伟大的经理将会明白这一点,并且将采取措施,以某种方式使绩效评估变得非常好,让您印象深刻,并希望为他们工作。

  • 你能告诉我一段时间你帮助某人提高他们的表现吗?
  • 在这些考核中你如何教导人?


7、你每年都会给下属调薪吗?

我想知道我的薪酬是否会根据我对公司的贡献进行调整,我们每年至少会对其进行一次官方的评估。对于这样的公司,我喜欢询问有关股权的问题。你会给我股票期权吗?你能每年给我更多的股票期权吗?

  • 你如何进行加薪预算?
  • 去年的中位数上涨是多少(百分比)?
  • 我可以期待一年以后多少工资?最好的情况,最坏的情况?

我不会将这些问题写入合同,这些问题也不会保证未来的加薪。相反,我想了解公司如何运作。我是需要用我的方式来要求加薪呢,还是有一个已经就位的标准过程?


8、我可以得到一些描述公司福利的资料吗?(供稿人:Evan Farrer)

我认为大多数人已经知道要问这个问题,但为了完整起见,值得一提。大多数公司都准备给你一堆纸或一个描述公司福利的网站。重要的是要知道,因为它通常是您很大一部分补偿。这可能只适用于美国。我不知道公司提供的医疗保险奖励在其他国家如何工作。


9、你会给员工排名吗?(供稿人:Matt Ryan)

一些公司将排名和奖金相关,通过排列每个员工,从最坏到最坏,使一定比例的员工进入“好”,“平均”和“坏“子列表。



  • 你真的认为X%的员工“坏”吗?这对你的招聘过程有什么看法? (这是一个大胆的问题 - 小心谨慎)
  • 你应用某种曲线来确定表现最好的人吗?
  • 您使用什么指标来对员工进行排名?
  • 您如何知道这些指标是否准确收集?
  • 您如何知道这些指标实际上是最佳表现?

针对公司领导层的问题

面试并不总是能碰到公司的高层领导(特别是对大公司来说),但是当有这样机会时候,我把它作为评估公司财务可行性的机会。我可能没有资格这样做,但有一些明显的问题,我有时可以通过面试发现它们。此外,我也想知道自上而下的文化是什么,因为这些信息可以告诉我公司如何重视工程师价值。

1、你们资金情况如何?

我正在努力了解公司背后的资金。我想知道他们是否由风险投资,私募股权,公共股票或通过收入自筹资金。通常我可以在面试前弄清楚这一点,但公司的领导层常常会给出一些通过 Google 或 CrunchBase 找不到的见解。


2、公司盈利了吗?

如果盈利了,太棒了!如果没有盈利,你们的盈利计划是什么?一些创业公司有盈利计划,而其他创业公司则通过收购或 IPO 寻找出路。


  • 过去几个季度/年的历史收入。它向上趋势吗?
  • 竞争风险,如竞争,意外费用和收入不足。
  • 跑道:在筹集更多资金前,公司可以运营多长时间。


3、你对外包有什么看法?

我申请的工作是否可能会在未来被外包,或者这项工作是否可以变成管理外包的工程师。



4、公司文化是什么?

这是另一个问题,我用来对应工程师与领导层的观点。我正在寻找里面不同的地方。如果领导和工程师观点接近,这表明了良好的从上到下的沟通。我想知道高层领导是否与海内外员工脱节。我也想看看领导层是否有远见,是否沟通良好。我喜欢的公司需要有一个强大的,共同的愿景。


5、你如何确保这个公司会取得成功的?

随着这个问题,我也会寻求真实的证据,而不仅仅是营销炒作的信息。如果高层领导给我实际的数字,如收入,市场规模和资本化,这是一个好兆头。此外,如果我可以从其他来源验证这些信息,那就更好了。另一方面,某些数字可能表示非常糟糕,公司的资金只够再烧一个月了。


6、告诉我你的汇报关系。

(面试官:这个面试者好霸气!旁白由高可用小编贡献)

对我来说,这个问题的最佳答案是一个简单的答案。如果该人可以画出一个解释汇报关系结构的简单组织结构图,我很满意。我个人的喜好是为小型,敏捷的公司工作,而组织和通信开销最小。您的偏好可能会有所不同。不管你喜欢什么,这个问题都是为了给你所需要的信息,以便对该公司做出明智的决定。

结论
面试是双向的。 如果您有幸获得 offer,请确保您的经验做出明智的决定。 祝你好运!

推荐阅读

  • 校长:技术成长四个阶段需要的架构知识
  • 我们如何用Cassandra每天存储上亿条线上数据
  • 为什么Slack等聊天工具不适合开源项目开发团队的沟通?


本文作者 Dave Smith,由 jesse 翻译,转载请注明出处,技术原创及架构实践文章,欢迎通过公众号菜单「联系我们」进行投稿。


高可用架构
改变互联网的构建方式
程序员如何提问面试官(针对工程师、技术经理及CTO的提问指南)
文章图片

长按二维码 关注「高可用架构」公众号
【程序员如何提问面试官(针对工程师、技术经理及CTO的提问指南)】

    推荐阅读