笔试题整理

本文整理了一系列编程笔试题目,涵盖了C++、操作系统、数据结构、数据库、网络、线程同步等多个方面,包括选择题、填空题和理解题,涉及知识点丰富,适合程序员面试复习。

题1:

如果x=2014,下面函数的返回值是()

int fun(unsigned int x)
{
     int n=0;
     while((x+1))
     {
         n++;
         x=x|(x+1);
     }
     return n;
}

A.20  B.21  C.23 D.25

答案: C


题2:

以下代码的输出是()

int a[5]={1,2,3,4,5};
int *ptr=(int*)(&a+1);
printf("%d,%d",*(a+1),*(ptr-1));

  • 1,2
  • 2,5
  • 2,1
  • 1,5
    答案: B

    解析: 

    题关键就在于第二个点,*(ptr-1)输出为多少?

    解释如下,&a+1不是首地址+1,系统会认为加了一个整个a数组,偏移了整个数组a的大小(也就是5个int的大小)。所以int *ptr=(int *)(&a+1);其实ptr实际是&(a[5]),也就是a+5.

    原因为何呢?

    &a是数组指针,其类型为int(*)[5];


    题3:

    函数fun的声明为int fun(int *p[4]),以下哪个变量可以作为fun的合法参数()

    • int a[4][4];
    • int **a;
    • int **a[4]
    • int (*a)[4];


    答案: B


    题4

    下面说法正确的是()

    • C++已有的任何运算符都可以重载
    • const对象只能调用const类型成员函数
    • 构造函数和析构函数都可以是虚函数
    • 函数重载返回值类型必须相同

    答案: B


    题5

    典型的创建Windows窗口过程的流程为()

    • 注册窗口类->创建窗口->显示窗口->更新窗口->消息循环
    • 注册窗口类->创建窗口->更新窗口->显示窗口->消息循环
    • 创建窗口->注册窗口类->更新窗口->显示窗口->消息循环
    • 创建窗口->注册窗口类->显示窗口->更新窗口->消息循环
    答案:A
    在屏幕上显示一个窗口的过程一般有以下步骤,这就是主程序的结构流程:
    (1)得到应用程序的句柄(GetModuleHandle)。
    (2)注册窗口类(RegisterClassEx)。在注册之前,要先填写RegisterClassEx的参数WNDCLASSEX结构。
    (3)建立窗口(CreateWindowEx)。
    (4)显示窗口(ShowWindows)。
    (5)刷新窗口客户区(UpdateWindow)。
    (6)进入无限的消息获取和处理的循环。首先获取消息(GetMessage),如果有消息到达,则将消息分派到回调函数处理(DispatchMessage),如果消息是WM_QUIT,则退出循环。


    题6

    下面哪个API返回的不属于windows内核对象()

    • CreateFile
    • CreateSemaphore
    • CreateDC
    • CeateEvent
    答案: C

    内核对象主要要用来供系统和应用程序管理系统资源,像进程、线程、文件等。存取符号对象、事件对象、文件对象、作业对象、互斥对象、管道对象、等待计时器对象等都是内核对象。 除了内核对象外,也可以使用其他类型的对象,如菜单、窗口、鼠标光标、刷子和字体等。这些对象属于用户对象或图形设备接口(GDI)对象,而不是内核对象。

    ABD选项是内核对象:事件对象HANDLE CreateEvent();文件对象HANDLE CreateFile();信号量对象HANDLE CreateSemaphore();
    C选项是GDI对象。设备上下文(HDC)  CreateDC

    题7

    用户双击鼠标时产生的消息序列,下面正确的是()

    • WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONUP
    • WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONUP,WM_LBUTTONDBLCLK
    • WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDOWN,WM_LBUTTONDBLCLK
    • WM_LBUTTONDOWN,WM_LBUTTONUP,WM_LBUTTONDBLCLK,WM_LBUTTONUP
    答案: D


    题8

    以下关于线程以下描述正确的是()
    1.windows线程创建时,默认绑定在1个特定的CPU上
    2.可采用SetThreadAffinityMask接口设置线程与某个cpu绑定
    3._beginthreadex比CreateThread创建线程安全是因为使用_beginthreadex会创建一个_tiddata,在调用一些诸如strtok函数时会将需要保护的数据存入_tiddata
    4.使用_beginthread创建线程时,线程执行函数必须为_cdecl约束规范,而_beginthreadex指定的线程执行函数必须为_stdcall
    • 1,2
    • 1,3
    • 1
    • 以上都不正确
    答案: D


    题9

    以下哪些线程同步锁可以为递归锁
    1.信号量  2.读写锁   3.互斥量   4.事件   5.临界区(Critical Section)

    • 1,3,4,5
    • 5
    • 3,5
    • 1,3,5

    答案:C

    进程/线程同步方法

    常见的进程/线程同步方法有互斥锁(或称互斥量Mutex)、读写锁(rdlock)、条件变量(cond)、信号量(Semophore)等。

    在windows系统中,临界区(Critical Section)和事件对象(Event)也是常用的同步方法。

    递归锁/非递归锁

    Mutex可以分为递归锁(recursive mutex)和非递归锁(non-recursive mutex)。 递归锁也叫可重入锁(reentrant mutex),非递归锁也叫不可重入锁(non-reentrant mutex)。

    二者唯一的区别是:

    同一个线程可以多次获取同一个递归锁,不会产生死锁。

    如果一个线程多次获取同一个非递归锁,则会产生死锁。

    Windows下的Mutex和Critical Section是可递归的。

    Linux下的pthread_mutex_t锁是默认是非递归的可以通过设置PTHREAD_MUTEX_RECURSIVE属性,将pthread_mutex_t锁设置为递归锁。


    题10

    关于sendmessage和postmessage的区别,下面的说法错误的是()
    • postmessage发出消息后,将消息放到消息队列中,马上返回
    • sendmessage发出消息后,一直等到该消息执行完毕,才返回
    • 用sendmessage给其他线程创建的窗口发送消息时,消息也会进消息队列
    • 用2个函数只能给当前进程的窗口发送消息
      答案:D

      A:PostMessage只把消息放入队列,不管其他程序是否处理都返回,然后继续执行,这是个异步消息投放函数。
      B:SendMessage必须等待其他程序处理消息完了之后才返回,继续执行,这是个同步消息投放函数。
      C:当某线程调用sendmessage给别的线程创建的窗口时,发送的消息首先追加到接收线程的发送消息队列,发送线程处于空闲状态,等待接收线程处理完他的消息返回给发送线程的应答队列,等到后发送线程被唤醒取得应答队列的消息 (就是处理完消息的返回值),继续执行。
      D:sendmessage和postmessage都可以给其他线程发送消息


      题11

      关于WM_COPYDATA消息的处理,下面描述错误的是()

      • 可以在不同进程之间传递少量只读数据
      • 只能通过sendmessage方式来发送该消息
      • 只能在窗口过程函数中处理该消息
      • 可以在消息队列或窗口过程函数中处理该消息

      答案:C

      A:WM_COPYDATA消息的主要目的是允许在进程间传递只读数据。Windows在通过WM_COPYDATA消息传递期间,不提供继承同步方式。
      B;该消息只能由SendMessage()来发送,而不能使用PostMessage()。因为系统必须管理用以传递数据的缓冲区的生命期,如果使用了PostMessage(),数据缓冲区会在接收方(线程)有机会处理该数据之前,就被系统清除和回收。
      D:可以在消息队列或窗口过程函数中处理该消息

      题12

      堆排序的空间复杂度是(),堆排序中构建堆的时间复杂度是()。

      • O(logn),O(n)
      • O(logn),O(nlogn)
      • O(1),O(n)
      • O(1),O(nlogn)
      答案:C


      题13

      基于统计的分词方法为()
      • 正向最大匹配法
      • 逆向最大匹配法
      • 最少切分
      • 条件随机场
        解析:

        目前的分词方法归纳起来有3 类:

        第一类是基于语法和规则的分词法。其基本思想就是在分词的同时进行句法、语义分析, 利用句法信息和语义信息来进行词性标注, 以解决分词歧义现象。因为现有的语法知识、句法规则十分笼统、复杂, 基于语法和规则的分词法所能达到的精确度远远还不能令人满意, 目前这种分词系统还处在试验阶段。

        第二类是机械式分词法(即基于词典)。机械分词的原理是将文档中的字符串与词典中的词条进行逐一匹配, 如果词典中找到某个字符串, 则匹配成功, 可以切分, 否则不予切分。基于词典的机械分词法, 实现简单, 实用性强, 但机械分词法的最大的缺点就是词典的完备性不能得到保证。据统计, 用一个含有70 000 个词的词典去切分含有15 000 个词的语料库, 仍然有30% 以上的词条没有被分出来, 也就是说有4500 个词没有在词典中登录。

        第三类是基于统计的方法。基于统计的分词法的基本原理是根据字符串在语料库中出现的统计频率来决定其是否构成词。词是字的组合, 相邻的字同时出现的次数越多, 就越有可能构成一个词。因此字与字相邻共现的频率或概率能够较好的反映它们成为词的可信度。

        最大匹配是指以词典为依据,取词典中最长单词为第一个次取字数量的扫描串,在词典中进行扫描,这是基于词典分词的方法
        1.正向最大匹配法 
        2.逆向最大匹配法
        3.最少切分法:使每一句中切出的词数最小,这也是基于词典分词的方法
        条件随机场是一个基于统计的序列标记和分割的方法,属于基于统计的分词方法范畴。它定义了整个标签序列的联合概率,各状态是非独立的,彼此之间可以交互,因此可以更好地模拟现实世界的数据.

        ////////

        1)正向最大匹配法(由左到右的方向); 
        2)逆向最大匹配法(由右到左的方向); 
        3)最少切分(使每一句中切出的词数最小)。 
        以上三种是机械分词方法:
        条件随机域(场)(conditional random fields,简称 CRF,或CRFs),是一种判别式概率模型,是随机场的一种,常用于标注或分析序列资料,如自然语言文字或是生物序列。
        条件随机场(CRF)由Lafferty等人于2001年提出,结合了最大熵模型和隐马尔可夫模型的特点,是一种无向图模型,基于统计学,可以作为一种分词方法


        题14

        下列哪个不属于CRF模型对于HMM和MEMM模型的优势()
        • 特征灵活
        • 速度快
        • 可容纳较多上下文信息
        • 全局最优

          答案:B

          隐马尔可夫模型(Hidden Markov Model,HMM),最大熵马尔可夫模型(Maximum Entropy Markov Model,MEMM)以及条件随机场(Conditional Random Field,CRF)是序列标注中最常用也是最基本的三个模型。

          HMM模型是对转移概率和表现概率直接建模,统计共现概率。
          MEMM模型是对转移概率和表现概率建立联合概率,统计时统计的是条件概率,但MEMM容易陷入局部最优,是因为MEMM只在局部做归一化。
          RF模型中,统计了全局概率,在 做归一化时,考虑了数据在全局的分布,而不是仅仅在局部归一化,这样就解决了MEMM中的标记偏置(label bias)的问题。

          CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活。(与ME一样) ————与HMM比较
          同时,由于CRF计算全局最优输出节点的条件概率,它还克服了最大熵马尔可夫模型标记偏置(Label-bias)的缺点。 ­­————与MEMM比较
          CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。
          CRF需要训练的参数更多,与MEMM和HMM相比,它存在训练代价大、复杂度高的缺点。

           CRF模型对于HMM和MEMM模型的优点:
             a)与HMM比较。CRF没有HMM那样严格的独立性假设条件,因而可以容纳任意的上下文信息。特征设计灵活(与ME一样)
             b)与MEMM比较。由于CRF计算全局最优输出节点的条件概率,它还克服了最大熵马尔可夫模型标记偏置(Label-bias)的缺点。
             c)与ME比较。CRF是在给定需要标记的观察序列的条件下,计算整个标记序列的联合概率分布,而不是在给定当前状态条件下,定义下一个状态的状态分布。
             CRF模型对于HMM和MEMM模型的缺点:
          训练代价大、复杂度高


          题15

          圆内接三角形是锐角三角形概率是多少()

          • 1/4
          • 1/3
          • 1/2
          • 2/3

          答案:A

          思路1:

          三角形的三点在圆上的位置是等概率的。这种任意位置组成的三角形中,最大的那个角必定大于等于60度,因此满是三角形是锐角的变化范围是60-90度,钝角的范围是90-180度
          (90-60)/(180-60)=1/4

          思路2:

          三角形一个点A是固定的,圆心为O,连接AO,并延长交圆于D,AD为直径,分圆为两半三角形另两顶点为BC,当B、C在AD一边时ABC非锐角三角形,这种可能性有1/2当B、C在AD两边时ABC可能为锐角三角形,可能非锐角三角形,当BC与AO不相交时为锐角三角形,相交时非锐角三角形,可能性各一半,即均为1/4锐角三角形的概率为1/4,其他为3/4 故选A


          题16

          六个人排成一排,甲与乙不相邻,且甲与丙不相邻的不同排法数是多少()

          • 216
          • 240
          • 288
          • 360
          答案:C

          思路1:

          6!-2!*5!*2+2!*4!=288
          ····六个全排列,减去甲和乙看成一个整体 5个全排列乘以甲乙全排列,再减去 甲和丙看成一个整体 5个全排列乘以甲丙全排列,再加上重复减去的情况  将甲乙丙看成一个整体 4个全排列乘以(乙甲丙和丙甲乙)这两种情况 

          思路2:

          1,首先将甲乙丙拿出来,剩下三个做全排列,有A(3,3)=6种排列,
          2,将甲乙两个插入第一步三个人的四个空隙中,有A(4,2)=12种
          3,剩下丙插入到前五个人中的六个空隙中,其中甲的左右两侧不符合,
             还有4个符合条件的空隙,C(4,1)=4
          4,总共有6*12*4=288


          题17

          下列排序算法的常规实现中,哪些空间复杂度是O(1)
          • 冒泡
          • 选择
          • 归并
          • 快排
          • 堆排序
            答案:A.B.E
            冒泡排序,选择排序,堆排序的空间复杂度为O(1),因为需要一个临时变量来交换元素位置,(另外遍历序列时自然少不了用一个变量来做索引).
            快速排序空间复杂度为logn(因为递归调用了) ,归并排序空间复杂是O(n),需要一个大小为n的临时数组.


            题18

            假定CSomething是一个类,执行下面这些语句之后,内存里创建了____个CSomething对象。
            CSomething a();
            CSomething b(2);
            CSomething c[3];
            CSomething &ra = b;
            CSomething d=b;
            CSomething *pA = c;
            CSomething *p = new CSomething(4);
            • 10
            • 9
            • 8
            • 7
            • 6
            • 5
            答案: E

            题19

            有1,2,3,......无穷个格子,你从1号格子出发,每次1/2概率向前跳一格,1/2概率向前跳两格,走到格子编号为4的倍数时结束,结束时期望走的步数为____。
            答案: 18/5

            题20
            Linux下两个进程可以同时打开同一个文件,这时如下描述错误的是:
            • 两个进程中分别产生生成两个独立的fd
            • 两个进程可以任意对文件进行读写操作,操作系统并不保证写的原子性
            • 进程可以通过系统调用对文件加锁,从而实现对文件内容的保护
            • 任何一个进程删除该文件时,另外一个进程会立即出现读写失败
            • 两个进程可以分别读取文件的不同部分而不会相互影响
            • 一个进程对文件长度和内容的修改另外一个进程可以立即感知
            应该选D, 一般删除都是文件索引,如果两个文件同时打开同一个文件,一个线程执行删除操作,只要另一个线程不退出,就可以继续对该文件进行操作,一旦退出才找不到该文件的索引节点而报错。

            题21
            在一个axb的整数矩阵中,寻找最长的严格递减数字序列。数列可以沿着横或竖的方向,但不能重叠,该问题的最优复杂度是____。举例来说,以下是一个3x5的矩阵,其结果如下:
             
            • O(M*N)
            • O(M+N)
            • O(Mlogn)
            • O(N*logM)
            • O(M^2*N^2)
            • O(max(M,N))
            答案: A

            题22
            以下函数中,和其他函数不属于一类的是_____。
            • fread
            • gets
            • getchar
            • pread
            • getline
            • scanf

            答案: D


            题23

             如下描述中,错误的是____。

            SATA硬盘因为有机械部件,随机读写时会发生磁头的物理运动。主流硬盘的平均寻道时间在几毫秒到几十毫秒
            SATA硬盘读写的最小单位是扇区,扇区的大小是512字节或者4k
            文件系统读写硬盘的最小单位也是扇区
            SSD支持随机读写.但是一般读性能要好于写性能
            SSD的随机读写延时要比SATA低两个数量级
            SSD根据使用技术的不同,写的寿命是有限的,需要软件进行写优化,确保存储单元的写次数基本同步增长
            答案: C


            题24

            以下函数中,和其他函数不属于一类的是____。

            • read
            • pread
            • write
            • pwrite
            • fseek
            • lseek
            答案: E

            只有fseek是库函数,其他都是系统调用

            题25

            下列说法错误的有( )

            • 在类方法中可用this来调用本类的类方法
            • 在类方法中调用本类的类方法时可直接调用
            • 在类方法中只能调用本类中的类方法
            • 在类方法中绝对不能调用实例方法
            答案:ACD

            首先这里的类方法是指属于类的方法,而不是属于类对象的方法。在类中一般的方法和数据属于类对象,存储在栈中,但是(A)static成员属于整个类,存储在静态区域,没有this指针,称作类方法。在类方法中,(B)可以直接调用本类中的类方法,(C)可以通过类的作用域调用其他类的类方法,类方法不可以直接调用类中非静态成员,可以直接调用类中的静态成员。(D)如果类方法要调用非静态成员时,可通过对象来引用。

            题26

            下列运算符,在C++语言中不能重载的是()

            • *
            • .*
            • ::
            • operator delete
            除了    .*    ::    ? :    sizeof    typeid  这几个运算符不能被重载,其他运算符都能被重载。delete不能够重载,operator delete可以重载。
            .表示成员选择
            .*表示指向成员操作的指针
            ?:表示条件操作
            ::
            作用域符


            题27

            In C++, which of the following keyword(s) can be used on both a variable and a function?

            • static
            • virtual
            • extern
            • inline
            • const
            答案: ACE

            static 静态变量和静态函数都可以在类外直接访问,
            extern 可以用于声明变量,但是函数声明也可以用,只不过默认就是extern而已。
            const也可以修饰函数或者变量

            题28

            Which of the following statement(s) equal(s) value 1 in C programming language?

            • the return value of main function if program ends normally
            • return (7&1)
            • char *str="microsoft"; return str=="microsoft"
            • return "microsoft"=="microsoft"
            • None of the above

            答案: BCD


            题29

            给出以下定义,下列哪些操作是合法的?

            const char *p1 = “hello”;
            char *const p2 = “world”;

            • p1++;
            • p1[2] = ‘w’;
            • p2[2] = ‘l’;
            • p2++;


            答案: A


            题30

            关于IP地址下列说法错误的是?

            • IP地址采用分层结构,它由网络号与主机号两部分组成
            • 根据不同的取值范围IP地址可以分为五类
            • 202.112.139.140属于B类地址
            • 每个C类网络最多包含254台主机
            • IPv6采用128位地址长度
            • 私有地址只是ABC类地址的一部分
            答案:C

            解析:

            最初设计互联网络时,为了便于寻址以及层次化构造网络,IP地址采用分层结构,每个IP地址包括两个标识码(ID),即网络ID和主机ID。同一个物理网络上的所有主机都使用同一个网络ID,网络上的一个主机(包括网络上工作站,服务器和路由器等)有一个主机ID与其对应。IP地址根据网络ID的不同分为5种类型,A类地址、B类地址、C类地址、D类地址和E类地址。 
            1. A类IP地址 
            一个A类IP地址由1字节的网络地址和3字节主机地址组成,网络地址的最高位必须是“0”, 地址范围从1.0.0.0 到126.0.0.0。可用的A类网络有126个,每个网络能容纳1亿多个主机。 
            2. B类IP地址 
            一个B类IP地址由2个字节的网络地址和2个字节的主机地址组成,网络地址的最高位必须是“10”,地址范围从128.0.0.0到191.255.255.255。可用的B类网络有16382个,每个网络能容纳6万多个主机 。 
            3. C类IP地址 
            一个C类IP地址由3字节的网络地址和1字节的主机地址组成,网络地址的最高位必须是“110”。范围从192.0.0.0到223.255.255.255。C类网络可达209万余个,每个网络能容纳254个主机。 
            4. D类地址用于多点广播(Multicast)。 
            D类IP地址第一个字节以“lll0”开始,它是一个专门保留的地址。它并不指向特定的网络,目前这一类地址被用在多点广播(Multicast)中。多点广播地址用来一次寻址一组计算机,它标识共享同一协议的一组计算机。 
            5. E类IP地址 
            以“llll0”开始,为将来使用保留。 
            在IP地址3种主要类型里,各保留了3个区域作为私有地址,其地址范围如下: 
            A类地址:10.0.0.0~10.255.255.255 
            B类地址:172.16.0.0~172.31.255.255 
            C类地址:192.168.0.0~192.168.255.255

            另外IPv6地址长度为128位,是 IETF(互联网工程任务组,Internet Engineering Task Force)设计的用于替代现行版本IP协议(IPv4)的下一代IP协议。

            题31

            以下说法正确的是:

            • 在并行程度中,当两个并行的线程,在没有任何约束的情况下,访问一个共享变量或者共享对象的一个域,而且至少要有一个操作是写操作,就可能发生数据竞争错误。
            • 原语Compare-and-swap(CAS)是实现无锁数据结构的通用原语。
            • 获得内部锁的唯一途径是:进入这个内部锁保护的同步块或方法。
            • volatile变量具有synchronized的可见性特性,但是不具备原子特性。
            • 减小竞争发生可能性的有效方式是尽可能缩短把持锁的时间

            答案:ABCDE

            A: 来自Thinking in java:如果你正在写一个变量,它可能接下在将被另一个线程读取,或者正在读取上一个已经被另一个现成写过的变量,那么你必须应用同步,并且,读写线程都必须用相同的监视器锁同步。--由此可以想到,如果多个线程都只读数据,则不会造成竞争错误,因为不会出现读脏数据或者数据不同步问题。
            B. 无锁化编程常用方式之一
            C. 当线程企图访问临界资源时,先会查看该临界资源当前是否已被加锁,如果没有被加锁,则对该临界资源加锁,并进入该同步块或方法,加锁后,其他现成也就无法访问该临界资源了。所以判定获取了一个内部锁的标准为:进入该同步区域
            D. 保证可见性,调用volatile变量时,使用前都会刷新该变量,保证变量的值为最新的。不保证互斥性
            E. 把持锁的时间短了,等待锁的时间也就短了,竞争可能性变小

            题32

            下列说法正确的有( )

            • 环境变量可在编译source code时指定
            • 在编译程序时,所能指定的环境变量不包括class path
            • javac一次可同时编译数个Java源文件
            • javac.exe能指定编译结果要置于哪个目录(directory)
            答案: ACD

            a选项-d即可设置系统属性
            c选项一次编译多个java文件用 javac *.java. 即可编译当前目录下的所有java文件
            d选项-s指定存放生成的源文件的位置

            题33

            下列说法错误的有( )

            • 能被java.exe成功运行的java class文件必须有main()方法
            • J2SDK就是Java API
            • Appletviewer.exe可利用jar选项运行.jar文件
            • 能被Appletviewer成功运行的java class文件必须有main()方法
            答案:BCD


            题34

            以下集合对象中哪几个是线程安全的?( )

            • ArrayList
            • Vector
            • Hashtable
            • Stack
            答案:BCD

            ArrayList线程不安全,Vector线程安全
            HashMap线程不安全,Hashtable线程安全
            由于Stack继承了Vector,所以线程也是安全的

            题35

            初始序列为1 8 6 2 5 4 7 3一组数采用堆排序,当建堆(小根堆)完毕时,堆所对应的二叉树中序遍历序列为:()

            • 8 3 2 5 1 6 4 7
            • 3 2 8 5 1 4 6 7
            • 3 8 2 5 1 6 7 4
            • 8 2 3 5 1 4 7 6
            答案:A


            题36

            IP地址131.153.12.71是一个()类IP地址。

            A.A类

            B.B类

            C.C类

            D.D类

            答案: B

            IP地址可为分为五大类:
            A类的范围:0000 0000.0000 0000.0000 0000.0000 0000 ~0111 1111.1111 1111.1111 1111.1111 1111=0.0.0.0~127.255.255.255;
            B类的范围:10000000.000000000.00000000.00000000~10111111.11111111.11111111.11111111=128.0.0.0~191.255.255.255
            C类的范围:11000000.000000000.00000000.00000000~11011111.11111111.11111111.11111111=192.0.0.0~223.255.255.255
            D类的范围:11100000.000000000.00000000.00000000~11101111.11111111.11111111.11111111=224.0.0.0~239.255.255.255
            E类的范围:1111000.000000000.00000000.00000000~11111111.11111111.11111111.11111111=240.0.0.0~255.255.255.255

            题37

            下推自动识别机的语言是:()
            • 0型语言
            • 1型语言
            • 2型语言
            • 3型语言
              答案:C

              在编译原理中,图灵机(TM)识别0型语言
              线性界限自动机(LBA)识别上下文有关语言( 1型
              下推自动机(PDA)识别上下文无关语言( 2型
              有穷自动机(FA)识别正规语言( 3型)。

              题38

              浏览器访问某页面,HTTP协议返回状态码为403时表示:()

              答案: 禁止访问

              找不到该页面:404

              禁止访问:403

              内部服务器访问:500

              服务器繁忙:503



              题39

              对于派生类的构造函数,在定义对象时构造函数的执行顺序为?
              1:成员对象的构造函数
              2:基类的构造函数
              3:派生类本身的构造函数
              • 123
              • 231
              • 321
              • 213
                答案: D

                当派生类中不含对象成员时

                · 在创建派生类对象时,构造函数的执行顺序是:基类的构造函数→派生类的构造函数;

                · 在撤消派生类对象时,析构函数的执行顺序是:派生类的构造函数→基类的构造函数。

                当派生类中含有对象成员时

                · 在定义派生类对象时,构造函数的执行顺序:基类的构造函数→对象成员的构造函数→派生类的构造函数;

                · 在撤消派生类对象时,析构函数的执行顺序:派生类的构造函数→对象成员的构造函数→基类的构造函数。


                题40

                进程进入等待状态有哪几种方式?

                • CPU调度给优先级更高的线程
                • 阻塞的线程获得资源或者信号
                • 在时间片轮转的情况下,如果时间片到了
                • 获得spinlock未果
                进程分为基本的三个状态:运行、就绪、阻塞/ 等待
                A. 高优先级的抢占CPU,使得原来处于运行状态的进程转变为 就绪状态。
                B. 阻塞的进程等待某件事情的发生,一旦发生则它的运行条件已经满足,从阻塞进入 就绪状态。
                C. 时间片轮转使得每个进程都有一小片时间来获得CPU运行,当时间片到时从运行状态变为 就绪状态。
                D. 自旋锁(spinlock)是一种保护临界区最常见的技术。在同一时刻只能有一个进程获得自旋锁,其他企图获得自旋锁的任何进程将一直进行尝试(即自旋,不断地测试变量),除此以外不能做任何事情。因此没有获得自旋锁的进程在获取锁之前处于忙等( 阻塞状态)。

                题41

                同一进程下的线程可以共享以下?

                A. stack

                B.  data section

                C. register set

                D. file fd

                答案: BD

                解析: 线程共享的内容包括:

                1.进程代码段

                2.进程的公有数据(利用这些共享的数据,线程很容易的实现相互之间的通讯)

                3.进程打开的文件描述符、

                4.信号的处理器、

                5.进程的当前目录和

                6.进程用户ID与进程组ID

                线程独有的内容包括:

                1.线程ID

                2.寄存器组的值

                3.线程的堆栈

                4.错误返回码

                5.线程的信号屏蔽码


                题42

                二进制地址为011011110000,大小为(4)10和(16)10块的伙伴地址分别为: 1 , 2 



                题43

                在数据库系统中,产生不一致的根本原因是( )

                A. 数据存储量太大

                B. 没有严格保护数据

                C. 未对数据进行完整性控制

                D. 数据冗余

                答案D

                数据库中有可能会存在不一致的数据。

                造成数据不一致的原因主要有:

                • 数据冗余

                如果数据库中存在冗余数据,比如两张表中都存储了用户的地址,在用户的地址发生改变时,如果只更新了一张表中的数据,那么这两张表中就有了不一致的数据。

                • 并发控制不当

                比如某个订票系统中,两个用户在同一时间订同一张票,如果并发控制不当,可能会导致一张票被两个用户预订的情况。当然这也与元数据的设计有关。

                • 故障和错误

                如果软硬件发生故障造成数据丢失等情况,也可能引起数据不一致的情况。因此我们需要提供数据库维护和数据恢复的一些措施。


                题44

                用容积分别为15升和27升的两个杯子向一个水桶中装水,可以精确向水桶中注入( )升水?

                • 53
                • 25
                • 33
                • 52

                答案: C 

                解析: 只能是3的倍数


                题45

                网桥和交换机工作在数据链路层,路由器工作在网络层


                题46

                对于满足SQL92标准的SQL语句:SELECT foo,count(foo) FROM pokes WHERE foo>10 GROUP BY foo HAVINO ORDER BY foo,其执行的顺序应该为( )

                • FROM->WHERE->GROUP BY->HAVING->SELECT->ORDER BY
                • FROM->GROUP BY->WHERE->HAVING->SELECT->ORDER BY
                • FROM->WHERE->GROUP BY->HAVING->ORDER BY->SELECT
                • FROM->WHERE->ORDER BY->GROUP BY->HAVING->SELECT

                答案: A

                标准的 SQL 的解析顺序为: 
                (1).FROM 子句, 组装来自不同数据源的数据 (2).WHERE 子句, 基于指定的条件对记录进行筛选 (3).GROUP BY 子句, 将数据划分为多个分组 (4).使用聚合函数进行计算 (5).使用 HAVING 子句筛选分组 (6).计算Select所有的表达式 (7).使用 ORDER BY 对结果集进行排序


                题47

                在unix系统中,目录结构采用()

                A 单级目录结构

                B 二级目录结构

                C 单纯树形目录结构

                D 带链接树形目录结构


                题48

                在一个单CPU的处理机中,有P1,P3,P5三个作业,有两个IO设备IO1,IO2,并且能够实现抢先式多任务并行工作的多道程序环境中,投入运行优先级由高到低P5,P1,P3三个作业,他们使用设备的先后顺序和占用设备的时间分别为:P1:IO2(10ms) CPU(10ms) IO1(30ms)CPU(10ms)P3:IO1(30ms) CPU(10ms) IO2(30ms)CPU(10ms)P5:CPU(20ms) IO1(30ms) CPU(10ms) IO2(15ms)忽略其他的时间损耗,3个作业投入到全部完成的情况下。请问下列哪些选项为IO2的设备利用率?

                A. 0.55    B. 0.26   C. 0.48   D. 0.5   E 0.39

                答案: E


                题49

                关于epoll和select的区别,哪些说法是正确的?

                A. epoll和select都是I/O多路复用的技术,都可以实现同时监听多个I/O事件的状态

                B. epoll相比select效率更高,主要是基于其操作系统支持的I/O事件通知机制,而select是基于轮询机制

                C.epoll支持水平触发和边沿触发两种模式

                D.select能并行支持I/O比较小,且无法修改

                答案: ABC


                题50

                Internet的网络层含有的协议是?

                A. IP

                B. ICMP

                C. ARP

                D. RARP

                答案: ABCD


                题51

                以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:

                • 如果变量bVar是布尔类型:if(false==bVar){doSomeThing();}
                • 如果变量nVar是int型:if(0==nVar){doSomeThing();}
                • 如果变量fVar为浮点型:if(0.02=fVar){doSomeThing();}
                • 如果变量sVar为字符串型:if(""==sVar){doSomeThing();}
                答案:CD


                题52

                以下是C++的不同数据类型值的比较语句,请问这些判断语句中作为条件部分的语句编写有问题的有:

                • 如果变量bVar是布尔类型:if(false==bVar){doSomeThing();}
                • 如果变量nVar是int型:if(0==nVar){doSomeThing();}
                • 如果变量fVar为浮点型:if(0.02=fVar){doSomeThing();}
                • 如果变量sVar为字符串型:if(""==sVar){doSomeThing();}
                答案:CD


                题53

                 TCP链接中主动断开链接netstat观察可能出现的状态流转是:

                A.ESTABLISHED->CLOSE_WAIT->TIME_WAIT->CLOSED

                B.ESTABLISHED->TIME_WAIT->CLOSE_WAIT->CLOSED

                C.ESTABLISHED->FIN_WAIT_1->FIN_WAIT_2->TIME_WAIT->CLOSED

                D.ESTABLISHED->FIN_WAIT_1->TIME_WAIT->CLOSED

                答案: CD


                题54

                 以下涉及到内存管理的代码段中,有错误的是:

                int *a=new int(12);
                //..... 
                free(a);
                
                int *ip=static_cast<int*>(malloc(sizeof(int)));
                *ip=10;
                //.....
                delete ip;
                double *a=new double[1];
                //.... 
                delete a;
                int *ip=new int(12);
                for(int i=0;i<12;++i){
                ip[i]=i;
                }
                delete []ip;
                答案: ABD


                题55

                下面哪些特性可能导致代码体积膨胀:

                宏定义
                模板
                内联函数
                递归
                答案: ABC


                题56

                小明设计了如下的学籍管理系统:
                已知关系:学籍(学号,学生姓名) PK=学号
                成绩(科目号,成绩,学号) PK=科目代码,FK=学号
                已有表记录如下,请给出能够插入的成绩记录
                (1,99,2)
                (5,68,1)
                (3,70,3)
                (7,45,null)


                答案:BD

                成绩表中主键是“PK=科目代码”,所以 科目代码要唯一,所以可排除AC;在数据库完整性里有说:外键必须可以找到或者为空,所以 B是可以的,而D为空,所以也满足。故选BD


                题57

                设x、y、t均为int型变量,则执行语句:t=3; x=y=2; t=x++||++y; 后,变量t和y的值分别为____。

                • t=1 y=2
                • t=1 y=3
                • t=2 y=2
                • t=2 y=3
                • t=3 y=2
                • t=3 y=3
                答案: A


                题58

                关于函数模板,描述错误的是? 

                • 函数模板必须由程序员实例化为可执行的函数模板
                • 函数模板的实例化由编译器实现
                • 一个类定义中,只要有一个函数模板,则这个类是类模板
                • 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
                答案: A


                题59

                在Linux 系统中,在运行一个程序时,程序中未初始化的全局变量会被加载到以下哪个内存段中?

                A. BSS

                B. TEXT

                C. DATA

                D, STACK

                答案: A

                解析:

                BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

                数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

                代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

                堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

                栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区


                题60

                i的初始值为0,i++在两个线程里面分别执行100次,能得到最大值是 200,最小值是 2


                题61

                在c语言中,要求运算必须是整形的运算符是:

                A /

                B ++

                C !=

                D %

                答案: D


                题62


                题57

                设x、y、t均为int型变量,则执行语句:t=3; x=y=2; t=x++||++y; 后,变量t和y的值分别为____。

                • t=1 y=2
                • t=1 y=3
                • t=2 y=2
                • t=2 y=3
                • t=3 y=2
                • t=3 y=3
                答案: A


                题58

                关于函数模板,描述错误的是? 

                • 函数模板必须由程序员实例化为可执行的函数模板
                • 函数模板的实例化由编译器实现
                • 一个类定义中,只要有一个函数模板,则这个类是类模板
                • 类模板的成员函数都是函数模板,类模板实例化后,成员函数也随之实例化
                答案: A


                题59

                在Linux 系统中,在运行一个程序时,程序中未初始化的全局变量会被加载到以下哪个内存段中?

                A. BSS

                B. TEXT

                C. DATA

                D, STACK

                答案: A

                解析:

                BSS(Block Started by Symbol)通常是指用来存放程序中未初始化的全局变量和静态变量的一块内存区域。特点是:可读写的,在程序执行之前BSS段会自动清0。所以,未初始的全局变量在程序执行之前已经成0了。

                数据段:数据段(data segment)通常是指用来存放程序中已初始化的全局变量的一块内存区域。数据段属于静态内存分配。

                代码段:代码段(code segment/text segment)通常是指用来存放程序执行代码的一块内存区域。这部分区域的大小在程序运行前就已经确定,并且内存区域通常属于只读, 某些架构也允许代码段为可写,即允许修改程序。在代码段中,也有可能包含一些只读的常数变量,例如字符串常量等。

                堆(heap):堆是用于存放进程运行中被动态分配的内存段,它的大小并不固定,可动态扩张或缩减。当进程调用malloc等函数分配内存时,新分配的内存就被动态添加到堆上(堆被扩张);当利用free等函数释放内存时,被释放的内存从堆中被剔除(堆被缩减)

                栈(stack):栈又称堆栈, 是用户存放程序临时创建的局部变量,也就是说我们函数括弧“{}”中定义的变量(但不包括static声明的变量,static意味着在数据段中存放变量)。除此以外,在函数被调用时,其参数也会被压入发起调用的进程栈中,并且待到调用结束后,函数的返回值也会被存放回栈中。由于栈的先进先出特点,所以栈特别方便用来保存/恢复调用现场。从这个意义上讲,我们可以把堆栈看成一个寄存、交换临时数据的内存区


                题60

                i的初始值为0,i++在两个线程里面分别执行100次,能得到最大值是 200,最小值是 2


                题61

                在c语言中,要求运算必须是整形的运算符是:

                A /

                B ++

                C !=

                D %

                答案: D


                题61

                已知int a[]={1,2,3,4,5}int*p[]={a,a+1,a+2,a+3}int **q=p;表达式*(p[0]+1)+**(q+2)的值是____

                答案: 5


                题62

                给出以下定义,下列哪些操作是合法的?

                char a[] = "hello";
                char b[] = "world";
                const char *p1 = a;
                char* const p2 = b;

                • p1++
                • p1[2]='w';
                • p2[2]='l';
                • p2++
                答案: AC


                题63

                类成员函数的重载、覆盖和隐藏区别描述正确的有?

                A.  覆盖是指在同一个类中名字相同,参数不同

                B.  重载是指派生类函数覆盖基类函数,函数相同,参数相同,基类函数必须有virtual关键字
                C.  
                派生类函数与基类函数相同,但是参数不同,会"隐藏"父类函数
                D.  
                函数名字相同,参数相同,基类无virtual关键字的派生类的函数会"隐藏"父类函数

                答案: CD

                a.成员函数被重载的特征:

                (1)相同的范围(在同一个类中);

                (2)函数名字相同;

                (3)参数不同;

                (4)virtual 关键字可有可无。

                b.覆盖是指派生类函数覆盖基类函数,特征是:

                (1)不同的范围(分别位于派生类与基类);

                (2)函数名字相同;

                (3)参数相同;

                (4)基类函数必须有virtual 关键字。

                c.“隐藏”是指派生类的函数屏蔽了与其同名的基类函数,规则如下:

                (1)如果派生类的函数与基类的函数同名,但是参数不同。此时,不论有无virtual关键字,基类的函数将被隐藏(注意别与重载混淆)。

                (2)如果派生类的函数与基类的函数同名,并且参数也相同,但是基类函数没有virtual 关键字。此时,基类的函数被隐藏(注意别与覆盖混淆)



                题64
                enum string{    
                    x1,    
                    x2,    
                    x3=10,    
                    x4,    
                    x5,    
                } x
                函数外部问x等于什么?
                • 5
                • 12
                • 0
                • 随机值
                答案: C


                题65

                以下函数用法正确的个数是:

                void test1()
                {
                    unsigned char array[MAX_CHAR+1],i;
                    for(i=0;i<=MAX_CHAR;i++){
                        array[i]=i;
                    }
                }
                char*test2()
                {
                    char p[] = "hello world";
                    return p;
                }
                char *p =test2();
                void test3(){
                    char str[10];
                    str++;
                    *str='0';
                }

                答案: 0

                题66
                两个线程并发执行以下代码,假设a是全局变量,初始为1,那么以下输出______是可能的?、
                1
                2
                3
                4
                void foo(){
                    ++a;
                    printf("%d ",a);
                }
                • 3 2
                • 2 3
                • 3 3
                • 2 2
                答案: ABCD

                题67





                评论
                添加红包

                请填写红包祝福语或标题

                红包个数最小为10个

                红包金额最低5元

                当前余额3.43前往充值 >
                需支付:10.00
                成就一亿技术人!
                领取后你会自动成为博主和红包主的粉丝 规则
                hope_wisdom
                发出的红包
                实付
                使用余额支付
                点击重新获取
                扫码支付
                钱包余额 0

                抵扣说明:

                1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
                2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

                余额充值