面试/找工作 实录

目录

数据库内核开发/C++后段实习

背景

途径

机试

面试过程

总结与反思

[AI infra/机器学习系统工程师(C++)实习](#AI infra/机器学习系统工程师(C++)实习)

背景

途径与准备

面试过程

总结与反思


数据库内核开发/C++后段实习

第一次实习

背景

2024年10月末,大四保研结束(ZZU->BUAA),先来无事,想找个实习做一下。

简历简单搞了一下(就是将自己之前保研简历魔改了一下),主要就是学历部分将保研后的学校写入,竞赛方面还是ACM系列(ICPC区域银,CCPC邀请赛金),把数据库课设(SpringBoot+Vue)和Lainchain项目拿掉了,毕竟问了也啥都不会。项目栏改成了校园经历,将自己ACM实验室队长+程序设计实验课助教写上去了。

总结:简历只有学历(ZZU+BUAA),竞赛(ACM系列),校园经历(ACM实验室队长+程序设计实验课助教)就没了。

途径

当时找的ACM群友内推,将简历发给群友后,群友看到我竞赛这么多就直接给内推了。审核也很快,第二天直接约机试。期间没做任何准备。

机试

机试具体题目忘了,只记得只有pdf题面,没有oj评测。也没有面试官,只有个提交代码的网页。

前两题我记得是中等难度的模拟(或者类似),我都是打正解了,第三题正解是hash(不是字符串hash,需要对特定格式的字符串进行hash或者什么的,记不清了),当时想到正解了,没敢写。就把60分暴力交上去了。

随后结束以后,邮件约面试。

面试过程

面试整体过程比较压抑,面完给人的感觉就寄了。

尽力回忆一下面试流程。

面试官:你先简单介绍一下自己吧。

我:巴拉巴拉。。。(应该照着简历介绍的)

面试官:我们先来手撕一下代码,给你一些点,一些区间操作,怎么怎么。。(忘了具体题目)

我:现场手撕代码,好像用的线段树,期间出了很多问题,面试官应该也是ACMer能够根据我的代码hack我的程序。。。到最后好像也没弄出正解来。。。

面试官:开始拷问八股。。。(尽力回忆版)

  1. 说一下对象内存模型。
  2. 说一下什么是栈区,什么是堆区数据,怎么区分他们。
  3. 你对STL了解吗?说一下vector怎么扩容的,他的复杂度怎样的?
  4. 了解C++11语法吗?
  5. ...

我:瞎回答,由于没有系统准备过C++八股,全是驴头不对马嘴(vector复杂度我竟然分析成了nlog)。。

面试官:我们是...公司,主要是针对数据库内核进行开发,你之前有做过什么类似的工作吗?

我:之前上过数据库课,了解基本的SQL命令。

面试官:那说一下从XXX表里查询XXX怎么做?(具体提了一个SQL的题,但忘了)。

我:SQL命令我是之前学的,现在有点忘了。

面试官:你知道数据库比如mysql这些,内核都是什么吗?都是怎么工作的??

我:不了解。

。。。(沉默)

面试官:那我这边面试就基本结束了,你还有什么想问的吗?

我:没有。

总结与反思

面试完就感觉寄了,全程被面试官牵着走,问啥啥不会。但面试官还是很不错的,技术面由于都是实际工作的人面试的,所以专业性很强,会实时解答我的问题。但到后期,一直都是他在解答,(发现我真的啥也不会)就结束面试了。

给我的教训,

  1. 简历中不能没有项目支撑,否则相当于完全将主动权交给对方。
  2. 不同语言,语言的八股一定要准备的。这时基础,面试中可能文档比较少,但一定会有。(我这场面试八股篇幅还挺大的,可能因为没有项目的缘故)。

AI infra/机器学习系统工程师(C++)实习

第二次面试。。。

背景

2025年12月初。北航研一,在上一段面试中被打自闭了,大四剩余时间就先发奋图强一段时间将黑马的C++语法过了一遍并用博客总结(重点,后面要考),这里全是基础语法,不涉及C++11的内容。随后在25年6月-10月在朋友的撺掇下,学习了MIT 6.S081课程,详见https://blog.csdn.net/gcfer/category_13059249.html,听完所有课程并完成所有实验之后,开始学习CS144课程至今,详见https://blog.csdn.net/gcfer/category_13071261.html(但是没做完,就做完前5个lab,完成了TCPSocket相关内容)。

简历方面:学历(ZZU+BUAA)、竞赛(ACM相关)、项目(上述提到的两个项目)。

途径与准备

本来想的是期末考试之后(1月20日)再实习,11月末就在BOSS上开始找打算能不能约到1月末。随便投了几个,结果HR说太晚了,我说到岗时间可以商议(在我心中实习>期末考试/学业成绩)。然后就投简历了。结果第二天中午正睡觉(14点左右),HR就打来电话(垂死病中惊坐。。。),我当时迷迷糊糊的,HR问的问题也都是了解基本情况,我当时头脑不清醒也就随便回答了。然后HR就说约第一轮技术面了,问我时间如何,我说第三天下午可以,就敲定了第三天下午。当时快挂之前,HR着重询问我代码能力如何?刷不刷力扣?我自信回答我是打竞赛等,没问题。。。(面试的时候真打脸。)

随后便没心情睡觉了,感觉C++八股准备的还是太差了,下午,晚上和第二天早上又临时准备了一下C++的八股。

面试过程

面试整体表现比上次好(自我感觉)。面试官也开视频了,一看就是典型的技术人员。

面试官:先简单介绍下自己吧。

我:我就照着这个简历介绍吧,开一个视频共享,这样也方便您看着。(操作飞书的共享屏幕,第一次用,需要读十秒。)那个,他目前在读秒,需要等10秒。

面试官:没事,不用紧张。现在好了,你开始做自我介绍吧。

我:介绍学历,介绍本科期间竞赛,介绍项目MIT 6.S081,操作系统项目。

面试官:打断一下,我来问一些问题,你了解操作系统操作文件的命令是什么吗?

我:freop这些吗。

面试官:好的。你知道系统调用内存的系统调用是什么吗?

我:malloc/new吗?

面试官:你这是应用层,我说系统层面分配内存是什么系统调用?

我:sbark?

面试官:嗯,可以。我看你项目里有进程和线程,你说一下进程和线程的区别?

我:我的理解是进程是资源分配的基本单位,进程有自己的虚拟空间,线程是实际执行的基本单位,甚至上我的狭义理解线程就是代码块,一个进程中可以有很多线程,这些线程实际执行进程的任务,并且共享进程的空间,同时cpu调度也是对线程进行调度的,通过切换线程来实现切换进程。

面试官:好的,你觉得在你这个项目中,你最大的收获/你遇到的最大困难是什么?

我:(瞎几把说)我觉得因为我之前学习操作系统都是在课本上学习的,这个项目就是从代码上让我具体清楚操作系统是如何实现的。我觉得最大的收获包括这个文件系统,我之前根本不能理解inode是个什么东西,现在我清楚了他就是一个数据结构,里面有文件名,文件地址,数据索引快,包括我在项目中通过将in ode的二级数据索引块修改成三级索引块来增大单个文件大小的。以及页表,之前我不理解为什么要有页表,为什么要做这个地址转换。学习完我了解到页表通过设置不同的页表实现将进程隔离开,让每个进程都拥有自己的虚拟空间。吧啦吧啦吧啦。。。

面试官:好了,你接着介绍吧。

我:介绍CS144,计网项目。

面试官:我考查一下,你说一下TCP是怎么实现可靠传输的,以及他的流量控制。

我:TCP有个超时重传机制,就是如果我发送任何占据字节的报文的话,TCP的另一个端点收到后,都要进行显示回复,同时我这里会有一个计时器,如果一段时间内我没有收到回复,我就认为该报文在网络中丢失了,我就重传该报文,大概就这些。(我当时只想起超时重传了,流量控制好像没回答。。)

面试官:对于乱序字节,TCP是如何做的?

我:就像我在项目中的,TCPReceiver中有一个排序器,该排序器接收乱序字节并缓存,如果TCP开启SACK的话就会SACK回复该乱序字节,当然ACK还是累计应答的。简单来说就是该排序会缓存乱序字节。

面试官:TCP是通过哪个字段来处理这些乱序字节的?

我:Seqnumber,他表示数据首字节号,还有数据的长度来重组乱序字节。

面试官:你了解大端小端吗?网络协议这些用的是大端还是小端?

我:具体定义忘了,但我知道操作系统和网络协议这些用的大小端不同,而且网络的大小端符合人类正常读写习惯。

面试官:那人类正常读写是大端还是小段?

我:回忆了一下定义,低地址处存放高位权,想起来了,人类正常读写和网络协议应该都是大端。

面试官:好,你这个是课程的实验吗?

我:呃,是的。

面试官:接着介绍吧。

我:我对git,docker,conda这些容器都能够熟练运用。

面试官:说一下在git和docker中用到的最复杂的命令是什么?

我:git我用到的最复杂的就是通过查看提交列表并回退到某个版本。docker就是run按照某个镜像启动容器,start开始一个容器,关闭一个容器,将某个容器打包成镜像。。。

面试官:接着介绍你自己吧。

我:介绍自己熟练掌握C/C++,Python,Java怎么怎么

面试官:C++的语法,你了解过哪些?

我:资源获取即初始化这些,即资源的获取和对象的初始化绑定,资源的释放和对象的析构初始化。用对象的生命周期来管理资源。同时用智能指针来管理资源。

面试官:你知道这个术语是什么原则吗?就是那几个字母是什么。

我:RAII(资源获取即初始化Resource Acquization Is Inialization)。

面试官:好,介绍下智能指针怎么管理资源。

我:智能指针unique和shared。通过将智能指针和资源绑定,会智能管理这些资源。

面试官:对于shared智能指针,使用有什么风险吗?就是如果一个项目里全是shared指针,会有什么问题吗?

我:有,会有循环引用的问题,这会造成死锁,就比如A引用B,B引用A这就死锁了。需要用到第三个智能指针weak。

面试官:好的,我看你简历上说你的博客说你有200多篇文章,你现在能具体打开让我看看这都是什么吗?

我:(打开博客)我有两个博客,一个是我打竞赛时写的博客,这些都是题解类型的,200多篇。另一个是CSDN博客,想做成技术博客这样的。(打开另一个博客)

面试官:我看到你有C/C++语法的专栏,你点开让我看看。

我:(含泪打开C/C++语法专栏)。

面试官:我看到你这个有继承、封装、多态的文章,你打开,就照着这个目录,我提问你。我看你这有虚函数,你能说一下虚函数是怎么实现的吗?

我:虚函数是基于"继承"来说的,就是子类继承父类。父类用virtual关键词定义虚函数,子类继承父类,重写该虚函数,这样就能用父类指针指向子类对象来实现多态。(具体记不清了,胡言乱语。。。)

面试官:我想问的是在编译时期会发生什么?具体虚函数是怎么确定用哪个方法的?

我:get到了,有个虚函数表,在编译时期,子类继承父类时也会复制其虚函数表,随后重写函数时同样会记录到虚函数表中,在实际运行时会查该表,来决定具体用哪个方法。

面试官:好,那析构函数需要用虚函数吗?

我:(不会。。。)这涉及一个析构顺序的问题,会先析构子类再析构父类。应该不需要用虚函数表。。。

面试官:(看出来我不会,开始解答)我当时学的时候,说的是如果不用虚拟函数,则是静态的,在编译时期就写死了,当然编译器也在不断进化,但我当时学的时候是这样的。

我:昂,对。

面试官:好,最后我们考察一下代码能力,我觉得你应该没什么问题。说题目:链表的组内翻转。

我坑吭哧哧在打代码,过了大概10min,没有结果,面试官看出来我写的很磕磕绊绊,说要不你先实现一下全链表翻转吧。我快速实现了全链表的翻转,发现自己组内翻转的逻辑有问题,修改代码+调试。。。过了10min,面试官说,再给你最后10min,过了1,2分钟,我就调出来了。面试官看了看觉得没问题,就让我简单介绍下思路。

面试官:我这边基本上结束了,你看你有什么问题问我吗?

我:(厚着脸皮)那个吗,您绝得我今天面试表现怎样?

面试官:我也不卖关子了,我觉得问题不大。那个你了解过机器学习系统这些吗?

我:我之前上课用过华为昇腾得MindStudio这些。不过都只是使用了,没深入了解过。

面试官:你觉得他们架构目前有什么问题吗?

我:我使用的时候觉得他们支持的模型太小,而且支持值tensorflow1.x版本,太老。

面试官:没事,那咱们没有这个讨论的必要性了。那没事的话就结束今天的面试了。

我:好,拜拜。

终于结束了,长舒一口气。大概持续了1个小时10min左右。

我尽可能的还原当时的面试经过了,看似很不错,实则途中还是有很多问题没答上来,包括面试官会问一些我没听过的名词的问题,我回答不上,由于这些名次当时都没听过,现在也回忆不了。

总结与反思

目前结果还没出,也还没约HR面试,但这次面试和第一次相差太多了。总结下来还是发觉,实习面试也不是儿戏,都得好好做准备。总结如下:

  1. 首先简历关,要有项目支撑,且项目尽量和投递岗位有关。我这个是OS和计网都是基础,所以面试官也都有的问。
  2. 要对简历负责,你简历的任何部分都要做好被提问的准备。
  3. 简历关能过说明如果你真的如简历一样,那一定是可以的,面试只是确认你是否和你简历上写的一样,或者说考察你简历上的写的东西的熟练程度。
  4. 机试分成两种,一种是有OJ,有计时,没有面试官的。这种我比较擅长;第二种是面试官随口提问题,让你现场手撕。这种情况下由于面试官一直在视频那边看着而且时间更有限(面试官往往最多等你半个小时),我都会比较紧张。。。表现往往不出自己的真实实力,还是要锻炼自己的心里素质。冷静编码,多加注释,用小样例理清复杂逻辑往往是个好办法。
  5. 最后,整个面试过程要自信,面试官不是敌人,将面试过程当作展示自己的舞台。自信,即使哪个知识点不会,也要讲自己知道的相关的尽可能说出来,多展示自己。
  6. 任何语言,语法关都是要过的,语言是基石,八股还是要多准备的。

未完待续...

希望所有看到这里的人都能有所收获,最终拿到满意的offer!

相关推荐
xlp666hub1 天前
Linux 设备模型学习笔记(1)
面试·嵌入式
南囝coding1 天前
CSS终于能做瀑布流了!三行代码搞定,告别JavaScript布局
前端·后端·面试
踏浪无痕1 天前
Go 的协程是线程吗?别被"轻量级线程"骗了
后端·面试·go
一只叫煤球的猫1 天前
为什么Java里面,Service 层不直接返回 Result 对象?
java·spring boot·面试
求梦8201 天前
字节前端面试复盘
面试·职场和发展
千金裘换酒1 天前
LeetCode 二叉树的最大深度 递归+层序遍历
算法·leetcode·职场和发展
C雨后彩虹1 天前
书籍叠放问题
java·数据结构·算法·华为·面试
码农水水1 天前
中国电网Java面试被问:流批一体架构的实现和状态管理
java·c语言·开发语言·面试·职场和发展·架构·kafka
倦王1 天前
力扣日刷26112
算法·leetcode·职场和发展
程序员清风1 天前
猿辅导二面:线上出现的OOM是如何排查的?
java·后端·面试