面试题03

面试题

tcp 三次握手和四次挥手

TCP是可靠连接,使用三次握手,四次挥手保证了可靠连接,数据不会丢失

-SYN: SYN=1 表示要建立连接
-FIN: 表示断开连接
-ACK: ACK=1 表示我收到了,允许
-seq: 随机数,建立连接无论客户端还是服务端要建立连接就要携带
-ack: 回应请求就要加1返回

三次握手:

第一次:喂(SYN=1),我是lqz(seq=随机数),客户端处于 SYN_SEND状态,服务端没收到的话就是 listen 状态,收到了是:SYN_RCVD 状态

第二次: 收到(ACK=1),是lqz啊(ack=随机数+1),喂(SYN=1),我是吴彦祖(seq=另外一个随机数) 服务端:SYN_RCVD状态,客户端:没收到服务端返回的第二次:SYN_SEND状态,一旦收到了就是 established

第三次:收到(ACK=1),吴彦祖你好(ack = 另外一个随机数+1) 客户端:连接建好的状态 established 服务端: 收到后,处于 established

大白话:

第一次: 客户端向服务端发送建立连接请求, [携带一个随机数](SYN=1,seq=随机数)
第二次: 服务端回应客户端的建立连接请求(ACK=1,ack=随机数+1),服务端发送建立连接请求(SYN=1,seq=另外一个随机数)
第三次: 客户端回应服务端的建立连接请求(ACK=1,ack=另外一个随机数+1)

四次挥手

第一次:客户端向服务端发起断开连接的请求(FIN=随机数)

第二次:服务端收到后,回复这个请求(ACK=1,ack=随机数+1)

第三次:服务端向客户端发起断开的请求(FIN=另一个随机数)

第四次:客户端收到后,回复这个请求(ACK=1,ack=另一个随机数+1)

洪水攻击:

​ 同一时间有大量的客户端请求建立的连接 会导致服务端一直处于SYN_RCVD状态,服务端接收到了大量的syn请求,处于rcvd状态

osi七层协议,哪七层,每层有哪些,TCP/IP五层结构

osi七层:

​ 应用层,表示层,会话层,传输层,网络层、数据链路层、物理连接层

五层结构:

​ 应用层(三合一)、传输层、网络层、数据链路层、物理连接层

​ -应用层 表示层 会话层 (应用层)

​ -应用层协议: http,ftp,https,dns

​ -表示层: https=http+ssl 的加密

​ -会话层: 负责建立、管理和终止表示层实体之间的会话连接

​ -传输层:tcp协议, udp协议,端口:端口协议

​ -网络层: ip地址协议

​ -数据链路层: mac地址: 以太网协议, 数据帧:电信号的分组方式

​ -物理层: 物理介质,网线

tcp和udp的区别?udp用在哪里了?

​ -tcp是面向连接的可靠协议

​ -udp无连接的不可靠协议

​ -都是处于传输层

​ -比如:

​ udp: 一些聊天, dns协议用的udp协议

​ tcp: http mysql redis 客户端服务端通信

从浏览器输入一个地址,到看到页面信息,经历的过程

1. 在浏览器中输入的是: 域名---》要做域名解析---》把域名解析成ip地址+端口的形式----> dns解析--->(浏览器缓存,本机缓存,host文件,上一级递归解析服务,13台根dns)====>如果解析不到--->页面会报错
2.解析完后,向解析出的域名和端口,建立TCP连接,进行3次握手
3.像某个地址发送http的get请求
4 如果后端服务是使用nginx转发,nginx把http请求转发给web框架(django,flask)---> django请求生命周期
5 后端服务器以http响应的形式返回给客户端浏览器
6 客户端浏览器把http响应体的内容展示在浏览器上,但是http响应还有: 状态码,响应头。
7 四次挥手断开tcp连接----> http协议版本
# https://blog.csdn.net/m0_52165864/article/details/126313277

左连接,右连接,内连接,全连接:Mysql不能直接支持

数据通常不在同一张表中,这就涉及到连表操作,而表间连接方式有很多

