当前位置:  技术问答>linux和unix

最近半个月的面试情况,有题

    来源: 互联网  发布时间:2017-01-05

    本文导语:  在犹豫了一个月后,上星期终于已经成功从原公司离职,现正在找工作中。方向linux内核与驱动开发 这两星期总共面了四家,电话接了7,8家。 第一家,小公司 启慧时代,规模20~50人 面试经历:笔试,C语言基础,...

在犹豫了一个月后,上星期终于已经成功从原公司离职,现正在找工作中。方向linux内核与驱动开发
这两星期总共面了四家,电话接了7,8家。

第一家,小公司 启慧时代,规模20~50人
面试经历:笔试,C语言基础,总共只有一轮面试,就是部门老大直接面的,由于没有带简历,所以只是说了一下基本的
情况,然后就是看笔试题,一个一个问。印象比较深的几个题:
第一题:
内存对齐:
struct a{
    char a:4;
    char b:4;
    short c;
    long d;
};
这个结构体的大小,自己写错了。以前一直对内存对齐处于混沌状态,经过该部门老大的指点,知道对齐一定是按1n, 2n,
4n, 8n方式对齐的,套上去就知道答案为8字节大小
第二题:
考察指针所指内容的存储空间,由于是用C++写的,自己对C++不熟,所以没做,但老大一说弄成C语言就是:
char *a = "abc";
char *b = "abc";
char c[] = "abc";
char d[] = "abc";
const char *e = "abc";
const char *f = "abc";

判断表达式真假:
a == b  c == d  e == f
自己说了半天也没讲明白,于是老大给讲了半天也没听明白,最后说答案是:假,假,真
后来自己回家调了一下,答案是:真,假,真。其中a == b == e == f指向的是同一块内存
第三题:
解释一下GPIO的含义,无非就是:Generic Port Input/Output

结果:一直谈了两个多小时,感觉很不好,以为没希望,结果两天后通知我什么时候可以入职。原本打算要去这家了,因为之后的一星期内都没有电话通知要去面试,谁知上周末一下就来了四家,公司规模还不小。

第二家:数码视讯,规模600多人吧
面试经历:先是根人事谈了会,然后就是技术面试,谁知说到一半,就说让我先等等,谁知后来叫我先做份笔试题,做完之后就可以直接回去了(言下之意就是你不适合,做题只是个幌子)。那就做吧,多看看些题也是好的,然后把我带到一小屋后,说题目在电脑里,打开电脑就可以看到,然后那人就走了。哪知打开电脑后,上面什么也没有,靠,唬我。当时那叫一个气,直接拍拍屁股走人。

第三家:北京华为,规模我就不说了,中国通信行业的龙头老大
面试经历:叫星期六早上11点去,在上地七街的知识产权培训中心,人那叫一个多。等了一小时,12终于到我了,由于自己没带简历去,只是在一张纸上简单写了下,于是乎叫我先做题,如果去面试过的都知道,题目并不难
第一题:编写快速排序
第二题:求一个数组中大于该数组平均数的数的个数
第三题:大数相乘123456789*987654321
第四题:忘了
第五题:忘了
第六题:写一个双向链表实现在头部添加,在尾部添加,在指定位置添加
第七题:实现一个小型内存池的管理,实现分配,添加,回收,具体题目忘了。好像是有一块内存分成了100份,每次可以分配指定份数的内存。
剩下的两道是用java写的
其中只叫我做第二题和第六题。大概看了一下其它题,第一题如果写过快排的应该不难。比较有难度的应该是第三题和第七题,但也不是很难,如果时间够的话,应该能写出来,现说一下第三题和第六题的思路,如果不对请朋友们指出。

第三题:题目可以假设为为123*321,这样看着简单多了,被乘数321,个位为1表示有1个123,十位为20表示有20个123,同理百位为300个123,用3个for循环相加就可以,原题也是一样

