看完2019年阿里巴巴Python面试题详解,月薪3万不是梦

很多人想自学Python找工作,下面给大家分享一部分阿里巴巴的Python开发工程师的面试题目:

看完2019年阿里巴巴Python面试题详解,月薪3万不是梦

文章插图
 
概念理解类题目:1.请说一下你对迭代器和生成器的区别?
答:(1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身 。对于string、list、dict、tuple等这类容器对象,使用for循环遍历是很方便的 。在后台for语句对容器对象调用iter()函数,iter()是python的内置函数 。iter()会返回一个定义了next()方法的迭代器对象,它在容器中逐个访问容器内元素,next()也是python的内置函数 。在没有后续元素时,next()会抛出一个StopIteration异常
(2)生成器(Generator)是创建迭代器的简单而强大的工具 。它们写起来就像是正规的函数,只是在需要返回数据的时候使用yield语句 。每次next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置和所有的数据值)
区别:生成器能做到迭代器能做的所有事,而且因为自动创建了__iter__()和next()方法,生成器显得特别简洁,而且生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存 。除了创建和保存程序状态的自动方法,当发生器终结时,还会自动抛出StopIteration异常
2.什么是线程安全?
线程安全是在多线程的环境下,能够保证多个线程同时执行时程序依旧运行正确, 而且要保证对于共享的数据可以由多个线程存取,但是同一时刻只能有一个线程进行存取 。多线程环境下解决资源竞争问题的办法是加锁来保证存取操作的唯一性 。
3.什么是私有变量?
小写和一个前导下划线 _private_value
Python 中不存在私有变量一说,若是遇到需要保护的变量,使用小写和一个前导下划线 。但这只是程序员之间的一个约定,用于警告说明这是一个私有变量,外部类不要去访问它 。但实际上,外部类还是可以访问到这个变量 。
4.内置变量
小写,两个前导下划线和两个后置下划线 __class__
两个前导下划线会导致变量在解释期间被更名 。这是为了避免内置变量和其他变量产生冲突 。用户定义的变量要严格避免这种风格 。以免导致混乱 。
看完2019年阿里巴巴Python面试题详解,月薪3万不是梦

文章插图
 
5.函数和方法
总体而言应该使用,小写和下划线 。但有些比较老的库使用的是混合大小写,即首单词小写,之后每个单词第一个字母大写,其余小写 。但现在,小写和下划线已成为规范 。
私有方法 :小写和一个前导下划线
这里和私有变量一样,并不是真正的私有访问权限 。同时也应该注意一般函数不要使用两个前导下划线(当遇到两个前导下划线时,Python 的名称改编特性将发挥作用) 。
特殊方法 :小写和两个前导下划线,两个后置下划线
这种风格只应用于特殊函数,比如操作符重载等 。
函数参数 : 小写和下划线,缺省值等号两边无空格
【看完2019年阿里巴巴Python面试题详解,月薪3万不是梦】6.类
类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写 。类名应该简明,精确,并足以从中理解类所完成的工作 。常见的一个方法是使用表示其类型或者特性的后缀,例如:
SQLEngine,MimeTypes对于基类而言,可以使用一个 Base 或者 Abstract 前缀BaseCookie,AbstractGroup
 
7.模块和包
除特殊模块 __init__ 之外,模块名称都使用不带下划线的小写字母 。
若是它们实现一个协议,那么通常使用lib为后缀,例如:
import smtplib
import os
import sys
8.Python是如何进行内存管理的?
一、垃圾回收:python不像C++,JAVA等语言一样,他们可以不用事先声明变量类型而直接对变量进行赋值 。对Python语言来讲,对象的类型和内存都是在运行时确定的 。这也是为什么我们称Python语言为动态类型的原因(这里我们把动态类型可以简单的归结为对变量内存地址的分配是在运行时自动判断变量类型并对变量进行赋值) 。
二、引用计数:Python采用了类似windows内核对象一样的方式来对内存进行管理 。每一个对象,都维护这一个对指向该对对象的引用的计数 。当变量被绑定在一个对象上的时候,该变量的引用计数就是1,(还有另外一些情况也会导致变量引用计数的增加),系统会自动维护这些标签,并定时扫描,当某标签的引用计数变为0的时候,该对就会被回收 。


推荐阅读