银联商务股份有限公司1月招聘面试题180道202019

已经创建好的Scrapy爬虫*.py文件可以直接通过Python来运行()

此题为判断题(对,错)。


参考答案:错


Python是如何进行内存管理的?


正确答案:

一、对象的引用计数机制

Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。

引用计数增加的情况:

1,一个对象分配一个新名称

2,将其放入一个容器中(如列表、元组或字典)

引用计数减少的情况:

1,使用del语句对对象别名显示的销毁

2,引用超出作用域或被重新赋值sys.getre f count( )函数可以获得对象的当前引用计数

多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。

二、垃圾回收

1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。

2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。

三、内存池机制

Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。

1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。

2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。

3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。


查看对象内存地址的Python内置函数是__________。


正确答案:id()


只有Python扩展库才需要导入以后才能使用其中的对象,Python标准库不需要导入即可使用其中的所有对象。

此题为判断题(对,错)。


正确答案:×


简单解释Python基于值的内存管理模式。


正确答案:Python采用的是基于值得内存管理方式,在Python中可以为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一个内存地址;Python具有自动内存管理功能,会自动跟踪内存中所有的值,对于没有任何变量指向的值,Python自动将其删除。


银联商务股份有限公司1月招聘面试题面试题面试官常问到的一些题目整理如下:问题 Q1:如何在Python中删除文件?可用的回答 :使用命令os.remove(filename) 删除文件 或 os.unlink(filename) 删除快捷方式问题 Q2:如何在Python中内存管理?可用的回答 :Python内存由Python私有堆空间管理。 所有Python对象和数据结构都位于私有堆中。 程序员无权访问此私有堆,解释器负责处理此私有堆。 Python对象的Python堆空间分配由Python内存管理器完成。核心API提供了一些程序员编写代码的工具。 Python还有一个内置的垃圾收集器,它可以回收所有未使用的内存并释放内存并使其可用于堆空间。问题 Q3:简述一下scrapy的基本流程?可用的回答 : scrapy分为9个步骤: 1. Spiders需要初始的start_url或则函数stsrt_requests,会在内部生成Requests给Engine; 2. Engine将requests发送给Scheduler; 3. Engine从Scheduler那获取requests,交给Download下载; 4. 在交给Dowmload过程中会经过Downloader Middlewares(经过process_request函数); 5. Dowmloader下载页面后生成一个response,这个response会传给Engine,这个过程中又经过了Downloader Middlerwares(经过process_request函数),在传送中出错的话经过process_exception函数; 6. Engine将从Downloader那传送过来的response发送给Spiders处理,这个过程经过Spiders Middlerwares(经过process_spider_input函数); 7. Spiders处理这个response,返回Requests或者Item两个类型,传给Engine,这个过程又经过Spiders Middlewares(经过porcess_spider_output函数); 8. Engine接收返回的信息,如果使Item,将它传给Items Pipeline中;如果是Requests,将它传给Scheduler,继续爬虫; 9. 重复第三步,直至没有任何需要爬取的数据 问题 Q4:为何基于tcp协议的通信比基于udp协议的通信更可靠?可用的回答 : TCP的可靠保证,是它的三次握手双向机制,这一机制保证校验了数据,保证了他的可靠性。 而UDP就没有了,udp信息发出后,不验证是否到达对方,所以不可靠。 不过UDP的发送速度是TCP比不了的,而且UDP的反应速度更快。 问题 Q5:分布式爬虫主要解决什么问题?可用的回答 : 面对海量待抓取网页,只有采用分布式架构,才有可能在较短时间内完成一轮抓取工作。它的开发效率是比较快而且简单的。 问题 Q6:为什么使用* args,* kwargs?可用的回答 :当我们不确定将多少个参数传递给函数,或者我们想要将存储的列表或参数元组传递给函数时,我们使用* args。*当我们不知道将多少关键字参数传递给函数时使用kwargs,或者它可以用于将字典的值作为关键字参数传递。标识符args和kwargs是一个约定,你也可以使用其他名称问题 Q7:介绍一下except的用法和作用?可用的回答 : tryexceptexceptelsefinally 执行try下的语句,如果引发异常,则执行过程会跳到except语句。 对每个except分支顺序尝试执行,如果引发的异常与except中的异常组匹配,执行相应的语句。 如果所有的except都不匹配,则异常会传递到下一个调用本代码的最高层try代码中。 try下的语句正常执行,则执行else块代码。如果发生异常,就不会执行 如果存在finally语句,最后总是会执行。 问题 Q8:说一说redis-scrapy中redis的作用?可用的回答 : 它是将scrapy框架中Scheduler替换为redis数据库,实现队列管理共享。 优点: 可以充分利用多台机器的带宽; 可以充分利用多台机器的IP地址。 问题 Q9:简述 三次握手、四次挥手的流程?可用的回答 : 三次握手: 初始状态:客户端A和服务器B均处于CLOSED状态,然后服务器B创建socket,调用监听接口使得服务器处于LISTEN状态,等待客户端连接。(后续内容用A,B简称代替) 1、A首先向B发起连接,这时TCP头部中的SYN标识位值为1,然后选定一个初始序号seq=x(一般是随机的), 消息发送后,A进入SYN_SENT状态,SYN=1的报文段不能携带数据,但要消耗一个序号。 2、B收到A的连接请求后,同意建立连接,向A发送确认数据,这时TCP头部中的SYN和ACK标识位值均为1,确认序号为ack=x+1, 然后选定自己的初始序号seq=y(一般是随机的),确认消息发送后, B进 入SYN_RCVD状态,与连接消息一样,这条消息也不能携带数据,同时消耗一个序号。 3、A收到B的确认消息后,需要给B回复确认数据,这时TCP头部中的ACK标识位值为1, 确认序号是ack=y+1,自己的序号在连接请求的序号上加1,也就是seq=x+1, 此时A进入ESTABLISHED状态,当B收到A的确认回复后,B也进入ESTABLISHED状态, 至此TCP成功建立连接,A和B之间就可以通过这个连接互相发送数据了。 四次挥手: 初始状态:客户端A和服务器B之间已经建立了TCP连接,并且数据发送完成,打算断开连接, 此时客户端A和服务器B是等价的,双方都可以发送断开请求,下面以客户端A主动发起断开请求为例。(后续内 容用A,B简称代替) 1、A首先向B发送断开连接消息,这时TCP头部中的FIN标识位值为1,序号是seq=m,m为A前面正常发送数据最后一个字节序号加1得到的, 消息发送后A进入FNI_WAIT_1状态,FIN=1的报文段不能携带数据,但要消耗一个序号。 2、B收到A的断开连接请求需要发出确认消息,这时TCP头部中的ACK标识位值为1,确认号为 ack=m+1, 而自己的序号为seq=n,n为B前面正常发送数据最后一个字节序号加1得到的, 然后B进入 CLOSE_WAIT状态,此时就关闭了A到B的连接,

