免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 40190 | 回复: 0
打印 上一主题 下一主题

打印 上一主题 下一主题 52道常见Python面试题,你都能答对吗?26-52 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2019-02-27 22:41 |只看该作者 |倒序浏览
[color=rgba(0, 0, 0, 0.75)]Q.27. 解释 Python 中的赋值和算数运算符?
[color=rgba(0, 0, 0, 0.75)]


[color=rgba(0, 0, 0, 0.75)]Q.28. 解释 Python 中的逻辑运算符
[color=rgba(0, 0, 0, 0.75)]

Python 中有三个逻辑运算符:and、or、not


[color=rgba(0, 0, 0, 0.75)]Q.29. 解释 Python 中的成员运算符
[color=rgba(0, 0, 0, 0.75)]

使用 in 和 not in 运算符我们可以判断某个值是否在成员中。


[color=rgba(0, 0, 0, 0.75)]Q.30. 解释 Python 中的身份运算符
[color=rgba(0, 0, 0, 0.75)]

这是非常常见的 Python 面试题,用下面的示例来回答.
is 和 not is 运算符可以判断两个对象是否相同


[color=rgba(0, 0, 0, 0.75)]Q.31. 解释 Python 中的位运算符
[color=rgba(0, 0, 0, 0.75)]

此运算符按二进制位对值进行操作。


[color=rgba(0, 0, 0, 0.75)]

