公司规模还挺大的,地段好(北三环),呵呵,这两个地方是最吸引我。先笔试后面试。
笔试题记不清了,不是太难,有几道题比较有特点:
1、 gdb如何调试多线程
2、 如何知道一个进程打开了多少个文件
以上两道题不知道答案,gdb调试多线程。。。估计难度不小,反正没试过多线程。至于问题2,等我查看一下UNIX手册在回答
3、 嵌入式linux设备,128M内存,无交换分区,以下的代码有何区别?
#include <stdio.h>
#include <memory.h>
#define MSIZE 1024*1024
int main()
{
int *p = NULL;
int cnt=0;
while(1)
{
p = malloc(MSIZE);
if(!p)
break;
//memset(p,1,MSIZE);//屏蔽此段代码对打印输出有何区别
printf("Has allocation %dM/n",++cnt);
}
printf("test end/n");
return 1;
}
这里考验的我感觉有两点,
(1) 编译器是否会优化掉p,因为没有使用p,有可能会被优化掉
(2) 这道题真正考验的可能是对DMA技术的了解,这里p先malloc一块虚拟内存,但是操作系统并没有立即映射到物理内存,直到你要使用这块内存时才映射。因此如果屏蔽掉那段代码,你可以看到你malloc了3000多M的内存(即除了内核空间外的内存都被你划分了)
面试有一个问题比较有特点:请简单描述一下linux/windows/vxworks等操作系统的区别以及体现在什么地方。
说实话这道题有点为难我的意思,我也没有回答。不过我的想法是linux开源,移植性好;windows功能全,操作方便;VxWorks实时性好。
面试官可能觉得我的工资要求高,没有人事面试。呵呵,日资企业就是抠门。