您将如何测试声称拥有* nix shell经验的开发人员(为清楚起见,我们不想测试某人是否可以在* nix上进行开发,仅测试他们是否了解命令行方式)。
我当时正在考虑让它们解决从日志文件中获取信息的问题,这将涉及cat,grep,cut,...等一些基础知识,再加上管道。
您还要求什么其他基础知识?再一次,这不是采访将要针对* nix系统开发的人,也不是针对* nix系统管理员的面试,而是针对经常需要在* nix系统上做一些工作的普通开发人员。
您将如何测试声称拥有* nix shell经验的开发人员(为清楚起见,我们不想测试某人是否可以在* nix上进行开发,仅测试他们是否了解命令行方式)。
我当时正在考虑让它们解决从日志文件中获取信息的问题,这将涉及cat,grep,cut,...等一些基础知识,再加上管道。
您还要求什么其他基础知识?再一次,这不是采访将要针对* nix系统开发的人,也不是针对* nix系统管理员的面试,而是针对经常需要在* nix系统上做一些工作的普通开发人员。
Answers:
自从我开始工作以来与众多同事的经验来看,没有人愿意伪造Unix知识:他们“ 知道命令行的方式 ”,或者干脆说“没办法!”。
只是问问候选人是否愿意在Unix工作站上工作,然后让他告诉你他可以接受bash培训的程度。他最终将命名一些命令。最明显的是cd
,cat
,more
或者less
,vi
或者emacs
,grep
,awk
,sed
。仔细听他是否提起man
。
如果是为了发展,他应该熟悉make
和Makefile文件,以及一些源代码控制命令行界面(svn
,git
,cleartool
,hg
,cvs
...)
man
,每当Google无法提供帮助时,我都会使用它,但我永远不会将其显示在命令列表中……
man
是离线时学习UNIX命令行和C库的最有效方法。顺便说一句,当最高级的互联网搜索工具是telnet archie.cs.mcgill.ca
为什么这样
* nix外壳程序(以及其他OS外壳程序,fwiw)是非常广泛的工作环境。有人可能会在那里花费数年的时间而仅使用很小一部分弹壳的能力。
如果您不希望其他人使用a)shell程序,或b)从shell管理系统,那为什么重要呢?任何要做的事情都将处于一个基本的水平,以至于方便的* nix备忘单将足以弥补“技能的不足”。
我可能会问他们两件事:
以前使用* nix命令行时,是否遇到过一种情况,即经过深思熟虑的命令为您节省了很多时间?如果是这样,请详细说明。
请解释* nix命令行和标准Windows桌面之间的主要区别。每种都有哪些优缺点?
显然,第一个选项将指示您申请人对命令行的了解有多深。如果他在* nix上工作了多年,他不仅会告诉你他为运行grep而感到自豪。不要指望他们会记住确切的命令(当然总是有手册页),而是他们做过的一般想法。
相反,第二个问题是检查他们是否了解命令行真正擅长的方面以及它是否不合适的工具。使用锤子很容易学习,但是在不适合使用锤子的情况下,很难换用其他工具。因此,这个问题可以很好地表明申请人在* nix框之外的观点,而且它足够开放以便他可以(并且应该)用自己的知识得分。(没有什么比回答诸如“嗯。窗户有那些窗户”更糟糕的)
取决于您希望他们做什么。
为了从日志文件中获取信息,您对cat + grep的建议非常合理。我会添加ls,cd和更少/更多。
如果您希望它们也进行一些较小的编辑(例如在配置文件中),则可以添加对vi和/或emacs以及cp / mv / rm / mkdir之类的测试。
我不认识你,但是如果我的面试官问我并且我不知道如何在Linux上工作,我会很生气。
您不应该真正在乎他们现在知道什么,但是如果有机会,他们可以学到什么。学习* nix工具并不难,但是需要一点毅力-您应该真正地测试能力而不是知识。
这取决于您希望他们拥有什么样的经验。如果这不是针对将要为* nix系统开发的人,也不是针对* nix系统管理员的人,而是仅针对有时需要在* nix系统上做一些工作的普通开发人员,他们实际上需要多少经验?
* nix shell(ls,chmod,cat等)中这类开发人员可能需要的任何内容都可以写在单页备忘单上。如果是这样,在不需要的地方要求* nix shell知识可能会消除一些好的人选。
“对Linux的登录过程进行详细说明,只要您感到舒服即可”是一个好问题。登录过程恰好涉及切换用户,权限和所有权以及许多通用的Unix哲学。如果他们能清楚地解释为什么和为什么存在/etc/passwd
and /etc/shadow
,以及非特权用户如何才能更改自己的密码,但不能更改其他密码,则意味着他们“获取”了Unix。
另一个不错的选择是使用日志解析或快速安全审核的任何东西。如果他们可以将Apache日志中为特定虚拟主机提供的总带宽加起来,或者查找系统中是否有其他用户的uid为0,那么他们在命令行上很方便。
还有一件对他们不做的事情:不要让他们在纸上/白板上做。给他们一个直播系统(但不要上网,因为那几乎在作弊),看着他们走。如果他们了解手册页的方式并且可以即时构建多管道表达式,那是一个好兆头。如果他们需要google来完成所有工作,那么他们的技能就值得怀疑。
Unix大师使用一根手指即可拥有sed,grep等核心命令行命令,并且可以轻松地使用它们来实现所需的功能,包括各种引号,高级正则表达式等,因此有时您看到该脚本并认为它会用汉语写的蜜蜂更容易理解;)
您可以期望,与shell编程无关,他们将知道至少一种其他脚本语言,例如Perl。
他们会知道Unix系统的内部配置,因此,如果您要求他们更改键盘布局(fg向右alt +添加一些绑定),则不会感到困惑。
管理已安装的软件包也不会有问题。安装Oracle,运行4个应用程序服务器,每个服务器与其他JVM一起运行-也没有问题。虚拟网络配置,高级路由和端口过滤,虚拟机等,管理安全性-也都可以使用。