0
点赞
收藏
分享

微信扫一扫

C++系统研发工程师面试知识储备(一)

Go_Viola 2022-03-26 阅读 32
c++面试

C++系统研发工程师面试知识储备(一)

一、基本语言知识点

(一)编译型语言和解释型语言

  1. 编译型语言首先是将源代码编译生成机器指令,再由机器运行机器码(二进制)(C、C++)

    (1)优点: 执行速度快、效率高
    (2)缺点: 编译之后如果需要修改就需要整个模块重新编译。编译的时候根据对应的运行环境生成机器码,跨平台性差

  2. 解释型语言的源代码不会直接翻译成机器指令,而是先生成中间代码,再由解释器对中间代码解释运行。在运行的时候才将源程序翻译成机器码,翻译一句,然后执行一句,直至结束。( JavaScript、Python)
    (1) 优点:有良好的平台兼容性,
    (2) 缺点:执行速度慢、效率低

(二)强类型语言和弱类型语言

1、强类型语言也称为强类型定义语言。(C++、Java)

  • 是一种总是强制类型定义的语言,要求变量的使用要严格符合定义,所有变量都必须先定义后使用。一个已经被指定了数据类型的变量,除非是经过强制类型转换,否则无法被赋值为其他类型的数据

2、弱类型语言也称为弱类型定义语言。(Python)

  • 与强类型定义相反。变量会自适应地去匹配数据类型

(三)动态类型语言和静态类型语言

  1. 动态类型语言是指在运行期间才去做数据类型检查的语言,不是在编译阶段决定的,把类型绑定延后到了运行阶段。(Python)
  2. 静态类型语言的数据类型是在编译期间确定的,或者说运行之前确定的,编写代码的时候要明确确定变量的数据类型。(C、C++、Java)

(四)动态语言和静态语言

  1. 动态语言:程序在运行时可以改变其结构:新的函数可以被引进,已有的函数可以被删除等,在结构上的变化。(Python)
  2. 静态语言:与动态语言相对,在程序运行时,结构不能发生改变。(C、C++、Java)

(五)C++、 java、 python从语言特性上的区别

  1. C++、Java和Python都是面向对象的编程语言。
  2. C++是编译型语言,Java、Python是解释性语言
  3. C++和Java都是强类型语言、静态类型语言,而Python是一种弱类型语言、动态类型。
  4. C++更接近于底层,方便直接操作内存。运行时间快。
  5. Java和C++相比使用更多的内存所以占用的内存就更大,启动时间慢
  6. Python是一种解释型的语言,比编译型语言的速度慢很多。python是动态型的语言,错误仅仅是在运行的时候展示的。比较容易学习,语法很简单,融入了很多现代编程语言的特性。python的库非常丰富,可以迅速地开发程序。
    C++和Java的区别

(六)C++和C的区别

  1. 设计思想:
    (1)C++是面向对象的语言
    首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出
    (2) C是面向过程的结构化编程语言
    设计时首先要考虑的是如何通过一个过程,对输入进行运算处理后得到输出
  2. 语法:C++具有封装、继承和多态三种特性;C++比C多了一些类型安全的功能,比如强制类型转换;C++支持范式编程,比如模板类、函数模板等

(七)C++编译过程

  1. 第一步:编译:把文本形式的源代码翻译成机器语言,并形成目标文件

    (1) 预处理:做些代码文本替换工作。编译器执行预处理指令(以#开头,例如#include),这个过程会得到不包含#指令的.i文件。这个过程会拷贝#include 包含的文件代码,进行#define 宏定义的替换 , 处理条件编译指令 (#ifndef #ifdef #endif)等。
    (2) 编译:通过预编译输出的.i文件中,只有常量:数字、字符串、变量的定义,以及c语言的关键字:main、if、else、for、while等。这阶段要做的工作主要是,通过语法分析和词法分析,确定所有指令是否符合规则,之后翻译成汇编代码。这个过程将.i文件转化位.s文件。
    (3)汇编:把汇编语言代码翻译成目标机器指令,生成目标文件(.o文件、.obj文件)。此过程会依赖机器的硬件和操作系统环境

  2. 第二步:链接:链接程序的主要工作就是将有关的目标文件连接起来。这个过程将.o文件转化成可执行的文件。
    (1) 静态链接

(2)动态链接

举报

相关推荐

0 条评论