面试题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中一切皆对象:内部函数是一切皆引用(对象本质就是地址,就是引用)
什么是值,什么是引用:
值就是一个变量=具体的值(一块内存空间放着这个变量的值)
引用是一个变量=内存地址(内存地址指向了值)
什么是值传递 什么是引用传递:
如果是值传递,函数中修改了传递的值,不会影响原来的
如果是引用传递,函数中修改了传递的引用,就会影响原来的
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构