扣丁学堂为你总结Python主要面试题

2018-01-09 11:07:36 770浏览

现在编程界,可谓最火的语言就是Python,Python编程学习起来很费事,但是面试时也会有很多的问题,今天就让我们扣丁学堂为大家列举几点常见的问题。



     【题目:001】说说你对pythonic的看法,尝试解决下面的小问题

#简洁,明了,严谨,灵活

#交换两个变量值

a,b=b,a

#去掉list中的重复元素

old_list=[1,1,1,3,4]

new_list=list(set(old_list))

#翻转一个字符串

s='abcde'

ss=s[::-1]

#用两个元素之间有对应关系的list构造一个dict

names=['jianpx','yue']

ages=[23,40]

m=dict(zip(names,ages))

#将数量较多的字符串相连,如何效率较高,为什么

fruits=['apple','banana']

result=''.join(fruits)

#python字符串效率问题之一就是在连接字符串的时候使用‘+’号,例如s=‘s1’+‘s2’+‘s3’+...+’sN’,总共将N个字符串连接起来,但是使用+号的话,python需要申请N-1次内存空间,然后进行字符串拷贝。原因是字符串对象PyStringObject在python当中是不可变对象,所以每当需要合并两个字符串的时候,就要重新申请一个新的内存空间(大小为两个字符串长度之和)来给这个合并之后的新字符串,然后进行拷贝。所以用+号效率非常低。建议在连接字符串的时候使用字符串本身的方法join(list),这个方法能提高效率,原因是它只是申请了一次内存空间,因为它可以遍历list中的元素计算出总共需要申请的内存空间的大小,一次申请完。

     【题目:002】|你调试python代码的方法有哪些?

具体IDE都有调试,比如:IDLE,Eclipse+Pydev都可以设置断点调试。

pdb模块也可以做调试。

还有PyChecker和Pylint

PyChecker是一个python代码的静态分析工具,它可以帮助查找python代码的bug,会对代码的复杂度和格式提出警告

Pylint是另外一个工具可以进行codingstandard检查。

      【题目:003】|你在github上都fork过哪些python库,列举一下你经常使用的,每个库用一句话描述下其功能

http://rogerdudler.github.io/git-guide/index.zh.html#关于git简明指南

http://www.zhihu.com/question/20070065#关于git的BBS

http://www.techug.com/githug-for-designer#关于github的

      【题目:004】|什么是GIL?

什么是GIL(GlobalInterpreterLock)全局解释器锁?简单地说就是:

每一个interpreter进程,只能同时仅有一个线程来执行,获得相关的锁,存取相关的资源.

那么很容易就会发现,如果一个interpreter进程只能有一个线程来执行,

多线程的并发则成为不可能,即使这几个线程之间不存在资源的竞争.

从理论上讲,我们要尽可能地使程序更加并行,能够充分利用多核的功能.

     【题目:005】|什么是元类(meta_class)?

元类就是用来创建类的“东西”

详情操作:http://blog.jobbole.com/21351/

      【题目:006】|对比一下dict中items与iteritems?

>>>D={'a':1,'b':2,'c':3,'d':4}

>>>D.items()#一次性取出所有

[('a',1),('c',3),('b',2),('d',4)]

>>>D.iteritems()#迭代对象,每次取出一个。用for循环遍历出来;

<dictionary-itemiteratorobjectat0x00000000026243B8>

>>>foriinD.iteritems():

...printi,

...

('a',1)('c',3)('b',2)('d',4)

>>>fork,vinD.iteritems():

...printk,

...

acbd

总结:

1.一般iteritems()迭代的办法比items()要快,特别是数据库比较大时。

2.在Python3中一般取消前者函数

     【题目:007】|是否遇到过python的模块间循环引用的问题,如何避免它?

这是代码结构设计的问题,模块依赖和类依赖

如果老是觉得碰到循环引用,很可能是模块的分界线划错地方了。可能是把应该在一起的东西硬拆开了,可能是某些职责放错地方了,可能是应该抽象的东西没抽象

总之微观代码规范可能并不能帮到太多,重要的是更宏观的划分模块的经验技巧,推荐uml,脑图,白板等等图形化的工具先梳理清楚整个系统的总体结构和职责分工

采取办法,从设计模式上来规避这个问题,比如:

1.使用“__all__”白名单开放接口

2.尽量避免import

      【题目:008】|有用过withstatement吗?它的好处是什么?

>>>withopen('text.txt')asmyfile:

...whileTrue:

...line=myfile.readline()

...ifnotline:

...break

...printline,

#with语句使用所谓的上下文管理器对代码块进行包装,允许上下文管理器实现一些设置和清理操作。

#例如:文件可以作为上下文管理器使用,它们可以关闭自身作为清理的一部分。

#NOTE:在PYTHON2.5中,需要使用from__future__importwith_statement进行with语句的导入

       【题目:009】|用Python生成指定长度的斐波那契数列

deffibs(x):

result=[0,1]

forindexinrange(x-2):

result.append(result[-2]+result[-1])

returnresult

if__name__=='__main__':

num=input('Enteronenumber:')

printfibs(num)

       想要学习Python或者想要进行Python培训的小伙伴就选择口碑良好的扣丁学堂进行学习吧,扣丁学堂不仅有专业的老师和与时俱进的课程体系,更有大量的Python视频教程供学员观看学习,想要学好Python高薪就业的小伙伴抓紧时间行动吧。扣丁学堂Python技术交流群:279521237。

关注微信号获取更多的学习资料



查看更多关于"Python开发资讯"的相关文章>>

标签: Python培训 Python视频教程 Python开发工程师

热门专区

暂无热门资讯

课程推荐

微信
微博
15311698296

全国免费咨询热线

邮箱:codingke@1000phone.com

官方群:148715490

北京千锋互联科技有限公司版权所有   北京市海淀区宝盛北里西区28号中关村智诚科创大厦4层
京ICP备12003911号-6   Copyright © 2013 - 2019

京公网安备 11010802030908号