面试某人的一般Unix技能[关闭]


20

您将如何测试声称拥有* nix shell经验的开发人员(为清楚起见,我们不想测试某人是否可以在* nix上进行开发,仅测试他们是否了解命令行方式)。

我当时正在考虑让它们解决从日志文件中获取信息的问题,这将涉及cat,grep,cut,...等一些基础知识,再加上管道。

您还要求什么其他基础知识?再一次,这不是采访将要针对* nix系统开发的人,也不是针对* nix系统管理员的面试,而是针对经常需要在* nix系统上做一些工作的普通开发人员。


对于任何已经了解编程语言的人来说,这种外壳培训都是蛋糕。从那时起,人们何时会在意简历是否使受访者更真实?它一直在发生。对我来说听起来很小。
Yam Marcovic

@YamMarcovic-当您说“让真相显得更令人愉悦”时,您是在说“宣称他们没有的技能水平”吗?如果您愿意,我想说在面试中找出这点很重要。如果他们撒谎闯入大门,一旦进入屋内,人们怎么能信任他们呢?
瓦汀2011年

@Vatine因为至少从我的经验来看,每个人都过分夸大了简历中的技能水平。如果您取消了这些人员的资格,您将只能雇用那些教条式的诚实或幼稚的人员。少了很多选择。
Yam Marcovic

Answers:


13

根据我的个人经验,开发* nix系统的开发人员需要了解:

  • shell变量(如何设置/获取+有关特殊变量(如PATH)的知识)
  • Shell重定向(捕获程序的输出)
  • 管道(从日志文件中提取一些信息是一个很好的例子)
  • 过程控制(ps,好/好,杀死)
  • 文件访问权限(ls / chmod / chown / chattr)
  • 用户(但主要是在文件/进程的上下文中,即:该进程是否可以访问该文件?为什么可以/不能?)

...作为奖励:

  • 启动/停止系统服务

这种技能可以轻松完成大多数与开发人员相关的任务。


好答案。哪些命令用于启动/停止系统服务?
蒂姆(Tim)

11

自从我开始工作以来与众多同事的经验来看,没有人愿意伪造Unix知识:他们“ 知道命令行的方式 ”,或者干脆说“没办法!”。

只是问问候选人是否愿意在Unix工作站上工作,然后让他告诉你他可以接受bash培训的程度。他最终将命名一些命令。最明显的是cdcatmore或者lessvi或者emacsgrepawksed。仔细听他是否提起man

如果是为了发展,他应该熟悉make和Makefile文件,以及一些源代码控制命令行界面(svngitcleartoolhgcvs...)


4
我知道man,每当Google无法提供帮助时,我都会使用它,但我永远不会将其显示在命令列表中……
Mehrdad

3
man是离线时学习UNIX命令行和C库的最有效方法。顺便说一句,当最高级的互联网搜索工具是telnet archie.cs.mcgill.ca
mouviciel


@mouviciel:当您在线时,这也是最有效的了解unix命令行的方法,因为如果您询问他们有关命令的详细信息,大多数论坛都会“有帮助”地告诉您rtfm。如果手册页没有令人难以置信的混乱并且很难浏览文档,这应该可以。幸运的是有stackoverflow!
Joren

我不知道 我过多地使用了手册页,一旦习惯了它,就永远不会遇到任何问题。找到您想要的东西真是小菜一碟。您可以找到各个部分,也可以看到“另请参见”,然后单击一下按钮就可以搜索整个内容。您会获得每个命令和每个系统调用的手册页,以及许多库调用。我会说手册页是让我如此热爱UNIX的原因。
Yam Marcovic

10

为什么这样

* nix外壳程序(以及其他OS外壳程序,fwiw)是非常广泛的工作环境。有人可能会在那里花费数年的时间而仅使用很小一部分弹壳的能力。

如果您不希望其他人使用a)shell程序,或b)从shell管理系统,那为什么重要呢?任何要做的事情都将处于一个基本的水平,以至于方便的* nix备忘单将足以弥补“技能的不足”。


