Python面试题总结.docx
精品名师归纳总结Python 面试题总结可编辑资料 - - - 欢迎下载精品名师归纳总结资料仅供参考1. Python 线程池原理?我懂得为线程池是一个存放许多线程的单位,同时仍有一个对应的任务队 列。整个执行过程其实就是使用线程池中已有有限的线程把任务队列中的任务做完。这样做的好处就是你不需要为每个任务都创立一个线程,由于当你创立第 100 个线程来执行第 100 个任务的时候,可能前面已经有50 个线 程终止工作了。 超过最大值的线程能够排队,但她们要等到其它线程完成后才启动。因此重复利用线程来执行任务,削减系统资源的开销。2. Python 合并字典,相同 key 的 value 如何相加? 利用 collections.Counter 可轻松办到>>> x = 'apple':1, 'banana':2 >>> y = 'banana':10, 'pear':11 >>> from collections importCounter>>>X,Y =Counter x,Counter y>>> z = dictX+ Y>>> z'apple':1,'banana':12,'pear':11另一种写法>>>from collections importCounter>>>dictCounter x+Counter y合并两个字典的方法方法 1:dictMerged1=dictdict1.items+dict2.items方法 2: dictMerged2=dictdict1, *dict2 方法 2 等同于:dictMerged=dict1.copy dictMerged.updatedict2 或者dictMerged=dictdict1dictMerged.updatedict23. 说明 GUI 和 GPL ?可编辑资料 - - - 欢迎下载精品名师归纳总结资料仅供参考GUI图形用户 界面(GraphicalUserInterface,简称GUI,又称图形 用户接口)是指采纳图形方式显示的运算机操作用户界面。GPLGNU通用公共许可证 GPL 同其它的自由软件许可证一样,许可社会公众享有:运行、复制软件的自由,发行传播软件的自由,获得软件源码的自由,改进软件并将自己作出的改进版本向社会发行传播的自由。4. 简述爬虫的基本步骤和流程? 网络爬虫的基本工作流程如下:1. 第一选取一部分细心选择的 URL 。2. 将这些 URL 放入待抓取 URL 队列。3. 从待抓取 URL 队列中取出待抓取在URL ,(解析 DNS,而且得到主机的ip ,)并将 URL 对应的网页下载下来,储备进已下载网页库中。另外,将这些URL 放进已抓取 URL 队列。4. 分析已抓取 URL 队列中的 URL 和其中的有价值的数据,将新的URL , 放入待抓取 URL 队列,将数据储备起来,从而进入下一个循环。5. 你们公司的业务中,并发能达到多少?6. 如何循环抓取一个网站的 1000 张图片? 流程大致是这样找到全部页数-遍历全部的页数-遍历当前页的全部相册 给每个相册建立一个目录 -遍历当前相册的全部图片 遍历此相册的全部页 遍历当前页的全部照片并找到图片的 url-获得图片 url就存起来 , 然后经过图片 url下载图片。-引用计数当图片下载量达到 1000 张时,停止爬取。7. 假如对方网站能够反爬取,封 ip 怎么办?1、放慢抓取速度,减小对于目标网站造成的压力。可是这样会削减单位时间类的抓取量。2、其次种方法是经过设置代理 IP 等手段,突破反爬虫机制连续高频率抓取。可是这样需要多个稳固的代理IP。代理 IP 能够搜寻到免费的,可是可能不太稳固,也有收费的,可是不肯定划算,也可能不是长期之计。一般的基于 ADSL拨号的解决方法可编辑资料 - - - 欢迎下载精品名师归纳总结资料仅供参考一般,在抓取过程中遇到禁止拜访,能够重新进行ADSL 拨号,猎取新的 IP, 从而能够连续抓取。可是这样在多网站多线程抓取的时候,假如某一个网站的抓取被禁止了,同时也影响到了其它网站的抓取,整体来说也会降低抓取速度。一种可能的解决方法同样也是基于 ADSL 拨号,不同的是,需要两台能够进行ADSL 拨号的服务器,抓取过程中使用这两台服务器作为代理。假设有 A、B 两台能够进行 ADSL 拨号的服务器。爬虫程序在 C 服务器上运行,使用 A 作为代理拜访外网,假如在抓取过程中遇到禁止拜访的情形,立刻将代理切换为 B,然后将 A 进行重新拨号。假如再遇到禁止拜访就切换为A 做代理, B 再拨号,如此重复。如下图:使用 A 为代理, B 拨号:8. 简述 移动端 app数据的抓取流程1、例如:爬取手机淘宝,核心仍是一个WEB页面:2、有许多资讯类的 APP,核心都是一个 WEB页面。直接用爬虫的方法抓就能够了。3、非 WEB页面的 APP,用 APP自动化的一些东西试试4、不然就只有抓包了。9. 是否明白 Python 的函数参数传递的机制?python 的参数传递机制具有值传递(int 、float 等值数据类型)和引用传递(以字典、列表等非值对象数据类型为代表)两种基本机制以及便利的关键字传递特性(直接使用函数的形参名指定实参的传递目标,如函数定义为def fa,b,c,那么在调用时能够采纳 fb=1,c=2,a=3 的指定形参目标的传递方式,而不必拘泥于 c 语言之类的形参和实参按位置对应)除此之外, python 中仍答应包裹方式的参数传递,这未不确定参数个数和参数类型的函数调用供应了基础:def f*a,*b包裹参数传递的实现是在定义函数时在形参前面加上* 或* ,* 所对应的形参(如上面的 a)会被说明为一个元组( tuple,而 * 所对应的形参(如上面的b)会被说明为一个字典。10. 是否明白 *args 和*kwargs的用法?当函数的参数不确定时,能够使用 *args和*kwargs ,*args没有 key值(列表), *kwargs 有 key 值(字典)。11. 是否明白 Python 中的单例模式。有哪几种实现?可编辑资料 - - - 欢迎下载精品名师归纳总结资料仅供参考单例模式是一种常见的软件设计模式。在它的核心结构中只包含一个被称为单例类的特别类。经过单例模式能够保证系统中一个类只有一个实例而且该实例易于外界拜访,从而便利对实例个数的掌握并节省系统资源。假如期望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。单例模式的要点有三个。一是某个类只能有一个实例。二是它必需自行创立这 个实例。三是它必需自行向整个系统供应这个实例。在Python 中,单例模式有以下几种实现方式。方法一 、实现 new 方法,然后将类的一个实例绑定到类变量_instance 上。 假如 cls._instance 为 None,就说明该类仍没有被实例化过, new 一个该类的实例,并返回。假如 cls._instance 不为 None,直接返回 _instance,代码如下:. 1234classSingletonobject:56可编辑资料 - - - 欢迎下载精品名师归纳总结def7891011 newcls,*args,*kwargs:ifnothasattrcls,'_instance': orig=superSingleton,clscls._instance=orig.newcls,*args,*kwargs returncls._instance可编辑资料 - - - 欢迎下载精品名师归纳总结classMyClassSingleton:1a=121one=MyClass3two=MyClass141 #one 和 two 完全相同 , 能够用 id,=,is 检测printidone#290979045printidtwo#2909790416 printone=two#Trueprintoneistwo#True1718可编辑资料 - - - 欢迎下载精品名师归纳总结资料仅供参考可编辑资料 - - - 欢迎下载精品名师归纳总结19方法二 、本质上是方法一的升级版,使用用法,详细代码如下:. 12345 metaclass (元类)的高级 python可编辑资料 - - - 欢迎下载精品名师归纳总结6 classSingleton2type:78def initcls,name,bases,dict:9superSingleton2,cls.initname,bases,dict1cls._instance=None01def callcls,*args,*kwargs:1ifcls._instanceisNone:1cls._instance=superSingleton2,cls.call*ar 2 gs,*kwargs1returncls._instance 31 classMyClass2object:可编辑资料 - - - 欢迎下载精品名师归纳总结4 metaclass 1a=151 one = MyClass2 6 two = MyClass2 1=Singleton2可编辑资料 - - - 欢迎下载精品名师归纳总结7 printidone#314954721 printidtwo#314954728printone=two#True1printoneistwo#True92021可编辑资料 - - - 欢迎下载