一面CVTE总结

CVTE面试总结(技术面试)

那天早上11点面的,大早上7点就起床,坐了一个半小时的公交车才到,简直了,把人都坐懵了,有点发挥失常,以下进入正题面试官提问问题:我会根据提问问题,百度出正确答案,同时也供自己复习:

1、自我介绍都不用,面试官叫我讲解下自己印象最深的一个项目,(这个靠自己发挥,)那天自己给自己挖了,发挥失常,所得有点不清不处,这点以后的注意,熟悉自己做过的东西,一定要能说清楚最好写稿子。

2、项目介绍完了开始问c语言了,开始他说你用的什么语言,我竟然听成源,还以为是神马源码呢!让我汗颜,之问第一个问题:指针数组有什么区别?

百度答案如下这个我个人挺认可的:

区别一:指针和数组在不少地方都是可以相互替换使用的,这就让人产生一种错觉,以为两者是等价的。数组或是在静态存储区被创建(全局数组),或是在栈上被创建。数组名对应着,注意不是指向,一块内存,其地址与容量在生命期内保持不变(当然使用了realloc()的不算),只有数组的内容可以改变其数组大小是不可变的。指针可以随时指向任意类型的内存块,它的特征是“可变”,所以我们常用指针来操作动态内存。指针远比数组灵活,当然也就更危险。

区别二:用运算符sizeof可以计算出数组的容量(字节数),可以的到数组大小。char *p这是因为sizeof(p)得到的是一个指针变量的字节数,及其变量类型所占空间。得注意的是,当数组作为函数的参数进行传递时,数组就自动退化为同类型的指针。那么不论数组a的容量是多少,sizeof(a)始终等于sizeof(char *),转换为指针传递。  感觉这问题我都答出来了。

3、问的好像是全局变量与局部变量的存储区有什么区别?

个人认可的百度答案:全局变量全部放在静态存储区中,而在动态存储区中存放函数形式参数和自动变量(局部变量)以及函数调用时的现场保护和返回地址,因为你知道的,函数调用是通过系统栈实现的,故局部变量存放在栈区。            ----- 感觉其实他这讲的不是太好,全局变量又分为初始化和未初始化的,未初始化的存放在在BSS区,初始化的存放在以初始化静态区,推荐去看一本书叫linux高级程序设计,我认为上面讲的不错,已经很好的阐述了。

4、问了中断函数有什么有优缺点?

缺点:

(1):不能有返回值,中断服务函数的调用是硬件级别的,当中断产生,pc指针强制跳转到对应的中断服务函数入口,进入中断具有随机性,并不是某段代码对其进行调用,那么如果有返回值它的返回值返回给谁?显然这个返回值毫无意义,如果有返回值,它必定需要进行压栈操作,这样一来何时出栈怎么出栈将变得无法解决。

(2):不能传递参数给中断函数传输(全局变量方式除外):

同理,也是由于这样会破坏栈的原因,因为函数传递参数必定会要求压栈出栈操作,由于进入中断服务函数的随机行,谁给它传递参数都成问题

(3):

如果某个中断频繁产生,而它对应的ISR相当的耗时,那么对中断的响应就会无限的延迟,会丢掉很多的中断请求

(4)printf(char * lpFormatString,…)函数会带来重入和性能问题,不能在ISR中采用。

这就涉及到一个中断嵌套问题,由于printf之类的glibc函数采用的是缓冲机制,这个缓冲区是共享的,相当于一个全局变量,第一层中断来时,它向缓冲里面写入一些部分内容,恰好这时来了个优先级更高的中断,它同样调用了printf,也向缓冲里面写入一些内容,这样缓冲区的内容就错乱了。

优点(根据自己所学整理):能够提高CPU的工作效率、可以很好的查询外设的工作、具有实时性、对于一些特殊的事件作出快速的处理与响应。处理突发事件完毕后又正常执行原来工作,保障了系统的性能。

5、同一全局变量分别在中断函数与主函数中调用有什么区别,有什么有什么优缺点?

对于这个问题,百度我也没找到答案,但是我自己的理解是没有区别,到时有一些好处,可以使中断与主函数传递参数。期待谁给我建议,我加以修改。

6、从这开始问c++了,问了深拷贝与浅拷贝的区别?

百度答案(我认可的):浅拷贝,即在定义一个类A,使用类似A obj;  A obj1(obj);或者A obj1 = obj; 时候,由于没有自定义拷贝构造函数,C++编译器自动会产生一个默认的拷贝构造函数。这个默认的拷贝构造函数采用的是“位拷贝”(浅拷贝),而非“值拷贝”(深拷贝)的方式,如果类中含有指针变量,默认的拷贝构造函数必定出错。用一句简单的话来说就是浅拷贝,只是对指针的拷贝,拷贝后两个指针指向同一个内存空间,深拷贝不但对指针进行拷贝,而且对指针指向的内容进行拷贝,经深拷贝后的指针是指向两个不同地址的指针。这句话最形象描述浅拷贝 只拷贝指针,深拷贝就是拷贝他的值,重新生成的对像。就像是浅拷贝就是你的影子,深拷贝是你的克隆人,你没了影子也就没了,但是克隆人还活着。那天我复习了下c++对于这个问题我是答出来的。

7、c++的多态是什么?如何实现多态?

		百度答案(感觉这个讲的不错)C++中的多态(虽然多态不是C++所特有的,但是C++中的多态确实是很特殊的)分为静多态和动多态(也就是静态绑定和动态绑定两种现象),静动的区别主要在于这种绑定发生在编译期还是运行期,发生在编译期的是静态绑定,也就是静多态;发生在运行期的则是动态绑定,也就是动多态。多态:同一操作作用于不同的对象,可以有不同的解释,产生不同的执行结果。在运行时,可以通过指向基类的指针,来调用实现派生类中的方法。C++中,实现多态有以下方法:C++中,实现多态有以下方法:虚函数抽象类,覆盖,模板(重载和多态无关)。  --------当时忘记了就答出了虚函数与模板!
	8、根据上一个问题又问了我虚函数表是什么?
百度答案:虚函数必须是非静态成员函数(且非构造函数),其访问权限是public(可以定义为private or proteceted, 但是对于多态来说,没有意义。)
	对C++ 了解的人都应该知道虚函数(Virtual Function)是通过一张虚函数表(Virtual Table)来实现的。简称为V-Table。 在这个表中,主是要一个类的虚函数的地址表,这张表解决了继承、覆盖的问题,保证其容真实反应实际的函数。这样,在有虚函数的类的实例(注:抽象类即有纯虚函数的类不能被实例化。)中这个表被分配在了这个实例的内存中(注:一个类的虚函数表是静态的,也就是说对这个类的每个实例,他的虚函数表的是固定的,不会为每个实例生成一个相应的虚函数表。),所以,当我们用父类的指针来操作一个子类的时候,这张虚函数表就显得由为重要了,它就像一个地图一样,指明了实际所应该调用的函数。 --------------------这个问题没答出来看来我看的书还是太少了!!
 9、问了linux你学了哪些内容?
我的回答是:学了应用编程,系统编程,驱动编程都有所了了解,自己实际动手写过,做过内核裁剪,NFS制作,uboot移植等!
 10、他根据我9的回答做了扩展linux下驱动的加载方式有几种?
 	百度与我的一样:两种,静态加载与动态加载,
,静态加载是系统启动的时候由内核自动加载的,这个要事先将驱动编译进内核才行,及需要把相应的驱动文件放到相应的目录下,修改Kconf再编译即可。还有一种就是动态加载,也就是模块加载方式,也就是insmod加载,这种方式下驱动以模块的形式存放在文件系统中,需要时动态载入内核,这种主要用在调试的时候,比较方便灵活。
	11、根据我第10的回答,他又问,静态加载如何添加到menuconfig菜单下?
	这个我没答出来!实在忘记了,百度答案,驱动文件放到相应的目录夏侯,参照其他的修改drivers/char/Config.in文件,后再根据相应修改makefile(参照该文件中上面的其他的文件修改)。这样在menucongif中就可以看到了,记得好像应该还要修改kconfig文件,记不得了!百度找不到,期待有人看到并提出。
	12、问了UBOOT的作用是什么?
	百度到的:感觉这家伙或我理解的类似,就不打字了太累!http://blog.csdn.net/eric41050808/article/details/17895517
	13、叫我写了一个程序?!
	f(0)=0;f(1)=1;f(2)=1;f(3)=2,f(4)=5;......f(n)=f(n-1)+f(n-2);
	当时慌了,竟然没想到时给的是一个斐波那契数列,他叫用非递归方式写出来!当时没写出来!这可能是我挂了的最大原因!其实是我回答的太过急躁,没有一个好的语言功底!斐波拉契数列写在数据结构图与算法中?

		就此CVTE我止步于一面!


  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值