python后端开发工程师面试题
1.关于 Python 程序格式框架的描述,以下选项中错误的是 ( A )
A: Python 语言不采用严格的“缩进”来表明程序的格式框架
B: Python 单层缩进代码属于之前最邻近的一行非缩进代码,多层缩进代码根据缩进关系决定所属范围
C: Python 语言的缩进可以采用 Tab 键实现
D: 判断、循环、函数等语法形式能够通过缩进包含一批 Python 代码,进而表达对应的语义
2.IDLE环境的退出命令是 ( A )
A: exit()
B: 回车键
C: close()
D: esc()
3.关于Python循环结构,以下选项中描述错误的是 ( A )
A: 每个continue语句只有能力跳出当前层次的循环
B: break用来跳出最内层for或者while循环,脱离该循环后程序从循环代码后继续执行
C: 遍历循环中的遍历结构可以是字符串、文件、组合数据类型和range()函数等
D: Python通过for、while等保留字提供遍历循环和无限循环结构
4.关于Python的lambda函数,以下选项中描述错误的是 ( B )
A: lambda函数将函数名作为函数结果返回
B: f = lambda x,y:x+y 执行后,f的类型为数字类型 (function类型)
C: lambda用于定义简单的、能够在一行内表示的函数
D: 可以使用lambda函数定义列表的排序原则
5.以下选项中,不是Python对文件的打开模式的是 ( D )
A: ‘r’
B: ‘+’
C: ‘w’
D: ‘c’
6.以下选项中,不是 Python 语言保留字的是 ( A )
A: do
B: pass
C: except
D: while
7.关于Python赋值语句,以下选项中不合法的是 ( C )
A: x=1;y=1
B: x=y=1
C: x=(y=1)
D: x,y=y,x
8.以下选项中,不是Python IDE的是 ( D )
A: PyCharm
B: Jupyter Notebook
C: Spyder
D: R studio
9.random库中用于生成随机小数的函数是 ( A )
A: random()
B: randint()
C: getrandbits()
D: randrange()
10.以下选项中,不属于函数的作用的是 ( A )
A: 提高代码执行速度
B: 降低编程复杂度
C: 增强代码可读性
D: 复用代码
11.关于Python文件打开模式的描述,以下选项中错误的是 ( C )
A: 只读模式r
B: 追加写模式a
C: 创建写模式n
D: 覆盖写模式w
12.time库的time.time()函数的作用是 ( D )
A: 返回系统当前时间戳对应的易读字符串表示
B: 返回系统当前时间戳对应的struct_time对象
C: 返回系统当前时间戳对应的本地时间的struct_time对象,本地之间经过时区转换
D: 返回系统当前的时间戳
13.关于函数的可变参数,可变参数*args传入函数时存储的类型是( B )
A: dict
B: tuple
C: list
D: set
14.关于形参和实参的描述,以下选项中正确的是( D )
A: 函数定义中参数列表里面的参数是实际参数,简称实参
B: 参数列表中给出要传入函数内部的参数,这类参数称为形式参数,简称形参
C: 程序在调用时,将形参复制给函数的实参
D: 函数调用时,实参默认采用按照位置顺序的方式传递给函数,Python也提供了按照形参名称输入实参的方式
15.Python语句:f = open(),以下选项中对f的描述错误的是 ( B )
A: *f是文件句柄,用来在程序中表达文件
B: 表达式print(f)执行将报错
C: *f是一个Python内部变量类型
D: 将f当作文件对象,f.read()可以读入文件全部信息
16.表达式",".join(ls)中ls是列表类型,以下选项中对其功能的描述正确的是 ( D)
A: 将逗号字符串增加到列表ls中
B: 在列表ls每个元素后增加一个逗号
C: 将列表所有元素连接成一个字符串,每个元素后增加一个逗号
D: 将列表所有元素连接成一个字符串,元素之间增加一个逗号
17.以下选项中,不是Python文件处理.seek()方法的参数是( C )
A: 0
B: 1
C: -1
D: 2
18.给定字典d,以下选项中对d.keys()的描述正确的是 ( C )
A: 返回一个列表类型,包括字典d中所有键
B: 返回一个集合类型,包括字典d中所有键
C: 返回一种dict_keys类型,包括字典d中所有键
D: 返回一个元组类型,包括字典d中所有键
19.关于Python的元组类型,以下选项中描述错误的是 ( D )
A: 一个元组可以作为另一个元组的元素,可以采用多级索引获取信息
B: 元组一旦创建就不能被修改
C: Python中元组采用逗号和圆括号(可选)来表示
D: 元组中元素不可以是不同类型
20.关于函数的关键字参数使用限制,以下选项中描述错误的是 ( A )
A: 关键字参数必须位于位置参数之前
B: 不得重复提供实际参数
C: 关键字参数必须位于位置参数之后
D: 关键字参数顺序无限制
21.关于函数,以下选项中描述错误的是 ( A )
A: 函数名称不可赋给其他变量
B: 一条函数定义定义一个用户自定义函数对象
C: 函数也是数据
D: 函数定义语句可执行
22.关于函数的参数,以下选项中描述错误的是 ( A )
A: 可选参数可以定义在非可选参数的前面
B: 一个元组可以传递给带有星号的可变参数
C: 在定义函数时,可以设计可变数量参数,通过在参数前增加星号(*)实现
D: 在定义函数时,如果有些参数存在默认值,可以在定义函数时直接为这些参数指定默认值
23.以下选项中,对于函数的定义错误的是 ( A )
A: def vfunc(*a,b):
B: def vfunc(a,b):
C: def vfunc(a,*b):
D: def vfunc(a,b=2):
24.关于lambda函数,以下选项中描述错误的是 ( A )
A: lambda不是Python的保留字
B: lambda函数也称为匿名函数
C: lambda函数将函数名作为函数结果返回
D: 定义了一种特殊的函数
25.以下选项中,不属于关系型数据库的是(D)
A:Mysql
B:Oracel
C:Microsoft SQL Server
D:MongoDB
26.以下关于字典的描述,错误的是(D)
B. 字典长度是可变的
C. 字典是键值对的集合
D. 字典中的键可以对应多个值信息
27.以下属于 Python 脚本程序转变为可执行程序的第三方库的是(D)
A. openpyxl
B. PyPDF2
C. pillow
D. pyinstaller
28.以下关于 Python 函数对变量的作用,错误的是(D)
A. 简单数据类型在函数内部用 global 保留字声明后,函数退出后该变量保留
B. 全局变量指在函数之外定义的变量,在程序执行全过程有效
C. 简单数据类型变量仅在函数内部创建和使用,函数退出后变量被释放
D. 对于组合数据类型的全局变量,如果在函数内部没有被真实创建的同名变量,则函数内部不可以直接使用并修改全局变量的值
29.以下关于列表和字符串的描述,错误的是(D)
A. 列表使用正向递增序号和反向递减序号的索引体系
B. 列表是一个可以修改数据项的序列类型
C. 字符和列表均支持成员关系操作符(in)和长度计算函数(len())
D. 字符串是单一字符的无序组合
30.以下 Python 语言关键字在异常处理结构中用来捕获特定类型异常的选项是(D)
A. for
B. lambda
C. in
D. expect
31.Python 语言中,以下表达式输出结果为 11 的选项是(D)
A. print(“1+1”)
B. print(1+1)
C. print(eval(“1+1”))
D. print(eval(“1” + “1”))
32.以下属于python多线程的模块的选项为(D)
A:multiprocessing
B:gevent
C:asyncio
D:threading
33.下列选项中,不属于Python语言特点的是(C)。
A.简单易学
B.开源
C.面对过程
D.可移植性
34.假设list1是[2,33,222,14,25],什么是list1 [-1]. ©
A:错误
B:没有
C:25
D:2
35.何时执行try-except-else的else部分?©
A:总是
B:发生异常时
C:没有异常发生时
D:没有else语法
36.为什么不鼓励以下划线开头的局部变量名?(A)
A:它们用于表示类的私有变量
B:他们混淆了口译员
C:它们用于表示全局变量
D:他们放慢执行速度
37.以下哪项是无效声明?(B)
A:abc = 1,000,000
B:a b c = 1000 2000 3000
C:a,b,c = 1000,2000,3000
D:a_b_c = 1,000,000
38.以下不属于HTTP请求库的选项为(B)
A:urllib
B:BeautifulSoup
C:requests
D:aiohttp
39.以下选项中不符合 Python 语言变量命名规则的是(B)
A.I
B.3_1
C._AI
D.TempStr
40.以下关于 Python 字符串的描述中,错误的是©
A.字符串是字符的序列,可以按照单个字符或者字符片段进行索引
B.字符串包括两种序号体系:正向递增和反向递减
C.Python 字符串提供区间访问方式,采用 [N:M] 格式,表示字符串中从 N 到 M 的索引子字符串(包含 N 和 M)
D.字符串是用一对双引号" "或者单引号‘ ‘括起来的零个或者多个字符
41.关于 import 引用,以下选项中描述错误的是(B)
A.使用 import turtle 引入turtle 库
B.可以使用 from turtle import setup 引入 turtle 库
C.使用 import turtle as t 引入 turtle 库,取别名为 t
D.import 保留字用于导入模块或者模块中的对象
42.关于程序的异常处理,以下选项中描述错误的是©
A.程序异常发生经过妥善处理可以继续执行
B.异常语句可以与 else 和 finally 保留字配合使用
C.编程语言中的异常和错误是完全相同的概念
D.Python 通过 try、except 等保留字提供异常处理功能
43.关于函数,以下选项中描述错误的是©
A.函数能完成特定的功能,对函数的使用不需要了解函数内部实现原理,只要了解函数的输入输出方式即可。
B.使用函数的主要目的是减低编程难度和代码重用
C.Python 使用 del 保留字定义一个函数
D.函数是一段具有特定功能的、可重用的语句组
44.以下选项中是 Python 中文分词的第三方库的是(A)
A.jieba
B.itchat
C.time
D.turtle
45.关于 Python 对文件的处理,以下选项中描述错误的是(B)
A.Python 通过解释器内置的 open() 函数打开一个文件
B.当文件以文本方式打开时,读写按照字节流方式
C.文件使用结束后要用 close() 方法关闭,释放文件的使用授权
D.Python 能够以文本和二进制两种方式处理文件
46.关于 Python 字符编码,以下选项中描述错误的是(D)
A.chr(x) 和 ord(x) 函数用于在单字符和 Unicode 编码值之间进行转换
B.print(chr(65)) 输出 A
C.print(ord(‘a‘)) 输出 97
D.Python 字符编码使用 ASCII 编码
47.关于 Python 循环结构,以下选项中描述错误的是(B)
A.遍历循环中的遍历结构可以是字符串、文件、组合数据类型和 range() 函数等
B.break 用来结束当前当次语句,但不跳出当前的循环体
C.continue 只结束本次循环
48.django是一个(A)模式框架。
A: MTV
B: MVC
C:WSGI
D:ISO
49.在下列Django的ORM操作方法中,哪一个不会返回QuerySet对象?D
A:all
B:filter
C:exclude
D:get
50.在下列Django的ORM操作方法中,当匹配不到数据时,哪一个会报错?B
A:all
B:get
C:exclude
D:filter
51.下列选项不是Django框架提供的表单对象的功能的是(D)
A:渲染
B:校验数据
C:解耦
D:混淆代码
52.以下哪个不是redis数据库的数据类型(C)
A:string
B:list
C:dict
D:set
53.以下说法正确的是:A
A:cookie信息是存储在客户端的
B:session信息是存储在客户端的
C:cookie技术仅有客户端实现
D:session技术不依赖cookie技术
54.以下说法错误的是:D
A:在django框架中,通过post表单提交的数据可以使用request.POST获取
B:在django框架中,通过url参数提交的数据可以使用request.GET获取
C:在django框架中,通过路径参数提交的数据可以使用视图函数的参数获取
D:在django框架中,通过post提交的json数据可以使用request.POST获取
55.生产环境下,django项目配置文件中的DEBUG属性应该设置为:D
A: 1
B:0
C:None
D:True
56.在某个django框架中定义了一个Student的模型,它用来表示学生表,以下字段定义错误的是: A
A: name = models.CharField(‘姓名’)
B: age = models.SmallIntergerField(‘年龄’, null=True, blank=True)
C: mobile = models.CharFied(‘电话’, max_length=11, min_length=11)
D: qq = models.CharField(max_length=20)
57.Django框架中,中间件的作用非常大,以下说法错误的是:D
A: 中间件可以在视图处理前处理请求对象
B: 中间件可以在视图处理结束后处理响应对象
C: 中间件可以在请求处理前处理请求对象
D: 中间件可以在视图处理中处理请求对象
58.以下不属于requests模块response对象的方法的是(D)
A:content
B:text
C:json
D:read
59.TCP协议建立连接需要多次握手?(C)
A:一次
B:二次
C:三次
D:四次
60.TCP协议断开连接需要多次挥手?(D)
A:一次
B:二次
C:三次
D:四次
61.以下选项中不属于网页解析库的是(C)
A:re
B:lxml
C:requests
D:BeautifuiSoup
62.redis中数据库默认是多少个db?(C)
A:10个
B:15个
C:16个
D:20个
63.下列选项中,不属于django内置组件的是?(B)
A:admin
B:xadmin
C:model
D:form
问答题
1.声明变量注意事项有哪些?
1)由字母、数字和下划线构成,不能以数字开头,不能任意特殊字符
2)变量定义规范,使用驼峰式或者下划线式格式
3)变量定义尽量简明,易懂,方便使用者应用
2.如何查看变量在内存中的地址?
可以通过id方法,获取变量在内存中的地址,例如 name = 456789 print(id(name))
3.Python单行注释和多行注释分别用什么?
单行注释: # 被注释内容
多行注释: ‘’’ 被注释内容 ‘’’
4.什么是lambda函数?
lambda是Python中的匿名函数。它语法简单,简化代码,不会产生命名冲突,污染命名空间。
5.列表和元组有什么区别?
列表是可变的,即可以编辑。元组是不可变的(元组是无法编辑的列表)。
6.Python中的字典是什么?
python中的内置数据类型称为字典。它定义了键和值之间的one-to-one关系。
字典包含一对键及其对应的值。字典由键来索引。
7.什么是Python中的map函数
Map函数执行作为第一个参数给出的函数,该函数遍历第二个参数给出的迭代的所有元素的
8.深拷贝和浅拷贝有什么区别?
浅拷贝用于复制引用指针,就像复制值一样。
深层复制不会将引用指针复制到对象。它引用一个对象,并存储一些其他对象指向的新对象。
9.Python中 help()函数的用途是什么?
help()函数用于显示文档字符串,还可以帮助您查看与模块,关键字,属性等相关的帮助。
10.Python中dir()函数的用途是什么?
dir()返回参数的属性、方法列表mm
11.什么是线程同步?
多个线程同时访问同一资源,等待资源访问结束,浪费时间,效率低
12.redis有哪些数据类型?
string list hash set zset
13.scrapy中间件有哪几种类?
下载中间件和爬虫中间件
14.装饰器的作用 ?
装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,提高了代码的复用性。
15.json模块中load和loads有什么区别?
load是将json格式的字符转换为dict,loads是将string转换为dict。
16.什么是无头浏览器?
无头浏览器即headless browser,是一种没有界面的浏览器。既然是浏览器那么浏览器该有的东西它都应该有,只是看不到界面而已。
17.什么是递归?
在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归。
18.什么是生成器?
生成器会生成一系列的值用于迭代,这样看它又是一种可迭代对象。它是在for循环的过程中不断计算出下一个元素,并在适当的条件结束for循环。
19.什么是迭代器?
迭代器是访问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。
20.Python中的split()函数的作用?
Split()能让我们用指定字符分割字符串。
21.如何判断是函数还是方法?
通过type()可以知道对象所属的类型,函数是<class ‘function’>,方法是<class ‘method’>
22.isinstance的作用?
isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
23.json序列化时,默认遇到中文会转换成unicode,如果想要保留中文怎么办?
序列化的时候,加入ensure_ascii参数
24.yield关键字的作用?
当一个函数中存在yield关键字时,它就变成了一个生成器,每次迭代求值一次,节省内存;
25.pass语句的作用是什么?
pass是空语句占位符,是为了保持程序结构的完整性。
26.is和==
的区别是什么?
在python中,is检查两个对象是否是同一个对象,而==
检查他们的值是否相等.
27.mysql数据库的约束有哪些?
主键约束、唯一约束、检查约束、非空约束、外键约束
28.事务的特性有哪些?
Atomicity(原子性)、Consistency(一致性)、Isolation(隔离性)、Durability(持久性)
29.mysql中主键和外键的区别?
主键是能确定一条记录的唯一标示。例如,身份证证号
外键:用于与另一张表的关联,是能确定另一张表记录的字段,用于保持数据的一致性
30.redis中不同db的作用?
Redis支持多个数据库,并且每个数据库的数据是隔离的不能共享,并且基于单机才有,如果是集群就没有数据库的概念。
31.scrapy和scrapy-redis的区别?
scrapy是一个爬虫通用框架,但不支持分布式,scrapy-redis是为了更方便的实现scrapy分布式爬虫,而提供了一些以redis为基础的组件
32.python语言中enumerate的意思是?
对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
enumerate多用于在for循环中得到计数
33.多进程更稳定还是多线程更稳定?为什么?
多进程更稳定,它们是独立运行的,不会因为一个崩溃而影响其他进程。
34.HTTP协议请求由什么组成?
请求行(request line)、请求头部(header)、空行和请求数据四个部分组成
35.https协议和http协议有什么区别?
http是超文本传输协议,信息是明文传输,https则是具有安全性的ssl加密传输协议。
36.Django框架中的MTV模式,具体指什么?
Django框架的MTV设计模式借鉴了MVC框架的思想,三部分为:Model、Template和View
37.什么是wsgi和uwsgi?
wsgi是web服务器网关接口,是一套协议。用于接收用户请求并将请求进行初次封装,然后将请求交给web框架
uwsgi与WSGI一样是一种通信协议,它是uWSGI服务器的独占协议,用于定义传输信息的类型
38.django中csrf的实现机制
第一步:django第一次响应来自某个客户端的请求时,后端随机产生一个token值,把这个token保存在SESSION状态中;同时,后端把这个token放到cookie中交给前端页面;
第二步:下次前端需要发起请求(比如发帖)的时候把这个token值加入到请求数据或者头信息中,一起传给后端;Cookies:{csrftoken:xxxxx}
第三步:后端校验前端请求带过来的token和SESSION里的token是否一致;