Python面试宝典(第三章 Python高级)

Python面试宝典(第三章 Python高级)

  • Python面试宝典(第三章 Python高级)
    • 元类
      • 问题:Python 中类方法、类实例方法、静态方法有何区别?
      • 问题:Python 中如何动态获取和设置对象的属性?
    • 内存管理与垃圾回收机制
      • 问题:Python 的内存管理机制及调优手段?
      • 问题:内存泄露是什么?如何避免?
    • 函数
      • 函数参数
        • 问题:Python 函数调用的时候参数的传递方式是值传递还是引用传递?
        • 问题:对缺省参数的理解 ?
        • 问题:为什么函数名字可以当做参数用?
        • 问题:Python 中 pass 语句的作用是什么?
        • 问题:有这样一段代码,print c 会输出什么,为什么?
        • 问题:交换两个变量的值?
      • 内建函数
        • 问题:map 函数和 reduce 函数?
        • 问题:递归函数停止的条件?
        • 问题:回调函数,如何通信的?
        • 问题:Python 主要的内置数据类型都有哪些? print dir( ‘a ’) 的输出?
        • 问题:print(list(map(lambda x: x * x, [y for y in range(3)])))的输出?
        • 问题:hasattr() getattr() setattr() 函数使用详解?
      • Lambda
        • 问题:什么是 lambda 函数? 有什么好处?
        • 问题:什么是 lambda 函数?它有什么好处?写一个匿名函数求两个数的和?
        • 问题:下面这段代码的输出结果将是什么?请解释。
    • 设计模式
      • 单例
        • 问题:请手写一个单例
        • 问题:单例模式的应用场景有哪些?
      • 工厂
      • 装饰器
        • 问题:对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器?
        • 问题:解释一下什么是闭包?
        • 问题:函数装饰器有什么作用?
      • 生成器
        • 问题:生成器、迭代器的区别?
        • 问题:X 是什么类型?
        • 问题:请尝试用“一行代码”实现将 1-N 的整数列表以 3 为单位分组,比如 1-100 分组后为?
        • 问题:Python 中 yield 的用法?
    • 面向对象
      • 类与对象
        • 问题:Python 中的可变对象和不可变对象?
        • 问题:Python 中 is 和==的区别?
        • 问题:Python 的魔法方法
        • 问题:面向对象中怎么实现只读属性?
        • 问题:谈谈你对面向对象的理解?
    • 正则表达式
      • 问题:Python里match与search的区别?
        • 问题:请写出下列正则关键字的含义?
    • 系统编程
      • 问题:进程总结
      • 问题:谈谈你对多进程,多线程,以及协程的理解,项目是否用?
        • 问题:什么是多线程竞争?
        • 问题:解释一下什么是锁,有哪几种锁?
        • 问题:什么是死锁呢?
        • 问题:什么是线程安全,什么是互斥锁?
        • 问题:说说下面几个概念:同步,异步,阻塞,非阻塞?
        • 问题:什么是僵尸进程和孤儿进程?怎么避免僵尸进程?
        • 问题:Python 中的进程与线程的使用场景?
        • 问题:线程是并发还是并行,进程是并发还是并行?
        • 问题:并行(parallel)和并发(concurrency)?
        • 问题:IO 密集型和 CPU 密集型区别?
    • 网络编程
      • UDP总结
      • TCP 总结
      • 问题:怎么实现强行关闭客户端和服务器之间的连接?
      • 问题:简述 TCP 和 UDP 的区别以及优缺点?
      • 问题:简述浏览器通过 WSGI 请求动态资源的过程?
      • 问题:描述用浏览器访问 www.baidu.com 的过程
      • 问题:Post 和 Get 请求的区别?
      • 问题:cookie 和 session 的区别?
      • HTTP 协议状态码有什么用,列出你知道的 HTTP 协议的状态码,然后讲出他们都 表示什么意思?
        • 问题:请简单说一下三次握手和四次挥手?
        • 问题:说一下什么是 tcp 的 2MSL?
      • 问题:为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?
      • 问题:说说 HTTP 和 HTTPS 区别?
      • 问题:谈一下 HTTP 协议以及协议头部中表示数据类型的字段?
      • 问题:HTTP 请求方法都有什么?
      • 问题:使用 Socket 套接字需要传入哪些参数 ?
        • 问题:HTTP 常见请求头?
      • 问题:七层模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分别在哪层?
      • 问题:url 的形式?

