2020面试篇:python面试题库(基础篇)附详细答案

https://shimo.im/docs/CdDxcHctyWwDJTYt/read
https://www.jianshu.com/p/c44e48b42fce
https://www.cnblogs.com/clement-jiao/p/8719323.html#_label0

面试篇:python面试题库(基础篇)

1.为什么学习Python?
Python 是一种面向对象的、解释型的、通用的、开源的脚本编程语言。
应用:Web应用开发、自动化运维、人工智能领域、网路爬虫、科学计算、游戏开发
优点:
(1)简单易用,学习成本低,看起来非常优雅干净;
(2)标准库和第三库众多,功能强大,既可以开发小工具,也可以开发企业级应用;
(3)站在了人工智能和大数据的风口上,站在风口上,猪都能飞起来。
缺点:
(1)运行慢(解释型语言,边运行边翻译;高级语言,屏蔽了很多底层细节)
(2)代码加密困难(解释型语言,源代码直接运行)
参考链接:Python的特点(优点和缺点)
2. 通过什么途径学习的Python?
大牛公众号+python书籍《python宝典》+教程视频+项目经验+请教同事、QQ交流群
3. Python和Java、PHP、C、C#、C++等其他语言的对比?
C、C++、Python和Java四种是通用编程语言,JavaScript和PHP算是Web环境的专用编程语言。
C语言由于其底层操作特性和历史的积累,在嵌入式领域是当之无愧的王者;
C++是一种支持最广泛编程范式的复杂语言,这些年来发展不太好,目前在服务器后台和游戏领域还有其一席之地;
Python作为一种灵活的轻便的通用型脚本语言,使用范围比较广,从应用软件到Web开发都有它的身影,由于其解释语言的特点,比较适合轻量级或原型开发;
Java由于其跨平台可移植性,在Web开发领域大放异彩,特别是在企业级Web开发,同时由于Android系统采用Java来开发应用程序,所以也随着Android的发展而应用越发广泛;
JavaScript语言由于其是浏览器内置的脚本语言,是Web前端开发的主流,近年来由于google的V8引擎开源,出现了Node.js之类JavaScript后台开发框架,把JavaScript的应用领域扩展到了Web后台;
PHP作为一种简单的Web服务器后台脚本语言,在全世界范围内的网站上有最大的使用率。

详细链接:Python和Java、PHP、C、C#、C++等其他语言的对比?
参考链接:六种主流编程语言(C、C++、Python、JavaScript、PHP、Java)特性对比

4. 简述解释型和编译型编程语言?
编译型的语言包括:C、C++、Delphi、Pascal、Fortran
解释型的语言包括:Java、Basic、javascript、python
差异总结:
编译型语言:
原理:通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。
优点:编译一次后,脱离了编译器也可以运行,并且运行效率高。
缺点:可移植性差,不够灵活。
解释型语言:
原理:由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。
优点:跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。
缺点:一边执行一边转换,效率很低。

详细链接:简述解释型和编译型编程语言?

5. Python解释器种类以及特点?
CPython:c语言开发的使用最广的解释器
IPython:基于cpython之上的一个交互式解释器,交互方式增强,功能和cpython一样
PyPy:目标是执行效率 采用JIT技术 对python代码进行动态编译,提高执行效率
JPython:运行在Java上的解释器 直接把python代码编译成Java字节码执行
IronPython:运行在微软 .NET 平台上的解释器,把python编译成. NET 的字节码
6. 位和字节的关系?
位bit:计算机的最小数据单位;
字节byte:存储空间的基本计量单位。
一般一个汉字占2byte,一个英文字母占1byte
1byte=8bit
7. b、B、KB、MB、GB 的关系?
GB=1024 MB=1024 KB= 1024 B= 8b
8. 请至少列举5个 PEP8 规范
一、代码编排:
(1)缩进:每级缩进使用四个空格
(2)换行:限制每行的最大长度为79个字符,换行用()或者
(3)空行:类和顶层函数之间使用两个空行;方法之间用一个空行;函数内逻辑无关段落之间空一行;文件最后留一个空行
二、文档编排:
(4) 导入模块:
导入优先级:标准(python自带的库)、第3方(pip安装的库)、自己编写的,之间空一行
一行导入一个库
三、空行空格:
总体原则,避免不必要的空格
(1)各种右括号前不要加空格。
(2)逗号、冒号、分号前不要加空格。
(3)函数的左括号前不要加空格。如Func(1)。
(4)序列的左括号前不要加空格。如list[2]。
(5)操作符左右各加一个空格,不要为了对齐增加空格。
(6)函数默认参数使用的赋值符左右省略空格。
(7)不要将多句语句写在同一行,尽管使用‘;’允许。
(8)if/for/while语句中,即使执行语句只有一句,也必须另起一行。
四、注释
句子+两个空格#一个空格+英文(首字母大写)
五、命名规范
(1)模块名:小写,不要下划线
(2)类名:首字母大写,驼峰式
(2)函数名、变量名:小写,下划线分割
(3)常量:大写,下划线分割
官方文档英文版链接:PEP 8 – Style Guide for Python Code
官方文档中文版链接:link

