自学内容网 自学内容网

C++_嵌入式开发面试题记录

1.Static关键词的作用?

static 关键字有三个主要作用:

  1. 局部变量:在函数内部,static 局部变量只初始化一次,且在函数调用结束后仍然保留其值。
  2. 全局变量/函数:在文件内部,static 限制全局变量或函数的作用域,使其仅对当前文件可见。
  3. 类成员:在类中,static 成员变量或函数属于类本身而非某个对象,可以不通过对象访问。

好的,我将通过三个简短的代码示例来解释 static 关键字的三个主要作用:

1. 局部变量的 static 作用

在函数内部,static 局部变量的值在多次调用中保持不变,并且只初始化一次。

#include <iostream>
void counter() {
    static int count = 0;  // 只初始化一次
    count++;
    std::cout << "Count: " << count << std::endl;
}

int main() {
    counter();  // 输出 Count: 1
    counter();  // 输出 Count: 2
    counter();  // 输出 Count: 3
}

解释count 是静态局部变量,函数多次调用时,它的值得以保留并累加。

2. 全局变量/函数的 static 作用

使用 static 限制全局变量或函数的作用域,使其只能在定义它的源文件中可见。

// file1.cpp
static int hiddenVar = 10;  // 只能在 file1.cpp 中访问

static void hiddenFunc() {
    std::cout << "This is a static function in file1.cpp" << std::endl;
}

// file2.cpp
// hiddenVar 和 hiddenFunc 在此不可访问

解释hiddenVarhiddenFunc 只能在 file1.cpp 中使用,file2.cpp 无法访问它们。

3. 类成员的 static 作用

static 类成员属于类本身,而不是某个对象,且所有对象共享这一成员。

#include <iostream>
class MyClass {
public:
    static int sharedValue;  // 静态成员变量
    static void display() {  // 静态成员函数
        std::cout << "Shared value: " << sharedValue << std::endl;
    }
};

int MyClass::sharedValue = 42;

int main() {
    MyClass::display();  // 通过类名访问静态成员函数
    MyClass obj1, obj2;
    obj1.sharedValue = 100;
    MyClass::display();  // 输出 Shared value: 100(所有对象共享该值)
}

解释sharedValue 是类的静态成员,所有 MyClass 对象共享这一个变量。

4.指针常量和常量指针

  • 常量指针(Pointer to Constant):指向的值是常量,不能修改这个值,但指针可以指向其他地址。

    • 作用:用来保护指向的数据不被修改。
    const int* ptr;
    
  • 指针常量(Constant Pointer):指针本身是常量,不能改变指向的地址,但可以修改指向的值。

    • 作用:用来确保指针始终指向同一地址。
    int* const ptr;
    

typedef和define有什么区别?
typedef 用于定义类型别名,遵循编译器检查;#define 是预处理宏替换,直接文本替换,无类型检查。

4.野指针是什么

没有初始化的指针,他被随机指向内存中的一块位置

5. C语言中内存分配的方式有几种?

(a)静态存储区分配
内存分配在程序编译之前完成,且在程序的整个运行期间都存在,例如全局变量、静态变量等

(b)栈上分配
在函数执行时,函数内的局部变量的存储单元在栈上创建,函数执行结束时这些存储单元自动释放局部变量、函数内参数都在栈上

(c) 堆上分配
New开辟的空间在堆上

6.说一说指针的理解,二级指针,三级指针等,对函数指针的理解等。

由于c中存在着内存管理的概念,所以指针应运而生,指针是存储内存地址的变量,二级、三级指针分别存储指针的地址,函数指针存储函数的地址并可用于调用函数。

7.简单说说extern、static、const、voliate的作用

extern用于声明外部变量或函数,static用于定义静态变量,比如函数内的局部静态变量,以及限制作用域的全局静态变量,防止其他文件读取,const定义不可修改的常量,可以用于定义常量、定义常量指针、常量形参等,volatile避免编译器优化,直接从内存地址读数据而不是寄存器。

8.简单说说指针的运用场景。

1.动态内存管理
2.函数参数传递
3.数组和字符串操作
4.一些数据结构会用到如链表

9.C++11的语法

10.Linux常用指令

常用Linux指令有:

  • ls 列出目录内容
  • cd 切换目录
  • pwd 显示当前路径
  • cp 复制文件/目录
  • mv 移动或重命名文件/目录
  • rm 删除文件/目录
  • cat 查看文件内容
  • grep 搜索文本
  • chmod 修改权限
  • ps 查看进程
  • top 实时监控系统资源
  • df 查看磁盘使用情况
  • du 查看文件/目录大小
  • ssh 远程登录
  • tar 打包或解包文件

11.简单说说SQL优化和索引结构

SQL优化主要通过减少查询时间和资源消耗实现,常见方法包括:合理使用索引、避免全表扫描、减少子查询、使用连接代替嵌套查询等。

索引结构常见的有两种:

  • B+树索引:用于快速查找范围查询、排序,适合大部分场景。
  • 哈希索引:用于精确匹配查询,但不支持范围查询。

索引能加快查询速度,但要避免过多索引影响写操作性能。

12. 简单说说多线程

C++多线程通过标准库中的<thread>实现,允许并发执行多个线程。常用功能包括:

  • std::thread:创建和管理线程。
  • 同步机制:使用mutexlockcondition_variable等避免数据竞争和死锁,确保线程安全。
  • joindetachjoin让主线程等待子线程完成,detach使线程独立执行。
  • 线程池:可以通过async或第三方库创建线程池,提升并发效率。

多线程用于加速计算、处理I/O密集型任务、或实现并行数据处理。

13. 简单说说重写和重载

重写(Override)是子类重新定义父类的虚函数,保持函数签名一致,实现多态。

重载(Overload)是同一作用域内定义多个同名函数,通过不同参数类型或数量区分调用。

14.说说C++中的虚函数和纯虚函数

虚函数是通过virtual关键字声明的函数,允许子类重写以实现运行时多态。调用时根据对象的实际类型选择合适的函数版本。

纯虚函数= 0)是没有实现的虚函数,要求子类必须重写,声明类为抽象类,不能直接实例化。

15. 一个程序从开始运行到结束的完整过程(四个过程)

预处理(Pre-Processing)、编译(Compiling)、汇编(Assembling)、链接(Linking)

16. 计算机中,32bit与64bit有什么区别

64bit计算主要有两大优点:可以进行更大范围的整数运算;可以支持更大的内存寻址。

17. Linux 操作系统关机、重启相关命令

关机:shutdown now 或 poweroff
重启:reboot 或 shutdown -r now
取消关机:shutdown -c

1、改变文件属性的命令:chmod (chmod 777 /etc/squid 运行命令后,squid文件夹(目录)的权限就被修改为777(可读可写可执行))

2、查找文件中匹配字符串的命令:grep

3、查找当前目录:pwd

4、删除目录:rm -rf 目录名

5、删除文件:rm 文件名

6、创建目录(文件夹):mkdir

7、创建文件:touch

8、vi和vim 文件名也可以创建

9、解压:tar -xzvf 压缩包

  打包:tar -cvzf 目录(文件夹)

18.说一个linux下编译优化选项:

加:-o


原文地址:https://blog.csdn.net/qq_39969848/article/details/142831792

免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!