14个重要的GitHub面试问题 *

最好的GitHub开发人员和工程师可以回答的基本问题. 在我们社区的推动下,我们鼓励专家提交问题并提供反馈.

现在就聘请一名顶级GitHub开发人员
Toptal logo是顶级自由软件开发人员的专属网络吗, designers, finance experts, product managers, 和世界上的项目经理. 顶级公司雇佣Toptal自由职业者来完成他们最重要的项目.

Interview Questions

1.

[开发人员领导]哪些分支可以设置为存储库中的主分支, 主要分支有什么特别之处? 如何保持存储库分支的整洁?

View answer

By default, master is the main branch. Historically, the gh-pages 布兰奇也曾受到特殊待遇,但现在已经不是了.

任何分支都可以成为存储库中的主分支. 主分支的特殊之处在于,它是克隆存储库时将检出的默认分支, 和默认的拉请求将被发送.

为了保持分支的整洁,您可以删除那些完全合并到默认分支中的分支 Branches settings page.

2.

[开发者领导]GitHub在合并拉取请求时提供三个选项: Create a merge commit, Squash and merge, or Rebase and merge. 什么时候你可能需要使用它们?

View answer

Using the Squash and merge 选项是保存一个整洁的主分支历史的好方法. 原子提交通常在开发特性或修复错误时非常有用, 但是在将完成的工作合并到主分支时并不总是必需的. 然而,一个人应该只使用 Squash and merge 当被拉的工作形成一个真正有凝聚力的整体时.

The Rebase and merge 选项也有利于整洁的提交历史, 因为一些维护者希望在构建特性时保留原子提交, 但发现合并提交嘈杂或不美观. However, after a Rebase and merge,在特性分支中合并任何进一步的工作可能会有问题. 这可能不是问题, 因为如果合并的代码中出现任何问题,总是可以简单地启动一个新的特性bug修复分支.

When in doubt, Create a merge commit 总是一个好的、安全的选择吗. 虽然它创建了一个额外的提交,有些人可能认为是不必要的, 原子提交及其散列将从分支中保存.

3.

[操作]为了让命令行脚本代表用户执行操作,你需要什么.g., 当用户的帐户受到双因素身份验证保护时,克隆存储库(作为持续部署任务的一部分)?

View answer

You can use a personal access token. You should use a unique, 每个脚本都有良好记录的标记,以便可以分别撤销和重新生成它们, if necessary.

申请加入Toptal的发展网络

并享受可靠、稳定、远程 自由GitHub开发工作

Apply as a Freelancer
4.

[操作]GitHub集成了很多工具, 但是假设您想登录自定义系统——开发人员每次向存储库提交新提交时都要登录. 你会怎么做呢?

View answer

GitHub提供api REST and GraphQL layouts.

这个问题中的需求可以通过轮询其中任何一个api来满足, 但正确的实现应该使用GitHub的 webhooks 在系统中的某个端点触发操作.

5.

[开发]当你使用一个存储库的SSH URL推送一个提交到GitHub, 您不必在每次推送时提供您的用户名和密码. GitHub怎么知道是你?

View answer

这有两个部分:

  1. 您使用GitHub的每台机器都可以访问私钥,即 已连接到您的帐户.
  2. GitHub uses the commit’s email address, 哪个是在本地存储库级别上设置的, 或者在给定机器上的全局存储库之间.
6.

[开发/运营]使用GitHub Pages托管应用程序的好处和局限性是什么?

View answer

Some benefits are:

Limitations include:

  • 无需服务器端计算. (这是一个限制,但不是一个严格的缺点,因为它强制分离真正的静态资产的关注点.)
  • 无法控制缓存、授权或任何其他HTTP标头
  • Various soft limitations 这使得它可能不适合商业应用.
7.

[开发人员领导]代码审查者的回应有哪些选择? 对于每个选项,解释审稿人何时会使用它.

View answer

