#简答 技术面

发布于:2024-07-06 ⋅ 阅读:(179) ⋅ 点赞:(0)

1. C和C++有哪些区别

面向对象

C支持面向过程编程。
C++支持面向对象编程(OOP),如类和对象,继承,多态等。

面向对象:面向对象编程就是把问题分解成各个对象,建立对象的目的不是为了完成一个步骤,而是为了描述某个事物在整个解决问题的步骤中的行为。

面向过程:面向过程编程就是分析出解决问题的步骤,然后把这些步骤一步一步的实现,使用的时候一个一个的依次调用就可以了。

 

虽然C语言不直接支持面向对象编程,但通过结构体和函数指针的组合,可以实现类似于面向对象的特性,如类和封装、继承和多态。这种方式在某些嵌入式系统编程中比较常见)

1.用结构体表示类,并在其中包含数据成员和函数指针。

2.继承可以通过在结构体中嵌套另一个结构体来实现。

3.多态性可以通过函数指针来模拟。》

 

标准库

C++的标准库比C的丰富得多,包括STL(标准模板库)


函数重载和模板

C++支持函数重载和模板,而C不支持。

命名空间

C++有命名空间(namespace)机制,C没有。

异常处理

C++有异常处理机制,C没有

 

2. C和C++中内存分为哪些区域
堆(Heap
栈(Stack)
全局/静态区(Global/Static Area
常量区(Constant Area)
代码区(Code Area)

3. 分别存放什么东西
堆: 动态分配的内存,如`malloc`(C)或`new`(C++)。
栈: 局部变量和函数调用信息。
全局/静态区: 全局变量和静态变量。
常量区: 字符串常量和其他常量。
代码区: 程序的机器指令。

4. 什么是内存泄露
内存泄露是指程序在动态分配内存后没有释放,导致内存一直被占用且不可用。

5. 怎么样避免内存泄露

使用智能指针(如`std::unique_ptr`和`std::shared_ptr`)。
养成良好的编码习惯,确保每次分配内存后及时释放。
使用工具如Valgrind来检测内存泄露。

6.Volatile关键字
volatile`关键字告诉编译器该变量可能会被程序外部修改,编译器不应优化对它的读写操作。

7. 如果不用的话,他有可能从什么地方读

如果不使用`volatile`,编译器可能会优化代码,导致程序从寄存器中读取旧值而不是从内存中读取最新值。

8. Sizeof,作用于数组,作用于指针呢
对数组,`sizeof`返回数组的总字节数。
对指针,`sizeof`返回指针本身的大小(在64位系统上通常是8字节)

9. 64位的一个int,我要获取他的第23位
   - 使用位操作:`(num >> 23) & 1`。

10. **共用体和结构体的区别**
    - **共用体**: 所有成员共享同一块内存,修改一个成员会影响其他成员。
    - **结构体**: 每个成员有自己独立的内存。

11. C++中修饰可访问性的关键字

public`, `protected`, `private`

12. Static关键字
    - **静态变量**: 变量的生命周期贯穿程序始终。
    - **静态函数**: 只能在定义它的文件中访问。

13. **性能优化在你项目中有没有体现**
    - 具体举例说明你在项目中做过的性能优化,比如算法优化、内存管理、并行计算等。

14. **编译步骤**
    - **预处理**: 宏展开,文件包含等。
    - **编译**: 生成汇编代码。
    - **汇编**: 生成目标代码。
    - **链接**: 生成可执行文件。

15. **在一个函数A中调用函数B,怎么知道调用完B之后返回函数A**
    - 通过函数调用栈,函数A的返回地址被保存,当函数B执行完后,控制权回到函数A。

16. Linux常用命令
 `ls`, `cd`, `cp`, `mv`, `rm`, `chmod`, `ps`, `grep`, `find`, `tar`, `gzip`

17. Chmod后面的三个数字分别代表什么

用户(user), 组(group), 其他人(others)的权限。

18. 查看文件的前n行
`head -n <number> <file>`

19. 当前脚本窗口关掉之后,怎么让这个脚本在后台执行

默认情况下,当退出一个终端会话时,终端会发送一个 HUP(hangup)信号给所有在该会话中启动的进程,这通常会导致这些进程终止
,所以可以使用`nohup <command> &。其中&用于将该命令放到后台运行。

 

20. 获取单向链表的倒数第n个节点
使用双指针法,一个指针先走n步,然后两个指针一起走,直到前面的指针到达末尾。

21. 二叉树的怎么进行层序遍历
使用队列来实现,先将根节点入队,然后不断出队,并将其子节点入队。

 

 

 


网站公告

今日签到

点亮在社区的每一天
去签到