想了十天十夜不知道写些什么,那就写写面试题吧。
在面试应聘者的时候,我常常会问:
在 Linux 下,如何删除一个目录下的所有 log 文件?
不知道是不是我人畜无害的围笑给了应聘者我很好应付的错觉
以至于应聘者全都回答:rm *.log
追问:该目录下可能有很多子目录,如何把子目录里的 log 文件也删掉呢?
答:rm -r *.log
令我很意外的是,真的只有很少的应聘者能想到 find 命令。
而且想到的人也很少有记得具体用法的。
目前为止只有一个应聘者能够给出完整的命令:
find -name \*.log -exec rm -f {} \;
注:这里的两个斜杠都不是笔误。
我觉得 find 应该不算一个很罕见的命令?
我们有一台共享开发机,因为大家都懒得删 log,经常磁盘爆满,后来我们给它加了个 crontab:
0 4 * * * find /home/ -type f -name "*.log*" -size +100M -exec bash -c "echo -n > '{}'" \;
注:".log*" 后面的 * 是考虑了 log rotate 。
注意,这个命令没有用 rm,而是使用重定向来清空文件,原因后面会讲。
基于清理磁盘空间这个场景,我还会继续问:
你有遇到过删了 log 文件,但是磁盘空间却没有释放的情况吗?
有些候选人可能心里在想着:文件删了不就删了吗,还有什么磁盘空间没释放?
所以有时候我需要解释一下,是 df 命令看到的磁盘空间没有减少。
还有个候选人努力想了想,和我确认,是不是正好这个目录挂载的是其他磁盘,所以看起来当前磁盘空间没减少。(当然不是)
思路稍微开阔一点的候选人会想到:你个憨批莫不是删了个软链接吧?
当然候选人的语气会比较友好。
然后我会和候选人继续沟通:
你提到了软链接,那它和硬链接的区别是什么呢?
有时候我怀疑这几个连续的问题问到候选人开始怀疑人生,因为有的候选人有点犹豫,觉得自己想说的其实是硬链接。
不过还是有几个候选人知道,软链接是一种文件类型,其内容是目标文件的路径;硬链接是 inode 的别名,同一个 inode 可以有多个链接,在 inode 里记录了硬链接的数量(引用计数)。
比如这样:
创建一个空文件,看下 inode 和链接数:
$ touch a.txt #创建一个空文件
$ stat -c 'inode %i, links %h' a.txt
inode 12058942, links 1
创建一个软链接,再看看文件大小:
$ ln -s a.txt b.txt #软链接
$ stat -c 'inode %i, links %h' b.txt
inode 12058978, links 1
$ ls -l b.txt #大小 5 字节
lrwxrwxrwx ... 5 ... b.txt -> a.txt
$ readlink b.txt #文件内容
a.txt
创建一个硬链接,看下 inode 和链接数
$ ln a.txt c.txt #硬链接,inode 不变,链接数变成 2
$ stat -c 'inode %i, links %h' c.txt
inode 12058942, links 2
$ ls -l c.txt #大小 0 字节,和 a 一样
lrwxrwxrwx ... 0 ... c.txt
但实际生产上,遇到 “删了 log 文件、但空间不释放” 通常和软 /硬链接没有什么关系。
实战经验比较丰富的候选人会知道,这往往是因为 log 文件正被另一个进程打开。
比如在终端 1 打开 a.txt:
$ python
>>> f = open("a.txt")
然后在终端 2 可以看到该文件被 Python 打开:
$ lsof a.txt
COMMAND PID ... NODE NAME
python 2390 ... 12058942 a.txt
删掉 a.txt ,再查看 python 打开的文件列表:
$ rm a.txt
$ ls -l /proc/2390/fd
lrwx------ 1 user ... 00:04 0 -> /dev/pts/5
lrwx------ 1 user ... 00:04 1 -> /dev/pts/5
lrwx------ 1 user ... 00:04 2 -> /dev/pts/5
lr-x------ 1 user ... 00:04 3 -> /tmp/a.txt (deleted)
注:0 、1 、2 、3 是内核的 fd 编号。0=stdin, 1=stdout, 2=stder 。
可以看到,a.txt 被标记为已删除,但因为进程还开着它,可能会访问文件的内容,所以内核会等到进程关闭该文件(或进程退出后)才在磁盘上移除这个文件。
在面试中通常没有机会再问下去了,但实践中往往问题还没解决。
比如前述共享开发机,就曾遇到了磁盘空间共 800G,但用 du 命令查看,所有文件只占用了 500G 的情况。
那么:
1. 如何才能知道现在系统中有哪些文件已删除、但是仍被占用呢?
$ sudo lsof | grep deleted
COMMAND PID … NAME
main 893246 … /../nohup.out (deleted)
...
发现是有大量已经被删除、但仍被某些进程打开的 nohup.out 。
2. 坑是找到了,该怎么填呢?
由于这是开发机,很简单,把进程杀掉就好了,进程退出时,内核会负责关闭文件,然后清理占用的空间。
但如果是线上服务呢?
Linux 下有一个 package 叫 logrotate,像 nginx 这些服务就是使用它来做日志切割 /轮转的。
但 nginx 是在后台持续运行的,不能为了切个日志就停止服务,所以它们是这样约定的:
注:为什么是用 SIGHUP 而不是其他信号,以后可能会另开一篇讲讲。
这样 logrotate 出来的日志,就可以放心删除了。
对于不支持类似逻辑的服务怎么办呢?
重启大法。
如果不怕背 P0 的话,还可以这么作死:
$ sudo gdb
(gdb) attach $PID
(gdb) call ftruncate(3, 0) #按需修改 fd
$1 = 0
注:看起来文件是清空了,但可能存在其他坑,后果自负。ftruncate 只是清空文件,如果想关闭文件,可以结合 dup 、dup2 、open 和 close 来搞事,不细说了。
看到这里你应该明白了为什么前面那个 find 命令不直接用 rm 了吧?
照例总结下:
还想知道其他有意思的面试题吗?
不如投个简历来亲身体验下:
~ 投递链接 ~
投放研发工程师(上海)
https://job.toutiao.com/s/J8DRDyG
高级广告研发工程师(北京)
https://job.toutiao.com/s/J8DNwJY
▄▄▄▄▄▄▄ ▄ ▄▄▄▄ ▄▄▄▄▄▄▄
█ ▄▄▄ █ ▄▀ ▄ ▀██▄ ▀█▄ █ ▄▄▄ █
█ ███ █ █ █ █▀▀▀█▀ █ ███ █
█▄▄▄▄▄█ ▄ █▀█ █▀█ ▄▀█ █▄▄▄▄▄█
▄▄▄ ▄▄▄▄█ ▀▄█▀▀▀█ ▄█▄▄ ▄
▄█▄▄▄▄▄▀▄▀▄██ ▀ ▄ █▀▄▄▀▄▄█
█ █▀▄▀▄▄▀▀█▄▀█▄▀█████▀█▀▀█ █▄
▀▀ █▄██▄█▀ █ ▀█▀ ▀█▀ ▄▀▀▄█
█▀ ▀ ▄▄▄▄▄▄▀▄██ █ ▄████▀▀ █▄
▄▀▄▄▄ ▄ ▀▀▄████▀█▀ ▀ █▄▄▄▀▄█
▄▀▀██▄▄ █▀▄▀█▀▀ █▀ ▄▄▄██▀ ▀
▄▄▄▄▄▄▄ █ █▀ ▀▀ ▄██ ▄ █▄▀██
█ ▄▄▄ █ █▄ ▀▄▀ ▀██ █▄▄▄█▄ ▀
█ ███ █ ▄ ███▀▀▀█▄ █▀▄ ██▄ ▀█
█▄▄▄▄▄█ ██ ▄█▀█ █ ▀██▄▄▄ █▄
101
mingl0280 2020-07-04 23:18:09 +08:00 10
这个发帖的估计是没什么运维经验的在校生?打肿脸还要充胖子那种,自己需求非常不明确还要别人猜意思,而且某些操作让人目瞪口呆(例如什么日志打开中还删日志),更不要提那个 find /home+cron 操作简直是作死的神来之笔,用户在自己子目录下建一个 ln 到 /usr 的目录你就修机器去吧!
|
102
Jat001 2020-07-04 23:22:10 +08:00
@newtype0092
面对熟悉的问题时 知识匮乏的人,会迫不及待得炫耀自己:这题我会 而有实力的人,会把自身丰富的知识储备分享给别人 这个意义不大,实际场景用不到 用不到就是用不到,老板招你不是来实现用不到的场景的 这个不用自己写,调一下库就行 有库为什么还要自己造轮子?你每天都自己造轮子的话,工作还做不做? 这个我没用过,用的时候百度一下就知道了 每个人都有自己不懂的东西,用的到或者感兴趣的就去了解,用不到又不感兴趣的为什么要去了解? |
103
wwhc 2020-07-04 23:26:44 +08:00
Linux 下 log 文件并没有统一的文件名后缀,只是大部分都用.log 而已,不是.log 后缀的很多。如果遇到 log 文件过大,我首先做的是确定 log 文件是由哪个进程生成的,检查这个进程的启动方式、日志轮换脚本,尽量利用自带的轮换日志脚本,实在没有才自己写脚本处理
楼主的这类面试方式,不大能招到有比较多运维经验者 |
104
hatebugs 2020-07-04 23:44:16 +08:00 via Android 2
看这个帖子一直在前面,又来看了评论,作为一个互联网运维,我觉得楼主的题做面试考核没啥问题。日常见到的互联网的中级开发,有些经常删了文件还来问为啥沒释放,这个问题从实践经验,和对操作系统的深度,都有面试者自由发挥的空间。
|
105
rockuw 2020-07-05 00:11:26 +08:00 3
看了大家的讨论,最近也做了不少技术面试,从面试官角度说一下我的看法。
面试官想从面试中考察哪些能力? 1. 技术能力: 包括广度和深度,其中深度是尤其重要,知其然还要知其所以然 2. 学习能力: 对于不熟悉的领域,是怎么从了解到掌握的,这个过程中最能体现逻辑性 3. 性格特质: 乐观 /皮实 /自省 这 3 个方面的权重不同的面试官把握的比例不一样,我的标准大概是 40:40:20,供参考。 好了,回到楼主的这些具体问题,我认为,如果面试者: 1. 能够在回答中讲出 find/xargs,广度加 1 分 2. 能够在回答中讲出软链接 /硬链接的区别 /进程对 fd 的管理机制,深度加 10 分 3. 能够在回答中讲出日志 rotate,广度加 1 分 4. 能够在回答中讲出日志 rotate 的实现原理,深度加 5 分 5. 能够在回答中讲出 ELK 的一些使用经验,广度加 1 分 6. 能够在回答中讲出 ELK 的一些设计要点(它解决了什么问题,为什么要这么解决,业界有哪些解决方案,各有什么优缺点),深度加 10 分 所以大家不要纠结于"find"是不是标准答案这个点了,面试的过程是双方对焦的过程,面试官希望能够看到 /挖掘出你的亮点。 至于上面提到的学习能力和性格特质的考察其实更难,我也还没有太多的经验就不多说了。 最后,给我们团队打个广告,欢迎有兴趣的同学一起来共建业界最好的 Serverless 平台: https://v2ex.com/t/651136 |
106
zthxxx 2020-07-05 01:12:21 +08:00 2
|
107
Jat001 2020-07-05 01:26:33 +08:00 via Android
@zthxxx 我是野路子自学的,一天培训班都没上过,我不信培训班不教基础知识和面试方法。我干这行 5 6 年了,也有科班出身的同事,但工作中没人交流基础知识,都是 API 、文档、自己看代码。业务为主,能写代码、少出 bug 就行。
|
108
felix021 OP @Jat001 术语存在的意义是提高交流的效率。就像 GoF 里面的那些模式,名字本身叫什么无所谓,关键是达成共识后,交流的双方可以用简洁的语言完成高效的信息传递。
培训班的目的是就业,基础知识的 ROI 太低,课程里可能会涉及,但一定不会深究。因此出身培训班的人,通常天花板会比科班出身低,这就是大厂不愿意招那些培训班出身程序员的原因。 |
109
Jat001 2020-07-05 01:38:00 +08:00 via Android
@felix021 贵司工作中真的会交流术语吗?大部分公司不都是业务导向吗?需求确定了,leader 顶多跟你研究一下系统架构怎么设计,但没人会管你用什么设计模式写代码吧?
|
110
royzxq 2020-07-05 01:41:15 +08:00 1
我去,我说怎么看行文这么有我条甚至部门既视感,再看头像更眼熟了。
打开 lark 一搜果然. hhhh 强烈建议开发机上可以部署 pm2. 共享的开发机 pm2 我尝试了但是起不来 |
111
Jat001 2020-07-05 01:42:57 +08:00 via Android
@felix021 另外天花板是什么,大厂的代码就比小公司的优雅?不都是写业务代码?大厂不愿意招培训班出身的不是因为大厂资源丰富,科班的都招不过来,根本看不上培训班出来的吗?
|
112
blless 2020-07-05 01:50:29 +08:00 via Android 1
@Jat001 兄弟,我也是非科班出身,以前也是抱着你差不多念头。
之所以觉得自己不了解这些概念,没听过一些名词无非就是觉得自己不用这些也能解决问题。你肯定有解决问题的能力。我觉得你还没遇上解决问题能力跟你一样,基础比你扎实的多的人。我也是遇到这样的人的时候才觉得自己被全方位碾压,我也不说啥难听的。但是听我一句劝,想好好吃程序这碗饭,还是要把很多基础,概念,理论都理解贯通得好 |
113
royzxq 2020-07-05 01:54:30 +08:00
原来还有删掉了空间不释放的情况呀,学到了
|
114
Mirage09 2020-07-05 02:02:19 +08:00
作为一个 someone does everything 很好奇什么测试服务会打几十个 g 的 log...
|
115
felix021 OP @Mirage09 用线上流量来批量测试的时候,测试环境 log level 低,或者测试分支添加了大量测试日志。
|
116
necomancer 2020-07-05 02:05:15 +08:00
|
117
Jat001 2020-07-05 02:06:12 +08:00 via Android
@blless 我认同你的观点,解决问题能力强、基础又扎实的人确实牛逼。但我走上编程这条路本来不是为了吃饭,只是对用技术解决问题很感兴趣,另外我本身对死记硬背也深恶痛绝,所以我还是会坚持实用主义直到对编程失去兴趣的那一天。
|
119
WittBulter 2020-07-05 02:13:10 +08:00 1
帖子内容的技术比重是有的,但是我一看到字节 /头条+面经之类的内容,我就知道下面要打成一片 😂....
字节的同学们好像特别喜欢营造技术媚俗感 (我没有评论好坏) |
120
felix021 OP @WittBulter 每个人的感受都不一样,有些人觉得很有帮助,有些人觉得很浅,有些人觉得有些内容不合适,其实都很正常; 头疼的是那些自以为绝对正确就开喷的,反驳嘛浪费时间,不反驳嘛又显得怂,太难了。
另外,你说的这个技术媚俗感,我不是很能 get 。不过头条招聘的整体标准确实感觉比其他厂高,可能是你所说的这个媚俗感的原因?(所以招人真的难) |
121
Jat001 2020-07-05 02:43:14 +08:00 via Android
另外说点题外话,市场是由供求关系决定的,当需求旺盛时,用人单位会降低招工门槛,技术水平低的人也能找到不错的工作,而当经济不景气,市场供大于求,用人单位就会提高招工门槛,用各种手段筛选求职者,以求用最低的成本招到最优秀的人才。正是这看似合理的市场经济带来了严重的失业潮,令本就不景气的经济雪上加霜,更加剧了社会动荡。
搞技术的人总会陷入一个误区,认为技术决定一切,殊不知“一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程”。很多大公司并不是因为技术牛逼而发展起来的,而是因为公司抓住机遇发展起来后,有了更多的资金投入到技术研发上来。 |
123
Jat001 2020-07-05 02:56:46 +08:00 via Android
|
124
aheadlead 2020-07-05 03:04:22 +08:00 2
楼主位的内容其实挺好的,大部分面试者根本都答不出一个满意的答案。
谁敢说自己没干过删除了一个正在打开的日志文件?开发机而已,楼主又没说是生产环境,完全 ojbk 好吧。 “3. 删了文件磁盘空间不释放这很正常,还有可能是 btrfs 或者 zfs 上给 dedup 了。 有这么多种可能性,我不知道为什么来面试的人就必须要想到是文件还在被占用。” 还有楼上这位,你连 dedup 都能答出来,面试官还会死卡你文件正在打开吗? 而且用 btrfs 或 zfs 的公司能有几家?能有 ext4 或 xfs 之类的普及吗?一般情况能答出文件正在打开就很不错了。 |
125
aheadlead 2020-07-05 03:05:25 +08:00
我觉得楼主的文章就是挺好的。在校生或者刚毕业没有太多经验的话,楼主位的内容很多人都不知道的。
|
126
felix021 OP @aheadlead 他太入戏了,不能理解文字的表达能力是有限的,一篇文章只能讲一个故事,但故事可以有很多演绎方式。
|
129
lxml 2020-07-05 03:29:51 +08:00
哈哈, 不是运维,憨憨研发表示这个当作面试考点特别好,很考验实战的技能。
不过 gnu 工具有个不好的地方就是好多东西有一万种写法(比如 exec 这种传导前面参数给后面命令的,我就喜欢写 xargs ), 然后因为 shell 语法再加上 bash 没有良好的函数支持,各种管道组合起来真的很头疼,我自己维护的超过 3 行 shell 全改成 python 脚本执行了 |
130
Mirage09 2020-07-05 03:38:29 +08:00
我觉得吧,这种情况值得一篇内部 wiki post,让后来人能不再踩坑;但是面试的话,无论是不是 new grad,问这种 trivia 都是一件很无聊的事情...
当然了在推广下说这个我也挺无聊的... |
131
binux 2020-07-05 03:48:18 +08:00 via Android
居然是头条。。。
|
132
CosimoZi 2020-07-05 04:16:08 +08:00
我字节内部不都是容器云流式日志吗?和你说的这些个手动管理有什么关系????????????????
搞得像是字节云内部服务组件差劲到这种程度似的 |
134
594duck 2020-07-05 05:43:48 +08:00 via iPhone
@mingl0280 说得好,我看了这广告的公司就恶心。恶心
@WittBulter 老哥说的太到位了。字节已经和阿里一样。觉得天上地下我最大一样了。 我很想知道发这个帖子的人真是名字。等 10 年后再看看他怎么样了。另外我把这个帖子转到 twitter 上去了。帮字节的人好好宣传下。 战狼公司奋斗逼之家 |
135
594duck 2020-07-05 05:49:09 +08:00 via iPhone
@ruidoBlanco 老哥撕的好。这是字节跳动的招聘广告。一股浓浓的优越感。这公司的价值观和人事快和阿里,百度对标了。
|
136
cs419 2020-07-05 06:00:16 +08:00
内卷化严重在这个帖子体现的很好啊
本来吧 是高要求的厨子 希望煲汤、雕工、爆炒 总之能干的越多越好 现在呢 最好还熟悉收银 记账 报税 通常看到研发工程师的职位,先想到的是后端开发,中间件开发 不过单从帖子的面试提问看 要招的是个运维吧 所以你们公司招的研发工程师 == 懂点开发的高级运维 ?? 你这改成招 devops 工程师 不好么 |
140
Steven0125 2020-07-05 09:26:02 +08:00 via Android 1
个人觉得,面试官不应该总拿自己会的东西问别人,而是尽量去问被面试者会哪些,会到什么程度,这种程度能不能能不能达到贵司要求,或者去跟其他应聘者比较。如果他能将一个命令用得很熟,相信他在业务需要的时候,也能将你要的 find 命令用好。
|
141
felix021 OP @Steven0125 是的,所以我们从来不会因为候选人某一个问题没有回答出来就觉得候选人不符合预期。
|
142
wzzzx 2020-07-05 10:12:09 +08:00
很多时候,很多问题,没有这些基础知识,是很难解决的。
|
143
twl007 2020-07-05 10:13:52 +08:00 via iPhone
|
144
twl007 2020-07-05 10:19:45 +08:00 via iPhone
@wzzzx 能否举个例子么,什么样的问题会被这种花五分钟搜一下就能解决的问题卡住?如果你觉得你对基础知识了解有偏差到影响你解决某些问题,那应该去加强你的学习能力。这种东西就是属于知道就是知道了,不知道看了一下也知道了,这样的问题能卡住你什么?
真正麻烦的问题远不是这类死扣技术细节的问题,真到了死扣具体细节的时候反而最麻烦的地方已经过去了。很多时候如何提出一个完美的方案才是最难。 |
145
twl007 2020-07-05 10:22:11 +08:00 via iPhone
@felix021 另外这个帖子的图片如果能换最好换一下吧 贴的表情透露出对候选人明显的不尊重 不要给自己和候选人加这么多的内心戏
|
148
felix021 OP @wzzzx 哈哈,我写的时候也很开心,没想到发出来还有点糟心,不过不打紧,你们看了有收获更重要。
|
149
ChristopherWu 2020-07-05 12:15:06 +08:00 1
|
150
Mirage09 2020-07-05 12:37:47 +08:00 via iPad
@felix021 你跟我争这个还不如去看看上面你们头条的人说的吧。
knowledge share 还行,但是面试考这个真的很无聊,我们公司虽然 someone does everything 但是也不会在面试里面主动折腾这种 trivia |
151
movistar 2020-07-05 13:51:45 +08:00
还有物理开发机的不就是搜索推荐广告几个团队么
那么发这个 thread 的同学大概率在算法同学为主的团队里,工程能力差也挺合理的 而且头条的基础建设本来就是糙快猛,带坏了新同学也正常,让新同学 /能力比较差的人以为这就是大公司基建 |
152
Jat001 2020-07-05 14:03:11 +08:00 via Android
@felix021 你怎么不说下面一堆批评你的回复也有不少人点赞。你倒好,辨不过直接给人扣上了喷子的帽子,别人拿不同的观点反驳你就是喷子了?如果不想被人喷就别在分享技术的时候还夹带私货。
|
153
czzhengkw 2020-07-05 15:35:50 +08:00
散了吧,大家,楼主就是喜欢这种你看我不爽,又说不过我的感觉……
没必要跟这种人较真,说个一两句就行了,人家是优越感爆棚,不秀会死型…… |
154
CosimoZi 2020-07-05 16:02:44 +08:00
对技术有热情是好事,但是也请有点 good sense.不要浪费时间在遇到了问题查一下就知道的细枝末节上.
|
155
Jat001 2020-07-05 16:54:53 +08:00
心平气和地写点东西,欢迎不同的观点
什么是“天花板”? 我所认为的天花板是你的学习能力,对知识的好奇心,而不是你背了多少书。诚然,学富五车的人值得尊敬,但知识总会过时的,抱着自己那点知识就沾沾自喜才是最可怕的,知识越渊博的人越懂得三人行必有我师的道理。 我前两份工作是跟基因检测和图像识别相关的,尽管我在这两个领域也只是略懂皮毛,但也能说出一堆名词来显得你很无知,不过我一般不那么做,而当我试图解释一些名词和业务流程时,我发现大部分面试官都兴趣索然,很少人会继续深入。很多面试官只关心我用了什么框架,我为什么用这个框架,而不是我为什么要设计这种业务流程。 遇到不懂的事情能够主动去了解,我认为这就够了,程序员是工作,不是科研,让用户满意才是最重要的。对技术研究得很深入固然是好事,但始终不要忘了,你的用户根本不关心这些细枝末节。我曾经也以为技术为王,基础知识和算法能力才是最重要的,后来发现我错了,一个公司成功的关键是让用户满意,技术不能落地代码写得再优雅也没用。 面试不是菜市场买菜,面试更像是相亲,面试是一个双向选择,面试官不应该抱着一种高人一等的心态,像楼主这种背后嘲讽人的更显得素质低下。 |
156
yann1992 2020-07-05 17:04:36 +08:00
这个作为面试题应该还好吧,看面试者能答到什么层次
|
157
ChristopherWu 2020-07-05 17:32:28 +08:00
@czzhengkw 下次不留言,不给热度他,233
|
159
chocotan 2020-07-05 17:54:47 +08:00
技术分享能不能别带什么招聘链接和微信二维码
|
160
cedoo22 2020-07-05 18:31:41 +08:00
V2 上你居然发帖, 连贴图带表情,滚了 3 页才完, 废话真多。
还有删除日志,这个功能, 环境变量很多吗??你要写一个万能删除日志的系统吗??? |
161
ChanKc 2020-07-05 20:08:06 +08:00
@newtype0092
我不介意和这样的人做同事,当然还要看具体的情况 > 这个意义不大,实际场景用不到 如果知道为什么“这个意义不大”,是很有用的。比如 JavaScript 的变量提升。如果不是最近准备面试我根本不会想到这个东西。我所有的变量都是手动提升的。这样对代码阅读来说也会是更加清晰。有些面试题真的很蠢,甚至是在变相鼓励一些程序员在实际工作中去写一些看似酷炫实际上很难维护的代码。有些“知识”确实是“没有用”的。你生而为人不需要知道屎是什么味道就应该避免去吃屎。 > 这个不用自己写,调一下库就行 工作中我最怕同事在明明有库可以调的时候,偏要自己写。熟悉库并且合理运用库是很重要的技能。而且这个世界本来就是分工合作的,有的人会写库有的人写 test 。有时候一些面试题就好比“你吃过肯德基?讲讲原味鸡是怎么做的?”。如果我原味鸡一直吃得好好的为什么我要知道怎么做? > 这个我没用过,用的时候百度一下就知道了 我很讨厌百度出来的答案。头几条出来的全是 CSDN,一些不知道什么样的人把同一个问题反复 copy paste 出来的所谓博客。如果对于没有用过的东西,能马上找到准确的答案,比如相关的 spec 或者 doc,我觉得也是不错的能力。 被人这么三板斧的时候为什么不反思一下你的问题,是不是“屎是什么味道”,还是“原味鸡怎么做”? |
162
yanqiyu 2020-07-05 22:08:15 +08:00 via Android
要我 NAS 直接暴力 rm log 文件大概就不会再有日志了( SELinux 上下文问题)
journalctl 它不香吗 |
163
yanqiyu 2020-07-05 22:27:26 +08:00 via Android
其实我要是遇到删除文件之后空间没释放第一时间会怀疑是我的 btrfs 在搞事情(因为我遇到过)
然后删除正在使用的文件并且不释放空间的事情...我没遇到过这种事情,所以自然想不到(因为我不是运维,且从来没遇到过删除正在被使用的文件的事情) |
164
no1xsyzy 2020-07-05 23:17:45 +08:00
既然没有 log rotate 为什么要考虑 log rotate 而 -name '*.log*'?
*.log* 还是比较危险的,我扫了一圈 arch 的全盘,发现 '*.log.*' 会更好 @mingl0280 #101 不加 -L 是不会的。 |
165
felix021 OP @no1xsyzy
1. 很多服务的日志库会自动 logrotate,但是开发机上自己启动的服务,之前没有机制来清理这些 log 2. 是偷懒了,因为这么写的话得分成 "*.log" 和 "*.log*" 写 2 条 |
166
eallion 2020-07-06 00:47:21 +08:00 1
我 2 岁的儿子可以拿着点读笔不停地问我一天关于点读笔的问题。
|
167
uuspider 2020-07-06 07:20:51 +08:00 via Android
为啥要删.log ?日志是为了追溯,压缩起来备份不是更好吗?这东西能占多少空间?
|
168
newtype0092 2020-07-06 10:37:01 +08:00
|
169
ahbcd112 2020-07-06 10:51:31 +08:00
说了两件事
1. 批量删除文件 2. 删除的文件如果被其他进程打开,文件只会进程解除锁定时,才实际删除文件 3. LINUX 下面的几个命令组合。 貌似都很基础~~~是给初中级人学的么? |
170
ChanKc 2020-07-06 11:05:05 +08:00 via Android
@newtype0092 这不就是“原味鸡怎么做”吗
|
171
ChanKc 2020-07-06 11:17:39 +08:00 via Android
@newtype0092 我想说的是,工作更关心的应该是解决工作上的问题。问快排更像是一个数据结构与算法的本科生考试。工作上更关心的就应该是合理地选择技术方案去解决问题。说到排序,你可以问一个类似于 k 最值的问题(比如说我要分页显示一些数据,每一页相对前一页内容是有序的,但是页面内可以无序),这个就涉及到很多方面的内容了,而且也是有可能工作中遇到的。这个不是比“写个快排”好很多?
|
172
newtype0092 2020-07-06 11:27:51 +08:00
|
173
ChanKc 2020-07-06 11:42:53 +08:00 via Android
@newtype0092 一个合格的工程师应该是第一时间想到性价比最高的做法。调库的人可能知道原理也可能不知道原理。库的存在就是为了不知道原理的人在暂时不知道的情况下也出色地完成任务。
我这是觉得有时候一些面试问题问得很死板,包括但不限于“写个排序”。如果我调库,是不是显得我不懂?如果我直接写出底层的算法,我是不是工程师素养不够?会不会怀疑我是背的? |
174
ChanKc 2020-07-06 12:14:58 +08:00 via Android
@newtype0092 说回快速排序。大部分的面试人应该都没办法写出比调库更快的排序算法。大部分人应该都不会写到 double pivot 。但是如果你让他面试通过了,你就是潜在地鼓励他在工作中去使用自己写的排序方法,然后导致你的工程效率下降。我看过很多这样的问题了。v2ex 上面时不时就有各种根本比不上 guava 和 Apache commons 的 Java“工具类包”,本质上就是这样的面试导向的结果。
不懂原理在大部分时候都不是问题。就排序这个问题而言,现在 JDK 用的是 TimSort,93 年才发表的论文上的。你可能每个项目都在用 JDK 的 sort 但你知道 TimSort 吗 |
175
cholerae 2020-07-06 12:32:42 +08:00
广告工程师面试为啥要问这些东西??
|
176
cholerae 2020-07-06 12:33:27 +08:00
感觉是来反串黑我条的。。。
|
177
newtype0092 2020-07-06 14:32:40 +08:00
@ChanKc 为什么我面试的时候让人写一个算法,就是鼓励他在工作中自己去实现啊?你这个逻辑完全没因果关系啊。
对于简单的算法最快的考察方法不就是让他手写一个么?如果是大型的数据结构、复杂的算法,肯定只要讲下核心部分或者写下核心伪代码啊。 我上面说回答面试问题的时候不应该用这些敷衍的方式,你搬出各种理论来证明: 敷衍是你题出的不行 敷衍的人工作的时候不一定会敷衍 面对死板的问题,不用敷衍的态度反而说明能力可能有问题 我实在很难认同。 不专业的面试官太常见了,尤其初面,很多人都是赶鸭子上架,或者低级面试高级,你不能指望每个人提的每个问题都那么完美。 只要是技术方面的问题,哪怕他问的问题不是那么合适,我也会根据我的知识给出尽量切题的解答,因为我知道所谓的面试问题是给我展示自身的技术实力而出的一个方向,而不是积分有奖竞答,我知道调库、百度这种回答并不能把我和刚毕业的实习生区别开来。 在我看来这种回答有两种原因,一种是真的只懂皮毛,一种是觉得问题太简单懒得废话,无论哪种,我还是不愿意和这种人同事。 |
178
lfzyx 2020-07-06 22:53:17 +08:00
LZ 说 “因为各种历史问题好几十个人使用同一个开发机,以及一个测试服务随便就可以打几十 GB debug log 的场景”,
-- 那这明显是业务开发的程序设计不合理啊,动不动就写 GB 级别的日志,没意义的日志就注释掉好吗,好吧有的业务开发不会用开发工具的断点功能,但能不能直接输出到控制台呢,非要写文件? |
179
hahaayaoyaoyao 2020-07-07 11:20:54 +08:00 via Android
@ChanKc 现在面试都喜欢搞事情,有些资料我查了很久发现只有二手中文才会那么说
|
180
xyjincan 2020-07-07 11:38:24 +08:00
一个打开的无缓冲的高速写入日志文件,无法 用 echo 重定向进行清空,没反应
|