字节暑期实习 后端开发 系统架构

3月22投的简历,在牛客上随便找了个内推码填了,当天就收到面试邀请,约面试时间,一面约的4月1号。

某不指明高校计算机大三,没实习没科研啥都没,简历上写了四个项目,其中两个凑数的,剩下两个稍微能看点的:尝试实现一个迷你操作系统,读了CSAPP,做完书上所有习题和大部分实验

一面,75min

自我介绍,说我用C++比较多,面试官说那就从cpp开始吧

1.struct class区别,上个假期看过Lippmann的《深入理解C++对象模型》,有点印象,跟他扯。说class是struct的完全上位替代,struct完全可以抛弃,留着它只是为了和c兼容讲了下class为何更好,说了下封装之类东西,,,不知道扯啥好。。开始分析两者内存布局异同。我说大部分情况下struct class内存布局一样,除了class有虚函数的时候,于是开始扯虚函数,虚函数表,虚指针,含虚函数的class内存布局和不含虚函数class内存布局区别。他问了一下一个含虚函数的类的对象啥时候初始化虚指针。。。当时脑抽没答出来。。应该是调用构造函数初始化的时候嘛。。。

2.为啥需要虚函数
3.cpp多态,理解
4.说下关于c++11新特性的东西,比如哪些特性你用的多些,啥STL头文件用得多些。我说vector用的最多,于是问vector原理。我说数组。自动扩容,然后我自作主张说 一个vector,当它的数组大概装满2/3左右就会扩容,当数组元素少于1/3的时候回自动缩容(其实我没剖析过stl源码,我不太确定是否真是这样。。。。。),然后面试官顺着我的话问我,为啥装到2/3左右就开始扩容,而不是等数组装满了,已经完全装不下了再扩容。。。。我确实没想过这问题,不知道答案。。我的回答是:从理性分析的角度出发,我不知道为啥。。。感性的说,这叫未雨绸缪。。。。。然后他说okok就下一个问题了

还有些问题。。。时间太久了,忘了

然后OS
4.线程进程区别
5.虚拟内存相关的概念还是啥的。。。比如为啥需要页表,虚拟内存如何映射到物理内存?
6.同一个进程的多个线程所能访问的地址空间一样嘛?(大概是这么问的)。我回答说一样啊,同一个进程嘛。。进程是申请资源的基本单位,线程的本质是执行流,,,那进程去申请资源(比如内存空间,文件等),这个进程下的所有线程都可以用啊,共享这个地址空间嘛,所以一样。。除了每个线程有自己的私有栈以外。。。。他说:对嘛,你都说到线程有自己的私有栈了,说明每个线程能访问的空间是不一样的。。。
7.堆和栈区别,,,我跟他扯内存空间布局,他问我为啥栈要放在最顶端,从最顶端地址向下增。。。。我说堆尽量往低地址放 ,栈尽量往高地址放,这样中间空出来的空间才多,两者不容易装上,可用的空间更大

。。忘了

计网
6.TCP/UDP区别
7.TCP拥塞控制原理,我面试前复习了计网,记得比较牢,就en背,把拥塞控制那点东西仔仔细细全背出来。。。然后他问我慢启动的意义是啥。。。书上也没有啊。。只能扯
。。忘了。。。太久了,好多没印象

只记得基础面了40分钟。。从语言到OS到计网里里外外给问了个遍。。面试官很NICE,人超棒,特别耐心

题:
给定一个全由阿拉伯数字构成的字符串,删除其中K位,返回剩下的所有可能的字符串里数值最小的串的数值
比如给你9863,删两位,返回63
给你294856,删3位,返回245

第二天hr打电话通知过了,约2面
4月7号,二面 45min
自我介绍
1.以linux操作系统为例,说一下从计算机通电到操作系统计算机启动完毕,发生了啥。
我跟他扯,通电,cs寄存器置全1,ip全零,从0xffff:0开始执行,其实这里是条跳转指令,跳到bios入口,bios进行硬件自检,设置中断向量。从磁盘读入mbr,mbr又加载loader,loader又怎么怎么样又加载操作系统,然后调整操作系统开始执行
中途他打断了一下,问我bios是如何找到mbr的,我说靠 ”魔数“ magic number,。。就看第一个扇区512字节的最后两字节是不是magic number 0x55aa.如果是的话bios就认为mbr在这里,将mbr加载到内存指定地址然后跳转指定地址开始执行。。。。然后一直给他扯扯扯扯扯了一大堆

