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

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

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

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

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

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

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

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

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

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

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

7436 次点击
所在节点    Python
36 条回复
lance6716
2018-09-22 22:13:35 +08:00
并没有看到明确的要求,连要点都交代的工作并不想干
widewing
2018-09-22 22:16:51 +08:00
为什么要基于 ncdu,ncurses 的程序怎么“基于”。。直接遍历文件不是更方便吗
widewing
2018-09-22 22:18:56 +08:00
@lance6716 就是说选择目录,列出目录中的大文件吧。并且能够选择进入子目录继续查这种吧。
newborn
2018-09-22 22:23:52 +08:00
我感觉我能用 bash 写一个出来。那个要求不是说可以用 python 吗?这不基本上就是脚本语言调 ncdu 执行文件对输出结果进行重新编排或者执行过程简化和控制。
xuanbg
2018-09-22 22:24:21 +08:00
1、可以设置忽略路径,因为有些路径没必要去扫
2、剩下的从根开始递归遍历,得到所有文件的大小,以及文件夹下所有文件所占用的空间。
3、可以对第二个功能得到的结果排序
4、可以单个删除文件或直接删除文件夹
5、可以设置监控路径,实时刷新数据

另外,为什么要做命令行工具,明明是图形化界面更方便
xuanbg
2018-09-22 22:30:09 +08:00
除了本身就是搞这种工具的,一般人一天是搞不定的。这个和编程水平无关,编程首先得要知道干什么,然后需要知道怎么干,最后才是写代码。写代码也许一天就够,但不是天天和这类工具打交道的,前面两步搞定差不多也要三天往上了。所以一般人 1 周搞出来属于水平很高了。

划重点:能独立搞出来的才叫程序员,让别人告诉你怎么做才能搞出来的叫码农。
imdong
2018-09-23 00:27:07 +08:00
直接系统原生命令写个 shell 不就能实现了?

du -sh /*
AX5N
2018-09-23 00:55:38 +08:00
感觉我没看懂难在哪,不就是遍历所有文件拿到每个文件的大小吗,那之后干啥不都是随便?
0044200420
2018-09-23 01:14:08 +08:00
一次性列出,不要求后续交互,那很容易吧
首先,看可以不可以导出结果文件,不用跟 ncdu 交互
开始面向 google 编程,ncdu export 第一条,哦,自带 json 输出,那后面的就简单啦
https://dev.yorhel.nl/ncdu/jsonfmt
粗略设计,按扩展名、路径、大小进行过滤显示,差不多了吧
ncdu 应该支持过滤参数吧,不行就清洗 json 咯
让我一天来做这个,可以慢慢划水交货
lolizeppelin
2018-09-23 01:19:58 +08:00
考察点之一 参数处理 注意 这是运维开发 给运维写工具的 命令行参数处理不好怎么开发


考差点 2 高效扫描文件 说实话这我都不知道咋弄 得看相关 c 工具的代码 估计最佳做法是用 c 写 Python 的计算太慢了
lolizeppelin
2018-09-23 01:24:56 +08:00
我看过 python 代码里
命令行参数处理做的最佳的就是 openstack 的配置文件模块了 屌得一 b

把这直接抄了 配置文件和命令行部分直接满分 232
lolizeppelin
2018-09-23 01:26:25 +08:00
哦 扫文件已经基于 ncud 了 那就简单得一 b 了
直接掉库就是
lolizeppelin
2018-09-23 01:52:09 +08:00
命令行这玩意 好好写一天不一定够

但是 一个好的运维 早就面对我这个问题了
各种工具 salt stack ansb 什么的都有可参考的对象
也就是说肯定老早就有一套现成可用的了

现在还没现成的说明你积累不够 水平没到

挺好的一道题目
enjoyCoding
2018-09-23 02:09:19 +08:00
设计加编程实现加文档 一天?? 这公司不缺人吧…
tab
2018-09-23 02:33:01 +08:00
背景知识:Linux/Unix 环境编程(了解 file descriptor,会自己实现个 ls, cp 命令啥的),Python,C,如果你都比较熟悉而且看你描述好像给了 C 语言的源程序,就是主要逻辑翻译一下查查 ncdu 实现再加一些细节逻辑一天肯定不是问题。如果不是很熟悉需要自己了解的话,尤其是操作系统命令行这些东西,可能需要额外学习了解,时间视个人能力和基础水平不定。话说回来,运维岗位的话,如果 Linux 和 Python 不熟悉,那你自己是存在短板的,这些不熟悉应该很难写出运维自动化的脚本,估计平时用的运维工具具体实现和原理大概也不够了解。实际上这种题考查的知识点运维应该比很多程序员要有一点优势,尤其是现在大前端各个平台各种面向应用层的码农,他们平时很难接触到这些。
WordTian
2018-09-23 03:11:16 +08:00
感觉能写,但是我肯定一天搞不定,估计得一周
先是熟悉 ncdu 的详细用法,再加上命令行选项设计,估计就得一两天,开发得一两天,优化估计再一两天...
emm...看来我还太菜了
aijam
2018-09-23 03:53:13 +08:00
@0044200420 基本同思路。一小时出 prototype,半天基本能搞定。
ryd994
2018-09-23 06:03:49 +08:00
一直都是 du -a --max-depth=1 | sort -n
反正有缓存,实际上就是第一次跑时间长,后面都很快
SSD 的话就更不用说了
SuperMild
2018-09-23 06:43:40 +08:00
划重点,扫描的具体实现是直接用 ncdu !要做的只是处理参数输入和结果展示而已。
taowen
2018-09-23 08:16:24 +08:00
重点是 以人为本,便捷易用

这是考察产品分析和设计能力吧

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

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

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

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

© 2021 V2EX