Python面试宝典(第三章 Python高级)

元类

问题:Python 中类方法、类实例方法、静态方法有何区别?

Python面试宝典(第三章 Python高级)_第1张图片

问题:Python 中如何动态获取和设置对象的属性?

在这里插入图片描述

内存管理与垃圾回收机制

问题:Python 的内存管理机制及调优手段?

Python面试宝典(第三章 Python高级)_第2张图片
Python面试宝典(第三章 Python高级)_第3张图片
Python面试宝典(第三章 Python高级)_第4张图片
内存池:

  1. Python 的内存机制呈现金字塔形状,-1,-2 层主要有操作系统进行操作;

  2. 第 0 层是 C 中的 malloc,free 等内存分配和释放函数进行操作;

  3. 第 1 层和第 2 层是内存池,有 Python 的接口函数 PyMem_Malloc 函数实现,当对象小于
    256K 时有该层直接分配内存;

  4. 第 3 层是最上层,也就是我们对 Python 对象的直接操作;
    Python 在运行期间会大量地执行 malloc 和 free 的操作,频繁地在用户态和核心态之间进行切换,这将严重影响 Python 的执行效率。为了加速 Python 的执行效率,Python 引入了一个内存池 机制,用于管理对小块内存的申请和释放。

Python 内部默认的小块内存与大块内存的分界点定在 256 个字节,当申请的内存小于 256 字节 时,PyObject_Malloc 会在内存池中申请内存;当申请的内存大于 256 字节时,PyObject_Malloc 的 行为将蜕化为 malloc 的行为。当然,通过修改 Python 源代码,我们可以改变这个默认值,从而改 变 Python 的默认内存管理行为。

调优手段(了解)
1.手动垃圾回收

2.调高垃圾回收阈值

3.避免循环引用(手动解循环引用和使用弱引用)

问题:内存泄露是什么?如何避免?

Python面试宝典(第三章 Python高级)_第5张图片

函数

函数参数

问题:Python 函数调用的时候参数的传递方式是值传递还是引用传递?

Python 的参数传递有:位置参数、默认参数、可变参数、关键字参数。
函数的传值到底是值传递还是引用传递,要分情况:

不可变参数用值传递:
像整数和字符串这样的不可变对象,是通过拷贝进行传递的,因为你无论如何都不可能在原处改变不可变对象

可变参数是引用传递的:
比如像列表,字典这样的对象是通过引用传递、和 C 语言里面的用指针传递数组很相似,可变对象能在函数内部改变。

问题:对缺省参数的理解 ?

Python面试宝典(第三章 Python高级)_第6张图片

问题:为什么函数名字可以当做参数用?

Python 中一切皆对象,函数名是函数在内存中的空间,也是一个对象。

问题:Python 中 pass 语句的作用是什么?

在编写代码时只写框架思路,具体实现还未编写就可以用 pass 进行占位,使程序不报错,不会进 行任何操作。

问题:有这样一段代码,print c 会输出什么,为什么?

在这里插入图片描述
在这里插入图片描述

问题:交换两个变量的值?

在这里插入图片描述

内建函数

问题:map 函数和 reduce 函数?

Python面试宝典(第三章 Python高级)_第7张图片

map()函数

# 传入一个参数 
def one_p(x): 
    return x * x 
print 'map1.1:', map(one_p, range(1, 5))  
#结果:map1.1: [1, 4, 9, 16] 
print 'map1.2:', map(one_p, [1, 2, 3, 4, 5, 6]) 
#结果:map1.2: [1, 4, 9, 16, 25, 36] 
   
# 传入多个参数 
a = [1, 2, 3, 4, 5] 
b = [1, 1, 6, 2, 3] 
c = [1, 2, 3, 4, 5] 
s = map(lambda (x, y, z): x * y * z, zip(a, b, c)) 
print 'map2:', s 
#结果:map2: [1, 4, 54, 32, 75]

reduce()函数

r1 = reduce(lambda x, y: x * y, (2, 2, 6, 2))  # 运算过程:(((2*2)*6)*2) 
r2 = reduce(lambda x, y: x * y, (2, 2, 6), 2)  # 运算过程:(((2*2)*6)*2)
   
print 'r1:', r1  # 结果:r1: 48 
print 'r2:', r2  # 结果:r2: 48

问题:递归函数停止的条件?

Python面试宝典(第三章 Python高级)_第8张图片

