一:交换变量值

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

def swap(x,y):tmp = xx = yy = tem

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

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

相比前一种方法,后一种方法节省一个中间变量,在性能上也优于前一种方法。

我们从Python的字节码来深入分析一下原因。

import disimport timeitdef swap1():x = 5y = 6tmp = xx = yy = tmpif _name_=="_main_"print "================ swap1 ================"print dis.dis(swap1)print "================ swap2 ================"  

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

================ swap1 ================  50 LOAD_CONST 1 (5) 3 STORE_FAST   0 (x)66 LOAD_CONST   2 (6)   9 STORE_FAST    1 (y) 712 LOAD_CONST   1 (y)       15  STORE_FAST  0 (x                                       )

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

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

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

三:谈下python的GIL

python的GIL是python的全局解释器锁,同一个进程中如果有多个线程运行,一个线程运行的时候会霸占解释器,上了个锁即GIL,进程内其他线程无法运行。如果遇到耗时操作,GIL会打开,其他线程先运行,所以多线程仍然是有先后顺序的。

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

用于函数的接收参数。可以接收补丁数量的参数。

*args是用来接收一个非键值对的可变数量的参数列表

**kwargs允许接收不定长度的键值对。

五:python中断言方法举例

aaa = 1assert (a>0)print ('断言成功,继续向下执行')bbb = 2assert (bbb>3)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开发工程师,这里有我自己整理了一套最新的python系统学习教程,包括从基础的python脚本到web开发、爬虫、数据分析、数据可视化、机器学习等。想要这些资料的可以关注小编,并在后台私信小编:“01”即可领取。

python引入redis_十六大Python面试题!看完面试官给了我40K的薪资相关推荐

  1. 孤荷凌寒自学python第三十九天python 的线程锁Lock

    孤荷凌寒自学python第三十九天python的线程锁Lock (完整学习过程屏幕记录视频地址在文末,手写笔记在文末) 当多个线程同时操作一个文件等需要同时操作某一对象的情况发生时,很有可能发生冲突, ...

  2. 10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对

    10道虐心的Java面试题,被面试官虐哭了,同事一题都没答对 Java高级架构 有一天,小王告诉我,他去一家公司面试 Java 岗,结果被面试官虐哭了.整整 10 道 Java 面试题,小王一道也没答 ...

  3. 醒醒!临时抱佛脚背Java面试题的在面试官面前是根本没有用的

    醒醒!临时抱佛脚背Java面试题的在面试官面前是根本没有用的! Java架构老李 2020-11-19 17:17:09 744 收藏 33 分类专栏: Java 面试 编程语言 文章标签: 数据库 ...

  4. python面试技巧_经典7大Python面试题!看完考官竟然给了我30k的薪资

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

  5. 【算法入门】用Python手写五大经典排序算法,看完这篇终于懂了!

    算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐心看 ...

  6. 用Python手写五大经典排序算法,看完这篇终于懂了!

    算法作为程序员的必修课,是每位程序员必须掌握的基础.作为Python忠实爱好者,本篇东哥将通过Python来手撕5大经典排序算法,结合例图剖析内部实现逻辑,对比每种算法各自的优缺点和应用点.相信我,耐 ...

  7. python开发测试岗_作为测试开发岗的面试官,我都是怎么选人的?

    最近一段时间面试了不少人,主要是一些测试开发岗,中高级的初级的也都有:也有一些偏业务测试岗的候选人.总结出了一些方法论,或者说更多的是个人作为面试官所遵守的一套面试准则. 1.什么是面试? 面试不仅仅 ...

  8. python装饰器带参数函数二阶导数公式_一文搞定Python装饰器,看完面试不再慌

    本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是Python专题的第12篇文章,我们来看看Python装饰器. 一段囧事 差不多五年前面试的时候,我就领教过它的重要性.那时候我Pyt ...

  9. 51个Python鲜为人知的秘密特性,老司机看完都惊叹不已

    Python真的很奇妙,目前是最火的语言.语法简单,功能强大,我学Python已经好多年了,从2.6的时代一直到现在的3.8,算算也是老鸟了.今天看了一个网站,上面讲了很多Python鲜为人知的特性, ...

最新文章

  1. 近期活动盘点:俞士纶见面会、2018未来医疗100强论坛、清华校友三创论坛、2018年中国数字政府论坛(12.18-12.21)...
  2. java返回值变为文件_Java 文件操作-File
  3. if else和switch的效率
  4. c语言从入门到精通ppt,C语言从入门到精通第1章.ppt
  5. 自创算法——暴力自动机
  6. Nginx何防止流量攻击
  7. 计分及竞赛软件启动时的错误现象及解决方法
  8. Atitit 编程 序列化技术点 概念原理v2 1. 序列化: 1 2. 序列化的目的 1 2.1. 为了传输 或者存储 1 3. 应用场合 1 3.1. Form提交url 1 3.2. For
  9. Maya2018基础(二)展UV
  10. 推荐几个比较好的软件测试博客论坛
  11. 大数据和人工智能属于什么专业 - 学大数据和人工智能出来做什么
  12. 自定义插件——zBox
  13. Net Core对接支付宝SDK
  14. 2021CCPC网络预选赛(重赛)
  15. GIS空间分析(五)—— 位置与几何关系分析
  16. 谷粒学院(十九)统计分析模块 | 定时任务 | echarts
  17. 2019年10月计算机系统结构答案,2019年计算机系统结构复习题.doc
  18. excel下拉菜单创建
  19. 相随与欢-彩色泡泡机的设计与实现
  20. CG插画培训班有哪些

热门文章

  1. Linux的Nginx一:概况
  2. python语言程序设计实践教程答案实验六_20192417 实验一《Python程序设计》实验报告...
  3. python deepcopy函数_用Python解数独[6]:递归获得最终答案
  4. java数组空指针一场_Java使用自定义类数组报空指针异常
  5. python import 文件路径_python之import子目录文件
  6. php从入门到精通+视频,PHP从入门到精通2015版(初级)
  7. postman post gin 接收不到_golang web开发——gin实战入门
  8. python做成绩表_自学Python笔记:用Python做成绩分析(2)
  9. java判断对象无数据_java利用反射机制判断对象的属性是否为空以及获取和设置该属性的值...
  10. 正则表达式:密码中至少包含大写字母、小写字母、数字、特殊字符等字符中的2种或3种