字节-编译与性能优化-实习凉经(新鲜出炉)
郑州某高校研究生,科研主要是编译优化和数学库相关,一篇中文论文刚投稿,意气风发,投了华为、阿里、字节的岗位,前两者一个在池子里杳无音讯,一个果断被拒,就剩下一个字节给了面试机会,结果凉透了。。。。。
下面是面试的过程:
- 一上来,先让自己做自我介绍,然后问一下简历相关的东西,主要是简历上和编译相关的东西,或者说和他们相关的技术问题,别的奖学金啥的,都不问,我的简历上很多都是和技术无关的,至于原因是自己菜还贪玩......
- 就是让说一下编译的过程,可以随便用一种语言,c或者java举例,因为我主要接触的是C,就说一了C语言的编译流程,包括预处理、编译、汇编、链接,几个步骤,然后每个步骤大概都有什么。
- 然后面试官,就针对这几个步骤,结合我说的一个一个问。就是编译过程中的词法分析、语法分析、语义分析、中间优化、代码生成几个部分,一个一个介绍一下........emmm,编译的前端一般比较成熟了,就大三学编译的时候学了一点,记住了点名词,剩下的全还回去了,自然回答的是一塌糊涂。还有就是给了一个错误的代码,让说会在那个段报错,类似int a="string";其实明显该是语法分析报错呀,emmm,我全给说成语义分析了,emmmm.另外,我在词法分析那提了文法,就让我说一下文法是啥,都有那些类型,怎么区分,我只知道有三种文法,具体的都忘完了,就一直道歉......然后,就说了我自己做的中间优化部分,抽象语法树和我用的调度树,常见的循环优化手段等等,最后就是还问了自动向量化和多线程并行,emmmm,我答的是向量化是个啥,他让我说一下,怎么判断能不能向量化,具体怎么实施,就是说细节,这个只好继续道歉了.......
- 然后,让我说得到可执行文件后,执行的时候怎么执行,其实就是链接和装载的过程,还有区别。我当时因为前面答得不好,脑子一片混乱,说的也是错误百出。就是通过一页一页得装载,还说页是cpu和内存得交换的单位,emmmmmm,错的离谱,下来一查,也是虚拟内存和内存交换数据的单位,块是cpu和内存交换的单位,就离了大谱了..........
- 最后就是手撕代码,真的和自己写题不一样,别人看着,偶尔还说两下,再加上本来就紧张,真的脑子直接坏掉了,what了,啥都写不出来。题目是一个拓扑排序,当然了,我也是事后诸葛亮,做的时候一脸懵逼。 题目大意是: 有0~n-1个编译命令,[a, b]表示b依赖于a,请设计一个算法给出正确编译的顺序,假设无环。 输入:[2,3]、[3,1]、[0,2]、[0,3] 输出其正确的顺序。 解答方法自行百度吧,提示:是一个图的问题,从出入度判断,去边再判断,拓扑排序。
再来一张照片镇楼,以后加油。