1.与 (& 返回按位与结果

2


[color=rgba(0, 0, 0, 0.75)]

2.或 (|) 返回按位或结果

3


[color=rgba(0, 0, 0, 0.75)]

3.异或 (^) 返回按位异或结果

1


[color=rgba(0, 0, 0, 0.75)]

4.取反 (~) 返回按位取反结果

-3


[color=rgba(0, 0, 0, 0.75)]

5.左移位 (<< 将符号左边数的二进制左移右边数位

4


[color=rgba(0, 0, 0, 0.75)]

1 的二级制 001 左移 2 位变成 100 也即十进制的 4


[color=rgba(0, 0, 0, 0.75)]

6.右移位 (>>

1


[color=rgba(0, 0, 0, 0.75)]Q.32. 如何在 Python 使用多进制数字?
[color=rgba(0, 0, 0, 0.75)]

除十进制以外,在 Python 中还可以使用二进制、八进制、十六进制。


[color=rgba(0, 0, 0, 0.75)]

1.二进制数有 0 和 1 组成,我们使用 0b 或 0B 前缀表示二进制数

10


[color=rgba(0, 0, 0, 0.75)]

使用 bin 函数可以将数字转换为二进制

‘0b1111’


[color=rgba(0, 0, 0, 0.75)]

2.八进制数由数字 0-7 组成,使用前缀 0o 或 0O 表示 8 进制数

‘0o10’


[color=rgba(0, 0, 0, 0.75)]

3.十六进数由数字 0-15 组成,使用前缀 0x 或者 0X 表示 16 进制数

‘0x10’

‘0xf’


[color=rgba(0, 0, 0, 0.75)]Q.33. 如何获取字典中的所有键?
[color=rgba(0, 0, 0, 0.75)]

使用 keys 来获取字典中的所有键


[color=rgba(0, 0, 0, 0.75)]Q.34. 问什么标识符不建议使用下划线开头?
[color=rgba(0, 0, 0, 0.75)]

因为在 Python 中以下划线开头的变量为私有变量,如果你不想让变量私有,就不要使用下划线开头。


[color=rgba(0, 0, 0, 0.75)]Q.35. 如何声明多个变量并赋值?
[color=rgba(0, 0, 0, 0.75)]

有两种方式:


[color=rgba(0, 0, 0, 0.75)]Q.36. 什么是元组的解封装?
[color=rgba(0, 0, 0, 0.75)]

首先我们来介绍元组封装:

(3, 4, 5)


[color=rgba(0, 0, 0, 0.75)]

将 3,4,5 封装到元组 mytuple 中。


[color=rgba(0, 0, 0, 0.75)]

现在我们要将这些值解封装到变量 x,y,z 中

12


[color=rgba(0, 0, 0, 0.75)]Q.37. 简述面向对象中__new__和__init__区别
[color=rgba(0, 0, 0, 0.75)]

__init__是初始化方法,创建对象后,就立刻被默认调用了,可接收参数。


[color=rgba(0, 0, 0, 0.75)]

(1、__new__至少要有一个参数cls,代表当前类,此参数在实例化时由Python解释器自动识别。


[color=rgba(0, 0, 0, 0.75)]

(2、__new__必须要有返回值,返回实例化出来的实例,这点在自己实现__new__时要特别注意,可以return父类(通过super(当前类名, cls))__new__出来的实例,或者直接是object的__new__出来的实例。


[color=rgba(0, 0, 0, 0.75)]

(3、__init__有一个参数self,就是这个__new__返回的实例,__init__在__new__的基础上可以完成一些其它初始化的动作,__init__不需要返回值。


[color=rgba(0, 0, 0, 0.75)]

(4、如果__new__创建的是当前类的实例,会自动调用__init__函数,通过return语句里面调用的__new__函数的第一个参数是cls来保证是当前类实例,如果是其他类的类名,;那么实际创建返回的就是其他类的实例,其实就不会调用当前类的__init__函数,也不会调用其他类的__init__函数。


[color=rgba(0, 0, 0, 0.75)]Q.38.简述Django的orm
[color=rgba(0, 0, 0, 0.75)]

ORM,全拼Object-Relation Mapping,意为对象-关系映射。


[color=rgba(0, 0, 0, 0.75)]

实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面向对象编程,orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句,所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite…,如果数据库迁移,只需要更换Django的数据库引擎即可。


[color=rgba(0, 0, 0, 0.75)]Q.39.列出常见MYSQL数据存储引擎
[color=rgba(0, 0, 0, 0.75)]

InnoDB:支持事务处理,支持外键,支持崩溃修复能力和并发控制。如果需要对事务的完整性要求比较高(比如银行),要求实现并发控制(比如售票),那选择InnoDB有很大的优势。如果需要频繁的更新、删除操作的数据库,也可以选择InnoDB,因为支持事务的提交(commit)和回滚(rollback)。


[color=rgba(0, 0, 0, 0.75)]

MyISAM:插入数据快,空间和内存使用比较低。如果表主要是用于插入新记录和读出记录,那么选择MyISAM能实现处理高效率。如果应用的完整性、并发性要求比 较低,也可以使用。


[color=rgba(0, 0, 0, 0.75)]

MEMORY:所有的数据都在内存中,数据的处理速度快,但是安全性不高。如果需要很快的读写速度,对数据的安全性要求较低,可以选择MEMOEY。它对表的大小有要求,不能建立太大的表。所以,这类数据库只使用在相对较小的数据库表。


[color=rgba(0, 0, 0, 0.75)]Q.40.简述多线程、多进程
[color=rgba(0, 0, 0, 0.75)]

进程:


[color=rgba(0, 0, 0, 0.75)]

1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立
2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制


[color=rgba(0, 0, 0, 0.75)]

线程:
1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源
2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃


[color=rgba(0, 0, 0, 0.75)]

应用:
IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间
CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势


[color=rgba(0, 0, 0, 0.75)]Q.41.IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常
[color=rgba(0, 0, 0, 0.75)]

IOError:输入输出异常
AttributeError:试图访问一个对象没有的属性
ImportError:无法引入模块或包,基本是路径问题
IndentationError:语法错误,代码没有正确的对齐
IndexError:下标索引超出序列边界
KeyError:试图访问你字典里不存在的键
SyntaxErrorython代码逻辑语法出错,不能执行
NameError:使用一个还未赋予对象的变量


[color=rgba(0, 0, 0, 0.75)]Q.42.MyISAM 与 InnoDB 区别:
[color=rgba(0, 0, 0, 0.75)]

(1、InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;


[color=rgba(0, 0, 0, 0.75)]

(2、MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;


[color=rgba(0, 0, 0, 0.75)]

(3、InnoDB 支持外键,MyISAM 不支持;


[color=rgba(0, 0, 0, 0.75)]

(4、对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;


[color=rgba(0, 0, 0, 0.75)]

(5、清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;


[color=rgba(0, 0, 0, 0.75)]Q.43.单引号、双引号、三引号用法
[color=rgba(0, 0, 0, 0.75)]

(1、单引号和双引号没有什么区别,不过单引号不用按shift,打字稍微快一点。表示字符串的时候,单引号里面可以用双引号,而不用转义字符,反之亦然。
'She said:“Yes.” ’ or "She said: ‘Yes.’ "


[color=rgba(0, 0, 0, 0.75)]

(2、但是如果直接用单引号扩住单引号,则需要转义,像这样:
’ She said:‘Yes.’ ’


[color=rgba(0, 0, 0, 0.75)]

(3、三引号可以直接书写多行,通常用于大段,大篇幅的字符串
“”“helloworld”""


[color=rgba(0, 0, 0, 0.75)]Q.44.HTTP请求中get和post区别
[color=rgba(0, 0, 0, 0.75)]

(1、GET请求是通过URL直接请求数据,数据信息可以在URL中直接看到,比如浏览器访问;而POST请求是放在请求头中的,我们是无法直接看到的;


[color=rgba(0, 0, 0, 0.75)]

(2、GET提交有数据大小的限制,一般是不超过1024个字节,而这种说法也不完全准确,HTTP协议并没有设定URL字节长度的上限,而是浏览器做了些处理,所以长度依据浏览器的不同有所不同;POST请求在HTTP协议中也没有做说明,一般来说是没有设置限制的,但是实际上浏览器也有默认值。总体来说,少量的数据使用GET,大量的数据使用POST。


[color=rgba(0, 0, 0, 0.75)]

(3、GET请求因为数据参数是暴露在URL中的,所以安全性比较低,比如密码是不能暴露的,就不能使用GET请求;POST请求中,请求参数信息是放在请求头的,所以安全性较高,可以使用。在实际中,涉及到登录操作的时候,尽量使用HTTPS请求,安全性更好。


[color=rgba(0, 0, 0, 0.75)]Q.45.请尽可能列举python列表的成员方法,并给出列表操作的答案:
[color=rgba(0, 0, 0, 0.75)]

(1) a=[1, 2, 3, 4, 5], a[::2]=?, a[-2:] = ?
(2)一行代码实现对列表a中的偶数位置的元素进行加3后求和?
(3)将列表a的元素顺序打乱,再对a进行排序得到列表b,然后把a和b按元素顺序构造一个字典d。


[color=rgba(0, 0, 0, 0.75)]Q.46.请问下面的代码有什么隐患?
[color=rgba(0, 0, 0, 0.75)]

def strtest1(num):
str = ‘first’
for i in range(num):
str += ’X’
return str


[color=rgba(0, 0, 0, 0.75)]

由于变量str是个不可变对象,每次迭代,python都会生成新的str对象来存储新的字符串,num越大,创建的str对象越多,内存消耗越大。


[color=rgba(0, 0, 0, 0.75)]Q.47.单引号,双引号,三引号的区别
[color=rgba(0, 0, 0, 0.75)]

单引号和双引号是等效的,如果要换行,需要符号(),三引号则可以直接换行,并且可以包含注释


[color=rgba(0, 0, 0, 0.75)]

如果要表示Let’s go 这个字符串
单引号:s4= ‘Let\’s go’
双引号:s5= “Let’s go”
s6 = ‘I realy like“python”!’
这就是单引号和双引号都可以表示字符串的原因了


[color=rgba(0, 0, 0, 0.75)]Q.48.Python里面如何拷贝一个对象?(赋值,浅拷贝,深拷贝的区别)
[color=rgba(0, 0, 0, 0.75)]

赋值(=),就是创建了对象的一个新的引用,修改其中任意一个变量都会影响到另一个。


[color=rgba(0, 0, 0, 0.75)]

浅拷贝:创建一个新的对象,但它包含的是对原始对象中包含项的引用(如果用引用的方式修改其中一个对象,另外一个也会修改改变){1,完全切片方法;2,工厂函数,如list();3,copy模块的copy()函数}


[color=rgba(0, 0, 0, 0.75)]

深拷贝:创建一个新的对象,并且递归的复制它所包含的对象(修改其中一个,另外一个不会改变){copy模块的deep.deepcopy()函数}


[color=rgba(0, 0, 0, 0.75)]Q.49.介绍一下Python下range()函数的用法?
[color=rgba(0, 0, 0, 0.75)]

列出一组数据,经常用在for in range()循环中


[color=rgba(0, 0, 0, 0.75)]Q.50.请问如何修改以下Python代码,使得下面的代码调用类A的show方法?
[color=rgba(0, 0, 0, 0.75)]


答:这道题的考点是类继承,只要通过__class__ 方法指定类对象就可以了。补充的代码如下:


[color=rgba(0, 0, 0, 0.75)]Q.51.请问如何修改以下Python代码,使得代码能够运行?
[color=rgba(0, 0, 0, 0.75)]


此题考察得是方法对象,为了能让对象实例能被直接调用,需要实现 call 方法,补充代码如下:


[color=rgba(0, 0, 0, 0.75)]Q.52.一个包里有三个模块,mod1.py , mod2.py , mod3.py ,但使用 from demopack import * 导入模块时,如何保证只有 mod1 、 mod3 被导入了。
[color=rgba(0, 0, 0, 0.75)]

在包中增加 init.py 文件,并在文件中增加:all = [‘mod1’,’mod3’]



您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP