上海NV面试被虐经历

WARP 
随便说说Skip to content

 

上海NV面试被虐经历

By  admin  | 2013年8月17日

职位:Mobile Graphic Tools Engineer.

这个职位主要对C++要求很高,对OpenGL API 要求很了解,面的很水,本身自己很紧张,对原理了解的也不够多。靠回忆写了点。。

C++:

1.类的初始化列表

这个东西大家都用,也知道能提高效能,但是关于它的原理。。。好吧,看这个:

三种情况下需要使用初始化成员列表:
 
一,需要初始化的数据成员是对象的情况;
二,需要初始化const修饰的类成员;
三,需要初始化引用成员数据;
 
对于第一点,当我们的类成员里有个对象,而我们却在构造函数内对它初始化时,一般来说,不仅要调用这个对象的拷贝构造函数,还要进行对象的赋值(比较消耗性能)。比如class A内有:
class B{
int a;
int b;
};
在实例化A的时候,用:
    B b;
    A(b);
是很耗性能的,可以把A的constructor写成A(int a,int b):B(a,b).
 
第二点是因为const 对象是不允许赋值操作,只能用初始化列表。
 

第三点也是一个道理。

 

2.C++多态实现的原理

这个就是虚函数表。

 

3.智能指针的原理分类

引用计数,分两类,侵入式和非侵入式,就是 intrusive_ptr 和 shared_ptr。

 

4. std::vector 的删除函数内部实现,提高效能的算法

vector是连续内存,它的删除函数是通过把后面的元素拷贝到前面实现的,这个我还是大概知道的,然后面试官问了一个如果vector 中用多个重复的要删除的情况,用erase效能是比较低的,因为每删除一次都要把后面的全向前拷贝一次。。。
 
大概思路就是先遍历,找出重复元素的位置放在一个数组里,然后看每一个元素之前有几个要删除的元素,就向前拷贝几个下标。
 
还有就是用erase删除的时候如果用迭代器遍历删除记得写成 i it = vec. erase(it); 不然迭代器会失效。
 
总之用STL的时候还是多思考一下内部原理吧。
 

图形:

1.Framebuffer 是什么,能挂载的渲染结果有哪些

可以参考FBO的定义了,算是OpenGL里比较常见的技术,FBO 里的 gl_attachment 一般挂载的就是纹理(保存渲染结果或者深度)和RenderBuffer Object(这个东西我忘记了,没答出来)

2.VBO 的原理,VAO 与VBO区别

其实我VBO完全没有使用过,我用的都是Vertex Array + glDrawElements. 所以这题就直接呵呵了,不过其实我还真看过这方面的文章,请看这两篇:
 
总结一下NV对C++要求和OpenGL API 的要求还是非常高,各位童鞋在代码的时候不光要会写会用,还要思考下原理。
 
 

转载于:https://www.cnblogs.com/warpengine/p/3456482.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值