2020年最后一个FLAG,2021年来临之前,把这170道题全部学会。
2020.11.26 写完字符串和列表相关
Python 爬虫相关的面试题
知乎大神的答案在此
语言特性
-
谈谈对 Python 和其他语言的区别
-
简述解释型和编译型编程语言
-
Python 的解释器种类以及相关特点?
-
Python3 和 Python2 的区别?
-
Python3 和 Python2 中 int 和 long 区别?
-
xrange 和 range 的区别?
编码规范
-
什么是 PEP8?
-
了解 Python 之禅么?
-
了解 DocStrings 么?
-
了解类型注解么?
-
例举你知道 Python 对象的命名规范,例如方法或者类等
-
Python 中的注释有几种?
-
如何优雅的给一个函数加注释?
-
如何给变量加注释?
-
Python 代码缩进中是否支持 Tab 键和空格混用。
-
是否可以在一句 import 中导入多个库?
-
在给 Py 文件命名的时候需要注意什么?
-
例举几个规范 Python 代码风格的工具
数据类型-字符串
- 列举 Python 中的基本数据类型?
字符串,数字,列表,元组,集合,字典
bool
int
float
str
list
dict
tuple
set
- 如何区别可变数据类型和不可变数据类型
对象内存地址来讲,可变数据类型:在内存地址不变的情况下,值可以改变 - 将"hello world"转换为首字母大写"Hello World"
>>> s='hello world'
>>> s.title
<built-in method title of str object at 0x7ff75cf566f0>
>>> s.title()
'Hello World'
>>> a=s.split('')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: empty separator
>>> s='hello world'
>>> a=s.split(" ")
>>> a
['hello', 'world']
>>> new_a=f"{a[0].capitalize()}{a[1].capitalize()}"
>>> new_a
'HelloWorld'
- 如何检测字符串中只含有数字?
>>> we="123456"
>>> we.isdigit()
True
>>> we="123456a"
>>> we.isdigit()
False
- 将字符串"ilovechina"进行反转
>>> s1="我爱你"[::-1]
>>> print(s1)
你爱我
- Python 中的字符串格式化方式你知道哪些?
%s,format,fstringpython格式化字符串f-string
>>> name='肥鼠'
>>> f'大家好,我的名字是{name}'
'大家好,我的名字是肥鼠'
- 有一个字符串开头和末尾都有空格,比如“ adabdw ”,要求写一个函数把这个字符串的前后空格都去掉。
>>> s1=' adabdw '
>>> s1[1:-1]
'adabdw'
- 获取字符串”123456“最后的两个字符。
>>> s1='123456'
>>> s1[:-2]
'1234'
>>> s1[-2:]
'56'
-
一个编码为 GBK 的字符串 S,要将其转成 UTF-8 编码的字符串,应如何操作?
-
(1)s=“info:xiaoZhang 33 shandong”,用正则切分字符串输出[‘info’, ‘xiaoZhang’, ‘33’, ‘shandong’]。(2)a = "你好 中国 ",去除多余空格只留一个空格。
-
(1) 怎样将字符串转换为小写。 (2) 单引号、双引号、三引号的区别?
>>> name='XINGUO'
>>> name.lower()
'xinguo'
单引号双引号用法都一样,只不过有些地方引号里面嵌套引号需要区分,三引号可以做注释,也可以作字符串。
若 ′ ' ′ 和 " " "不足以满足要求,还可以使用 ′ ′ ′ ''' ′′′ 和 " " " """ """
>>> f"He said {"I'm Eric"}"
File "<stdin>", line 1
f"He said {"I'm Eric"}"
^
SyntaxError: invalid syntax
>>> f'He said {"I'm Eric"}'
File "<stdin>", line 1
f'He said {"I'm Eric"}'
^
SyntaxError: invalid syntax
>>> f"""He said {"I'm Eric"}"""
"He said I'm Eric"
>>> f'''He said {"I'm Eric"}'''
"He said I'm Eric"
数据类型 - 列表
- 已知 AList = [1,2,3,1,2],对 AList 列表元素去重,写出具体过程。
AList = [1,2,3,1,2]
new=list(set(AList))
print(new)
- 如何实现 “1,2,3” 变成 [“1”,“2”,“3”]
>>> a="1,2,3"
>>> a.split(',')
['1', '2', '3']
- 给定两个 list,A 和 B,找出相同元素和不同元素
# 给定两个 list,A 和 B,找出相同元素和不同元素
A=[1,2,3,4,5,6,7,8,9]
B=[1,3,5,7,9]
print('A、B中相同元素:')
print(set(A)&set(B))
print('A、B中不同元素:')
print(set(A)^set(B))
x=set('google')
y=set('baidusousuo')
print(x&y)# 交集
print(x|y)# 并集
print(x-y)# 差集
A、B中相同元素:
{
1, 3, 5, 7, 9}
A、B中不同元素:
{
2, 4, 6, 8}
{
'o'}
{
'g', 'e', 'u', 'a', 's', 'i', 'o', 'l', 'd', 'b'}
{
'e', 'g', 'l'}
Python set() 函数
33. [[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]
# [[1,2],[3,4],[5,6]] 一行代码展开该列表,得出 [1,2,3,4,5,6]
# 我的方法
A= [[1,2],[3,4],[5,6]]
C=[]
for i in A:
for j in i:
C.append(j)
#列表嵌套列表,所以通过两次循环取元素,第一次循环取出嵌套列表,第二次循环取出嵌套列表里的元素
print(C)
# 不是很理解的方法
# 第二种方法是列表推导式,是一种简易写法
b = [j for i in A for j in i]
print(b)
这一行代码就搞定,神奇的b = [j for i in A for j in i]
34. 合并列表 [1,5,7,9] 和 [2,2,6,8]
# 合并列表 [1,5,7,9] 和 [2,2,6,8]
list_1 = [1, 5, 7, 9]
list_2 = [2, 2, 6, 8]
list_1.extend(list_2)
print(list_1)
list_1 = [1, 5, 7, 9]
list_2 = [2, 2, 6, 8]
for i in list_2:
list_1.append(i)
print(list_1)
- 如何打乱一个列表的元素?
import random
a = [1, 2, 3, 4, 5]
random.shuffle(a)
print(a)
数据类型 - 字典
- 字典操作中 del 和 pop 有什么区别
a = {
"A": 1, "B": 2}
b = {
"C": 3, "D": 4}
for key, value in b.items():
a[key] = value
print(a)
del a["A"]
print(a)
b=a.pop("C")
print(b)
print(a)
- 按照字典内的年龄排序
d1 = [
{
'name': 'alice', 'age': 38},
{
'name': 'bob', 'age': 18},
{
'name': 'ctrl', 'age': 28}
]
# 强大的sort方法,满足大多数排序算法,列表排序优先考虑sort!
"""
list.sort( key=None, reverse=False)
key -- 主要是用来进行比较的元素,只有一个参数,
具体的函数的参数就是取自于可迭代对象中,指定可
迭代对象中的一个元素来进行排序。
reverse -- 排序规则,reverse = True 降序, reverse = False 升序(默认)。
"""
d1.sort(key=lambda x: x['age'])
print(d1)
作者:知乎用户
链接:https://www.zhihu.com/question/54513391/answer/789529956
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
- 请合并下面两个字典 a = {“A”:1,“B”:2},b = {“C”:3,“D”:4}
a = {
"A": 1, "B": 2}
b = {
"C": 3, "D": 4}
for key, value in b.items():
a[key] = value
print(a)
-
如何使用生成式的方式生成一个字典,写一段功能代码。
d = {key : value for (key,value) in iterable}
其中iterable是一个可迭代的对象,比如list -
如何把元组 (“a”,“b”) 和元组 (1,2),变为字典 {“a”:1,“b”:2}
tuple_1 = ("a", "b")
tuple_2 = (1, 2)
my_dict = {
}
for lengh in range(len(tuple_1)):
my_dict[tuple_1[lengh]] = tuple_2[lengh]
print(my_dict)
数据类型 - 综合
-
下列字典对象键类型不正确的是?
-
如何交换字典 {“A”:1,“B”:2}的键和值
-
Python 里面如何实现 tuple 和 list 的转换?
-
我们知道对于列表可以使用切片操作进行部分元素的选择,那么如何对生成器类型的对象实现相同的功能呢?
-
请将 [i for i in range(3)] 改成生成器
-
a=“hello” 和 b=“你好” 编码成 bytes 类型
-
下面的代码输出结果是什么?
-
下面的代码输出的结果是什么?
操作类题目
-
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数据库,然后的查询代码。
62.说一说Redis的基本类型
-
请写一段 Python连接Redis数据库的代码。
-
请写一段 Python连接Mysql数据库的代码。
65.了解Redis的事务么
66.了解数据库的三范式么?
67.了解分布式锁么
68.用 Python 实现一个 Reids 的分布式锁的功能
69.写一段 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 时是否释放所有内存分配?
正则表达式
- (1)使用正则表达式匹配出
www.baidu.com中的地址(2)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 中如何使用多进制数字?
-
怎样声明多个变量并赋值?
算法和数据结构
-
已知:
-
用 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 中造成粘包的原因是什么? 哪些情况会发生粘包现象?
并发
-
举例说明 concurrent.future 的中线程池的用法
-
说一说多线程,多进程和协程的区别。
-
简述 GIL
-
进程之间如何通信
-
IO 多路复用的作用?
-
select、poll、epoll 模型的区别?
-
什么是并发和并行?
-
一个线程 1 让线程 2 去调用一个函数怎么实现
-
解释什么是异步非阻塞?
-
threading.local 的作用?
Git 面试题
-
说说你知道的 git 命令
-
git 如何查看某次提交修改的内容