V2EX 8小时前
[职场话题] 骑驴找马, Linux 面试凉经分享
index_new5.html
../../../zaker_core/zaker_tpl_static/wap/tpl_guoji1.html

 

一位应届生在求职Linux开发岗位时,分享了两次面试经历。第一次面试是一家中小厂的游戏服务端岗位,主要考察了Linux底层知识和性能优化经验,但因对部分技术细节掌握不足而未能通过。第二次面试是一家小厂,包含在线编程和场景题,虽然在开源项目和场景题中有所尝试,但最终因代码细节处理和稳定性问题未能获得offer。作者表示将继续提升自身能力,寻找合适的工作机会,并鼓励大家分享面试经历。

💡 **职业发展受外部因素影响,底层技术人员亦面临挑战。** 作者入职后发现所负责系统即将停用,虽有转岗机会但为追求更高职业发展,选择继续寻找Linux开发岗位,预期薪资15k+,凸显了即使是底层技术岗位也需关注外部市场变化和个人职业规划。

💻 **技术面试考察范围广,底层知识是关键。** 在中小厂面试中,作者被问及Linux内核功能实现(如tty切换)、程序签名校验、futexfd移除原因及替代方案等底层技术问题,这些内容对Linux开发岗位至关重要,也反映了面试官对候选人技术深度和广度的考察。

🚀 **性能优化需深入理解底层机制,细节决定成败。** 作者分享了通过SCM_RIGHTS优化消息中间件性能的案例,虽然有一定改善,但面试官对SCM_RIGHTS的疑问以及最终未能通过的面试结果,都表明在实际应用中,对底层机制的深入理解和精细化处理是能否体现技术价值的关键。

🤔 **编程能力与代码细节掌控并重,开源项目亦是加分项。** 第二次面试的编程题和场景题,尤其是简易terminal pager的实现,要求候选人具备良好的编程能力和对代码细节的精确控制。虽然作者在开源项目和场景题中有所尝试,但最终因代码细节处理不足而失利,说明工程实践能力是求职的重要衡量标准。

📈 **求职过程是持续学习和提升的过程。** 两次面试的失利并未让作者气馁,反而促使其反思自身不足,并表示将继续“充电”,不断提高自身能力,积极寻找合适的工作机会。这体现了积极的心态和持续学习的重要性。

前情提要:/t/1139545

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

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

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

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


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

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

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

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

然后就是技术问题环节,以 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 ,好吧,这确实是我的不足,需要在工程实践中逐步提高。


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

Fish AI Reader

Fish AI Reader

AI辅助创作,多种专业模板,深度分析,高质量内容生成。从观点提取到深度思考,FishAI为您提供全方位的创作支持。新版本引入自定义参数,让您的创作更加个性化和精准。

FishAI

FishAI

鱼阅,AI 时代的下一个智能信息助手,助你摆脱信息焦虑

联系邮箱 441953276@qq.com

相关标签

Linux开发 面试经历 性能优化 应届生 职业发展
相关文章