目录
八、easy_install 和 pip install的区别
二十八、Python中append,insert和extend的区别
一、项目开发流程
二、什么是MRO
所谓的MRO,就是方法解析顺序在调用方法时,会对当前类以及所有的基类进行一个搜索,确定要调用的方法具体在哪。不管用哪种方式去确定MRO列表,必须满足 本地优先级和单调性。
本地优先级:指声明时父类的顺序,比如C(A,B),如果访问C类对象属性时,应该根据声明顺序,优先查找A类,然后再查找B类
单调性:如果在C的解析顺序中,A排在B的前面,那么在C的所有子类里,也必须满足这个顺序
三、mro=深度优先遍历的
正常继承模式 没有任何问题。。。
菱形继承模式 就有问题。。
比如说C重写了D中的test()方法,A在调用test()时,按照MRO顺序调用的是D中的test,此时C中重写的test()方法将永远访问不到,导致了C只能继承不能重写D中的方法(即使C重写了test()方法也不会访问到),这就是DFS的缺陷。
四、mro=广度优先遍历的(BFS)
正常继承模式 有问题
比如说 C D中都有test()方法,A中调用test()按照MRO顺序 调用到了C中的test(),这显然是不正确的,因为先从B开始搜索 B中虽然没有 但是B的父类D中有,正常应该调用D中的test()。所以如果采用BFS时,正常继承模式 不满足前边说的单调性。。
菱形继承模式 没有问题,解决了DFS菱形继承带来的问题
五、C3算法
在python3中,所有的类都是新式类,继承顺序遵循广度优先的C3算法
C3算法的规则如下:
每一个类的继承顺序都是从父类向子类看
形成一个指向关系的顺序[当前类]+[父类的继承顺序]
如果一个类出现在从左到右的第一个顺序上并且没有出现在后面顺序中或者出现在后面的顺序中但是仍然是第一顺序,那么就把这个类提取出来
六、猴子补丁
猴子补丁是一种在运行时动态更新代码行为的技术。这种技术之所以“无耻”,是因为可以在不改变原有库的情况下,改变了库的行为,甚至可以扩展库的功能
猴子补丁合适的使用场景:
我们正在处理来自其他人的写的公共代码,优化了一个小的实现,我们目前不想对其源码进行修改(因为其他人还有可能在用这些代码,或者其他版本中有可能用到),我可以将这个补丁放在自己的代码中,即保证了功能的实现,也不影响别人实现
我们正在处理来自其他人的遗留代码或代码,我们不想对其进行广泛修改,但仍然希望使其与不同版本的库或环境一起运行,这非常有用。
七、胶水语言
胶水语言,是用来连接软件组件的程序设计语言,通常指脚本语言。
胶水语言”一词本身没有褒贬性。就算有,在编程界里,那也是多功能性的一种表述。胶水与库数量无关。胶水语言是用来写胶水代码。胶水代码用于连接多个小的甚至不兼容的部件,整合不同的库或代码,也就是通用型脚本语言。胶水代码本身不实现需求。如果一段比较“胶水”的代码实现了需求或带有功能,通常会称其为组件。
我们可以把编程语言分为两大类:脚本语言和非脚本语言。做个简单的对比,非脚本语言通常用来编写稳定、高效的模块,而脚本语言则用来将这些模块组合起来。
八、easy_install 和 pip install的区别
easy_install是早期python使用的是默认安装工具
1.安装的方法是从pypi中下载包
2.版本管理:它对于版本管理相对较弱,对于多个版本之间的控制没有很好的解决办法
3.全局安装:在默认情况下,安装的软件包安装在python环境中
pip install
他对于easy_install易用性和功能上做了一些改动
1.安装方式:他也是在pypi中下载软件包,他更灵活更强大
2.版本管理:pip提供了更强大的版本管理功能可以指定版本,支持升级和卸载,pip 可以管理虚拟环境中的软件包,使每个项目可以独立管理其依赖项。
3.用户安装:pip支持用户级别进行安装,在没有管理员权限的情况下安装的软件
九、pip和pip3的区别
pip是安装使用pip install 软件包,是安装在linux系统上自带的python版本中。
pip3使用pip install 软件包,是安装在自己下载的python3版本中的
十、什么是OS
操作系统是指控制和管理整个计算机系统的硬件和软件资源,并合理的组织和调度计算机的工作和资源的分配,以提供给用户和其它软件方便的接口和环境,它是计算机系统中最基本的系统软件。
十一、中断、异常的联系与区别?
从发生源角度和处理方式角度划分为了中断和异常,但是他们处理问题的方式和思路本质是一样的。中断指I/O设备发出,也成为外中断,属于外部事件,是正在运行的程序所不期望的;异常是正在执行的指令引发的,是内中断,cpu执行指令本身出现问题/响应错误/异常处理程序,执行系统调用。
十二、饥饿与死锁的区别
饥饿是指一个或者多个线程因为种种原因无法获得所需要的资源,导致一直无法执行的状态;死锁是指两个或两个以上的进程/线程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去。
十三、ISO/OSI参考模型是什么
ISO/OSI参考模型是网络传输协议规范,一共有7层,分别为一个电脑从软件到它的硬件,从它的硬件到它的软件的传输。当软件发送一个网络数据包时,只要输入很简单的信息,然后要经过这些层,传输到硬件。传到硬件之后,由接收的电脑的相应的层来解读,这就是ISO/OSI参考模型;
十四、TCP/IP模型是什么
TCP/IP 模型就是互联网的协议,分为四个层次:应用层、传输层、网络互连层、主机到网络层
十五、端到端通信和点到点通信的区别
端到端通信指的是在数据传输前,经过各种各样的交换设备,在两端设备问建立一条链路,就僚它们是直接相连的一样,链路建立后,发送端就可以发送数据,直至数据发送完毕,接收端确认接收成功;点到点通信指的是发送端把数据传给与它直接相连的设备,这台设备在合适的时候又把数据传给与之直接相连的下一台设备,通过一台一台直接相连的设备,把数据传到接收端。
十六、同步请求是什么
同步请求是指当浏览器向服务器发送同步请求时,服务处理同步请求的过程中,浏览器会处于等待的状态,服务器处理完请求把数据响应给浏览器并覆盖浏览器内存中原有的数据,浏览器会重新加载页面并展示服务器响应的数据
十七、异步请求是什么
异步请求是指浏览器把请求交给代理对象,由代理对象向服务器发起请求,接收、解析服务器响应的数据,并把数据更新到浏览器指定的控件上。从而实现了页面数据的局部刷新。
十八、什么是IP地址
IP地址是IP协议提供的一种统一的地址格式,它为互联网上的每一个网络和每一台主机分配一个逻辑地址,以此来屏蔽物理地址的差异
十九、什么是MAC地址
MAC是地址物理地址,用来定义网络设备的位置,在OSI模型中,第三层网络层负责IP地址,第二层数据链路层则负责 MAC地址
二十、传输层的功能
传输层提供应用进程之间的逻辑通信,能够实现传送数据的复用和分用,传输层能够对收到的报文进行差错检测,并提供面向连接的TCP协议和无连接的UDP协议。
二十一、UDP协议的特点
UDP是无连接的,即发送数据之前不需要建立连接,减少了开销和发送数据之前的时延。UDP使用尽最大努力交付,即不保证可靠交付,主机不需要维持复杂的连接状态表。UDP面向报文,发送方的UDP对应用程序交下来的报文,在添加首部后就向下交付IP 层。UDP对应用层交下来的报文,既不合并,也不拆分,而是保留这些报文的边界。
二十二、SMTP简单邮件传输协议是什么
SMTP简单邮件传输协议是一种提供可靠且有效的电子邮件传输 的协议,它控制两个相互通信的SMTP 进程交换信息。有以下三个阶段,连接建立、 邮件传送、连接释放。
二十三、HTTP超文本传输协议是什么
HTTP超文本传输协议是用于从万维网服务器传输超文本到本地浏览器的传送协议,它一个无状态的请求/响应协议,是因特网上应用最为广泛的一种网络传输协议,所有的文件都必须遵守这个标准,HTTP超文本传输协议基于TCP/IP通信协议来传递数据。
二十四、什么是全局解释器锁
只有一个线程在执行,只有一个线程在解释器中运行。访问由全局解释器锁(GIL)来控制,正是这个锁能保证同一时刻只有一个线程在运行
二十五、find和grep
grep命令是一种强大的文本搜索工具,grep所有内容串可以是正则表达式,允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。
二十六、Python的局限性
1. 速度
2. 移动开发
3. 内存消耗(与其他语言相比非常高)
4. 两个版本的不兼容(2,3)
5. 运行错误(需要更多测试,并且错误仅在运行时显示)
6. 简单性
二十七、如何在Python中管理内存
Python内存由Python的私有headspace管理。
所有的Python对象和数据结构都位于一个私有堆中。私用堆的分配由Python内存管理器负责。
Python还内置了一个的垃圾收集器,可以回收未使用的内存并释放内存,使其可用于headspace。
二十八、Python中append,insert和extend的区别
append:在列表末尾添加新元素。
insert:在列表的特定位置添加元素。
extend:通过添加新列表来扩展列表。
numbers = [1,2,3,4,5]
numbers.append(6)
print(numbers)
>[1,2,3,4,5,6]
## insert(position,value)
numbers.insert(2,7)
print(numbers)
>[1,2,7,3,4,5,6]
numbers.extend([7,8,9])
print(numbers)
>[1,2,7,3,4,5,6,7,8,9]
numbers.append([4,5])
>[1,2,7,3,4,5,6,7,8,9,[4,5]]
二十九、break、continue、pass是什么
break:在满足条件时,它将导致程序退出循环。
continue:将返回到循环的开头,它使程序在当前循环迭代中的跳过所有剩余语句。
pass:使程序传递所有剩余语句而不执行。
三十、Python中的remove,del和pop
remove:将删除列表中的第一个匹配值,它以值作为参数。
del:使用索引删除元素,它不返回任何值。
pop:将删除列表中顶部的元素,并返回列表的顶部元素。