如果能解决这种等级的问题,在码农里大概是个啥水平?

2018-09-22 22:06:31 +08:00
 kaoneiliusi

前几天在招聘网上和豆瓣的一个运维开发类岗位负责人接触,出了一道笔试题。 我看了下原程序是 C 写的,但是自己看了看自认为虽然给我俩礼拜我学习一下应该能完成,但是短期内应该完成不了(半吊子运维出身代码能力不行) 于是给谢绝了。 不过还是很好奇,大概什么程度的码农能一天左右完成这题呢?

基于 ncdu 实现一个命令行工具,用来定位文件系统中占用了较大空间的文件、目录。 需求场景描述 在运维工作中,经常会遇到磁盘空间被写满的情况,大部分情况是根分区。这种情况需要尽快处理以免影响系统上其它服务。这时候就需要去定位是哪些文件、目录占用了较大空间,以此判断是哪个服务异常,进而解决问题。在文件系统中找出大文件是一件非常耗时的事情,当 inodes 数很大时尤甚。

好在 ncdu 高效地完成了扫描文件系统各文件、目录占用的工作,但是要达到我们的目标——直接将大文件展示出来,还需要做一些额外工作。

要求说明 实现一个在 Linux 环境下运行的命令行工具,命令行参数符合规范。注意,是基于 ncdu 实现一个新的命令行工具。 以人为本,便捷易用,能够最大程度减轻 SA 的在这件事情上的时间消耗。

除命令帮助信息 -h, --help 外,对使用场景及对应的相关命令做简单文字性描述。

会从命令接口设计、代码实现、开发风格、使用场景设计、执行性能等角度去评价这个命令行工具。

推荐优先使用 Python 实现,但原则上实现语言不作为评价依据。

完成的项目需要放到 GitHub 上面,建议保留完整的 commit 历史,需要写清楚如何运行。

最终提交的是 GitHub Repo 页链接。

7435 次点击
所在节点    Python
36 条回复
lsls931011
2018-09-23 08:59:21 +08:00
然后拿到答案,你可以回家等消息了
okjb
2018-09-23 09:04:22 +08:00
@lsls931011 真的皮
crayygy
2018-09-23 09:56:55 +08:00
这个问题描述看着还真的有点像骗代码的。
详细的文档和 help,详细的 commit 和使用说明,建议使用指定语言(便于以后维护)。
希望是我想多了吧
swulling
2018-09-23 10:03:24 +08:00
刚毕业的学生给一周时间应该能写出来符合要求的

工作一两年的可以在两天内完成

再往后就和能力无关了,这个题的能力要求本来就比较低
sampeng
2018-09-23 10:09:14 +08:00
刚搜了一下 ncdu。这写个程序满足需求很难?
newtype0092
2018-09-23 10:38:23 +08:00
@crayygy 看着乱七八糟的要求很多,可实际具体使用方式并没有限定,就只给了个“直接将大文件展示出来”的要求,要是骗代码肯定会指定输入输出吧,不然自己设计的接口他们拿到完整的东西可能也很难用。
当然不排除招聘方连设计接口的能力都没有或者懒得做,看谁的方案好用谁的。。。
lihongjie0209
2018-09-23 10:46:19 +08:00
在文件系统中找出大文件是一件非常耗时的事情,当 inodes 数很大时尤甚。

好在 ncdu 高效地完成了扫描文件系统各文件、目录占用的工作,但是要达到我们的目标——直接将大文件展示出来,还需要做一些额外工作。



题目中要求的关键是展示!!!

文件系统遍历是 ncdu 帮你做的, 文件系统的扫描结果也是 ncdu 帮你定好了, 按照一个传统的三层架构来说,

presentation layer (你的任务)
service layer(ncdu)
dao layer(ncdu 导出的 json)

你的任务就是写一个展示层把 ncdu 的导出的 json 文件展示一下好了.




题目的关键: 但是要达到我们的目标——直接将大文件展示出来

这里我们可以做一些合理的推论, 要展示的不只是大文件, 还有大文件夹, 毕竟这个也是一个合理的需求.

那么你的程序在设计的时候主要的功能应该是大文件 /文件夹排序, 比如说展示 top10 的大文件 /大文件夹


其他可以想到需要优化的地方:

1. 缓存, 每次扫描整个文件系统其实还是很耗时的, 如果说你的文件系统在一定时间范围内是稳定的, 那么可以加一个缓存, 这样别人在基于你的命令开发的时候会感谢你, 不然调试一个 grep, awk 都需要几秒钟那就太痛苦了.
2. 导出你的结果, 类似于 ncdu 一样的提供一个 json 导出
3. 执行性能, 这个东西需要看使用场景才能优化, 没有 profile 就别优化, 但是你需要在你的程序运行时写出足够的日志来帮你做 profile.




----------------------至于说什么水平--------
我是 Java 开发, 无法评价运维水平. 这道题目中涉及到的 ncdu 是我第一次接触, 花了 15 分钟看文档和下载下来跑 demo, 还得感谢题主让我了解到一个好工具.
newtype0092
2018-09-23 10:50:35 +08:00
@xuanbg 题目要求的是基于 ncdu,这个东西本身就是能在终端里使用的图形化工具,而且功能复杂。
现在要求“直接将大文件展示出来”,相当于从瑞士军刀上拆个小刀头过来,再自己装个手柄。
干什么(显示大文件)和怎么干(封装 ncdu )已经比较明确了,算是码农都搞得定的要求了吧。
liangdu
2018-09-23 10:55:26 +08:00
这问题没难度,思路也很好讲。用来作为面试考察点,看出出题者意图不善。加之,他问了一个似乎很无聊的问题"一天能不能搞定?",这个没做过就不能,有做过就可以可以。只能说明面试官真的不缺人才,缺流水劳动力
xxgirl2
2018-09-23 11:24:31 +08:00
自带的 getopt 就能处理一些复杂的东西了,不过要打印用法的话 getopt 可能会显得繁琐,或许应该找找别的轮子
wuweidong0107
2018-09-23 17:48:08 +08:00
ncdu 是什么,找大文件为什么要基于 ncdu 找?它有什么优势吗?能不能用 find 命令找?
superhan
2018-09-23 19:25:14 +08:00
一半人阅读理解不过关,还有一些根本不知道 ncdu 说明没有运维经验。这题挺有用的
ifaii
2018-09-24 12:49:17 +08:00
@superhan #32 混了多年运维 真不知道 ncdu 是啥,这种需求 du 配合 sort 一下都有了
CheneyC
2018-09-24 14:28:16 +08:00
监控服务器空间使用情况-crontab+python 邮件提醒
https://my.oschina.net/ailou/blog/1547982
xavierskip
2018-09-25 16:43:36 +08:00
想起来之前看过相关的博文 https://blog.lilydjwg.me/2017/8/11/ncdu-diff.210359.html “谁又用掉了我的磁盘空间?——魔改 ncdu 来对比文件树大小变化”
foxyier
2018-09-29 11:07:15 +08:00
被骗过代码的路过。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/491834

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX