学逆向论坛

找回密码
立即注册

只需一步,快速开始

发新帖

518

积分

0

好友

64

主题
发表于 昨天 14:30 | 查看: 27| 回复: 0
华为od c++技术一面

static关键字的作用
  • 静态局部变量:在函数内部声明的static变量,该变量只初始化一次,并在函数调用之间保持其值。
  • 静态类成员变量:在类定义中声明的static变量,该变量为类的所有对象共享,不属于任何单个实例。
  • 静态类成员函数:在类定义中声明的static函数,该函数不需要通过对象来调用,也无法访问类的非静态成员。
  • 静态全局变量:在文件作用域内声明的static变量,其作用域限制在声明它的文件内,其他文件不能访问。
  • 静态局部变量(在文件作用域内):在文件作用域内声明的static变量具有全局寿命,但其链接属性是内部的,意味着它只在定义它的文件中可见。

static底层怎么实现让其他文件无法访问。
在底层实现中,当一个全局变量或函数前面加上static关键字时,编译器会给这个符号分配“内部链接”属性。这意味着该符号的名字在其定义的翻译单元(通常是一个源文件)之外是不可见的,从而其他的文件或翻译单元无法通过该名字访问到这个符号。链接器在处理不同翻译单元时不会将这类具有内部链接属性的符号进行外部链接。这就实现了static关键字限制访问范围的功能。

对多态的理解
多态是面向对象编程中的一个核心概念,它允许不同的对象对同一消息作出响应。在C++中,多态主要通过虚函数(virtual functions)实现。它有两种形式:
  • 编译时多态(静态多态):通过函数重载和操作符重载实现,编译器根据函数签名或操作符的不同,选择调用哪个特定的函数。
  • 运行时多态(动态多态):通过虚函数和继承实现。基类声明虚函数,派生类可重写这些虚函数。调用哪个重写的方法由对象的实际类型决定,这个决定是在运行时做出的。这使得代码更加灵活和可扩展。

还有没有除了虚函数以外的多态形式
模板(Templates)的多态,通常称为参数多态或编译时多态。
重载的理解
重载是指在同一作用域内存在多个同名函数,但这些函数的参数类型、个数或顺序至少有一项不同。编译器根据函数调用时提供的参数来决定调用哪个函数。在C++中,可以重载函数和操作符。重载使得函数名可以根据不同的参数类型执行不同的任务,提高了代码的可读性和重用性。

重载在编译之后怎么知道用的是哪个函数。
在编译时,编译器根据每个重载函数的参数列表对函数名进行名称修饰(或名称矫正),生成独一无二的函数标识符。这个过程称为名称重整。因此,即使多个函数具有相同的基本名称,编译后它们也会有唯一的标识符。函数调用时,编译器根据传递的参数类型和数量,解析到对应的具有正确签名的函数。

动态链接和静态链接的区别
静态链接是指在编译时,将所有用到的库函数的代码复制到最终的可执行文件中,形成一个独立的二进制文件。而动态链接是指在程序运行时,才从共享库中加载函数代码,共享库不会被复制到可执行文件中。静态链接生成的文件体积较大,但是不依赖外部库;动态链接生成的文件体积较小,运行时需要确保相应的库在系统中可用。

动态链接是怎么在链接库中找到需要的函数的。
动态链接使用动态链接器,根据程序中未解析的符号和库名,到动态链接库文件中查询符号表,从而找到需要的函数的具体地址,并进行地址绑定,完成函数调用。

对操作系统的理解
操作系统是管理计算机硬件资源的软件,它提供了应用程序运行的环境和接口。操作系统负责调度任务、管理内存、处理输入输出、文件系统管理等。它作为用户和计算机硬件之间的桥梁,使得用户可以更方便地使用计算机资源。

怎么理解信号
信号是操作系统发送给程序的一种简单消息,用于通知程序发生了某种事件,如非法操作、外部中断等。程序可以预设处理函数来响应特定信号,实现对这些事件的自定义处理或恢复操作。

信号的底层实现
信号的底层实现涉及操作系统内核的中断处理机制。当系统发生特定事件时,内核会中断当前进程,将控制权转移到内核中的信号处理例程。该例程确定信号的类型,并根据进程注册的处理函数或默认行为来处理信号,然后将控制权返回给进程,继续执行或执行信号处理函数。

和QT的信号与槽是类似的概念吗
操作系统中的信号是关于进程间通信和异常处理的机制,是由操作系统内核管理的;而QT的信号与槽是一种应用层的编程模式,主要用于对象之间的事件通信,是QT框架提供的一种机制来简化事件驱动编程。

对设计模式的理解
设计模式是软件工程中经过验证的解决特定问题的可复用方案。

用过哪些设计模式
创建型模式:
  • 工厂方法
  • 抽象工厂
  • 建造者
  • 原型
  • 单例
结构型模式:
  • 适配器
  • 桥接
  • 组合
  • 装饰器
  • 外观
  • 享元
  • 代理
行为型模式:
  • 责任链
  • 命令
  • 解释器
  • 迭代器
  • 中介者
  • 备忘录
  • 观察者
  • 状态
  • 策略
  • 模板方法
  • 访问者

详细讲一种熟悉的设计模式
责任链模式是一种行为设计模式,允许多个对象处理一个请求,将这些对象连成一条链,并沿着这条链传递请求,直到其中一个对象处理它为止。在C++中使用责任链模式可以增加新的处理类而不影响现有的代码逻辑,实现请求处理对象的解耦。

深拷贝和浅拷贝
浅拷贝仅复制对象的指针、引用或其他句柄等非资源属性,所有拷贝对象共享一份实际数据。深拷贝复制对象所有的数据,包括指向的动态分配内存,每个拷贝对象都有独立的数据副本。

默认的拷贝构造函数是深拷贝还是浅拷贝,为什么
默认的拷贝构造函数执行的是浅拷贝,因为它只复制对象的各个成员的值,对于指针成员,仅复制指针的值而不复制指针所指向的数据。如果成员包含指向动态分配内存的指针,那么多个对象可能会指向相同的资源。

怎么实现深拷贝
  • 定义拷贝构造函数:在拷贝构造函数中,为对象中的每个需要深拷贝的成员分配新的内存,并复制原对象相应成员的内容。
  • 定义赋值运算符:和拷贝构造函数类似,首先释放现有对象中需要深拷贝成员的内存(如果有的话),然后为这些成员分配新的内存,并复制赋值对象对应成员的内容。
  • (可选)定义析构函数:确保在对象生命周期结束时,为深拷贝分配的动态内存得到释放,以避免内存泄漏。

顺便吆喝一句,如果有在看机会的朋友,感兴趣可以看看,技术大厂,前后端测试捞人,待遇给的还可以!



温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的认可,还可以获得学币奖励,请尊重他人的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。

小黑屋|手机版|站务邮箱|学逆向论坛 ( 粤ICP备2021023307号 )|网站地图

GMT+8, 2025-2-28 00:13 , Processed in 0.143918 second(s), 34 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表