网易雷火
1.光照计算时,我们经常需要计算反射光线,如下图所示,假设入射光线为L,镜面法线为N,求反射光线R = ____。(提示:L,N都已经归一化,点积请用dot(A,B)表示) 2.这段程序的数据结果(byd我被污染了,不知道谁告诉我的不用虚函数)
#include <iostream>
struct A {
A() { foo(); }
virtual ~A() { foo(); }
virtual void foo() { std::cout << "1"; }
void bar() { foo(); }
};
struct B : public A {
virtual void foo() { std::cout << "2"; }
};
int main() {
B b;
b.bar();
}
看看deepseek怎么说:
- 构造阶段:创建
B
对象时,首先调用基类A
的构造函数。在A
的构造函数中,调用foo()
。此时,由于派生类B
尚未完成构造,虚函数动态绑定未生效,因此调用A::foo()
,输出1。- 调用
b.bar()
:bar()
是A
的非虚函数,内部调用foo()
。此时根据对象的实际类型B
进行虚函数动态绑定,调用B::foo()
,输出2。- 析构阶段:
main
函数结束时,对象b
被销毁。首先调用B
的析构函数(隐式生成,无输出),随后调用基类A
的析构函数。在A
的析构函数中调用foo()
,此时派生类部分已销毁,虚函数表恢复为基类版本,因此调用A::foo()
,输出1。
3.使用下列二维图形变换矩阵,将产生变换的结果为()
2 0 0 0 1 0 1 1 1
A 图形放大两倍
B 图形放大两倍,同时沿X、Y坐标轴方向各移动1个绘图单位
C 沿X坐标轴方向移动两个绘图单位
D 沿X坐标轴方向放大两倍,同时沿X、Y坐标轴方向各平移1个绘图单位
我看成仿射坐标了,实际上很快就能算出来。
4.以下关于线程锁的描述正确的有___
A、 单核处理应该选择自旋锁
B、 临界区代码复杂应该选用互斥锁
C、临界区竞争非常激烈时应该用自旋锁
D、自旋锁和互斥锁都不会改变线程的状态
这块没答出来,多线程掌握的一坨四。
5.概率.随机抛一枚硬币,每次出现正面的概率为p,反面的概率为q(p+q=1),求抛2n次后的正反出现次数相等的概率.
概率论忘光了。
5.重排链表 20min真写不完啊。。。不过思路都写出来了,面试官也看明白了,就是有点小误区还没纠正。
ECS是什么?相比面向对象有什么优点? MVC?MVVM?