并发:在同一个时间段交替执行多个任务
并行:在同一个时间点同时执行多个任务
串行:同时执行的多个任务按顺序执行(换句话说就是一个任务执行完后才能执行下一个任务)
#mysql limit用法: select * from table limit m,n;
m表示第m+1条数据起(因为索引是从零开始的)
n表示n行记录
eg:
当指定了位置偏移量时,从第3条起取4条时,可以这样写*/
因为索引是从0开始计数的,所以第3条对应的索引就是2*/
SELECT * FROM YourTableName LIMIT 2,4;
Phthon常见的算法:
选择排序:
先选出列表中最小数n,放到一个空列表起始位置,然后再到剩余元素中查找最小的数放到n的后面,以此类推。
快速排序:
先选出列表中起始位置的数n,然后将列表中比n小的数放前面,比n大的数放后面,以递归的形式返回。
二分查找:
首先定义列表的第一个元素位置start=0和结束位置len(list)-1,当初始位置start小于或等于结束位置end时,
获取中间元素的位置mid=(start + end )// 2,然后用中间位置的mid元素与需要查找的num元素进行比较,
如果num>list[mid],则说明num在mid后面,那么起始位置向后移一位,即:start = mid +1,
如果num<list[mid],则说明num在mid前面,那么结束位置向前移一位,即:end = mid - 1,
如果num == list[mid],则说明num在列表list中的位置为mid,以此循环。
否则列表list中不存在num
Python垃圾回收机制:
1、引用计数:就是变量值被变量名关联的次数。n='xm' n=m,n和m就是变量名,‘xm’就是变量值
缺点: 循环引用(交叉引用):当一个对象与另一个相互引用时,就会导致变量值的引用计算无法为零
2、标记-清除:当有效的内存空间被耗尽时,就会停止整个程序,然后进行标记和清除两项工作
内存中有两块区域:一个是堆区(变量值存放区域),一个是栈区(变量名存在区域),内存管理回收的则是堆区内容。
标记:遍历所有栈区的内容,然后将直接或者间接访问的对象标记为存活对象。
清除:遍历所有堆区的内容,将没有标记的对象全部清除。
3、分代回收:采用空间换时间的策略,依然是使用引用计数作为回收依据
思想:在多次扫描的情况下,都没有被回收的变量,gc回收就会认为该变量是常用变量,就会降低对其的扫描频率。
def foo(s): n = int(s) assert n != 0,'n is zero' #如果n!=0为False就抛出后面的字符串 return 10 / n print foo('0')