Python 爬虫面试题 170 道
最近在刷面试题,看了网络上大量的 Python 相关面试题后,我发现了这几个问题:
-
有些还是 Python2 的代码
-
回答的很简单,关键的题目没有点出为什么
-
一些复制粘贴的代码根本就跑不通
这几个问题相信大家深有体会吧,所以我决定针对市面上大多的 Python 题目做一个分析,同时也希望大家尽可能的做到举一反三,而不是局限于题目本身。
通过本场我分享的这篇文章,你将获得如下知识点:
-
掌握 Python 的基础语法
-
语法常见的 Python 应用场景
-
掌握 Python 闭包的使用以及装饰器的使用
-
生成器和迭代器的使用
-
常见的设计模式的使用
-
深浅拷贝的区别
-
线程、进程、协程的使用
-
了解 Python 中的元编程和反射
-
常考的数据结构和算法
-
爬虫相关知识,网络编程基本知识等
限于篇幅,答案不能全部展示
获取 170 道 Python 爬虫面试题答案
https://gitbook.cn/gitchat/activity/5cf8ca61da0c2c41ee4697ff?utm_source=chat190705
01
所有题目
语言特性
-
谈谈对 Python 和其他语言的区别
-
简述解释型和编译型编程语言
-
Python 的解释器种类以及相关特点?
-
说说你知道的Python3 和 Python2 之间的区别?
-
Python3 和 Python2 中 int 和 long 区别?
-
xrange 和 range 的区别?
编码规范
-
什么是 PEP8?
-
了解 Python 之禅么?
-
了解 docstring 么?
-
了解类型注解么?
-
例举你知道 Python 对象的命名规范,例如方法或者类等
-
Python 中的注释有几种?
-
如何优雅的给一个函数加注释?
-
如何给变量加注释?
-
Python 代码缩进中是否支持 Tab 键和空格混用。
-
是否可以在一句 import 中导入多个库?
-
在给 Py 文件命名的时候需要注意什么?
-
例举几个规范 Python 代码风格的工具
02
数据类型
字符串
-
列举 Python 中的基本数据类型?
-
如何区别可变数据类型和不可变数据类型
-
将"hello world"转换为首字母大写"Hello World"
-
如何检测字符串中只含有数字?
-
将字符串"ilovechina"进行反转
-
Python 中的字符串格式化方式你知道哪些?
-
有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。
-
获取字符串”123456“最后的两个字符。
-
一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
-
(1)s=“info:xiaoZhang 33 shandong”,用正则切分字符串输出’info’, ‘xiaoZhang’, ‘33’, ‘shandong’ a = "你好 中国 ",去除多余空格只留一个空格。
-
(1)怎样将字符串转换为小写 (2)单引号、双引号、三引号的区别?
列表
-
已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。
-
如何实现 “1,2,3” 变成 [“1”,“2”,“3”]
-
给定两个 list,A 和 B,找出相同元素和不同元素
-
[[1,2],[3,4],[5,6]]一行代码展开该列表,得出[1,2,3,4,5,6]
-
合并列表[1,5,7,9]和[2,2,6,8]
-
如何打乱一个列表的元素?
字典
-
字典操作中 del 和 pop 有什么区别
-
按照字典的内的年龄排序
-
请合并下面两个字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}
-
如何使用生成式的方式生成一个字典,写一段功能代码。
-
如何把元组(“a”,“b”)和元组(1,2),变为字典{“a”:1,“b”:2}
综合
-
Python 常用的数据结构的类型及其特性?
-
如何交换字典 {“A”:1,“B”:2}的键和值?
-
Python 里面如何实现 tuple 和 list 的转换?
-
我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
-
请将[i for i in range(3)]改成生成器
-
a="hello"和 b="你好"编码成 bytes 类型
-
下面的代码输出结果是什么?
-
下面的代码输出的结果是什么?
03
操作类题目
-
Python 交换两个变量的值
-
在读文件操作的时候会使用 read、readline 或者 readlines,简述它们各自的作用
-
json 序列化时,可以处理的数据类型有哪些?如何定制支持 datetime 类型?
-
json 序列化时,默认遇到中文会转换成 unicode,如果想要保留中文怎么办?
-
有两个磁盘文件 A 和 B,各存放一行字母,要求把这两个文件中的信息合并(按字母顺序排列),输出到一个新文件 C 中。
-
如果当前的日期为 20190530,要求写一个函数输出 N 天后的日期,(比如 N 为 2,则输出 20190601)。
-
写一个函数,接收整数参数 n,返回一个函数,函数的功能是把函数的参数和 n 相乘并把结果返回。
-
下面代码会存在什么问题,如何改进?
-
一行代码输出 1-100 之间的所有偶数。
-
with 语句的作用,写一段代码?
-
python 字典和 json 字符串相互转化方法
-
请写一个 Python 逻辑,计算一个文件中的大写字母数量
-
请写一段 Python连接 Mongo 数据库,然后的查询代码。
-
说一说 Redis 的基本类型。
-
请写一段 Python连接 Redis 数据库的代码。
-
请写一段 Python 连接 MySQL 数据库的代码。
-
了解 Redis 的事务么?
-
了解数据库的三范式么?
-
了解分布式锁么?
-
用 Python 实现一个 Reids 的分布式锁的功能。
-
写一段 Python 使用 Mongo 数据库创建索引的代码。
高级特性
-
函数装饰器有什么作用?请列举说明?
-
Python 垃圾回收机制?
-
魔法函数 __call__怎么使用?
-
如何判断一个对象是函数还是方法?
-
@classmethod 和@staticmethod 用法和区别
-
Python 中的接口如何实现?
-
Python 中的反射了解么?
-
metaclass 作用?以及应用场景?
-
hasattr() getattr() setattr()的用法
-
请列举你知道的 Python 的魔法方法及用途。
-
如何知道一个 Python 对象的类型?
-
Python 的传参是传值还是传址?
-
Python 中的元类(metaclass)使用举例
-
简述 any()和 all()方法
-
filter 方法求出列表所有奇数并构造新列表,a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
-
什么是猴子补丁?
-
在 Python 中是如何管理内存的?
-
当退出 Python 时是否释放所有内存分配?
正则表达式
- 使用正则表达式匹配出www.baidu.com中的地址
a=“张明 98 分”,用 re.sub,将 98 替换为 100
-
正则表达式匹配中(. )和(. ?)匹配区别?
-
写一段匹配邮箱的正则表达式
其他内容
-
解释一下 python 中 pass 语句的作用?
-
简述你对 input()函数的理解
-
python 中的 is 和==
-
Python 中的作用域
-
三元运算写法和应用场景?
-
了解 enumerate 么?
-
列举 5 个 Python 中的标准模块
-
如何在函数中设置一个全局变量
-
pathlib 的用法举例
-
Python 中的异常处理,写一个简单的应用场景
-
Python 中递归的最大次数,那如何突破呢?
-
什么是面向对象的 mro
-
isinstance 作用以及应用场景?
-
什么是断言?应用场景?
-
lambda 表达式格式以及应用场景?
-
新式类和旧式类的区别
-
dir()是干什么用的?
-
一个包里有三个模块,demo1.py, demo2.py, demo3.py,但使用 from tools import *导入模块时,如何保证只有 demo1、demo3 被导入了。
-
列举 5 个 Python 中的异常类型以及其含义
-
copy 和 deepcopy 的区别是什么?
-
代码中经常遇到的*args, **kwargs 含义及用法。
-
Python 中会有函数或成员变量包含单下划线前缀和结尾,和双下划线前缀结尾,区别是什么?
-
w、a+、wb 文件写入模式的区别
-
举例 sort 和 sorted 的区别
-
什么是负索引?
-
pprint 模块是干什么的?
-
解释一下 Python 中的赋值运算符
-
解释一下 Python 中的逻辑运算符
-
讲讲 Python 中的位运算符
-
在 Python 中如何使用多进制数字?
-
怎样声明多个变量并赋值?
04
算法和数据结构
- 已知:
(1) 从 AList 和 BSet 中 查找 4,最坏时间复杂度那个大?
(2) 从 AList 和 BSet 中 插入 4,最坏时间复杂度那个大?
-
用 Python 实现一个二分查找的函数
-
python 单例模式的实现方法
-
使用 Python 实现一个斐波那契数列
-
找出列表中的重复数字
-
找出列表中的单个数字
-
写一个冒泡排序
-
写一个快速排序
-
写一个拓扑排序
-
python 实现一个二进制计算
-
有一组“+”和“-”符号,要求将“+”排到左边,“-”排到右边,写出具体的实现方法。
-
单链表反转
-
交叉链表求交点
-
用队列实现栈
-
找出数据流的中位数
-
二叉搜索树中第 K 小的元素
爬虫相关
-
在 requests 模块中,requests.content 和 requests.text 什么区别
-
简要写一下 lxml 模块的使用方法框架
-
说一说 scrapy 的工作流程
-
scrapy 的去重原理
-
scrapy 中间件有几种类,你用过哪些中间件
-
你写爬虫的时候都遇到过什么?反爬虫措施,你是怎么解决的?
-
为什么会用到代理?
-
代理失效了怎么处理?
-
列出你知道 header 的内容以及信息
-
说一说打开浏览器访问 www.baidu.com 获取到结果,整个流程。
-
爬取速度过快出现了验证码怎么处理
-
scrapy 和 scrapy-redis 有什么区别?为什么选择 redis 数据库?
-
分布式爬虫主要解决什么问题
-
写爬虫是用多进程好?还是多线程好?为什么?
-
解析网页的解析器使用最多的是哪几个
-
需要登录的网页,如何解决同时限制 ip,cookie,session(其中有一些是动态生成的)在不使用动态爬取的情况下?
-
验证码的解决(简单的:对图像做处理后可以得到的,困难的:验证码是点击,拖动等动态进行的?)
-
使用最多的数据库(mysql,mongodb,redis 等),对他的理解?
网络编程
-
TCP 和 UDP 的区别?
-
简要介绍三次握手和四次挥手
-
什么是粘包?socket 中造成粘包的原因是什么?哪些情况会发生粘包现象?
并发
-
举例说明 conccurent.future 的中线程池的用法
-
说一说多线程,多进程和协程的区别。
-
简述 GIL
-
进程之间如何通信
-
IO 多路复用的作用?
-
select、poll、epoll 模型的区别?
-
什么是并发和并行?
-
一个线程 1 让线程 2 去调用一个函数怎么实现?
-
解释什么是异步非阻塞?
-
threading.local 的作用?
Git 面试题
-
说说你知道的 git 命令
-
git 如何查看某次提交修改的内容