C++常见面试问题

  1. 内存分区

  2. C/C++堆和栈的区别

  3. 三种继承方式

  4. 虚继承和虚基类添加链接描述

  5. 函数指针

  6. this指针

  7. 虚函数表指针(类的内存分布一小部分)

  8. 构造函数和析构函数可以是虚函数嘛添加链接描述

  9. OSI七层与TCP/IP五层网络架构详解

  10. TCP 和 UDP 的区别添加链接描述
    添加链接描述
    B站视频详解

  11. C++类内存分布,https://blog.csdn.net/bailang_zhizun/article/details/117124494

  12. 容器时间复杂度

定义一个空类,对该类求sizeof结果为1,因为在声明该类型的实例的时候,必须知道这个类在哪存在,否则无法使用这些实例。至于一个空类占多少内存,由编译器决定,vs中每个空类型的实例占用1字节的空间。
如果在该类型中添加一个构造函数和析构函数,再对其求sizeof还是1,因为你生命一个空类本身就存在默认构造函数和析构函数。
那如果把析构函数声明为虚函数,或者定义一个虚函数,发现再求sizeof变成了4!(在32位的机器上,如果是64位则是8)
原因是C++的编译器一旦发现一个类中有虚函数,就会为该类生成一个虚函数表,并在该类的每一个示实例中添加一个指向虚函数表的指针就是vptr。

类的成员变量和成员函数是分开存储的;
只有 非静态成员变量 才属于类的对象上;

class Person{
public:
int m_A;//非静态成员变量;属于类的对象上
static int m_B;//静态成员变量,不属于类的对象上;(记得类内声明,类外初始化)。
void func(){} //非静态成员函数;不属于类的对象上,//一份就行,//this指针。
static void func2(){};静态成员函数,不属于类的对象上;
}
int Person::m_B=0;//类外初始化;
//使用Perosn 创建一个对象,其sizeof为4;

为什么静态成员变量只能类内声明,内外初始化?

父类中所有非静态成员属性都会被子类继承下去,但是父类的私有属性会被编译器隐藏。子类不能访问而已,但是被继承了;

class Father(){
public :
int m_a;
private:
int m_b;
protected:
int m_c;
};
class son :public Father(){
int m_d;
};
//创建一个子类对象,其sizeof为16=4*4;

类的继承关系和内存分布混合;没看太懂;添加链接描述

  1. 野指针添加链接描述

  2. 指针和引用添加链接描述

  3. 十大排序算法添加链接描述

  4. 线程和进程的区别添加链接描述

  5. struct 和class的区别

默认权限(struct-public, class-private)
是否可用于声明模板(struct不可以, class可以)

  1. 进程之间通信方式添加链接描述添加链接描述

  2. 线程通信方式(互斥量,信号量,条件变量,读写锁)

  3. 互斥量和信号量的区别

  4. 死锁

  5. 内联函数与宏定义的区别添加链接描述

  6. new 和 malloc 区别添加链接描述

  7. 单例模式添加链接描述
    添加链接描述

  8. C++常用设计原则

  9. 构造/析构函数顺序添加链接描述

  10. const 关键字的作用添加链接描述

  11. sizeof ,strlen 和\0
    1、sizeof是一个关键字,而strlen是一个函数。
    2、sizeof求的是字节长度,而strlen求的是实际长度。

int a=1;
sizeof(a)//4
strlen(a)//1

sizeof求的是分配过来的长度,而strlen求的却是实际使用的长度。

比如:char a[30]="abcd";
sizeof(a)=30;而strlen(a)=4;

strlen求的长度是以’\0’结束的。

比如char a[30];strlen(a)的结果是不定的,而sizeof(a)=30;
char a[30]={'a','b','c'};对于strlen来说也是不定的,而sizeof却是30.
  1. extern “C”的作用详解添加链接描述

  2. static 关键字添加链接描述

  3. .单例模式1单例模式2

  4. C++程序编译的四个阶段

  5. 输入URL到页面返回的全过程HTTP协议

  6. HTTPS和公钥,私钥

  7. Map和unoderedmap(hashmap /哈希表in JAVA)的不同

  8. 重载重写重定义

  9. 智能指针

posted on   开源侠  阅读(4)  评论(0编辑  收藏  举报  
相关博文:
阅读排行:
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!
点击右上角即可分享
微信分享提示