1、 死锁:
在两个或多个并发进程中,如果每个进程都享有某种资源,而又都在等待别的进程释放它现保持着的资源,在未改变这种状态之前都未能继续进行下去的一种状态。则称这组进程发生死锁。总之死锁条件就是‘系统资源不足或者进程处理顺序出错’,
死锁产生的四大条件:互斥(一个资源每次只能被一个进程占用),不可抢占(进程已获得的资源,在没释放之前不得被其它进程强行占有),占有并等待(某进程对于已经获得的资源,在等待其它进程释放资源的时候,不会释放已有的资源),环形等待(若干进程之间享有一种循环等待资源的状态)。只要破坏四大条件中任何一个即可破坏死锁
2、 并发与并行:
并发:在同一个时间段,多个任务交替执行,指逻辑上多个任务交织执行。 具有处理多个任务的能力,只是需要一个一个来执行,类似于单核cpu。
并行:在同一时刻,多个任务同时执行,指物理上的同时运行。可以同时执行多个任务,类似于多核cpu。
并发与并行都是可以针对多线程进行,如果只有一个cpu,并发解释就是一个cpu轮流切换多个线程。Python有GIL问题,即使是多核CPU也没法用多线程做并行,但可以用多进程操作。
“并发”指的是程序的结构,“并行”指的是程序运行时的状态
3、 事务的特性:
原子性Atomicity:事务所包含的全部操作,要不全部成功要么全部失败回滚
一致性Consistency:事务必须使数据库从一个状态变换到另一个状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
隔离性Isolation:多个用户并发访问数据库时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
持久性Durability:一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。
4、 数组与链表的区别:
数组:需要一块连续的存储空间,其次数组需要预存空间,可能会浪费内存,再者插入数据和删除数据效率很低(对于数据的移动量很大), 第四数据的随机访问,读取速度快(查询速度快),因为数组连续的,知道每个数据的内存地址。最后不利于扩展,当数组空间不够,需要重新定义数组
链表:内存空间不要求连续,其次每个数据保存下一个数据的内存地址,可通过该地址找到下一个数据位置,再者数据的插入和删除效率高(不需要移动其它元素位置,只需把索引告知前者或后者),第四数据查找效率低,不具有随机访问,比如访问第n个数据,需要从第一个数据开始查找,这是对于单链表而言。最后扩展方便,链表大小不需要定义。