• C++面试题1


    第1课 - 腾讯笔试题精选一

    1. 32位机上根据下面的代码,问哪些说法是正确的()

    signed char a = 0xe0;

    unsigned int b = a;

    unsigned char c = a;

    1. a>0 && c>0 为真
    2. a == c 为真
    3. b的十六进制表示为:0xffffffe0
    4. 上面都不对

    解析:0xe0的十六进制表示为10进制为224,二进制表示为11100000,开头是1,在有符号数里面开头是1表示负数,a的实际值是-32,c的实际值的224;用a1去初始化无符号整型,将一个符号位的数赋值4个符号位的数,需要补符号位,a被解释为-32,符号位是1,将b的空白位置都补充为1,b变成0xffffffe0。

    正确选C

    考点:数据类型,符号位,补符号位

    1. 下面哪些选项能编译通过()

    int i;

    char a[10];

    string f();

    string g(string & str);

    1. If(!!i){f();}
    2. g(f());
    3. a = a+1;
    4. g(“abc”);

    解析:数组名可以进行加法运算,但是不能进行赋值运算的,C选项错误;“abc”是const char*是字符指针类型,这种类型转换不成string引用,D选项错误;只有const引用才能被临时变量或者临时对象所初始化,B选项不正确;

    正确选A

    考点:C++中的引用,标准库

    引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。引用的声明方法:类型标识符 &引用名=目标变量名;

    【例1】:int a; int &ra=a; //定义引用ra,它是变量a的引用,即别名。

    1. int a[10];问下面哪些不可以表示a[1]的地址()
    2. a+sizeof(int)
    3. &a[0]+1
    4. (int*)&a+1
    5. (int*)((char*)&a+sizeof(int))

    解析:指针运算的规律是:type* a; a + n; (unsigned int)a + n * sizeof(type)

    &a[1]表示为(unsigned int)a + 4;A选项中表示为:(unsigned int)a + 4 * sizeof(int)表示的不是a[1]的地址;B选项表示为:(unsigned int)( &a[0]) + 1 * sizeof(int),首字母的地址与数组名的地址是一样的,正确。C选项中,&a和a的值是一样的,都是数组的地址,但是他们的类型不一样,&a的类型是int(*)[10], a的类型是int*,C正确;D选项中(char*)&a+sizeof(int)表示为(unsigned int)a+4*sizeof

    (char),正确。

    正确选A

    考点:数组地址运算

    1. 问下面的数据存放在哪些存储区()

    int main()

    {

           char *p = “hello,world”;

           return 0;

    }

    1. 代码段
    2. 常量区

    解析:函数体存放在代码段,代码中的数据有“hello,world”,存放在常量区,char *p存放在栈。

    正确选BC

    考点:编译语言,C语言

    1. 下面哪些函数调用必须进入内核才能完成()
    2. fopen
    3. exit
    4. memcpy
    5. strlen

    解析:这四个函数都是C语言开发使用的函数,fopen是打开设备文件的,同时会出发驱动程序,驱动程序在内核;exit结束当前的进程,只有内核才能完成。Memcpy、strlen在用户空间就可以完成

    正确选AB

    考点:C语言,操作系统,应用经验

    1. 死锁发生的必要条件()
    2. 互斥条件
    3. 请求和保持
    4. 不可剥夺
    5. 循环等待

    解析:互斥条件指的是一个资源一次只能被一个任务所占有,任务往往指的是一个线程,另一个任务不能使用;另一个程序要使用就是请求,使用的进程在保持,同时使用的进程不可波段,需要循环等待。

    正确选ABCD

    考点:操作系统,线程

    1. 有两个线程,最初n=0,一个线程执行n++,n++;另一个执行n+=2;问,最后可能的n的值()
    2. 1
    3. 2
    4. 3
    5. 4

    解析:第一个执行完执行第二个,n的值为4;n++在汇编语言中分为三条语句,分别是(1)取n值(2)加1(3)写n值到内存,当线程1执行完一次n++,第二个执行步骤(2)时,执行线程2,线程2将3写为内存,之后线程1继续执行,将2存在内存,将3冲掉,此时n的值是2;线程1执行完一次n++,执行线程2,执行到(2)时,执行线程1,线程1结束执行线程2,此时n的值是3;这两个线程都加2,两个线程无论怎么交替都不会是1。

    正确选BCD

    考点:多线程编程,编程原理

    8.下面哪些说法是正确的()

    A. 数组和链表都可以随机访问

    B. 数组的插入和删除可以达到O(1)

    C. 哈希表无法进行范围检查

    D. 二叉树无法进行线性访问

    解析:只有数据才可以随机访问,链表只能顺序访问;数组元素的删除,需要将临近的元素前移,复杂度大于O(1);二叉树不是线性结构,但是二叉树可以进行线索化,之后就可以进行线性访问,D用词不准确。哈希表示一个键和值的结构,无法进行范围检查。

    正确选C

    考点:数据结构

    9. 基于比较的排序的时间复杂度是下限多少()

    A. O(n)

    B. O(n^2)

    C. O(nlogn)

    D. O(logn)

    正确选C

    考点:数据结构

    10. 对于下列程序,在一个big endian的32位计算机上,b的结果是()

    unsigned int a = 0x1234;

    char b = *((char)&a);

    1. 0x12
    2. 0x34
    3. 0x00
    4. 程序崩溃

    解析:大端模式是数据的高位放在低地址里面,小端模式是数据的高位放在高地址里面。0x1234在大端模式中的存放方式是:00 00 12 34,在小端模式中的存放方式是34 12 00 00。大端迷失中取的是第一个字节00。

    正确选C

    考点:网络,字节序

    11. 编写函数求两个整数a和b之间的较大值。要求不能使用if, while, switch, for, ?以及任何的比较语句。

    解析:

    方法一:使用符号位的用法进行,返回较小的值。

    #include <cstdlib>

    #include <iostream>

    #include <string>

    using namespace std;

    int min(int a, int b)

    {

        int d = a - b;

        int flag = ((unsigned int)d) >> 31;//将原本32位的开头的符号移到开头

        int array[] = {b, a};

        //若a大于b,符号位是0,意味b较小

        return array[flag];

    }

    int main(int argc, char *argv[])

    {

        cout<< min(1, 2) <<endl;

        cout<< min(2, 1) <<endl;

        cout<< min(2, 10000)<<endl;

        cout << "Press the enter key to continue ...";

        cin.get();

        return EXIT_SUCCESS;

    }

    方法二:数学运算

    int min(int a, int b)

    {

        int d = abs(a-b);

        return (a+b-d)/2;

    }

           但是由于不知道abs函数中是否有用题目中的语句,所以解法二中的算法不完善。

  • 相关阅读:
    高德地图修改背景色
    shell程序的编写
    WPF程序,运行时,结束时,要运行的操作(自动保存,检查单程序)
    android EditText光标位置(定位到最后)
    字体结构的Baseline/Leading/Ascent/Descent的图示
    Java解析xml(转)
    python常用抽象基类1
    airflow之SubDAGs(转载)
    java解析xml(转)
    python内部类
  • 原文地址:https://www.cnblogs.com/free-1122/p/11341934.html
Copyright © 2020-2023  润新知