恭喜啊佬~
点赞 评论

相关推荐

不愿透露姓名的神秘牛友
04-16 16:41
已编辑
德赛西威汽车电子有限公司 开发 14.6x15 硕士其他
点赞 评论 收藏
分享
昨天 20:20
已编辑
电子科技大学 算法工程师
发点面经希望能求求好运~4.7早面,两天后挂了,面了1h无手撕。面试官人还是不错的。另外面试官那边说在招的都是ue的项目,主要就问基础知识了(八股盛宴)自我介绍略。-----------1.说一下多态√(静态多态函数重载和模板,动态多态派生类和虚函数2.说一下虚函数怎么实现和调用√ (虚表,虚表指针)3.虚表什么时候初始化√(虚表编译时,虚表指针new的时候)4.多继承几个虚表指针,内存分布?√(子类继承了几个基类就有几个虚表,和对应的虚表指针)5.定义一个空的class,编译器默认会帮我生成哪些函数??(回答的是构造、析构、拷贝构造、)(---实际应该还有赋值运算符和两种取址运算符)6.默认生成的构造和析构是虚的吗?√(构造不是虚的,析构没有子类的话默认也不是虚的,但如果是有子类那父类必须得是虚的)7.刚刚提到默认生成的拷贝构造,那么它是一个深拷贝的实现还是浅拷贝实现??(没准备到,一开始说了浅,但是想到浅只是新指针指向,如果两个指向同一个资源,delete两次就坏了,于是说了深。这里面试官还引导我说一下深浅拷贝的概念。)(---实际默认实现是浅拷贝!!但确实也存在上面的那个隐患,所以需要人为的重载)8.说一下C++的内存分区,以及各个区的功能√9.静态成员变量,在那个分区?√ (静态存储区)10.函数内的静态变量或者CPP文件下的静态变量√(都是静态存储区,前者即使作用域消失也还会在内存中存在,只是没法访问;后者可以文件内访问,只是没法跨文件)11.那它们三的初始化的时机是一样的吗?√(C++中的类静态成员变量和cpp文件下的是main执行前,函数的局部静态变量是首次调用函数时。12.New和malloc的区别√13.什么场景使用new什么场景用malloc?(这里说了需要构造对象用new,需要分配内存给基本类型又不需要构造的时候用malloc14.New和Malloc分配的时候,释放时的方式?√(delete/free)15.Malloc申请内存的释放,可以只释放一部分吗?√(free我记得只能释放完整的内存吧)(---如果想动态调整倒是可以用realloc??这个不太清楚)16.指针引用区别√17.class里有三个int,用sizeof给这个class的引用和指针取值,他们的值是多少,一样的吗?√(不一样,引用就是class原大小12,指针就是4or8)18.指针变量所指向的地址不能改变,应该哪里加const?int * const19.内容不能改变呢?const int * (---其实还有int const * )20.四种类型转换,每个的作用√21.static_cast相比C语言用括号进行转换,好处是什么?X(只说了更安全会有类型检查……)(---实际还有,C语言只用于值类型,static_cast能用于指针、引用以及类)22.现在对两个无关的类型,用static_cast进行转换,会得到什么?√(说了编译时就会报错)23.两个无继承关系的类型,用dynamic_cast进行转换,会得到什么??(说了运行时报错)24.运行时报错的具体表现??(指针类型的转换失败,就会抛出nullptr,引用类型的异常,抛出bad_cast(---背倒是背了,但是答的时候没有注意大前提……无继承类型的话,是编译时报错……转换失败才是上面这两种……)25.智能指针说一下√26.shared_ptr作为函数的参数传递时,会增加引用计数吗?√(值传递会调用shared_ptr的拷贝构造,引用计数会加,但是引用传递就不会)27.如果是我用拷贝的方式来传递,他是在什么时候把加一给减掉了?√(函数执行完,局部变量生命周期结束时,拷贝的那个shared_ptr对象自己的析构调用时减128.Unique指针,可以写一个函数,它的返回值是unique指针吗?X(我说要分情况,如果一个函数里局部变量的unique指针,不能这样返回,如果全局的就可以)(---这里应该是完全没答到点上。函数返回值直接用unique_ptr是恰当的用法,临时对象直接通过移动语义传递独占所有权。)------数据结构篇-----29.说一下栈和队列,应用场景√(函数调用,回溯算法//BFS,FIFO策略)30.如果在C++里自己实现队列(不用STL),有那些方式?√(链表队列,数组用循环队列)31.用数组的方式来实现的缺点是什么??(会有空间的浪费,队列最大长度也有限)32.现在我把队列改造成一个带优先级的优先队列,我现在我向里边插入一个元素,它大概的流程是怎样的?X (这里当作成了OS里的那个多级队列,直接超级大爆,后面面试官甚至提醒了我堆排序也没唤起记忆)33.计算哈希值有哪些常用方法(说了MD5码,SHA256,简单的话就取模)34.遇到冲突怎么解决?√(链地址,开放地址法)35.链地址法怎样来解决哈希冲突。而且使用这种方法,最后查找的时候是怎样来查找?√(指针数组,取模后找对应槽位的链表进行遍历,顺便提了一下链地址如果长了,负载因子高了也需要动态扩容并调整哈希函数)36.用哈希表实现的容器?√37.红黑树相比于二叉平衡树的优点?√(只说了平衡的严格程度,插入和删除效率也更高,虽然同为O(logn)但红黑树所需要的旋转更少)-----根据项目问八股环节---------38.“从操作系统层面考虑序列化,中间大概发生那些流程,把内存的数据转换成硬盘中的数据?”X (文件IO忘了,只说了转换为流文件再写入磁盘)39.这个过程它会涉及到操作系统里边用户态和内核态的切换吗?X(一开始说了不能,爆了,下面面试官再问的时候才说能)40.用户态和内核态就是他设计出来的主要目的是什么?A:内核态可以访问调度各种资源数据,包括外围设备,用户态只能访问分配的资源。41.游戏的存档IO这一步,可以在主线程进行吗?他会不会导致游戏就是卡住了,比如你写的东西很多A:有可能42.那你会考虑怎么实现和解决?A:可以考虑协程43.我们先说协程,它本质上是开了一个新的线程,还是用其他的方式来实现?√(说了一下协程的原理)44.稍微发散一点,如果我现在很多数据量很大的需要写入到硬盘中,并不一定是游戏存档。你来写程序的话,会写一个多线程的方式的程序,还是写一个多进程的方式的程序更好一些。A:认为多线程好一些,会共享内存且线程切换开销小一些,但是要注意写入时的保护(感觉是一个开放性问题,还有什么可以说的吗?)45.那有哪些线程同步的方式?A:临界区,互斥锁,信号量46.假设我们用信号量的方式,简化一下,比如就两个线程,一个写的,一个读的,这个信号量大概是怎样来操作的?A:我说可以允许多个读线程并发,读与读之间可以不互斥,但写线程要和所有其他读写线程互斥(感觉答的不对口)47.UI相关有用到什么设计模式吗?A:我回答了UI管理器用了单例,然后一些其他对象触发UI逻辑更新时会用到观察者------没有手撕------反问问了面试官部门现在的工作内容?然后实习生进去一般是做什么?问了如果Unity转UE有什么建议还是说工作室会有什么指导?#牛客AI配图神器#
点赞 评论 收藏
分享
牛客网
牛客企业服务