一亩三分地论坛

 找回密码
 获取更多干货,去instant注册!

扫码关注一亩三分地公众号
查看: 1693|回复: 7
收起左侧

面NVIDIA你要知道些什么? NV三面 + 面经小结

[复制链接] |试试Instant~ |关注本帖
renjiayuan1314 发表于 2015-12-12 10:45:47 | 显示全部楼层 |阅读模式

2015(10-12月) 码农类 硕士 实习@Nvidia - 内推 - 技术电面 |Passfresh grad应届毕业生

注册一亩三分地论坛,查看更多干货!

您需要 登录 才可以下载或查看,没有帐号?获取更多干货,去instant注册!

x
三面:
二面见:
http://www.1point3acres.com/bbs/ ... adio%26sortid%3D311
和前两面完全不一样, manager问的,问的很深,很深,很深...

简历撸了一遍...
问了什么是defer rendering和forward rendering, 没答上来.
http://blog.csdn.net/bugrunner/article/details/7436600
0, .1point3acres缃
问有没有profiling app的经验,说说印象深的,事实上有很多, 但是不知道说什么, 随口说了一个z-fighting的issue.
然后就照着z-fighting问了z-buffer, 为什么会有z-fighting? 如果你是app开发者,只能用16bits的z-buffer,不能用24位的,现在有z-fighting,你怎么解?
place objects too close to each other. By creating a small offset between two objects. By (game) developer.
又问有没有其他的办法, 想了一会儿,根据The depth buffer contains depth values between 0.0 and 1.0 but it is non-linear, high precision when z is small and much less precision when z is far away想说"另一个技巧是尽可能把近平面设置得远一些。前面我们讨论过越靠近近平面的位置精度越高。所以我们移动近平面远离观察者,我们可以在椎体内很有效的提高精度。然而把近平面移动的太远会导致近处的物体被裁剪掉。所以不断调整测试近平面的值,为你的场景找出最好的近平面的距离。". 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
但是英语没有表达好.
1,
问完了z-buffer又问stencil buffer, 什么是stencil buffer, 我blablabla,然后问你stencil里面是什么样的数据结构, float?bool?int?其他?我说就是一个模板, 1就是通过,0就是不通过,应该是bool吧,他说那为什么是8位的stancil?是啊,当时脑子进水了,事实上是int的, z-buffer是float的.他给我解释了一下.
2, . 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
vertex shader的作用, 问了world matrix和view matrix, 问了利用WV matrix可以做平移,旋转,scale,和skew四种,问其中哪一种是不能用3X3的矩阵做的,没答上来, 猜了一个skew.
问了用3x3做可以,为什么要用4x4的矩阵,答案是齐次坐标系.

用google doc share了一个,写代码:
1, strcmp
2, 用malloc实现align_malloc,
http://www.geekcome.com/content-10-491-1.html
第二个没写完, 有点难.. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴

我问了一个NV有没有用Tiled rendering? 他说有,解释了一下. 1point 3acres 璁哄潧
总体感觉一般,没有1,2 面好,难度也不是同一个level的,说明还是太水,问深一点就答不上来了.

. Waral 鍗氬鏈夋洿澶氭枃绔,
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~. From 1point 3acres bbs
已经拿到intern offer, 地里做的还是不错的, 找到了很多有用的资料.
看到NV的比较少, 写一下我这三面的准备工作和总结,反馈地里,也算是攒RP吧.. 鍥磋鎴戜滑@1point 3 acres
估计RP应该早点攒的,要不然昨天的FB也不会挂掉...........心里一万分痛
其实都是我的笔记,一些复制黏贴的工作而已.. more info on 1point3acres.com
. 鍥磋鎴戜滑@1point 3 acres

*****第一部分,计算机图形学:
How to use shader. visit 1point3acres.com for more.
Shader Debug + Precision
GLSL的如何传递数据. 1point 3acres 璁哄潧
Vertex buffer & Vertex Array  
Transform 3D to 2D + Homogeneous Coordinates
为什么要用Homogeneous Coordinates
Primitive Types
glDrawArray VS glDrawElement
Texture Mapping/Wrapping/Filtering(+MIPMAP)/Units
Texture Swizzling
FBO+Multiple Render Targets
Z-Buffer
z-fighting
Stencil Buffer
Instancing.鐣欏璁哄潧-涓浜-涓夊垎鍦
Face culling
Ring Buffer
Tessellation. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
Gimbal lock
http://learnopengl-cn.readthedocs.org/zh/latest/. visit 1point3acres.com for more.
这个写的很好,中英都有,可以好好复习一下.