对于Python类中的私有成员,可以通过“对象名._类名__私有成员名”的方式来访问。

此题为判断题(对,错)。


正确答案:√


Python内置函数_____________用来打开或创建文件并返回文件对象。


正确答案:open()


查看变量内存地址的Python内置函数是_________________。


正确答案:id()


Python采用的是基于值得自动内存管理方式。

此题为判断题(对,错)。


正确答案:√


对于Python研发人员,PyCharm是Python程序员设计的开发环境。( )

此题为判断题(对,错)。


参考答案:对

更多 “银联商务股份有限公司1月招聘面试题180道202019” 相关考题
考题 以下关于程序运行时内存分配区域的叙述中,说法错误的是(33)。A.全局变量区域存放了程序当中的所有全局变量,是静态分配的区域B.栈区域是由系统自动来分配的C.堆是在函数调用时分配的,当函数调用结束之后,相应的堆就会被释放.D.主函数和其他函数的代码在程序开始运行时,就被装入到内存,保存在代码区正确答案:C解析:栈帧是指在调用函数时,系统会自动地分配一块内存区域给这个函数,用来保存它的运行上下文、形参和局部变量。栈帧是在函数调用时分配的,当函数调用结束之后,相应的栈帧就会被释放。而堆区域主要用做动态分配的内存。

