Python面试总结(四)ip正则与三次握手四次挥手

来源:互联网 发布:java方法交换两个变量 编辑:程序博客网 时间:2024/05/21 08:25
1.请简述值传递和引用传递的区别?


值传递仅仅传递的是值
引用传递,传递的是内存地址,修改后会改变内存地址对应储存的值。



2.请手写一个匹配ip的正则表达式?

第一种方法:
((2[0-4]\d|25[0-5]|[01]?\d\d?)\.){3}(2[0-4]\d|25[0-5]|[01]?\d\d?)


第二种方法:
(?:(?:1[0-9][0-9]\.)|(?:2[0-4][0-9]\.)|(?:25[0-5]\.)|(?:[1-9][0-9]\.)|(?:[0-9]\.)){3}(?:(?:1[0-9][0-9])|(?:2[0-4][0-9])|(?:25[0-5])|(?:[1-9][0-9])|(?:[0-9]))$



3.mysql数据库的优化?



1、选取最适用的字段属性
2、使用连接(JOIN)来代替子查询(Sub-Queries)
3、使用联合(UNION)来代替手动创建的临时表
4、事务
5、锁定表
6、使用外键
7、使用索引

8、优化的查询语句


4.谈谈你对python多线程的理解?


线程是进程的一个实体,是CPU进行调度的基本单位,
它是比进程更小的能独立运行的基本单位.线程自己基本上不拥有系统资源,
只拥有一点在运行中必不可少的资源(如程序计数器,一组寄存器和栈),
但是它可与同属一个进程的其他的线程共享进程所拥有的全部资源.


一个进程至少有一个线程.
线程的划分尺度小,使得多线程程序的并发性高。
多个线程共享内存,从而极大地提高了程序的运行效率
线程不能够独立执行,必须依存在进程中
线程执行开销小,但不利于资源的管理和保护



5.redis中的事务和mysql中的事务有什么区别?


mysql中一个中小型的网络数据库,比oracle和sqlserver小, 
但是并发能力远超过acess这样的桌面数据库。


redis是一个支持网络、可基于内存亦可持久化的日志型、Key-Value数据库。
可以认为redis比mysql简化很多。
mysql支持集群。
现在大量的软件使用redis作为mysql在本地的数据库缓存,然后再适当的时候和mysql同步.


6.请简述什么是三次握手和四次挥手?为什么要这样?


TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接:


位码即tcp标志位,有6种表示:
SYN(synchronous建立连接)
ACK(acknowledgement 表示响应、确认)
PSH(push表示有DATA数据传输)
FIN(finish关闭连接)
RST(reset表示连接重置)
URG(urgent紧急指针字段值有效)


三次握手:


第一次握手:客户端发送syn包(syn=x)到服务器,并进入SYN_SEND状态,等待服务器确认;
第二次握手:服务器收到syn包,必须确认客户的SYN(ack=x+1),
同时自己也发送一个SYN包(syn=y),即SYN+ACK包,此时服务器进入SYN_RECV状态;
第三次握手:客户端收到服务器的SYN+ACK包,向服务器发送确认包ACK(ack=y+1),
此包发送完毕,客户端和服务器进入ESTABLISHED状态,完成三次握手。
      握手过程中传送的包里不包含数据,三次握手完毕后,
客户端与服务器才正式开始传送数据。理想状态下,TCP连接一旦建立,
在通信双方中的任何一方主动关闭连接之前,TCP 连接都将被一直保持下去。
      确认号:其数值等于发送方的发送序号+1(即接收方期望接收的下一个序列号)。

四次挥手:
与建立连接的“三次握手”类似,断开一个TCP连接则需要“四次挥手”。
第一次挥手:主动关闭方发送一个FIN,用来关闭主动方到被动关闭方的数据传送,也就是主动关闭方告诉被动关闭方:我已经不会再给你发数据了(当然,在fin包之前发送出去的数据,如果没有收到对应的ack确认报文,主动关闭方依然会重发这些数据),但是,此时主动关闭方还可以接受数据。
第二次挥手:被动关闭方收到FIN包后,发送一个ACK给对方,确认序号为收到序号+1(与SYN相同,一个FIN占用一个序号)。
第三次挥手:被动关闭方发送一个FIN,用来关闭被动关闭方到主动关闭方的数据传送,也就是告诉主动关闭方,我的数据也发送完了,不会再给你发数据了。
第四次挥手:主动关闭方收到FIN后,发送一个ACK给被动关闭方,确认序号为收到序号+1,至此,完成四次挥手。


TCP的四次挥手过程(简言之):主动关闭方向被动关闭方发送不会再给你发数据了的信息;被动关闭方对收到的主动关闭方的报文段进行确认;被动关闭方向主动关闭方发送我也不会再给你发数据了的信息;主动关闭方再次对被动关闭方的确认进行确认。




(1)TCP的三次握手过程:主机A向B发送连接请求;主机B对收到的主机A的报文段进行确认;
主机A再次对主机B的确认进行确认。
(2)采用三次握手是为了防止失效的连接请求报文段突然又传送到主机B,因而产生错误。
失效的连接请求报文段是指:主机A发出的连接请求没有收到主机B的确认,
于是经过一段时间后,主机A又重新向主机B发送连接请求,且建立成功,顺序完成数据传输。
考虑这样一种特殊情况,主机A第一次发送的连接请求并没有丢失,
而是因为网络节点导致延迟达到主机B,主机B以为是主机A又发起的新连接,
于是主机B同意连接,并向主机A发回确认,但是此时主机A根本不会理会,
主机B就一直在等待主机A发送数据,导致主机B的资源浪费。


原创粉丝点击