python测试工程师面试题,python 面试问题
1.理解_ _ if _ _ _ name _ _== main _ _ name是当前模块名的语句。模块直接运行时,模块名为_main_,即当前模块。模块导入时,模块名不是_ _ main _,也就是不会执行代码。
2.python是如何管理内存的?a、对象的引用计数机制python内部使用引用计数来跟踪内存中的对象。Python内部记录了一个对象有多少引用,也就是引用计数。创建对象时,会创建一个引用计数。当不再需要某个对象时,当其引用计数为0时,该对象将被垃圾收集。b、垃圾回收1当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。2当两个对象A和B相互引用时,del语句可以减少A和B的引用计数,并销毁用于引用底层对象的名称。然而,由于每个对象包含对其他对象的应用,引用计数将不为零,并且对象不会被销毁。(导致内存泄漏)。为了解决这个问题,解释器将定期执行循环检测器来搜索不可访问对象的循环并删除它们。c、内存池机制Python为内存提供了垃圾收集机制,但是它将未使用的内存放入内存池,而不是返回给操作系统。1Pymalloc机制。为了加快Python的执行效率,Python引入了内存池机制来管理小块内存的应用和释放。2Python中所有小于256字节的对象都使用pymalloc实现的分配器,而大型对象使用系统的malloc。3 Python对象,比如整数、浮点数、List,都有自己的私有内存池,对象不共享自己的内存池。也就是说,如果你分配释放了大量的整数,那么用来缓存这些整数的内存就不能再分配给浮点数了。
3.请编写Python代码来删除列表# 1中的重复元素。使用set函数list=[1,3,4,5,51,2,3] set (list) # 2。使用字典函数,a=[1,2,4,2,4,5,6,5,7,(赋值,浅拷贝和深拷贝的区别)赋值(=)表示创建了对象的新引用,修改其中任何一个变量都会影响到另一个。浅拷贝:创建一个新对象,但它包含对原始对象中包含的项的引用(如果其中一个对象被引用修改,另一个也将被修改和更改){1。完全切片法;2、工厂函数,比如list();3.复制模块的copy()函数}深拷贝:创建一个新对象,递归复制其包含的对象(修改其中一个,另一个不变){复制模块的deep.deepcopy()函数}
5.介绍except的用法和作用?Try…except…except…else…执行Try下的语句。如果抛出异常,执行将跳转到except语句。尝试按顺序执行每个except分支,如果抛出的异常与except中的异常组匹配,则执行相应的语句。如果除之外的所有代码都不匹配,异常将被传递给调用此代码的下一个最高级别的try代码。如果正常执行try下的语句,将执行else块代码。如果出现异常,将不会执行。如果有finally语句,最后总是会执行。
6.Python __new__中__new__与__init方法的区别:创建对象时调用,将返回当前对象的实例。你可以用_new_来实现一个singleton。
__init__:在对象创建后调用,初始化当前对象的一些实例,不返回值。
7.常用网络数据抓取方法的正则表达式
美味的汤
什么是
8.遇到的反爬虫策略和解决方案。1.反爬虫穿越头。2.基于用户行为的爬虫:(同一IP短期访问的频率)3。动态网页反爬虫(通过ajax请求数据,或者由JavaScript生成)4。加密部分数据(数据有乱码)解决方法:对于基础网页的抓取,可以自定义头,添加了头的数据可以使用多个代理IP进行抓取或者降低抓取的频率。对于动态网页,selenium phantomjs可以用来抓取和加密一些数据,selenium可以用来截图,python自己的pytesseract库可以用来识别。但是,最直接最慢的方法就是找一个加密的方法进行逆向推理。
9.urllib和urllib2的区别。urllib2和urllib2都是接受URL请求的相关模块,但是urllib2可以接受Request类的一个实例来设置URL请求的头,而urllib2只能接受URL。Urllib无法伪装您的用户代理字符串。Urllib提供了urlencode()方法来获取查询字符串的生成,而urllib2没有。这就是为什么urllib经常和urllib2一起使用的原因。
10.设计一个基于会话登录验证的爬虫方案。列举网络爬虫使用的网络数据包,分析包网络数据包urllib、urllib2和requests。
解析包re,xpath,beautiful soup,lxml
12.熟悉的爬虫框架Scrapy框架根据自身实际情况回答。
13.Python在服务器上的部署过程,以及环境隔离14,Django,Flask的异同。如何选择?15.写一个Python singleton模式类singleton(object):_ instance=none def _ _ new _ _(cls,* args,* * kw):如果不是cls。_ instance: cls。_ instance=super (singleton,Cls)。_ _ new _ _ (cls,* args,* * kw)返回cls。_ instance class my class(singleton):a=1 one=my class()two=my class()id(one)=id(two)true 16、Linux部署服务脚本命令(包括启动和除此之外,你还用过哪些提高爬虫效率的方法?Scrapy-redis分布式爬行
对于定向爬行,可以用正则性替换xpath。
18.POST和GET的区别。GET数据传输安全性低,而POST数据传输安全性高,因为参数不会保存在浏览器历史或web服务器日志中;
做数据查询时,建议使用GET方法;添加、修改或删除数据时,建议使用POST。
在GET url中传输数据,并将数据信息放在请求头中;而POST请求信息放在请求体中传输数据;
GET传输的数据量小,数据只能在请求头中发送,而POST传输的数据信息量比较大,一般不受限制;
就执行效率而言,GET优于POST。
19.什么是lambda函数?有什么好处?Lambda表达式通常用在需要一个函数,但你不想麻烦命名一个函数,也就是匿名函数lambda function:它的主要目的是指出短回调函数。
lambda [arguments]:表达式a=lambdax,y:x y a(3,11)
win7中qq截图的快捷键是什么?如何在CSS中设置div滚动条的样式来提交历史中的图片或压缩文件?
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。