1.队列和栈有什么特点?
1. 栈特点就是一个先进后出的结构。
2. 队列特点就是一个先进先出的结构。
2.谈谈进程、线程、协程
经典定义:一个执行中程序的实例。系统中的每个程序都运行在某个进程的上下文中。(-摘自 CSAPP)
进程是系统资源分配的最小单位
线程就是运行在进程上下文中的逻辑流。
线程是操作系统能够进行运算调度的最小单位。
相对子例程而言,协程更为一般和灵活,但在实践中使用没有子例程那样广泛。
根据维基百科对子例程的描述:是一个大型程序中的某部分代码,由一个或多个语句块组成。它负责完成某项特定任务,而且相较于其他代码,具备相对的独立性。我可以将子例程理解为一个函数。
3、面向对象的封装有什么特点?
前面有private 修饰的【属性】或者是【方法】, 不能【直接】被外部类的实例化对象访问,这样就是封装。
封装是面向对象的特征之一,是对象和类概念的主要特性。
封装,也就是把客观事物封装成抽象的类,并且类可以把自己的数据和方法只让可信的类或者对象操作,对不可信的进行信息隐藏。
封装可以被认为是一个保护屏障,防止该类的代码和数据被外部类定义的代码随机访问。
要访问该类的代码和数据,必须通过严格的接口控制。
封装最主要的功能在于我们能修改自己的实现代码,而不用修改那些调用我们代码的程序片段。
适当的封装可以让程式码更容易理解与维护,也加强了程式码的安全性。https://blog.csdn.net/pgx115/article/details/75218571
4、什么叫可迭代对象?迭代器?生成器是迭代器吗?
1.可迭代对象:可以使用for循环遍历的对象,我们称之为可迭代对象.
2.迭代器:提供数据和记录位置.
3.区别:生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且
生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当
发生器终结时,还会自动抛出 StopIteration 异常。
5、什么叫死锁、互斥锁?
死锁:典型的两种死锁情形:
(一)线程自己将自己锁住 一般情况下,如果同一个线程先后两次调用lock,在第二次调⽤用时,由于锁已经被占用,该线程会挂起等待占用锁的线程释放锁,然而锁正是被自己占用着的,该线程又被挂起而没有机会释放锁,因此 就永远处于挂起等待状态了,于是就形成了死锁(Deadlock)。
(二)多线程抢占锁资源被困 又如线程A获 得了锁1,线程B获得了锁2,这时线程A调用lock试图获得锁2,结果是需要挂起等待线程B释放 锁2,而这时线程B也调用lock试图获得锁1,结果是需要挂起等待线程A释放锁1,于是线程A和B都 永远处于挂起状态了,死锁再次形成。