首页 > 资料专栏 > HRM > 人力资源 > 面试甄选 > 招聘试题_腾讯实习生招聘笔试题_附答案PDF

招聘试题_腾讯实习生招聘笔试题_附答案PDF

资料大小:545KB(压缩后)
文档格式:PDF
资料语言:中文版/英文版/日文版
解压密码:m448
更新时间:2022/2/5(发布于河北)

类型:积分资料
积分:10分 (VIP无积分限制)
推荐:升级会员

   点此下载 ==>> 点击下载文档


文本描述
1 32位机上根据下面的代码,问哪些说法是正确的? signedchara=0xe0; unsignedintb=a; unsignedcharc=a; A.a>0&&c>0为真B.a==c为真C.b的十六进制表示是:0xffffffe0D.上面都不对 分析:坑爹丫,有木有!10个人9个这个恐怕都不敢确定!(敢肯定的要么是高手,要么就是错 的!)Bme认为是错的,一个uchar和一个schar比较,真的就是一个字节在比较吗?Cme认为是 对的,将一个schar赋值给一个uint,要不要符号扩展呢?是绝对会还是可能会呢?细节到底是神 马?O__O"…A貌似比较确定,肯定是错的,肯定? 揭露真相:A确实是错的,B也是错的,C是对的,所以D也是错的。理由?A错是因为,a是负 数,c是正数,即使跟0比较要转换到int(后面暂不区分转换和类型提升,总之就是类型变了),也 是一负一正,所以A错。B呢?是说一正一负不会相等,难道是因为这吗?难道不是吗?首先说a 和c的二进制表示一模一样,都是0xe0,那么比较就不相等?!是的,比较的时候全部转换为int, 所以呢,a还是作为一个负数存在,c作为一个正数存在,于是就不相等了,所以B错。C肿么就 对了?a是一个schar,赋值给uint的b,前若干个字节不是补0吗?首先schar转换为int,然后 int转换成uint,所以最初是符号扩展,然后一个int赋值给了uint,Ccorrect!me曾经要写一篇 关于c的类型以及指针的blog,不过最后没有完成,不过还是可以参考一下的。 下面哪些选项能编译通过? inti; chara[10; stringf(); stringg(string&str); A.if(!!i){f();}B.g(f());C.a=a+1;D.g("abc"); 分析:再次坑爹有木有!(其实me比较确信这道题,是坑别人的爹,O__O"…)A绝对是正确的,C 绝对是错的,D基本肯定是错的,那B呢?要么error,要嚒warning!如果是warning但是没有 error,这算神马情况呢?B确实不应该选,至少语义上不该选!f()返回一个临时量,然后传给g 2 函数,而g的参数是非const引用,是不能引用临时量的!为嘛,如果g中修改了传进来的string, 那么会是怎么一回事呢?修改了一个临时量的值?那这意义何在呢?但是如果将g的原型修改为 stringg(conststring&);就是可以的,为么可以?访问(只读)临时量就是正确的?那必须的,比如u 可能想知道a+b的结果是多少,然后输出!a+b的结果就是一个临时量。如果说修改a+b的结果, 这是神马个逻辑?! 真相:C错是以为a是一个地址常量,不可能再被赋值。D为嘛错呢?"abc"的类型可是const char*呢,是个常量指针呢!(可以用来初始化string。) inta[10];问下面哪些不可以表示a[1]的地址? A.a+sizeof(int)B.&a[0]+1C.(int*)&a+1D.(int*)((char*)&a+sizeof(int)) 分析:奇葩丫!(其实并不奇葩!)腾讯的题目有时候出的的确有水平丫,虽然出的太有水平了分 就考不高了。me想哭丫,想来想去还是在A和B中选错了,%>_<%,当时还特意提醒自己来着的, O__O"…c++中的sort如何用来排序a数组呢?sort(a,a+N);或是sort(a,a+sizeof(a)/sizeof(a[0]));当 时懵了,实际上a+1,就是a[1]的地址呢!a的类型是int[10],a+1和一个int*类型的+1效果一 样,都表示偏移1个元素,所以A不能表示。(选错误的!)C能表示是因为取了首地址作为一个 int*然后+1,就是偏移一个元素,所以不选。B肿么说呢,me一直一位&a[0]是一个普普通通的 地址,+1就是+1个字节,实际上是+1个元素!D也能表示?将a的首地址转换为一个char*指 针,这个时候+1是偏移一个char,也就是一个字节,实际上应该偏移sizeof(int)个字节才能到达 a[1],所以D可以表示(不选)。不多说了。(如果是二维数组是不是会更懵呢,O__O"…) 问下面的数据都存放在哪些存储区? intmain() { char*p="hello,world"; return0; } A....B....C.栈和常量区D.栈和堆 分析:"hello,world"是常量,赶脚应该就是C吧,应该大家感觉都一样。这里不涉及什么堆的事。 3 假设在一个32位littleendian的机器上运行下面的程序,结果是多少? #include<stdio.h> intmain() { longlonga=1,b=2,c=3; printf("%d%d%d\n",a,b,c); return0; } A....B....C....D.... 分析:貌似问题没有想的那么简单。如果说运行结果,很简单,有人是102(VC6.0和VC2008); 有人是123。涉及到little/bigendian和参数入栈的问题,me表示现在有点无能为力,O__O"… 在32和64上面,longlong都是8字节,printf("%d%d%d\n",a,b,c);会依次从a的地址开始输出3 个整型数据(4B)一共是12B,调用printf时,函数参数的压栈顺序是c,b,a且地址是连续存放的, 小端情况下从a开始的栈去内存内容如下: 0x0100000000000000 0x0200000000000000 0x0300000000000000 所以连续输出12个字节的结果就是:102 4 【分析】: 传入参数,由右往左,栈空间内存从高往低,littleendian,栈空间如下: 内存高位-> 0000000000000011 00000000[00000010](c) [00000000](b)[00000001](a) <-内存低位 因此printf会按照4bytes取参数. 【答案】 输出:1,0,2 下面哪些函数调用必须进入内核才能完成? A.fopenB.exitC.memcpyD.strlen 分析:有些无能为力。A是要打开文件的,貌似设计很多内核操作丫;exit是退出进程,结束进程, 应该也要深入内核。memcpy,me一直犹豫用户区的数据拷贝要不要通过内核。strlenme感觉关 系不大。 内存管理中的LRU方法是用来管理神马的? A.虚拟内存的分配B.虚拟内存的释放C.物理内存的分配D.物理内存的释放 分析:貌似是用来关系物理块的,后面的填空题正好有说,O__O"… 关于DMA的说法,哪些是错误的? A.DMA,DirectMemoryAcess直接存储器访问,使得不同的速度的硬件设备可以直接通信,不通 过CPU干预; B.DMA访问的时候需要从CPU那里夺得总线控制权,然后... C.DMA速度快; D.DMA不需要中断控制,CPU管理不要它; 死锁发生的必要条件? A.互斥条件B.请求和保持C.不可剥夺D.循环等待 分析:ABCD就是死锁的四个必要条件,操作系统书上貌似说的很明确。 有两个线程,最初n=0,一个线程执行n++;n++;另一个执行n+=2;问,最后可能的n值?