Linux C/C++开发、嵌入式软件开发面试记录 (一)


来北京求职已经12天了,该总结一下自己这10多天的行动了。

                                                            ---------机会都是留给有准备的人

7月5日 夜晚手持半价车票(还可没半价票,窃喜)坐上去北京车,很幸运联系到了以前高中时候的一个同学,我说一个人过来的,最后他很爽快的说暂时寄宿在我们这里吧(听到这句话很高心,因为带的钱不多)。


7月8日  9:00   汉克时代(外包 W3C项目)

        这次的笔试题主要考察的是指针,包括指针函数,函数指针。其中函数指针考的最多,函数指针作参数嵌套。还有一个就是解释指针数值和数值指针。这些相关知识点在在Linux C面试题中都有讲到。还是希望面试的同学要提前准备一下,搞清这些问题,最后考察了一下单链表的操作。在面谈的过程中面试的人问了一些简历中的项目问题,以及双向链表的操作应注意前后节点不为空的问题。最后的最后谈的薪资,因为第一次被面试(在学校都是我面试别人),所以在薪资洽谈方面由于不是很满意,我一直表现一副犹豫的样子,我说了自己回去考虑一下,然后说后我就觉得说错话了。他让我回去等消息,我感觉是没戏了。

7月9日  14:00 春笛网络(邮件服务器)

    来的比较早,中午12点多就过来了,去的时候公司的人都去吃饭了。我在那等到一点左右,最后公司的HR给我拿了份试卷和和个人信息表,我先把个人信息很快的填完,然后开始答卷,卷子很特别,前面两道题都是主观题。记得第一个说的是对公司领导对员工的管理方式之类的有什么意见和建议,第二个是个人发展目标(忘记了)第三个是如何将10万大数据如何快速分割成1万行的(可以借助工具或者擅长的编程语言实现)。一下两个让编程实现语言不限(要求也挺宽松的) 1.字符串中的子字符串替换成指定的字符串(这个百度上直接有C实现的源码,java的语言的话string 类应该有对应的replace 函数)我用的是C,结果只替换了其中的一个。由于for循环的次数有点多,迷糊了。 2.从html中快速的查找到邮件地址,这个我是用语言描述的,我觉得如果用C实现的话,还要查找节点中的内容,应该比较麻烦(这个题最后我发现一个哥们用shell 编程一句话实现了,然后我彻底的崩溃了,我觉得第一个C实现的我也不用调试了,我应该是没戏了)。 后来我发现他们的考题和他们的从事的行业很贴近,例如邮件地址的查询。基本所有的问题我都是用语言描述的。那个经理问我弄出来没,我最后放弃了,他之前给我聊了很多,包括生活、家里有几口人,住在哪里等等。我在编程实现字符串查找替换的过程中他还过来看了几遍,最终我发现一个同学用shell一句话实现了我觉得会麻烦的一个问题(那个同学来的比我晚)。我最后主动放弃了调试,经理最后在我走的时候还说,以后再联系,我感觉这个又挂掉了。

7月10日 10:00 北京方物

    又一次来到了西二旗地铁站,然后再我几经询问,找到了公司,很快我被带到了一个会议室,有一个同学比我提前来,我求职的岗位是Linux C/C++开发岗位,方物是一家从事虚拟存储解决方案的。透过他们的网站,发现他们还有自己的技术专利,挺吊的一家公司。通过会议室我看见了他们的研发部,隔壁会议室的几个牛X的人正在讨论如何解决双系统启动切换什么的,我没在意听,但是还是挺感兴趣的,尤其是他们的那种热情,再加上我透过窗户看见了他们机器上装的是ubuntu系统我就有一种更亲切的感觉。我快速的填完了个人信息,然后再期望薪资上面斗胆的写了个7K。由于昨晚试卷以后,我不是第一个交卷的,结果等到11:40左右(快下班了),那个前台的美女把我单独拉倒一个办公司面谈了一会,最后让我走了,说会把试卷交给技术部,然后再通知面谈。这天来面试的人着实不少,我走的时候还有人在笔试。由于最后没等到面谈电话,最后我给约见我的那么美女发了邮件,她告诉我结果没出来,第二次有发邮件,告诉我不适合这个岗位,几天过后我决定给他们的研发部的leader写一个邮件,结果发过去了没有回我邮件,这件事就算泡汤了。

接下来谈谈这次笔试题,其中前五个是选择题,这些选择题都是网上公布的一些Linux C/C++ 面试题中挑选的。首先上来五个选择题:

