V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
felix021
V2EX  ›  推广

Linux 下删点日志也能搞死人

  •  
  •   felix021 · 2020-07-04 12:54:47 +08:00 · 13060 次点击
    这是一个创建于 393 天前的主题,其中的信息可能已经有所发展或是发生改变。

    rm.png

    想了十天十夜不知道写些什么,那就写写面试题吧。

    1

    在面试应聘者的时候,我常常会问:

    在 Linux 下,如何删除一个目录下的所有 log 文件?

    不知道是不是我人畜无害的围笑给了应聘者我很好应付的错觉

    王宝强.png

    以至于应聘者全都回答:rm *.log

    追问:该目录下可能有很多子目录,如何把子目录里的 log 文件也删掉呢?

    答:rm -r *.log

    一脸人畜无害的笑容.jpeg

    2

    令我很意外的是,真的只有很少的应聘者能想到 find 命令。

    而且想到的人也很少有记得具体用法的。

    周星驰.png

    目前为止只有一个应聘者能够给出完整的命令:

    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,而是使用重定向来清空文件,原因后面会讲。

    3

    基于清理磁盘空间这个场景,我还会继续问:

    你有遇到过删了 log 文件,但是磁盘空间却没有释放的情况吗?

    有些候选人可能心里在想着:文件删了不就删了吗,还有什么磁盘空间没释放?

    微笑中透漏着.jpeg

    所以有时候我需要解释一下,是 df 命令看到的磁盘空间没有减少。

    还有个候选人努力想了想,和我确认,是不是正好这个目录挂载的是其他磁盘,所以看起来当前磁盘空间没减少。(当然不是)

    思路稍微开阔一点的候选人会想到:你个憨批莫不是删了个软链接吧?

    华而不实的脑子.png

    当然候选人的语气会比较友好。

    然后我会和候选人继续沟通:

    你提到了软链接,那它和硬链接的区别是什么呢?

    有时候我怀疑这几个连续的问题问到候选人开始怀疑人生,因为有的候选人有点犹豫,觉得自己想说的其实是硬链接。

    反正我信了.png

    不过还是有几个候选人知道,软链接是一种文件类型,其内容是目标文件的路径;硬链接是 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
    

    4

    但实际生产上,遇到 “删了 log 文件、但空间不释放” 通常和软 /硬链接没有什么关系。

    我踩的坑多-不会骗你.png

    实战经验比较丰富的候选人会知道,这往往是因为 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  被标记为已删除,但因为进程还开着它,可能会访问文件的内容,所以内核会等到进程关闭该文件(或进程退出后)才在磁盘上移除这个文件。

    5

    在面试中通常没有机会再问下去了,但实践中往往问题还没解决。

    比如前述共享开发机,就曾遇到了磁盘空间共 800G,但用 du 命令查看,所有文件只占用了 500G 的情况。

    那么:

    1. 如何才能知道现在系统中有哪些文件已删除、但是仍被占用呢?

    $ sudo lsof | grep deleted
    COMMAND   PID  …  NAME
    main   893246  …  /../nohup.out (deleted)
    ...
    

    发现是有大量已经被删除、但仍被某些进程打开的 nohup.out 。

    2. 坑是找到了,该怎么填呢?

    由于这是开发机,很简单,把进程杀掉就好了,进程退出时,内核会负责关闭文件,然后清理占用的空间。

    但如果是线上服务呢?

    Linux 下有一个 package 叫 logrotate,像 nginx 这些服务就是使用它来做日志切割 /轮转的。

    但 nginx 是在后台持续运行的,不能为了切个日志就停止服务,所以它们是这样约定的:

    1. logrotate 执行 rename 系统调用(相当于 mv 命令)重命名日志文件;
    2. 由于 inode 不变,这时 nginx 会继续写入重命名后的日志文件;
    3. logrotate 给 nginx 发送一个 SIGHUP 信号;
    4. nginx 在收到信号后会关闭当前文件,并重新打开日志文件(即创建了新的日志文件)。

    注:为什么是用 SIGHUP 而不是其他信号,以后可能会另开一篇讲讲。

    这样 logrotate 出来的日志,就可以放心删除了。

    对于不支持类似逻辑的服务怎么办呢?

    重启大法。

    如果不怕背 P0 的话,还可以这么作死:

    $ sudo gdb
    (gdb) attach $PID
    (gdb) call ftruncate(3, 0) #按需修改 fd
    $1 = 0
    

    注:看起来文件是清空了,但可能存在其他坑,后果自负。ftruncate 只是清空文件,如果想关闭文件,可以结合 dup 、dup2 、open 和 close 来搞事,不细说了。

    吃药冷静一下.png

    6

    看到这里你应该明白了为什么前面那个 find 命令不直接用 rm 了吧?

    照例总结下:

    1. 可以用 find 查找文件
    2. 软链接存的是路径,硬链接共享 inode
    3. 删除被进程打开的文件,磁盘空间不会释放
    4. lsof 很好用(不只是看文件的占用)

    还想知道其他有意思的面试题吗?

    不如投个简历来亲身体验下:

    ~ 投递链接 ~

    投放研发工程师(上海)

    https://job.toutiao.com/s/J8DRDyG

    高级广告研发工程师(北京)

    https://job.toutiao.com/s/J8DNwJY

    欢迎关注

    weixin2s.png

       ▄▄▄▄▄▄▄   ▄      ▄▄▄▄ ▄▄▄▄▄▄▄  
       █ ▄▄▄ █ ▄▀ ▄ ▀██▄ ▀█▄ █ ▄▄▄ █  
       █ ███ █  █  █  █▀▀▀█▀ █ ███ █  
       █▄▄▄▄▄█ ▄ █▀█ █▀█ ▄▀█ █▄▄▄▄▄█  
       ▄▄▄ ▄▄▄▄█  ▀▄█▀▀▀█ ▄█▄▄   ▄    
       ▄█▄▄▄▄▄▀▄▀▄██   ▀ ▄  █▀▄▄▀▄▄█  
       █ █▀▄▀▄▄▀▀█▄▀█▄▀█████▀█▀▀█ █▄  
        ▀▀  █▄██▄█▀  █ ▀█▀ ▀█▀ ▄▀▀▄█  
       █▀ ▀ ▄▄▄▄▄▄▀▄██  █ ▄████▀▀ █▄  
       ▄▀▄▄▄ ▄ ▀▀▄████▀█▀  ▀ █▄▄▄▀▄█  
       ▄▀▀██▄▄  █▀▄▀█▀▀ █▀ ▄▄▄██▀ ▀   
       ▄▄▄▄▄▄▄ █ █▀ ▀▀   ▄██ ▄ █▄▀██  
       █ ▄▄▄ █ █▄ ▀▄▀ ▀██  █▄▄▄█▄  ▀  
       █ ███ █ ▄ ███▀▀▀█▄ █▀▄ ██▄ ▀█  
       █▄▄▄▄▄█ ██ ▄█▀█  █ ▀██▄▄▄  █▄  
    
    第 1 条附言  ·  2020-07-04 14:09:40 +08:00
    欢迎探讨,从本文的回复中我也学到了一些新的知识点(比如 find 的 -delete 参数,以及直接 echo 到 procfs 清文件);不过一看到不同观点就上头开喷的同学,建议下次就不要点开了。
    180 条回复    2020-07-07 11:38:24 +08:00
    1  2  
    mingl0280
        101
    mingl0280   2020-07-04 23:18:09 +08:00   ❤️ 10
    这个发帖的估计是没什么运维经验的在校生?打肿脸还要充胖子那种,自己需求非常不明确还要别人猜意思,而且某些操作让人目瞪口呆(例如什么日志打开中还删日志),更不要提那个 find /home+cron 操作简直是作死的神来之笔,用户在自己子目录下建一个 ln 到 /usr 的目录你就修机器去吧!
    Jat001
        102
    Jat001   2020-07-04 23:22:10 +08:00
    @newtype0092
    面对熟悉的问题时
    知识匮乏的人,会迫不及待得炫耀自己:这题我会
    而有实力的人,会把自身丰富的知识储备分享给别人

    这个意义不大,实际场景用不到
    用不到就是用不到,老板招你不是来实现用不到的场景的

    这个不用自己写,调一下库就行
    有库为什么还要自己造轮子?你每天都自己造轮子的话,工作还做不做?

    这个我没用过,用的时候百度一下就知道了
    每个人都有自己不懂的东西,用的到或者感兴趣的就去了解,用不到又不感兴趣的为什么要去了解?
    wwhc
        103
    wwhc   2020-07-04 23:26:44 +08:00
    Linux 下 log 文件并没有统一的文件名后缀,只是大部分都用.log 而已,不是.log 后缀的很多。如果遇到 log 文件过大,我首先做的是确定 log 文件是由哪个进程生成的,检查这个进程的启动方式、日志轮换脚本,尽量利用自带的轮换日志脚本,实在没有才自己写脚本处理

    楼主的这类面试方式,不大能招到有比较多运维经验者
    hatebugs
        104
    hatebugs   2020-07-04 23:44:16 +08:00 via Android   ❤️ 2
    看这个帖子一直在前面,又来看了评论,作为一个互联网运维,我觉得楼主的题做面试考核没啥问题。日常见到的互联网的中级开发,有些经常删了文件还来问为啥沒释放,这个问题从实践经验,和对操作系统的深度,都有面试者自由发挥的空间。
    rockuw
        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
    zthxxx
        106
    zthxxx   2020-07-05 01:12:21 +08:00   ❤️ 2
    @Jat001 #100 兄弟,你这个确实就叫基础知识欠缺

    来面试的明说不是科班出身,基础知识又没有,又说反正能写出代码完事,很容易让面试官想到这人培训班来的
    Jat001
        107
    Jat001   2020-07-05 01:26:33 +08:00 via Android
    @zthxxx 我是野路子自学的,一天培训班都没上过,我不信培训班不教基础知识和面试方法。我干这行 5 6 年了,也有科班出身的同事,但工作中没人交流基础知识,都是 API 、文档、自己看代码。业务为主,能写代码、少出 bug 就行。
    felix021
        108
    felix021   2020-07-05 01:32:54 +08:00
    @Jat001 术语存在的意义是提高交流的效率。就像 GoF 里面的那些模式,名字本身叫什么无所谓,关键是达成共识后,交流的双方可以用简洁的语言完成高效的信息传递。

    培训班的目的是就业,基础知识的 ROI 太低,课程里可能会涉及,但一定不会深究。因此出身培训班的人,通常天花板会比科班出身低,这就是大厂不愿意招那些培训班出身程序员的原因。
    Jat001
        109
    Jat001   2020-07-05 01:38:00 +08:00 via Android
    @felix021 贵司工作中真的会交流术语吗?大部分公司不都是业务导向吗?需求确定了,leader 顶多跟你研究一下系统架构怎么设计,但没人会管你用什么设计模式写代码吧?
    royzxq
        110
    royzxq   2020-07-05 01:41:15 +08:00   ❤️ 1
    我去,我说怎么看行文这么有我条甚至部门既视感,再看头像更眼熟了。

    打开 lark 一搜果然. hhhh 强烈建议开发机上可以部署 pm2. 共享的开发机 pm2 我尝试了但是起不来
    Jat001
        111
    Jat001   2020-07-05 01:42:57 +08:00 via Android
    @felix021 另外天花板是什么,大厂的代码就比小公司的优雅?不都是写业务代码?大厂不愿意招培训班出身的不是因为大厂资源丰富,科班的都招不过来,根本看不上培训班出来的吗?
    blless
        112
    blless   2020-07-05 01:50:29 +08:00 via Android   ❤️ 1
    @Jat001 兄弟,我也是非科班出身,以前也是抱着你差不多念头。
    之所以觉得自己不了解这些概念,没听过一些名词无非就是觉得自己不用这些也能解决问题。你肯定有解决问题的能力。我觉得你还没遇上解决问题能力跟你一样,基础比你扎实的多的人。我也是遇到这样的人的时候才觉得自己被全方位碾压,我也不说啥难听的。但是听我一句劝,想好好吃程序这碗饭,还是要把很多基础,概念,理论都理解贯通得好
    royzxq
        113
    royzxq   2020-07-05 01:54:30 +08:00
    原来还有删掉了空间不释放的情况呀,学到了
    Mirage09
        114
    Mirage09   2020-07-05 02:02:19 +08:00
    作为一个 someone does everything 很好奇什么测试服务会打几十个 g 的 log...
    felix021
        115
    felix021   2020-07-05 02:04:56 +08:00
    @Mirage09 用线上流量来批量测试的时候,测试环境 log level 低,或者测试分支添加了大量测试日志。
    necomancer
        116
    necomancer   2020-07-05 02:05:15 +08:00
    @CRVV
    @mingl0280
    大佬说得好啊!
    Jat001
        117
    Jat001   2020-07-05 02:06:12 +08:00 via Android
    @blless 我认同你的观点,解决问题能力强、基础又扎实的人确实牛逼。但我走上编程这条路本来不是为了吃饭,只是对用技术解决问题很感兴趣,另外我本身对死记硬背也深恶痛绝,所以我还是会坚持实用主义直到对编程失去兴趣的那一天。
    Mirage09
        118
    Mirage09   2020-07-05 02:07:39 +08:00
    @felix021 一般情况下我们就直接换机器了
    WittBulter
        119
    WittBulter   2020-07-05 02:13:10 +08:00   ❤️ 1
    帖子内容的技术比重是有的,但是我一看到字节 /头条+面经之类的内容,我就知道下面要打成一片 😂....
    字节的同学们好像特别喜欢营造技术媚俗感 (我没有评论好坏)
    felix021
        120
    felix021   2020-07-05 02:20:25 +08:00 via Android   ❤️ 1
    @WittBulter 每个人的感受都不一样,有些人觉得很有帮助,有些人觉得很浅,有些人觉得有些内容不合适,其实都很正常; 头疼的是那些自以为绝对正确就开喷的,反驳嘛浪费时间,不反驳嘛又显得怂,太难了。

    另外,你说的这个技术媚俗感,我不是很能 get 。不过头条招聘的整体标准确实感觉比其他厂高,可能是你所说的这个媚俗感的原因?(所以招人真的难)
    Jat001
        121
    Jat001   2020-07-05 02:43:14 +08:00 via Android
    另外说点题外话,市场是由供求关系决定的,当需求旺盛时,用人单位会降低招工门槛,技术水平低的人也能找到不错的工作,而当经济不景气,市场供大于求,用人单位就会提高招工门槛,用各种手段筛选求职者,以求用最低的成本招到最优秀的人才。正是这看似合理的市场经济带来了严重的失业潮,令本就不景气的经济雪上加霜,更加剧了社会动荡。

    搞技术的人总会陷入一个误区,认为技术决定一切,殊不知“一个人的命运啊,当然要靠自我奋斗,但是也要考虑到历史的行程”。很多大公司并不是因为技术牛逼而发展起来的,而是因为公司抓住机遇发展起来后,有了更多的资金投入到技术研发上来。
    Jat001
        122
    Jat001   2020-07-05 02:46:33 +08:00 via Android   ❤️ 1
    @felix021 你如果只分享技术,不带观点,下面也不会吵
    Jat001
        123
    Jat001   2020-07-05 02:56:46 +08:00 via Android
    @felix021 我猜“技术媚俗感”是因为你这帖子有一种技术高于一切的感觉

    招人难不是因为贵司不愁招不到人吗?放到 8 年前,贵司是否会用同样的标准招人?
    aheadlead
        124
    aheadlead   2020-07-05 03:04:22 +08:00   ❤️ 2
    楼主位的内容其实挺好的,大部分面试者根本都答不出一个满意的答案。

    谁敢说自己没干过删除了一个正在打开的日志文件?开发机而已,楼主又没说是生产环境,完全 ojbk 好吧。

    “3. 删了文件磁盘空间不释放这很正常,还有可能是 btrfs 或者 zfs 上给 dedup 了。
    有这么多种可能性,我不知道为什么来面试的人就必须要想到是文件还在被占用。”

    还有楼上这位,你连 dedup 都能答出来,面试官还会死卡你文件正在打开吗?
    而且用 btrfs 或 zfs 的公司能有几家?能有 ext4 或 xfs 之类的普及吗?一般情况能答出文件正在打开就很不错了。
    aheadlead
        125
    aheadlead   2020-07-05 03:05:25 +08:00
    我觉得楼主的文章就是挺好的。在校生或者刚毕业没有太多经验的话,楼主位的内容很多人都不知道的。
    felix021
        126
    felix021   2020-07-05 03:08:08 +08:00 via Android
    @aheadlead 他太入戏了,不能理解文字的表达能力是有限的,一篇文章只能讲一个故事,但故事可以有很多演绎方式。
    Jat001
        127
    Jat001   2020-07-05 03:08:27 +08:00 via Android   ❤️ 5
    @aheadlead 只分享技术当然是好的,但这带私活,还一堆表情包明显是来搞事的
    Jat001
        128
    Jat001   2020-07-05 03:16:03 +08:00 via Android
    @felix021 辩不过能别指桑骂槐吗?
    lxml
        129
    lxml   2020-07-05 03:29:51 +08:00
    哈哈, 不是运维,憨憨研发表示这个当作面试考点特别好,很考验实战的技能。

    不过 gnu 工具有个不好的地方就是好多东西有一万种写法(比如 exec 这种传导前面参数给后面命令的,我就喜欢写 xargs ), 然后因为 shell 语法再加上 bash 没有良好的函数支持,各种管道组合起来真的很头疼,我自己维护的超过 3 行 shell 全改成 python 脚本执行了
    Mirage09
        130
    Mirage09   2020-07-05 03:38:29 +08:00
    我觉得吧,这种情况值得一篇内部 wiki post,让后来人能不再踩坑;但是面试的话,无论是不是 new grad,问这种 trivia 都是一件很无聊的事情...
    当然了在推广下说这个我也挺无聊的...
    binux
        131
    binux   2020-07-05 03:48:18 +08:00 via Android
    居然是头条。。。
    CosimoZi
        132
    CosimoZi   2020-07-05 04:16:08 +08:00
    我字节内部不都是容器云流式日志吗?和你说的这些个手动管理有什么关系????????????????
    搞得像是字节云内部服务组件差劲到这种程度似的
    594duck
        133
    594duck   2020-07-05 05:40:26 +08:00 via iPhone
    @mingl0280 说得好,我看了这广告的公司就恶心。恶心
    594duck
        134
    594duck   2020-07-05 05:43:48 +08:00 via iPhone
    @mingl0280 说得好,我看了这广告的公司就恶心。恶心
    @WittBulter 老哥说的太到位了。字节已经和阿里一样。觉得天上地下我最大一样了。 我很想知道发这个帖子的人真是名字。等 10 年后再看看他怎么样了。另外我把这个帖子转到 twitter 上去了。帮字节的人好好宣传下。

    战狼公司奋斗逼之家
    594duck
        135
    594duck   2020-07-05 05:49:09 +08:00 via iPhone
    @ruidoBlanco 老哥撕的好。这是字节跳动的招聘广告。一股浓浓的优越感。这公司的价值观和人事快和阿里,百度对标了。
    cs419
        136
    cs419   2020-07-05 06:00:16 +08:00
    内卷化严重在这个帖子体现的很好啊
    本来吧 是高要求的厨子 希望煲汤、雕工、爆炒 总之能干的越多越好
    现在呢 最好还熟悉收银 记账 报税

    通常看到研发工程师的职位,先想到的是后端开发,中间件开发
    不过单从帖子的面试提问看 要招的是个运维吧

    所以你们公司招的研发工程师 == 懂点开发的高级运维 ??
    你这改成招 devops 工程师 不好么
    felix021
        137
    felix021   2020-07-05 08:56:54 +08:00 via Android
    @CosimoZi 开发机、开发机、开发机
    felix021
        138
    felix021   2020-07-05 09:04:15 +08:00 via Android
    @cs419 从每一个侧面去发掘候选人的亮点。
    felix021
        139
    felix021   2020-07-05 09:05:30 +08:00 via Android
    @Mirage09 你看其实有很多人点了收藏和感谢,无论喷子们怎么喷,总有人有收获了。
    Steven0125
        140
    Steven0125   2020-07-05 09:26:02 +08:00 via Android   ❤️ 1
    个人觉得,面试官不应该总拿自己会的东西问别人,而是尽量去问被面试者会哪些,会到什么程度,这种程度能不能能不能达到贵司要求,或者去跟其他应聘者比较。如果他能将一个命令用得很熟,相信他在业务需要的时候,也能将你要的 find 命令用好。
    felix021
        141
    felix021   2020-07-05 09:31:19 +08:00 via Android
    @Steven0125 是的,所以我们从来不会因为候选人某一个问题没有回答出来就觉得候选人不符合预期。
    wzzzx
        142
    wzzzx   2020-07-05 10:12:09 +08:00
    很多时候,很多问题,没有这些基础知识,是很难解决的。
    twl007
        143
    twl007   2020-07-05 10:13:52 +08:00 via iPhone
    @felix021 还是不要用开发机作为借口来证明自己这个行为的合理性了 建议多去看看别的公司开发环境怎么管理的 你们要是容器化部署开发也这么来管理日志?

    程序员的勤快不是用在这个地方的
    twl007
        144
    twl007   2020-07-05 10:19:45 +08:00 via iPhone
    @wzzzx 能否举个例子么,什么样的问题会被这种花五分钟搜一下就能解决的问题卡住?如果你觉得你对基础知识了解有偏差到影响你解决某些问题,那应该去加强你的学习能力。这种东西就是属于知道就是知道了,不知道看了一下也知道了,这样的问题能卡住你什么?

    真正麻烦的问题远不是这类死扣技术细节的问题,真到了死扣具体细节的时候反而最麻烦的地方已经过去了。很多时候如何提出一个完美的方案才是最难。
    twl007
        145
    twl007   2020-07-05 10:22:11 +08:00 via iPhone
    @felix021 另外这个帖子的图片如果能换最好换一下吧 贴的表情透露出对候选人明显的不尊重 不要给自己和候选人加这么多的内心戏
    wzzzx
        146
    wzzzx   2020-07-05 10:34:28 +08:00
    @felix021 是真的收获巨大,一直都有关注您的文章。不过就是越看越觉得自己玩球了哈哈哈哈,怎么可以这么水
    wzzzx
        147
    wzzzx   2020-07-05 10:36:55 +08:00
    @felix021 而且我特别喜欢您的文章的风格,叙述 /配图什么的,太可以了!
    felix021
        148
    felix021   2020-07-05 10:56:19 +08:00 via Android
    @wzzzx 哈哈,我写的时候也很开心,没想到发出来还有点糟心,不过不打紧,你们看了有收获更重要。
    ChristopherWu
        149
    ChristopherWu   2020-07-05 12:15:06 +08:00   ❤️ 1
    @felix021

    > 不过头条招聘的整体标准确实感觉比其他厂高,可能是你所说的这个媚俗感的原因?(所以招人真的难)

    估计大家看不惯的是你这话里的这个态度吧。。
    Mirage09
        150
    Mirage09   2020-07-05 12:37:47 +08:00 via iPad
    @felix021 你跟我争这个还不如去看看上面你们头条的人说的吧。
    knowledge share 还行,但是面试考这个真的很无聊,我们公司虽然 someone does everything 但是也不会在面试里面主动折腾这种 trivia
    movistar
        151
    movistar   2020-07-05 13:51:45 +08:00
    还有物理开发机的不就是搜索推荐广告几个团队么
    那么发这个 thread 的同学大概率在算法同学为主的团队里,工程能力差也挺合理的
    而且头条的基础建设本来就是糙快猛,带坏了新同学也正常,让新同学 /能力比较差的人以为这就是大公司基建
    Jat001
        152
    Jat001   2020-07-05 14:03:11 +08:00 via Android
    @felix021 你怎么不说下面一堆批评你的回复也有不少人点赞。你倒好,辨不过直接给人扣上了喷子的帽子,别人拿不同的观点反驳你就是喷子了?如果不想被人喷就别在分享技术的时候还夹带私货。
    czzhengkw
        153
    czzhengkw   2020-07-05 15:35:50 +08:00
    散了吧,大家,楼主就是喜欢这种你看我不爽,又说不过我的感觉……

    没必要跟这种人较真,说个一两句就行了,人家是优越感爆棚,不秀会死型……
    CosimoZi
        154
    CosimoZi   2020-07-05 16:02:44 +08:00
    对技术有热情是好事,但是也请有点 good sense.不要浪费时间在遇到了问题查一下就知道的细枝末节上.
    Jat001
        155
    Jat001   2020-07-05 16:54:53 +08:00
    心平气和地写点东西,欢迎不同的观点

    什么是“天花板”?
    我所认为的天花板是你的学习能力,对知识的好奇心,而不是你背了多少书。诚然,学富五车的人值得尊敬,但知识总会过时的,抱着自己那点知识就沾沾自喜才是最可怕的,知识越渊博的人越懂得三人行必有我师的道理。

    我前两份工作是跟基因检测和图像识别相关的,尽管我在这两个领域也只是略懂皮毛,但也能说出一堆名词来显得你很无知,不过我一般不那么做,而当我试图解释一些名词和业务流程时,我发现大部分面试官都兴趣索然,很少人会继续深入。很多面试官只关心我用了什么框架,我为什么用这个框架,而不是我为什么要设计这种业务流程。

    遇到不懂的事情能够主动去了解,我认为这就够了,程序员是工作,不是科研,让用户满意才是最重要的。对技术研究得很深入固然是好事,但始终不要忘了,你的用户根本不关心这些细枝末节。我曾经也以为技术为王,基础知识和算法能力才是最重要的,后来发现我错了,一个公司成功的关键是让用户满意,技术不能落地代码写得再优雅也没用。

    面试不是菜市场买菜,面试更像是相亲,面试是一个双向选择,面试官不应该抱着一种高人一等的心态,像楼主这种背后嘲讽人的更显得素质低下。
    yann1992
        156
    yann1992   2020-07-05 17:04:36 +08:00
    这个作为面试题应该还好吧,看面试者能答到什么层次
    ChristopherWu
        157
    ChristopherWu   2020-07-05 17:32:28 +08:00
    @czzhengkw 下次不留言,不给热度他,233
    Jat001
        158
    Jat001   2020-07-05 17:41:54 +08:00 via Android
    @czzhengkw 我倒觉得楼主的辩论能力是个渣渣
    chocotan
        159
    chocotan   2020-07-05 17:54:47 +08:00
    技术分享能不能别带什么招聘链接和微信二维码
    cedoo22
        160
    cedoo22   2020-07-05 18:31:41 +08:00
    V2 上你居然发帖, 连贴图带表情,滚了 3 页才完, 废话真多。
    还有删除日志,这个功能, 环境变量很多吗??你要写一个万能删除日志的系统吗???
    ChanKc
        161
    ChanKc   2020-07-05 20:08:06 +08:00
    @newtype0092

    我不介意和这样的人做同事,当然还要看具体的情况

    > 这个意义不大,实际场景用不到

    如果知道为什么“这个意义不大”,是很有用的。比如 JavaScript 的变量提升。如果不是最近准备面试我根本不会想到这个东西。我所有的变量都是手动提升的。这样对代码阅读来说也会是更加清晰。有些面试题真的很蠢,甚至是在变相鼓励一些程序员在实际工作中去写一些看似酷炫实际上很难维护的代码。有些“知识”确实是“没有用”的。你生而为人不需要知道屎是什么味道就应该避免去吃屎。

    > 这个不用自己写,调一下库就行

    工作中我最怕同事在明明有库可以调的时候,偏要自己写。熟悉库并且合理运用库是很重要的技能。而且这个世界本来就是分工合作的,有的人会写库有的人写 test 。有时候一些面试题就好比“你吃过肯德基?讲讲原味鸡是怎么做的?”。如果我原味鸡一直吃得好好的为什么我要知道怎么做?

    > 这个我没用过,用的时候百度一下就知道了

    我很讨厌百度出来的答案。头几条出来的全是 CSDN,一些不知道什么样的人把同一个问题反复 copy paste 出来的所谓博客。如果对于没有用过的东西,能马上找到准确的答案,比如相关的 spec 或者 doc,我觉得也是不错的能力。

    被人这么三板斧的时候为什么不反思一下你的问题,是不是“屎是什么味道”,还是“原味鸡怎么做”?
    yanqiyu
        162
    yanqiyu   2020-07-05 22:08:15 +08:00 via Android
    要我 NAS 直接暴力 rm log 文件大概就不会再有日志了( SELinux 上下文问题)

    journalctl 它不香吗
    yanqiyu
        163
    yanqiyu   2020-07-05 22:27:26 +08:00 via Android
    其实我要是遇到删除文件之后空间没释放第一时间会怀疑是我的 btrfs 在搞事情(因为我遇到过)

    然后删除正在使用的文件并且不释放空间的事情...我没遇到过这种事情,所以自然想不到(因为我不是运维,且从来没遇到过删除正在被使用的文件的事情)
    no1xsyzy
        164
    no1xsyzy   2020-07-05 23:17:45 +08:00
    既然没有 log rotate 为什么要考虑 log rotate 而 -name '*.log*'?
    *.log* 还是比较危险的,我扫了一圈 arch 的全盘,发现 '*.log.*' 会更好

    @mingl0280 #101 不加 -L 是不会的。
    felix021
        165
    felix021   2020-07-05 23:30:33 +08:00
    @no1xsyzy
    1. 很多服务的日志库会自动 logrotate,但是开发机上自己启动的服务,之前没有机制来清理这些 log
    2. 是偷懒了,因为这么写的话得分成 "*.log" 和 "*.log*" 写 2 条
    eallion
        166
    eallion   2020-07-06 00:47:21 +08:00   ❤️ 1
    我 2 岁的儿子可以拿着点读笔不停地问我一天关于点读笔的问题。
    uuspider
        167
    uuspider   2020-07-06 07:20:51 +08:00 via Android
    为啥要删.log ?日志是为了追溯,压缩起来备份不是更好吗?这东西能占多少空间?
    newtype0092
        168
    newtype0092   2020-07-06 10:37:01 +08:00
    @ChanKc 面试的时候这么回答的人,面对大多数问题基本都这套路。

    还有,你去面试人家让你写快排你就写个 qsort()?
    ahbcd112
        169
    ahbcd112   2020-07-06 10:51:31 +08:00
    说了两件事
    1. 批量删除文件
    2. 删除的文件如果被其他进程打开,文件只会进程解除锁定时,才实际删除文件
    3. LINUX 下面的几个命令组合。
    貌似都很基础~~~是给初中级人学的么?
    ChanKc
        170
    ChanKc   2020-07-06 11:05:05 +08:00 via Android
    @newtype0092 这不就是“原味鸡怎么做”吗
    ChanKc
        171
    ChanKc   2020-07-06 11:17:39 +08:00 via Android
    @newtype0092 我想说的是,工作更关心的应该是解决工作上的问题。问快排更像是一个数据结构与算法的本科生考试。工作上更关心的就应该是合理地选择技术方案去解决问题。说到排序,你可以问一个类似于 k 最值的问题(比如说我要分页显示一些数据,每一页相对前一页内容是有序的,但是页面内可以无序),这个就涉及到很多方面的内容了,而且也是有可能工作中遇到的。这个不是比“写个快排”好很多?
    newtype0092
        172
    newtype0092   2020-07-06 11:27:51 +08:00
    @ChanKc
    你这个比喻一点也不合适。

    好吧,我是觉得这种知其然不知其所以然的做法干不长久,工作经历长了以后总有“标准”做法不合适的情况,对原理一无所知的人也就止步于此了吧。
    ChanKc
        173
    ChanKc   2020-07-06 11:42:53 +08:00 via Android
    @newtype0092 一个合格的工程师应该是第一时间想到性价比最高的做法。调库的人可能知道原理也可能不知道原理。库的存在就是为了不知道原理的人在暂时不知道的情况下也出色地完成任务。

    我这是觉得有时候一些面试问题问得很死板,包括但不限于“写个排序”。如果我调库,是不是显得我不懂?如果我直接写出底层的算法,我是不是工程师素养不够?会不会怀疑我是背的?
    ChanKc
        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 吗
    cholerae
        175
    cholerae   2020-07-06 12:32:42 +08:00
    广告工程师面试为啥要问这些东西??
    cholerae
        176
    cholerae   2020-07-06 12:33:27 +08:00
    感觉是来反串黑我条的。。。
    newtype0092
        177
    newtype0092   2020-07-06 14:32:40 +08:00
    @ChanKc 为什么我面试的时候让人写一个算法,就是鼓励他在工作中自己去实现啊?你这个逻辑完全没因果关系啊。
    对于简单的算法最快的考察方法不就是让他手写一个么?如果是大型的数据结构、复杂的算法,肯定只要讲下核心部分或者写下核心伪代码啊。

    我上面说回答面试问题的时候不应该用这些敷衍的方式,你搬出各种理论来证明:
    敷衍是你题出的不行
    敷衍的人工作的时候不一定会敷衍
    面对死板的问题,不用敷衍的态度反而说明能力可能有问题

    我实在很难认同。

    不专业的面试官太常见了,尤其初面,很多人都是赶鸭子上架,或者低级面试高级,你不能指望每个人提的每个问题都那么完美。

    只要是技术方面的问题,哪怕他问的问题不是那么合适,我也会根据我的知识给出尽量切题的解答,因为我知道所谓的面试问题是给我展示自身的技术实力而出的一个方向,而不是积分有奖竞答,我知道调库、百度这种回答并不能把我和刚毕业的实习生区别开来。

    在我看来这种回答有两种原因,一种是真的只懂皮毛,一种是觉得问题太简单懒得废话,无论哪种,我还是不愿意和这种人同事。
    lfzyx
        178
    lfzyx   2020-07-06 22:53:17 +08:00
    LZ 说 “因为各种历史问题好几十个人使用同一个开发机,以及一个测试服务随便就可以打几十 GB debug log 的场景”,

    -- 那这明显是业务开发的程序设计不合理啊,动不动就写 GB 级别的日志,没意义的日志就注释掉好吗,好吧有的业务开发不会用开发工具的断点功能,但能不能直接输出到控制台呢,非要写文件?
    hahaayaoyaoyao
        179
    hahaayaoyaoyao   2020-07-07 11:20:54 +08:00 via Android
    @ChanKc 现在面试都喜欢搞事情,有些资料我查了很久发现只有二手中文才会那么说
    xyjincan
        180
    xyjincan   2020-07-07 11:38:24 +08:00
    一个打开的无缓冲的高速写入日志文件,无法 用 echo 重定向进行清空,没反应
    1  2  
    关于   ·   帮助文档   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   830 人在线   最高记录 5497   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 21:27 · PVG 05:27 · LAX 14:27 · JFK 17:27
    ♥ Do have faith in what you're doing.