腾讯游戏客户端开发面经(电话面试)

本人在3.12号接到腾讯电话面试,不幸在3.14收到拒信。如今对电话面试内容做业总结
1.首先他会问你一些跟简历上的与技术无关的东西,好比你的简历上写得自我评价(好比我写得热爱编程。。要我用经历说明我怎么个热爱编程法,有过什么实践,而后服不服从调配),而后谈一谈项目web

1.C++中 ,Union,Struct,Class的异同点
答:struct和class区别:在struct中,默认的访问级别是public,若是不特别指定级别,则结构体中的数据和函数均为公共接口,而在class默认的访问级别是private,其他之时:struct和class是等价 !面试

Union 使用算法

union 共用体名{

  数据类型 成员名;

  数据类型 成员名;

  ...

  } 变量名;

union 也能够包括构造函数和变量
在union中,全部的共用体成员共用一个空间,而且同一时间只能储存其中一个成员变量的值。
当一个共用体被说明时, 编译程序自动地产生一个变量, 其长度为联合中最大的变量长度。好比说,最大长度是double数据类型,分配的内存空间就是double型的长度。因为union的资料成员共用一个内存空间,因此必须存取正确的成员才能正确的读取变量值,可使用一个额外的变数或列举型态来记录最后一次使用空间的是哪一个成员。
并且,union的成员不能够是静态的编程

对于struct,与Union不一样,Struct中的成员能够同时存在,全部成员默认公有数组

在这三种结构中,只有Union不能够被继承,Struct和Class均可以被继承安全

2。深拷贝和浅拷贝的区别
不少时候在咱们都不知道拷贝构造函数的状况下,传递对象给函数参数或者函数返回对象都能很好的进行,这是由于编译器会给咱们自动产生一个拷贝构造函数,这就是“默认拷贝构造函数”,这个构造函数很简单,仅仅使用“老对象”的数据成员的值对“新对象”的数据成员一一进行赋值服务器

浅拷贝
浅拷贝就是复制原对象的引用,二者指向同一个内存地址,而深拷贝就是新的内存地址,复制原来对象的数据到这个新的内存地址中去,也就是说,深拷贝结束后,存在两个内存空间储存着同样的数据。svg

3.new和malloc有什么异同
1.new/delete是C++关键字,须要编译器支持。malloc/free是库函数,须要头文件支持。
2. 使用new操做符申请内存分配时无须指定内存块的大小,编译器会根据类型信息自行计算。而malloc则须要显式地指出所需内存的尺寸。
3. new操做符内存分配成功时,返回的是对象类型的指针,类型严格与对象匹配,无须进行类型转换,故new是符合类型安全性的操做符。而malloc内存分配成功则是返回void * ,须要经过强制类型转换将void*指针转换成咱们须要的类型。
4. new内存分配失败时,会抛出bac_alloc异常。malloc分配内存失败时返回NULL。
5. new会先调用operator new函数,申请足够的内存(一般底层使用malloc实现)。而后调用类型的构造函数,初始化成员变量,最后返回自定义类型指针。delete先调用析构函数,而后调用operator delete函数释放内存(一般底层使用free实现)。 malloc/free是库函数,只能动态的申请和释放内存,没法强制要求其作自定义类型对象构造和析构工做。
6. C++容许重载new/delete操做符,特别的,布局new的就不须要为对象分配内存,而是指定了一个地址做为内存起始区域,new在这段内存上为对象调用构造函数完成初始化工做,并返回此地址。而malloc不容许重载。
7. 内存区域 new操做符从自由存储区(free store)上为对象动态分配内存空间,而malloc函数从堆上动态分配内存。自由存储区是C++基于new操做符的一个抽象概念,凡是经过new操做符进行内存申请,该内存即为自由存储区。而堆是操做系统中的术语,是操做系统所维护的一块特殊内存,用于程序的内存动态分配,C语言使用malloc从堆上分配内存,使用free释放已分配的对应内存。自由存储区不等于堆,如上所述,布局new就能够不位于堆中。
8. 最大的不一样在于,new不只分配一段内存,并且会调用构造函数,可是malloc则不会
9. 二者的资源都须要手动释放函数

4 C++标准库中的algorithm中的sort()排序函数是怎么实现的,用的 什么排序算法*布局

时间复杂度:n*lg(n)

实现原理:sort并非简单的快速排序,它对普通的快速排序进行了优化,此外,它还结合了插入排序和推排序。系统会根据你的数据形式和数据量自动选择合适的排序方法,这并非说它每次排序只选择一种方法,它是在一次完整排序中不一样的状况选用不一样方法,好比给一个数据量较大的数组排序,开始采用快速排序,分段递归,分段以后每一段的数据量达到一个较小值后它就不继续往下递归,而是选择插入排序,若是递归的太深,他会选择推排序。(当时我就不会还在那里瞎扯,劝你们之后不知道就说不知道)

5.如何实现高内聚低耦合
相关的概念 https://blog.csdn.net/kingscoming/article/details/78836229这里说的很详细

回答的时候就要以你的项目为例子,说明在你的团队内部是怎么应用这些方法的,好比大家类之间的接口啊什么的。
因人而异,很少说

6,计算机图形学中,颜色的处理是在fragment shader 中仍是vertex shader中(很遗憾,我当时没有复习图形学)
片元着色器

7.算法题:
在不使用临时变量的状况下,交换两个int变量的值
答:a=a+b;
b=a-b;
a=a-b;

那么这种算法,在什么状况下会有问题呢
答:当两个整数a,b的值得和超过了int类型的最大值,即65535的时候,该算法失效
问:那有没有更好的方法呢。(我就死在这里)
在我实在没有思路的时候
面试官给出了答案
只要对这两个数执行三次异或就能够交换两个变量的值
具体实现
a = a ^ b; b = b ^ a; a = a ^ b;

前两个赋值语句:“a = a ^ b;”和“b = b ^ a;”至关于b = b ^ (a ^ b),而b ^ a ^ b等于a ^ b ^ b。b ^ b的结果为0,由于同一个数与相向相^,结果必为0。所以b的值等于a ^ 0,即a,其值为2。

再执行第三个赋值语句:“a = a ^ b”。因为a的值等于(a ^ b),b的值等于(b ^ a ^ b),所以,至关于a = a ^ b ^ b ^ a ^ b,即a的值等于a ^ a ^ b ^ b ^ b,等于b。

8.设计一个算法。判断一个多边形是凸多边形仍是凹多边形。
答:多边形点集 = {P1,P2,P3,P4…Pn}
多边形全部点知足 点(Pn-3),点(Pn)在线段(Pn-2,Pn-1)的同侧
多边形是凸多边形,不然为凹多边形。

最后面试官问是否愿意去服务器端开发,还有就是有没有想作策划的想法。
我都回答没有

整个面试过程大概45分钟,过程当中面试段态度很好,声音也很好听。 惋惜就是凉了。