第一道考察递归调用,程序如下

 int  foo ( int x , int  n) 
{
  int val;
  val =1;
 
  if (n>0)
  {
    if (n%2 == 1)  val = val *x;
    
    val = val * foo(x*x , n/2);
  }
  return val;
}
 
这段代码对x和n完成什么样的功能(操作)?
(a) x^n (x的n次幂)
(b) x*n(x与n的乘积)
(c) n^x(n的x次幂)
(d) 以上均不是

答案: A (可以举几个数字观察一下,这种方法我觉得比较快)

第二题考察逗号表达式 程序如下

main()
{
  int a, b,c, d;
  a=3;
  b=5;
  c=a,b;
  d=(a,b);

  printf("c=%d" ,c);
  printf("d=%d" ,d);
}
这段程序的输出是:
(a) c=3 d=3
(b) c=5 d=3
(c) c=3 d=5
(d) c=5 d=5

答案 C  (逗号表达式的优先级是很低的,比 赋值(=)的优先级

第三题 考察指针数组

main()
{
  int a[][3] = { 1,2,3 ,4,5,6};
  int (*ptr)[3] =a;

  printf("%d %d "  ,(*ptr)[1], (*ptr)[2] );

  ++ptr;
  printf("%d %d"  ,(*ptr)[1], (*ptr)[2] );
}
这段程序的输出是:

(a) 2 3 5 6
(b) 2 3 4 5
(c) 4 5 0 0
(d) 以上均不对

答案: A  这就看你对指针数组的理解了

用变量a给出下面的定义                                                                                        
a) 一个整型数(An integer)                                                                                    
b)一个指向整型数的指针( A pointer to an integer)                                                                       
c)一个指向指针的的指针,它指向的指针是指向一个整型数( A pointer to a pointer to an intege)                      
d)一个有10个整型数的数组( An array of 10 integers)                                                       
e) 一个有10个指针的数组,该指针是指向一个整型数的。(An array of 10 pointers to integers)          
f) 一个指向有10个整型数数组的指针( A pointer to an array of 10 integers)                  
g) 一个指向函数的指针,该函数有一个整型参数并返回一个整型数(A pointer to a function that takes an integer as an argument and returns an integer)                                                                                                                 
h) 一个有10个指针的数组,该指针指向一个函数,该函数有一个整型参数并返回一个整型数( An array of ten pointers to functions that take an integer argument and return an integer )                                                                                                               
答案是:                                                                                                    
a) int a; // An integer                                                                                           
b) int *a; // A pointer to an integer                                                                                  
c) int **a; // A pointer to a pointer to an integer                                                    
d) int a[10]; // An array of 10 integers                                      
e) int *a[10]; // An array of 10 pointers to integers                           
f) int (*a)[10]; // A pointer to an array of 10 integers
g) int (*a)(int); // A pointer to a function a that takes an integer argument and returns an integer
h) int (*a[10])(int); // An array of 10 pointers to functions that take an integer argument and return an integer

第四题 考察形式参数,实际参数,指针和数组。程序如下

void f1(int *, int);
void f2(int *, int);
void(*p[2]) ( int *, int);

main()
{
  int a;
  int b;

  p[0] = f1;
  p[1] = f2;
  a=3;
  b=5;

  p[0](&a , b);
  printf("%d\t %d\t" , a ,b);

  p[1](&a , b);
  printf("%d\t %d\t" , a ,b);
}
void f1( int* p , int q)
{
  int tmp;
  tmp =*p;
  *p = q;
  q= tmp;
}
void f2( int* p , int q)
{
  int tmp;
  tmp =*p;
  *p = q;
  q= tmp;
}  
这段程序的输出是:
(a) 5 5 5 5
(b) 3 5 3 5
(c) 5 3 5 3
(d) 3 3 3 3

答案 A (至于为什么,自己细细看吧,由于篇幅太长不在此讲解,网上可以查到)

第五道, 我忘记了,貌似很简单。

简答题部分

简答题部分,还是比较简单的,在平常的课堂上基本上老师应该都有讲到的,同时这些知识点也是在嵌入式C开发工程师或者Linux C/C++研发工程师面试题里面的部分。都有涉及到这些基本知识点,在此我就简单说几个这次考到的。首先考了strcpy和memcpy的区别是什么、 然后又一段代码如何实现互斥,以及Linux内核如何实现互斥、#include "filename.h" 和 #include <filename>的区别 其他的我就忘记了。

编程题部分

实现strcpy函数(不会的可以百度一下) ,还有一个问题就是为甚返回的是char *类型。

------------------------------转接下一篇-------------------------------

转载于:https://my.oschina.net/mjRao/blog/145500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值