51WinCE-博客园分站

WinCE非官方Blog分站

导航

【原创】关于一个月以来应聘的感想

从2月2日离开公司,到今天刚好算是一个月,还好2月是个闰月,不知道再多几天可能就要崩溃了。呵呵。昨天offer集体井喷,最终还是选择了M社,也算咨询了多方意见作出的决定,这些都是题外话,一个月以来的确让个人的心理和技术上有了一定的磨练,一下做一点简单的总结,希望能给大家一些小小的帮助。

 

首先是心理上,从最开始都不知道怎么面试,非常紧张到最后在VIA面试,虽然知道达不到VIA的要求,但是还是去了,心理状态还不错,虽然严重被鄙视了一通。主要是由于完全没有接触过关于网卡的开发,所以面试的时候对方的工程师也就只击重点的问网络的问题,所以也无所谓了,主要是自己投了VIA的简历,人家也邀请了,还是去一下也算是一个比较完整的过程,以前听朋友说发了申请,然后人家也邀请去面试了,也答应去面试了,结果面试当天没去,感觉这样还是不太适合,毕竟答应了还是去,好于不好都能帮助自己找到可以学习的地方。

 

经过这段时间的面试,也算对面试有了新的认识,首先适当的紧张是正常,但是别太紧张,刚面试的几家都没有消息,一个是笔试做的实在是不太好,题目很简单,但是太紧张,粗心错了很多题,甚至是做对了反过头来检查改成了错的,一个紧张一个有点不自信,还好面试关都还算和气,要求再看看题目也都同意了,主要还是粗心,所以,不管是笔试还是面试都不要太紧张,面试也是一样,一紧张脸部就非常僵硬,面试关看的你都感觉不自然,第一映像扣分也还是挺厉害,尽量保持正常状态去应对就好了。微笑一点谈话的氛围也会轻松一些。如果遇到口音很重的面试官,也是个难题,这时就尽量放慢一些速度,慢慢来适应对方的口音,因为很可能你要和他共事,你只能尝试改变自己。最后一点是保持谦虚的态度,知之为知之不知为不知,就拿到VIA的面试,的确是已经对网络那块近3年没有去看了,考官问道不知道的就说不知道,这样其实是双赢,自己也不会变得很被动,对方公司也可以了解你大概的状态,总而言之,从容面试,态度谦虚,实事求是,就可以了。

 

关于技术上的,可能到M社后一段时间不会接触WINCE,但是昨天有幸得到Hjb 何兄的指点,觉得也无所谓,自己还是在嵌入式电子这行转,操作系统是哪个其实并不是很重要,早上Jake兄在群里回答问题时也提到了,其实用什么系统并不是重点,按照他多年的经验,一直能用的东西是设计模式和算法,主要是排序和查找,其他都是做的时候学,边学边做,最重要的是学学基础。的确,基础如果扎实,想Jake兄和何兄这样的高手,开发也不限定以一个操作系统,能很熟练的游走与各个不同的操作系统进行开发。所以还是要打扎实基础。

 

最后总结下这一个月来做的笔试题目比较经典的几个问题。程序题大家自己先做做,然后去tc或者VC跑一下看看。都不是很难。主要是仔细。

 

1.描述下下面程序打印出来的结果.BY:VIA面试部分题目

   1:  #include<stdio.h>
   2:   
   3:  typedef struct
   4:  {
   5:  int Sfirst;
   6:  int Ssecond;
   7:  char Sthird;
   8:  }test1;
   9:   
  10:  typedef union
  11:  {
  12:  int Ufirst;
  13:  int Usecond;
  14:  char Uthird;
  15:  }test2;
  16:   
  17:  char globleArray = 1;
  18:   
  19:  void main()
  20:  {
  21:  int i = 0;
  22:  int j = 0;
  23:  int stop = 0;
  24:  int array[10][10] = {0};
  25:  char alphabeta[11] = "1234567890";
  26:  globleArray = 4;
  27:   
  28:  for(i = 0 ; i < 10 ; i++)
  29:     for(j = 0 ; j < 10 ; j++)
  30:       {
  31:       array[i][j] = i + j*10;
  32:       }
  33:     system("CLS");
  34:     printf("array[2][3]= %d\n",array[2][3]);/*value*/
  35:     printf("array[0][0]= %d\n",array[0][0]);/*value*/
  36:     printf("array[2] = %d\n",array[2]);/*address*/
  37:     printf("array[2]-2 = %d\n",*(array[2]-2));/*address*/
  38:     printf("array[2][3]'s address = %d\n",&(array[2][3]));/*address*/
  39:     printf("array[2][3]-2 = %d\n",*(&(array[2][3])-2));/*value*/
  40:     printf("alphabeta+2 = %c \n",*(alphabeta+2));/*value*/
  41:     printf("sizeof(test1)= %d\n",sizeof(test1));
  42:     printf("sizeof(test2)= %d\n",sizeof(test2));
  43:     printf("globleArray = %d\n",globleArray);
  44:     system("PAUSE");
  45:  }

 