2.用户态内核态区别
我没准备过这问题。临时想。想来想去就一个词:权限。本质就是权限问题,也想不出其他的

3.陷入内核,过程
没准备,临时编。。没看啥理论的,就举例子给他分析。。我说比较你看我们写了句printf("hello world"),我们去看printf源码,这个库函数应该是用了write()这个系统调用,我们又去看write()源码。。。应该是设置好参数后用汇编指令INT 发送中断,执行xxxx。。。(说不上来了),各种扯,我说所以系统调用本质就是中断,然后给他扯中断,介绍中断:外部内部,可屏蔽不可屏蔽,陷阱,故障,异常。。。。我都不知道我说了啥,当时不知道说什么就乱扯。。
结果面试官还挺满意的?
三板斧一完,后面的问题特别简单,这里懒得写了,反正后面各种放水,直接给我过了

题:
给字符串,由大括号中括号小括号组成,判断这个括号字符串是否合法
leetcode easy,秒杀,一遍写完没让跑,直接过

直接让我反问。我说我没啥问题,不想问(我一般不爱反问,希望等hr面再问工作具体的东西),他问我”你难道对我是做什么的没有兴趣嘛“ 我心想坏了,可不能留下不感兴趣的印象,随便问两个问题,,,给他说我很紧张,没提前准备问题,没啥想问的了。。

这个面试官也很好,直接口头告诉我过了,让我准备下一轮。。。给我介绍他所在的部门,还邀请去他部门工作。

第二天hr电话约3面,下周4.。。。到时候再更

<----------------更新-------------------------->

4/14 三面 50min
这面属实给我面麻了。这么说吧,这50分钟里, 我说“我不知道/不太了解”的次数比我之前四次面试里说的次数加起来还多(之前投别的公司面过两次,这里不展开),不会,不会,还是不会,在面试官面前我表现得像没有接触过计算机的婴儿。。感觉要凉? 有点失落,其实不是很想写了。。但打开牛客,发现有之前看过这篇面经的朋友私信我结果。,。。还是觉得无论结果如何把面经补全。。。。系统架构方向的面经确实少。。。能参考的很有限。。我尽量写好点,供未来有需要的朋友参考。。

三次技术面完,回头总结一下。首先,因为我投的是

【暑期实习】后端开发工程师-系统架构

。。偏底层的东西,然后我简历里稍微亮眼一点的两个项目分别是 尝试自己写一个操作系统 以及 深入理解计算机系统 相关的东西(面试时自我介绍时我也会说,之所以我学计算机,就是希望弄清楚计算机工作原理。所以花更多心思在操作系统啊、汇编啊。,。。这些方向上),和岗位要求也比较贴合把,。。。所以感觉三次面试都在狂考我操作系统知识。 这岗位的官网上的要求就是:
1、2023届获得本科及以上学历,计算机等相关专业;
2、热爱计算机科学和互联网技术,精通至少一门编程语言,包括但不仅限于:Java、C、C++、PHP、 Python、Go;
3、掌握扎实的计算机基础知识,深入理解数据结构、算法和操作系统知识;
4、有优秀的逻辑分析能力,能够对业务逻辑进行合理的抽象和拆分。

三次面试基本全围绕编程语言、操作系统、数据结构与算法以及计网展开(官网要求没提计网,但你去看岗位描述,这个岗位进去都是做网络相关的东西的,所以也考计网)。。其他东西我没写面试官也没问。

一面最久,75分钟,基础检测,虽然也提了项目,但项目本身不是重点,从语言(c++)到OS到计网,一路问。问题比较跳跃,我是从struct class区别开始,我先说一大堆,中间可能提及了另一个知识点,于是下一个问题就从我回答里涉及的某个知识点继续开始,从浅至深,一直问道答不起为止。但总体难度不大。。。懂的,我能侃侃而谈,不懂的,我照样能东扯西扯侃侃谈会儿,,,算法题颇有挑战,leetcode medium ~ hard。刷个三百题左右完全够了(我就是三百题)。。。