第七题:用malloc分配出一块连续的内存,然后把这块内存分配成100份,每份内存的地址保存在一个指针里,然后将这100个指针中链表或数组保存,然后还有其它的边界判断条件,具体的去看数据结构。之后的操作就比较容易了。有兴趣的朋友可做做。
面试结果:由于没带简历,而且到跟我谈的时候,已经到收尾了,只是简单的说了两句就把我打发回来了。郁闷啊,事后想了下,很大一个原因是我没带简历,悲剧。在谈工作经历的时候,说得太简短。

第四家:播思通讯,规模500人左右,国内的OPhone手机就是该公司做的
公司性质:外商独资,在交流得知工作中邮件是全英文,而且以后根一些芯片厂商交流也是用英文,但我在里面没看到一个外国人,因此不知道算不算是外企。
面试经历:根总门两个工程师谈了些工作经历,说了下做过的项目,谁知要我把去年做的一个项目要我在纸上画出来,当时那叫一个心慌,娘的,这么长时间了,都忘得差不多了,不过大概的东西还是说得出来。之后拿来了一份题,当时一看立马傻眼,全英文的。英语啊,我心中的痛。题量还行,40分钟时间,中间大部分都是操作系统相关的选择题而且还是Windows NT有关的,对Windows NT的不了解,好多都是猜的。有印象的:
int i, j = 5;
i = (--j)*(j++);
这一题比较迷惑,网上也有讲解,答案不一,还跟具体的编译相关,于是乎写了个答案为:20,不知正确与否。
还有最后一道题是信号量相关的编程题,其它的题记不清了。
谁知就这样稀里糊涂的就过了一面,二面是部门老大,基础与工作的经历不在问,只是问的面就比较宽了,最后得出对我的结论:掌握的知识面还比较广,但是不够深入,比如:说说触摸屏的硬件原理,解释一下在选择题中的EPROM,EEPROM中这几个大写字母的意思,说说USB协议和OHCI协议是哪个公司提出来的。这些都说不上来,但还好,结果是二面也已经通过。
面试结果:一面,二面已过,已经接到要复试的面试了。

第五家:蓝色星际,规模听HR说是600多人,但感觉没有。做网络视频监控的
公司性质:外商独资,但工作环境应该是中文的。
面试经历:先是做了份笔试题,题目简单,只是有几个题还是很迷惑
第一题:
char *p = "hello world";
*(p + 2) = 'A';
printf("%sn", p);
这个题我写了个乱码,不知道对不对,但可以肯定不会是hello world

第二题:GDB是怎么调试多线程的,这题是真不记得了,以前在公司鼓捣过,不过要加的参数很多,记住。

第三题:"111aa222bb333cc444", 在Linux C中怎么中简单快速的办法查找字符串中的数字?
我写的答案:使用strstr直接查找字符串"111", "222", "333", "444"

第四题:在Linux C中,ls这个命令是怎么被执行的?
我的答案:在程序中使用fork创建一个进程或exec函数族覆盖原进程

第三题:经典的内存知识方面的题
在一个只有128M内存并且没有交换分区的机器上,说说下面两个程序的运行结果
1,
#define MEMSIZE 1024*1024
int count = 0;
void *p = NULL;
while(1) {
    p = (void *)malloc(MEMSIZE);
    if (!p) break;
    printf("Current allocation %d MBn", ++count);
}

