十六大Python面试题!看完面试官给了我40K的薪资

一:交换变量值

平时时不时会面面实习生,大多数的同学在学校里都已经掌握了Python。面试的时候要求同学们实现一个简单的函数,交换两个变量的值,大多数的同学给出的都是如下的答案

python
def swap(x,y):
tmp = x
x = y
y = tem

实际上,Python中还有更简洁的更具Python风格的实现,如下:

python
def swap(x,y):
x,y = y,x

相比前一种方法,后一种方法节省一个中间变量,在性能上也优于前一种方法。
我们从Python的字节码来深入分析一下原因。

python
import dis
import timeit

def swap1():
x = 5
y = 6
tmp = x
x = y
y = tmp
if _name_=="_main_"
print "================ swap1 ================"
print dis.dis(swap1)
print "================ swap2 ================"

dis是个反汇编工具,将Python代码翻译成字节码指令。这里的输出如下:

================ swap1 ================ 
5    0 LOAD_CONST    1 (5)
   3 STORE_FAST   0 (x)

6    6 LOAD_CONST    2 (6)
   9 STORE_FAST   1 (y)

7    12 LOAD_CONST    1 (y)
   15 STORE_FAST   0 (x)
None
================ swap2 ================
10 0 LOAF_CONST    1(5)
  3 STORE_FAST    0 (x )
11 6 LOAF_CONST    2(6)
  9 STORE_FAST    1 (Y )
12 12 LOAD_FAST    0(x)
  15 STORE_FAST 2 (tmp)
13 18 LOAF_CONST    1(y)
  21 STORE_FAST    0 (x )
14 24 LOAD_FAST    2(tmp)
  27 STORE_FAST    1 (y )
  30 LOAF_CONST    0(None)

通过字节码可以看到,swap1和swap2最大的区别在于,swap1中通过ROT_TWO交换栈顶的两个元素实现x和y值的互换,swap2中引入了tmp变量,多了一次LOAD_FAST, STORE_FAST的操作。执行一个ROT_TWO指令比执行一个LOAD_FAST+STORE_FAST的指令快,这也是为什么swap1比swap2性能更好的原因。

二:如何在一个函数内部修改全局变量

python
a = 5
def abc():
global a
a =1
abc()
print(a)

三:谈下python的GIL

python的GIL是python的全局解释器锁,同一个进程中如果有多个线程运行,一个线程运行的时候会霸占解释器,上了个锁即GIL,进程内其他线程无法运行。如果遇到耗时操作,GIL会打开,其他线程先运行,所以多线程仍然是有先后顺序的。如果你没有看明白的话可以进我的Python交流.扣扣.裙 :8衣久二五寺久寺二(数字的谐音转换下可以找到了),可以在裙里一起讨论,裙里还有最新的python学习资料、项目实战案例和面试题集合可以免费下载。

四:fun(args,kwargs)中的args,**kwargs什么意思?

用于函数的接收参数。可以接收补丁数量的参数。
*args是用来接收一个非键值对的可变数量的参数列表
**kwargs允许接收不定长度的键值对。

五:python中断言方法举例

aaa = 1
assert (a0)
print ('断言成功,继续向下执行')

bbb = 2
assert (bbb3)
print ('断言失败')

六:列出python中可变数据类型和不可变数据类型,并简述原理

不可变:int,str,tuple 不允许变量的值发生变化,如果改变了值,相当于创建一个新的对象,相同值的对象,内存中的地址是一样的。

可变对象:list,dict 允许变量的值发生变化,例如append操作后,改变的是原对象的值。如果是两个相同值的对象,内存中的地址也是不一样的。

七:正则表达式匹配中,(.)和(.?)匹配区别?

(.)是贪婪匹配,尽可能多的匹配
(.
?)是尽可能少的匹配结果

八:举例说明异常模块中try except else finally的相关意义

else 没有捕捉到异常,执行else里面的,
finally 不管有木有异常 都执行finally里面的 参见withopen里面 不论是否成功打开文件,都会执行close()

九:提高python运行效率的方法

1、使用生成器,节约内存
2、优化for循环
3、核心模块用Cpython PyPy等,提高效率
4、多进程,多线程、协程
5、判断可能性大的放到前面

十:简述mysql和redis区别

redis:内存级非关系数据库,速度快,作网页缓存
mysql:关系型数据库 检索有一定io操作,访问速度慢


在这里插入图片描述

十一:列出常见MYSQL数据存储引擎

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

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

十二:简述多线程、多进程

进程:
1、操作系统资源分配的基本单位,进程之间相互独立
2、稳定性好,但是资源消耗大。
线程:
1、cpu进行资源分配和调度的基本单位,线程是进程再次细分,是比进程更小的独立运行的基本单位,一个进程下所有线程共享该进程资源,
2、IO操作密集,多线程运行效率高,但是如果其中一个崩溃,进程也会崩溃。
应用:
IO密集型用多线程,等待时候可以切换带其他线程运行
CPU密集的用多进程,IO操作少,因为线程多霸占GIL,其他线程不能运行,不能充分发挥多核CPU优势。

十三:列出几种魔法方法并简要介绍用途

init:对象初始化方法
new:创建对象时候执行的方法,单列模式会用到
str:当使用print输出对象的时候,只要自己定义了str(self)方法,那么就会打印从在这个方法中return的数据
del:删除对象执行的方法

十四:MyISAM 与 InnoDB 区别:

1、InnoDB 支持事务,MyISAM 不支持,这一点是非常之重要。事务是一种高级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原,而 MyISAM就不可以了;
2、MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到安全性较高的应用;
3、InnoDB 支持外键,MyISAM 不支持;
4、对于自增长的字段,InnoDB 中必须包含只有该字段的索引,但是在 MyISAM表中可以和其他字段一起建立联合索引;
5、清空整个表时,InnoDB 是一行一行的删除,效率非常慢。MyISAM 则会重建表;

十五:Linux命令重定向 > 和 >>

Linux 允许将命令执行结果 重定向到一个 文件
将本应显示在终端上的内容 输出/追加 到指定文件中
表示输出,会覆盖文件原有的内容
表示追加,会将内容追加到已有文件的末尾
用法示例:
将 echo 输出的信息保存到 1.txt 里echo Hello Python 1.txt
将 tree 输出的信息追加到 1.txt 文件的末尾tree 1.txt

十六::python传参数是传值还是传址?

传的是指针,是引用传递
对于不可变类型(数值,str,tuple),不会改变原来变量
对于可变数据类型(list dict),会修改对应变量。

最后还是要推荐下我自己建的Python开发学习裙:8衣久二五寺久寺二(数字的谐音转换下可以找到了),群里都是学Python开发的,如果你正在学习Python ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有Python软件开发相关的),包括我自己整理的一份2020最新的Python进阶资料和高级开发教程,欢迎进阶中和进想深入Python的小伙伴

本文的文字及图片来源于网络加上自己的想法,仅供学习、交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 213,014评论 6 492
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,796评论 3 386
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 158,484评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,830评论 1 285
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,946评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,114评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,182评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,927评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,369评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,678评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,832评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,533评论 4 335
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,166评论 3 317
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,885评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,128评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,659评论 2 362
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,738评论 2 351