The options are Accept, Comment, or Request Changes. 使用这些选项的方式是特定于组织商定的程序的, but generally speaking:

  • Comment 是为了需要更多的讨论或者没有明确的结论. 这是为了留下未解决的反馈.
  • Accept 意味着不需要更改,或者只有不需要进一步审查的最小更改.
  • Request Changes 通常意味着需要进行更改才能接受提交, 并且在做出这些更改后,应该重新提交审查.

有关更多信息,请参见 GitHub的“审查拉取请求中的拟议更改”帮助文档.

8.

【欧博体育app下载】有很多方法可以使用GitHub作为客户参与策略的一部分.

假设您正在使用敏捷方法启动一个项目. 您打算使用定期的客户反馈会话在迭代中完成工作. 你会使用哪些GitHub工具, 你如何向你的客户解释这些工具的用途?

View answer

这里可以提供一系列的答案,但答案应该是 definitely mention issues. 问题不仅仅是bug报告. 开发人员可以使用问题来跟踪和共享单个工作单元的进度. 关于这些单元的讨论也可以在问题中异步进行. 客户应该知道工作将在这些中指定 issues,以及在问题中沟通的期望应该是什么.

此外,答案可以提到每个人的优点和缺点 projects and milestones features.

A project 是否可以用于计划并确定在给定迭代中要完成的工作的优先级, 可能跨存储库.

A milestone 是否可以用于对给定存储库中的相关问题进行分组和优先排序. 里程碑的一个优点是能够设定预期的日期, 尽管项目提供了按状态组织和跟踪问题的功能. 受访者可能还会提到与GitHub集成的其他工具, such as ZenHub, 添加了速度跟踪等功能.

请注意,一些项目所有者对于是否应该邀请客户参与实际的内部开发计划和跟踪工具有不同的意见, 或者是否应该有一些不涉及技术细节的中间项目计划沟通工具. 有分歧没关系. 这个问题的目的是作为一种思维练习, 并引出受访者对此事的感受.

9.

【欧博体育app下载】当你开始一个项目时,你想保持代码的私密性. 对于开源项目,组织帐户是免费的, 而个人账户的私有存储库是免费的. 对于许多项目,从私有的个人存储库开始就足够了. 您可能希望何时或为何迁移到付费组织帐户?

View answer

主要原因与团队规模或管理灵活性有关. You can 你的私有存储库中有合作者吗, 但只能有一定数量的合作者.

超过这个数额,你必须升级你的帐户. However, 将个人帐户升级为拥有无限合作者的帐户仍然比组织帐户便宜.

组织帐户的主要优点之一是,您可以对存储库访问和帐户安全性进行更细粒度的控制.

同样重要的是,您可以分担管理负担:对于个人存储库, 只有所有者可以更改存储库设置. 可以对组织进行配置,使其他团队成员也成为管理员.

10.

【欧博体育app下载】你可以采取哪些步骤来确保你的GitHub账户的安全?

View answer

这里有许多方法,但至少有一些值得选择的方法 mention 设置双因素身份验证(2FA). 候选人可能还会注意到,2FA也可以配置为组织协作者的需求.

其他可能提到的事情有:

  • 清除帐户中未使用的密钥对
  • 确保对您的帐户具有密钥对访问权限的计算机的安全性
  • 最小化并定期检查连接到您的帐户的访问令牌和部署密钥

GitHub有一些建议 as well.

11.

【欧博体育app下载】你如何在提交时关闭一个问题? 否则为什么要引用提交中的问题?

View answer

Mention Closes #... 在提交消息中的任何地方,其中 ... 被存储库中的问题号所替换. 如果问题所在的存储库与提交的存储库不同,则使用 关闭用户名/库#... in the commit message.

Any time a user 指提交消息中的问题, GitHub从它提到的问题直接链接到提交. 使用提及作为一种构建相关或受影响提交的易于遍历的“书面记录”的方法是很有用的.

12.

Git Flow和GitHub Flow分支模式有什么不同? GitHub如何启用后者?

View answer