二面,45分钟,实际半小时不到。。面试官有事耽误,迟到十分钟。。这一面挖项目?看我做了操作系统就问操作系统的东西,挖得挺深。。一上来就是三板斧,我当时在屏幕后面慌得要死。。。只能说,还好操作系统那个确确实实自己做了,让我讲从通电到操作系统加载完毕过程。。如果真仔仔细细介绍我话我能一口气讲小半小时,。。。。所以哪怕面试的时候紧张、、又因为自己好久没复习那些知识了(一直刷题。。看面经里那种常见问题),还是给他扯得可以。。然后就挺顺利的,三个提问一完,他挺满意,吹吹牛直接告诉我通过了。。这一面的教训就是简历上写的东西一定要自己心里有数,,,我简历写得很保守。。什么“精通”“擅长”之类的词汇绝对不会出现。

三面,leader面,面试官是部门负责人。。。压迫感太强了。。。没有自我介绍。。先问我发展意向:毕业工作/考研?实习能多久?我答:3-6月。期望工作城市? 以及,对自己未来发展的规划(主要是技术方面的),我说我的对OS和计网都挺感兴趣,能从事这方面工作挺好的,希望能安心做技术。。。然后就开始问答,

第一个问题,“说说你的操作系统项目内存管理是怎么实现的。。。。用的是XXX方法还是YYY方法(没听说过),比如说受malloc怎么实现的”
直接给我整蒙了。。。。坦白说我操作系统项目那个是个半成品,,我没做到内存管理那块。只能说不会。
“知道什么是软中断嘛?为什么要有软中断”。。。
懵,不会扯都不会扯
“中断的本质是什么”?
不会。。。拉扯了一下,我说是操作系统提供给上层的啥啥啥。。。说不清楚
还有几个问题,,想不起了。。。连问题都不懂在问啥。。。
不会。不太明白。没听说过。没深入了解。。。。。我就只会说这几句。。。说真的这几个问题下来我眼里的光都暗淡了。。。。感觉无了。。都不想面下去了。。。。
然后转问计网。。。
介绍三次握手,
背八股
提问:第一次握手,客户端随机初始化序列x,服务器收到后回应,ack = x + 1。但是第一次握手的报文没有任何数据,为啥加一,要知道,如果连接已经建立了,客户端发一个不含数据的包,假设序列号为y,服务器的应道ack 就定于y,不会加一。。为啥握手时就要加一。。。
麻了,这问题我学计网也想过,但没查资料把它搞透,只能说不会

四次挥手
背八股
提问:四次挥手涉及几种状态变化。。。
他一问我脑海里就有那张状态转换图了,但要我背我背不出来啊。。。给他分析一波,,但只是凭感觉,

算法题:不需要写,说思路
实现循环队列。。。。何时为满,何时为空?

感觉凉透。。。后面他给我介绍了部门技术栈,搞linux内核的,,,,主要用c。。
我让他点拼一下我,给点建议。。。说我在学校学得东西太理论了,和工程实践差距太大。推了几本书给我《深入理解linux内核》。。。其他基本忘了。。。
最后说我能不能过要和前两面的面试官沟通下,就say goodbye。。

感受:三面和前两面难度不是一个维度的。。。。我哥安慰我说可能二面面试官对我印象好,夸了下,三面面试官觉得我基础好,整体难度给提高了?
但真的离谱。。。理论问的少,问实践。。。问的飞难,,,整自闭了

OS,计网,语言。。。我最有自信的反而是语言。。。但语言除了一面外一点没问。。。

尽力了,累了,不管结果如何,终于可以休息下了

<--------------4月22日更新--------------------->
昨天晚上十点半收到面试邀请。。。三面过了,下周四hr面。。。悬着的心终于放下了。。。。

<---------------5.5更新------------------------>
之前看错hr面时间了,以为五一前的周四,结果是五一后的周四

三面后收到hr面的面试邮件,但其实那封邮件内容和三次技术面的邮件一模一样,仅从邮件本身根本区分不出是 第四面是 加了一轮技术面 还是 hr面。。于是4月22那天打电话给hr问,她解释说 字节的 技术面和hr面 邮件内容是一样的,从邮件本身确实无法区分,但她向我肯定我这一轮是hr面。。。当时那高兴啊。。。以为就是谈谈价值观人生观,,吹吹牛,谈笑风生间就能拿下。。。。于是一直没好好复习。。。