考题 Python2到Python3是一个较大的版本更新。目前,生产环境依然有大量项目使用的是Python2。但,这并不意味着项目会一直停留在Python2,开发者也需要考虑项目对Python3的兼容性,以方便迁移。请问,Python3与Python2有哪些区别:()A、print函数化B、浮点运算C、xrange替代rangeD、解释器使用Python实现正确答案:A,B,C

考题 填空题查看变量内存地址的Python内置函数是()。正确答案:id()解析:暂无解析

考题 问答题Python是如何进行内存管理的?正确答案:从三个方面来说,一对象的引用计数机制,二垃圾回收机制,三内存池机制一、对象的引用计数机制Python内部使用引用计数,来保持追踪内存中的对象,所有对象都有引用计数。引用计数增加的情况:1,一个对象分配一个新名称2,将其放入一个容器中(如列表、元组或字典)引用计数减少的情况:1,使用del语句对对象别名显示的销毁2,引用超出作用域或被重新赋值Sys.getrefcount()函数可以获得对象的当前引用计数多数情况下,引用计数比你猜测得要大得多。对于不可变数据(如数字和字符串),解释器会在程序的不同部分共享内存,以便节约内存。二、垃圾回收1,当一个对象的引用计数归零时,它将被垃圾收集机制处理掉。2,当两个对象a和b相互引用时,del语句可以减少a和b的引用计数,并销毁用于引用底层对象的名称。然而由于每个对象都包含一个对其他对象的应用,因此引用计数不会归零,对象也不会销毁。(从而导致内存泄露)。为解决这一问题,解释器会定期执行一个循环检测器,搜索不可访问对象的循环并删除它们。三、内存池机制Python提供了对内存的垃圾收集机制,但是它将不用的内存放到内存池而不是返回给操作系统。1,Pymalloc机制。为了加速Python的执行效率,Python引入了一个内存池机制,用于管理对小块内存的申请和释放。2,Python中所有小于256个字节的对象都使用pymalloc实现的分配器,而大的对象则使用系统的malloc。3,对于Python对象,如整数,浮点数和List,都有其独立的私有内存池,对象间不共享他们的内存池。也就是说如果你分配又释放了大量的整数,用于缓存这些整数的内存就不能再分配给浮点数。解析:暂无解析

考题 简单解释Python基于值的自动内存管理方式?正确答案:Python采用的是基于值得内存管理方式,在Python中可以为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一个内存地址;Python具有自动内存管理功能,会自动跟踪内存中所有的值,对于没有任何变量指向的值,Python自动将其删除。

考题 单选题在Windows 2000中()不是用户内存空间的分配方式。A 以页为单位分配内存B 以内存映射文件的方法来分配内存C 以段为单位分配内存D 以内存堆的方法来分配内存正确答案:B解析:暂无解析

考题 单选题关于 JAVA 堆,下面说法错误的是()。A 所有类的实例和数组都是在堆上分配内存的B 对象所占的堆内存是由自动内存管理系统回收C 堆内存由存活和死亡的对象组成D 数组是分配在栈中的正确答案:C解析:1. 对象存储在堆区。2. 数组是一种对象。

考题 关于 JAVA 堆,下面说法错误的是()。A、所有类的实例和数组都是在堆上分配内存的B、对象所占的堆内存是由自动内存管理系统回收C、堆内存由存活和死亡的对象组成D、数组是分配在栈中的正确答案:D

考题 对于Python类中的私有成员,可以通过“对象名.类名私有成员名”的方式来访问。正确答案:正确

考题 以下关于程序运行时内存分配区域的叙述中,说法错误的是(37)。A.全局变量区域,存放了程序当中的所有全局变量,是静态分配的区域B.栈区域是由系统自动来分配的C.堆是在函数调用时分配的,当函数调用结束之后,相应的堆就会被释放D.主函数和其他函数的代码在一个程序开始运行时,就被装入到内存,保存在代码区正确答案:C解析:栈帧是指在调用一个函数时,系统会自动地分配一块内存区域给这个函数,用来保存它的运行上下文、形参和局部变量等信息的一块内存区域。栈帧是在函数调用时分配的,当函数调用结束之后,相应的栈帧就会被释放。而堆区域主要用做动态分配的内存。