Python面试笔记

1 TCP、UDP、HTTP 协议的区别?

答:(1)TPC 和 UDP 都是传输层协议,主要解决数据如何在网络中传输;而 HTTP(超文本传输协议)是应用层协议,主要解决如何包装数据。
(2)TCP(传输控制协议)是一种面向连接的、可靠的传输层协议;而 UDP(用户数据报协议)是一种无连接的、不可靠的传输层协议。
(3)TCP 通信需要经过创建连接、数据传送、终⽌连接三个步骤;而 UDP 在通信开始之前,不需要建立相关连接,只需要发送数据即可。

2 TCP 三次握手?

答: (1)第一次握手:客户端向服务器发送请求,等待服务器确认;其中同步位 SYN=1,序号 SEQ=x(表明传送数据时的第一个数据字节的序号是x)。
(2)第二次握手:服务器收到客户端发来的请求,如果同意建立连接,就发回一个确认报文段;该报文段中同步位 SYN=1,确认号ACK=x+1,序号 SEQ=y。
(3)第三次握手:客户端收到服务器的确认报文段后,还需要向服务器给出确认,向其发送确认包 ACK(ack=y+1),进而完成三次握手。
通过这样的三次握手,客户端与服务端建立起可靠的双工连接,开始传送数据。

3 TCP 四次挥手?

答:(1) 客户端向服务器发送一个 FIN,用来关闭客户到服务器的数据传送。
(2) 服务器收到这个 FIN 后,向客户端发回一个 ACK,确认序号为收到的序号加 1。和 SYN 一样,一个 FIN 将占用一个序号。
(3) 服务器关闭客户端的连接,发送一个FIN给客户端。
(4) 客户端收到 FIN 后,发回 ACK 报文确认,并将确认序号设置为收到序号加 1。

4 什么是基本类型和引用类型?

答:(1)基本类型:是值类型,基本类型的变量存放在栈区。
(2)引用类型:就是地址类型。

5 内存分区?

答:内存分为四个区域:栈区,堆区,全局静态区,只读区。
在这里插入图片描述

(1)栈区
1)存放的数据:局部变量,形参,被调用函数的地址(这个可以不用管)等等。
2)特点:读取速度快,存储和释放的思路是按照数据结构中的栈进行的,存数据就是压栈,释放就是弹栈。
空间小,基本类型的数据占用空间的大小不会随着值的改变而改变,而且占用空间小。

(2)堆区:
1)存放数据:new出来的数据。
2)特点:读取速度慢。
空间大:引用类型的数据大小是动态的,会随着数据的增加而改变大小。

(3)全局静态区:
1)存放数据:全局变量和静态变量。
2)特点:在程序运行过程中,数据会一直在内存中。

(4)只读区:
1)存放数据:常量区存放常量,代码区存放程序的代码。
2)特点:此区域的数据在程序运行过程中肯定不能改变。

6 静态字段和静态方法?

答:类的静态字段和静态方法是指,这些字段和方法对于类的任何实例都是一致的,不会因对象的改变而改变。
(字段:字段可以是任何类型的对象。)

7 浅拷贝和深拷贝的区别?

答:(1)浅拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,如果字段是值类型的,那么对该字段执行复制;如果该字段是引用类型的话,则复制引用但不复制引用的对象,因此,原始对象及其副本引用同一个对象。
(2)深拷贝:创建一个新对象,然后将当前对象的非静态字段复制到该新对象,无论该字段是值类型的还是引用类型,都复制独立的一份。当你修改其中一个对象的任何内容时,都不会影响另一个对象的内容。

8 Django 请求的处理流程?

答:(1)用户通过浏览器发送请求。
(2)请求到达 request 中间件,中间件对 request 请求做预处理或者直接返回 response。
(3)若未返回 response,会到达urlconf路由,找到对应视图函数。
(4)视图函数做相应预处理或直接返回 response。
(5)View 中的方法可以选择性的通过 Models 访问底层的数据。
(6)取到相应数据后回到 Django 模板系统,templates 通过 filter 或 tags 把数据渲染到模板上。
(7)返回response到浏览器展示给客户。

在这里插入图片描述

9 Celery?

答:Celery 是一个分布式异步消息任务队列的管理工具。

10 线程、进程的区别?

答:(1)线程是操作系统能够进行运算调度的最小单位,线程被包含在进程中,是进程中的实际运作单位。
进程是资源分配的基本单位。
地址空间:线程是进程内的一个执行单元,进程内至少有一个线程,它们共享进程的地址空间,而进程有自己独立的地址空间;
资源拥有:进程是资源分配和拥有的单位,同一个进程内的线程共享进程的资源;
线程是处理器调度的基本单位,但进程不是;
二者均可并发执行。
(2)一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。

11 Django 模型类的继承?

(1)抽象基类:抽象类继承的作用是将子表中通用的字段聚合在一起,并将这些字段统一定义在抽象基类中,避免重复定义这些字段。抽象基类的定义通过在模型的 Meta 中定义属性 abstract=True 来实现。
(2)多表继承:每一个模型都有自己的数据库表。
(3)代理模型:只修改模型的 Python 层面的行为,而不改动模型的字段。

12 Redis 有哪些数据结构?怎么保存的?

答:Redis存储的5种数据结构:
(1)String:可以是字符串、整数或者浮点数。
(2)List:链表。
(3)Set:无序集合,同一集合中的元素互不相同(互异性)。
(4)Zset:有序集合。
(5)Hash:包含键值对的无序散列表。

Redis 中是把数据保存到内存中的,但是它也会定期的把数据写回到硬盘中。
Redis 保存数据有两种方式:
(1)快照模式(Snapshot):
1)定时快照,即按一定时间将内存中的数据保存到磁盘上。
2)定量快照,即数据变化一定次数后将数据保存到磁盘上。
(2)写模式(Append Only File):
这种模式下 Redis 会把所以修改数据的命令(如 Update,Set)等保存到一个只能追加的 ASAP 文件中,当 Redis 重启时,它会把这个文件里的命令重新执行一遍。

13 ModelFirst 与 DBFirst 的区别?

答:EF(Entity Framework(实体框架))是微软出品的用来操作数据库的一个框架。
EF 的三种设计模型:CodeFirst,ModelFirst,DBFirst。
ModelFirst 是首先设计实体模型,之后根据实体模型实现到数据库的映射。
DBFirst 是先进行数据库的设计,之后根据数据库生成实体数据模型。

EF 框架的原理就是把实体类的变化通过映射反应到数据库中去,实现表的增删改查。对象上下文是实体类操作数据库的API。应用程序对实体类进行的增删改查操作会经由对象上下文进行映射,最终转换为 SQL 脚本语言,然后执行,最终实现对表的增删改查。当需要修改表的结构时,我们可以选择根据模型更新数据库和根据数据库更新模型两种。

14 Linux下找文件?

答:find 命令。

15 闭包?

答:在一个内部函数中,对外部作用域的变量进行引用,并且一般外部函数的返回值为内部函数,那么内部函数就被认为是闭包。
在这里插入图片描述
闭包的作用:(1)闭包可以保存当前的运行环境。
(2)闭包可以根据外部作用域的局部变量来得到不同的结果。

  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

淘淘图兔兔呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值