C++面试总结

本次文章主要记录2017年8月9日的一次面试,面试官问的相对比较简单,但是发挥的不是很好,基础的知识都有遗忘,因此将笔试以及面试知识点总结在此。

1、基本数据类型所占的字节大小

      基本关系:short <= int <= long

c/c++数据类型所占字节数比较
数据类型 32位操作系统 64位操作系统
char 1个字节 1个字节
*(指针) 4 8(改变)
short int 2 2
int 4 4
unsigned int 4 4
float 4 4
doule 8 8
long 4 8(改变)
unsigned long 4 8(改变)
long long 8 8
扫描二维码关注公众号,回复: 1597934 查看本文章

2、字节对齐问题(怎么做的、有什么作用)

  (1)为什么要进行字节对齐:在计算机体系中,CPU对内存的读取时按照CPU的位数来操作的,32位按照4字节进行存取(64位按照8字节)数据,考虑到计算机的指令周期,为了计算机能够在一次指令周期完成对数据的存取,需要对内存中的数据进行字节对齐,以提高计算机的存取效率。如果未进行字节对齐,有的数据会存储在奇数的位置,那么计算机再一次指令周期内无法完成对数据的存取,需要两个指令周期分别获得数据的高低字节来进行数据重组,这样计算机的性能会降低。

  (2)字节对齐是怎么做的:每个数据都有自己的对齐字节,数据必须在符合对齐自己的的位置进行存储。在定义不同类型数据时,程序员可以不用特别关注字节对齐的问题,编译器会根据CPU的自己类型来自动进行数据字节对齐存储,如果要制定字节对齐的方式,可以使用预编译指令#pragma pack(val)告诉编译器,以参数val制定的对齐值来取代默认的字节对齐值。

  (3)有什么作用:可以提高CPU的存取效率。

  举例分析:(一般字节对齐对结构体类型大小影响比较明显)

1 struct A{
2     int a;      //4
3     char b;    //1
4     short c;   //2
5 };    

  在此结构体中,a占4个字节,b占1个字节,c占2个字节,总共为7个字节,但是为了自己对齐,编译器会在存储完c后,自动填充一个字节再进行下次数据的存储,因此结构体A的大小为8个字节。

struct B{
    char a;   //1
    int b;     //4
    short c;  //2         
};

  结构体B中,存储完a会自动填充3个字节然后存储b,存完c后,为了字节对齐,又填充2个字节,因此大小为12字节。可见,结构体的大小与数据存储的顺序有关系。

3、SQL数据库查询

4、避免死锁所需最少资源数计算

5、二叉树查找问题

6、归并排序算法

7、部分字符串移位

8、斐波那契数列打印(此代码运行超时,需要算法后优化)

 1 #include <stdio.h>
 2 
 3 int getNthNumber(int n);
 4 
 5 int main()
 6 {
 7     int n = 0;
 8     int num = 0;
 9     scanf("%d",&n);
10     num = getNthNumber(n);
11     printf("结果:%d\n",num);
12 }
13  int getNthNumber(int n) {
14         // write code here
15         //int i = 0;
16       
17         int num1;
18         int num2;
19         int num3;
20         num1 = num2 = 1;
21         if (n > 0 && n <= 2)
22             {
23             return 1;
24         }
25         
26         for (int i = 2; i <= n; i++)
27             {
28             num3 = num1 + num2;
29             num1 = num2;
30             num2 = num3;
31 
32             //printf("%d\n",num3);
33         }
34         
35         return num3;
36     }

9、使用迭代器删除vector元素具体怎么操作

10、windows多线程编程

11、字符串拷贝怎么限定目的地址大小

12、友元实现了什么

13、类的三种继承问题

14、多态实现机制

15、虚继承通过指针访问子类和父类成员函数问题

  

猜你喜欢

转载自www.cnblogs.com/kks170716/p/7353696.html