12.谈谈你对多进程、多线程、以及协程的理解,项目能否用?
进程:一个运转的次第(代码)就是一个进程,没有运转的代码叫顺序,进程是系统资源分配的最小单位,进程具有自己独立的内存空间,一切进程间数据不共享,开支大。线程: cpu布置实施的最小单位,也叫实施路途,不能独立具有,依赖进程具有,一个进程至少有一个线程,叫主线程,而多个线程共享内存可以极大地提高了顺序的运转效率。协程: 是一种用户态的轻量级线程,协程的布置完整由用户掌握,协程具有自己的寄存器上下文和栈。协程安排时,将寄存器上下文和栈保管到其他中央,在切回来的时分,恢复先前保管的寄存器上下文和栈,直接操中栈则基本没有内核切换的开支,可以不加锁的访问全局变量,所上述文章内容下文的切换非常快。
关于系统编程还有很多效果,例如:
编辑
:kenwoodjw
关于机器进修算法工程师而言,Python是不可或缺的言语,它的漂亮与简明令人无法自拔。那么你过Python编程面试题吗?从Python基础到网页爬虫你能否能全方位Hold住?明天,为读者们推荐一个Github项目。
在这个项目中, kenwoodjw 准备了近 300 道 Python 面试题,同时还包括处置计划与代码。主要从 Python 基础、高级语句、网页使用、数据库和测试等角度提问,读者可只自己需求的范围。目前该项目曾经完成了很多基础和高级面试题,本文主要摘取一些 Python 面试题供自己参考。
项目地址:
总体而言,项目有近300道面试题。固然该项目刚末尾创建,但很多Python面试题都曾经提供决计划。如下所示为面试题示例:
本文截取了一些面试题及处置计划:
Python 基础文件操作模块与包数据类型企业面试题Python 高级设计模式系统编程假如希冀机器进修面试题,可阅读:春招已近,这份GitHub万星的ML算法面试大全请收下
Python 基础
什么是 Python?依据Python 创建者 Guido an Rossum 所言,Python是一种高级编程言语,其设计的中心思念是代码的易读性,以及允许编程者经过若干行代码冷静表达想法创意。实际上,很多开拓者选择进修 Python 的首要缘由是其编程的漂亮性,用它编码和表达想法非常自然。
文件操作
1.若有一个jsonline格式的文件file.,大小约为10K,我们的处理方式为:
defget_lines(): l=[]with open('file.', 'rb') as f:for eachline in f: l.append(eachline)return lif __name__=='__main__':for e in get_lines(): process(e) #处理每一行数据
往常要处理一个大小为10G的file.文件,但是内存只要4G。假如在只矫正get_lines 函数而其他代码坚持不变的状况下,该当如何完成?需求思索的问题都有那些?
defget_lines(): l=[]with open('file.','rb') as f: data=f.readlines(60000) l.append(data)yield l
要思索的问题有:内存只要4G,无法一次性读入10G文件。而分批读入数据要记载每次读入数据的位置,且分批每次读取得太小会在读取操作上破费过多时间。
模块与包
2.如何输入日期, 区分这一天是这一年的第几天?
import datetimedefdayofyear(): year=input("请输入年份: ") month=input("请输入月份: ") day=input("请输入天: ") date1=datetime.date(year=int(year),month=int(month),day=int(day)) date2=datetime.date(year=int(year),month=1,day=1)return (date1-date2).days+1数据类型
3.如何反转字符串"aStr"?
print("aStr"[::-1])4.下面代码的输出结果将是什么?会报错吗?
list=['a','b','c','d','e']print(list[10:])
代码将输出[],并不会发生IndexError 过失。假如尝试用超出成员的个数的index来获取某个列表的成员,那就会报错。例如,尝试获取 list[10] 和之后的成员,会招致IndexError。但是当我们尝试获取列表的切片时,末尾的index逾越成员个数并不会发生IndexError,而是仅仅前往一个空列表。由于并不会报错,所以这种Bug很难追踪到。
5.请写出一段Python代码,完成删除list外面的重复元素?
l1=['b','c','d','c','a','a']l2=list(set(l1))print(l2)用list类的sort方法可以保证次第不变:
l1=['b', 'c', 'd', 'c', 'a', 'a']l2=list(set(l1))l2.sort(key=l1.index)print(l2)也可以这样写:
l1=['b', 'c', 'd', 'c', 'a', 'a']l2=sorted(set(l1), key=l1.index)print(l2)
也可以用遍历:
l1=['b', 'c', 'd', 'c', 'a', 'a']l2=[]for i in l1:ifnot i in l2: l2.append(i)print(l2)企业面试题
6.设计完成遍历目录与子目录,抓取.pyc文件
第一种方法:
import osdefgetFiles(dir, suffix): res=[]for root, dirs, files in os.walk(dir):for filename in files: name, suf=os.path.splitext(filename)if suf==suffix: res.append(os.path.join(root, filename)) print(res)getFiles("https://wuzhishan.tlbaby.com/html/", '.pyc')
第二种方法:
import osdefpick(obj):try:if obj.[-4:]==".pyc": print(obj)except:returnNonedefscan_path(ph): file_list=os.listdir(ph)for obj in file_list:if os.path.isfile(obj): pick(obj)elif os.path.isdir(obj): scan_path(obj)if __name__=='__main__': path=input('输入目录') scan_path(path)
7.如何反转一个整数,例如-123-- -321?
classSolution(object):defreerse(self, x):if-10x=""return x str_x=str(x)if str_x[0] !="-": str_x=str_x[::-1] x=int(str_x)else: str_x=str_x[1:][::-1] x=int(str_x) x=-xreturn x if-2147483648x=""if __name__=='__main__': s=Solution() reerse_int=s.reerse(-120) print(reerse_int)
Python高级
Python高级包括很多主要的模块,例如函数、类和实例、系统编程、正则表达式、网络编程等等。依据这些高级属性,Python可用于数据迷信、网页开拓、机器学习等等。
设计模式
8.对设计模式的理解,简述你的设计模式?
设计模式是为我们经常会碰到的一些编程问题建立的可重用途理方案,它是总结性和经优化的。一个设计模式并不像一个类或一个库那样能够间接作用于我们的代码,反之,设计模式更为高级,它是一种在特定情形下实现的方法模板。稀有的是工厂模式和单例模式。
单例模式使用的场景一般发觉在以下条件下: 资源共享的情况下,防止由于资源操作时招致的功用或消耗等,如日志文件,使用配置。控制资源的情况下,便利资源之间的相互通讯。
9.生成器和迭代器的区别?
迭代器是一个更笼统的概念,任何对象,假如它的类有 next 方法和 iter 方法返回自己自身,它就是可迭代的。关于 string、list、dict、tuple 等这类容器对象,使用for循环遍历是很便当的,for 语句实践上会对容器对象调用 iter() 函数。iter() 会返回一个定义了 next() 方法的迭代器对象,它在容器中逐一访问容器内元素,在没有后续元素时,next()会抛出一个StopIteration非常。
生成器(Generator)是创建迭代器的冗杂而弱小的工具。它们写起来就像是正轨的函数,只是在需求返回数据的时分使用yield语句。生成器能做到迭代器能做的一切事,而且由于自动创建iter()和next()方法,生成器显得特地简明,而且生成器也是高效的,使用生成器表达式取代列表解析可以同季俭省内存。除了创建和保管顺序外形的自动方法,当发生器终结时,还会自动抛出StopIteration非常。
10.对粉饰器的理解,你能写出一个计时器粉饰器,它能记载函数的施行时间吗?
粉饰器实质上是一个Python函数,它可以让其他函数在不需求做任何代码变化的前提下增加额外功用,粉饰器的返回值也是一个函数对象。
import timedeftimeit(func):defwrapper(): start=time.clock() func() end=time.clock() print('used:',end-start)return wrapper @timeitdeffoo(): print('in foo()'foo())
系统编程
11.引见一下你的进程。
顺序运转在操作系统上的一个实例,就称之为进程。进程需要相应的系统资源:内存、时间片、pid。创建进程: 首先要导入multiprocessing中的Process;创建一个Process对象;创建Process对象时,可以传递参数。
p=Process(target=XXX, args=(tuple,), kwargs={key: alue})target=XXX # 指定的义务函数,不用加()args=(tuple,)kwargs={key: alue} # 给义务函数传递的参数使用start()发起进程 完毕进程 给子进程指定函数传递参数Demo
import osfrom mulitprocessing import Processimport timedefpro_func(name, age, **kwargs):for i in range(5): print("子进程正在运行中,name=%s,age=%d,pid=%d" % (name, age, os.getpid())) print(kwargs) time.sleep(0.2)if __name__=="__main__":# 创建Process对象 p=Process(target=pro_func, args=('小明', 18), kwargs={'m': 20})# 发动进程 p.start() time.sleep(1)# 1秒钟之后,立刻完毕子进程 p.terminate() p.join()12.谈谈你对多进程、多线程、以及协程的理解,项目能否用?
进程:一个运行的顺序(代码)就是一个进程,没有运行的代码叫程序,进程是系统资源分配的最小单位,进程具有自己独立的内存空间,一切进程间数据不共享,开支大。线程: cpu安排执行的最小单位,也叫执行路途,不能独立具有,依赖进程具有,一个进程至少有一个线程,叫主线程,而多个线程共享内存可以极大地提高了程序的运行效率。协程: 是一种用户态的轻量级线程,协程的安排完整由用户控制,协程具有自己的寄存器上下文和栈。协程安排时,将寄存器上下文和栈保管到其他中央,在切回来的时分,恢复先前保存的寄存器上下文和栈,间接操中栈则基本没有内核切换的开支,可以不加锁的访问全局变量,所上述文章内容下文的切换非常快。
关于系统编程还有很多问题,例如:
本文为编辑,请联系本取得授权。
2002年3月,美国国防高级研讨方案局(DARPA)肯定波音公司作为“轨道慢车”方案的主要承包商,负责完成第二阶段轨道慢车“激进技术的研制任务。项目团队由“幻影”任务小组指点,成员包括鲍尔宇航公司、TRW空间与技术公司、麦克唐纳机器人技术公司查尔斯实验室以及星系统科研公司。
其中,星系统科研公司负责停靠捕捉系统,麦克唐纳机器人公司负责ASTRO的机械臂及相关的计算机软硬件,诺·格公司负责燃料传输和促进系统(包括衔接两星的流体软管),轨道迷信公司负责’激进视频导航传感器,麻省理工学院实验室负权益务管理软件的开拓。
美国国防部导弹进攻局为激进空间机器人技术的研发花费了20多亿美元,以支持未来有人及无人卫星维修,轨道快车就是项目之一。其他项目中,装置在航天飞机上的机器人系统已经安排,捕捉和维修了许多在轨飞行的卫星,包括对哈勃空间望远镜的4次胜利维修在国际空间站上装有移动维修系统,维修对象不只是国际空间站自身,而且包括访问国际空间站的空间飞行器。
“轨道快车”考证计划的形式很普遍,包括国防,民用和商用等范围的技术考证任务,2007年3月8月开端的“轨道快车”任务中,第一次在空间中止无人改换组件,胜利中止了如下实验:燃料传送和组件改换实验。在发射一周后,成功地从ASTR0NEXTSat传输肼燃料,其中,使用压力传输系统传送了14.50千克,使用传送泵系统传送了872千克。接着,ASTRO使用机械手向NEXTSat传送一个重24千克的电池并将其成功装置到NEXTSat动力系统中、这些考证任务是在卫星最高等级的自主功用下停止的,需要一些来自空中的命令。在以后的实验中将增加对空中确认的需求,使。轨道快车。更自主地停止飞行考证。
自主停靠和捕捉验证明验。5月11日,“轨道快车”系统成功完成了自主飞行停靠和捕获任务。ASTRO卫星应用照应的照相机、视频导航系统和停靠机械安装,接近并捕获NEXTSat随后与之辨别、行进到10米及30米的距离,并坚持接近飞行,然后再次应用其机械手完成对NEXTSat的捕获。这项验证任务残缺由卫星自主完成,没有交流相对导航音讯、没有任何干预。也没有由空中控制,标志着初次自主在轨停靠与捕获操作取得成功。
全自主运转和捕获验证实验。6月16日,在5个小时的实验中,“轨道快车”系统完成了NEXTSat卫星自主运转和捕获实验。ASTRO维修卫星与NEXTSat客户卫星成功停止了辨别、旋转和对接操作。这次实验最后用自动传感器停止导航音讯的非自动交换,大约由空中控制器参与。ASTRO卫星定位在NextSat卫星上方60米,沿着一条虚拟的“Rbar”线——一条地心经NextSat卫星的延伸线去捕获后者。
ASTRO和NEXTSaI在对接模式上开端验证。在预定时间ASTRO自主地与NextSat分别到120米的距离,随后坚持这个距离盘绕后者旋转17分钟,在飞行进程中应用传感器系统继续跟踪后者并微调与它的距离。然后,ASTRO机动到NEXTSat上方,沿“Rbar”线方向接近后者到几厘米的距离,捕获机械安装抓住NEXTSat,温顺地使两星对接到一同。
轨道快车
缘由如下:
由于ASTR是运载火箭公司,火箭发射失利,升空不到三分钟漂移解体,招致币价暴涨。
阿斯特拉太空公司Astra SpaceInc.(NAS DAQ:ASTR)由克里斯-坎普和亚当伦敦(AdamLondon)于2016年10月创建,是一家位于加利福尼亚州阿拉米达的运载火箭公司,其任务是发射新一代太空效力来改善地球上的生命。