网易雷火

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();     
}
121

看看deepseek怎么说:

  1. 构造阶段:创建B对象时,首先调用基类A的构造函数。在A的构造函数中,调用foo()。此时,由于派生类B尚未完成构造,虚函数动态绑定未生效,因此调用A::foo(),输出1
  2. 调用b.bar()bar()A的非虚函数,内部调用foo()。此时根据对象的实际类型B进行虚函数动态绑定,调用B::foo(),输出2
  3. 析构阶段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?