python常见面试题

1.文件的读取
1>生成器generator
2>利用迭代器进行迭代遍历 for line in file
2.迭代器与生成器的差别
迭代器:
迭代是访问数据元素的一种方式,迭代器是一个可以记住迭代位置的对象,
迭代器对象从集合的第一个元素开始访问,直到所有元素被访问完结束。
迭代器只能往前不会后退。
迭代器有两个基本的方法:next()和iter().
字符串、列表、元祖都可创建迭代器对象。
把一个类作为一个迭代器使用需要在类中实现两个方法 iter() 与 next() 。
1》 iter() 方法返回一个特殊的迭代器对象, 这个迭代器对象实现了__next__() 方法并通过 StopIteration 异常标识迭代的完成。
2》next() 方法(Python 2 里是 next())会返回下一个迭代器对象。
生成器:
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
3装饰器的作用和功能

		 - 引入日志
		 - 函数执行时间的统计
		 - 函数执行前预备
		 - 函数执行后的清理
		 - 权限校验等场景
		 - 缓存

4 GIL( Global Interpreter Lock(全局解释器锁) )
python代码的执行有虚拟机(主循环解释器)控制。python在设计之初就要考虑到解释器的主循环中,同时只能有一个线程执行,
对虚拟机的访问有全局解释器锁控制,从而保证同一时刻只有一个线程执行。
在多线程环境中,python按如下方式运行:
1设置GIL
2 切换到一个线程去执行
3运行
通过指定数量的字节码指令或线程主动让出控制(调用time.sleep(0))
4把线程设置为睡眠状态
5解锁GIL
6再次重复以上所有步骤
在调用外部代码的时候,GIL就会被锁定直到函数运行结束。
5、find和grep

grep命令是一种强大的文本搜索工具,grep搜索内容串可以是正则表达式,允许对文本文件进行模式查找。如果找到匹配模式,grep打印包含模式的所有行。

find通常用来再特定的目录下搜索符合条件的文件,也可以用来搜索特定用户属主的文件。
6、线上服务可能因为种种原因导致挂掉怎么办?

linux下的后台进程管理利器 supervisor

每次文件修改后再linux执行 service supervisord restart

7、如何提高python的运行效率

	使用生成器;
	关键代码使用外部功能包(Cython,pylnlne,pypy,pyrex);
	针对循环的优化--尽量避免在循环中访问变量的属性

8python是如何进行内存管理的
python内存管理机制 ( Pymalloc ) 包括三个方面:引用计数、垃圾收集、内存池。下面分别予以阐述。

  1. 引用计数:python程序中使用的每个变量后台都有一个引用计数。赋值或调用操作,计数加一;相反,删除或移出窗口对象,计数减一。

  2. 垃圾收集:将引用计数为0的对象所占有的内存空间释放。还有一个循环垃圾收集器,负责清理未引用的循环,如两个对象互相引用的情况。

  3. 内存池:内存池是预先从内存中申请的内存块,当创建小于256 bits 的对象时,从内存池申请内存空间。创建大于256 bits 的对象从内存申请空间。释放内存时,来自内存池的内存空间返回给内存池。这样做的目的是为了减少内存碎片,提升效率。
    9、描述数组、链表、队列、堆栈的区别?

    数组与链表是数据存储方式的概念,数组在连续的空间中存储数据,而链表可以在非连续的空间中存储数据;

    队列和堆栈是描述数据存取方式的概念,队列是先进先出,而堆栈是后进先出;队列和堆栈可以用数组来实现,也可以用链表实现。
    10.django 中当一个用户登录 A 应用服务器(进入登录状态),然后下次请求被 nginx 代理到 B 应用服务器会出现什么影响?

如果用户在A应用服务器登陆的session数据没有共享到B应用服务器,纳米之前的登录状态就没有了。

11.跨域请求问题django怎么解决的(原理)

		启用中间件
		post请求
		验证码
		表单中添加{%csrf_token%}标签

12请描述一下django架构
对于Django框架遵循MVC设计,并且有一个专有名词:MVT

M全拼为Model,模型,与MVC中的M功能相同,负责数据处理,内嵌了ORM框架

V全拼为View,视图,与MVC中的v功能相同,接收HttpRequest,业务处理,返回HttpResponse

T全拼为Template,与MVC中的c功能相同,负责封装构造要返回的html,内嵌了模板引擎

13.django对数据查询结果排序怎么做,降序怎么做,查询大于某个字段怎么做

 排序使用order_by()

 降序需要在排序字段名前加-

 查询字段大于某个值:使用filter(字段名_gt=值)

14.说一下Django,MIDDLEWARES中间件的作用?

答:中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。
15 Django,MIDDLEWARES中间件的作用?

答:中间件是介于request与response处理之间的一道处理过程,相对比较轻量级,并且在全局上改变django的输入与输出。
16.Django重定向你是如何实现的?用的什么状态码?

使用HttpResponseRedirect

redirect和reverse