四面,60min
正常自我介绍开局,面试官又是看上了我操作系统的项目,要我向他介绍下。我心想hr都还问项目嘛。。。不知道他懂不懂技术,打算简单介绍下,,,结果我讲半天,他就听半天,还意犹未尽的样子,时不时提点技术细节的问题。。。我才逐渐明白,这就是一轮技术面(或许是三面太糟了的缘故)。。。于是,围绕我的操作系统项目,深挖20分钟左右。。。。内容略

简历项目挖完,开放试题:给我一定大小的线性地址空间,大小固定就那么多,不可再额外申请,让我利用这块内存实现一个哈希表。。其中key和value不定长,问如何实现高效插入和查找。。。。。又是知识盲区。。哈希表原理大概知道,平时也会用unoredered_map之类的东西,但要我设计哈希表,还有一些限制要求。。,。。思路懒得细说了,,,反正磕磕绊绊算是过了

开放题后,开问计网。。。我当时感觉还好,反正计网翻来覆去就是那么点东西,随你问。。结果他问的:以TCP/IP五层网络模型为例,说说我对每一层的协议的理解。。。。又整不会了。。。首先我只对应用层的HTTP,运输层的TCP/UDP和网络层的IP稍有了解。。链路层和物理层有些啥协议我早忘干净了、、、、就算是平时接触稍多的TCP UDP IP这些,,,你问我技术细节比如什么三次握手四次挥手拥塞控制我OK,,,问我对协议的理解。。。。。纯纯自闭
这一题答得稀烂,,,最后反问让他评价我的时候也被批评计网准备不够充分

最后是个算法题,,过于简单(不知道超简单的题是什么信号):给你数字n,n可能特别大。打印0 ~ n 所有素数。。就是写一个素数筛嘛。。。。欧筛和埃筛我以前也了解过。。没啥好讲。一遍写完直接过

最后反问。。。。。我小小抱怨下这不是HR面嘛。。。怎么又是一轮技术? 面试官没正面回答。。。估计就是三面拉了呗。。。 然后让他点评我,经典鼓励加批评。没啥好说。。然后问了几个小问题就say good bye

。。。总结。。。从收到面试邀请后一直以为是谈谈人生吹吹牛的hr面,没特别花时间准备,结果是一轮纯技术面。。。刺激刺激
自我感觉不太好。。。开放题磕磕绊绊,计网那个答得太烂了,我自己也看不下去,他也有点那啥。。。。。感觉凉凉

<----------5月6日更新-------------->
上午11点收到短信,四面过了,约五面。约的明天。。。。。坐实四面为加面

加面就加面吧。直接给我说就行了呗。。。非说四面Hr面结果全问技术,打我个措手不及。。可恶啊。。。猜测明天应该是hr了吧? 不会再加轮技术吧????

<----------5.7---------------->
五面,真正的hr面 13min
没啥好说的,就纯聊天。
hr加了我vx,直接了当告诉我他们面了一堆,还要排序。 大概一周左右出结果

。。。三四面表现感觉不太好啊。。。。。危!
现在就等

<------------5.16----------->
已offer,完结~

#面试复盘##实习##面经##字节跳动#
全部评论
今天下午,刚刚一面,过了,感谢分享,一面问的真心基础,下到iIC uart 他们的流程,网线有几根线 ,上到linux 内核,各种基本概念,问到你不会,问了一个小时,期间做了一道题,简单的链表题,有点紧张,用的最笨的方法做了出来,一面不问项目,各种基础问题,最后向面试官提问,询问能不能给出建议,他说我基础不扎实,以为凉了, 下线后,来第二面了
1 回复 分享
发布于 2022-04-15 15:20
我面试这个部门的时候也是,,,,老哥有offer了吗
点赞 回复 分享
发布于 2022-04-16 20:10
🎉恭喜同学成功投稿参与【面试复盘】,并通过审核! 😉请留意你的私信,官方红N人员将与你取得联系,进行奖励发放~ 👉🏻戳:https://www.nowcoder.com/discuss/872618了解更多活动详情~
点赞 回复 分享
发布于 2022-04-15 15:10
大佬够强的
点赞 回复 分享
发布于 2022-04-11 22:26
楼主操作系统基础真不错
点赞 回复 分享
发布于 2022-04-11 10:45

相关推荐

02-28 13:25
已编辑
门头沟学院 Java
点赞 评论 收藏
分享
评论
17
55
分享

创作者周榜

更多
正在热议
更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务