python开发面试刷题指南

2023-11-05

1. 装饰器 

        详解Python的装饰器

        装饰器的作用就是给原有函数或对象添加额外的功能。 不需要变动原有代码,用于有切面需求的场景,如插入日志/性能测试等产经。返回值是一个函数对象。

       优点:抽离出函数功能本身无关的雷同代码,可以重用。

       缺点:经过装饰器修饰的函数,函数名等内置属性会丢失;

       方法: functools.update_wrapper

2.生成器和迭代器的区别   

  • 迭代器:Python中一个实现_iter_方法和_next_方法的类对象,就是迭代器。
  • 生成器:本质上是动态生成迭代的值,使用完直接丢弃,可以有效节省内存空间,但这些值只能被迭代一次。
  • 迭代器就是用于迭代操作的的对象,遵从迭代协议(内部实现了__iter__()和__next__()方法,可以像列表(可迭代对象,只有__iter__()方法)一样迭代获取其中的值,与列表不同的是,构建迭代器的时候,不像列表一样一次性把数据加到内存,而是以一种延迟计算的方式返回元素,即调用next方法时候返回此值。

    生成器本质上也是一个迭代器,自己实现了可迭代协议,与生成器不同的是生成器的实现方式不同,可以通过生成器表达式和生成器函数两种方式实现,代码更简洁。生成器和迭代器都是惰性可迭代对象,只能遍历一次,数据取完抛出Stopiteration异常

2. python闭包

        当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包。(一个函数定义中引用了函数外定义的变量,并且该函数可以在其定义环境外被执行。这样的一个函数我们称之为闭包。)

  •  闭包中的引用的自由变量只和具体的闭包有关联,闭包的每个实例引用的自由变量互不干扰。
  •  一个闭包实例对其自由变量的修改会被传递到下一次该闭包实例的调用。

        闭包存在有什么意义呢?为什么需要闭包?

        我个人认为,闭包存在的意义就是它夹带了外部变量(私货),如果它不夹带私货,它和普通的函数就没有任何区别。同一个的函数夹带了不同的私货,就实现了不同的功能。其实你也可以这么理解,闭包和面向接口编程的概念很像,可以把闭包理解成轻量级的接口封装。

说说Python中的闭包

理解Python闭包概念

3. python多线程与多进程及其区别

python多线程与多进程及其区别

--->     进程线程面试题总结

进程和线程的主要区别(总结)

根本区别:进程是资源分配的基本单位,而线程是任务调度和执行的基本单位

在开销方面:进程间切换开销比较大,线程之间切换开销比较小。 具体开销

所处环境:在操作系统中能同时运行多个进程;在同一个进程中有多个线程同时执行(通过CPU调度,在每个时间片中只有一个线程执行)

内存分配方面:系统在运行的时候会为每个进程分配不同的内存空间;而对线程而言,除了CPU外,系统不会为线程分配内存(线程所使用的资源来自其所属进程的资源),线程组之间只能共享资源。

包含关系:一个进程中最少有一个线程。

为什么线程切换比进程切换代价小? 原因

4. pytest

        unittest 和 pytest 都是单元测试框架。单元测试指的是在编程过程当中形成的对函数或者是类下面的方法进行测试的一个过程。

        作用:使用单元测试框架,可以极大的简化我们对单元测试的过程,使用单元测试框架以后,框架会帮我们自动去收集用例、运行用例、生成报告。

例行用了以后呢,在命令行当中会显示4个部分的内容:

  • 第1个部分,测试用例和通过的结果,

  • 第2个部分,失败用例回溯信息,

  • 第3个部分,输出捕获信息,

  • 第4个部分,总结信息。

pytest 当中的测试报告,通常是以插件的形式生成的,如果你想生成一个html格式的测试报告,可以先安装 pytest-html 这个插件。

5. is和==的区别

Is

比较的是两个对象的id值是否相等,也就是比较俩对象是否为同一个实例对象,是否指向同一个内存地址。

==

比较的是两个对象的内容是否相等,默认会调用对象的__eq__()方法。

Python基础:is和==的区别

6. 编译型语言和解释型语言的差异

类型 原理 优点 缺点
编译型语言 通过专门的编译器,将所有源代码一次性转换成特定平台(Windows、Linux 等)执行的机器码(以可执行文件的形式存在)。 编译一次后,脱离了编译器也可以运行,并且运行效率高。 可移植性差,不够灵活。
解释型语言 由专门的解释器,根据需要将部分源代码临时转换成特定平台的机器码。 跨平台性好,通过不同的解释器,将相同的源代码解释成不同平台下的机器码。 一边执行一边转换,效率很低。

7. 爬虫常见面试

爬虫常见面试

8.python基础编程

python基础编程

9.sort 与sorted的区别

sort()与sorted()的不同在于,sort是在原位重新排列列表,而sorted()是产生一个新的列表。

sort 是应用在 list 上的方法,sorted 可以对所有可迭代的对象进行排序操作。

List的成员函数sort, sorted():内置函数

时间复杂度:详情

Timsort是python的标准排序方法,同时也是sort与sorted的内部实现的原理。
时间复杂度最优 (n),最差 (n log n) ,空间复杂度为 O(n)。

10. 数据库的隔离级别

        事务:要么全部执行成功,要么全部失败

        隔离性:多事务同时执行,之间互相不干扰,相互隔离。

        持久性: 数据落地磁盘或文件。

        原子性:要么执行全部成功,要么全部失败。

        一致性:事务执行前后处于一致性状态。

        没有隔离后果:

        脏读:读到了没有提交的数据:一个事务数据还在处理中就被读到了。(未提交)

        非重复读:一个事务多次查询,查到的结果不同。(查询过程中被另一个事务修改提交)

        幻读:第二次查出来第一次没有的结果。幻读针对的是一批数据整体(比如数据的个数)

        隔离级别:

        读未提交:这是并发最高,一致性最差的隔离级别。

        读已提交:只读已提交的数据,避免 脏读

        可重复读:加行锁,MySql默认隔离级别,可避免 脏读 不可重复读 的发生。多版本并发控制(mvcc)

        串行化: 加表锁,全可以避免。

11.其他

python面试宝典

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

python开发面试刷题指南 的相关文章