英特尔(intel)、思科(cicso)实习面试
英特尔intel
岗位Linux软件工程师。在应届生求职网上看到的实习,下午投了简历,傍晚就来电话让第二天去笔试。笔试1个小时,7道题,面试官说肯定做不完,挑会做的做。实习部门是SSG/OTC,岗位内容差不多是使用工具测试或优化Linux内核。差不多一个小时到了就结束回学校了,没有面试。
1.把标准输入里的“foo”改为“bar”,然后将改过的输出至标准输出;
2.用递归和非递归的方式写字符串反转,abcd->dcba
3.题意没看太懂,例子是abc->cba,abbccc->cccbba
4.排序,格式为n1.n2-rcn3,三个数的范围是(0,99),比较优先级方面n1>n2>n3。n1=n2,且n3=0的情况是最大的,下面是排好序的例子
3.4-rc2
3.4-rc5
3.4-rc10
3.4-rc
3.5-rc1
3.12-rc
5.实现tee
6.在不改变当前目录的情况下,执行其他目录的程序,即不能先cd出去,再cd回来
7.看不懂,出现seq命令
7题中只写了1-4,其中只有题2做的满意,1、3、4做的都不满意
//第1题
//linux命令
1.sed 's/foo/bar/g' (从标准输入获取数据,将所有的"foo"改为"bar",输出至标准输出)
2.sed 's/foo/bar/2' text (从text文件中获取数据,将每行第2个"foo"改为"bar",输出至标准输出)
//第2题
//反转字符串的递归和非递归实现
void nonrecur_reverse(char *str, int len)//非递归
{
int l = 0;
int r = len - 1;
while(l < r) {
exch(str, l ,r);//交换char *str中的第l位和第r位
l++;
r--;
}
}
void recur_reverse(char *str, int l, int r)//递归
{
if(l >= r)
return;
exch(str, l ,r);//交换char *str中的第l位和第r位
l++;
r--;
recur_reverse(str, l, r);
}
//第4题
//linux命令
sort -t '-' -k1n -k2n -k3nr text > newtext
解读:-n:以数字进行排序,而不是以ASCII码,防止出现 10<9 的情况
-t '-':以'-'为分隔符,将文件分为几列,然后按123列的优先级进行排序
-k3r:以第三列为键值,倒序排列(从大到小)
> newtext:输出重定向至newtext文件
//第6题
//用相对路径,当前路径在home/foo,要执行的文件在home/bar
../bar
思科cisco
岗位软件工程师。两个面试官,每人半个小时。第一个考了OSI七层模型、OFDM优点(主要看我实验室的项目是OFDM)、gdb(表示用的不多)、如何调试程序(表示厂商提供debug模块,在线调试)、判断链表是否有环的编程题。
链表有环这题,我先后给出了两个解法,一个是在结构体node_t中加入flag这个变量,访问过的flag都为1,如果下次访问到flag为1的结点,说明有环;另一个解法是设定一个最大的结点数MAX,访问一个结点,计数值就加1,计数值超过MAX就说明有环。
面试官先后对所提出的解法不满意,肯定还有更巧妙的方法,后来在面试官快慢指针的提示下,写出了这个解法。具体可参考 求单链表是否有环、环长、入环点、链长。
第二个面试官也问了我平时是怎么调试程序的,然后问我printf函数内部实现,当时没回答好。我觉得应该回答到三点:1.若在Linux环境下,就用gdb;2.若MCU厂商提供debug模块,就在线调试;3.若MCU厂商不提供debug模块,就自己写printf函数,用串口调试。printf函数实现原理见 可变参数函数——以printf为例子。
这次面试我主动展示了大三时在MSP430F5529开发板上做的Flappy ball(仿照Flappy bird),这对整个面试帮助很大。
总结
一周后收到思科的offer,英特尔挂了。这个结果不出意料,差不多在面试完两家之后就有感觉了。虽然两个岗位都是软件,但思科偏硬,英特尔偏软。不管从我的EE嵌入式背景和面试过程来看,都是更加符合思科,但我希望能往互联网方向发展,接下去要加强CS方面的背景了。