状态码:302,301

17.ngnix的正向代理与反向代理?

正向代理 是一个位于客户端和原始服务器(origin server)之间的服务器,为了从原始服务器取得内容,客户端向代理发送一个请求并指定目标(原始服务器),然后代理向原始服务器转交请求并将获得的内容返回给客户端。客户端必须要进行一些特别的设置才能使用正向代理。

反向代理正好相反,对于客户端而言它就像是原始服务器,并且客户端不需要进行任何特别的设置。客户端向反向代理的命名空间中的内容发送普通请求,接着反向代理将判断向何处(原始服务器)转交请求,并将获得的内容返回给客户端,就像这些内容原本就是它自己的一样。
18.Django 本身提供了 runserver,为什么不能用来部署?

runserver 方法是调试 Django 时经常用到的运行方式,它使用 Django 自带的
WSGI Server 运行,主要在测试和开发中使用,并且 runserver 开启的方式也是单进程 。

uWSGI 是一个 Web 服务器,它实现了 WSGI 协议、uwsgi、http 等协议。注意 uwsgi 是一种通信协议,而 uWSGI 是实现 uwsgi 协议和 WSGI 协议的 Web 服务器。uWSGI 具有超快的性能、低内存占用和多 app 管理等优点,并且搭配着 Nginx

就是一个生产环境了,能够将用户访问请求与应用 app 隔离开,实现真正的部署 。相比来讲,支持的并发量更高,方便管理多进程,发挥多核的优势,提升性能。
19 .AJAX是什么,如何使用AJAX?

ajax(异步的javascript 和xml) 能够刷新局部网页数据而不是重新加载整个网页。

第一步,创建xmlhttprequest对象,var xmlhttp =new XMLHttpRequest();XMLHttpRequest对象用来和服务器交换数据。

第二步,使用xmlhttprequest对象的open()和send()方法发送资源请求给服务器。

第三步,使用xmlhttprequest对象的responseText或responseXML属性获得服务器的响应。

第四步,onreadystatechange函数,当发送请求到服务器,我们想要服务器响应执行一些功能就需要使用onreadystatechange函数,每次xmlhttprequest对象的readyState发生改变都会触发onreadystatechange函数。
20 cookie 和session 的区别?

	1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
	
	2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗考虑到安全应当使用session。
	
	3、session会在一定时间内保存在服务器上。当访问增多,会比较占用服务器的性能考虑到减轻服务器性能方面,应当使用COOKIE。
	
	4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。

5、建议:
   将登陆信息等重要信息存放为SESSION
   其他信息如果需要保留,可以放在COOKIE中

21.创建一个简单tcp服务器需要的流程

	1.socket创建一个套接字
	
	2.bind绑定ip和port
	
	3.listen使套接字变为被动链接
	
	4.accept等待客户端的链接
	
	5.recv/send接收发送数据

22什么是关联查询,有哪些?

关联查询,即将多个表联合起来进行查询,主要有内连接、左连接、右连接、全连接(外连接)
23数据库的优化
1. 优化索引、SQL 语句、分析慢查询;
2. 设计表的时候严格根据数据库的设计范式来设计数据库;
3. 使用缓存,把经常访问到的数据而且不需要经常变化的数据放在缓存中,能
节约磁盘IO;
4. 优化硬件;采用SSD,使用磁盘队列技术(RAID0,RAID1,RDID5)等;
5. 采用MySQL 内部自带的表分区技术,把数据分层不同的文件,能够提高磁
盘的读取效率;
6. 垂直分表;把一些不经常读的数据放在一张表里,节约磁盘I/O;
7. 主从分离读写;采用主从复制把数据库的读操作和写入操作分离开来;
8. 分库分表分机器(数据量特别大),主要的的原理就是数据路由;
9. 选择合适的表引擎,参数上的优化;
10. 进行架构级别的缓存,静态化和分布式;
11. 不采用全文索引;
12. 采用更快的存储方式,例如 NoSQL存储经常访问的数据
24 分布式爬虫主要解决什么问题?

简单说分布式爬虫就是把多个单机连接到一起,共同执行任务,效率肯定翻番啦。
•ip:切换IP防封
•带宽:解决单机带宽限制
•cpu:水平扩展,cpu性能不够?增加机器即可
•io:提高整个系统io效率

25.爬虫过程中验证码怎么处理?

	1.scrapy自带
	
	2.付费接口
详细见
	1》[python爬虫四种验证码的解决思路](https://blog.csdn.net/qq_28119741/article/details/80604149)
	2》[反爬必修课](https://www.jianshu.com/nb/34212235)

26常见的反爬虫以及应对方法

在这里插入图片描述

摘自:http://www.cnblogs.com/chongdongxiaoyu/p/9054847.html
https://blog.csdn.net/zhanglh6013/article/details/24401381
https://blog.csdn.net/zhanglh6013/article/details/24401381
https://www.jianshu.com/p/12d3a793db3c

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值