# 内连接:
把两张表中共有的数据,连接到一起
# 左连接:
以左表为基准,把左表所有的数据都展示,有可能右表没有,用空补齐
# 右连接:
以右表为基准,把右表所有数据都展示,有可能左表没有,用空补齐
# 全连接:
以左右两表数据作为基准,左右两表数据都展示,有可能左或表没有,用空补齐

union和union all的区别?

select出来的结果: union,union all都是对结果进行合并,求并集

union 会取出重复的数据

union all 不会去除重复的数据

select name, id from user;
id name
1 lqz
2 zs
select name, id from book;
id name
1 lqz
2 西游记
3 金瓶qwsdqwd
select name,id form user union all selcet name, id form book;
id name
1 lqz
1 lqz
2 zs
2 西游记
3 金瓶wqwx

wgsi uwsgi uWSGI,cgi, fastcgi 分别是什么?

CGI:通用网关接口(Common Gateway Interface/CGI),CGI描述了服务器(nginx,apache)和请求处理程序(django,flask,springboot web框架)之间传输数据的一种标准
所有bs架构软件都是遵循CGI协议的

# 一句话总结: 一个标准,定义了客户端服务器之间如何传数据

FastCGI:快速通用网关接口(Fast Common Gateway Interface/FastCGI)是一种让交互程序与Web服务器通信的协议。FastCGI是早期通用网关接口(CGI)的增强版本
FastCGI致力于减少网页服务器与CGI程序之间互动的开销,从而使服务器可以同时处理更多的网页请求

# 常见的fastcgi服务器:Apache,Nginx,Microsoft IIS
# CGI的升级版

WSGI:Python Web Server Gateway Interface 缩写为WSGI,Python定义的Web服务器和Web应用程序或框架之间一种通用的接口

#一句话总结:
为Python定义的Web服务器和Web框架之间的接口标准

uWSGI:符合wsgi协议的web服务器,用c写的,性能比较高,咱们通常用来部署django,flask

# 一句话总结:
一个Web Server,即一个实现了WSGI协议的服务器,处理发来的请求及返回响应

uwsgi:uWSGi服务器实现的独有的协议,用于定义传输信息的类型,是用于前端服务器与 uwsgi 的通信规范

# 总结:
uWSGI自有的一个协议
uWSGI:web服务器,等同于wsgiref
uwsgi:uWSGI自有的协议

如何自定制上下文管理器

一个对象如果实现了__enter__和__exit__方法,那么这个对象就支持上下文管理协议,即with语句
上下文管理协议适用于 那些进入和退出之后自动执行一些代码的场景,比如文件、网络连接、数据库连接或使用锁,s使用事务的编码场景等

如何使用

class MyContextManager:
def __init__(self, name):
self.name = name
def __enter__(self):
print("进入with语句时执行此代码,此方法如果有饭hi之会复制给as声明的变量", self.name)
self.session=session
return self.session
def __exit__(self, exc_type, exc_value, traceback):
self.session.close()
print("Exiting", self.name)
with MyContextManager() as session"
session.filter()
print('上下文管理结束了')

web服务器到底是什么?服务器中间件

客户端(浏览器,app)跟 服务端(web框架)之间的东西,服务器中间件

# nginx apache 是一类东西,就是做请求转发
# uWSGI gunicorn 只针对于python的web框架
# tomcat,jboss,weblogic 只针对java的web框架

python是值传递还是引用传递

严格意义上来说,python既不是值传递,也不是引用传递,python是自己的传递方式,规则是:

如果传递的是不可变类型,在函数中修改,就不会影响原来的变量
如果传递的是可变的数据类型,在函数中修改,不会影响原来的变量,修改,而是重新赋值

python中一切皆对象:内部函数是一切皆引用(对象本质就是地址,就是引用)

什么是值,什么是引用
值就是一个变量=具体的值(一块内存空间放着这个变量的值)
引用是一个变量=内存地址(内存地址指向了值)

什么是值传递 什么是引用传递
如果是值传递,函数中修改了传递的值,不会影响原来的
如果是引用传递,函数中修改了传递的引用,就会影响原来的

posted @   性格如此w  阅读(16)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示