2020元旦巨献,面试升级必备!献给正在学习Python的同学!
Python 全栈工程师必备面试题 300 道(2020 版)
-
Python 面试不仅需要掌握 Python 基础知识和高级语法,还会涉及网络编程、web 前端后端、数据库、网络爬虫、数据解析、数据分析和数据可视化等各方面的核心知识。针对网上资料参差不齐,并且自己上网寻找费时费力,效果还不好的问题,进行该 Chat 创作。
-
本人结合自己多年的开发经验,同时汲取网络中的精华,本着打造全网最全面最深入的面试题集,分类归纳总结了 Python 面试中的核心知识点,这篇文章不论是从深度还是广度上来讲,都已经囊括了非常多的知识点了,读者可以根据自己的需要强化升级自己某方面的知识点,文中所有案例在 Python3.6 环境下都已通过运行。
-
本文章是作者呕心沥血,耗时两个月潜心完成。通过阅读本文章,可以在最短的时间内获取 Python 技术栈最核心的知识点,同时更全面更深入的了解与 Python 相关的各项技术。
Python 全栈工程师必备面试题 300 道(2020 版)----欢迎订阅
加个人微信: AXiaShuBai 进Python小伙伴交流群
本 Chat 你将会获得以下知识:
- Python 基础知识
- 语言特征、编码规范、文件I/O操作、数据类型、常用内置函数
- Python高级语法
- 类、元类、装饰器、闭包、迭代器、生成器、模块、面向对象、设计模式、内存管理
- 系统编程
- 多进程、多线程、协程、并行、并发、锁
- 网络编程
- TCP、UDP、HTTP、SEO、WSGI
- 数据库
- MySQL、NoSQL、Redis、MongoDB
- 数据解析提取
- re正则表达式、XML、lxml、XPath、BeautifulSoup4
- 网络爬虫
- urllib、requests、Scrapy、反爬虫、分布式爬虫
- 数据分析及可视化
- Numpy、Pandas、Matplotlib
适合人群: 正在或者准备找工作的同学,想要武装强化的 Python 技术开发者
所有问题(含部分答案)
1. Python基础知识
语言特征及编码规范
1.1 Python的解释器有哪些?
1.2 列举至少5条Python3和Python2的区别?
1.3 Python新式类和经典类的区别是什么
1.4 Python 之禅是什么,python中如何获取python之禅?
1.5 python中的DocStrings(解释文档) 有什么作用?
- DocStrings 文档字符串是一个重要工具,用于解释文档程序,帮助你的程序文档更加简单易懂。主要是解释代码作用的。
- 我们可以在函数体的第一行使用一对三个单引号 ''' 或者一对三个双引号 """ 来定义文档字符串。
- 使用 \_\_doc\_\_(注意双下划线)调用函数中的文档字符串属性(注意,文中出现的反斜杠是转义符,去除一些符号的特殊格式)
'''
Author: Felix
WX: AXiaShuBai
Email: xiashubai@gmail.com
Blog: https://blog.csdn.net/u011318077
Date: 2019/12/9 11:17
Desc:
'''
def print_max(x,y):
'''
打印两个整数中较大的值
:param x: 整数
:param y: 整数
:return: 返回较大值
'''
if x > y:
print(x)
else:
print(y)
print_max(3, 5)
print(print_max.__doc__)
1.6 Python3中的类型注解有什么好处?如何使用?
1.7 Python语言中的命名规范有哪些?
1. **基本原则**:Python 语言的标识符必须以字母、下划线\_开头,数字不能作为开头,后面可以跟任意数目的字母、数字和下划线\_。此处的字母并不局限于 26 个英文字母,可以包含中文字符、日文字符等。
2. **禁忌**:Python 还包含一系列关键字和内置函数,不建议使用它们作为变量名,防止发生冲突。
**常用命名规则:**
项目名:首字母大写、其余单词小写,多单词组合则用下划线分割
包名、模块名—:全用小写字母
类名:首字母大写、其他字母小写,多单词采用驼峰
方法:小写单词
函数:若函数的参数名与保留关键字冲突,则在参数后加一个下划线,比拼音好太多
全局变量——采用全大写,多单词用下划线分割
3. **注意**:
1. 不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。
2. 私有类成员使用单一下划线前缀标识,多定义公开成员,少定义私有成员。
3. 变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。
4. 开头,结尾,一般为python的自有变量,不要以这种方式命名
5. 以__开头(2个下划线),是私有实例变量(外部不嫩直接访问),依照情况进行命名
1.8 Python中各种下划线的作用?
1.9 单引号、双引号、三引号的有什么区别?
文件I/O操作
1.10 Python中打开文件有哪些模式?
1.11 Python中read、readline和readlines的区别?
1.12 大文件只需读取部分内容,或者避免读取时候内存不足的解决方法?
1.13 什么是上下文?with上下文管理器原理?
- with常用于打开文件,使用with可以自动关闭,即使出现错误
- 什么是上下文(context)?
- context其实说白了,和文章的上下文是一个意思,在通俗一点,我觉得叫环境更好
- 上下文虽然叫上下文,但是程序里面一般都只有上文而已,只是叫的好听叫上下文。。
- 进程中断在操作系统中是有上有下的,不过不这个高深的问题就不要深究了
- 任何实现了 enter() 和 exit() 方法的对象都可称之为上下文管理器,
上下文管理器对象可以使用with关键字。显然,文件(file)对象也实现了上下文管理器。
- 那么文件对象是如何实现这两个方法的呢?我们可以模拟实现一个自己的文件类,
让该类实现 enter() 和 exit() 方法。
'''
Author: Felix
WX: AXiaShuBai
Email: xiashubai@gmail.com
Blog: https://blog.csdn.net/u011318077
Date: 2019/12/22 10:55
Desc:
'''
class File():
def __init__(self, filename, mode):
self.filename = filename
self.mode = mode
def __enter__(self):
print("entering")
self.f = open(self.filename, self.mode)
return self.f
def __exit__(self, *args):
print("will exit")
self.f.close()
# __enter__() 方法返回资源对象,这里就是你将要打开的那个文件对象,
# __exit__() 方法处理一些清除工作。
with File('out.txt', 'w') as f:
print("writing")
f.write('hello, python')
# 你就无需显示地调用 close 方法了,由系统自动去调用,哪怕中间遇到异常 close 方法也会被调用。
1.14 什么是全缓冲、行缓冲和无缓冲?
1.15 什么是序列化和反序列化?json序列化时常用的四个函数是什么?
1.16 json中dumps转换数据时候如何保持中文编码?
数据类型
1.17 Python中的可变和不可变数据类型是什么?
1.18 is和==有什么区别?
1.19 Python中的单词大小写转换和字母统计?
1.20 字符串,列表,元组如何反转?反转函数reverse和reversed的区别?
1.21 Python中的字符串格式化的方法有哪些?f-string格式化知道吗?
1.22 含有多种符号的字符串分割方法?
1.23 嵌套列表转换为列表,字符串转换为列表的方法?
1.24 列表合并的常用方法?
1.25 列表如何去除重复的元素,还是保持之前的排序?
1.26 列表数据如何筛选,筛选出符合要求的数据?
1.27 字典中元素的如何排序?sorted排序函数的使用详解?
1.28 字典如何合并?字典解包是什么?
1.29 字典推导式使用方法?字典推导式如何格式化cookie值?
- 字典生成式和列表生成式一样,都是使用for循环,可以多层for循环嵌套
- 字典的键值交换:{v:k for k,v in d.items()}
- 字典生成式常用于cookie值转换为字典格式
# 字典键值交换
d = {
'a': '1', 'b': '2', 'c': '3'}
print({
v: k for k,v in d.items()})
# 字典推导式的常用于格式化cookie值:
# 字符串分割后得到字典
cookies = "anonymid=k06r6sdauyh36v; depovince=ZGQT; _r01_=1; JSESSIONID=abcOraT1E7z0JhHDATb0w; ick_login=8f53ebf1-b972-4572-8f77-810953dcfdfe; first_login_flag=1; ln_uact=55555835@qq.com;loginfrom=null; wp_fold=0"
# 使用字典推导式将上述字符串转化为一个字典, 先使用;分割得到一个列表,
# 列表中每一个元素再用=进行分割,列表第一个值为键,第二个值为值
cookies ={
i.split("=")[0]: i.split("=")[1] for i in cookies.split(";")}
print(cookies)
# {'1': 'a', '2': 'b', '3': 'c'}
# {'anonymid': 'k06r6sdauyh36v', ' depovince': 'ZGQT', ' _r01_': '1', ' JSESSIONID': 'abcOraT1E7z0JhHDATb0w', ' ick_login': '8f53ebf1-b972-4572-8f77-810953dcfdfe', ' first_login_flag': '1', ' ln_uact': '55555835@qq.com', 'loginfrom': 'null', ' wp_fold': '0'}
1.30 zip打包函数的使用?元组或者列表中元素生成字典?
1.31 字典的键可以是哪些类型的数据?
1.32 变量的作用域是怎么决定的?
常用内置函数
1.33 collections.Counter统计一篇文章中单词出现的次数?出现频率最高的5个单词?
1.34 map映射函数按规律生成列表或集合?
1.35 filter过滤函数如何使用?如何过滤奇数偶数平方根数?
1.36 sort和sorted排序函数的用法区别?
1.37 enumerate为元素添加下标索引?
1.38 lambda匿名函数如何使用?
1.39 type和help函数有什么作用?
1.40 assert语句有什么作用?
- 使用assert断言是学习python一个非常好的习惯,python assert 断言句语格式及用法很简单。在没完善一个程序之前,我们不知道程序在哪里会出错,与其让它在运行最崩溃,不如在出现错误条件时就崩溃,这时候就需要assert断言的帮助。
- python assert断言语句是声明其布尔值必须为真的判定,如果发生异常就说明表达示为假。可以理解assert断言语句为raise-if-not,用来测试表示式,其返回值为假,就会触发异常。
- assert expression,等价于:if not expression:raise AssertionError
- 参考代码
'''
Author: Felix
WX: AXiaShuBai
Email: xiashubai@gmail.com
Blog: https://blog.csdn.net/u011318077
Date: 2019/12/9 11:17
Desc:
'''
def deallist(l):
"""
此函数是用来返回列表中元素的和
"""
assert len(l) > 1, '此列表中没有元素'
return sum(l)
l1 = [1,2,3,4