问题:回调函数,如何通信的?

回调函数是把函数的指针(地址)作为参数传递给另一个函数,将整个函数当作一个对象,赋值给调 用的函数。

问题:Python 主要的内置数据类型都有哪些? print dir( ‘a ’) 的输出?

在这里插入图片描述

问题:print(list(map(lambda x: x * x, [y for y in range(3)])))的输出?

在这里插入图片描述

问题:hasattr() getattr() setattr() 函数使用详解?

Python面试宝典(第三章 Python高级)_第9张图片

Python面试宝典(第三章 Python高级)_第10张图片

Lambda

问题:什么是 lambda 函数? 有什么好处?

Python面试宝典(第三章 Python高级)_第11张图片

问题:什么是 lambda 函数?它有什么好处?写一个匿名函数求两个数的和?

Python面试宝典(第三章 Python高级)_第12张图片

问题:下面这段代码的输出结果将是什么?请解释。

Python面试宝典(第三章 Python高级)_第13张图片
Python面试宝典(第三章 Python高级)_第14张图片

设计模式

单例

问题:请手写一个单例

在这里插入图片描述
在这里插入图片描述

问题:单例模式的应用场景有哪些?

Python面试宝典(第三章 Python高级)_第15张图片

工厂

装饰器

问题:对装饰器的理解 ,并写出一个计时器记录方法执行性能的装饰器?

Python面试宝典(第三章 Python高级)_第16张图片

问题:解释一下什么是闭包?

在函数内部再定义一个函数,并且这个函数用到了外边函数的变量,那么将这个函数以及用到的一些变量称之为 闭包。

问题:函数装饰器有什么作用?

装饰器本质上是一个 Python 函数,它可以在让其他函数在不需要做任何代码的变动的前提下增加额外的功能。装 饰器的返回值也是一个函数的对象,它经常用于有切面需求的场景。 比如:插入日志、性能测试、事务处理、缓存、 权限的校验等场景 有了装饰器就可以抽离出大量的与函数功能本身无关的雷同代码并发并继续使用。

生成器

问题:生成器、迭代器的区别?

迭代器是一个更抽象的概念,任何对象,如果它的类有 next 方法和 iter 方法返回自己本身,对于 string、list、 dict、tuple 等这类容器对象,使用 for 循环遍历是很方便的。在后台 for 语句对容器对象调用 iter()函数,iter() 是 python 的内置函数。iter()会返回一个定义了 next()方法的迭代器对象,它在容器中逐个访问容器内元素,next() 也是 python 的内置函数。在没有后续元素时,next()会抛出一个 StopIteration 异常。

**生成器(Generator)**是创建迭代器的简单而强大的工具。它们写起来就像是正规的函数,只是在需要返回数据的时候使用 yield 语句。每次 next()被调用时,生成器会返回它脱离的位置(它记忆语句最后一次执行的位置 和所有的数据值)

**区别:**生成器能做到迭代器能做的所有事,而且因为自动创建了 iter()和 next()方法,生成器显得特别简洁,而且 生成器也是高效的,使用生成器表达式取代列表解析可以同时节省内存。除了创建和保存程序状态的自动方法,当 发生器终结时,还会自动抛出 StopIteration 异常。

问题:X 是什么类型?

在这里插入图片描述

问题:请尝试用“一行代码”实现将 1-N 的整数列表以 3 为单位分组,比如 1-100 分组后为?

在这里插入图片描述

问题:Python 中 yield 的用法?

Python面试宝典(第三章 Python高级)_第17张图片

面向对象

类与对象

问题:Python 中的可变对象和不可变对象?

Python面试宝典(第三章 Python高级)_第18张图片

问题:Python 中 is 和==的区别?

is 判断的是 a 对象是否就是 b 对象,是通过 id 来判断的。
==判断的是 a 对象的值是否和 b 对象的值相等,是通过 value 来判断的。

问题:Python 的魔法方法

Python面试宝典(第三章 Python高级)_第19张图片
Python面试宝典(第三章 Python高级)_第20张图片

问题:面向对象中怎么实现只读属性?

Python面试宝典(第三章 Python高级)_第21张图片
Python面试宝典(第三章 Python高级)_第22张图片

问题:谈谈你对面向对象的理解?

面向对象是相对于面向过程而言的。面向过程语言是一种基于功能分析的、以算法为中心的程序设计方法;而面 向对象是一种基于结构分析的、以数据为中心的程序设计思想。在面向对象语言中有一个有很重要东西,叫做类。