这是诚实检查。如果有人在自己的履历上放了unix的经验(我们并不需要),我希望能够检查那些声称的技能是什么。如果您只能使用cd和ls,则不应声称拥有unix体验imo。
Christophe Vanfleteren 2011年

好吧,然后我问他们使用了哪些Unix系统,并让他们列出了Unix系统与可能的Linux / Mac之间的差异
johannes

1
@Christophe-好吧,这是交易...没关系,因为它们可能对您不起作用。当潜在的雇主开始像这样愚蠢的特技,因为他们不信任简历上的内容时,这是对受访者的主要危险信号。您的“测试”和您的辩护理由,基本上是说您正试图雇用某人在狗屎公司工作。我可能是错的,但我猜我不是。但是,如果我错了,建议您重新评估您的“期望”。
Joe Internet,

1
@Yam-它是这样说的...如果您正在招聘,并且某人向您发送了您认为自己做过的简历,那您就不用面试那个人了。您不做的是创建一些愚蠢的测试,即a)您承认与职位要求无关,并且b)承认仅用于测试某人声称的经历的“诚实”。如果有人甚至因为说自己使用过* nix外壳而没有受到“诚实”的质疑而不能在OP公司接受采访,那对公司又有什么意义呢?对我来说,这说的是狗屎公司的狗屎工作。YMMV。
乔互联网

1
@Christophe-如果您正在聘请有能力的* nix程序员,IMO可以假设他们“知道他们在命令行中的使用方式”。如果您正在雇用有能力的其他OS开发人员,则IMO可以假设他们的* nix命令行技能很少。A组不需要进行测试,B组会自动失败,那么为什么还要对它们进行测试?如果您雇用软件开发人员的标准基于他们使用命令行的程度,那么,我认为您的雇用过程存在缺陷。如果Shell脚本编写是该职位的主要职责,那将有所不同。
Joe Internet,

3

我可能会问他们两件事:

  1. 以前使用* nix命令行时,是否遇到过一种情况,即经过深思熟虑的命令为您节省了很多时间?如果是这样,请详细说明。

  2. 请解释* nix命令行和标准Windows桌面之间的主要区别。每种都有哪些优缺点?

显然,第一个选项将指示您申请人对命令行的了解有多深。如果他在* nix上工作了多年,他不仅会告诉你他为运行grep而感到自豪。不要指望他们会记住确切的命令(当然总是有手册页),而是他们做过的一般想法。

相反,第二个问题是检查他们是否了解命令行真正擅长的方面以及它是否不合适的工具。使用锤子很容易学习,但是在不适合使用锤子的情况下,很难换用其他工具。因此,这个问题可以很好地表明申请人在* nix框之外的观点,而且它足够开放以便他可以(并且应该)用自己的知识得分。(没有什么比回答诸如“嗯。窗户有那些窗户”更糟糕的)


2

取决于您希望他们做什么。

为了从日志文件中获取信息,您对cat + grep的建议非常合理。我会添加ls,cd和更少/更多。

如果您希望它们也进行一些较小的编辑(例如在配置文件中),则可以添加对vi和/或emacs以及cp / mv / rm / mkdir之类的测试。


1
对vi命令进行测试,但我会更担心他们是否都知道
NimChimpsky 2011年

1
好吧,如果那家伙到达Google并开始在搜索字段中输入“ vi编辑器命令 ”之类的东西,那么我会考虑通过90%的测试:)
gnat

1

我建议他们了解emacs或vi / m,tar,sed,e / f / grep,各种编译器以及一些shell脚本。也许进行测试,他们必须使用这些工具从一个文件中获取某些代码而无需打开它们,然后将其插入另一个程序中;然后编译程序,该程序会因一些小错误而中断。然后,他们需要使用文本编辑器来查找错误,使代码正常工作并归档二进制文件。然后将其邮寄到某个地方,同时授予收件人运行它的权限。


1

