python面试题二

****以下资源来源于网络

一.Python中单例模式的实现方式?
1.使用模块。
2.使用__new__.
3.使用装饰器。
4.使用metaclass。
__new__的实现方式:

class Singleton(object):
    _instance = None
    def __new__(cls, *args, **kw):
        if not cls._instance:
            cls._instance = super(Singleton, cls).__new__(cls, *args, **kw)
        return cls._instance
class MyClass(Singleton):
    num=999

二、什么是lambda函数?

lambda函数是一个可以接收任意多个参数并且返回单个表达式值的函数。(注意:lambda函数不能包含命令)。好处是:1.比较轻便,即用即仍。2.匿名函数,一般用来给filter、map这样的函数式编程服务。3.作为回调函数,传递给某些应用。

三、Python如何定义一个函数?

1.以def开头,定义函数。
2.def 函数之后是函数名
3.函数名之后是(),()里面有参数。
4.函数的功能模块。
5.函数要有返回值。

四、range与xrange的区别

Python 2 中 range会生成一个列表,xrange返回生成器,占用内存更小。
Python3中合并成了range函数。

五、celery的作用

执行异步任务的框架,将Web应用中的消些耗时的作业转交给工作池,让工作池中的worker以异步的方式执行这些作业。

Celery 主要包含以下几个模块:
任务模块 Task
包含异步任务和定时任务。其中,异步任务通常在业务逻辑中被触发并发往任务队列,而定时任务由 Celery Beat 进程周期性地将任务发往任务队列。
消息中间件 Broker
Broker,即为任务调度队列,接收任务生产者发来的消息(即任务),将任务存入队列。Celery 本身不提供队列服务,官方推荐使用RabbitMQ 和Redis 等。
任务执行单元 Worker
Worker 是执行任务的处理单元,它实时监控消息队列,获取队列中调度的任
务,并执行它。
任务结果存储 Backend
Backend 用于存储任务的执行结果,以供查询。同消息中间件一样,存储也可使用RabbitMQ, redis 和 MongoDB 等。

流程是任务池中的worker进程连接上消息代理(也可称为broker),消息代理随机将任务请求分发给worker,通过调用celery的api,用户生成一个请求,并将这个请求发布给消息代理。在worker完成任务后,将完成的任务消息发送给消息代理。

六、https和http的区别,requests如何取消ssl验证

超文本传输协议HTTP协议被用于在Web浏览器和网站服务器之间传递信息,HTTP协议以明文式发送内容,不提供任何方式的数据加密。
安全套接字层超文本传输协议HTTPS,为了数据传输的安全,HTTPS在HTTP的基础上加入了SSL协议,SSL依靠证书来验证服务器的身份,并为浏览器和服务器之间的通信加密。

Python3 requests 关闭ssl证书验证
html = requests.get(item_url, headers=headers, verify=False)

七、用过scrapy吗?了解它的工作流程吗?

Scrapy是一个了爬取网站数据,提取结构性数据而编写的应用框架,只需实现少量代码,就能快速的抓取到数据内容。scrapy使用了异步网络框架来处理网络通讯。加快了下载速度,不用我们自己写异步框架,并且还有各种中间件接口。

Scrapy的工作流程是:
1.首先爬虫(spiders)将需要发送请求url(requsets)经过引擎(scrapyengine)交给调度器(scheduler)。
2.调度器处理(排序、入队)后,经过引擎交给下载器(downloader)。
3.下载器向互联网发送请求,并接收下载响应(response)。将响应经过引擎交给爬虫。
4.爬虫处理响应,提取数据经过引擎保存在本地(交给(itempipeline)保存)。在提取url重新交给引擎进行下一轮循环,直到无url请求,程序结束。

八、python常用的bug分析工具。

PyChecker是一个是一个python代码的静态分析工具,它可以帮助查找python代码的bug, 会对代码的复杂度和格式提出警告。Pylint是另外一个工具可以进行coding standard检查。

九、django用到的装饰器
常用的有@get,拦截非get请求
@post,拦截非post请求
@params参数检查

十、什么是事物

事务就是并发控制的单位,是用户定义的一个操作序列。具有四大特性:原子性、一致性、隔离性、持久性。简单说就是一个程序执行单元。

十一、闭包函数要素。

闭包函数有三大要素:
1.嵌套函数。
2.变量的引用。
3.返回内部函数。

十二、http状态码都是代表什么意思?

1字段是发送请求。
2字段是操作成功。
3字段是重定向,需要进一步操作以完成请求。
4字段是请求出错。
5字段是服务器内部错误。

十三、云计算的几种服务模式

Caas模式意思是通讯即服务
SaaS 模式是软件即服务
PasS模式是平台即服务
Iaas模式是基础设施即服务

十四、内存中的堆和栈

栈是保存局部变量的。函数结束,生命周期也就结束了。
堆是向操作系统申请的内存空间,需要程序主动申请,主动释放。

十五、python是怎么管理内存管理的?

Python是解释器自动管理的,开发人员一般不主动管理内存。

十六、你们linux怎么部署的?

虚拟环境+nginx+uwsgi

十七、写一个装饰器,计算函数运行时间。

import time
def set_func(func):
    def call_func(*args, **kwargs):
        start_time = time.time()
        func(*args, **kwargs)
        end_time = time.time()
        print('use time:%i' % int(end_time - start_time))
    return call_func

@set_func
def aaa():
    for i in range(11111111):
        print(i)

aaa()

十八、response.text与response.content的区别

response.text返回的类型是str。
response.content返回的类型是bytes,可以通过decode()方法将bytes类型转为str类型。

十九、Mysql myisam 与 innodb的区别

1、MyISAM:不是事务安全的,而且不支持外键,如果执行大量的select,insert MyISAM比较适合。
2、InnoDB:支持事务安全的引擎,支持外键、行锁、事务是他的最大特点。如果有大量的update和insert,建议使用InnoDB,特别是针对多个并发较大的情况。

二十、如何用Python删除一个文件?

使用os.unlink()和os.remove()来删除文件

二十一、如何用Python来进行查询和替换一个文本字符串?

可以使用sub()方法来进行查询和替换,sub方法的格式为:sub(replacement, string[, count=0])。
replacement是被替换成的文本。
string是需要被替换的文本。
count是一个可选参数,指最大被替换的数量。

二十二、介绍一下except的用法和作用?

Python的except用来捕获所有异常, 因为Python里面的每次错误都会抛出 一个异常,所以每个程序的错误都被当作一个运行时错误。

二十三、如何反序的迭代一个序列?

如果是一个list, 最快的解决方案是:
list.reverse()
如果不是list, 最通用但是稍慢的解决方案是:
for i in range(len(sequence)-1, -1, -1):
x = sequence[i]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值