博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
上海NV面试被虐经历
阅读量:5320 次
发布时间:2019-06-14

本文共 1219 字,大约阅读时间需要 4 分钟。

 

 

上海NV面试被虐经历

By 
 
| 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

你可能感兴趣的文章
用JS判断两个数字的大小
查看>>
【luogu P2298 Mzc和男家丁的游戏】 题解
查看>>
CVE-2012-0158 分析
查看>>
Git提交代码冲突:commit your changes or stash them before you can merge.
查看>>
OpenCV —— 直方图与匹配
查看>>
简单查看tomcat中部署java服务的内存使用情况
查看>>
jeasyui 造成$.data(...) is undefined报错的原因及解决
查看>>
ACCP7.0-S2-复习自测-15测试分析
查看>>
洛谷P3295 [SCOI2016]萌萌哒(倍增+并查集)
查看>>
loj#6053. 简单的函数(Min_25筛)
查看>>
洛谷P5245 【模板】多项式快速幂
查看>>
js apply 和call的区别
查看>>
调查显示:近半数人“婚房”首付要啃老
查看>>
java网络请求工具类
查看>>
linux常用命令
查看>>
头文件导入方式
查看>>
v-model
查看>>
JAVA基本数据类型所占字节数是多少?(32位系统)
查看>>
[杂题]FZU2190 非提的救赎
查看>>
yum安装方式的php,切换NTS为ZTS版本
查看>>