目录
6.python中 type() 和 isinstance() 的区别
1.OSL / 7层网络模型及协议
应用层(为应用出现提供服务)(协议:HTTP,TFTP,FTP,NFS,WAIS,SMTP)
表示层(数据格式转化,数据加密)(协议:Tenet,Rlogin,SNMP,Gopher)
会话层(建立,管理和维护会话)(协议:SMTP,DNS)
传输层(建立,管理和维护端到端的连接)(协议:TCP,UDP)
网络层(IP选址及路由选择)(协议:IP,ICMP,ARP,RARP,AKP,UUCP)
数据链路层(提供戒指访问和链路管理)(协议:FDDL,Ethernet,Arpanet,PDN,SLIP,PPP)
物理层(物理层)(协议:IEEE802.1A,IEEE802.0到IEEE802.11)
2.restful api 设计中的幕等性操作
幂等操作指的是对同一资源的多次请求产生的最终结果是一致的。简单来说,无论对一个资源进行多少次相同的操作,所产生的影响都应该是相同的。
使用恰当的HTTP方法:使用符合语义的HTTP方法来表示操作的类型。
GET方法通常用于获取资源,且应该是幂等的。
POST方法通常用于创建新资源,不是幂等的。
PUT方法通常用于更新或替换资源,应该是幂等的。
DELETE方法用于删除资源,通常也应该是幂等的。
3.python序列化和反序列化的内置模块
pickle使用了Python特定的序列化和反序列化机制,它会将Python对象转换为字节流进行存储或传输,并且可以将字节流重新转换回原始的Python对象。pickle模块提供了dump()
和load()
等函数来执行序列化和反序列化操作。
json(JavaScript Object Notation)是一种轻量级的数据交换格式,可读性高并且易于理解。它使用文本格式表示复杂数据结构,通常用于在不同平台之间进行数据传输。json模块提供了dump()
和load()
等函数来执行序列化和反序列化操作。
需要注意的是,pickle和json是两种不同的序列化和反序列化机制,它们使用不同的编码格式和处理方式。pickle是Python特定的机制,只能在Python环境中使用,而json是一种通用的数据交换格式,可以在多种编程语言中使用。
4.匿名函数
匿名函数(Anonymous Function),也被称为lambda函数,是一种没有名称的函数。它是一种简化代码的方式,在不需要定义完整函数的情况下,直接使用一个函数表达式来完成特定的任务。
在Python中,可以使用lambda关键字创建匿名函数。匿名函数的语法如下:
lambda 参数: 表达式
其中,参数是函数的输入参数,而表达式是函数的返回值。匿名函数可以有多个参数,用逗号分隔。
以下是一个示例,展示了如何使用匿名函数计算两个数的和:
add = lambda x, y: x + y result = add(5, 3) print(result)
# 输出:8
在上述示例中,我们使用lambda函数定义了一个名为add的匿名函数,它接受两个参数x和y,并返回它们的和。然后,我们调用add函数,并传入参数5和3,将结果赋给result变量,并打印出结果。
匿名函数通常用于简短的函数逻辑或作为高阶函数的参数,以提供更简洁的代码实现。
5.python中的类异常
- Exception(所有异常的基类)
- AssertionError(断言语句失败时引发的异常)
- AttributeError(当对象没有属性或无效属性时引发的异常)
- ImportError(导入模块或对象失败时引发的异常)
- IndexError(索引超出序列范围时引发的异常)
- KeyError(字典中查找无效键时引发的异常)
- TypeError(操作或函数应用于不适当类型的对象时引发的异常)
- ValueError(传递给函数的参数无效时引发的异常)
- ZeroDivisionError(除以零时引发的异常)
- FileNotFoundError(尝试打开不存在的文件时引发的异常)
这些是常见的类异常
6.python中 type() 和 isinstance() 的区别
type() 函数返回的是一个对象的类型,可以返回对象所属类的类型信息,
例如:type(3) 返回 <class ' int '> ,表示整数类型
isinstance() 函数用于检查一个对象是否是指定类型或其子类的实例,它返回一个布尔值,如果对象是指定类型或其种类的实例,返回True ,否则返回False
例如:isinstance(3,int) 返回True, 表示整数3是整数类型的实例
7.tcp 的 三握四挥
三次握手
TCP协议位于传输层,作用是提供可靠的字节流服务,为了准确无误地将数据送达目的地,TCP协议采纳三次握手策略。
三次握手原理:
第1次握手:客户端发送一个带有SYN(synchronize)标志的数据包给服务端;
第2次握手:服务端接收成功后,回传一个带有SYN/ACK标志的数据包传递确认信息,表示我收到了;
第3次握手:客户端再回传一个带有ACK标志的数据包,表示我知道了,握手结束。
其中:SYN标志位数置1,表示建立TCP连接;ACK标志表示验证字段。
四次挥手原理:
第1次挥手:客户端发送一个FIN,用来关闭客户端到服务端的数据传送,客户端进入FIN_WAIT_1状态;
第2次挥手:服务端收到FIN后,发送一个ACK给客户端,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号),服务端进入CLOSE_WAIT状态;
第3次挥手:服务端发送一个FIN,用来关闭服务端到客户端的数据传送,服务端进入LAST_ACK状态;
第4次挥手:客户端收到FIN后,客户端t进入TIME_WAIT状态,接着发送一个ACK给Server,确认序号为收到序号+1,服务端进入CLOSED状态,完成四次挥手。
在不考虑其中其中各种数据包和报文简单的话是
3握
1 . 客户端向服务器发送消息(查看服务器是否在线,能否连接)
2. 服务器向客户端发送消息 (在线可连接)
3 . 客户端向服务端发送消息 (OK 在不考虑其他原因下 ,已经处于连接状态了)
4挥
1 . 客户端向服务器发送消息 (数据拿完了,能不能断连接)
2 . 服务器向客户端发送消息 (等等,我看看有没有剩下的)
3 . 服务器向客户端发送消息 (好了,没了 ,断吧)
4. 客户端向服务器发送消息 (知道了 , 此刻断开连接了)
8.python 的 魔法方法
__new__ :类的构造器,创建初始化后的基本实例对象 == 类的框架
__init__ :类的数据初始化方法,给实例化对象添加属性
__del__ 类的析构器,用来在实例销毁前使用,释放资源
__call__ :将实例对象声明为一个方法调用,保护内部实现
__getattr__ :获取某个属性时使用
__setattr__ :设置某个属性时使用
9.redis 中数据类型
字符串(String):存储一个字符串值。可以对整个字符串或字符串的一部分执行操作,例如获取、设置、追加等。
列表(List):按照插入顺序存储一个有序的字符串元素集合。可以在列表的两端进行插入、删除和访问操作。
集合(Set):存储一组唯一的、无序的字符串元素。可以执行集合的交集、并集、差集等计算操作。
有序集合(Sorted Set):与集合类似,但每个元素都关联了一个分数(score),根据分数的大小进行排序。可用于存储排行榜、优先级队列等场景。
哈希表(Hash):存储键值对的无序散列表。可以对单个字段或整个哈希表执行操作,例如获取、设置、删除等。
位图(Bitmap):使用二进制位来存储和操作数据。可以进行按位的逻辑操作,如与、或、非等。
地理空间索引(Geospatial Index):存储地理位置坐标的数据类型。可以进行地理位置的查询和计算。
10.python的内置函数
len():返回容器(字符串、列表、元组等)中元素的数量。
print():将指定的对象输出到控制台。
input():从用户控制台接收输入,并以字符串形式返回。
int():将一个对象转换为整数。
float():将一个对象转换为浮点数。
str():将一个对象转换为字符串。
type():返回对象的类型。
range():生成一个整数序列。
max():返回给定对象中的最大值。
min():返回给定对象中的最小值
11.列表和元组的区别
1.可变性(Mutability):列表是可变的(mutable),意味着可以修改、添加或删除其中的元素。而元组是不可变的(immutable),一旦创建后,就不能修改其中的元素。
2.语法表示:列表使用方括号([])来表示,元素之间用逗号分隔。例如:[1, 2, 3]。而元组使用圆括号(())来表示,元素之间也用逗号分隔。例如:(1, 2, 3)。
3.使用场景:由于元组是不可变的,所以在需要保持数据的不可变性和安全性的场景中更适用,例如用于存储常量或函数参数。列表则更适用于需要频繁修改或扩展元素的场景,例如存储动态数据。
4.性能:元组的访问和迭代比列表更快,这是因为元组的不可变性使得Python可以对其进行一些优化
12.python 的自省
是指程序员所写的程序咋爱运行时,可以获得对象的类型
dir : 获取当前对象的内部属性
typr :查看当前对象的类型
hasattr :判断对象是否包含某个属性
getattr :获取对象的属性
isinstance :判断对象是否是某个类的实例