进程和线程的主要差别在于它们是不同的操作系统资源管理方式。
1)进程有独立的地址空间,一个进程崩溃后,在保护模式下不会对其它进程产生影响;
2)而线程只是一个进程中的不同执行路径。线程有自己的堆栈和局部变量,但线程之间没有单独的地址空间,一个线程死掉就等于整个进程死掉
3)多进程的程序要比多线程的程序健壮;
4)但在进程切换时,耗费资源较大,效率要差一些。
5)对于一些要求同时进行并且又要共享某些变量的并发操作,只能用线程,不能用进程。
进程之间的通信方式:
1)管道:进程与具有相同祖先进程的两个进程之间通信
2)命名管道:任意两个进程之间的通信,
3)消息队列:
4)内存映射:
5)套接字:
6)
1)GUI 图形界面: Tkinter,turtle
2)科学计算 :numpy;SciPy;pandas;randmon;sklearn
3)爬虫相关:scrapy;pyspider;selenium;requests;pysql
4)图像处理:pillow;matplotlib;skimage;CV2
5)其他:os模块就是对操作系统进行操作;time;加密hashlib;logging模块控制台输出日志;
6)接口测试相关:sys,urllib,json,base64,
7)字典:collections,operator
这个题其实很简单,面试的时候脑子里就想着,应该有什么比较好的方法,就把最基础的思路都没有说出来,唉傻到爆炸
思路:
遍历每两个数字,检查之和是否等于给定的Key,如果相等的话,返回True;否则返回False
注意:
不能写成
def issumin(array,key):
for i in range(len(array)-1):
for j in range(i+1,len(array)):
if array[i]+array[j] == key:
return True
else:
return False
因为这样的话,程序只会把第一个值和第二值相加,判断相等就True,不相等就False;不进行后面的判断
所以我们应该改成:当它两不相等的时候,退出当前循环,进入下一轮循环,当循环结束还有没相等,我们就在循环结束之后加一个return False;如果相等,直接返回True
def issumin(array,key):
for i in range(len(array)-1):
for j in range(i+1,len(array)):
if array[i]+array[j] != key:
continue
else:
return True
return False
array = [-1,3,2,7,0,-4,6]
key = 8
print(issumin(array,key))
改进版
def find_numbers_with_sum(array,sum):
array.sort()
#res =[]
add = 0
start = 0
end = len(array)-1
while(startsum:
end -=1
elif add
算法复杂度是:O(n)
class Solution(object):
def twoSum(self, nums, target):
dic = {}
for i, n in enumerate(nums):
if n in dic:
return [dic[n], i]
dic[target-n] = i
思路:
首先进行排序,然后判断后一个减前一个等于1 ,继续往后走;否则,说明,连续的序列已经结束,将当前元素添加到列表中
这样的话,需要对最后一个进行特判,如果最后一个不连续,我们将它直接加到res中;如果连续先加到s中,再将s加到res中
注意:
1)这里需要设置一个start的flag,如果连续的子序列开始,需要将start置为非空;如果连续的子序列结束,需要将start置为空
2)只有子序列开始,和子序列结束时,才append;连续的中间元素没有必要append
def subset(array):
res = []
start = None
array.sort()
for i in range(len(array)-1):
if start == None:
s = []
s.append(array[i])
start = 1
elif array[i]-array[i+1] != -1:
s.append(array[i])
start = None
res.append(s)
if start == None:
res.append(array[len(array)-1])
else:
s.append(array[len(array)-1])
res.append(s)
return res
if __name__ == '__main__':
a = [3,2,7,8,1,4,10,11,12,15]
print(subset(a))
运行结果:
runfile('C:/Users/Desktop/python/constant.py', wdir='C:/Users/Desktop/python')
[[1, 4], [7, 8], [10, 12], 15]
10 给你一只铅笔,尽可能多的想出跟它相关的东西
11 平常玩什么游戏?
题目面试的时候都没怎么明白,只能说还需要成长
思路:
1)先判断字符串是不是以正负号打头的,如果是的话,分情况讨论;先获取字符串的符号,计算完成之后,按照正负号直接乘上去就行
2)如果字符串不是以正负号打头的,按每一位进行判断就是
注意:
1) 这里的ord('0')一定是要加引号的,而不是ord(0)
2) 需要将字符串进行反转,从最小的位置开始,每一位乘10,然后相加
def str2int(string):
if string[0] == '+' or string[0] =='-':
string1 = string[1:]
res = 0
mul = 1
for i in reversed(string1):
if ord('9') >= ord(i) >= ord('0'):
res = res + mul*(ord(i)-ord('0'))
mul *= 10
else:
return False
if string[0] == '+':
return res
else:
return -1*res
else:
res = 0
mul = 1
for i in reversed(string):
if ord('9') >= ord(i) >= ord('0'):
res = res + mul*(ord(i)-ord('0'))
mul *= 10
else:
return False
return res
print(str2int('-12309'))
运行结果:
runfile('C:/Users/Desktop/python/str2int.py', wdir='C:/Users/Desktop/python')
-12309