Python面试之睿智融科售前策略工程师(二面)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/m0_37338590/article/details/83022414

之前的一面就不在说了,水的很,具体来说说二面的问题:

1、介绍一下linux常用命令:

参看:Linux 命令大全 | 菜鸟教程

2、介绍一下vi常用操作键:

后续补充

3、为什么Python没有多线程:

Python中的多线程没有真正实现多现程! 为什么这么说,我们了解一个概念,全局解释器锁(GIL)。

Python代码的执行由Python虚拟机(解释器)来控制。

Python在设计之初就考虑要在主循环中,同时只有一个线程在执行,

就像单CPU的系统中运行多个进程那样,内存中可以存放多个程序,

但任意时刻,只有一个程序在CPU中运行。

同样地,虽然Python解释器可以运行多个线程,只有一个线程在解释器中运行。

对Python虚拟机的访问由全局解释器锁(GIL)来控制,正是这个锁能保证同时只有一个线程在运行。在多线程环境中,Python虚拟机按照以下方式执行。

1.设置GIL。

2.切换到一个线程去执行。

3.运行。

4.把线程设置为睡眠状态。

5.解锁GIL。

6.再次重复以上步骤。

 python 每执行100个字节码,GIL锁就会解锁一次,让其它线程执行,所以,python多线程环境,是交替执行,上下文切换,并没有同一时刻执行代码.

4、线程和进程的区别和联系,死锁的概念、如何避免死锁:

      区别和联系参见:Python数据分析师面试之“完美世界”数据分析师实习生

      根据操作系统中的定义:死锁是指在一组进程中的各个进程均占有不会释放的资源,但因互相申请被其他进程所站用不会释放的资源而处于的一种永久等待状态。

     死锁的四个必要条件:
             互斥条件(Mutual exclusion):资源不能被共享,只能由一个进程使用。
             请求与保持条件(Hold and wait):已经得到资源的进程可以再次申请新的资源。
             非剥夺条件(No pre-emption):已经分配的资源不能从相应的进程中被强制地剥夺。
             循环等待条件(Circular wait):系统中若干进程组成环路,该环路中每个进程都在等待相邻进程正占用的资源。

       避免死锁的办法就是针对产生死锁的四个必要条件来,例如:

               破坏循环等待条件:对系统中的所有资源类型进行线性排序,然后规定每个进程必须按序列号递增的顺序请求资源。假如进程请求到了一些序列号较高的资源,然后又请求一个序列较低的资源时,必须先释放相同和更高序号的资源后才能申请低序号的资源。多个同类资源必须一起请求。

                破坏不可抢占条件:当一个已经保持了某种不可抢占资源的进程,提出新资源请求不能被满足时,它必须释放已经保持的所有资源,以后需要时再重新申请。

5、计算机网络相关的面试问题:

       简单的介绍utp和tcp两种通信协议区别:

           utp特点:1)面向无连接(UDP在传输数据报前不用在客户端和服务端之间建议连接),2)每个数据包大小限制在64k内(UTP发送数据是将数据分解成多个包进行发送); 3)UTP不提供可靠性(因为是面向无连接);4)传输速度快(因为不需要建立连接)

           tcp特点:1)当客户端与服务端进行交互数据前,必须先在彼此之间建立 一个TCP连接,之后再传输数据。2)TCP提供可靠性,提供数据超时重发,筛选丢弃重复数据,检验数据,流量控制等功能。

       TCP/IP五层协议和OSI的七层协议对应关系如下:

        

             

猜你喜欢

转载自blog.csdn.net/m0_37338590/article/details/83022414