2.static的作用是什么?static 全局变量、局部变量、函数与普通全局变量、局部变量、函数

static全局变量与普通的全局变量有什么区别?static局部变量和普通局部变量有什么区别?static函数与普通函数有什么区别?

BY:组创,VIA

static的作用有一下三个:

1). 在函数体,一个被声明为静态的变量在这一函数被调用过程中维持其值不变。

2). 在模块内(但在函数体外),一个被声明为静态的变量可以被模块内所用函数访问,但不能被模块外其它函数访问。它是一个本地的全局变量。

3). 在模块内,一个被声明为静态的函数只可被这一模块内的其它函数调用。那就是,这个函数被限制在声明它的模块的本地范围内使用。

以上几个问题的主要区别也是常考,可能是以程序的形式出些,VIA考的是程序,问变量分配在内存的stack还是heap?是local heap还是global heap?所以先搞清楚概念就好做题,仔细大胆就好了。

全局变量(外部变量)的说明之前再冠以static 就构成了静态的全局变量。

全局变量本身就是静态存储方式, 静态全局变量当然也是静态存储方式。

这两者在存储方式上并无不同。这两者的区别虽在于非静态全局变量的作用域是整个源程序, 当一个源程序由多个源文件组成时,非静态的全局变量在各个源文件中都是有效的。 而静态全局变量则限制了其作用域, 即只在定义该变量的源文件内有效, 在同一源程序的其它源文件中不能使用它。由于静态全局变量的作用域局限于一个源文件内,只能为该源文件内的函数公用, 因此可以避免在其它源文件中引起错误。

从以上分析可以看出, 把局部变量改变为静态变量后是改变了它的存储方式即改变了它的生存期。把全局变量改变为静态变量后是改变了它的作用域, 限制了它的使用范围。

static函数与普通函数作用域不同。仅在本文件。只在当前源文件中使用的函数应该说明为内部函数(static),内部函数应该在当前源文件中说明和定义。对于可在当前源文件以外使用的函数,应该在一个头文件中说明,要使用这些函数的源文件要包含这个头文件。

static全局变量与普通的全局变量有什么区别:static全局变量只初使化一次,防止在其他文件单元中被引用;

static局部变量和普通局部变量有什么区别:static局部变量只被初始化一次,下一次依据上一次结果值;

static函数与普通函数有什么区别:static函数在内存中只有一份,普通函数在每个被调用中维持一份拷贝程序的局部变量存在于(堆栈)中,全局变量存在于(静态区 )中,动态申请数据存在于( 堆)中。

 

一个由c/C++编译的程序占用的内存分为以下几个部分

1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。
3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态
变量在相邻的另一块区域。 - 程序结束后有系统释放
4、文字常量区 —常量字符串就是放在这里的。 程序结束后由系统释放
5、程序代码区—存放函数体的二进制代码。

 

最后总结下堆栈,还是比较重要的,资源来自:http://blog.chinaunix.net/u2/84220/showart_1796832.html

堆和栈的区别可以用如下的比喻来看出:
使用栈就象我们去饭馆里吃饭,只管点菜(发出申请)、付钱、和吃(使用),吃饱了就走,不必理会切菜、洗菜等准备工作和洗碗、刷锅等扫尾工作,他的好处是
快捷,但是自由度小。
使用堆就象是自己动手做喜欢吃的菜肴,比较麻烦,但是比较符合自己的口味,而且自由度大。

堆和栈的区别主要分:

操作系统方面的堆和栈,如上面说的那些,不多说了。
还有就是数据结构方面的堆和栈,这些都是不同的概念。这里的堆实际上指的就是(满足堆性质的)优先队列的一种数据结构,第1个元素有最高的优先权;栈实际
上就是满足先进后出的性质的数学或数据结构。

 

另外就是一些汇编的知识。MOV和LEA的区别,大家百度下或者google下就知道了。这里不多说。

 

笔试胆大心细,面试从容应对,希望大家找到一个称心如意的工作!

posted on 2010-03-02 17:39  MercuryXu  阅读(598)  评论(2编辑  收藏  举报