*****第二部分,计算几何学
Computational Geometry
Q: Dot product of vectors (output value)
Q: Cross Product (output vector).鏈枃鍘熷垱鑷1point3acres璁哄潧
点乘和叉乘是重点中的重点,其他的自己看着办吧,
这个写的很好,在图形的背景下讲几何,
http://dev.gameres.com/Program/Abstract/Geometry.htm 鏉ユ簮涓浜.涓夊垎鍦拌鍧.

*****第3部分,设计模式
Singleton单例模式
Simple Factory Pattern(简单工厂模式)
Client-Server Model 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
Producer-Consumer. 1point3acres.com/bbs

*****第4部分,操作系统
操作系统的基本功能和四个特性
kernel mode and user mode
用户栈和内核栈
内存池、进程池、线程池
Process VS Thread
进程间通信方式
进程的三种状态
进程死锁的条件
进程调度算法
线程同步与异步
线程同步方式+Android 线程通信
Android:handler、looper、MessageQueue机制. 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
ThreadLocal与其它线程同步机制的比较
线程的实现可以分为:用户级线程和内核级线程。
线程安全/不安全+Android UI Thread?. 1point3acres.com/bbs
静态库与动态库. 鍥磋鎴戜滑@1point 3 acres
中断和轮询
makefile文件的作用是
fork() VS vfork()

*****第5部分,C语言
Intrinsic function
C/C++内存分类
Macro
如何引用一个已经定义过的全局变量?答:extern
C中的malloc和C++中的new有什么区别
volatile?
局部变量能否和全局变量重名?  
变长参数
aligned_malloc. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷

*****第6部分, C++高级特征
重载(overloaded)、内联(inline)、const 和virtual是C++独有而C不具有的四种机制。其中重载和内联机制既可用于全局函数也可用于类的成员函数,const 与virtual机制仅用于类的成员函数.
0, basic knowledge
1. What is difference between C and C++?
2. What is a class and object?. from: 1point3acres.com/bbs
3. What do you mean by C++ access specifiers?
4. What are the basics concepts of OOP?
(1)        Objects & Class: public, private, protected
(2)        Encapsulation:. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
(3)        Inheritance: A:public B
(4)        Abstraction & Interface: virtual function
(5)        Polymorphism:
5, Templates

1, overloaded重载.
2, 运算符重载(overloaded)
3, override覆盖 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
4, 内联(inline)-google 1point3acres
5, Constructors, Destructors and Virtual function
6, mutable

. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
*****第7部分,Bit manipulation 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
0, Basic function:
MSB: Most Significant Bit; LSB: Least Significant Bit;
getBit
setBit. Waral 鍗氬鏈夋洿澶氭枃绔,
clearBit
updateBit
int upateBit(int num, int I, Boolean bitIs1){
. Waral 鍗氬鏈夋洿澶氭枃绔,        int value = bitIs1 ? 1 : 0;
        int mask = ~(1<<i);                                //clear first
        return (num & mask) | (value << i);
}
Check power of 2/how many 1s in n.
如果是power of 2,说明n的32位里面只有一位是1, if(n&(n-1)==0)去check.
计算有多少个1用n=(n&(n-1),每做一次, n里面最右边会少一个1, 用来计算n里有几个1.
上面全是一个int里面的操作, 比较好理解. 如果超出了1个int,看下面bitmap.鏈枃鍘熷垱鑷1point3acres璁哄潧
技巧:
去掉最后一位(101101->10110)                x>>1
在最后加一个0(101101->1011010)        x<<1
在最后加一个1(101101->1011011)        (x<<1)+1
把最后一位变成1(101100->101101)        x | 1
把最后一位变成0(101101->101100)        (x | 1) - 1
最后一位取反(101101->101100)                                x ^ 1
右数第k位取反(101101->101001,k=3)                        x ^ (1 << (k-1))
取末三位(1101101->101)                                x & 7
取末k位(1101101->1101,k=5)                                x & ((1 << k)-1)
把末k位变成1(101001->101111,k=4)                        x | ((1 << k)-1)
末k位取反(101001->100110,k=4)                        x ^ ((1 << k)-1)
把右边连续的1变成0(100101111->100100000)                x & (x+1)
把右起第一个0变成1(100101111->100111111)                x | (x+1)
把右边连续的0变成1(11011000->11011111)                x or (x-1)
取右边连续的1(100101111->1111)                        (x^(x+1)) >> 1. From 1point 3acres bbs
去掉右起第一个1的左边(100101000->1000,树状数组)        x & (x ^ (x-1))
应用, 高低位交换
应用, 二进制逆序
Big-endian/Little-endian. From 1point 3acres bbs
big-endian the most-significant byte of a word is stored at lower memory addresses.
Little-endian(小端序). 1point 3acres 璁哄潧
数据的高位字节存放在地址的高端, 低位字节存放在地址低端. 鐣欏鐢宠璁哄潧-涓浜╀笁鍒嗗湴
bool IsBigEndian()
{
    union
    {
        unsigned short a ; 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
        char b ;
    } c;

    c.a =0x0102 ;
.鏈枃鍘熷垱鑷1point3acres璁哄潧
    if(c.b ==1)
        return true ;
    else. 鍥磋鎴戜滑@1point 3 acres
        return false ;
}
如何转换, 见上面应用, 二进制逆序

Bit-map
理解为本来可以放数组里面存着的, 但是要O(n)的空间, 现在放在bit里存着.
优点:省空间, 效率高,
缺点:整数(负数也可,另外用一个bitmap专门存负数绝对值),
应用: (心得,bit下标就是那个数) 鏉ユ簮涓浜.涓夊垎鍦拌鍧.
Bloom filter. 涓浜-涓夊垎-鍦帮紝鐙鍙戝竷
Bloom filter可以看做是对bit-map的扩展
.鏈枃鍘熷垱鑷1point3acres璁哄潧



重要性按照
1>7>5>6>4>2>3. more info on 1point3acres.com
列出来的是要cover到的topic,但是每个方面要多深,请参照我的第三面.
以上纯属个人经验谈...



最后的最后,
面经很重要!面经很重要!面经很重要!


.1point3acres缃

评分

7

查看全部评分

本帖被以下淘专辑推荐:

 楼主| renjiayuan1314 发表于 2016-2-16 04:51:57 | 显示全部楼层
beer 发表于 2016-2-16 04:47
太专业了,Graphics方向的。话说,LZ是new graduate还是有过GPU方面工作经验的人士呢?

都是. 有这方面工作经验的new grad
回复 支持 1 反对 0

使用道具 举报

 楼主| renjiayuan1314 发表于 2015-12-29 06:04:51 | 显示全部楼层
卧槽,过了那么久一个回复也没有,没没人加大米....
回复 支持 反对

使用道具 举报

头像被屏蔽
calalia 发表于 2015-12-29 06:21:59 | 显示全部楼层
提示: 作者被禁止或删除 内容自动屏蔽
回复 支持 反对

使用道具 举报

wangxy 发表于 2015-12-29 07:50:51 | 显示全部楼层
過來支持一下,畢竟nvdia我的大dream
回复 支持 反对

使用道具 举报

 楼主| renjiayuan1314 发表于 2016-2-11 13:17:38 | 显示全部楼层
关于deferred rendering这里写的太好了, learnopengl这套教程真是深入浅出, 覆盖了graphics里面几乎所有的面试题. 太赞了, 最近在准备别的面试, 所以又过了一遍. 顺便回来看看nv的这三次面试, 感觉应该会风格比较接近. 哈哈
http://learnopengl-cn.readthedocs.org/zh/latest/05%20Advanced%20Lighting/08%20Deferred%20Shading/

问了利用WV matrix可以做平移,旋转,scale,和skew四种,问其中哪一种是不能用3X3的矩阵做的,没答上来, 猜了一个skew.猜错了,答案应该是 translation, 教程里也有,其次坐标的两个作用是1, translation, 2 perspective division.

希望我明后天点面顺利, blessing.
回复 支持 反对

使用道具 举报

beer 发表于 2016-2-16 04:47:44 | 显示全部楼层
太专业了,Graphics方向的。话说,LZ是new graduate还是有过GPU方面工作经验的人士呢?
回复 支持 反对

使用道具 举报

笑眯眯的白云 发表于 2016-11-9 02:45:42 | 显示全部楼层
感谢楼主! 看我私信!
回复 支持 反对

使用道具 举报

本版积分规则

请点这里访问我们的新网站:一亩三分地Instant.

Instant搜索更强大,不扣积分,内容组织的更好更整洁!目前仍在beta版本,努力完善中!反馈请点这里

关闭

一亩三分地推荐上一条 /5 下一条

手机版|小黑屋|一亩三分地论坛声明 ( 沪ICP备11015994号 )

custom counter

GMT+8, 2017-1-23 06:43

Powered by Discuz! X3

© 2001-2013 Comsenz Inc. Design By HUXTeam

快速回复 返回顶部 返回列表