数码控科技猎奇Iphone动漫星座游戏电竞lolcosplay王者荣耀攻略allcnewsBLOGNEWSBLOGASKBLOGBLOGZSK全部技术问答问答技术问答it问答代码软件新闻开发博客电脑/网络手机/数码笔记本电脑互联网操作系统软件硬件编程开发360产品资源分享电脑知识文档中心IT全部全部分类全部分类技术牛文全部分类教程最新网页制作cms教程平面设计媒体动画操作系统网站运营网络安全服务器教程数据库工具网络安全软件教学vbscript正则表达式javascript批处理更多»编程更新教程更新游戏更新allitnewsJava新闻网络医疗信息化安全创业站长电商科技访谈域名会议专栏创业动态融资创投创业学院 / 产品经理创业公司人物访谈营销开发数据库服务器系统虚拟化云计算嵌入式移动开发作业作业1常见软件all电脑网络手机数码生活游戏体育运动明星影音休闲爱好文化艺术社会民生教育科学医疗健康金融管理情感社交地区其他电脑互联网软件硬件编程开发360相关产品手机平板其他电子产品摄影器材360硬件通讯智能设备购物时尚生活常识美容塑身服装服饰出行旅游交通汽车购房置业家居装修美食烹饪单机电脑游戏网页游戏电视游戏桌游棋牌游戏手机游戏小游戏掌机游戏客户端游戏集体游戏其他游戏体育赛事篮球足球其他运动球类运动赛车健身运动运动用品影视娱乐人物音乐动漫摄影摄像收藏宠物幽默搞笑起名花鸟鱼虫茶艺彩票星座占卜书画美术舞蹈小说图书器乐声乐小品相声戏剧戏曲手工艺品历史话题时事政治就业职场军事国防节日风俗法律法规宗教礼仪礼节自然灾害360维权社会人物升学入学人文社科外语资格考试公务员留学出国家庭教育学习方法语文物理生物工程学农业数学化学健康知识心理健康孕育早教内科外科妇产科儿科皮肤科五官科男科整形中医药品传染科其他疾病医院两性肿瘤科创业投资企业管理财务税务银行股票金融理财基金债券保险贸易商务文书国民经济爱情婚姻家庭烦恼北京上海重庆天津黑龙江吉林辽宁河北内蒙古山西陕西宁夏甘肃青海新疆西藏四川贵州云南河南湖北湖南山东江苏浙江安徽江西福建广东广西海南香港澳门台湾海外地区

值得收藏的10道python 面试题

来源:脚本之家  责任编辑:小易  

Q1:PEP8是什么?Python之禅(import this)是什么?

这题是考察你对编码规范的认识,无论是自己写代码还是在团队中写代码,了解并遵循代码规范是很基础的要求。企业中在提交代码后都会有对应的工具来对代码进行检查,比如 pep8、flake8、pylint 等,但是 PEP 8 是什么一定要了解。

即 Style Guide for Python Code(Python编码风格指南)。如果面试时不知道什么是 PEP 8 ,那聊起来想必不会很愉快。速战速决的面试,如果不是你把面试官“秒杀”了,那就是面试官把你“秒杀”了,大部分是后者。 Python 之禅,也就是 import this。这属于对 Python 文化的了解了。什么意思?你去 Python shell 里执行一下:import this,然后搜索下答案自然就出来了。

Q2:Python常用的容器类型有哪些以及它们之间的差别?

这是一道基础题。如果被问到了这个问题,说明面试官在探测你对 Python 基础的掌握。如果不知道,那就会被“秒杀”。当然聊得好了,也可以聊到实现原理层面。

在 Python 中常用的数据类型,有一些是基础数据类型,比如 int、bool、string,还有容器类型,比如 list、set、dict 等。所有的类型又可以氛分为:可变类型和不可变类型(不知道是什么的可以动手搜索一下)。单说容器类型,每种容器类型都有使用的场景,比如 list 可以存放不同类型的元素,特点是支持索引和切片操作,支持 insert 和 pop 操作,属于可变类型。由此也可以展开很多面试题中遇到的坑,比如说这个代码:


