主题:最新大厂C++面试真题合集,大厂面试百日冲刺 day4
华为 c++技术一面
static关键字的作用
static底层怎么实现让其他文件无法访问。
在底层实现中,当一个全局变量或函数前面加上static关键字时,编译器会给这个符号分配“内部链接”属性。这意味着该符号的名字在其定义的翻译单元(通常是一个源文件)之外是不可见的,从而其他的文件或翻译单元无法通过该名字访问到这个符号。链接器在处理不同翻译单元时不会将这类具有内部链接属性的符号进行外部链接。这就实现了static关键字限制访问范围的功能。
对多态的理解
多态是面向对象编程中的一个核心概念,它允许不同的对象对同一消息作出响应。在C++中,多态主要通过虚函数(virtual functions)实现。它有两种形式:
还有没有除了虚函数以外的多态形式
模板(Templates)的多态,通常称为参数多态或编译时多态。
重载的理解
重载是指在同一作用域内存在多个同名函数,但这些函数的参数类型、个数或顺序至少有一项不同。编译器根据函数调用时提供的参数来决定调用哪个函数。在C++中,可以重载函数和操作符。重载使得函数名可以根据不同的参数类型执行不同的任务,提高了代码的可读性和重用性。
重载在编译之后怎么知道用的是哪个函数。
在编译时,编译器根据每个重载函数的参数列表对函数名进行名称修饰(或名称矫正),生成独一无二的函数标识符。这个过程称为名称重整。因此,即使多个函数具有相同的基本名称,编译后它们也会有唯一的标识符。函数调用时,编译器根据传递的参数类型和数量,解析到对应的具有正确签名的函数。
动态链接和静态链接的区别
静态链接是指在编译时,将所有用到的库函数的代码复制到最终的可执行文件中,形成一个独立的二进制文件。而动态链接是指在程序运行时,才从共享库中加载函数代码,共享库不会被复制到可执行文件中。静态链接生成的文件体积较大,但是不依赖外部库;动态链接生成的文件体积较小,运行时需要确保相应的库在系统中可用。
动态链接是怎么在链接库中找到需要的函数的。
动态链接使用动态链接器,根据程序中未解析的符号和库名,到动态链接库文件中查询符号表,从而找到需要的函数的具体地址,并进行地址绑定,完成函数调用。
对操作系统的理解
操作系统是管理计算机硬件资源的软件,它提供了应用程序运行的环境和接口。操作系统负责调度任务、管理内存、处理输入输出、文件系统管理等。它作为用户和计算机硬件之间的桥梁,使得用户可以更方便地使用计算机资源。
怎么理解信号
信号是操作系统发送给程序的一种简单消息,用于通知程序发生了某种事件,如非法操作、外部中断等。程序可以预设处理函数来响应特定信号,实现对这些事件的自定义处理或恢复操作。
信号的底层实现
信号的底层实现涉及操作系统内核的中断处理机制。当系统发生特定事件时,内核会中断当前进程,将控制权转移到内核中的信号处理例程。该例程确定信号的类型,并根据进程注册的处理函数或默认行为来处理信号,然后将控制权返回给进程,继续执行或执行信号处理函数。
和QT的信号与槽是类似的概念吗
操作系统中的信号是关于进程间通信和异常处理的机制,是由操作系统内核管理的;而QT的信号与槽是一种应用层的编程模式,主要用于对象之间的事件通信,是QT框架提供的一种机制来简化事件驱动编程。
对设计模式的理解
设计模式是软件工程中经过验证的解决特定问题的可复用方案。
用过哪些设计模式
创建型模式:
结构型模式:
行为型模式:
详细讲一种熟悉的设计模式
责任链模式是一种行为设计模式,允许多个对象处理一个请求,将这些对象连成一条链,并沿着这条链传递请求,直到其中一个对象处理它为止。在C++中使用责任链模式可以增加新的处理类而不影响现有的代码逻辑,实现请求处理对象的解耦。
深拷贝和浅拷贝
浅拷贝仅复制对象的指针、引用或其他句柄等非资源属性,所有拷贝对象共享一份实际数据。深拷贝复制对象所有的数据,包括指向的动态分配内存,每个拷贝对象都有独立的数据副本。
默认的拷贝构造函数是深拷贝还是浅拷贝,为什么
默认的拷贝构造函数执行的是浅拷贝,因为它只复制对象的各个成员的值,对于指针成员,仅复制指针的值而不复制指针所指向的数据。如果成员包含指向动态分配内存的指针,那么多个对象可能会指向相同的资源。
怎么实现深拷贝
顺便吆喝一句,如果有在看机会的朋友,感兴趣可以看看,技术大厂,前后端测试捞人,待遇给的还可以!