秋招面经总结(一)

秋招面经总结(一)@TOC

1.编译型语言和解释型语言

答:主要区别在于,前者源程序编译后即可在该平台运行,后者是在运行期间才编译。所以前者运行速度快,后者跨平台性好。

编译型语言

   使用专门的编译器,针对特定的平台,将高级语言源代码一次性的编译成可被该平台硬件执行的机器码,并包装成该平台所能识别的可执行性程序的格式。

特点

 	在编译型语言写的程序执行之前,需要一个专门的编译过程,把源代码编译成机器语言的文件,如exe格式的文件,以后要再运行时,直接使用编译结果即可,如直接运行exe文件。因为只需编译一次,以后运行时不需要编译,所以编译型语言执行效率高。

总结

1.一次性的编译成平台相关的机器语言文件,运行时脱离开发环境,运行效率高;
2.与特定平台相关,一般无法移植到其他平台;
3.现有的C、C++、Objective等都属于编译型语言。

解释型语言

使用专门的解释器对源程序逐行解释成特定平台的机器码并立即执行。是代码在执行时才被解释器一行行动态翻译和执行,而不是在执行之前就完成翻译。

特点

解释型语言不需要事先编译,其直接将源代码解释成机器码并立即执行,所以只要某一平台提供了相应的解释器即可运行该程序。

总结

1.解释型语言每次运行都需要将源代码解释称机器码并执行,效率较低;
2.只要平台提供相应的解释器,就可以运行源代码,所以可以方便源程序移植;
3.Python等属于解释型语言。

2.编译过程包括哪几个主要阶段及每个阶段的功能

词法分析阶段:读入源程序,对构成源程序的字符流进行扫描和分解,识别出单词;
语法分析阶段:机器通过词法分析,将单词序列分解成不同的语法短语,确定整个输入串能够构成语法上正确的程序;
语义分析阶段:检查源程序上有没有语义错误,在代码生成阶段收集类型信息;
中间代码生成阶段:在进行了上述的语法分析和语义分析阶段的工作之后,有的编译程序将源程序变成了一种内部表示形式;
代码优化:这一阶段的任务是对前一阶段产生的中间代码进行变换或进行改造,目的是使生成的目标代码更为高效,即省时间和省空间;
目标代码生成:这一阶段的任务是把中间代码变换成特定机器上的绝对指令代码或可重定位的指令代码或汇编指令代码

3.进程、线程和协程之间的区别:

1、进程是资源分配的单位
2、线程是操作系统调度的单位
3、进程切换需要的资源很大,效率很低
4、线程切换需要的资源一般,效率一般
5、协程切换任务资源很小,效率高
6、多进程、多线程根据CPU核数不一样可能是并行的,但是协程是在一个线程中,所以只能是并发

4.进程有哪几种状态

创建状态:进程正在被创建,尚未到达就绪状态
就绪状态:进程已处于准备运行状态,即进程获得了除了处理器之外的一切所需资源,一旦得到处理器资源(处理器分配的时间片)即可运行
运行状态:进程正在处理器上运行(单核CPU下任意时刻只有一个进程处于运行状态)
阻塞状态:又称为等待状态,进程正在等待某一事件而暂停运行如等待某资源为可用或等待IO操作完成。即使处理器空闲,该进程也不能运行。
结束状态:进程正在从系统中消失。可能是进程正常结束或其他原因中断退出运行。

5.进程间的通信方式

1、管道匿名管道:用于具有亲缘关系的父子进程间或兄弟进程之间的通信
2、有名管道:匿名管道由于没有名字,只能用于亲缘关系的进程间通信。为了客服这个缺点,提出了有名管道。有名管道严格遵循先进先出。有名管道以磁盘文件的方式存在,可以实现本机任意两个进程通信。
3、信号:信号是一种比较复杂的通信方式,用于通知接收进程某个事件已经发生
4、消息队列:消息队列是消息的链表,具有特定的格式,存放在内存中并由消息队列标识符标识。管道和消息队列的通信数据都是先进先出的原则。与管道(无名管道:只存在于内存的文件中;命名管道:存在于实际的磁盘介质或者文件系统)不同的是消息队列存放在内核中,只有在内核重启(即,操作系统重启)或者显示地删除一个消息队列时,该消息队列才会被真正的删除。消息队列可以实现消息的随机查询,消息不一定要以先进先出的次序读取,也可以按消息的类型读取,比FIFO更有优势。消息队列克服了信号承载信息量少,管道只能承载无格式字节流以及缓冲区大小受限等缺点。
5、信号量:信号量是一个计数器,用于多进程对共享数据的访问,信号量的意图在于进程间同步。这种通信方式主要用于解决与同步相关的问题并避免竞争关系。
6、共享内存:使得多个进程可以访问同一块内存空间,不同进程可以及时看到对方进程对共享内存中数据的更新,这种方式需要依靠某种同步操作,如互斥锁和信号量等。可以说是这是最有用的进程间通信方式。
7、套接字:此方法主要用于在客户端和服务端之间通过网络进行通信。套接字是支持TCP/IP的网络通信的基本操作单元,可以看做是不同主机之间的进程进行双向通信的端点,简单地说就是通信的两方的一种约定,用套接字中的相关函数来完成通信过程。

猜你喜欢

转载自blog.csdn.net/hitxqy/article/details/107412218
今日推荐