岗位是C++客户端,一面好久没消息了,估计是凉了。。。总共半个小时,但是强度很高,问了30多个问题,问的基本是C++。1.知道堆排序吗,具体是怎么实现的讲了讲堆的性质、问道具体实现(如何建树、插入)没说清楚。建堆:首先堆可以是一个数组,但是有着完全二叉树的性质,当节点下标为index的时候,左子树下标为index * 2 + 1,右子树下标为index * 2 + 2,这样我们可以从第一个非叶子节点(下标为 len / 2 - 1)开始调整数组结构构成大顶堆,首先将这个节点与其叶子节点进行比较,如果叶子节点比它大,找出最大那个节点与它交换,之后对该位置进行同样的调整以防一次调整无法满足堆。然后从len / 2 – 1这个位置一直向后做同样的操作。排序:依次将堆顶与最后一个节点交换,最后一个节点不包括交换过的节点,然后重新对堆顶位置调整堆,直到所有节点都交换完成,排序完成。2.如何不改变链表结构逆序遍历链表通过使用stack,将每次遍历的结果保存到栈中,之后依次取栈顶输出,并出栈追问:如果不开辟新的内存空间呢?没想出来,后面面试官提示说递归依次递归listNode->next,之后进行输出返回(可我寻思着这个递归栈也要内存空间啊)3.链表过长会出现什么问题?查找效率降低可能会出现栈溢出、难以维护等问题4.讲一讲面向对象编程封装、继承、多态5.讲一讲多态编译时多态、运行时多态6.讲一讲虚函数机制虚函数表、虚函数指针7.类里面的默认函数有什么构造函数、析构函数还有拷贝构造函数和赋值运算符“=”8.如何阻止编译器自动创建默认构造函数自己写一个构造函数追问:还有没有别的方法?没答上来,C++11新特性关键字delete实现, MyClass() = delete;9.子类构造函数调用的顺序先父类后子类,析构反过来10.析构是不是虚函数没答上来面试官提示:继承后释放内存会不会出现什么问题?可能会继承相同的变量导致重复释放内存导致程序崩溃。可以是虚函数,如果父类不定义析构函数为虚函数,在使用父类指针创建子类对象时,在delete的时候调用的析构函数会出错,会调用父类的析构而不会调用子类的析构函数。11.构造函数里面可以调用虚函数吗没答上来可以但是不推荐,比如说父类和子类都有相同的虚函数,并且都在构造函数中调用了这个虚函数,在实例化子类的对象时会出现问题,实例化会先调用父类的构造函数,此时子类对象还未创建,调用虚函数为父类的虚函数而不是子类的虚函数,然后才构建子类调用子类的虚函数。12.类的所有实例如何共享数据使用静态成员变量13.静态成员变量会不会影响类的大小不会,它存在静态区14.New和malloc的区别New会同时申请内存和调用构造函数,而malloc只申请内存15.New的返回的类型是什么返回的是一个指针,会根据你接收这个指针的类型返回不同类型的指针。 16.内存分配失败会发生什么程序崩溃,触发内存分配失败的异常。17.讲讲内联函数内联函数会在调用的时候讲函数体的代码复制到该位置,如果多次调用可能会导致编译器多次编译相同的代码,如果代码过长会比较影响效率18.内联函数和宏的区别内联函数的类型是安全的,它会进行类型检查,而宏不会,并不安全。调试信息内联函数出错时会出现在出错的位置,而宏则会出现在定义的位置。内联函数有明确的作用域,而宏是全局的。编译器可以选择是否内联该方法,而没有权利控制宏。19.有了解右值吗有,但是用的比较少比如通过使用右值引用,它可以将一个大型的数据结构进行权限的交接,而且不用开辟新的内存,效率较高,适合用于新的对象的创建,且不需要再使用旧对象的情况。20.模板中的双取址符是右值引用吗不是,是一种万能引用,可以用来接受右值引用,也可以接受左值引用21.讲讲stl是一类标准模板库,可以使用已经写好的容器,比如vector、list、map等等22.Stl除了容器还有别的东西吗?有,还会有一些算法像是sort这种算法、迭代器、智能指针等等23.讲讲vector和listVector的内存连续,可以通过下标快速定位数据,尾插速度快List的内存不联系,定位较慢,但是插入操作很快24.Vector和list那个插入速度比较快List的插入比较快,vector如果是在数组尾部插入会更快一点25.Vector插入数据后现有的迭代器会不会有影响如果没有超过容量不会,如果超过了可能会重新分配内存导致迭代器失效追问:如果迭代器指向第三个数据,在第二个位置插入数据,迭代器会不会有影响有,但是没答上原因(应该是插入会导致vector重新分配内存,因为它内存连续,后面的数都需要往后挪,导致迭代器失效)26.判断链表有没有环用双指针,设置快慢指针,遍历判断有没有相交27.如何寻找环的入口通过快慢指针遍历,比如快指针一次走两步,慢指针一次走一步,在相交后拿一个头指针,开始与快指针同时遍历,当两个指针相交的时候就是环的入口。(这里答错了,应该是和慢指针相交为环的入口)28.计算机如何计算一段算式通过后波兰表达式,通过栈实现(细节没答清楚)首先将中缀表达式转化为逆波兰表达式,转化时准备一个字符串数组和一个栈,过程遍历输入的字符串,为如果为数字则直接加入结果数组,如果为计算符则比较栈顶计算符,如果优先级大于栈顶运算符则直接入栈,否则将栈顶之后所有大于等于该运算符优先级的运算符加入结果数组。在遍历完后将栈中所有运算符保存在结果数组中。然后进行计算,准备一个栈,遍历逆波兰表达式,如果为数字则入栈,如果为运算符计算栈中顶部两个数字,然后将两个数字出栈将结果入栈,依次类推,最后栈中留下一个计算结果。29.二维数组按行遍历快还是按列遍历快按行遍历,数组的内存是连续,所以按行更快30.讲一讲进程和线程31.线程共享哪些资源32.讲一讲TCP和UDP33.TCP是如何建立连接反问:这个岗位后续是用纯C++做开发还是用游戏引擎?答:用的ue你对这个行业发展的一些看法答:这个行业的技术力还是很强的,虽然最近有版号的问题,但是我认为这个行业的发展还是不错的游戏行业的新技术从哪里学习答:游戏开发者大会(GDC),上面的技术还是比较前沿的游戏项目的工作计划是如何安排答:一般比较看经验
点赞 8
评论 4
全部评论

相关推荐

04-18 15:58
已编辑
门头沟学院 设计
kaoyu:这一看就不是计算机的,怎么还有个排斥洗碗?
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
03-28 13:48
hory权:校招vip纯神人了,还说自己是什么师范大学的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务