例子

然后再来说到 tuple,也可以当做列表,支持迭代、索引、切片等操作,但因为它是不可变类型,所以不支持 append、insert 等操作,为什么不支持呢?在从应用上来说,在实际编程中经常会用到它,比如:参数传递,解包。这一部分可以继续聊下去的就是namedtuple。再然后就是 set 和 dict,它们跟 list 和 tuple有这么几个差别:1. 存放的值不是顺序的;2. 无法通过索引获取到数据; 3. 存放的元素不可重复,并且必须是 hashable(可哈希的),针对 key 来说;4. 更快的查找速度,因为是通过哈希表来存储的。当然还可以继续深入 set 和 dict 的原理,如何解决哈希碰撞。

Q3:解释下闭包是什么,以及日常中什么场景会用到?

闭包是指持有了自由变量的函数,那怎么理解呢,用代码来看一下:


闭包

日常使用场景是什么呢?最常用会用到的地方就是装饰器,上面的示例代码也能看出来,比如我曾写过 Cache 的演进部分,部分代码如下:


这就是个典型的场景。

Q4:GIL 是什么?它的影响和具体原理是什么?

GIL:Global Interpreter Lock(全局解释器锁)。具体表现就是:在一个进程中,同一时刻只能有一个线程能到解释器,为什么只能有一个线程拿到解释器呢?因为在 CPython 中,内存管理不是线性安全的,所以,为了避免多个线程同时访问到一个对象,就有了这么一个锁。顺带着也提到了线程安全的概念,有了 GIL 了,那么 Python 中有哪些类型是线程安全的呢?哪些不是呢?又是一个新的问题。那么 GIL 的影响是什么呢?就是同一时刻只有一个线程在真实执行,对于 CPU 密集型的应用影响比较大,对于 IO 密集型的应用影响没那么大。当然还可以具体展开来说。

Q5:进程、协程、线程分别是什么,以及区别是什么?

从操作系统角度来讲,进程是资源分配单元,线程是执行单元,多个线程可以共享所在进程的资源。而协程是从程序运行角度来叫,是由用户(程序)控制和调度的一个过程,在 Python 中,协程是一个包含了 yield 的函数,比如下图:


协程(包含一个生成器)

在Python 3里面你可以用asyncio.iscoroutine(coro) 来判断是否为协程。需要了解的是在协程执行时,是通过 event loop 来调度的。如果聊到这,可能会接着聊下 Tornado 的 IOLoop 的事。总体来说,协程可以理解为更轻量级的线程,能够在单线程中运行多个协程。需要注意的是,在 Python 中协程执行是串行的,这个是由于它的调度机制决定的,这点不同于 Golang。

Q6:如何理解 Django 被称为 MTV 模式?

如果是我来问这个问题,这个题就是面向对象设计和设计模式的开始。简单来说大家耳熟能详的模式叫: MVC。说是 Model View Controller,而在 Django 中因为 Template 来处理视图展现,所以称为: MTV。接下里会问到的就是分层的概念,有句话叫:“没有什么问题是不能通过增加一层解决的,如果有,那就再加一层。”当然还会有设计模式的一些原则等着你,比如开-闭原则、单一职责原则等。

Q7:解释下什么是 ORM 以及它的优缺点是什么?

ORM:Object Relational Mapping(对象关系映射),它做的事就是帮我们封装一下对数据库的操作,避免我们来写不太好维护的 SQL 代码。优点就是让我们写的代码更容易维护,因为里面不用夹杂着各种 SQL 代码。缺点是失去了 SQL 的灵活,并且越是通用的 ORM 框架,性能损耗会越大。

说到性能损耗,可以接着聊的是 Django 中的 raw sql,也就是说Model.objects.raw这个方法的使用,它的作用、原理、性能提升等。还可以继续聊另外一个老生常谈的问题:N+1 的问题。

Q8:如何排查 Django 系统中的性能问题?

