您的位置:首页 > 职场人生

转师兄的中兴技术面试心得

2010-06-10 20:04 344 查看
中兴技术面试心得
2010-05-31 20:48

周末一直在想笔试题目有点难,考得不太好,结果凌晨1点发来通知,早上到实验室发现大家都
收到面试通知了。

下午面试,地点就在学校附近的酒店房间,基本一层楼被包下作为面试点,两位HR,一男一女。

上来基本没时间做自我介绍,直接看简历,提问。

可能是我的简历写了很多嵌入式Linux开发,多数为这方面问题。

1、写出尽量多的linux命令

ps、mv、cp、ls、top、vim、gedit、top、git、man,其他的忘了,总之写了有十来个。

接着问列出所有用户进程的命令,直觉应该是ps命令加参数,但没用过,只能老实回答必须要看命令帮助才能答出,可以用ps --help或者man
ps查看命令的参数。

2、谈谈Linux驱动开发流程

貌似我也不懂正确的流程,就把我做驱动的流程说了下:

1)裸机调通硬件(比如ARM先用ADS调试)

2)熟悉驱动框架,需要完成哪些函数

3)建立起驱动dummy框架,使得上层可以正确调用

4)逐个完成驱动具体需要完成的函数(比如write函数,read函数等等)

5)整体测试

6)Debug

7)Codereview等等

说到codereview
HR似乎很熟悉这个,问我们使用的什么标准,我还真不懂用的什么标准,我们的codereview就是大家坐在一起,看看代码有没有明显的bug,比如格
式不好,内存泄露一类的,最后回答了C用的是ANSI C标准,估计HR想问的是我们的CMM等级吧(貌似没有?)。

3、第三个问题是字符串编程

可惜了这个字符串问题,明明知道会考,这次中兴来的太早,还没开始准备,不过说来平时做驱动里面还真是用不到,做应用可能会用到。

一开始叫写strtok,可怜的我一脸茫然,没听过这个函数,然后换写strstr,找子串,头脑里大概蹦出用循环一个一个对比,但是当场写出来估计后面
也没有面其他问题的时间了,放弃吧,实话实说目前我就会写strcpy,平时项目中不用字符串。

4、字符串不会,于是问我汇编如何,当场冷汗,答能看懂,于是让我用汇编写个2的n次方出来,我都答能看懂了,还要写啊!

2的n次方,第一反应是用左移,左移貌似是LSL,最后憋出来三句汇编

ADR R0,N <--解释这个是地址

MOV R1,RO <--这个写错了,应该是MOV R1,[RO],这个是数值

LSL R2,R1

上面代码的结果应该是R2乘以2的n次方,那R2应该是1才对(忘写了,貌似当时写的也不是R2,记不清了)

不过HR貌似用X86架构,不用ARM,所以问我这是什么汇编,答曰ARM汇编,解释了半天寄存器,然后告诉HR目前所有工作都是基于ARM架构的。

还有继续问函数返回问题,问返回地址,当时在想汇编,答是sp,傻了,应该是lr,但这个和X86架构很不一样,所以应该不是HR想要的结果。

5、Linux内核裁剪流程<--这个俺长做

1)git 官网下Linux内核

2)添加特定处理器的架构代码(mach目录)<--应该说打个patch比较正规

3)选定使用的编译器,arm架构目前主要eabi的编译器

4)make menuconfig 配置内核<--漏了添加各种各样的驱动

5)make

6)大量的debug

7)生成内核

最后还问了问最新的linux内核版本(2.3.33)

4-5基本是穿插进行的,5结束后问我汇编写完没

总之,20分钟的面试很短,2个大题做的不好,估计勉强能及格吧,如果不要我也没关系,来练练手的,相信充分准备后是可以取得更好的成绩。

这次中兴来的这么早,正好让我们了解下笔试和面试的流程,这个暑假可以进行充分的准备,希望自己能找到满意的工作。

PS1:我个人目标魔都,虽然老妈一直想让我回家。。<--无奈的眼神

PS2:我可怜的1年Android底层开发经验,HR貌似不关心这个,当Linux底层开发经验好了。。

Rockie Cheng

=======================

附录

1)[kyon@SEP4020 /]$ ps --help

********* simple selection ********* ********* selection by list
*********

-A all processes -C by command name

-N negate selection -G by real group ID (supports
names)

-a all w/ tty except session leaders -U by real user ID (supports names)

-d all except session leaders -g by session OR by effective
group name

-e all processes -p by process ID

T all processes on this terminal -s processes in the sessions given

a all w/ tty, including other users -t by tty

g OBSOLETE -- DO NOT USE -u by effective user ID (supports
names)

r only running processes U processes for specified users

x processes w/o controlling ttys t by tty

*********** output format ********** *********** long options
***********

-o,o user-defined -f full --Group --User --pid --cols --ppid

-j,j job control s signal --group --user --sid --rows
--info

-O,O preloaded -o v virtual memory --cumulative --format --deselect

-l,l long u user-oriented --sort --tty --forest --version

-F extra full X registers --heading --no-heading --context

********* misc options *********

-V,V show version L list format codes f ASCII art forest

-m,m,-L,-T,H threads S children in sum -y change -l format

-M,Z security data c true command name -c scheduling class

-w,w wide output n numeric WCHAN,UID -H process hierarchy

2)strtok

char *mystrtok(register char *s, register const char *delim) {

static char *last;

char *tok;

char *ucdelim;

/*(1)s为空,并且上次剩余值也为空,则直接返回NULL,否则s为last或当前值中有值的一方*/

/*if (s == NULL && (s = last) == NULL)

return NULL;*/

/*(2)以上内容与下面等价:

下面意为:如果s==NULL的时候,s则为last(上次执行该项的时候的剩余值);

若这时候s还为空(即上次没有剩余),则返回NULL。

*/

if (s == NULL)

s = last;

if(s == NULL)

return NULL;

/*(3)也意为:若后续值为NULL则不进行操作,否则继续操作。

其中,后续值的界定方法为: 若last不为空的时候,则s为last,否则为输入值

* */

/*

if(last != NULL)

s = last;

else if(s == NULL)

return NULL;*/

tok = s;

int found = 0;

while (!found && *s != '/0') {

ucdelim = (char *) delim;

while (*ucdelim) {

if (*s == *ucdelim) {

found = 1;

*s = '/0';

last = s + 1;

break;

}

ucdelim++;

}

if (!found)

s++;

}

return tok;

}

3 strstr

/* Written by Philippe De Muyter <phdm@macqel.be
>.
*/

char *

strstr (buf, sub)

register char *buf;

register char *sub;

{

register char *bp;

register char *sp;

if (!*sub)

return buf;

while (*buf)

{

bp = buf;

sp = sub;

do {

if (!*sp)

return buf;

} while (*bp++ == *sp++);

buf += 1;

}

return 0;

}

strstr的实现 看来还是比较简单,不过这样比较,每次移动一位,貌似效率低点

原文地址:http://hi.baidu.com/aokikyon/blog/item/2f43a9823e423eb36c8119a1.html
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: