面试基础知识-1

2022/12/16参加了一场面试,索性面试官没有问什么技术层面上的难题,但是问了几个基础知识,我也没回答上来,在这里记录一下.
1.并发和并行的区别

对于单核处理器来说,只能在同一时间执行一个任务,比如说在看视频的时候就没办法听音乐,听音乐的时候就没办法看视频.但是为了满足用户的需求,操作系统把每个任务分配了一个时间片,时间片在cpu上交替执行,这就是【并发】,并发看似同时执行许多任务,其实是交替执行.

但是如果是多核处理器,任务就不需要在cpu上抢占时间片也能做到真正的同时进行,这就是【并行】
二者的目标都是最大化cpu的利用率


2.进程和线程的区别

根本区别:
【进程】是操作系统分配资源的基本单位
一个进程拥有的资源有自己的堆、栈、虚存空间(页表)、文件描述符等信息。 从编程的角度来理解进程,可以把它看作是⼀个类或一个 PCB
(Process Control Block)进程控制块的结构体。


【线程】是处理器任务调度和执行的基本单位
线程是操作系统能够进行运算调度的最小单元。它被包含在进程中,是进程中实际运行的单位。一个进程中可以并发多个线程,每个线程执行不同的任务 。

包含关系
一个【进程】至少包含着一个线程,线程是进程的一部分,线程也被称为是轻量级的进程

资源开销
每个【进程】有独立的代码和数据空间,进程之间的地址空间和资源是独立的,进程之间切换开销较大
同一类的【线程】之间共享代码和数据空间(共享进程的堆和方法区资源),共享本进程的地址空间和资源. 所以线程之间切换开销很小,每个线程有自己独立的运行栈和程序计数器,虚拟机栈,本地方法栈等.
进程的创建、销毁和切换的开销都远大于线程。

影响关系
一个进程崩溃后,一般来说不会对其他进程产生影响,但是一个线程如果崩溃会使整个进程都崩溃

执行过程
每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行


3.一个C程序在linux操作系统中运行的全过程
直接编译运行的代码:

$ gcc hello.c -o hello # 编译
$ ./hello # 执行
hello world! # 输出文本

其中经历预处理-编译-汇编-链接四个阶段

预处理阶段(生成.i文件)
1.删除注释
2.完成宏定义的替换(替换#define定义的符号)
3.头文件展开(插入被 #include 指令包含的文件内容)
4.条件编译(确定代码的部分内容是否应该根据一些条件编译指令进行编译)

gcc -E hello.c -o hello.i

编译阶段(生成.s文件)

把C文件编译成为汇编文件(.s),其中进行了词法分析,语法分析,语义分析、生成中间代码、对代码进行优化等工作

gcc -S hello.i -o hello.s

汇编阶段(生成.o文件)
把汇编文件(.s)编译成可重定位文件(.o)

gcc -c hello.s -o hello.o  

链接阶段
链接器把目标文件(重定位文件.o)与所需要的附加的目标文件(如静态链接库、动态链接库)链接起来成为可执行的文件

gcc hello.o -o hello

4.计算机系统由那些部件组成?
计算机系统由软件和硬件组成
其中硬件由中央处理器(CPU),存储器,外部设备组成
存储器:
1.内存(主存)
与CPU直接交换信息
2.外存 (辅存)
磁盘,光盘,磁带
外部设备:
输入设备,输出设备,转换设备,终端设备等
中央处理器(CPU):
CPU由运算器,控制器,寄存器组组成
运算器:
执行所有的算术运算和逻辑运算,
算数逻辑单元ALU
累加寄存器AC
数据缓冲寄存器DR
状态条件寄存器PSW
控制器:
用于控制整个CPU工作,它决定了计算机运行过程的自动化
程序计数器PC
指令寄存器IR
指令编码器ID
地址寄存器AR
寄存器组
寄存器组可以分为两类,一类是专用寄存器,另外一类是通用寄存器。运算器和控制器里面的寄存器都是专用寄存器组,而通用寄存器的用途广泛可以由程序员规定其用途


其中软件由系统软件,应用软件组成
系统软件:
操作系统,编译器


5.面向对象的三个特点
1.封装:
将不同的小对象封装成一个大对象;把一部分内部属性和功能对外界屏蔽
2.继承:
子类自动共享父类数据结构和方法的机制;子类只继承一个父类的数据结构和方法,称为单重继承,子类继承多个父类的数据结构和方法,称为多重继承;继承性使建立的软件具有开放性,可扩充性,简化了对象,类创建的工作量,增加了代码的可重用性
3.多态
指相同的行为可作用于多种类型的对象上并获得不同的结果.不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性.


6.C++关键字
C++关键字

你可能感兴趣的:(工作,面试,c++,linux)