V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
gullitintanni
V2EX  ›  职场话题

骑驴找马, Linux 面试凉经分享

  •  
  •   gullitintanni · 4 天前 · 2303 次点击

    前情提要:/t/1139545

    虽然最后我勉强找了份工作,但情况并不是很妙:我接手的那套系统所支撑的业务线被大厂收购了(我入职后才知道这件事),他们有成熟的技术方案,用不到我们这套系统。所以等数据迁移完成后,这套系统将会停用。(谁说的做 infra 比做业务更稳定的啊喂,人家做业务的跑去跟大厂签合同了,我做底层的直接原地失业)

    其实也不完全算是失业,领导说到时候会安排我转岗,去做其他产品线的技术支持,薪资不变。这刚一毕业就去做技术支持,以后的职业生涯怕是离开发越来越远了。我还是有点追求的,所以这些天骑驴找马,继续准备面试。

    我们小县城也没什么开发岗位,我打算往二线及以上城市发展,找 Linux 开发相关的岗位,预期薪资 15k+(综合行情和自身能力,我觉得这个价位是比较合理的)。

    当然众所周知现在求职不容易,投了十几份简历,目前只接到了两个面试,全都一面挂。那就分享一下吧。


    首先是一家中小厂,面的游戏服务端岗位。

    微信电话面试,先是简单的自我介绍,然后问项目,问我最近解决的技术挑战。本来打算讲讲我梳理屎山代码的经历的,可是这玩意不结合具体代码不好讲。于是就讲了讲最近做的一个性能优化:

    我们系统里的进程间通信依赖一个消息中间件。其中对于那些需要原样发送的 raw 数据,本来是使用 splice 进行传递。虽然 splice 是 zero-copy 的,但仍然有系统调用开销,尤其是对于那些大量发送小数据包的场景,会影响性能。于是我做了基于 SCM_RIGHTS 的改造,将 fd “发送”给目标进程,从而进程间可以直接收发 raw 数据,无需 broker 对其转发。实测对于大量小数据包的场景,有 5-10% 的延迟和吞吐量改善。

    面试官对其中的一些细节进行了提问,但感觉他似乎并不了解什么是 SCM_RIGHTS 。

    然后就是技术问题环节,以 Linux 八股为主。随便举几个印象比较深的:

    • Linux 上 Ctrl+Alt+Fx 切换 tty 这个功能是在哪里实现的?如何修改快捷键? 如果让你写个程序从而 ./changetty 3 切换到 tty3 你如何实现?
    • 如果让你调试一个 core dump ,但是没有 debug symbol 也没有源码,你的思路是什么?
    • 如何在 Linux 中实现在执行程序时校验签名的机制?你这样实现,用户有办法绕过么? 有没有一种实现方法,即使用户有 root 权限也无法绕过?
    • 你了解过 futexfd 么?为什么它从 Linux 内核中被移除了? 它的使用场景是什么?如果你有这样的使用场景,你如何用 Linux 现有的功能实现?

    其中大部分我只能说个模棱两可,毕竟没实际做过相关内容或深入学习过,只能根据已有知识推测。

    也问了一些网络和算法的八股,但这些是我的弱项,连续几个没答上来,就不再问了。一共持续了大概一个小时吧,最后面试官说,如果有后续,本周之内会再联系。今天已经周日了,应该是挂了。


    然后是武汉的一家小厂。虽然是小厂,但是小有名气,家人用过他们的产品也觉得不错。

    先是让我登进他们内网的一个平台(应该是搭的开源 OJ 平台)做题。四道编程题,语言 C/C++/Go/Rust 自选,时间 60 分钟,允许在本地编写然后复制到页面中提交。

    前三道不算太难,思路明确,分别是回溯、贪心、动归。如果对标 leetcode 应该稍低于 medium 的平均难度。还算顺利地做出来了(但不能确定是否处理好了所有的边界条件,因为提交后没有提示通过了多少测试用例),第四道没有思路,时间也不够了(后来查了下也可以贪心)。

    本来以为挂了,但是转天突然收到了面试邀约。

    先是问项目。比起工作中的内容,面试官对我的开源项目更感兴趣(虽然最多的也只有十几个 star ),而且比起实现细节,更关心技术选型的过程和最终敲定方案的理由。

    然后是一道场景题:实现一个简易的 terminal pager 。要求是既能支持常规文件,也能支持管道这种 non-seekable stream 。而且要控制好缓存逻辑,不能因为数据量太大而爆内存。支持的命令不需要太多,能翻页和跳转到首尾行即可(也就是 less 的 j/k/g/G )。

    还是 60 分钟,语言从 C/C++/Go/Rust 中自选,编辑器和工具链用我自己电脑上的,允许查资料(问 AI 也行),但是要全程屏幕共享,做题的过程也会被打分。

    本来我以为这个挺简单,甚至还玩起了花活,支持了一下 alternate screen 。然后很快发现时间不够用了。要想正确实现 pager ,还是挺考验编程能力的。

    于是我果断放弃了支持 soft wrap ,先把最基本的显示错乱的 bug 解决了。在时间结束的前一分钟,本来以为大功告成,突然 segfault 了,十分尴尬(后来看了下,是没处理好边界条件的原因)。但我自认为表现得还不错,完成度挺高的了,应该能过。

    然而今天刚刚收到邮件通知,面试没过。面评里写到:有一定的计算机基础和编程能力,但对于代码细节的掌控还有所欠缺,恐难以胜任。

    emm ,好吧,这确实是我的不足,需要在工程实践中逐步提高。


    接下来我会继续充电,不断提高自己,寻找合适的工作机会。大家如果有什么建议,或者想吐槽自己的面试经历,也欢迎留言讨论。

    22 条回复    2025-07-31 16:51:47 +08:00
    processzzp
        1
    processzzp  
       4 天前 via iPhone   ❤️ 3
    武汉那家应该是锂钠氪锶吧?如果你的目标是 15k 的话,更建议你去北上深杭一线城市找工作,一线城市开 15k 才是真的初级工作,二线城市的 15k 工资约等于一线城市 30k 工资的要求。二线城市只适合当地土著+初级工作躺平,但凡有一个条件不满足都建议去一线城市找工作
    prosgtsr
        2
    prosgtsr  
       4 天前 via iPhone
    虽然方向不同,但是看完我更加能理解为什么我找不到工作了,我就是个废物
    swananan
        3
    swananan  
       4 天前
    看 op 之前帖子,应该是刚毕业没多久。
    我感觉能通过做 fd 转发,提升 IPC 性能,最后能落地,已经挺不错的了。
    再把故事打磨一下呢,怎么发现这样的问题,如何确定方案(有什么其他的优化方案),怎么上线,最后怎么拿到性能提升的结果,如何体现对业务贡献度。看看这样拉扯,面试能不能顺利点
    感觉只是运气差了点,虽然是校招,15k 着实有点低了,找个厂子干几年再跳槽,应该会猛涨不少
    fcyxp
        4
    fcyxp  
       3 天前
    这些问题让我一个上班七八年的人 也不一定都回答得上来
    fcyxp
        5
    fcyxp  
       3 天前
    至于算法我更是一个也不会
    Yc1992
        6
    Yc1992  
       3 天前
    面试运气因素占比一半以上,感觉可以转服务端开发吧,Linux 桌面开发岗位很少
    j4fun
        7
    j4fun  
       3 天前
    哇可以用 ai 面试,这公司可以处~
    HermesLi
        8
    HermesLi  
       3 天前
    转行吧,骚年,别做计算机相关了,直接转行自媒体,都上 v 站了,翻新外网的热门剧本还是很吃香的,只要敢做,继续运维,目前并不占优势,且墙内供需关系已经变化了,本人 DevOps 在苏州一个小厂上班 20.5k ,算是团队核心成员,就我这个简历扔出去,就像石沉大海,后面我找了一下原因,以为我不行,诸不知直聘等很多公司发布的招聘是假的,如何解释?那就是保持招聘的状态,只聊天,实际上不招聘,每个岗位 500 元/月,这事儿我这两天才知道的。。。所以在找工作中难找不是没原因的,根本没机会好吧,不是你的问题,好多刁难,或者看起来很好的工作哪里轮得到新来的人,没内推吗?
    要么,找个内推的
    要么,web3 数字牛马
    要么,自媒体,当然你得花时间,既然都有自我提升的习惯了,换一个赛道不一定会很差,说不定打开新天地
    noogler67
        9
    noogler67  
       3 天前
    面的题我乍一看都不会。我是资深开发。
    gullitintanni
        10
    gullitintanni  
    OP
       3 天前
    @processzzp #1 这家公司我还是第一次听说,看名字还以为是做化工的。有机会去试试。

    其实一线的中小厂我也投了,目前还没收到过面试。去年秋招的时候倒是面过几家一线的大厂。
    GiveMeABigName
        11
    GiveMeABigName  
       3 天前 via Android
    @HermesLi 翻新外网的热门剧本是啥意思?
    wangyuescr
        12
    wangyuescr  
       1 天前
    @gullitintanni 这个公司是以前深度 deepin linux 技术人员王勇开的,王勇的云粉丝很多,和王垠有的一拼。
    以前 UOS 统信软件的企业微信 同事吧 还有人匿名发帖怀念王勇。
    wangyuescr
        13
    wangyuescr  
       1 天前
    @GiveMeABigName 就像金融投行中年老登面试官的场景剧,最开始是外网有的,然后国内也跟进整个汉化版。
    kiraskyler
        14
    kiraskyler  
       1 天前
    这两个问题我回答一下,v 站大佬多,有不对的多多指点:

    - 如果让你调试一个 core dump ,但是没有 debug symbol 也没有源码,你的思路是什么?

    gdb -c ,gdb 进入环境,敲 bt ,即使没有 debug symbol ,也可以看到每一层栈的地址,根据 info proc mappings 查看进程中已映射的动态库的地址位置,每一层栈都可以找到具体在哪个动态库,在动态库中的偏移,readelf -s -W 动态库可以找到符号在动态库中的位置。
    简而言之,这道题考察的是手动栈回溯。
    如果是 dwarf 的栈记录形式,一般面试不会问这个,dwarf 太复杂了,几十页标准,如果是不省略帧指针的站回溯,每一层栈都会先压栈 rbp 寄存器,甚至可以已知寄存器值就自己栈回溯。

    如何在 Linux 中实现在执行程序时校验签名的机制?你这样实现,用户有办法绕过么? 有没有一种实现方法,即使用户有 root 权限也无法绕过?

    - linux 内核里,execve 执行程序,每一种类型都有对应的内核模块,比如 elf 文件内核模块,"#!"开头的脚本也有内核模块跳转。可以通过在 elf 内核模块中添加校验。但是这种方式侵入性,写不好了可能内核会 dump ,也可以找到合适的位置,ebpf 方式 hock 内核,校验失败给进程发信号方式阻止运行,缺点是 ebpf 的 api 太少,不能自己读取内核文件,必须找到内核模块读取到校验信息的位置 hock 才可以。ebpf 方式也许用户态可以有办法停止,内核模块较难,卸载 elf 模块所有程序都不能运行了。
    kiraskyler
        15
    kiraskyler  
       1 天前
    @kiraskyler elf 签名机制还有纯用户态的方案,比如大多数 elf 都会使用动态库,一般也都使用 ld 作为链接器,这类 elf 启动时的入口是 ld ,可以在 ld 的源码里加校验。也可以使用 LD_PRELOAD 形式附加一个我们自己写的程序,并使用__attribute__((constructor))形式让一个函数提前于 main 函数执行,也可以做到校验功能,但这两种方法都对完全不使用 ld 链接器的程序无效,纯静态编译或指定链接器可以跳过此方法,这类程序的 elf 入口点直接指向本程序。但只让是使用 ld 的 elf ,用户态方案也都没问题,且用户态即使 root 执行也没办法(除非替换 ld/修改环境变量等)
    kiraskyler
        16
    kiraskyler  
       1 天前
    Linux 上 Ctrl+Alt+Fx 切换 tty 这个功能是在哪里实现的?如何修改快捷键? 如果让你写个程序从而 ./changetty 3 切换到 tty3 你如何实现?


    ctrl+alt+fx 这一块内核代码没看过

    切换 tty
    可以直接 open("/dev/tty/3")得到文件描述符,dup 将现在的标准输入输出转发到 tty3 即可。但是否影响其他 tty3 用户未知。可以先遍历/proc/<pid>/fd 看看有没有进程使用 tty3 ,没有了再切换
    Clannad0708
        17
    Clannad0708  
       1 天前
    不是我现在工资比你高我看你的发的我都看不懂,上班 1 年了
    zjcpyc
        18
    zjcpyc  
       1 天前
    辞职躺了三个月准备去找工作,看到你的问题我都不想去了,继续躺吧,都不会
    gullitintanni
        19
    gullitintanni  
    OP
       1 天前
    @kiraskyler #16

    其实面试官说的切换 tty 想问的是 chvt(1) 的实现,当时我只记得是在 /dev/tty 上面调用某个 ioctl 实现的(具体答案是 VT_ACTIVATE )。

    所以我觉得这种八股挺无聊的,记得这些细枝末节又能怎样呢?想知道直接搜一下不就好了。
    kiraskyler
        20
    kiraskyler  
       18 小时 42 分钟前
    @gullitintanni 学到了,确实是这样,这道题确实没有意思,考察不出来什么
    kiraskyler
        21
    kiraskyler  
       12 小时 26 分钟前
    @gullitintanni 我又分析了第一题:linux 面试题:Ctrl+Alt+Fx 切换 tty 这个功能是在哪里实现的? https://blog.csdn.net/weixin_42544902/article/details/149806468
    titanlpy
        22
    titanlpy  
       10 小时 51 分钟前
    @HermesLi 每个岗位 500 元/月怎么理解?
    关于   ·   帮助文档   ·   自助推广系统   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1007 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 19:43 · PVG 03:43 · LAX 12:43 · JFK 15:43
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.