2014.03.16 网易游戏TTT计划实习生笔试题 短命女 2022-08-26 00:53 115阅读 0赞 **注:这份试题是本人事后回忆的,题目可能会有出入,且给出的答案不一定正确,仅供参考,欢迎指正错误。** **前面这些题是试卷的第I部分,试卷上面说第一部分达不到基本线直接淘汰,最终排名主要看II卷** **I 卷 基础题** 1.求1111+2\*1111+....+1111\*1111对7求余的结果。 n(n+1)/2, 即556\*1111\*1111对7求余,每个数分别对7求余,余数相乘后对7求余最后算的结果是5. 2.,某点p(x,y,z),绕Y轴旋转的角度为 ![Center][],求三维旋转矩阵。 ![Center 1][] 3.如下图,A, B, C, D, E灯泡坏掉的概率分别为0.2, 0.3, 0.4, 0.5,0.6,求此电路不通的概率 ![Center 2][] AB路坏的概率:0.2\*0.7 + 0.8\*0.3 + 0.2\*0.3 = 0.44 CDE路坏的概率:0.4\*0.5 + 0.6 – 0.4\*0.5\*0.6 = 0.68 总的概率 0.44 \* 0.68 =0.2992 4.f(0)=0,f(1)=1,f(n)=(f(n-1)+f(n-2))mod5 求f(2013); 周期为20,f(2013)=f(13)=3 5.二分查找的时间复杂度O(logn),堆排序的空间复杂度O(1)。快排的时间复杂度O(nlogn)。 6.堆和栈的区别。(malloc/new的内存在堆分配,局部非静态变量在栈中分配内存) 7.下面代码的输出结果:(vs2008 测试是25 82,其实这种题比较坑爹) C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#0000ff">#define</span> mul(a) (a)*(a) <br> <span style="color:#8000ff">int</span> main( <span style="color:#8000ff">void</span>) <br> { <br> <span style="color:#8000ff">int</span> a = <span style="color:#ff0000">5</span>, b, c; <br> b = mul(a++); <br> c = mul(++a); <br> <span style="color:#0000ff">if</span>(!a && c++) <br> b++; <br> <span style="color:#0000ff">else</span> <br> c++; <br> printf( <span style="color:#800000">"%d %d"</span>, b, c); <br> } <br> </div> </td> </tr> </tbody> </table> 8.定义一个宏,若满足条件则终止程序并报告错误文件名和行数,并有以下调用: if(x>=0 && y>=0) assert(x+y); else assert(x-y); 如果按照以下格式写宏,会有什么问题: \#define assert(e) if(!e) assert\_error(\_\_FILE\_\_, \_\_LINE\_\_) //边际效应,会变成!x + y,而且原来的else会跟这里的if(!e)匹配 如果按照以下格式写,又会有什么问题: \#define assert(e) \{if(!e) assert\_error(\_\_FILE\_\_, \_\_LINE\_\_);\} //错误仍在且出现语法错误,编译错误,花括号外面多了个分号 怎样改才是对的?\#define assert(e); \{if(!(e)) assert\_error(\_\_FILE\_\_, \_\_LINE\_\_);\} 或者 \#define assert(e) ((e) || assert\_error(\_\_FILE\_\_, \_\_LINE\_\_);) 10.已知是小端保存,32位机器,求输出结果.答案应该是8 2 注:这跟栈生长方向没什么关系(linux是从高到低);一个对象有多个成员,内部肯定是从低地址到高地址排列下去,对一个对象 取地址取到的是起始地址(低地址); C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#0000ff">struct</span> data <br> { <br> <span style="color:#8000ff">int</span> a; <br> <span style="color:#3366ff">unsigned short</span> b; <br> } <br> <span style="color:#8000ff">int</span> main( <span style="color:#8000ff">void</span>) <br> { <br> data mData; <br> mData.b = 0x0102; <br> <span style="color:#8000ff">char</span> *p = ( <span style="color:#8000ff">char</span> *)&mData; <br> printf( <span style="color:#800000">"%d %d"</span>, <span style="color:#0000ff">sizeof</span>(mData), ( <span style="color:#8000ff">int</span>) (*(p + <span style="color:#ff0000">4</span>))); <br> } <br> </div> </td> </tr> </tbody> </table> 11.下面程序输出是什么? ~Base C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> 14 <br> 15 <br> 16 <br> 17 <br> 18 <br> 19 <br> 20 <br> 21 <br> 22 <br> 23 <br> 24 <br> 25 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#0000ff">#include</span> <iostream> <br> <span style="color:#0000ff">using</span> <span style="color:#0000ff">namespace</span> std; <br> <span style="color:#0000ff">class</span> Base <br> { <br> <span style="color:#0000ff">public</span>: <br> ~Base() <br> { <br> cout << <span style="color:#800000">"~Base"</span> << endl; <br> } <br> }; <br> <span style="color:#0000ff">class</span> Dri: <span style="color:#0000ff">public</span> Base <br> { <br> <span style="color:#0000ff">public</span>: <br> ~Dri() <br> { <br> cout << <span style="color:#800000">"~Dri"</span> << endl; <br> } <br> }; <br> <span style="color:#8000ff">int</span> main() <br> { <br> Base *b = <span style="color:#0000ff">new</span> Dri(); <br> <span style="color:#0000ff">delete</span> b; <br> <span style="color:#0000ff">return</span> <span style="color:#ff0000">0</span>; <br> } <br> </div> </td> </tr> </tbody> </table> 12.下面调用fork()总共生成多少个进程,打印几个'-' 4 6 (注:如果没有fflush,将输出8个'-') C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#0000ff">#include</span> <stdio.h> <br> <span style="color:#0000ff">#include</span> <unistd.h> <br> <span style="color:#8000ff">int</span> main() <br> { <br> <span style="color:#8000ff">int</span> i; <br> <span style="color:#0000ff">for</span>(i = <span style="color:#ff0000">0</span>; i < <span style="color:#ff0000">2</span>; ++i) <br> { <br> fork(); <br> printf( <span style="color:#800000">"-"</span>); <br> fflush(stdout); <br> } <br> <span style="color:#0000ff">return</span> <span style="color:#ff0000">0</span>; <br> } </div> </td> </tr> </tbody> </table> 13.此代码有什么用?./a.out >outfile 2>&1 将a.out程序运行的标准输出和标准错误输出重定向到outfile 12.一分钟的音乐,采用14400的采样率,双声道,每个点16bit,问音乐的大小。14400\*2\*16\*60/8=3456000B **II卷 程序应用与设计** 1.程序改错 C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> 14 <br> 15 <br> 16 <br> 17 <br> 18 <br> 19 <br> 20 <br> 21 <br> 22 <br> 23 <br> 24 <br> 25 <br> 26 <br> 27 <br> 28 <br> 29 <br> 30 <br> 31 <br> 32 <br> 33 <br> 34 <br> 35 <br> 36 <br> 37 <br> 38 <br> 39 <br> 40 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <br> <span style="color:#0000ff">class</span> obj <br> { <br> <span style="color:#0000ff">public</span>: <br> obj() <br> { <br> m = <span style="color:#ff0000">0</span>; <br> data = <span style="color:#0000ff">new</span> <span style="color:#8000ff">int</span>[ <span style="color:#ff0000">100</span>]; <br> } <br> obj( <span style="color:#0000ff">const</span> &t) <br> { <br> m = t.m; <br> data = <span style="color:#0000ff">new</span> <span style="color:#8000ff">int</span>[ <span style="color:#ff0000">100</span>]; <br> memcpy(( <span style="color:#8000ff">char</span> *)data, ( <span style="color:#8000ff">char</span> *)t.data, <span style="color:#0000ff">sizeof</span>( <span style="color:#8000ff">int</span>) * <span style="color:#ff0000">100</span>); <br> } <br> <span style="color:#8000ff">int</span> squ( <span style="color:#0000ff">volatile</span> <span style="color:#8000ff">int</span> *p) <span style="color:#008000">//表示对*p的赋值,将全部保留不做优化,volatile摆放的位置不同导致的不同含义与const类似<br> </span> { <br> <span style="color:#8000ff">int</span> tmp = *p; <br> <span style="color:#0000ff">return</span> tmp * tmp; <br> } <br> ~obj() <br> { <br> <span style="color:#0000ff">if</span>(data) <br> <span style="color:#0000ff">delete</span>[] data; <br> } <br> <span style="color:#8000ff">void</span> add() <br> { <br> m++; <br> } <br> <span style="color:#0000ff">private</span>: <br> <span style="color:#8000ff">int</span> m; <br> <span style="color:#8000ff">int</span> *data; <br> }; <br> <span style="color:#8000ff">int</span> main() <br> { <br> obj o1; <br> obj o2 = o1; <br> <span style="color:#0000ff">return</span> <span style="color:#ff0000">0</span>; <br> } <br> </div> </td> </tr> </tbody> </table> 2.两个题可以选一个。 a.写一个strcmp函数 C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#008000">//字符串比较<br> </span> <span style="color:#8000ff">int</span> strcmp( <span style="color:#0000ff">const</span> <span style="color:#8000ff">char</span> *s, <span style="color:#0000ff">const</span> <span style="color:#8000ff">char</span> *t) <br> { <br> assert(s != <span style="color:#0000ff">NULL</span> && t != <span style="color:#0000ff">NULL</span>); <br> <span style="color:#0000ff">while</span>(*s && *t && *s == *t) <br> { <br> ++ s; <br> ++ t; <br> } <br> <span style="color:#0000ff">return</span> (*s - *t); <br> } <br> </div> </td> </tr> </tbody> </table> b.约瑟夫环的问题(直接没看题目)。 3.纸牌游戏,随便抽五张牌,A代表1,2-10还是2-10,J,Q,K表示11,12,13, 大小王可以当任何一张。判断5张牌是不是顺子。http://zhedahht.blog.163.com/blog/static/25411174200951262930831 把数组排序,统计数组中0的个数,统计排序之后的数组相邻数字之间的空缺总数。如果空缺的总数小于或者等于0的个数,那么这个数组就是连续的;反之则不连续。最后,我们还需要注意的是,如果数组中的非0数字重复出现,则该数组不是连续的。换成扑克牌的描述方式,就是如果一副牌里含有对子,则不可能是顺子。基于这个思路,我们可以写出如下的代码: C++ Code <table style="width:100%; font-family:'Consolas','Courier New'; font-size:12px; vertical-align:text-top; line-height:15px"> <tbody> <tr> <td style="color:#008284; background-color:#e3e3e3; vertical-align:text-top"> <div style="margin:7px; text-align:right; white-space:nowrap"> 1 <br> 2 <br> 3 <br> 4 <br> 5 <br> 6 <br> 7 <br> 8 <br> 9 <br> 10 <br> 11 <br> 12 <br> 13 <br> 14 <br> 15 <br> 16 <br> 17 <br> 18 <br> 19 <br> 20 <br> 21 <br> 22 <br> 23 <br> 24 <br> 25 <br> 26 <br> 27 <br> 28 <br> 29 <br> 30 <br> 31 <br> 32 <br> 33 <br> 34 <br> 35 <br> 36 <br> 37 <br> 38 <br> 39 <br> 40 <br> </div> </td> <td style="background-color:#008284; padding:1px"> <div style="border:1px #008284 solid"></div> </td> <td style="background-color:rgb(239,239,239); width:100%; vertical-align:text-top"> <div style="margin:7px"> <span style="color:#008000">// Determine whether numbers in an array are continuous<br> // Parameters: numbers: an array, each number in the array is between<br> // 0 and maxNumber. 0 can be treeted as any number between<br> // 1 and maxNumber<br> // maxNumber: the maximum number in the array numbers<br> </span> <span style="color:#8000ff">bool</span> IsContinuous(std::vector< <span style="color:#8000ff">int</span>> numbers, <span style="color:#8000ff">int</span> maxNumber) <br> { <br> <span style="color:#0000ff">if</span>(numbers.size() == <span style="color:#ff0000">0</span> || maxNumber <= <span style="color:#ff0000">0</span>) <br> <span style="color:#0000ff">return</span> <span style="color:#0000ff">false</span>; <br> <br> <span style="color:#008000">// Sort the array numbers.<br> </span> std::sort(numbers.begin(), numbers.end()); <br> <br> <span style="color:#8000ff">int</span> numberOfZero = <span style="color:#ff0000">0</span>; <br> <span style="color:#8000ff">int</span> numberOfGap = <span style="color:#ff0000">0</span>; <br> <br> <span style="color:#008000">// how many 0s in the array?<br> </span> std::vector< <span style="color:#8000ff">int</span>>::iterator smallerNumber = numbers.begin(); <br> <span style="color:#0000ff">while</span>(smallerNumber != numbers.end() && *smallerNumber == <span style="color:#ff0000">0</span>) <br> { <br> numberOfZero++; <br> ++smallerNumber; <br> } <br> <br> <span style="color:#008000">// get the total gaps between all adjacent two numbers<br> </span> std::vector< <span style="color:#8000ff">int</span>>::iterator biggerNumber = smallerNumber + <span style="color:#ff0000">1</span>; <br> <span style="color:#0000ff">while</span>(biggerNumber < numbers.end()) <br> { <br> <span style="color:#008000">// if any non-zero number appears more than once in the array,<br> </span> <span style="color:#008000">// the array can't be continuous<br> </span> <span style="color:#0000ff">if</span>(*biggerNumber == *smallerNumber) <br> <span style="color:#0000ff">return</span> <span style="color:#0000ff">false</span>; <br> <br> numberOfGap += *biggerNumber - *smallerNumber - <span style="color:#ff0000">1</span>; <br> smallerNumber = biggerNumber; <br> ++biggerNumber; <br> } <br> <br> <span style="color:#0000ff">return</span> (numberOfGap > numberOfZero) ? <span style="color:#0000ff">false</span> : <span style="color:#0000ff">true</span>; <br> } </div> </td> </tr> </tbody> </table> 或者排除法: 1)确认5张牌中除了0,其余数字没有重复的(可以用表统计的方法且记录0的个数); 2)满足这样的逻辑:(max,min分别代表5张牌中的除0以外的最大值最小值) 如果没有0,则max-min=4,则为顺子,否则不是 如果有一个0,则max-min=4或者3,则为顺子,否则不是 如果有两个0,则max-min=4或者3或者2,则为顺子,否则不是 4.写一个内存管理存储器,已知学生的学籍id,姓名,性别,省份,个性签名等信息。 要求:用C++;Linux环境下;至少建立两个索引加快查询;线程安全;高效的增删改查。 5. 一段关于redis KEYS 命令英文简介,说明使用KEYS这个命令会导致什么问题和有什么解决方法。 **后记:本人面到了技术2面+hr面,最终挂了。也许是因为不是科班出身,或者竞争对手学校牌子较好,还有不能上课期间全职去实习的原因吧。** [Center]: /images/20220824/0402a96a8aea4890a4af9309f973da51.png [Center 1]: /images/20220824/aadc7a2d9cf44d9ab34d6c4a7771903e.png [Center 2]: /images/20220824/b01a53a7d35c4ebc91877f9846f61e92.png
还没有评论,来说两句吧...