2,
while(1) {
    p = (void *)malloc(MEMSIZE);
    if (!p) break;
    memset(p, 1, MEMSIZE);
    printf("Current allocation %d MBn", ++count);
}
我写的答案,第一道程序分配内存但没有填充,编译器可能会把内存分配优化掉,程序死循环;第二道,程序分配内存并进行填充,系统会一直分配内存,直到内存不足,退出循环。
其它题很简单,都是Linux C相关的基础知识。
    面试结果:好个HR MM气质比较好,跟她侃了半天,得出的结论:做linux驱动与内核的意志很坚定(估计该公司只想招做应用的);说话速度比较快(这个我承认,我一紧张说话就会很快,而且手还会发抖,上一家公司就是)。还问了个比较有意思的问题:在学校宿舍里有几个人,你觉得你与西游记中唐僧四人中的那个人的性格比较像。想了下说介于猪八戒与三僧之间,之间比较有意思。在问及个人问题的时候,果断回答单身。事后想来有点吃亏,看她年龄与我相差不大,我也应该反回她的,然后在调侃她一下,说要是我能进你们公司第一件事就是追你。可惜当时没想到。不过面试我的这个MM气质真是不错啊,给人清新的感觉,该MM的名字就不说了,大概描述一下,身高应该160吧,带个眼镜,短头发。要是这家公司面试的朋友要抓紧啊。是否单身那就靠你自己打听了。估计这家公司去不成了,这个HR MM问得很清楚,很细,于是说是要三到五个工作日回复,应该是不合适了,要是合适应该当时就技术面试了,不过没关系,能和个漂亮的MM聊天也不错啊,哈哈。唯一不好的地方就是,在面试过程中接了个上家公司通知复试的电话。

     以上就是最近两周的面试情况,纵观从9月份到现在来看,接到的电话20多家了吧,去面试的公司也应该应该有15到20家了,大公司小公司都有,面试的效果是一次比一次好,面试的经验是多次失败得来的,不是从书上看来的。看来现在嵌入式的就业情况还是不错的,只要你有经验,还有就是简历的问题,简历一定要好好写。

    投简历的技巧,由于接到的电话太多,于是乎我直接把自己的目前薪资(当然要适当的加一点)与期望薪资写出来,这样就可以避免在面试中对薪资问题的尴尬,也避免了在面试中一切说得都挺好,双方都很合意,直到最后谈薪资的时候不合意,避免浪费双方的时间。
    最后建议刚毕业出来的同学,可以考虑去外包公司干一到两年,之后在决定是否换公司。

|
好帖!大版加精啊

|
很有参考价值

|
那个char a:4是什么意思?有这种表示法吗?

|
我也是学嵌入式专业的 你写的这些面试题我们基本上都接触过 但都是些皮毛 
在加上学的很是垃圾啊  很惭愧啊 ...........

|
第一题:
char *p = "hello world";
*(p + 2) = 'A';
printf("%sn", p);
这个题我写了个乱码,不知道对不对,但可以肯定不会是hello world


这个题取决于编译器,修改数据段内容,会引起段错误,也就是说程序异常中止,但是如果编译器检查不严格,会导致输出heAlo world

|


http://learn.akae.cn/media/ch19s04.html

|


跟编译器没关系,跟OS相关,写进程的只读数据段,会引起segment fault

|


正确。在GCC里这种操作会发生段错误。大家写代码时一定要小心。

|
蓝色星际呆过,加班比较多,有加班晚餐,你说的HR我怎么没见过,我知道有一个短头发个子很高的,穿一个蓝色T恤,一看就是刚毕业的MM。笔试题应该跟你做的一样。这家公司号称在英国上市的,其实比在国内上市门槛还低,其实就是私企。

|
我上边写的不严密,从编译到运行整个都是过程都是有关系的。首先某些(不是所有)编译器(GCC Linux/i386) 编译的时候把 string literals 设定为只读。运行时,你试图修改它,MMU 就让 CPU 向操作系统发出警告,操作系统又向进程发出 SIGSEGV 信号,这个信号的默认行为是终止进程。





|

在不同的平台下,long占用的内存大小是不一样的。


/* test.c */
#include 
typedef struct a{
  char a:4;
  char b:4;
  short c;
  long d;
} xx;
int main(int argc, char** argv)
{
printf("char; %dn",sizeof(char));
printf("short: %dn",sizeof(short));
printf("int: %dn",sizeof(int));
printf("long: %dn",sizeof(long));
printf("float: %dn",sizeof(float));
printf("double: %dn",sizeof(double));
printf("xx: %dn",sizeof(xx));
return 0;
}