面向对象有三大特性:封装、继承、多态。

正则表达式

Python面试宝典(第三章 Python高级)_第23张图片

问题:Python里match与search的区别?

在这里插入图片描述

问题:请写出下列正则关键字的含义?


Python面试宝典(第三章 Python高级)_第24张图片

系统编程

问题:进程总结

在这里插入图片描述
Python面试宝典(第三章 Python高级)_第25张图片

Process 语法结构:
Python面试宝典(第三章 Python高级)_第26张图片
Python面试宝典(第三章 Python高级)_第27张图片
Python面试宝典(第三章 Python高级)_第28张图片
进程之间的通信-Queue

Python面试宝典(第三章 Python高级)_第29张图片

进程池 Pool
Python面试宝典(第三章 Python高级)_第30张图片
Python面试宝典(第三章 Python高级)_第31张图片
Python面试宝典(第三章 Python高级)_第32张图片
Python面试宝典(第三章 Python高级)_第33张图片

问题:谈谈你对多进程,多线程,以及协程的理解,项目是否用?

问题:什么是多线程竞争?

Python面试宝典(第三章 Python高级)_第34张图片

问题:解释一下什么是锁,有哪几种锁?

锁(Lock)是 Python 提供的对线程控制的对象。有互斥锁、可重入锁、死锁。

问题:什么是死锁呢?

Python面试宝典(第三章 Python高级)_第35张图片
Python面试宝典(第三章 Python高级)_第36张图片

问题:什么是线程安全,什么是互斥锁?

每个对象都对应于一个可称为" 互斥锁" 的标记,这个标记用来保证在任一时刻,只能有一个线程访问该对象。

同一个进程中的多线程之间是共享系统资源的,多个线程同时对一个对象进行操作,一个线程操作 尚未结束,另一个线程已经对其进行操作,导致最终结果出现错误,此时需要对被操作对象添加互斥锁, 保证每个线程对该对象的操作都得到正确的结果。

问题:说说下面几个概念:同步,异步,阻塞,非阻塞?

Python面试宝典(第三章 Python高级)_第37张图片

问题:什么是僵尸进程和孤儿进程?怎么避免僵尸进程?

Python面试宝典(第三章 Python高级)_第38张图片

问题:Python 中的进程与线程的使用场景?

多进程适合在 CPU 密集型操作(cpu 操作指令比较多,如位数多的浮点运算)。 多线程适

合在 IO 密集型操作(读写数据操作较多的,比如爬虫)。

问题:线程是并发还是并行,进程是并发还是并行?

线程是并发,进程是并行;

进程之间相互独立,是系统分配资源的最小单位,同一个线程中的所有线程共享资源。

问题:并行(parallel)和并发(concurrency)?

并行:同一时刻多个任务同时在运行。

并发:在同一时间间隔内多个任务都在运行,但是并不会在同一时刻同时运行,存在交替执行的情
况。

实现并行的库有:multiprocessing
实现并发的库有:threading
程序需要执行较多的读写、请求和回复任务的需要大量的 IO 操作,IO 密集型操作使用并发更好。 CPU 运算量大的程序程序,使用并行会更好。

问题:IO 密集型和 CPU 密集型区别?

IO 密集型:系统运作,大部分的状况是 CPU 在等 I/O (硬盘/内存)的读/写。

CPU 密集型:大部份时间用来做计算、逻辑判断等 CPU 动作的程序称之 CPU 密集型。

网络编程

UDP总结

Python面试宝典(第三章 Python高级)_第39张图片
Python面试宝典(第三章 Python高级)_第40张图片
Python面试宝典(第三章 Python高级)_第41张图片

Python面试宝典(第三章 Python高级)_第42张图片
Python面试宝典(第三章 Python高级)_第43张图片

TCP 总结

Python面试宝典(第三章 Python高级)_第44张图片
TCP 客户端的创建流程:
1.创建 TCP 的 socket 套接字
2.连接服务器 3.发送数据给服务器端
4.接收服务器端发送来的消息
5.关闭套接字
Python面试宝典(第三章 Python高级)_第45张图片
Python面试宝典(第三章 Python高级)_第46张图片
Python面试宝典(第三章 Python高级)_第47张图片
Python面试宝典(第三章 Python高级)_第48张图片
Python面试宝典(第三章 Python高级)_第49张图片

