C++系统研发工程师面试知识储备(一)
一、基本语言知识点
(一)编译型语言和解释型语言
-
编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)(C、C++)
(1)优点: 执行速度快、效率高
(2)缺点: 编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,跨平台性差 -
解释型语言的源代码不会直接翻译成机器指令,而是先生成中间代码,再由解释器对中间代码解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。( JavaScript、Python)
(1) 优点:有良好的平台兼容性,
(2) 缺点:执行速度慢、效率低
(二)强类型语言和弱类型语言
1、强类型语言也称为强类型定义语言。(C++、Java)
- 是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。一个已经被指定了数据类型的变量,除非是经过强制类型转换,否则无法被赋值为其他类型的数据
2、弱类型语言也称为弱类型定义语言。(Python)
- 与强类型定义相反。变量会自适应地去匹配数据类型
(三)动态类型语言和静态类型语言
- 动态类型语言是指在运行期间才去做数据类型检查的语言,不是在编译阶段决定的,把类型绑定延后到了运行阶段。(Python)
- 静态类型语言的数据类型是在编译期间确定的,或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。(C、C++、Java)
(四)动态语言和静态语言
- 动态语言:程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等,在结构上的变化。(Python)
- 静态语言:与动态语言相对,在程序运行时,结构不能发生改变。(C、C++、Java)
(五)C++、 java、 python从语言特性上的区别
- C++、Java和Python都是面向对象的编程语言。
- C++是编译型语言,Java、Python是解释性语言
- C++和Java都是强类型语言、静态类型语言,而Python是一种弱类型语言、动态类型。
- C++更接近于底层,方便直接操作内存。运行时间快。
- Java和C++相比使用更多的内存所以占用的内存就更大,启动时间慢
- Python是一种解释型的语言,比编译型语言的速度慢很多。python是动态型的语言,错误仅仅是在运行的时候展示的。比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序。
(六)C++和C的区别
- 设计思想:
(1)C++是面向对象的语言
首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出
(2) C是面向过程的结构化编程语言
设计时首先要考虑的是如何通过一个过程,对输入进行运算处理后得到输出 - 语法:C++具有封装、继承和多态三种特性;C++比C多了一些类型安全的功能,比如强制类型转换;C++支持范式编程,比如模板类、函数模板等
(七)C++编译过程
-
第一步:编译:把文本形式的源代码翻译成机器语言,并形成目标文件
(1) 预处理:做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include),这个过程会得到不包含#指令的.i文件。这个过程会拷贝#include 包含的文件代码,进行#define 宏定义的替换 , 处理条件编译指令 (#ifndef #ifdef #endif)等。
(2) 编译:通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。这个过程将.i文件转化位.s文件。
(3)汇编:把汇编语言代码翻译成目标机器指令,生成目标文件(.o文件、.obj文件)。此过程会依赖机器的硬件和操作系统环境 -
第二步:链接:链接程序的主要工作就是将有关的目标文件连接起来。这个过程将.o文件转化成可执行的文件。
(1) 静态链接
(2)动态链接