• 腾讯2013年实习生笔试题


    1、32 位机上根据下面的代码,问哪些说法是正确的?
        signed char a = 0xe0;
        unsigned int b = a;
        unsigned char c = a;
        A. a>0 && c>0 为真         B. a == c 为真         C. b 的十六进制表示是:0xffffffe0         D. 上面都不对
    解析:A错,B错,C对,D错
        扩展的原则是:
        1. 有符号的数据类型,在向高精度扩展时,总是带符号扩展
        2. 无符号的数据类型,在向高精度扩展时,总是无符号扩展
        A是错的,因为a是负数,c是正数,即使跟0比较要转换为int,也是一正一负;
        B是错的,a和c 的二进制表示是一样的,都是0xe0。但是比较的时候,都转化为int,所以,a还是作为一个负数存在,c(224)作为一个正数存在,于是就不相等了;
        C是正确的,看上面的扩展原则,a作为有符号数,向高精度扩展时,总是带符号扩展;
        《整形比较小于int的会扩宽的int再比较, 而有符号数扩宽填充符号位, 无符号数填充0, 导致扩宽后两个整形的二进制不再相等,》
     
    2、下面哪些选项能编译通过?
      int i;
      char a[10;
      string f();
      string g(string &str);
        A. if(!!i){f();}          B. g(f());          C. a=a+1;          D. g("abc");
    解析:A正确,B(待定),C错误,D错误
        A正确        B不确定
        C错误,是因为a是一个地址常量,不能被赋值;
        D错误,是因为”abc”的类型为const char *呢,是常量指针
     
    3、int a[10]; 问下面哪些不可以表示 a[1] 的地址?
        A. a+sizeof(int)         B. &a[0]+1         C. (int*)&a+1         D. (int*)((char*)&a+sizeof(int))
    解析:A错误  
        a+1就是a[1]的地址,a就是int *,指针+1表示偏移一个元素。
     
    4、问下面的数据都存放在哪些存储区?
        int main()
        {
            char *p = "hello,world";
            return 0;
        }
        A. ... B. ... C. 栈和常量区 D. 栈和堆
    解析:C
        因为*p分配在栈区,”hello, world”是常量,常量存储区,这是一块比较特殊的存储区,他们里面存放的是常量。不允许修改。
        补充:
        字符串常量, 按保存区域的不同分为以下几种:
        一种是保存在栈区 , char name5[20] = "fengkewei";  或 char name1[] = "fengkewei";
        一种保存在文字常量区, 即 char *name = "fengkewei";
        一种保存在全局区(静态区)
        最后一种保存在堆区,即用malloc, alloc, realloc  分配内存分配的区域,可有程序员自身分配和释放。
     
    5、假设在一个 32 位 little endian 的机器上运行下面的程序,结果是多少?
        
    解析:
        
        
        
     
     
    6、下面哪些函数调用必须进入内核才能完成?
        A. fopen      B. exit      C. memcpy      D. Strlen
    解析:A(不确定) B正确
     
    7、内存管理中的 LRU 方法是用来管理神马的?
        A. 虚拟内存的分配     B. 虚拟内存的释放     C. 物理内存的分配     D. 物理内存的释放
    解析:A
        内存管理的一种算法,对于在内存中但最近又不用的数据块(内存块)叫做LRU,Oracle会根据那些数据属于LRU而将其移出内存而腾出空间来加载另外的数据。
        什么是LRU算法? LRU是Least Recently Used的缩写,即最近最少使用页面置换算法,是为虚拟页式存储管理服务的。
      
    8、关于DMA 的说法,哪些是错误的?
        A. DMA,Direct Memory Acess 直接存储器访问,使得不同的速度的硬件设备可以直接通信,不通过 CPU 干预;
        B. DMA 访问的时候需要从 CPU 那里夺得总线控制权,然后...
        C. DMA 速度快;
        D. DMA 不需要中断控制,CPU 管理不要它;
    解析:D
     
    9、死锁发生的必要条件?
        A. 互斥条件         B. 请求和保持         C. 不可剥夺         D. 循环等待
    解析:ABCD
        所谓死锁是指多个进程因竞争资源而造成的一种僵局,若无外力作用这些进程都将永远不可能向前推进。
        死锁的原因主要是:
        (1) 因为系统资源不足。
        (2) 进程运行推进的顺序不合适。
        (3) 资源分配不当等。
        如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。
        产生死锁的四个必要条件:
        (1) 互斥条件:一个资源每次只能被一个进程使用。
        (2) 请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
        (3) 不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
        (4) 循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立。

    10、有两个线程,最初 n=0,一个线程执行 n++; n++; 另一个执行 n+=2; 问,最后可能的 n 值?
        A. 1          B. 2          C. 3          D. 4
    解析:BCD
      D 顺序执行以下,就可以。B 的话,让后面一个执行到+2,但不要写结果,然后前一个执行完,然后写结果,为 2。C 3 的话,也好分析。A 不可能!肿么可能呢?肿么可能结果只为 1 呢?两个线程都会 +2,+1 何从谈起?先 +1,然后让后面的加法错了,然后结果写进去?前一个 ++n 都没执行的话,后一个又肿么会执行呢?总之不可能是 1 !
     
    11、下面哪些说法正确?
        A. 数组和链表都可以随机访问
        B. 数组的插入和删除可以 O(1)
        C. 哈希表么法范围检查
        D. ...
    解析:C
     
    12、基于比较的排序的时间复杂度下限是多少?
        A. O(n)          B. O(n^2)          C. O(nlogn)          D. ...
    解析:C  
     
    13、下面图的拓扑排序可能是?
    解析:看下拓扑排序
     
    14、求 n 个数中的最大值和最小值,最少的比较次数是?
        A. 4n/3          B. 2n-2          C. n-1          D. 3n/2
    解析:D   这个学过
     
    15、一棵二叉树的先序遍历是 f b a c d e g h,中序遍历是 a b d c e f g h,问后序遍历是神马?

    16、网卡、交换机、路由器和 UDP 分别工作网络的哪些层?
    解析:
        网卡——物理层? 
    集线器——物理层
        中继器——物理层 交换机——链路层   
        
    路由器——网络层   UDP——传输层  
        网桥——链路层
     
    17、子网掩码 255..255.255.224 可以将网络 x.x.x.x 分成多少个子网?
    解析:
     
    18、TCP协议栈的定时器有哪些?
    解析:
        在内核中tcp协议栈有6种类型的定时器: 
        1 重传定时器。 2 delayed ack定时器       3 零窗口探测定时器 
        上面三种定时器都是作为tcp状态机的一部分来实现的。 
        4 keep-alive 定时器——主要是管理established状态的连接。 
        5 time_wait定时器——主要是用来客户端关闭时的time_wait状态用到。 
        6 syn-ack定时器(主要是用在listening socket) ——管理新的连接请求时所用到。 
     
    19、高内聚和低耦合,下面哪个耦合度最高?
        A. 通过函数参数传递...
        B. 一个函数修改另外一个函数中的数据;
        C. 通过全局变量...
        D. 通过指示器...
    解析:
      内聚就是一个模块内各个元素彼此结合的紧密程度,高内聚就是一个模块内各个元素彼此结合的紧密程度高。
      所谓高内聚是指一个软件模块是由相关性很强的代码组成,只负责一项任务,也就是常说的单一责任原则。
      耦合:一个软件结构内不同模块之间互连程度的度量(耦合性也叫块间联系。指软件系统结构中各模块间相互联系紧密程度的一种度量。模块之间联系越紧密,其耦合性就越强,模块的独立性则越差,模块间耦合的高低取决于模块间接口的复杂性,调用的方式以及传递的信息。) 
      对于低耦合,粗浅的理解是:
      一个完整的系统,模块与模块之间,尽可能的使其独立存在。
      也就是说,让每个模块,尽可能的独立完成某个特定的子功能。
      模块与模块之间的接口,尽量的少而简单。
      如果某两个模块间的关系比较复杂的话,最好首先考虑进一步的模块划分。

    20、关于访问,下面哪些是后台绝对不会执行的?
        A. 本地查查 DNS,是否有 sinaapp.com 的 ip;
        B. 通过 cn. 查找 ip;
        C. 通过 com. 查找 ip;
        D. 浏览器发送 http get 请求;
        D. 服务器回送 xxx.jpg;
    解析:
        这个题目不知道问的什么意思。
     
    22、在32位大端模式处理器上变量b= ?
      unsigned int a= 0x1234;
      unsigned char b=*(unsigned char *)&a;
    解析:
        

    23、一个有 800 个结点的完全二叉树,问有多少个叶子结点?
    解析:
        一个有 800 个结点的完全二叉树,问有多少个叶子结点?
    解析:假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,由二叉树的性质可知:n0=n2+1,则n= n0+n1+n2(其中n为完全二叉树的结点总数),由上述公式把n2消去得:n= 2n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1,由此得到n0=(n+1)/2或n0=n/2。
     
    24、下面 get 是求一个二维数组元素的函数,请补全。( 1 个空)
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. #define M 3
    4. #define N 4
    5. int get(int *a, int i, int j)
    6. {
    7.     int v;
    8.     if(a == NULL || i<0 || i>=M || j<0 || j>=N) exit(1); //
    9.     v = *(a+i*N+j); // 杩欓噷鏈変竴涓?┖
    10.     return v;
    11. }
    12. int main()
    13. {
    14.     int a[M[N = {{1,2,3,4},{5,6,7,8},{9,10,11,12}};
    15.     int v;
    16.     v = get(a, 2, 1);
    17.     printf("a[2][1] == %d ", v );
    18.     return 0;
    19. }
        补全插入排序
    1. #include <stdio.h>
    2. #include <stdlib.h>
    3. int insert_sort(int *p, int count)
    4. {
    5.     int i, j, tmp;
    6.     if(p == NULL || count < 0) return 0; //
    7.     for(i=1; i<count; i++){
    8.         tmp = p[i;
    9.         j = i-1;
    10.         while(j>=0 && p[j>tmp){ // 此处判断条件一个空
    11.             p[j+1 = p[j;
    12.             --j;
    13.         }
    14.         p[j+1 = tmp; // 此处一个空
    15.     }
    16.     return 1;
    17. }
    18. int main()
    19. {
    20.     int i, a[10 = {3, 2, 1, 7, 8, 10, 4, 5, 6, 9};
    21.     insert_sort(a, 10);
    22.     for(i=0; i<10; i++)
    23.         printf("%d ", a[i);
    24.     printf(" ");
    25.     return 0;
    26. }

    26、使用 FIFO 管理页面请求,如果分配的物理块 M = 3 或是 4,请求顺序如下:4 3 2 4 4 3 5 4 5 3 1 5 1 5 1 5 4,问两种情况下页面失效的次数各是多少?( 2 个空)
    解析:
     
    27、一个网络图,问 Q 路由器到某个网络要进行跳转的下一个 ip 是多少?(有 1 个空)
    28、软件可靠性评估的两个指标:可靠性和安全性?
  • 相关阅读:
    linux软硬链接
    yum配置文件位置
    What is Docker?
    easy_install下载地址及安装
    python setuptools安装
    django--模板
    django基础PROJECT APP View template
    flask+uswgi+nginx+python3.6的venv发布网站ubuntu14.04
    Mixnode 让操作网络资源和数据库一样简单,不一样的爬虫!
    React Native vs. Cordova.
  • 原文地址:https://www.cnblogs.com/iloveyouforever/p/3430071.html
Copyright © 2020-2023  润新知