本人总结的一些python面试题,希望你可以获得收获!
第一阶段 Python基础
for循环的坑
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37for i in "你好呀":
pass
print(i)
--------------------
lst = []
for i in lst:
lst.appent('alex')
print(lst)
# 不会打印内容,因为lst是空的,循环不起来
------------------------
lst = [1,2]
for i in lst:
lst.append('33')
print(lst)
# 循环打印lst中的内容 --此循环是死循环
--------------------------
lst = [1,2]
for i in lst:
lst.append('333')
print(lst)
# 死循环,不会打印内容
--------------------------
lst = []
for i in range(5):
lst.append([])
print(lst)
# [[],[],[],[],[]]
----------------------------
lst = [1,2]
lst[0] = lst
print(lst)
# [[……],2]
整数和布尔值的转换
1
2bin(56) -- 十进制转二进制
int('1011', 2) -- 二进制转十进制一行代码互换a,b
1
2
3a, b = 10, 20
a, b = b, a
print(a, b)一句代码将lst去重
1
2lst = [23,4,2342,34,2234,34,2,1,234,2,23,12,1,21,12]
print(list(set(lst)))字典的创建方式
1
2
3
4
5
6
7
8
9
10
11
121. 通过fromkeys生成字典
dic = dict.fromkeys("abc",[])
**注意,我这儿用dic接收了
dic['a'].append(1)
print(dic)
# {'a': [3], 'b': [3], 'c': [3]} 可迭代,主要
2. 通过字典生成式
dic = {i:i*i for i in range(10)}
3. dict生成
dic = dict(a=1,b=2,c=3)删除列表的坑(要记住,列表和字典是可变数据类型)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16lst = [1, 2]
for i in lst:
lst.append(3)
print(lst) # 死循环
-------------------
lst = [1,2,3,4,5]
for i in lst:
lst.pop()
print(lst) # [1,2]
lst = [1,2,3,4]
for i in lst:
lst.pop(0)
print(lst) # [3,4]
成功删除的方式
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31# 列表
lst = [1,2,3,4,5,6]
for i in range(len(lst)):
lst.pop()
print(lst)
-------------------------
lst = [1,2,3,4,5,6]
for i in range(len(lst)-1, -1, -1):
del lst[i]
print(lst)
----------------------------
lst = [1,2,3,4,5,6]
lst1 = lst.copy()
for i in lst1:
lst.remove(i)
print(lst)
--------------------------------
# 字典
dic = dict.fromkeys('2345678',1)
dic1 = dic.copy()
for i in dic1:
dic.pop(i)
print(dic)
-------------------------------
dic = {}
dic.fromkeys('abc',[])
print(dic) # {} 一定要仔细,这个没有给原来的dic赋值,所以上面的语句跟dic没关系
第二阶段 函数
1. 三元运算
1 | a, b = 0, 2 |
2. lambda 表达式
3. yield关键字
第三阶段 面向对象
1.构造函数和析构函数
1 | ** 构造函数,用于创建对象的函数 |
2.重写和重载的区别
1 | ** 重载 |
3.什么是接口
1 | Interface Iperson: |
4.Python的类执行多继承/其他语言不支持多继承
1 | # Python |
5. 在其他语言中 可以实现多个接口/不可以继承多个类
1 | # Java |
6. 抽象类和抽象方法
抽象类:使用元类来描述父类。在元类中给出一个抽象方法。这样子类就不得不给出抽象类方法的具体实现,也可以起到约束作用
1 | # java |
第四阶段 高级编程
1. 进程和线程的区别?
- 模块
- 网络
- 并发
第五阶段 数据库
1.数据库
1 | 数据库设计:博客系统 / 呼啦圈 |
2. redis
如何在不重启的情况下,将rdb持久化切换成aof持久化?
准备一个rdb的redis数据库
通过命令直接切换aof
127.0.0.1:6379> CONFIG set appendonly yes #开启AOF功能
OK
127.0.0.1:6379> CONFIG SET save “” #关闭RDB功能
OK正确情况下,会生成aof日志文件了,此时命令操作都是在aof里面了
还得修改配置文件,以上命令只是临时生效,改完以后,下次指定配置文件启动,就一直是aof了
1
2
3
4
5
6
7
8
9
10
11 > port 6379
> logfile /data/6379/redis.log
> dir /data/6379
> dbfilename dbmp.rdb
> save 900 1
> save 300 10
> save 60 10000
> daemonize yes
> appendonly yes
> appendfsync everysec
>
第六阶段 前端&django
1.在浏览器上输入www.xxx.com发生了什么?
1 | - dns解析:将域名www。xxx。com解析成ip地址,首先从浏览器缓存找域名对应的ip,找不到的话会到hosts文件中找,接下来才到你配置的dns中找,找不到的话继续向它上级dns找,直到根dns,还是没找到的话就报错,寻找dns一般用udp协议 |
2.http和https的区别?
1 | http:默认端口 80 |
3.cookie和session的区别
1 |
4.get和post的区别
1 |
第七阶段 crm
第八阶段 drf
第九阶段 cmdb
第十阶段 flask
1.编程语言及他们之间的区别?
1 | C/C++,很多语言的底层实现都是c,代码执行效率高,自己做内存管理,对代码要求比较高,很多功能需要手动实现。 |
2.数据库连接池
0x01 初级阶段
1 | import pymysql |
0x02 给老版做修改
1 | import pymysql |
0x03 数据库连接池
安装
1 | pip3 install dbutils |
使用
1 | import pymysql |
0x04 多线程测试
1 | import pymysql |
0x05 基于函数实现sqlhelper
1 |
4.dr如何帮助我们快速开发的?drf提供了哪些功能?
1 | - 视图,APIView |
序列化:展示特殊的数据(choices、FK、M2M)可使用
1
2
3depth
source,无需加括号,在源码内部会去判断是否可执行,如果可执行自动加括号。【fk/choice】
SerializerMethodField,定义钩子方法。【m2m】序列化的一些其他用法
1 | class NewArticleSerializer(serializers.ModelSerializer): |