编译上面的文件,结果如下

aray@aray:~/C$ gcc -m64 test.c -o test64
aray@aray:~/C$ gcc -m32 test.c -o test32

aray@aray:~/C$ ./test32
char; 1
short: 2
int: 4
long: 4
float: 4
double: 8
xx: 8

aray@aray:~/C$ ./test64
char; 1
short: 2
int: 4
long: 8
float: 4
double: 8
xx: 16

|
平时为了跨平台编写,几乎不用long。 int,double 就够用了。

|


http://learn.akae.cn/media/ch08s04.html
http://learn.akae.cn/media/ch19s03.html

char *a = "abc";
char *b = "abc";
const char *e = "abc";
const char *f = "abc";

字符串的值是固定不变的,没有必要在内存中存放多个内容一模一样的字符串(浪费内存)。所以,编译器发现一模一样的字符串,不会在内存中生成多个。所以,上面4个指针都是指向同一块内存,他们的值相等。

后面也有题目,要修改字符串里面的值。由于字符串的值只读,不允许修改,会报“段错误”。实际上GCC是将不可修改的常量(包含字符串)放入代码段。代码断被操作系统标记为只读。不能修改的。

char c[] = "abc";
char d[] = "abc";

这个和上面不一样,定义了2个数组(不似乎字符串)。由于我们可以执行c[0]'=2;这样的语句。不可以设计为将c和d指向同一块内存。(如果指向同一块内存的话,修改了c,d的值也变了)。

实际上,c和d存放在栈中,分别指向不同内存空间。

|
好贴,学习了!

|
这事不能说太细!

|
其实正常就应该输出 heAlo world, 因为这个是个常量而不是变量。当然的确和编译器有关

|
个人建议,面试一定要带简历,而且表达时要有条理,语速适用。
不建议去外包公司。

|
好多都知道一点,花点时间能做出来。不过,如果做卷子,短时间还真搞不定。看来还得加强一下了。
楼主的经历很有参考价值。

|

|
look look

|
look look

    
 
 

您可能感兴趣的文章:

 
本站(WWW.)旨在分享和传播互联网科技相关的资讯和技术,将尽最大努力为读者提供更好的信息聚合和浏览方式。
本站(WWW.)站内文章除注明原创外,均为转载、整理或搜集自网络。欢迎任何形式的转载,转载请注明出处。












  • 相关文章推荐
  • 各位朋友,小弟过两天要到创智去面试了,这是我头一次去参加面试,不知道要问些什么问题,请大家多提点,提点。
  • 高分求进外企面试时的英语面谈经历
  • linux内核与驱动面试
  • 面试过linux c的进来
  • 去建行面试应该注意些什么?帮帮我!
  • Unix/Linux下的开发经验,谁有这方面面试题.
  • 急!!! Java面试时的一个排列组合问题
  • 一家月薪上万的外企的面试题(Linux C工程師)
  • ### java面试问题集 ###
  • 请你展望一下软件技术未来的发展?(面试题)
  • 用UNIX/Linux开发的公司,面试都问些啥????
  • 哪位大哥知道浙大兰德怎么样?面试会试些什么呀?
  • 哪位大哥知道杭州CSK公司怎么样?面试会试些什么呀? 薪水大概多少?急!!谢谢!!
  • 急:我要去面试,大家给指点一下(在线等)
  • 谁有腾讯面试题目,请提供以下,谢谢~其他的也可以,谢谢~
  • H3C面试问题
  • Linux平台下的面试~~~
  • 关于招聘面试
  • 笔试和面试时回答不出具体服务的配置怎么办?有些Linux服务都是看书才会做的。
  • 这个面试题该怎么回答啊?


  • 站内导航:


    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3