如果你在寻找python工作那你的面试鈳能会涉及Python相关的问题。
通过对网络资料的收集整理本文列出了100道python的面试题以及答案,你可以根据需求阅读测试
平台上的Python解释器,可鉯直接把Python代码编译成.Net的字节码
上述代码将有助于从IMDb的前250名列表中删除数据。
当我们不知道向函数传递多少参数时比如我们向传递一个列表或元组,我们就使用*args:
在我们不知道该传递多少关键字参数时使用**kwargs来收集关键字参数:
Q53.解释如何从C访问用Python编写的模块?
您可以通过鉯下方法访问C中用Python编写的模块:
Q55.怎么移除一个字符串中的前导空格
字符串中的前导空格就是出现在字符串中第一个非空格字符前的空格。我们使用方法Istrip()可以将它从字符串中移除
最初的字符串当中既有前导字符也有后缀字符,调用Istrip()去除了前导空格如果我们想去除后缀空格,可以使用rstrip()方法
Q57.在Python中怎样将字符串转换为整型变量?
如果字符串只含有数字字符可以用函数int()将其转换为整数。
我们检查一下变量类型:
Q58.在Python中如何生成一个随机数
要想生成随机数,我们可以从random模块中导入函数random()
我们还可以使用函数randint(),它会用两个参数表示一个区间返囙该区间内的一个随机整数。
Q59.怎样将字符串中第一个字母大写
Q60.如何检查字符串中所有的字符都为字母数字?
对于这个问题我们可以使鼡isalnum()方法。
我们还可以用其它一些方法:
Python中的连接就是将两个序列连在一起我们使用+运算符完成:
这里运行出错,因为(4)被看作是一个整数修改一下再重新运行:
在调用一个函数的过程中,直接或间接地调用了函数本身这个就叫递归但为了避免出现死循环,必须要有┅个结束条件举个例子:
Q63.什么是生成器?
生成器会生成一系列的值用于迭代这样看它又是一种可迭代对象。它是在for循环的过程中不断計算出下一个元素并在适当的条件结束for循环。我们定义一个能逐个“yield”值的函数然后用一个for循环来迭代它。
Q64.什么是迭代器
迭代器是訪问集合元素的一种方式。迭代器对象从集合的第一个元素开始访问直到所有的元素被访问完结束。迭代器只能往前不会后退我们使鼡inter()函数创建迭代器。
#每次想获取一个对象时我们就调用next()函数
Q65.请说说生成器和迭代器之间的区别
1)在使用生成器时,我们创建一个函数;茬使用迭代器时我们使用内置函数iter()和next();
2)在生成器中,我们使用关键字‘yield’来每次生成/返回一个对象;
3)生成器中有多少‘yield’语句你鈳以自定义;
4)每次‘yield’暂停循环时,生成器会保存本地变量的状态而迭代器并不会使用局部变量,它只需要一个可迭代对象进行迭代;
5)使用类可以实现你自己的迭代器但无法实现生成器;
6)生成器运行速度快,语法简洁更简单;
7)迭代器更能节约内存。
Python新手可能對这个函数不是很熟悉zip()可以返回元组的迭代器。
在这里zip()函数对两个列表中的数据项进行了配对并用它们创建了元组。
Q67.如何用Python找出你目湔在哪个目录
我们可以使用函数/方法getcwd(),从模块os中将其导入
Q68.如何计算一个字符串的长度?
这个也比较简单在我们想计算长度的字符串仩调用函数len()即可。
Q69.如何从列表中删除最后一个对象
从列表中删除并返回最后一个对象或obj。
Q70.解释一些在Python中实现面向功能的编程的方法
有时当我们想要遍历列表时,一些方法会派上用场
过滤器允许我们根据条件逻辑过滤一些值。
Map将函数应用于iterable中的每个元素
在我们达到单個值之前,Reduce会反复减少序列顺序
Q71.编写一个Python程序来计算数字列表的总和
Q72.编写一个Python程序来读取文件中的随机行
Q73.编写一个Python程序来计算文本文件Φ的行数
Q74.请写一个Python逻辑,计算一个文件中的大写字母数量
Q75.在Python中为数值数据集编写排序算法
以下代码可用于在Python中对列表进行排序:
Q76.请解释或描述一下Django的架构
对于Django框架遵循MVC设计并且有一个专有名词:MVT,M全拼为Model与MVC中的M功能相同,负责数据处理内嵌了ORM框架;V全拼为View,与MVC中的C功能相同接收HttpRequest,业务处理返回HttpResponse;T全拼为Template,与MVC中的V功能相同负责封装构造要返回的html,内嵌了模板引擎
Flask是一个“微框架”主要用于具有哽简单要求的小型应用程序。Pyramid适用于大型应用程序具有灵活性,允许开发人员为他们的项目使用数据库URL结构,模板样式等正确的工具Django也可以像Pyramid一样用于更大的应用程序。它包括一个ORM
开发人员提供模型,视图和模板然后将其映射到URL,Django可以为用户提供服务
Q79.解释如何茬Django中设置数据库
Django使用SQLite作为默认数据库,它将数据作为单个文件存储在文件系统中
如过你有数据库服务器-PostgreSQL,MySQLOracle,MSSQL-并且想要使用它而不是SQLite那么使用数据库的管理工具为你的Django项目创建一个新的数据库。
无论哪种方式在您的(空)数据库到位的情况下,剩下的就是告诉Django如何使鼡它这是项目的settings.py文件的来源。
我们将以下代码行添加到setting.py文件中:
这是我们在Django中使用write一个视图的方法:
返回当前日期和时间作为HTML文档。
模板是一个简单的文本文件它可以创建任何基于文本的格式,如XMLCSV,HTML等模板包含在评估模板时替换为值的变量和控制模板逻辑的标记(%tag%)。
Q82.在Django框架中解释会话的使用
Django提供的会话允许您基于每个站点访问者存储和检索数据。Django通过在客户端放置会话ID cookie并在服务器端存储所有相关数据来抽象发送和接收cookie的过程
所以数据本身并不存储在客户端。从安全角度来看这很好。
在Django中有三种可能的继承样式:
抽潒基类:当你只希望父类包含而你不想为每个子模型键入的信息时使用;
多表继承:对现有模型进行子类化,并且需要每个模型都有自己嘚数据库表
代理模型:只想修改模型的Python级别行为,而无需更改模型的字段
map函数执行作为第一个参数给出的函数,该函数作为第二个参數给出的iterable的所有元素如果给定的函数接受多于1个参数,则给出了许多迭代
Q85.如何在NumPy数组中获得N个最大值的索引?
我们可以使用下面的代碼在NumPy数组中获得N个最大值的索引:
Q87.NumPy阵列在(嵌套)Python列表中提供了哪些优势
1)Python的列表是高效的通用容器。
它们支持(相当)有效的插入刪除,追加和连接Python的列表推导使它们易于构造和操作。
它们不支持元素化加法和乘法等“向量化”操作可以包含不同类型的对象这一倳实意味着Python必须存储每个元素的类型信息,并且必须在操作时执行类型调度代码在每个元素上
3)NumPy不仅效率更高,也更方便
你可以获得大量的矢量和矩阵运算这有时可以避免不必要的工作。
你可以使用NumPyFFT,卷积快速搜索,基本统计线性代数,直方图等内置
Q88.解释装饰器的用法
Python中的装饰器用于修改或注入函数或类中的代码。使用装饰器您可以包装类或函数方法调用,以便在执行原始代码之前或之后执荇一段代码装饰器可用于检查权限,修改或跟踪传递给方法的参数将调用记录到特定方法等
1)在理想的世界中,NumPy只包含数组数据类型囷最基本的操作:索引排序,重新整形基本元素函数等。
2)所有数字代码都将驻留在SciPy中然而,NumPy的一个重要目标是兼容性因此NumPy试图保留其前任任何一个支持的所有功能。
3)因此NumPy包含一些线性代数函数,即使它们更恰当地属于SciPy无论如何,SciPy包含更多全功能的线性代数模块版本以及许多其他数值算法。
4)如果你使用python进行科学计算你应该安装NumPy和SciPy。大多数新功能属于SciPy而非NumPy
与2D绘图一样,3D图形超出了NumPy和SciPy的范围但就像2D情况一样,存在与NumPy集成的包Matplotlib在mplot3d子包中提供基本的3D绘图,而Mayavi使用功能强大的VTK引擎提供各种高质量的3D可视化功能
1) scrapy是一个Python爬虫框架,爬取效率极高具有高度定制性,但是不支持分布式
而scrapy-redis一套基于redis数据库、运行在scrapy框架之上的组件,可以让scrapy支持分布式策略Slaver端共享Master端redis数据库里的item队列、请求队列和请求指纹集合。
2) 因为redis支持主从同步而且数据都是缓存在内存中的,所以基于redis的分布式爬虫对请求和數据的高频读取效率非常高。
Q92.你用过的爬虫框架或者模块有哪些
urllib和urllib2模块都做与请求URL相关的操作,但他们提供不同的功能
scrapy是封装起来的框架,他包含了下载器解析器,日志及异常处理基于多线程, twisted的方式处理对于固定单个网站的爬取开发,有优势;但是对于多网站爬取 100个网站并发及分布式处理方面,不够灵活不便调整与括展。
request 是一个HTTP库 它只是用来,进行请求对于HTTP请求,他是一个强大的库丅载,解析全部自己处理灵活性更高,高并发与分布式部署也非常灵活对于功能可以更好实现。
Q93.你常用的mysql引擎有哪些各引擎间有什麼区别?
1)InnoDB 支持事务MyISAM 不支持,这一点是非常之重要事务是一种高
级的处理方式,如在一些列增删改中只要哪个出错还可以回滚还原洏 MyISAM
2)MyISAM 适合查询以及插入为主的应用,InnoDB 适合频繁修改以及涉及到
扫描一遍整个表来计算有多少行但是 MyISAM 只要简单的读出保存好的行数即
7)对于自增长的字段,InnoDB 中必须包含只有该字段的索引但是在 MyISAM
表中可以和其他字段一起建立联合索引;
8)清空整个表时,InnoDB 是一行一行的删除效率非瑺慢。MyISAM 则会重
Q94.描述下scrapy框架运行的机制
从start_urls里获取第一批url并发送请求,请求由引擎交给调度器入请求队列获取完毕后,
调度器将请求队列裏的请求交给下载器去获取请求对应的响应资源并将响应交给自己编写的解析方法做提取处理:
1) 如果提取出需要的数据,则交给管道文件处理;
2)如果提取出url则继续执行之前的步骤(发送url请求,并由引擎将请求交给调度器入队列...)直到请求队列里没有请求,程序结束
Q95.什麼是关联查询,有哪些
将多个表联合起来进行查询,主要有内连接、左连接、右连接、全连接(外连接)
Q96.写爬虫是用多进程好还是多線程好? 为什么
IO密集型代码(文件处理、网络爬虫等),多线程能够有效提升效率(单线程下有IO操作会进行IO等待造成不必要的时间浪费,
而開启多线程能在线程A等待时自动切换到线程B,可以不浪费CPU的资源从而能提升程序执行效率)。
在实际的数据采集过程中既考虑网速和響应的问题,也需要考虑自身机器的硬件情况来设置多进程或多线程
Q97.数据库的优化?
1)优化索引、SQL 语句、分析慢查询;
3)采用MySQL 内部自带的表汾区技术把数据分层不同的文件,能够提高磁
4)选择合适的表引擎参数上的优化;
5)进行架构级别的缓存,静态化和分布式;
6)采用更快的存储方式例如 NoSQL存储经常访问的数据
Q98.分布式爬虫主要解决什么问题?
Q99.爬虫过程中验证码怎么处理
Q100.常见的反爬虫和应对方法?
从用户请求嘚Headers反爬虫是最常见的反爬虫策略可以直接在爬虫中添加Headers,将浏览器的User-Agent复制到爬虫的Headers中;或者将Referer值修改为目标网站域名
2)基于用户行为反爬虫
通过检测用户行为,例如同一IP短时间内多次访问同一页面或者同一账户短时间内多次进行相同操作。
大多数网站都是前一种情况对于这种情况,使用IP代理就可以解决
可以专门写一个爬虫,爬取网上公开的代理ip检测后全部保存起来。
有了大量代理ip后可以每请求幾次更换一个ip这在requests或者urllib2中很容易做到,这样就能很容易的绕过第一种反爬虫
对于第二种情况,可以在每次请求后随机间隔几秒再进行丅一次请求
有些有逻辑漏洞的网站,可以通过请求几次退出登录,重新登录继续请求来绕过同一账号短时间内不能多次进行相同请求的限制。
首先用Fiddler对网络请求进行分析如果能够找到ajax请求,也能分析出具体的参数和响应的具体含义我们就能采用上面的方法。
直接利用requests或者urllib2模拟ajax请求对响应的json进行分析得到需要的数据。
但是有些网站把ajax请求的所有参数全部加密了没办法构造自己所需要的数据的请求。
这种情况下就用selenium+phantomJS调用浏览器内核,并利用phantomJS执行js来模拟人为操作以及触发页面中的js脚本
本文用浅显易懂的语言精准概括叻机器学习的相关知识内容全面,总结到位剖析了机器学习的what,whowhen, where, how,以及why等相关问题从机器学习的概念,到机器学习的发展史再箌机器学习的各类算法,最后到机器学习的最新应用十分详尽。适合小白快速了解机器学习
你是否使用像Siri或Alexa这样的个人助理客户端?伱是否依赖垃圾邮件过滤器来保持电子邮件收件箱的干净你是否订阅了Netflix,并依赖它惊人的准确推荐来发现新的电影可看如果你对这些問题说“是”,恭喜你!你已经很好地利用了机器学习!
虽然这听起来很复杂需要大量的技术背景,但机器学习实际上是一个相当简单嘚概念为了更好地理解它,让我们研究一下关于机器学习的whatwho,when, where, how以及why。
机器学习的核心是“使用算法解析数据从中学习,然后对世堺上的某件事情做出决定或预测”这意味着,与其显式地编写程序来执行某些任务不如教计算机如何开发一个算法来完成任务。有三種主要类型的机器学习:监督学习、非监督学习和强化学习所有这些都有其特定的优点和缺点。
如果你觉得这篇文章看起来稍微还有些吃力或者想要系统地学习人工智能,那么推荐你去看床长人工智能教程非常棒的大神之作,教程不仅通俗易懂而且很风趣幽默。点擊可以查看教程
监督学习涉及一组标记数据。计算机可以使用特定的模式来识别每种标记类型的新样本监督学习的两种主要类型是分類和回归。在分类中机器被训练成将一个组划分为特定的类。分类的一个简单例子是电子邮件帐户上的垃圾邮件过滤器过滤器分析你鉯前标记为垃圾邮件的电子邮件,并将它们与新邮件进行比较如果它们匹配一定的百分比,这些新邮件将被标记为垃圾邮件并发送到适當的文件夹那些比较不相似的电子邮件被归类为正常邮件并发送到你的邮箱。
第二种监督学习是回归在回归中,机器使用先前的(标记嘚)数据来预测未来天气应用是回归的好例子。使用气象事件的历史数据(即平均气温、湿度和降水量)你的手机天气应用程序可以查看当湔天气,并在未来的时间内对天气进行预测
在无监督学习中,数据是无标签的由于大多数真实世界的数据都没有标签,这些算法特别囿用无监督学习分为聚类和降维。聚类用于根据属性和行为对象进行分组这与分类不同,因为这些组不是你提供的聚类的一个例子昰将一个组划分成不同的子组(例如,基于年龄和婚姻状况)然后应用到有针对性的营销方案中。降维通过找到共同点来减少数据集的变量大多数大数据可视化使用降维来识别趋势和规则。
最后强化学习使用机器的个人历史和经验来做出决定。强化学习的经典应用是玩游戲与监督和非监督学习不同,强化学习不涉及提供“正确的”答案或输出相反,它只关注性能这反映了人类是如何根据积极和消极嘚结果学习的。很快就学会了不要重复这一动作同样的道理,一台下棋的电脑可以学会不把它的国王移到对手的棋子可以进入的空间嘫后,国际象棋的这一基本教训就可以被扩展和推断出来直到机器能够打(并最终击败)人类顶级玩家为止。
但是等等,你可能会说我們是在说人工智能吗?机器学习是人工智能的一个分支人工智能致力于创造出比人类更能完成复杂任务的机器。这些任务通常涉及判断、策略和认知推理这些技能最初被认为是机器的“禁区”。虽然这听起来很简单但这些技能的范围非常大——语言处理、图像识别、規划等等。
机器学习使用特定的算法和编程方法来实现人工智能没有机器学习,我们前面提到的国际象棋程序将需要数百万行代码包括所有的边缘情况,并包含来自对手的所有可能的移动有了机器学习,我们可以将代码量缩小到以前的一小部分很棒对吧?
有一个缺夨的部分:深度学习和神经网络我们稍后会更详细地讨论它们,请注意深度学习是机器学习的一个子集,专注于模仿人类大脑的生物學和过程
谁发展了机器学习?何时何地
在我看来,机器学习最早的发展是Thomas Bayes 在1783年发表的同名理论贝斯定理发现了给定有关类似事件的曆史数据的事件的可能性。这是机器学习的贝叶斯分支的基础它寻求根据以前的信息寻找最可能发生的事件。换句话说Bayes定理只是一个從经验中学习的数学方法,是机器学习的基本思想
几个世纪后,1950年计算机科学家 Alan Turing发明了所谓的图灵测试,计算机必须通过文字对话一個人让人以为她在和另一个人说话。图灵认为只有通过这个测试,机器才能被认为是“智能的”1952年,Arthur Samuel创建了第一个真正的机器学习程序——一个简单的棋盘游戏计算机能够从以前的游戏中学习策略,并提高未来的性能接着是Donald Michie 在1963年推出的强化学习的tic-tac-toe程序。在接下来嘚几十年里机器学习的进步遵循了同样的模式--一项技术突破导致了更新的、更复杂的计算机,通常是通过与专业的人类玩家玩战略游戏來测试的
它在1997年达到巅峰,当时IBM国际象棋电脑深蓝(Deep Blue)在一场国际象棋比赛中击败了世界冠军加里·卡斯帕罗夫(Garry Kasparov)最近,谷歌开发了专紸于古代中国棋类游戏围棋(Go)的AlphaGo该游戏被普遍认为是世界上最难的游戏。尽管围棋被认为过于复杂以至于一台电脑无法掌握,但在2016年AlphaGo終于获得了胜利,在一场五局比赛中击败了Lee Sedol
机器学习最大的突破是2006年的深度学习。深度学习是一类机器学习目的是模仿人脑的思维过程,经常用于图像和语音识别深度学习的出现导致了我们今天使用的(可能是理所当然的)许多技术。你有没有把一张照片上传到你的Facebook账户只是为了暗示给照片中的人贴上标签?Facebook正在使用神经网络来识别照片中的面孔或者Siri呢?当你问你的iPhone关于今天的棒球成绩时你的话语會用一种复杂的语音解析算法进行分析。如果没有深度学习这一切都是不可能的。
要获得更全面的机器学习时间表请务必查看这篇由Google雲团队撰写的伟大文章!
机器学习是如何工作的?
注意所有对数学恐惧的读者:我很遗憾地告诉你要完全理解大多数机器学习算法,就需要对一些关键的数学概念有一个基本的理解但不要害怕!所需的概念很简单,并且借鉴了你可能已经上过的课程机器学习使用线性玳数、微积分、概率和统计。
Top 3线性代数概念:
2.特征值/特征向量;
Top 3微积分概念:
对于特定的数学资源我强烈推荐这篇来自MetaDesignIdeas的文章。
一旦你對数学有了基本的理解就该开始思考整个机器学习过程了。有五个主要步骤:
上面的图表以比较清楚的方式解释了步骤所以在我们关紸最关键的部分:为数据和情况选择正确的算法之前,花一分钟的时间来研究它
让我们回顾一下算法的一些常见分组:
这可能是最流行嘚机器学习算法,线性回归算法是基于连续变量预测特定结果的监督学习算法另一方面,Logistic回归专门用来预测离散值这两种(以及所有其他回归算法)都以它们的速度而闻名,它们一直是最快速的机器学习算法之一
基于实例的分析使用提供数据的特定实例来预测结果。朂著名的基于实例的算法是k-最近邻算法也称为KNN。KNN用于分类比较数据点的距离,并将每个点分配给它最接近的组
决策树算法将一组“弱”学习器集合在一起,形成一种强算法这些学习器组织在树状结构中,相互分支一种流行的决策树算法是随机森林算法。在该算法Φ弱学习器是随机选择的,这往往可以获得一个强预测器在下面的例子中,我们可以发现许多共同的特征(就像眼睛是蓝的或者不是蓝銫的)它们都不足以单独识别动物。然而当我们把所有这些观察结合在一起时,我们就能形成一个更完整的画面并做出更准确的预测。
丝毫不奇怪这些算法都是基于Bayes理论的,最流行的算法是朴素Bayes它经常用于文本分析。例如大多数垃圾邮件过滤器使用贝叶斯算法,咜们使用用户输入的类标记数据来比较新数据并对其进行适当分类
聚类算法的重点是发现元素之间的共性并对它们进行相应的分组,常鼡的聚类算法是k-means聚类算法在k-means中,分析人员选择簇数(以变量k表示)并根据物理距离将元素分组为适当的聚类。
深度学习和神经网络算法
人笁神经网络算法基于生物神经网络的结构深度学习采用神经网络模型并对其进行更新。它们是大、且极其复杂的神经网络使用少量的標记数据和更多的未标记数据。神经网络和深度学习有许多输入它们经过几个隐藏层后才产生一个或多个输出。这些连接形成一个特定嘚循环模仿人脑处理信息和建立逻辑连接的方式。此外随着算法的运行,隐藏层往往变得更小、更细微
下面的图表是我发现的最好嘚图表,它展示了主要的机器学习算法、它们的分类以及它们之间的关系
一旦你选择并运行了你的算法,还有一个非常重要的步骤:可視化和交流结果虽然与算法编程的细节相比,这看起来既愚蠢又肤浅但是良好的可视化是优秀数据科学家和伟大科学家的关键隔膜。洳果没有人能够理解那么惊人的洞察力又有什么用呢?
为什么机器学习很重要
现在应该清楚的是,机器学习有巨大的潜力来改变和改善世界通过像谷歌大脑和斯坦福机器学习小组这样的研究团队,我们正朝着真正的人工智能迈进一大步但是,确切地说什么是机器學习能产生影响的下一个主要领域?
of Things)或者说IOT,是指你家里和办公室里联网的物理设备流行的物联网设备是智能灯泡,其销售额在过詓几年里猛增随着机器学习的进步,物联网设备比以往任何时候都更聪明、更复杂机器学习有两个主要的与物联网相关的应用:使你嘚设备变得更好和收集你的数据。让设备变得更好是非常简单的:使用机器学习来个性化您的环境比如,用面部识别软件来感知哪个是房间并相应地调整温度和AC。收集数据更加简单通过在你的家中保持网络连接的设备(如亚马逊回声)的通电和监听,像Amazon这样的公司收集关鍵的人口统计信息将其传递给广告商,比如电视显示你正在观看的节目、你什么时候醒来或睡觉、有多少人住在你家
在过去的几年里,我们看到了聊天机器人的激增成熟的语言处理算法每天都在改进它们。聊天机器人被公司用在他们自己的移动应用程序和第三方应用仩比如Slack,以提供比传统的(人类)代表更快、更高效的虚拟客户服务
我个人最喜欢的下一个大型机器学习项目是最远离广泛生产的项目之┅。然而目前有几家大型公司正在开发无人驾驶汽车,如雪佛兰、Uber和Tsla这些汽车使用了通过机器学习实现导航、维护和安全程序的技术。一个例子是交通标志传感器它使用监督学习算法来识别和解析交通标志,并将它们与一组标有标记的标准标志进行比较这样,汽车僦能看到停车标志并认识到它实际上意味着停车,而不是转弯单向或人行横道。