精华内容
下载资源
问答
  • python面试常见问题

    2021-01-20 02:44:30
    python面试常见问题1、“==”与is的区别2、list与tuple的区别3、python中list与dict4、局部变量和全局变量5、迭代器和生成器6、yield7、import过程8、python装饰器9、python特点(封装、继承、多态)10、垃圾回收...
  • 原标题:Python面试常见问题,涉及Python各个方面爬虫面试常见问题一、项目问题:1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的2.用的什么框架。为什么选择这个框架二、框架问题:1.scrapy的基本结构(五...

    原标题:Python面试常见问题,涉及Python各个方面

    爬虫面试常见问题

    一、项目问题:

    1.你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的

    2.用的什么框架。为什么选择这个框架

    二、框架问题:

    1.scrapy的基本结构(五个部分都是什么,请求发出去的整个流程)

    2.scrapy的去重原理(指纹去重到底是什么原理)

    3.scrapy中间件有几种类,你用过哪些中间件

    4.scrapy中间件在哪里起的作业(面向切片编程)

    三、代理问题:

    1.为什么会用到代理

    2.代理怎么使用(具体代码, 请求在什么时候添加的代理)

    3.代理失效了怎么处理

    四、验证码处理:

    1.登陆验证码处理

    2.爬取速度过快出现的验证码处理

    3.如何用机器识别验证码

    五、模拟登陆问题:

    1.模拟登陆流程

    2.cookie如何处理

    3.如何处理网站传参加密的情况

    六、分布式:

    1.分布式原理

    2.分布式如何判断爬虫已经停止了

    3.分布式的去重原理

    七、数据存储和数据库问题:

    1.关系型数据库和非关系型数据库的区别

    2.爬下来数据你会选择什么存储方式,为什么

    3.各种数据库支持的数据类型,和特点

    八、Python基础问题:

    ps:基础问题是非常多的,因为是爬虫性质,所以抽了一些问的比较多的,总结如下:

    1.Python2与Python3的区别,如何实现python2代码迁移到Python3环境

    2.Python2和Python3的编码方式有什么差别

    3.迭代器,生成器,装饰器

    4.Python的数据类型

    九、协议问题:

    1.http协议,请求由什么组成,每个字段分别有什么用,https和http有什么差距

    2.证书问题

    3.TCP,UDP各种相关问题

    十、数据提取问题:

    1.主要使用什么样的结构化数据提取方式,可能会写一两个例子

    2.正则的使用

    3.动态加载的数据如何提取

    4.json数据如何提取

    十一、算法问题:

    算法:你们要善用Python的数据类型,对Python的数据结构深入了解

    Python web面试常见问题

    一、Python语法以及其他基础部分:

    1.可变与不可变类型

    2.浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现

    3.new与init的区别

    4.你知道几种设计模式

    5.编码与解码你了解过吗

    6.列表推导式list comprehension和生成器的优劣

    7.什么是装饰器;如果想在函数之后进行装饰,应该怎么做

    8.手写个使用装饰器实现的单例模式

    9.使用装饰器的单例和使用其他方法的单例,在后续使用中,有何区别

    10.手写:正则邮箱地址

    11.介绍下垃圾回收:引用计数/分代回收/孤立引用环

    12.多进程和多线程的区别,cpu密集型适合用什么

    13.进程通信的方式有几种

    14.介绍下协程,为何比线程快

    15.range和xrange的区别

    二、算法排序部分:

    1.手写快排;堆排;几种常用排序的算法复杂度是多少;快排平均复杂度多少,最坏情况如何优化

    2.手写:已知一个长度n的无序列表,元素均是数字,要求把所有间隔为d的组合找出来,你写的解法算法复杂度多少

    3.手写:一个列表A=[A1,A2,…,An],要求把列表中所有的组合情况打印出来;

    4.手写:用一行python写出1+2+3+…+10**8

    5.手写python:用递归的方式判断字符串是否为回文

    6.单向链表长度未知,如何判断其中是否有环

    7.单向链表如何使用快速排序算法进行排序

    7.手写:一个长度n的无序数字元素列表,如何求中位数,如何尽快的估算中位数,9).你的算法复杂度是多少;

    8.如何遍历一个内部未知的文件夹(两种树的优先遍历方式)

    三、网络基础部分:

    1.TCP/IP分别在模型的哪一层

    2.socket长连接是什么意思

    3.select和epoll你了解么,区别在哪

    4.TCP UDP区别;三次握手四次挥手讲一下

    5.TIME_WAIT过多是因为什么

    6.http一次连接的全过程:你来说下从用户发起request——到用户接收到 response

    7.http连接方式。get和post的区别,你还了解其他的方式么

    8.restful你知道么

    9.状态码你知道多少,比如200/403/404/504等等

    四、数据库部分:

    1.MySQL锁有几种;死锁是怎么产生的;为何,以及如何分区、分表;

    2.MySQL的char varchar text的区别:

    了解join么,有几种有何区别,A LEFT JOIN B,查询的结果中,B没有的那部分是如何显示的(NULL)

    3.索引类型有几种,BTree索引和hash索引的区别

    4.手写:如何对查询命令进行优化

    5.NoSQL了解么,和关系数据库的区别,redis有几种常用存储类型

    五、linux部分:

    1.讲一下你常用的Linux/git命令和作用;

    2.查看当前进程是用什么命令,除了文件相关的操作外,你平时还有什么操作命令;

    六. Django项目部分:

    都是让简单的介绍下你在公司的项目,不管是不是后端相关的,主要是要体现出你干了什么

    你在项目中遇到最难的部分是什么,你是怎么解决的;你看过django的admin源码么

    看过flask的源码么,你如何理解开源

    MVC / MTV, 缓存怎么用, 中间件是干嘛的

    CSRF是什么,django是如何避免的,XSS

    如果你来设计login,简单的说一下思路

    session和cookie的联系与区别,session为什么说是安全的

    uWSGI和Nginx的作用;返回搜狐,查看更多

    责任编辑:

    展开全文
  • Python面试常见问题

    2018-08-31 16:44:55
    爬虫面试常见问题 一.项目问题: 你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的 用的什么框架。为什么选择这个框架 二.框架问题: scrapy的基本结构(五个部分都是什么,请求发出去的整个...

    爬虫面试常见问题

    一.项目问题:

    1. 你写爬虫的时候都遇到过什么反爬虫措施,你是怎样解决的

    2. 用的什么框架。为什么选择这个框架

    二.框架问题:

    1. scrapy的基本结构(五个部分都是什么,请求发出去的整个流程)

    2. scrapy的去重原理(指纹去重到底是什么原理)

    3. scrapy中间件有几种类,你用过哪些中间件

    4. scrapy中间件在哪里起的作业(面向切片编程)

    三.代理问题:

    1. 为什么会用到代理

    2. 代理怎么使用(具体代码, 请求在什么时候添加的代理)

    3. 代理失效了怎么处理

    四.验证码处理:

    1. 登陆验证码处理

    2. 爬取速度过快出现的验证码处理

    3. 如何用机器识别验证码

    五.模拟登陆问题:

    1. 模拟登陆流程

    2. cookie如何处理

    3. 如何处理网站传参加密的情况

    六.分布式:

    1. 分布式原理

    2. 分布式如何判断爬虫已经停止了

    3. 分布式的去重原理

    七.数据存储和数据库问题:

    1. 关系型数据库和非关系型数据库的区别

    2. 爬下来数据你会选择什么存储方式,为什么

    3. 各种数据库支持的数据类型,和特点

      是否支持事务...

    八.Python基础问题:

    基础问题非常多,但是因为爬虫性质,还是有些问的比较多的,下面总结:

    1. Python2和Python3的区别,如何实现python2代码迁移到Python3环境

    2. Python2和Python3的编码方式有什么差别

    3. 迭代器,生成器,装饰器

    4. Python的数据类型

    九.协议问题:

    1. http协议,请求由什么组成,每个字段分别有什么用,https和http有什么差距

    2. 证书问题

    3. TCP,UDP各种相关问题

    十.数据提取问题:

    1. 主要使用什么样的结构化数据提取方式,可能会写一两个例子

    2. 正则的使用

    3. 动态加载的数据如何提取

    4. json数据如何提取

    十一.算法问题:

    算法:你们要善用Python的数据类型,对Python的数据结构深入了解

    Python WEB面试常见问题

    一. python语法以及其他基础部分:

    1. 可变与不可变类型
    2. 浅拷贝与深拷贝的实现方式、区别;deepcopy如果你来设计,如何实现
    3. new() 与 init()的区别
    4. 你知道几种设计模式
    5. 编码和解码你了解过么
    6. 列表推导list comprehension和生成器的优劣
    7. 什么是装饰器;如果想在函数之后进行装饰,应该怎么做
    8. 手写个使用装饰器实现的单例模式
    9. 使用装饰器的单例和使用其他方法的单例,在后续使用中,有何区别
    10. 手写:正则邮箱地址
    11. 介绍下垃圾回收:引用计数/分代回收/孤立引用环
    12. 多进程与多线程的区别,CPU密集型适合用什么
    13. 进程通信的方式有几种
    14. 介绍下协程,为何比线程还快
    15. range和xrange的区别

    二. 算法排序部分:

    1. 手写快排;堆排;几种常用排序的算法复杂度是多少;快排平均复杂度多少,最坏情况如何优化
    2. 手写:已知一个长度n的无序列表,元素均是数字,要求把所有间隔为d的组合找出来,你写的解法算法复杂度多少
    3. 手写:一个列表A=[A1,A2,…,An],要求把列表中所有的组合情况打印出来;
    4. 手写:用一行python写出1+2+3+…+10**8
    5. 手写python:用递归的方式判断字符串是否为回文
    6. 单向链表长度未知,如何判断其中是否有环
    7. 单向链表如何使用快速排序算法进行排序
    8. 手写:一个长度n的无序数字元素列表,如何求中位数,如何尽快的估算中位数,9).你的算法复杂度是多少;
    9. 如何遍历一个内部未知的文件夹(两种树的优先遍历方式)

    三. 网络基础部分:

    1. TCP/IP分别在模型的哪一层
    2. socket长连接是什么意思
    3. select和epoll你了解么,区别在哪
    4. TCP UDP区别;三次握手四次挥手讲一下
    5. TIME_WAIT过多是因为什么
    6. http一次连接的全过程:你来说下从用户发起request——到用户接收到 response
    7. http连接方式。get和post的区别,你还了解其他的方式么
    8. restful你知道么
    9. 状态码你知道多少,比如200/403/404/504等等

    四. 数据库部分:

    1. MySQL锁有几种;死锁是怎么产生的; 为何,以及如何分区、分表;
    2. MySQL的char varchar text的区别:
      了解join么,有几种有何区别,A LEFT JOIN B,查询的结果中,B没有的那部分是如何显示的(NULL)
    3. 索引类型有几种,BTree索引和hash索引的区别
    4. 手写:如何对查询命令进行优化
    5. NoSQL了解么,和关系数据库的区别,redis有几种常用存储类型

    五. Linux部分:

    讲一下你常用的Linux/git命令和作用;

    查看当前进程是用什么命令,除了文件相关的操作外,你平时还有什么操作命令;

    六. Django项目部分:

    都是让简单的介绍下你在公司的项目,不管是不是后端相关的,主要是要体现出你干了什么

    1. 你在项目中遇到最难的部分是什么,你是怎么解决的; 你看过django的admin源码么
    2. 看过flask的源码么,你如何理解开源
    3. MVC / MTV, 缓存怎么用, 中间件是干嘛的
    4. CSRF是什么,django是如何避免的,XSS
    5. 如果你来设计login,简单的说一下思路
    6. session和cookie的联系与区别,session为什么说是安全的
    7. uWSGI和Nginx的作用;

    每个公司各有特点,但是这些算是基础,也是常见问题。

    更多Python视频、源码、资料加群683380553免费获取

    展开全文
  • Python面试常见问题汇总集锦(含爬虫工程师面试考点)
  • 达内北京Python培训机构为大家总结下python面试题汇总,送给有需要的人!第一家公司问的题目1 简述解释型和编译型编程语言?解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器...

    达内北京Python培训机构为大家总结下python面试题汇总,送给有需要的人!

    第一家公司问的题目

    1 简述解释型和编译型编程语言?

    解释型语言编写的程序不需要编译,在执行的时候,专门有一个解释器能够将VB语言翻译成机器语言,每个语句都是执行的时候才翻译。这样解释型语言每执行一次就要翻译一次,效率比较低。

    用编译型语言写的程序执行之前,需要一个专门的编译过程,通过编译系统,把源高级程序编译成为机器语言文件,翻译只做了一次,运行时不需要翻译,所以编译型语言的程序执行效率高,但也不能一概而论,

    部分解释型语言的解释器通过在运行时动态优化代码,甚至能够使解释型语言的性能超过编译型语言。

    2 Python解释器种类以及特点?

    CPython

    当 从Python官方网站下载并安装好Python2.7后,就直接获得了一个官方版本的解释器:Cpython,这个解释器是用C语言开发的,所以叫

    CPython,在命名行下运行python,就是启动CPython解释器,CPython是使用最广的Python解释器。

    IPython

    IPython是基于CPython之上的一个交互式解释器,也就是说,IPython只是在交互方式上有所增强,但是执行Python代码的功能和CPython是完全一样的,好比很多国产浏览器虽然外观不同,但内核其实是调用了IE。

    PyPy

    PyPy是另一个Python解释器,它的目标是执行速度,PyPy采用JIT技术,对Python代码进行动态编译,所以可以显著提高Python代码的执行速度。

    Jython

    Jython是运行在Java平台上的Python解释器,可以直接把Python代码编译成Java字节码执行。

    IronPython

    IronPython和Jython类似,只不过IronPython是运行在微软.Net平台上的Python解释器,可以直接把Python代码编译成.Net的字节码。

    在Python的解释器中,使用广泛的是CPython,对于Python的编译,除了可以采用以上解释器进行编译外,技术高超的开发者还可以按照自己的需求自行编写Python解释器来执行Python代码,十分的方便!

    3 位和字节的关系?

    bit就是位,也叫比特位,是计算机表示数据最小的单位

    byte就是字节

    1byte=8bit

    1byte就是1B

    一个字符=2字节

    1KB=1024B

    字节就是Byte,也是B

    位就是bit也是b

    转换关系如下:1)1KB=1024B

    1B= 8b

    4 请至少列举5个 PEP8 规范(越多越好)。

    PEP8 编码规范

    a.不要在行尾加分号, 也不要用分号将两条命令放在同一行。

    b.每行不超过80个字符(长的导入模块语句和注释里的URL除外)

    c.不要使用反斜杠连接行。Python会将圆括号, 中括号和花括号中的行隐式的连接起来

    d.宁缺毋滥的使用括号,除非是用于实现行连接, 否则不要在返回语句或条件语句中使用括号. 不过在元组两边使用括号是可以的.

    e.用4个空格来缩进代码,不要用tab, 也不要tab和空格混用. 对于行连接的情况,

    你应该要么垂直对齐换行的元素,或者使用4空格的悬挂式缩进

    f.顶级定义之间空2行, 方法定义之间空1行,顶级定义之间空两行, 比如函数或者类定义. 方法定义, 类定义与第一个方法之间, 都应该空一行.

    函数或方法中, 某些地方要是你觉得合适, 就空一行.

    5 通过代码实现如下转换:

    二进制转换成十进制:v = “0b1111011”

    #先将其转换为字符串,再使用int函数,指定进制转换为十进制。

    print(int("0b1111011",2))

    值为123

    十进制转换成二进制:v = 18

    print("转换为二进制为:", bin(18))

    #转换为二进制为:0b10010

    八进制转换成十进制:v = “011”

    print(int("011",8))

    #9

    十进制转换成八进制:v = 30

    print("转换为八进制为:", oct(30))

    #转换为八进制为:0o36

    十六进制转换成十进制:v = “0x12”

    print(int("0x12",16))

    #18

    十进制转换成十六进制:v = 87

    print("转换为十六进制为:", hex(87))

    转换为十六进制为: 0x57

    6 python递归的最大层数?

    def fab(n):

    if n == 1:

    return 1

    else:

    return fab(n-1)+ n

    print (fab(998))

    #得到的最大数为998,以后就是报错了,998这个数值莫名想起广告词····

    import sys

    sys.setrecursionlimit(100000)

    def foo(n):

    print(n)

    n += 1

    foo(n)

    if __name__ == '__main__':

    foo(1)

    #得到的最大数字在3922-3929之间浮动,这个是和计算机有关系的,将数字调到足够大了,已经大于系统堆栈,python已经无法支撑到太大的递归崩了。

    7 ascii、unicode、utf-8、gbk 区别?

    最早只有127个字母被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。

    但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。

    你可以想得到的是,全世界有上百种语言,日本把日文编到Shift_JIS里,韩国把韩文编到Euc-kr里,各国有各国的标准,就会不可避免地出现冲突,结果就是,在多语言混合的文本中,显示出来会有乱码。

    因此,Unicode应运而生。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。

    Unicode标准也在不断发展,但最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。

    新的问题又出现了:如果统一成Unicode编码,乱码问题从此消失了。但是,如果你写的文本基本上全部是英文的话,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。

    所以,本着节约的精神,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。如果你要传输的文本包含大量英文字符,用UTF-8编码就能节省空间。

    UTF-8编码有一个额外的好处,就是ASCII编码实际上可以被看成是UTF-8编码的一部分,所以,大量只支持ASCII编码的历史遗留软件可以在UTF-8编码下继续工作。

    8 字节码和机器码的区别?

    机器码(machine code),学名机器语言指令,有时也被称为原生码(Native Code),是电脑的CPU可直接解读的数据。

    通常意义上来理解的话,机器码就是计算机可以直接执行,并且执行速度最快的代码。

    用机器语言编写程序,编程人员要首先熟记所用计算机的全部指令代码和代码的涵义。手编程序时,程序员得自己处理每条指令和每一数据的存储分配和输入输出,还得记住编程过程中每步所使用的工作单元处在何种状态。这是一件十分繁琐的工作,编写程序花费的时间往往是实际运行时间的几十倍或几百倍。而且,编出的程序全是些0和1的指令代码,直观性差,还容易出错。现在,除了计算机生产厂家的专业人员外,绝大多数的程序员已经不再去学习机器语言了。

    机器语言是微处理器理解和使用的,用于控制它的操作二进制代码。

    8086到Pentium的机器语言指令长度可以从1字节到13字节。

    尽管机器语言好像是很复杂的,然而它是有规律的。

    存在着多至100000种机器语言的指令。这意味着不能把这些种类全部列出来。

    总结:机器码是电脑CPU直接读取运行的机器指令,运行速度最快,但是非常晦涩难懂,也比较难编写,一般从业人员接触不到。

    字节码(Bytecode)是一种包含执行程序、由一序列 op 代码/数据对

    组成的二进制文件。字节码是一种中间码,它比机器码更抽象,需要直译器转译后才能成为机器码的中间代码。

    通常情况下它是已经经过编译,但与特定机器码无关。字节码通常不像源码一样可以让人阅读,而是编码后的数值常量、引用、指令等构成的序列。

    字节码主要为了实现特定软件运行和软件环境、与硬件环境无关。字节码的实现方式是通过编译器和虚拟机器。编译器将源码编译成字节码,特定平台上的虚拟机器将字节码转译为可以直接执行的指令。字节码的典型应用为Java

    bytecode。

    字节码在运行时通过JVM(JAVA虚拟机)做一次转换生成机器指令,因此能够更好的跨平台运行。

    达内北京Python培训机构总结:字节码是一种中间状态(中间码)的二进制代码(文件)。需要直译器转译后才能成为机器码。

    9 三元运算规则以及应用场景?

    表达式格式

    为真时的结果 if 判定条件 else 为假时的结果

    事例

    1 if 3>2 else 0

    10 用一行代码实现数值交换:

    a =1

    b =2

    a,b=b,a

    print(a,b)

    达内Python 0基础免费训练营,共4天(可插班学)。全国45个城市200个校区就近试听,也可在线试听。

    展开全文
  • Q 1:Python有哪些特点和优点?作为一门编程入门语言,Python主要有以下特点和优点:可解释具有动态特性面向对象简明简单开源具有强大的社区支持Q 2. 在Python中如何实现多线程?Python并不支持真正意义上的多线程,...

    Q 1:Python有哪些特点和优点?

    作为一门编程入门语言,Python主要有以下特点和优点:

    可解释

    具有动态特性

    面向对象

    简明简单

    开源

    具有强大的社区支持

    Q 2. 在Python中如何实现多线程?

    Python并不支持真正意义上的多线程,一个线程就是一个轻量级进程,多线程能让我们一次执行多个线程。我们都知道,Python是多线程语言,其内置有多线程工具包。

    Python中的GIL(全局解释器锁)确保一次执行单个线程。一个线程保存GIL并在将其传递给下个线程之前执行一些操作,这会让我们产生并行运行的错觉。但实际上,只是线程在CPU上轮流运行。当然,所有的传递会增加程序执行的内存压力。

    Q 3. 解释一下Python中的继承

    当一个类继承自另一个类,它就被称为一个子类/派生类,继承自父类/基类/超类。它会继承/获取所有类成员(属性和方法)。

    继承能让我们重新使用代码,也能更容易的创建和维护应用。Python支持如下种类的继承:

    单继承:一个类继承自单个基类

    多继承:一个类继承自多个基类

    多级继承:一个类继承自单个基类,而这个单基类继承自另一个基类

    分层继承:多个类继承自单个基类

    混合继承:两种或多种类型继承的混合

    Q 4. 什么是Flask?

    Flask是Python编写的一款轻量级Web应用框架。其 WSGI(Web Server Gateway Interface) 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2。Flask使用 BSD (是Unix的衍生系统)授权。其中两个环境依赖是Werkzeug和jinja2,这意味着它不需要依赖外部库。正因如此,我们将其称为轻量级框架。

    Q 5. Web应用的本质?

    1.  浏览器发送一个HTTP请求;

    2. 服务器收到请求,生成一个HTML文档;

    3. 服务器把HTML文档作为HTTP响应的Body发送给浏览器;

    4. 浏览器收到HTTP响应,从HTTP Body取出HTML文档并显示。

    Q 6. 在Python中是如何管理内存的?

    Python有一个私有堆空间来保存所有的对象和数据结构。作为开发者,我们无法访问它,是解释器在管理它。但是有了核心API后,我们可以访问一些工具。Python内存管理器控制内存分配。

    另外,内置垃圾回收器会回收使用所有的未使用内存,所以使其适用于堆空间

    Q 7. 解释Python中的help()和dir()函数

    Help()函数是一个内置函数,用于查看函数或模块用途的详细说明:

    Dir()函数也是Python内置函数,dir() 函数不带参数时,返回当前范围内的变量、方法和定义的类型列表;带参数时,返回参数的属性、方法列表。

    Q 8. 当退出Python时,是否释放全部内存?

    答案是No。循环引用其它对象或引用自全局命名空间的对象的模块,在Python退出时并非完全释放。

    另外,也不会释放C库保留的内存部分。

    Q 9. 什么是猴子补丁?

    在运行期间动态修改一个类或模块

    5ac9c50b56a2

    Q 10. 什么是负索引?

    负索引和正索引不同,它是从右边开始检索。

    Q 11. Python中的闭包是什么?

    当一个嵌套函数在其外部区域引用了一个值时,并有返回值,该嵌套函数就是一个闭包。

    Q 12. 在Python中有多少种运算符?解释一下算数运算符。

    在Python中,我们有7种运算符:

    算术运算符(+ - / // % *)、

    关系运算符(> < = >= <=)、

    赋值运算符(+= -=)、

    逻辑运算符(and  or  not)、

    位运算符(& | ^ ~)、

    成员运算符(in not in)、

    身份运算符(is not is)

    Q 13. 元组的解封装是什么?

    将 3,4,5 封装到元组 mytuple 中>>> mytuple=3,4,5

    将这些值解封装到变量 x,y,z 中:>>> x,y,z=mytuple

    Q 14.  说明os,sys模块不同,并列举常用的模块方法?

    os模块负责程序与操作系统的交互,提供了访问操作系统底层的接口。

    os.remove删除    os.rename重新命名  os.mkdir 创建目录  os.remkdir 删除目录

    sys模块负责程序与Python解释器的交互,提供了一系列的函数和变量用户操作Python运行时的环境。

    sys. exit(n),0 是正常退出,其他都是异常退出,可以捕获。

    sys. path

    sys.path.append

    Q 15. __new__和__init__的区别。

    new是一个静态方法,是在实例创建之前被调用的;而init是一个实例方法,是当实例对象创建完成后被调用的。

    new方法会返回一个创建的实例,而init什么都不返回.

    只有在new返回一个cls的实例时后面的init才能被调用.

    Q 16.说一说Python自省。

    运行时能够获得对象的类型。比如:type()、dir()、getattr()、hasattr()、isinstance()

    Q 17 . python中生成随机整数、随机小数、0--1之间小数方法

    随机整数:random.randint(a,b),生成区间内的整数

    随机小数:习惯用numpy库,利用np.random.randn(5)生成5个随机小数

    0-1随机小数:random.random(),括号中不传参

    Q 18 . 一行代码实现1--100之和

    sum(range(0,101))

    Q 19 . python2和python3的的区别

    1.  range():python2返回列表,python3返回迭代器,节约内存

    2.  input/raw_input:

    在python2中,input返回是数值列表,raw_input返回的是字符串

    在Python3中,只有input,返回的是字符串

    Q 20 . 一句话解释什么样的语言能够用装饰器?

    函数可以作为参数传递的语言,可以使用装饰器

    Q 21. python中断言方法举例

    assert()方法,断言成功,则程序继续执行,断言失败,则程序报错

    Q 22 . 10个Linux常用命令

    ls  pwd  cd  vi  rm  mkdir  tree  cp  mv  cat  more  grep  shutdown

    Q 23 . 用python删除文件和用linux命令删除文件方法

    python:os.remove(文件名)

    linux:       rm  文件名

    Q 24 . 请列出你会的任意一种统计图(条形图、折线图等)绘制的开源库,第三方也行

    pychart

    Q 25 . 简述Django的orm

    ORM,全拼Object-Relation Mapping,意为对象-关系映射。实现了数据模型与数据库的解耦,通过简单的配置就可以轻松更换数据库,而不需要修改代码只需要面向对象编程,orm操作本质上会根据对接的数据库引擎,翻译成对应的sql语句,所有使用Django开发的项目无需关心程序底层使用的是MySQL、Oracle、sqlite....,如果数据库迁移,只需要更换Django的数据库引擎即可

    Q 26 . 提高python运行效率的方法

    1、使用生成器,因为可以节约大量内存

    2、循环代码优化,避免过多重复代码的执行

    3、核心模块用Cython  PyPy等,提高效率

    4、多进程、多线程、协程

    5、多个if elif条件判断,可以把最有可能先发生的条件放到前面写,这样可以减少程序判断的次数,提高效率

    Q 27 . 遇到bug如何处理

    1、细节上的错误,通过print()打印,能执行到print()说明一般上面的代码没有问题,分段检测程序是否有问题,如果是js的话可以alert或console.log

    2、如果涉及一些第三方框架,会去查官方文档或者一些技术博客。

    3、对于bug的管理与归类总结,一般测试将测试出的bug用teambin等bug管理工具进行记录,然后我们会一条一条进行修改,修改的过程也是理解业务逻辑和提高自己编程逻辑缜密性的方法,我也都会收藏做一些笔记记录。

    4、导包问题、城市定位多音字造成的显示错误问题

    Q 28 . 列出常见的状态码和意义

    200 OK

    请求正常处理完毕

    202

    请求被接受,但处理尚未完成 处理方式:阻塞等待

    204 No Content

    请求成功处理,没有实体的主体返回

    206 Partial Content

    GET范围请求已成功处理

    400 Bad Request

    请求报文语法错误或参数错误

    401 Unauthorized

    需要通过HTTP认证,或认证失败

    403 Forbidden

    请求资源被拒绝

    404 Not Found

    无法找到请求资源(服务器无理由拒绝)

    500 Internal Server Error

    服务器故障或Web应用故障

    503 Service Unavailable

    服务器超负载或停机维护

    505

    http版本不支持

    Q 29 . 分别从前端、后端、数据库阐述web项目的性能优化

    前端优化:

    1、减少http请求、例如制作精灵图

    2、html和CSS放在页面上部,javascript放在页面下面,因为js加载比HTML和Css加载慢,所以要优先加载html和css,以防页面显示不全,性能差,也影响用户体验差

    后端优化:

    1、缓存存储读写次数高,变化少的数据,比如网站首页的信息、商品的信息等。应用程序读取数据时,一般是先从缓存中读取,如果读取不到或数据已失效,再访问磁盘数据库,并将数据再次写入缓存。

    2、异步方式,如果有耗时操作,可以采用异步,比如celery

    3、代码优化,避免循环和判断次数太多,如果多个if else判断,优先判断最有可能先发生的情况

    数据库优化:

    索引、分库分表分区、数据库引擎(一种是innodb、一种是myisam ),myisam的效率大概能够比innodb快1-2倍,mysiam适用于一次插入,多次查询的表

    Q 30 . 简述同源策略

    同源策略需要同时满足以下三点要求:

    1)协议相同

    2)域名相同

    3)端口相同

    Q 31 . 简述cookie和session的区别

    1,session 在服务器端,cookie 在客户端(浏览器)

    2、session 的运行依赖 session id,而 session id 是存在 cookie 中的,也就是说,如果浏览器禁用了 cookie ,同时 session 也会失效,存储Session时,键与Cookie中的sessionid相同,值是开发人员设置的键值对信息,进行了base64编码,过期时间由开发人员设置

    3、cookie安全性比session差

    Q 32 . 简述多线程、多进程

    进程:

    1、操作系统进行资源分配和调度的基本单位,多个进程之间相互独立

    2、稳定性好,如果一个进程崩溃,不影响其他进程,但是进程消耗资源大,开启的进程数量有限制

    线程:

    1、CPU进行资源分配和调度的基本单位,线程是进程的一部分,是比进程更小的能独立运行的基本单位,一个进程下的多个线程可以共享该进程的所有资源

    2、如果IO操作密集,则可以多线程运行效率高,缺点是如果一个线程崩溃,都会造成进程的崩溃

    应用:

    IO密集的用多线程,在用户输入,sleep 时候,可以切换到其他线程执行,减少等待的时间

    CPU密集的用多进程,因为假如IO操作少,用多线程的话,因为线程共享一个全局解释器锁,当前运行的线程会霸占GIL,其他线程没有GIL,就不能充分利用多核CPU的优势

    Q 33 . IOError、AttributeError、ImportError、IndentationError、IndexError、KeyError、SyntaxError、NameError分别代表什么异常

    IOError:输入输出异常

    AttributeError:试图访问一个对象没有的属性

    ImportError:无法引入模块或包,基本是路径问题

    IndentationError:语法错误,代码没有正确的对齐

    IndexError:下标索引超出序列边界

    KeyError:试图访问你字典里不存在的键

    SyntaxError:Python代码逻辑语法出错,不能执行

    NameError:使用一个还未赋予对象的变量

    Q 34 . 列举3条以上PEP8编码规范

    1、顶级定义之间空两行,比如函数或者类定义。

    2、方法定义、类定义与第一个方法之间,都应该空一行

    3、三引号进行注释

    4、使用Pycharm、Eclipse一般使用4个空格来缩进代码

    Q 35 . Linux命令重定向 > 和 >>

    Linux 允许将命令执行结果 重定向到一个 文件

    将本应显示在终端上的内容 输出/追加 到指定文件中

    > 表示输出,会覆盖文件原有的内容

    >> 表示追加,会将内容追加到已有文件的末尾

    用法示例:

    将 echo 输出的信息保存到 1.txt 里echo Hello Python > 1.txt

    将 tree 输出的信息追加到 1.txt 文件的末尾tree >> 1.txt

    Q 36. 常见的网络传输协议

    UDP(User Datagram Protocol的简称, 中文名是用户数据报协议)、

    TCP(Transmission Control Protocol传输控制协议)、

    FTP(File Transfer Protocol,文件传输协议)、

    HTTP(HyperText Transfer Protocol,超文本传输协议)、

    SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)

    Q 36. 介绍一下Python中webbrowser的用法?

    webbrowser模块提供了一个高级接口来显示基于Web的文档,大部分情况下只需要简单的调用open()方法。

    webbrowser定义了如下的异常:

    exception webbrowser.Error, 当浏览器控件发生错误是会抛出这个异常

    webbrowser有以下方法:

    webbrowser.open(url[, new=0[, autoraise=1]])

    这个方法是在默认的浏览器中显示url, 如果new = 0, 那么url会在同一个浏览器窗口下打开,如果new = 1, 会打开一个新的窗口,如果new = 2, 会打开一个新的tab, 如果autoraise = true, 窗口会自动增长。

    webbrowser.open_new(url)

    在默认浏览器中打开一个新的窗口来显示url, 否则,在仅有的浏览器窗口中打开url

    webbrowser.open_new_tab(url)

    在默认浏览器中当开一个新的tab来显示url, 否则跟open_new()一样

    webbrowser.get([name]) 根据name返回一个浏览器对象,如果name为空,则返回默认的浏览器

    webbrowser.register(name, construtor[, instance])

    注册一个名字为name的浏览器,如果这个浏览器类型被注册就可以用get()方法来获取。

    37.  dir(builtins)是什么意思

    查看系统的内置函数

    展开全文
  • 在本文中,我们总结了Python面试中最常见的100个问题。每道题都提供参考答案,希望能够帮助你在2019年求职面试中脱颖而出,找到一份高薪工作。这100道面试题涉及Python基础知识、Python编程、数据分析以及Python函数...
  • 1)什么是Python?使用Python有什么好处?Python是一种编程语言,包含对象,模块,线程,异常和自动内存管理。Python的好处在于它简单易用,可移植,可扩展,内置数据结构,并且它是一个开源的。2)什么是PEP 8?PEP...
  • Python被设计成一种高可读性的语言,因为它大量地使用了英语中的单词作为关键字,而且不像其他语言使用标点符号构成复杂的语法结构,Python的语法结构非常少。Python是一种解释型语言:即Python程序是在运行时由解释...
  • 下面我收集了10个Python面试官经常问的问题,供大家参考学习。1、类继承有如下的一段代码:class A(object):def show(self):print 'base show'class B(A):def show(self):print 'derived show'ob...
  • 4. 解释Python中的三元运算子5. 在Python中如何实现多线程?6. 解释一下Python中的继承7. 什么是Flask?8. 在Python中是如何管理内存的?9. 解释Python中的help()和dir()函数10. 当退出Python时,是否释放全部内存?...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 655
精华内容 262
关键字:

python面试常见问题

python 订阅