问题:怎么实现强行关闭客户端和服务器之间的连接?

在 socket 通信过程中不断循环检测一个全局变量(开关标记变量),一旦标记变量变为关闭,则 调 用 socket 的 close 方法,循环结束,从而达到关闭连接的目的。

问题:简述 TCP 和 UDP 的区别以及优缺点?

UDP 是面向无连接的通讯协议,UDP 数据包括目的端口号和源端口号信息。
优点:UDP 速度快、操作简单、要求系统资源较少,由于通讯不需要连接,可以实现广播发送
缺点:UDP 传送数据前并不与对方建立连接,对接收到的数据也不发送确认信号,发送端不知道数 据是否会正确接收,也不重复发送,不可靠。

TCP 是面向连接的通讯协议,通过三次握手建立连接,通讯完成时四次挥手
优点:TCP 在数据传递时,有确认、窗口、重传、阻塞等控制机制,能保证数据正确性,较为可靠。
缺点:TCP 相对于 UDP 速度慢一点,要求系统资源较多。

问题:简述浏览器通过 WSGI 请求动态资源的过程?

Python面试宝典(第三章 Python高级)_第50张图片

问题:描述用浏览器访问 www.baidu.com 的过程

Python面试宝典(第三章 Python高级)_第51张图片
Python面试宝典(第三章 Python高级)_第52张图片

问题:Post 和 Get 请求的区别?

Python面试宝典(第三章 Python高级)_第53张图片
Python面试宝典(第三章 Python高级)_第54张图片

问题:cookie 和 session 的区别?

Python面试宝典(第三章 Python高级)_第55张图片
Python面试宝典(第三章 Python高级)_第56张图片

HTTP 协议状态码有什么用,列出你知道的 HTTP 协议的状态码,然后讲出他们都 表示什么意思?

Python面试宝典(第三章 Python高级)_第57张图片

问题:请简单说一下三次握手和四次挥手?

Python面试宝典(第三章 Python高级)_第58张图片
Python面试宝典(第三章 Python高级)_第59张图片
Python面试宝典(第三章 Python高级)_第60张图片
Python面试宝典(第三章 Python高级)_第61张图片

问题:说一下什么是 tcp 的 2MSL?

Python面试宝典(第三章 Python高级)_第62张图片

问题:为什么客户端在 TIME-WAIT 状态必须等待 2MSL 的时间?

Python面试宝典(第三章 Python高级)_第63张图片

问题:说说 HTTP 和 HTTPS 区别?

HTTP 协议传输的数据都是未加密的,也就是明文的,因此使用 HTTP 协议传输隐私信息非常不安 全,为了保证这些隐私数据能加密传输,于是网景公司设计了 SSL(Secure Sockets Layer)协议用于 对 HTTP 协议传输的数据进行加密,从而就诞生了 HTTPS。简单来说,HTTPS 协议是由 SSL+HTTP 协 议构建的可进行加密传输、身份认证的网络协议,要比 http 协议安全。

HTTPS 和 HTTP 的区别主要如下:
1、https 协议需要到 ca 申请证书,一般免费证书较少,因而需要一定费用。

2、http 是超文本传输协议,信息是明文传输,https 则是具有安全性的 ssl 加密传输协议。

3、http 和 https 使用的是完全不同的连接方式,用的端口也不一样,前者是 80,后者是 443。

4、http 的连接很简单,是无状态的;HTTPS 协议是由 SSL+HTTP 协议构建的可进行加密传输、身份认证的网络协议,比 http 协议安全。

问题:谈一下 HTTP 协议以及协议头部中表示数据类型的字段?

Python面试宝典(第三章 Python高级)_第64张图片

问题:HTTP 请求方法都有什么?

Python面试宝典(第三章 Python高级)_第65张图片
Python面试宝典(第三章 Python高级)_第66张图片

问题:使用 Socket 套接字需要传入哪些参数 ?

Python面试宝典(第三章 Python高级)_第67张图片

问题:HTTP 常见请求头?

Python面试宝典(第三章 Python高级)_第68张图片

问题:七层模型? IP ,TCP/UDP ,HTTP ,RTSP ,FTP 分别在哪层?

Python面试宝典(第三章 Python高级)_第69张图片

问题:url 的形式?

Python面试宝典(第三章 Python高级)_第70张图片
Python面试宝典(第三章 Python高级)_第71张图片

你可能感兴趣的:(Python基础与进阶)