这里有各种各样的答案, 但有些事情应该提一下:

  • Git Flow是围绕发行版组织的, 在任何时候都有可能有大量的开发工作没有被批准投入生产. 另一方面,GitHub Flow假定主分支总是为部署做好准备.
  • 在GitHub Flow中,主分支和开发分支之间没有严格的分离. 这使得热修复之类的东西变得多余,因为热修复分支只是主分支之外的另一个分支.
  • 无论分支模式如何,都应该遵循围绕代码审查和自动化测试的良好开发实践,但在采用GitHub Flow时尤为重要. 这是因为它们增加了对特定更改不会对生产分支造成严重破坏的信心. GitHub通过两种方式鼓励开发人员采用这些良好实践来帮助解决这个问题:它使分支和拉请求讨论对项目参与者来说变得容易和透明, 它还将持续集成工具集成到拉取请求中.
  • 使用GitHub不需要使用GitHub Flow工作流, 它也不禁止Git Flow, 或者任何其他分支工作流.
13.

【欧博体育app下载】你正在处理一个项目,它被分割成几个私有存储库. 您正在将项目的某些方面外包给一家咨询公司,该公司有几个工程师需要访问项目的存储库. 您将如何管理这些工程师的访问权限,同时保护存储库其余部分的隐私?

View answer

You can add collaborators 从您的组织外部直接到存储库.

然而,它可能是更好的创造 teams, as you can 管理团队成员 与团队存储库访问分开. 团队成员被添加为组织的成员,因此仔细考虑这一点很重要 跨组织的访问权限 overall. For example, in the Member privileges 设置时,您可能希望将组织成员的基本权限更改为 None,然后根据需要向每个存储库添加相关的团队.

14.

[开发者领导/项目管理]GitHub提供了什么功能来确保高质量的问题提交到您的存储库?

View answer

Github provides issue templates 用于存储库或组织管理人员在有人提交问题时应该遵循的特定结构.

其他可能有帮助的事情:

但是通常没有什么比熟悉项目和指导新贡献者完成整个过程的人更好的了.

面试不仅仅是棘手的技术问题, 所以这些只是作为一个指南. 并不是每一个值得雇佣的“A”候选人都能回答所有的问题, 回答所有问题也不能保证成为A级考生. At the end of the day, 招聘仍然是一门艺术,一门科学,需要大量的工作.

Why Toptal

厌倦了面试候选人? 不知道该问什么才能让你得到一份好工作?

让Toptal为你找到最合适的人.

现在就聘请一名顶级GitHub开发人员

我们的GitHub开发者独家网络

希望找到一份GitHub开发人员的工作?

让Toptal为你找到合适的工作.

作为GitHub开发人员申请

工作机会从我们的网络

提出面试问题

提交的问题和答案将被审查和编辑, 并可能会或可能不会选择张贴, 由Toptal全权决定, LLC.

*所有字段均为必填项

寻找GitHub开发人员?

Looking for GitHub Developers? 看看Toptal的GitHub开发者.

João Dias Barbosa

自由GitHub开发人员

PortugalToptal Member Since April 4, 2014

jo是一位充满激情的iOS和Android开发者. 注重细节, 他创造了许多伟大的应用程序,并为数百万用户交付了许多项目, 无论是初创公司还是大公司. jo在后端和API集成方面做了大量工作. 积极的态度使他能够在自己和团队中创造.

Show More

David Braun

自由GitHub开发人员

United StatesToptal Member Since March 10, 2014

David是一位资深的软件工程通才,拥有区块链和安全方面的经验. 经过两年的管理培训,有较强的沟通能力, 他擅长将业务需求与现代技术相结合. His EECS degree from U.C. 伯克利分校证明了他的技术深度. David目前的激情是建立在他作为领导者的经验之上,通过行业最佳实践最大化团队效率.

Show More

Andreas Geffen Lundahl

自由GitHub开发人员

SwedenToptal Member Since January 20, 2016

Andreas是一位注重产品的软件工程师,对创业公司充满热情. 对产品的投入和对代码的投入是一样的, Andreas努力做出让用户和其他开发人员都满意的健壮的贡献. 作为一名团队成员,他渴望分享知识,改进流程,并向同事学习.

Show More

Toptal Connects the Top 3% 世界各地的自由职业人才.

加入Toptal社区.

Learn more