我不认识你,但是如果我的面试官问我并且我不知道如何在Linux上工作,我会很生气。

您不应该真正在乎他们现在知道什么,但是如果有机会,他们可以学到什么。学习* nix工具并不难,但是需要一点毅力-您应该真正地测试能力而不是知识。


2
但是您面试应聘者要做的工作不是学习。
NoChance 2011年

1
-1 @Emmad。因此,您从未在所从事的任何工作中学到任何东西……?

3
-1 @EmmadKareem所有工作都以某种方式进行学习。
尼古拉斯·史密斯,

是的,预计将在一定程度上进行学习,但是,除非这个角色是微不足道的,否则我希望应聘者能在大约两周的招聘时间内取得成果,在加拿大,平均而言,这将花费我3000美元!除非技能很少,否则这就是我的期望。
NoChance 2011年

听起来像Emmad和OP一样,是我不想工作的人。
kirk.burleson

1

这取决于您希望他们拥有什么样的经验。如果这不是针对将要为* nix系统开发的人,也不是针对* nix系统管理员的人,而是仅针对有时需要在* nix系统上做一些工作的普通开发人员,他们实际上需要多少经验?

* nix shell(ls,chmod,cat等)中这类开发人员可能需要的任何内容都可以写在单页备忘单上。如果是这样,在不需要的地方要求* nix shell知识可能会消除一些好的人选。


0

我通常会选择一个简单的任务,并要求该人在白板上编写Shell脚本。

“您有一个目录“ foo”和一个备份目录“ foo_backup”。编写一个shell脚本以查看由于“ foo_backup”发生了更改,“ foo”中发生了什么更改。


0

“对Linux的登录过程进行详细说明,只要您感到舒服即可”是一个好问题。登录过程恰好涉及切换用户,权限和所有权以及许多通用的Unix哲学。如果他们能清楚地解释为什么和为什么存在/etc/passwdand /etc/shadow,以及非特权用户如何才能更改自己的密码,但不能更改其他密码,则意味着他们“获取”了Unix。

另一个不错的选择是使用日志解析或快速安全审核的任何东西。如果他们可以将Apache日志中为特定虚拟主机提供的总带宽加起来,或者查找系统中是否有其他用户的uid为0,那么他们在命令行上很方便。

还有一件对他们不做的事情:不要让他们在纸上/白板上做。给他们一个直播系统(但不要上网,因为那几乎在作弊),看着他们走。如果他们了解手册页的方式并且可以即时构建多管道表达式,那是一个好兆头。如果他们需要google来完成所有工作,那么他们的技能就值得怀疑。


0

为什么要让他们编写功能程序?说“告诉我grep和sed之间的区别,或者X命令做什么?等等”是怎么回事,这样您就可以带他们一点点。

如果他们对您给他们的特定任务不满意,您可能不会认为他们很聪明。但是,如果您提出一般性问题,则可以让他们有机会向他们展示他们确实知道的知识,这可能很重要,但与您想知道的有所不同。


-1

Unix大师使用一根手指即可拥有sed,grep等核心命令行命令,并且可以轻松地使用它们来实现所需的功能,包括各种引号,高级正则表达式等,因此有时您看到该脚本并认为它会用汉语写的蜜蜂更容易理解;)

您可以期望,与shell编程无关,他们将知道至少一种其他脚本语言,例如Perl。

他们会知道Unix系统的内部配置,因此,如果您要求他们更改键盘布局(fg向右alt +添加一些绑定),则不会感到困惑。

管理已安装的软件包也不会有问题。安装Oracle,运行4个应用程序服务器,每个服务器与其他JVM一起运行-也没有问题。虚拟网络配置,高级路由和端口过滤,虚拟机等,管理安全性-也都可以使用。


2
问题是关于测试开发人员是否具有一般的Unix技能,而不是确定特别关注Oracle和Java的大师级系统管理员。
彼得·泰勒

合资公司?犹太志愿人员网络与此有何关系?
ocodo 2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.