对于 Django 这样一个非常成熟的框架来说,丰富的周边能够让我们快速的找到别人开源出来的优秀插件,比如说 Django-debug-toolbar,或者是 Django-silk 。但是一个基础问题是:在 Django 的 settings 中,设置DEBUG = True 和 DEBUG = False 的差别是什么?还可以聊的是对于 Django 处理请求到返回响应的具体流程。因为只有熟悉了整体流程,才能在合理的位置进行排查。比方说,当我们判断可能是数据库的问题时,那可能需要在 Model 层的某个方法上加上执行时间监测的逻辑。如果是 View 层的其他逻辑导致的,可能会在 Middleware 上增加执行时间监测的逻辑。

Q9:Django 系统中如何配置数据库的长连接?

这涉及到 Django 如何处理数据库连接细节的问题。默认情况下对于每一个请求 Django 都会建立一个新的数据库连接。这意味着当请求量过大时就会出现数据库(MySQL)的 Too many connection 的问题,对于这个问题,在其他的语言框架中有连接池这样的东西来减少数据库的连接数,来提升连接的使用效率。而在 Django 中,为了处理这一问题,增加了一个配置: CONN_MAX_AGE,在 settings 的 DATABASES 配置中。配置了该选项后,Django 会跟数据库保持链接(时长取决于 CONN_MAX_AGE 设定的值 ),不再会针对每个请求都创建新的连接了。但是需要注意的是,这跟数据库连接池的概念还不太一样。

Q10:如何部署并监控 Django 系统?

这个就是考察候选人对于真实项目的部署和线上问题排查的了解了。如果没有真实工作过,可能不太有概念。首先需要理解的是开发的流程,代码在程序员的电脑(开发机)上开发完成,然后部署到测试环境进行测试,这个过程可能是自动的(由 GitLab CI 触发或者其他类似逻辑),也可能是需要人工操作的(比如使用 Fabric 或者 ansible)手动执行部署操作。然后测试同学进行测试,没问题之后,代码合并到主分支(涉及Git相关的使用流程),再部署上线。

这时系统就可以对外提供服务了,那么问题来了,用户的访问是如何到你部署的系统中来的?再来说监控。监控的目的是为了保证程序的正常运行,如果出现问题我们可以及时发现并修复。所以,简单来说有两个确定的指标可以观察,第一个是状态码,对于 HTTP 服务来说,监控非 200 的状态码的数量是很有必要的;第二个就是应用内的异常监控,这个就是 Sentry 之类的系统来做了,通过它可以收集到具体的异常详情,完成的 Traceback,可以帮助我们快速地定位问题所在。

虽然说只有十个问题,但是在正式聊的时候,每个问题都是可以层层追问的,其实面试有个原则,就是:要追问到候选人答不出来,或者面试官不知道该问什么为止,因为需要确定候选人的技术掌握的边界(深度)。

总结

以上所述是小编给大家介绍的值得收藏的10道python 面试题,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

您可能感兴趣的文章:


  • 本文相关:
  • python正则表达式面试题解答
  • python程序员面试题 你必须提前准备!(答案及解析)
  • 5个很好的python面试题问题答案及分析
  • 分享几道你可能遇到的python面试题
  • 深入解答关于python的11道基本面试题
  • python工程师面试题 与python web相关
  • python工程师面试题 与python基础语法相关
  • python完成fizzbuzzwhizz问题(拉勾网面试题)示例
  • python错误处理详解
  • django rest为文件属性输出完整url的方法
  • 对python3 一组数值的归一化处理方法详解
  • python基础中所出现的异常报错总结
  • 解决python3.5 正常安装 却不能直接使用tkinter包的问题
  • python 实现求解字符串集的最长公共前缀方法
  • 用python处理图片之打开\显示\保存图像的方法
  • python re正则表达式模块(regular expression)
  • python的pandas工具包,保存.csv文件时不要表头的实例
  • linux上安装python的pil和pillow库处理图片的实例教程
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved