基础题
设计模式(初级)
单例模式
- 什么是单例模式?为什么要使用它?
- 如何实现线程安全的单例模式?
- 解释懒汉式和饿汉式单例模式的区别。
- 什么是双检锁单例模式?
- 使用哪些编程语言可以实现单例模式?
工厂模式
- 什么是工厂模式?它解决了什么问题?
- 简述简单工厂模式和工厂方法模式的区别。
- 什么是抽象工厂模式?它与工厂方法模式有何不同?
- 举例说明工厂模式在实际项目中的应用。
- 什么是依赖倒置原则,与工厂模式有什么关联?
观察者模式
- 什么是观察者模式?它解决了什么问题?
- 举例说明观察者模式在实际项目中的应用。
- 观察者模式中的主题(Subject)和观察者(Observer)有什么职责?
- 观察者模式与发布-订阅模式的区别是什么?
- 如何在C++中实现观察者模式?
策略模式
- 什么是策略模式?它的优点是什么?
- 策略模式与状态模式之间有何不同?
- 举例说明策略模式在实际项目中的应用。
- 策略模式如何实现可插拔的行为?
- 如何在C++中实现策略模式?
装饰器模式
- 什么是装饰器模式?它的作用是什么?
- 装饰器模式与继承的关系是什么?
- 举例说明装饰器模式在实际项目中的应用。
- 装饰器模式与适配器模式的区别是什么?
- 如何在C++中实现装饰器模式?
设计模式(中级)
代理模式
- 什么是代理模式?它有哪些类型?
- 举例说明代理模式在实际项目中的应用。
- 代理模式与装饰器模式之间的异同点是什么?
- 什么是静态代理和动态代理?它们有何区别?
- 如何在C++中实现动态代理?
命令模式
- 什么是命令模式?它的用途是什么?
- 举例说明命令模式在实际项目中的应用。
- 命令模式与策略模式之间的不同之处是什么?
- 什么是撤销和重做操作,命令模式如何支持它们?
- 如何在C++中实现命令模式?
访问者模式
- 什么是访问者模式?它的目的是什么?
- 访问者模式与组合模式之间有何联系?
- 举例说明访问者模式在实际项目中的应用。
- 访问者模式与迭代器模式之间的区别是什么?
- 如何在C++中实现访问者模式?
备忘录模式
- 什么是备忘录模式?它的作用是什么?
- 举例说明备忘录模式在实际项目中的应用。
- 备忘录模式与状态模式之间的异同点是什么?
- 如何防止备忘录模式中的信息泄漏?
- 如何在C++中实现备忘录模式?
桥接模式
- 什么是桥接模式?它的用途是什么?
- 举例说明桥接模式在实际项目中的应用。
- 桥接模式与适配器模式之间的区别是什么?
- 什么是桥接和组合的关系?
- 如何在C++中实现桥接模式?
数据结构(初级)
数组
- 什么是数组?如何声明和初始化一个数组?
- 解释数组的时间复杂度和空间复杂度。
- 如何在数组中查找元素?如何插入和删除元素?
- 什么是动态数组?
- 数组与链表之间有何不同?
链表
- 什么是链表?它有哪些类型?
- 解释单链表和双链表的区别。
- 如何在链表中插入和删除节点?
- 什么是循环链表?
- 链表与数组之间的优劣势是什么?
栈与队列
- 什么是栈和队列?它们的特点是什么
- 解释栈和队列的应用场景。
- 什么是堆栈溢出?如何避免它?
- 解释优先队列的概念和用途。
- 如何使用队列实现栈?如何使用栈实现队列?
哈希表
- 什么是哈希表?它的原理是什么?
- 哪些编程语言提供了内置的哈希表数据结构?
- 如何解决哈希冲突?列举几种解决方法。
- 什么是哈希函数?如何设计一个好的哈希函数?
- 哈希表的时间复杂度是多少?
树与图
- 什么是树?它有哪些常见类型?
- 解释二叉树和二叉搜索树(BST)的特点。
- 如何遍历二叉树(前序、中序、后序)?
- 什么是平衡二叉树?为什么重要?
- 什么是图?它有哪些类型?
数据结构(中级)
图
- 什么是有向图和无向图?它们的应用场景是什么?
- 如何表示图的数据结构?邻接矩阵和邻接表有何不同?
- 解释深度优先搜索(DFS)和广度优先搜索(BFS)。
- 如何检测图中的环路?如何找到最短路径?
- 解释拓扑排序和最小生成树的概念。
堆与堆排序
- 什么是堆?它有哪些类型?
- 如何构建和维护一个最小堆和最大堆?
- 解释堆排序的原理和时间复杂度。
- 如何使用堆解决Top K 问题?
- 什么是二项堆和斐波那契堆?
高级搜索算法
- 解释A*搜索算法的原理和应用。
- 什么是Dijkstra算法和贝尔曼-福特算法?
- 解释启发式搜索和局部搜索算法。
- 什么是深度限制搜索和迭代深化搜索?
- 如何解决八数码问题和旅行推销员问题?
字典树与哈希表优化
- 什么是字典树(Trie)?它的应用场景是什么?
- 如何实现字典树的插入、删除和搜索操作?
- 什么是压缩字典树和后缀树?
- 如何使用哈希表进行缓存和优化查找操作?
- 什么是Bloom过滤器和LRU缓存算法?
平衡树与高级数据结构
- 什么是红黑树和AVL树?它们的特点是什么?
- 如何实现平衡树的插入、删除和查找操作?
- 什么是B树和B+树?它们在数据库中的应用是什么?
- 什么是Treap和Splay树?
- 解释并发数据结构和并行算法在多线程环境中的应用。
图形学(初级)
基础概念
- 什么是像素和分辨率?
- 解释RGB和RGBA颜色模型。
- 什么是向量和点?它们在图形学中的作用是什么?
- 解释位图和矢量图形。
- 什么是渲染管线(Rendering Pipeline)?
2D图形
- 什么是线段和多边形?
- 如何实现线段的绘制算法?
- 解释Bresenham算法和DDA算法。
- 什么是光栅化(Rasterization)?
- 什么是裁剪和填充?
基本变换
- 什么是平移、旋转和缩放变换?
- 如何在二维空间中执行这些变换?
- 什么是矩阵变换?如何表示二维变换?
- 解释矩阵堆叠和复合变换。
- 什么是坐标系变换?
3D图形
- 什么是三维坐标和三维向量?
- 如何执行三维平移、旋转和缩放变换?
- 解释三维投影和投影矩阵。
- 什么是视口变换和裁剪?
- 什么是三维模型和多边形?
光照与着色
- 解释环境光、点光源和平行光源。
- 什么是材质、漫反射和镜面反射?
- 如何执行Phong着色模型?
- 什么是阴影和透明度?
- 解释纹理映射和凹凸映射。
图形学(中级)
三维渲染
- 什么是三维渲染管线(Rendering Pipeline)?
- 解释顶点着色器和片元着色器。
- 什么是屏幕空间和剪裁空间?
- 如何执行透视投影和正交投影?
- 什么是多边形光栅化和深度测试?
渲染技术
- 什么是阴影映射和立方体贴图?
- 解释环境贴图和漫反射贴图。
- 什么是法线贴图和位移贴图?
- 如何执行抗锯齿(Anti-Aliasing)?
- 解释后期处理和图像效果。
3D建模与动画
- 什么是多边形建模和体素建模?
- 如何创建和编辑三维模型?
- 解释骨骼动画和关键帧动画。
- 什么是动画插值和蒙皮(Skinning)?
- 什么是物理模拟和流体模拟?
GPU编程
- 什么是GPU和图形API?
- 如何使用OpenGL或DirectX进行图形编程?
- 解释着色器语言(Shader Language)。
- 什么是GPU并行计算和通用GPU编程?
- 举例说明GPU加速计算的应用场景。
图形学应用
- 什么是计算机视觉和虚拟现实?
- 解释游戏引擎和渲染引擎。
- 举例说明图形学在医学图像处理中的应用。
- 图形学如何应用于电影特效制作?
- 什么是光线追踪和实时射线追踪?