9. 通过代码实现如下转换:
题目:
(1)二进制转换成十进制:v = “0b1111011”
(2)十进制转换成二进制:v = 18
(3)八进制转换成十进制:v = “011”
(4)十进制转换成八进制:v = 30
(5)十六进制转换成十进制:v = “0x12”
(6)十进制转换成十六进制:v = 87
答案:
(1)二转十:int(v, 2)
(2)十转二:bin(v)
(3)八转十:int(v, 8)
(4)十转八:oct(v)
(5)十六转十:int(v,16)
(6)十转十六:hex(v)

转换规则:
其他进制转二进制----bin(var)
其他进制转八进制----oct(var)
其他进制转十进制----int(var)
其他进制转十六进制----hex(var)
字符串转byte----str_var.encode()
byte转字符串----byte_var.decode()

10. 请编写一个函数实现将IP地址转换成一个整数。

如 10.3.9.12 转换规则为:
10 00001010
3 00000011
9 00001001
12 00001100
再将以上二进制拼接起来计算十进制结果:00001010 00000011 00001001 00001100 = ?

ip = "10.3.9.12"
ip_2b = [bin(int(i)) for i in ip.split(".")] # ['0b1010', '0b11', '0b1001', '0b1100']
ip_2 = [j.replace("0b", "") for j in ip_2b] #去掉b符号['1010', '11', '1001', '1100']
ip_2_0 = [("0" * (8-len(j)) +j) for j in ip_2] # 补全0,['00001010', '00000011', '00001001', '00001100']
ip_2_all = "".join(ip_2_0) # 00001010000000110000100100001100
print(int(ip_2_all,2)) # 转换成2进制,167971084

11. python递归的最大层数?
python3.7中为996,可以在os模块中设置次数

def print(code):
    print(code)
print('python')
# [Previous line repeated 996 more times]
# RecursionError: maximum recursion depth exceeded

# 设置sys最大递归次数
import sys
sys.setrecursionlimit(4000)

def print(code):
    print(code)
print('python')

11.1 求结果:
v1 = 1 or 3
v2 = 1 and 3
v3 = 0 and 2 and 1
v4 = 0 and 2 or 1
v5 = 0 and 2 or 1 or 4
v6 = 0 or False and 1

答案:
1, 3, 0, 1, 1,False
规则:
x and y:当x为True时是y,x为False 时是x
x or y:当x为True时是x,x为False 时是y
not x:如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。
在没有其他限定时,and的优先级大于or。

12. ascii、gbk、unicode、utf-8 区别?
(1)ASCII码:一个字符=1个字节,最多只能用8位来表示,即:2**8 = 256,可以最多表示 256 个字符。
(2)Unicode编码:万国码,世界上所有的符号都给予独一无二的编码,解决乱码问题。一个字符=2个字节
(3)utf-8:万国码的升级版,一种针对Unicode的可变长度字符编码,UTF8是互联网中使用最多的对Unicode的实现方式。一个中文字符是三个字节;英文是一个字节;欧洲是2个字节。
背景:有些符号需要1个字节,有些需要2或3个字节更多。如果Unicode统一规定,每个符号用3个字节表示,但是某些字母显然不需要3个,那么就浪费了空间,文本文件大小超出了很多,这显然是不合理的。直到UTF8字符编码出现。
(4)gbk:非ASCII码,只用来编码汉字,一个汉字 = 两个字节,一个英文字母 = 一个字节,可以最多组合256*256=65536个符号,共收录汉字和图形符号21886个。

注1:gbk 转 utf-8 需通过媒介 unicode
encode编码成bytes,将str转为bytes:str.encede(‘utf-8’)
decode解码成str,将bytes转为str:bytes.decede(‘utf-8’)
注2:python2对内容进行编码(默认ascii),而python3对内容进行编码的默认为utf-8(首行:# -- coding: utf-8 --)。

13. 字节码和机器码的区别?
(1)机器码(machine code):学名机器语言指令,也被称为原生码(Native Code),是电脑的CPU可直接解读的数据
机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩、较难编写。
(2)字节码(Bytecode):一种包含执行程序、由一序列 op 代码/数据对 组成的二进制文件。
字节码是一种中间状态(中间码)的二进制代码(文件)。需要解释器转译后才能成为机器码。
如Java,先通过编译器转化为字节码的*.class文件,运行时再通过平台的JVM(JAVA虚拟机)将字节码转为机器码。

14. 三元运算规则以及应用场景
三元运算符就是在赋值变量的时候,可以直接加判断,然后赋值格式。
[on_true] if [expression] else [on_false]
举例:small = x if x < y else y.

15. 列举 Python2和Python3的区别?

1.核心类差异 python2 python3 备注
字符编码 ascii unicode(utf-8)
import 相对路径 绝对路径
缩进 允许tab和space共存 tab和space共存会报错
2.废弃类类差异 python2 python3 备注
废弃 print语句 print函数
不等于 <>或!= !=
废弃 long整数型 统一使用int
废弃 生成器xrange() 生成器range()
dictionary关联的keys()、values()、items(),和高阶函数zip(),map(),filter() list对象 可迭代对象,可以通过list强行转换
3.修改类差异 python2 python3 备注
除法操作符 /是整数除法,//是小数除法 /是小数除法,//是整数除法
比较操作符 任意两个对象都可以比较 只有同一数据类型的对象可以比较
for循环 会修改外部相同名称变量的值 不会修改外部相同名称变量的值
打开文件 file( … ) 或 open(…) 只能用
  • 1
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值