Python面试题总结.docx
《Python面试题总结.docx》由会员分享,可在线阅读,更多相关《Python面试题总结.docx(32页珍藏版)》请在咨信网上搜索。
1、Python面试题总结资料仅供参考1.Python线程池原理? 我理解为线程池是一个存放很多线程的单位,同时还有一个对应的任务队列。整个执行过程其实就是使用线程池中已有有限的线程把任务队列中的任务做完。这样做的好处就是你不需要为每个任务都创立一个线程,因为当你创立第100个线程来执行第100个任务的时候,可能前面已经有50个线程结束工作了。超过最大值的线程能够排队,但她们要等到其它线程完成后才启动。因此重复利用线程来执行任务,减少系统资源的开销。2.Python合并字典,相同key的value如何相加?利用collections.Counter可轻松办到x=apple:1,banana:2y=
2、banana:10,pear:11fromcollectionsimportCounterX,Y=Counter(x),Counter(y)z=dict(X+Y)zapple:1,banana:12,pear:11另一种写法fromcollectionsimportCounterdict(Counter(x)+Counter(y)(合并两个字典的方法方法1:dictMerged1=dict(dict1.items()+dict2.items()方法2:dictMerged2=dict(dict1,*dict2)方法2等同于:dictMerged=dict1.copy()dictMerged.u
3、pdate(dict2)或者dictMerged=dict(dict1)dictMerged.update(dict2)3.解释GUI和GPL?GUI图形用户界面(GraphicalUserInterface,简称GUI,又称图形用户接口)是指采用图形方式显示的计算机操作用户界面。GPL(GNU通用公共许可证)GPL同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。4.简述爬虫的基本步骤和流程?网络爬虫的基本工作流程如下:1.首先选取一部分精心挑选的URL;2.将这些URL放入待抓取U
4、RL队列;3.从待抓取URL队列中取出待抓取在URL,(解析DNS,而且得到主机的ip,)并将URL对应的网页下载下来,存储进已下载网页库中。另外,将这些URL放进已抓取URL队列。4.分析已抓取URL队列中的URL和其中的有价值的数据,将新的URL,放入待抓取URL队列,将数据存储起来,从而进入下一个循环。5.你们公司的业务中,并发能达到多少?6.如何循环抓取一个网站的1000张图片?流程大概是这样找到所有页数-遍历所有的页数-遍历当前页的所有相册(给每个相册建立一个目录)-遍历当前相册的所有图片(遍历此相册的所有页(遍历当前页的所有照片并找到图片的url)-获得图片url就存起来,然后经过
5、图片url下载图片。-引用计数当图片下载量达到1000张时,停止爬取。7.如果对方网站能够反爬取,封ip怎么办?1、放慢抓取速度,减小对于目标网站造成的压力。可是这样会减少单位时间类的抓取量。2、第二种方法是经过设置代理IP等手段,突破反爬虫机制继续高频率抓取。可是这样需要多个稳定的代理IP。代理IP能够搜索到免费的,可是可能不太稳定,也有收费的,可是不一定划算,也可能不是长久之计。普通的基于ADSL拨号的解决办法一般,在抓取过程中遇到禁止访问,能够重新进行ADSL拨号,获取新的IP,从而能够继续抓取。可是这样在多网站多线程抓取的时候,如果某一个网站的抓取被禁止了,同时也影响到了其它网站的抓取
6、,整体来说也会降低抓取速度。一种可能的解决办法同样也是基于ADSL拨号,不同的是,需要两台能够进行ADSL拨号的服务器,抓取过程中使用这两台服务器作为代理。假设有A、B两台能够进行ADSL拨号的服务器。爬虫程序在C服务器上运行,使用A作为代理访问外网,如果在抓取过程中遇到禁止访问的情况,立即将代理切换为B,然后将A进行重新拨号。如果再遇到禁止访问就切换为A做代理,B再拨号,如此重复。如下图:使用A为代理,B拨号:8.简述移动端app数据的抓取流程1、例如:爬取手机淘宝,核心还是一个WEB页面:2、有很多资讯类的APP,核心都是一个WEB页面。直接用爬虫的方法抓就能够了。3、非WEB页面的APP
7、,用APP自动化的一些东西试试4、不然就只有抓包了。9.是否了解Python的函数参数传递的机制?python的参数传递机制具有值传递(int、float等值数据类型)和引用传递(以字典、列表等非值对象数据类型为代表)两种基本机制以及方便的关键字传递特性(直接使用函数的形参名指定实参的传递目标,如函数定义为deff(a,b,c),那么在调用时能够采用f(b=1,c=2,a=3)的指定形参目标的传递方式,而不必拘泥于c语言之类的形参和实参按位置对应)除此之外,python中还允许包裹方式的参数传递,这未不确定参数个数和参数类型的函数调用提供了基础:deff(*a,*b)包裹参数传递的实现是在定义
8、函数时在形参前面加上*或*,*所对应的形参(如上面的a)会被解释为一个元组(tuple,而*所对应的形参(如上面的b)会被解释为一个字典。10.是否了解*args和*kwargs的用法?当函数的参数不确定时,能够使用*args和*kwargs,*args没有key值(列表),*kwargs有key值(字典)。11.是否了解Python中的单例模式。有哪几种实现?单例模式是一种常见的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。经过单例模式能够保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例
9、模式是最好的解决方案。单例模式的要点有三个;一是某个类只能有一个实例;二是它必须自行创立这个实例;三是它必须自行向整个系统提供这个实例。在Python中,单例模式有以下几种实现方式。方法一、实现_new_方法,然后将类的一个实例绑定到类变量_instance上;如果cls._instance为None,则说明该类还没有被实例化过,new一个该类的实例,并返回;如果cls._instance不为None,直接返回_instance,代码如下:?12345678910111213141516171819classSingleton(object):def_new_(cls,*args,*kwarg
10、s):ifnothasattr(cls,_instance):orig=super(Singleton,cls)cls._instance=orig._new_(cls,*args,*kwargs)returncls._instanceclassMyClass(Singleton):a=1one=MyClass()two=MyClass()#one和two完全相同,能够用id(),=,is检测printid(one)#29097904printid(two)#29097904printone=two#Trueprintoneistwo#True方法二、本质上是方法一的升级版,使用_metacl
11、ass_(元类)的高级python用法,具体代码如下:?12345678910111213141516171819202122classSingleton2(type):def_init_(cls,name,bases,dict):super(Singleton2,cls)._init_(name,bases,dict)cls._instance=Nonedef_call_(cls,*args,*kwargs):ifcls._instanceisNone:cls._instance=super(Singleton2,cls)._call_(*args,*kwargs)returncls._in
12、stanceclassMyClass2(object):_metaclass_=Singleton2a=1one=MyClass2()two=MyClass2()printid(one)#31495472printid(two)#31495472printone=two#Trueprintoneistwo#True方法三、使用Python的装饰器(decorator)实现单例模式,这是一种更Pythonic的方法;单利类本身的代码不是单例的,通装饰器使其单例化,代码如下:?12345678910111213141516171819defsingleton(cls,*args,*kwargs):
13、instances=def_singleton():ifclsnotininstances:instancescls=cls(*args,*kwargs)returninstancesclsreturn_singletonsingletonclassMyClass3(object):a=1one=MyClass3()two=MyClass3()printid(one)#29660784printid(two)#29660784printone=two#Trueprintoneistwo#True12.是否了解Python垃圾回收机制?Python中的垃圾回收是以引用计数为主,标记-清除和分代收
14、集为辅。引用计数最大缺陷就是循环引用的问题,如果一个对象的引用数为0,Python虚拟机就会回收这个对象的内存。因此Python采用了辅助方法。13.是否了解read,readline和readlines三者的区别是什么?read读取整个文件readline读取下一行readlines读取整个文件到一个迭代器以供我们遍历(读取到一个list中,以供使用,比较方便)14.是否了解Post和Get的区别是什么?(Http定义了与服务器交互的不同方法,最基本的方法有4种,分别是GET,POST,PUT,DELETE。URL全称是资源描述符,我们能够这样认为:一个URL地址,它用于描述一个网络上的资源
15、,而HTTP中的GET,POST,PUT,DELETE就对应着对这个资源的查,改,增,删4个操作。)1.根据HTTP规范,GET用于信息获取,而且应该是安全的和幂等的。(1).所谓安全的意味着该操作用于获取信息而非修改信息。换句话说,GET请求一般不应产生副作用。就是说,它仅仅是获取资源信息,就像数据库查询一样,不会修改,增加数据,不会影响资源的状态。*注意:这里安全的含义仅仅是指是非修改信息。(2).幂等的意味着对同一URL的多个请求应该返回同样的结果2.根据HTTP规范,POST表示可能修改变服务器上的资源的请求。以新闻网站为例,读者对新闻发表自己的评论应该经过POST实现,因为在评论提交
16、后站点的资源已经不同了,或者说资源被修改了。上面大概说了一下HTTP规范中GET和POST的一些原理性的问题。但在实际的做的时候,很多人却没有按照HTTP规范去做,导致这个问题的原因有很多,比如说:1.很多人贪方便,更新资源时用了GET,因为用POST必须要到FORM(表单),这样会麻烦一点。2.对资源的增,删,改,查操作,其实都能够经过GET/POST完成,不需要用到PUT和DELETE。3.另外一个是,早期的WebMVC框架设计者们并没有有意识地将URL当作抽象的资源来看待和设计,因此导致一个比较严重的问题是传统的WebMVC框架基本上都只支持GET和POST两种HTTP方法,而不支持PU
17、T和DELETE方法。区别:(1.GET请求的数据会附在URL之后(就是把数据放置在HTTP协议头中),以?分割URL和传输数据,参数之间以&相连,如:login.action?name=hyddd&password=idontknow&verify=%E4%BD%A0%E5%A5%BD。如果数据是英文字母/数字,原样发送,如果是空格,转换为+,如果是中文/其它字符,则直接把字符串用BASE64加密,得出如:%E4%BD%A0%E5%A5%BD,其中%XX中的XX为该符号以16进制表示的ASCII。POST把提交的数据则放置在是HTTP包的包体中。2.GET方式提交的数据最多只能是1024字节
18、,理论上POST没有限制,可传较大量的数据)以上这句是我从其它文章转过来的,其实这样说是错误的,不准确的:(1).首先是GET方式提交的数据最多只能是1024字节,因为GET是经过URL提交数据,那么GET可提交的数据量就跟URL的长度有直接关系了。而实际上,URL不存在参数上限的问题,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。IE对URL长度的限制是2083字节(2K+35)。对于其它浏览器,如Netscape、FireFox等,理论上没有长度限制,其限制取决于操作系统的支持。注意这是限制是整个URL长度,而不但仅是你的参数值数据长度。见参考资料5(
19、2).理论上讲,POST是没有大小限制的,HTTP协议规范也没有进行大小限制,说“POST数据量存在80K/100K的大小限制”是不准确的,POST数据是没有限制的,起限制作用的是服务器的处理程序的处理能力。15.是否了解Cookie和Session的区别是什么?(1)cookie数据存放在客户的浏览器上,session数据放在服务器上(2)cookie不是很安全,别人能够分析存放在本地的COOKIE并进行COOKIE欺骗,如果主要考虑到安全应当使用session(3)session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能,如果主要考虑到减轻服务器性能方面,应当使用C
20、OOKIE(4)单个cookie在客户端的限制是3K,就是说一个站点在客户端存放的COOKIE不能3K。(5)因此:将登陆信息等重要信息存放为SESSION;其它信息如果需要保留,能够放在COOKIE中1,session在服务器端,cookie在客户端(浏览器)2,session默认被存在在服务器的一个文件里(不是内存)3,session的运行依赖sessionid,而sessionid是存在cookie中的,也就是说,如果浏览器禁用了cookie,同时session也会失效(可是能够经过其它方式实现,比如在url中传递session_id)4,session能够放在文件、数据库、或内存中都能
21、够。5,用户验证这种场合一般会用session因此,维持一个会话的核心就是客户端的唯一标识,即sessionid16.是否了解Python2.7.x与Python3.x的主要差异?使用_future_模块print函数IntegerdivisionUnicodexrangeRaisingexceptionsHandlingexceptionsnext()函数和.next()方法For循环变量和全局命名空间泄漏比较不可排序类型经过input()解析用户的输入返回可迭代对象,而不是列表17.Python的数据类型Python提供的基本数据类型主要有:布尔类型、整型、浮点型、字符串、列表、元组、集合
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- Python 试题 总结
1、咨信平台为文档C2C交易模式,即用户上传的文档直接被用户下载,收益归上传人(含作者)所有;本站仅是提供信息存储空间和展示预览,仅对用户上传内容的表现方式做保护处理,对上载内容不做任何修改或编辑。所展示的作品文档包括内容和图片全部来源于网络用户和作者上传投稿,我们不确定上传用户享有完全著作权,根据《信息网络传播权保护条例》,如果侵犯了您的版权、权益或隐私,请联系我们,核实后会尽快下架及时删除,并可随时和客服了解处理情况,尊重保护知识产权我们共同努力。
2、文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为仲裁依据,平台无法对文档的真实性、完整性、权威性、准确性、专业性及其观点立场做任何保证或承诺,下载前须认真查看,确认无误后再购买,务必慎重购买;若有违法违纪将进行移交司法处理,若涉侵权平台将进行基本处罚并下架。
3、本站所有内容均由用户上传,付费前请自行鉴别,如您付费,意味着您已接受本站规则且自行承担风险,本站不进行额外附加服务,虚拟产品一经售出概不退款(未进行购买下载可退充值款),文档一经付费(服务费)、不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
4、如你看到网页展示的文档有www.zixin.com.cn水印,是因预览和防盗链等技术需要对页面进行转换压缩成图而已,我们并不对上传的文档进行任何编辑或修改,文档下载后都不会有水印标识(原文档上传前个别存留的除外),下载后原文更清晰;试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓;PPT和DOC文档可被视为“模板”,允许上传人保留章节、目录结构的情况下删减部份的内容;PDF文档不管是原文档转换或图片扫描而得,本站不作要求视为允许,下载前自行私信或留言给上传者【w****g】。
5、本文档所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用;网站提供的党政主题相关内容(国旗、国徽、党徽--等)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
6、文档遇到问题,请及时私信或留言给本站上传会员【w****g】,需本站解决可联系【 微信客服】、【 QQ客服】,若有其他问题请点击或扫码反馈【 服务填表】;文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“【 版权申诉】”(推荐),意见反馈和侵权处理邮箱:1219186828@qq.com;也可以拔打客服电话:4008-655-100;投诉/维权电话:4009-655-100。