技术面试闲聊
注:只负责陈列知识点,不负责详细解读
C++
- static关键字的使用场景和区别,局部static变量和全局static的区别。
- std中的vector和map的底层实现。
- map和unordered_map的底层实现区别,附带哈希冲突的解决方案(hash的3个特征),红黑树的特点(5个),访问速度
- A星寻路算法的大概描述。(可能会引申更加复杂的A星变种,但是本身完整阐述A星也要不少时间)
- 二叉树的先序遍历的非递归实现方法(二叉树遍历有几种)。
- 四种强制类型转换相关。(
static_cast
和dynamic_cast
是重点) progma once
和ifdefine
的使用的区别,以及他们的优缺点。- float的字节数,double的字节数,他们在不同的cpu系统(32位,64位)中有区别吗?
- float的内部结构是什么,float在计算机中为什么会有误差,以及它的精度是如何确认的
- 二叉树的广度遍历实现。
- 一组二维char数组和一组map单词,在二维char数组中任意一个节点开始以贪吃蛇形式连接char字母,找出能连起来在map中找到的单词数量。
- 虚继承的作用。
- 接口在C++中的实现方式。(没看懂吧 - -,就是纯虚函数的特征 = 0)
- std标准库里容器的迭代器失效的处理方式(避免的方法)
memcpy
和memmove
的区别- const放在函数末尾时的特征(类)。
- utf-8编码的特征(关于编码的知识,不单属于C++)
- 虚拟内存的特征,为什么要使用虚拟内存,虚拟内存主要是用来解决什么问题的,现在内存越来越大了,虚拟内存还有存在的必要吗
- 右值引用了解吗,右值引用为为什么能优化性能,说一说底层实现
- 内存池了解吗,说一说运行流程。(这个需要结合自己的项目了)
- 深拷贝和浅拷贝的区别。
- 设计模式了解吗,观察者模式的使用例子,主要解决什么问题,什么优势好处。
- 两组数组找一个重复的数字(如果有2个重复数字;如果这两个重复数字相同)
- C++多态的实现原理。
- C的变长参数和C++的模版变参优缺点。
- 一组数里面要找出前K个数(小顶堆,优先级队列实现)。
- 基类的虚函数默认参数在子类的输出(这个测试出来好像是输出的子类的参数)
- 文件编译成二进制可执行文件的过程以及中间发生的事(预编译->编译->汇编->链接)
- 动态链接和静态链接,动态链接库和静态链接库的区别。
- 引用和指针的区别。
- const
C#
- C#中值和引用的区别。
- C#的垃圾回收机制
- C#中的非托管资源,如何创建及相关知识
Lua
C和Lua是如何进行通讯的,包括接口堆栈的调用
- Lua中#用来计算数组,table的长度,有什么需要注意的
Unity(手游)
- 模型坐标的转换过程。(怎么把一个点移动到切线空间,空间转换的几个过程)
- 对象脚本的调用顺序。
update
和lateupdate
的区别。- UGUI的网格重建、动静分离。
- unity中的字体渲染相关。
- opengl采样,加速采样是什么东西。
- unity中涉及到的光照模型。
- UnityShader中的外发光是如何实现的。(实现原理)
- 描边的实现方案。(应该也是shader吧?)
- gpu instance ,animation instance相关(???)
- 一个三角形完整的绘制顺序。
- 手机的dc压力为什么大,明明cpu和gpu都已经很强劲了。(可能总线传输问题,建议多方面回答)
- 一个dc都做了什么,什么叫dc。(DrawCall,渲染命令)
- astc,png,jpg等图像格式的问题。
- ab包的加载和卸载问题。
- 热更怎么确认正确的包体,如何确认你的版本是最新的。
- 为什么gpu的shader的书写中要避免逻辑运算,if else会降低渲染效率?
- shader的variant作用
网络
- TCP/UDP的区别,三次握手和四次分手过程。(TCP保证传输的措施什么的)
数学
- 2D平面中的相交和碰撞问题
- 3D平面中的垂直,相交,点是否在一个平面问题
- 一个点是否与三角形发生碰撞