嵌入式求职面试1

今天下午到网路通电子面试嵌入式驱动开发一职,至于面试机会是怎么样来的,就得看自己的努力和技巧了,在这就不扯这个问题了,还是说说面试过程吧;前往公司面试一路也算是有点小波折吧,在面试通知里边可知学院和上社两个BRT站都能去,我就选择上社下车,一边开导航,一边找,一路走呀走呀,一不小心走错路口,从上社走到学院,郁闷,然后往回走,总算到公司了;

上去见到前台MM,我说来面试的,她说是不是面试驱动开发一职,然后我就递交我的简历,她也从电脑上打印一份试题,然后拿给我,让我做;内容是C和linux驱动的一些知识;先说C吧,趁热打铁,把我能想起来的都拿出来说说;

一,选择题部分,题目不分次序;

1 for(i=0,k=-1;k=1;i++,k++)

printf("*");

      循环一次、不循环、无限循环;   答案是无线循环;这个考察的是对for的熟悉程度,还有逗号表达式;  实际for判断的是k=1;k赋值为1,肯定可以,当然为真了;为了保证正确性,我又想了如果if(k=1)呢,或许你看不出,如果是if(k==1),有印象了吧,为什么初学者建议写成if(1==k)的形式,就是避免出现if(k=1)的bug然后调试不出来;  

2. 若变量已正确定义并赋值,表达式______不符合C语言语法。
A、a*b/c; B、3.14%2  C、2, b  D、a/b/c

咋一看,觉得都可以,是不是这样觉得C呢?刚开始我也觉得疑惑,但是但是答案往往会诱导你,C一看确实觉得是不合法的,仔细想想面试一般不可能给这么简单的题吧?所以C瞬间就是正确的,不信你可以看看C语言中不是还有个逗号表达式吗?a=2,b; 最后不就是a=b吗!!!但A,D不用看就知道是对的,所以只剩下B了,我就选择B了,感觉%应该不能是浮点型的;面试回来之后,一查确实是:%只能针对整数。

3.语句“if(a>b) k=0; else k=1;”和______等价

A 、k=a>b?1:0  Bk=a<=b?0:1   C、k=a<=b  D、k=a>b 

这道题看起来不难吧?但是不经意间,你就会脑袋紊乱而选错,答案是C为什么呢?想想0是假,真一般是1,有些编译器是-1,我再想想bool类型,然后就果断选C了;

4. 已知int a[4];问下边表达式是不允许的?

    A 、*a   B、a[0]   C、a++  D、a

是不是惊呆了,我也是,感觉好像似乎都对,没错啊,深深怀疑出题人,但是觉得没理由,一定有错的;我们对这些变量的思维常用于赋值语句的右边,当想想放在左边的时候,答案就出来了 ,a=XX;可以吗?显然不行了,因为a是数组不是指针,这道题考的不是别的就是数组与指针的区别;

5. int i,char j; float z,x;  若变量已正确定义并赋值,则i*j+z/x 是什么类型?

A 、int   B、char   C、float  D、double

  是不是有种想马上翻书的感觉了?或者是上机调试?这里考察的是不同类型的数据运算的时候的类型转换;如果一个运算符两边的运算数类型不同,先要将其转换为相同的类型,即较低类型转换为较高类型,然后再参加运算;有些编译器是转成float,有些是double;具体还得看平台;

double ←── float 高
    ↑
long
    ↑
unsigned
    ↑
int ←── char,short 低

6. c[] = "adef\0abc"  ;   char *p = c;  printf("%c", p+4);  打印什么值?

       A 、adef  B、abc   C、0  D、a

这个不用说,一眼就能排除A,B,不要问我为什么,自己看;答案是C;这个地方考察的是转意符的使用;

剩下的4道选择题,感觉没什么,而且我印象也不深了,也不打算讲了;

接下来说说简答和代码题的。

二,简答题

1. 函数 int sum (int a. int b)  定义一个函数指针P,并让P指向sum;

int (*P)(int , int) = sum;

2.把a的bit3置1,不改变其他位;a的bit3置0不改变其他位;

a |= 1<<3;

     a &= ~(1<<3);

3.有一个数组table,用一个宏计算数组大小;

#define ARRAY_SIZE  ((sizeof(a))/sizeof(*a))

4.查看内核打印信息用什么指令;怎样查看系统里的字符设备;怎样查看系统已用的中断号;

   dmesg

ls -l /dev

cat  /proc/interrupts

5.内核中断上半部分和下半部分关系和原因,大概就是这个意思;

产生中断时硬件相关的处理要求快, 而有些驱动在中断处理程序中又需要完成大量工作,这构成矛盾,所以Linux中断的上半部分和下半部分,上半部分处理急且重要的工作,下半部分处理不急但重要的工作;.

Linux 的底半机制主要有Tasklet 和worl\k queue以及 softirq,可以理解成一种工作的延迟。所以实际使用时跟timer机制基本上一个意思。Linux的底半处理实际上是建立在内核的软中断机制上的.

6.copy_to_user()和copy_from_user()功能和作用;主要用在file_operations中的那些函数? 不解释了,网上资料大把;

7.写一个结构体封装一个人的信息,性别,身高,名字;输入 男1 ,178cm,Tonmy;

8.实现 char *strcpy(char* dest, const char *src); 函数;

笔试部分完结;

接下来面试部分

面试官是一个看起来很年轻的青年,估计也就25左右;整个过程没有说笔试部分上的问题,一开始基本都是自我介绍;所以这次也是不例外,自我介绍的时候面试官会借此机会一边听一边看简历,所以整个过程要把握好,刚好他看得差不多就可以停,这是个技巧;网上学的;我就废话不多说,直切正题;

一上来就问,你这里的内核移植时做过的吧?我说是的,做过的,下载源代码,参考一些手册一步一步移植,不懂的找资料和看论坛; 好了,我只说问题不说回答了;

问题1. 如果我有个文件想加入内核源代码,要怎样做? 。。。。。。都忘得差不多了,只能说个大概

问题2. USB驱动,是内核自带的然后选上还是自己移植的? 。。。。。。正中要害,虽然是直接选上,但有时用不了,原因是USB那块的时钟没设置好,需要修改,圆滑过渡了,这是我移植的时候出现的问题;

问题3. I2C驱动你做过吧?能简单说下是怎样编写的吗?

问题4. 那简单说说I2C设备的地址有哪些位?

问题5. 网络编程TCP的服务器怎样设置?

问题6. 写过多线程编程吗?

问题7. 你简历里的按键驱动是怎样设计的?

问题8. 有使用过视频编码吗?

还有一些问题,我也忘记了,印象深的就这些了,由于我没准备好,有些回答得很差,而且没重点,具体怎样还是等通知,该干嘛还是得干嘛去。

对了,还问到 Source Insight的快捷键还有vi快捷键,想查看你用这些工具的熟用程度;


总结了下I2C、USB、socket 被问到的概率很高,还是需要整装备战,准备好了,继续战斗!!!










ls -l /dev

你可能感兴趣的:(嵌入式求职面试1)