近期面试遇到的问题
C++
- C++多态,动态多态和静态多态
- C++虚函数,虚函数指针,纯虚函数,以及虚函数指针和虚函数分别属于哪个层次
- C++内存四区
- 构造函数和析构函数的调用顺序
- C++不能被继承的类
- 堆和栈的区别
- 对深拷贝的理解,什么是深浅拷贝
- new和malloc的区别,delete和free的区别
- C++的sharedptr内部如何维护引用计数
- 哪些函数是虚函数
- 进程与线程的区别
- C++多线程之间如何通信
- C++多线程如何同步.常用哪些锁
- C++并发的std::async,std::promise,std::future分别是什么,有什么用
- C++std::bind是什么
- C++锁管理器
- Boost的asio如何使用,如何监听一个连接
- C++移动语义,什么是左值右值,什么是完美转发,引用折叠,万能引用
- 把一个左值引用的变量传递给一个模板函数,该函数形参为万能引用,那么在该函数内部,这个参数为左值还是右值
- 栈实现队列
- 常见的STL容器(关联,非关联),map有哪几种,是基于什么实现的,复杂度如何
- vector是堆上还是栈上,如何实现的动态扩容,size和capacity的区别是什么
- 什么是ECS,为什么用ECS
- 缓存行对齐是什么,为什么要对齐,C++中怎么做,没有对齐会怎样
- 观察者模式是什么,还用过什么设计模式
- 如果可用物理内存剩余量不足,只剩10m,而代码中去new一个20M的内存,能否new成功
OpenGL
OpenGL入门 OpenGL光照
- 什么是立即渲染模式/固定管线渲染和核心模式,区别是什么
- 什么是状态机
- OpenGL中的对象是什么
- GLFW,GLAD,OPENGL分别起什么作用
- shader中如何丢弃片段
- 如何实现的批处理,是动态的还是静态的,区别是什么
- 描述一下OpenGL的渲染管线的各阶段
- 什么是MipMap,有什么用,在放大时候用还是缩小时候用
- 类似于sampler2D,这是一个什么类型(采样器句柄)
- 什么是前向渲染和延迟渲染(GBO,GeoPass/Pass)
- shader是什么,会不会写shader,shader的关键字有哪些
- 什么是双缓冲
- 什么抗锯齿,有哪些抗锯齿方法(MSAA,SSAA)
- 混合在管线的哪个阶段,半透明物体的渲染顺序是怎样的
- 什么是RenderGraph
- OpenGL多线程如何使用,为什么要多线程,不同线程之间的数据是否能同步,如何同步
- 一个4x4矩阵中,TRS分别在哪里(天空盒贴图,通过->3x3然后再回到4x4可以移除view的位移,使得天空盒始终以Camera为中心,不会有位置变化)
- 什么是Quat,万向节死锁
- 向量的点乘和叉乘
- 坐标系统:局部空间->世界空间->观察空间->裁剪空间->屏幕空间(NDC->Screen)
- 什么是深度缓冲,缓冲值是否是线性的,深度缓冲是在近处出精度大还是远处精度大,如何防止深度冲突
- 什么是冯氏光照,和布林冯氏光照的区别
- 模板测试在什么时候进行,有什么作用,创建一个物体轮廓的流程是怎样的
- 面剔除是怎么做到的,有哪些应用(阴影走样,性能提升)
- 讲一下帧缓冲,怎么创建一个帧缓冲,需要哪些条件,有什么用(离屏渲染,后期处理)
- 纹理和RBO的区别
- 立方体贴图中,创建一个天空盒,天空盒是否应该随着相机运动,怎么做
- 顶点的交错和分批是什么
- 有没有写过UBO,什么是绑定点
- OpenGL有哪些内建变量
- 有没有写过几何着色器,接受什么,输出什么,有哪些功能,常见的应用场景
- OpenGL的实例化是什么,为什么要用实例化数组
- 什么是MRTs(多重渲染目标)
- 什么是多重采样
- 如何实现阴影效果,说一下思路
- 法线贴图,切线空间
- HDR是什么
QT
- QT会不会,QT的MVC是什么
- 用过什么控件,为什么使用ListWidget而不是ListView,区别是什么
- QT的属性机制是什么
- QT的信号和槽解释一下,connect的第五个参数是什么作用
- QT中怎么使用OpenGL
项目(Hazel)
- 怎么实现的批处理,是动态批处理还是静态批处理
- 项目中你是如何管理VBO的
- 如果要将当前场景中的物体顶点位置都移动一个值,在你的项目中该怎么做
- 如果要让一个2D的物体以某种曲线从屏幕左侧移动到右侧,怎么做
- 圆形是如何绘制的
CMake
- CMake如何链接一个动态库
Linux
- 常用的linux命令
- gdb常用的命令
操作系统
- 什么是虚拟内存
- 内存管理机制(段页式)
- 大小端
- 进程和线程的区别,什么是协程,有没有用过C++20协程
- 进程间通信,线程间通信
并发编程
- 死锁产生的必要条件
- 什么是锁管理器
- C++条件变量,
- 基于C++并发的生产者消费者怎么写
- PV操作
- 信号量和互斥量
- C++的并发编程怎么用
- std::async,std::future,std::promise 分别是什么,怎么用
- 什么是原子变量,说说你的理解
- C++内存模型的理解
- 什么是无锁数据结构,怎么实现的
数据库
- 用过什么数据库(关系型:Mysql,orcale|非关系型:redis)
- 什么是事务,事务的隔离级别,事务的四大特点
- 键和索引
网络
- select poll epoll详细讲一下
- Boost的asio怎么监听一个连接
- TCP三握手四挥手,为什么三次握不两次,为什么四次挥不三次
- 什么是粘包和分包
数据结构与算法
- 栈实现队列
- 给你一个字符串A和一个字符串B,请你计算字符串B的所有旋转形式在字符串A中的出现总次数
- 已知某二叉树的先序序列和中序序列,编程计算并输出该二叉树的后序序列
Other
- 怎么看待当前AI的发展,你认为AI扮演的什么角色
- 你是怎么通过业务拆解并使用AI去快速开发的