腾讯实习生招聘笔试题目以及答案
· 32 位机上根据下面的代码,问哪些说法是正确的?
1. signed char a = 0xe0;
2. unsigned int b = a;
3. unsigned char c = a;
A. a>0 && c>0 为真 B. a == c 为真 C. b 的十六进制表示是:0xffffffe0 D. 上面都不对
· 下面哪些选项能编译通过?
1. int i;
2. char a[10;
3. string f();
4. string g(string &str);
A. if(!!i){f();} B. g(f()); C. a=a+1; D. g("abc");
· int a[10]; 问下面哪些不可以表示 a[1] 的地址?
A. a+sizeof(int) B. &a[0]+1 C. (int*)&a+1 D. (int*)((char*)&a+sizeof(int))
·
· 问下面的数据都存放在哪些存储区?
1. int main()
2. {
3. char *p = "hello,world";
4. return 0;
5. }
A. ... B. ... C. 栈和常量区 D. 栈和堆
分析:"hello,world" 是常量,赶脚应该就是 C 吧,应该大家感觉都一样。这里不涉及什么堆的事。
· 假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
1. #include
2. int main()
3. {
4. long long a = 1, b = 2, c = 3;
5. printf("%d %d %d\n", a, b, c);
6. return 0;
7. }
A. ... B. ... C. ... D. ...
分析:貌似问题没有想的那么简单。如果说运行结果,很简单,有人是 1 0 2;有人是 1 2 3。涉及到 little/big endian 和参数入栈的问题。
· 下面哪些函数调用必须进入内核才能完成?
A. fopen B. exit C. memcpy D. strlen
·
分析:有些无能为力。A 是要打开文件的,貌似涉及很多内核操作;exit 是退出进程,结束进程,应该也要深入内核。memcpy ,me 一直犹豫用户区的数据拷贝要不要通过内核。strlen me 感觉关系不大。
·
· 内存管理中的 LRU 方法是用来管理神马的?
A. 虚拟内存的分配 B. 虚拟内存的释放 C. 物理内存的分配 D. 物理内存的释放
·
分析:貌似是用来管理物理块的,后面的填空题正好有说,O__O"…
·
· 关于DMA 的说法,哪些是错误的?
A. DMA,Direct Memory Acess 直接存储器访问,使得不同速度的硬件设备可以直接通信,不通过 CPU 干预;
B. DMA 访问的时候需要从 CPU 那里夺得总线控制权,然后...
C. DMA 速度快;
D. DMA 不需要中断控制,...
·
· 死锁发生的必要条件?
A. 互斥条件 B. 请求和保持 C. 不可剥夺 D. 循环等待
·
分析:ABCD 就是死锁的四个必要条件,操作系统书上貌似说的很明确。
·
· 有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?
A. 1 B. 2 C. 3 D. 4
·
分 析:D 顺序执行以下,就可以。B 的话,让后面一个执行到+2,但不要写结果,然后前一个执行完,然后写结果,为 2。C 3 的话,也好分析。A 不可能!肿么可能呢?肿么可能结果只为 1 呢?两个线程都会 +2,+1 何从谈起?先 +1,然后让后面的加法错了,然后结果写进去?前一个 ++n 都没执行的话,后一个又肿么会执行呢?总之不可能是 1 !不可能!O__O"…(坚决不相信它可以。)
·
· 下面哪些说法正确?
A. 数组和链表都可以随机访问
B. 数组的插入和删除可以 O(1)
C. 哈希表么法范围检查
D. ...
·
分 析:总之 ABD 给人的感觉是显而易见的错丫,有木有,所以排除法还是能用的!至于 hash 结构,确实也不可以范围检查,因为 key 映射为 value,根据的`是 hash 函数,而这个函数一般不满足原来的单调性,实际上就不应该满足!因为 hash 函数的设计是要 value 的映射尽可能滴随机、均匀!
·
· 基于比较的排序的时间复杂度下限是多少?
A. O(n) B. O(n^2) C. O(nlogn) D. ...
·
分析:貌似是数据结构上面的一个结论,基于比较的排序的时间复杂度不能比 O(nlogn) 低,而快速排序平均复杂度就是 O(nlogn),而且常量系数更低一些。
·
· 下面图的拓扑排序可能是?
A...
·
分析:对于知道拓扑排序的,应该很容易作答(me 有时候在怀疑自己理解的是否正确?!)。
·
· 求 n 个数中的最大值和最小值,最少的比较次数是?
A. 4n/3 B. 2n-2 C. n-1 D. 3n/2
·
分 析:虽然 me 不知道很高深的算法,但是 me 想丫,如果是 2 1 3 4 5 6 这样的序列,u 认为最少是多少次呢?me 感觉是 n-1 。但是,题目也许是另外一个意思,也就是对于普通的序列,求最大值和最小值,能将比较次数降到多少?(me 貌似见到过一些方法,但是忘了,O__O"…)
·
· 一棵二叉树的先序遍历是 f b a c d e g h,中序遍历是 a b d c e f g h,问后序遍历是神马?
A. ... B. ... C. ... D. ...
·
分析:构建二叉树,然后看看后序遍历是神马?a d e c b h g f,O__O"…,突然感觉一不小心 g f 和 f g 就写反了,me 应该没有吧?!
·
· 网卡、交换机、路由器和 UDP 分别工作网络的哪些层?
A. ...
B. ...
C. ...
D. ....
·
分析:只根据 UDP 在传输层,me 就选出答案了:物理层、数据链路层、网络层和传输层。
·
· 子网掩码 25..255.255.224 可以将网络 x.x.x.x 分成多少个子网?
A. ... B. ... C. 8 D. 32
·
分 析:224 = 128+64+32 = 1110 0000 B,me 一看,后面 5 个 0 ,就是 2^5 = 32 吧?shit !子网数?不是主机数丫,有没有,O__O"…,主机数貌似还得 -2 丫,有没有,当时 me 还奇怪来着,O__O"… x.x.x.x 貌似是个 C 类地址?这样的话,应该是 2 ^ 3 = 8 !
·
· TCP协议栈的定时器有哪些?
A. ... B. ... C. ... D. ...
·
分析:不会的路过。
·
· 高内聚和低耦合,下面哪个耦合度最高?
A. 通过函数参数传递...
B. 一个函数修改另外一个函数中的数据;
C. 通过全局变量...
D. 通过指示器...
·
分析:哭丫,me 错了。这是软件工程上的玩意,me 一直认为 C 比 B 耦合度高呢,O__O"…。耦合度由低到高:A --> D --> C -->B
·
· 关于访问 http://ilovers-drupal.stor.sinaapp.com/public/field/image/000631.jpg ,下面哪些是后台绝对不会执行的?
A. 本地查查 DNS,是否有 sinaapp.com 的 ip;
B. 通过 cn. 查找 ip;
C. 通过 com. 查找 ip;
D. 浏览器发送 http get 请求;
D. 服务器回送 xxx.jpg;
·
分析:蒙也是蒙 B,O__O"…
·
· 在一个 big endian 的 32 位的计算机上,b 的结果是?(该处 1 个空)
1. unsigned int a = 0x1234;
2. char b = *((char*)&a);
分析:想不到又一个 big/little endian 的问题。这个结果,me 还比较确定写,就是 0。uint 是 4 个字节,0x1234 的完整表示是 0x 00 00 12 34,因为是 big endian,所以,所以 &(取地址) 的话,如果当字节看的话,取到了最左边 00 字节的地址,一定要转换成 char 看的话,值就是 0 。
· 一个有 800 个结点的完全二叉树,问有多少个叶子结点?(该处 1 个空)
分析:虽然 me 忘记是神马公式计算了,只感觉和 n/2 有关系。然后随便画了几个试试,就可以找出来 (n+1)/2 的规律来,所以 答案是: 400。
·
· 下面 get 是求一个二维数组元素的函数,请补全。( 1 个空)
1. #include
2. #include
3. #define M 3
4. #define N 4
5.
6. int get(int *a, int i, int j)
7. {
8. int v;
9. if(a == NULL || i<0 || i>=M || j<0 || j>=N) exit(1); //
10.
11. v = *(a+i*N+j); // 这里有一个空
12. return v;
13. }
14. int main()
15. {
16. int a[M[N = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
17. int v;
18.
19. v = get(a, 2, 1);
20. printf("a[2][1] == %d\n", v );
21. return 0;
22. }
分析:差点写错了,还好迷途知返了,O__O"…
· 补全插入排序:(有 2 个空)
1. int insert_sort(int *p, int count)
2. {
3. int i, j, tmp;
4. if(p == NULL || count < 0) return 0; //
5. for(i=1; i
6. tmp = p[i];
7. j = i-1;
8. while(j>=0 && p[j]>tmp){ // 此处判断条件一个空
9. p[j+1]= p[j];
10. --j;
11. }
12. p[j+1] = tmp; // 此处一个空
13. }
14. return 1;
15. }
16. int main()
17. {
18. int i, a[10] ={3, 2, 1, 7, 8, 10, 4, 5, 6, 9};
19. insert_sort(a, 10);
20. for(i=0; i<10; i++)
21. printf("%d ", a[i]);
22. printf("\n");
23. return 0;
24. }
分析:me 感觉 me 的代码还是比较工整的,u 肿么看,...
· 使用 FIFO 管理页面请求,如果分配的物理块 M = 3 或是 4,请求顺序如下:4 3 2 1 4 3 5 4 5 3 1 2 5 1 5 1 5 5 4,问两种情况下页面失效的次数各是多少?( 2 个空)
分析:7 和 7,这是 me 的结果(貌似错了?O__O"…)。现在是确信,自己错了,答案是 10 和 11,me 没有加上来就没有命中的 3/4 次,虽然没有页面替换,但是确实属于页面失效的情况。每空 4 分,两个 8 分,me 还有神马好说的呢,O__O"…(大哭ing...)。
·
下面给出计算结果,如果没有命中,就打一个 x,然后写上页面的值,~~~~(>_<)~~~~
· M = 3 (从上往下,从左往右看):10 次x4 x1 x5 x4x3 x4 x1x2 x3 x2M = 4 (从上往下,从左往右看):11 次x4 x5 x1x3 x4 x5x2 x3 x4x1 x2
· 一个网络图,问 Q 路由器到某个网络要进行跳转的下一个 ip 是多少?(有 1 个空)
分析:me 一下子就犹豫了,貌似赶脚也不是正确答案,就不多说了。
·
· 软件可靠性评估的两个指标是神马?( 2 个空)
分析:不会的路过。
·
· 选做 1:qq 用户有 30 亿,每日的登陆、登出的记录条数有 100 亿之多,让设计程序统计每天登陆人数;设计程序剔除因为掉线而重复登陆的情况;设计程序求出在线人数最高的时刻。
· 选做 2:问 qq 的加好友功能可能存在的安全漏洞有哪些?
版权声明:此文自动收集于网络,若有来源错误或者侵犯您的合法权益,您可通过邮箱与我们取得联系,我们将及时进行处理。
本文地址:https://www.gunzhua.com/jiuye/bishi/52546.html