您的位置:首页 > 职场人生

运维面试协议及原理

2020-10-26 22:04 1441 查看

一、tcp/ip 三次握手与四次挥手如何从专业角度去说明它们之间的关系

https://www.geek-share.com/detail/2692640379.html


二、redis 之主观下线与客观下线

答:

主观下线:  节点之间会定期的执行ping/pong消息来证明节点之间的连通性,若节点一向节点二发送ping消息之后收到pong消息,那么节点一将会更新最后一次与节点二的通信时间,若没有收到pong消息,那么节点一与节点二之间的链接将会断开,之后节点一再次执行ping消息,若与节点二之间的最后通信时间超过指定的时间,那么节点二将被节点一标记为主观下线。


客观下线:


答: 节点之间通信会携带一些必要的消息,其中就包含标记某节点为客观下线状态,节点中都包含了相关节点状态的链表信息,若节点的客观下线的记录超过半数,那么尝试执行客观下线

尝试客观下线流程:


下线主节点之后,进行故障恢复:


首先是判断该主节点的slave节点是否具有当主节点的资格,若该节点与主节点断开连接超过一定的时间那么就没有资格


之后根据从节点与主节点之间的偏移量进行延迟选举,保证偏移量最小的slave节点获得更多的票

选出节点之后,从节点执行slave none one 变成主节点,从节点将主节点的槽移交给自己完成故障恢复。

三:nginx 主动检查与被动检查

   主动健康检查(需使用第三方模块)

   

答:主动地健康检查,n 71f0 ignx定时主动地去ping后端的服务列表,当发现某服务出现异常时,把该服务从健康列表中移除,当发现某服务恢复时,又能够将该服务加回健康列表中。淘宝有一个开源的实现nginx_upstream_check_module模块

   

   被动检查

答: Nginx只有当有访问时后,才发起对后端节点探测。如果本次请求中,节点正好出现故障,Nginx依然将请求转交给故障的节点,然后再转交给健康的节点处理。所以不会影响到这次请求的正常进行。但是会影响效率,因为多了一次转发,而且自带模块无法做到预警。


四、Nginx知识讲解——location匹配模式详细讲解 (一般匹配优先级:精准匹配 > 一般匹配 > 正则匹配)

1 location = patt {} 精准匹配

精准匹配优先级比一般匹配大

2  location patt {} 一般匹配

nginx会采用匹配长度较长的一般匹配的规则来使用

3 location ~ patt {} 正则匹配


五、rewrite 指令

rewrite 指令 最后一项参数为flag标记,支持的flag 标记主要有以下几种

last: 相当于apache里的[l]标记,表示完成rewrite; 使用alias指定源:必须使用last

break: 本条规则匹配完成后,终止匹配,不再匹配后面的规则

redirect:返回302 临时重定向,浏览器地址会显示跳转后的url地址, 爬虫不会更新url(因为是临时)

permanent:返回301 永久重定向,浏览器地址会显示跳转后的url地址,爬虫更新url


last和break 用来实现url重写,浏览器地址url地址不变,


redirect和permanent 用来实现url 跳转

服务器配置好redirect后,打开浏览器会重定向你需要的网站,这个时候关闭网站是会直接报出无法连接的错误


但是permanent永久重定向定义以后,关闭nginx服务器,这个时候在访问同样会成功


这就是redirect跟permanent的区别


六、网络传输 为啥要进行encode编码

答:url转义其实也只是为了符合url的规范而已。因为在标准的url规范中中文和很多的字符是不允许出现在url中的


七:如何批量修改docker images 的tag

docker images | grep haproxy | sed 's/haproxy/192.168.61.121\/haproxy/g'| awk '{print "docker tag"" " $3" "$1":"$2}'|sh


八、tcp/ip 头部包含哪些  

1、源端口号 目标端口号 

2、信息长度

3、序列号


九、k8s 组件

Apiserver:所有服务的总入口。可以同时多个存在运行

etcd :存储。如果etcd 放在集群内部,将会自动满足etcd高可用集群。(1.15版本以后)

controller-manager:控制器,

scheduler:调度服务。当scheduler决定在哪个node上面运行pod后,将pod的配置发送给kubelet

controller-manager 与scheduler 一样,若是多个节点在一个集群中,那么运行的节点只会是一个,其他节点将自动进去休眠状态。

以下两个不需要高可用,因为这两个是工作在每个节点之上运行的

kubelet:维持容器的生命周期,跟ci去交互(部署,维护)

Proxy:去实现负载的方式 


十、k8s 中的pod 如何将业务对外访问 

NodePort


十一、docker 镜像 分层,分层的好处

Dockerfile 中的每一行都产生一个新层

下列代码每一行都又一个独立的id,而且下面产生的三层是只读的,一旦Image被运行时,会产生一个新层 container 层,这一层是可读可写的;

分层的优势在于,两个image可以共享一些层,降低了存储的压力。


1、复用,节省磁盘空间,相同的内容只需加载一份到内存。

2、修改dockerfile之后,再次构建速度快


十二、COPY指令和ADD指令有哪些区别

COPY指令和ADD指令功能和使用方式类似。只是COPY指令不会做自动解压工作,而且也不支持从网络获取文件


十三、k8s 控制器有哪些 (6种) 与Service类型

控制器

Deployment  声明式更新控制器,用于发布无状态应用

ReplicaSet  副本集控制器,用于对Pod进行副本规模扩大或剪裁

StatefulSet 有状态副本集,用于发布有状态应用

DaemonSet   在k8s集群每一个Node上运行一个副本,用于发布监控或日志收集类等应用

Job 运行一次性作业任务

CronJob 运行周期性作业任务


Service类型

ClusterIP 默认,分配一个集群内部可以访问的虚拟IP

NodePort 在每个Node上分配一个端口作为外部访问入口

LoadBalancer 工作在特定的Cloud Provider上,例如Google Cloud,AWS,OpenStack

ExternalName 表示把集群外部的服务引入到集群内部中来,即实现了集群内部pod和集群外部的服务进行通信


十四、http协议原理

HTTP协议的作用原理包括四个步骤: 

(1) 连接:Web浏览器与Web服务器建立连接,打开一个称为socket(套接字)的虚拟文件,此文件的建立标志着连接建立成功。  

 

(2) 请求:Web浏览器通过socket向Web服务器提交请求。HTTP的请求一般是GET或POST命令(POST用于FORM参数的传递)。GET命令的格式为:  GET 路径/文件名 HTTP/1.0  文件名指出所访问的文件,HTTP/1.0指出Web浏览器使用的HTTP版本。  

 

(3) 应答:Web浏览器提交请求后,通过HTTP协议传送给Web服务器。Web服务器接到后,进行事务处理,处理结果又通过HTTP传回给Web浏览器,从而在Web浏览器上显示出所请求的页面。   

 

例:假设客户机与www.mycompany.com:8080/mydir/index.html建立了连接,就会发送GET命令:GET /mydir/index.html HTTP/1.0。主机名为www.mycompany.com的Web服务器从它的文档空间中搜索子目录mydir的文件index.html。如果找到该文件,Web服务器把该文件内容传送给相应的Web浏览器。为了告知 Web浏览器传送内容的类型,Web服务器首先传送一些HTTP头信息,然后传送具体内容(即HTTP体信息),HTTP头信息和HTTP体信息之间用一个空行分开。

 

常用的HTTP头信息有:  

① HTTP 1.0 200 OK  这是Web服务器应答的第一行,列出服务器正在运行的HTTP版本号和应答代码。代码"200 OK"表示请求完成。  

② MIME_Version:1.0  它指示MIME类型的版本。  

③ content_type:类型  这个头信息非常重要,它指示HTTP体信息的MIME类型。如:content_type:text/html指示传送的数据是HTML文档。  

④ content_length:长度值  它指示HTTP体信息的长度(字节)。  

(4) 关闭连接:当应答结束后,Web浏览器与Web服务器必须断开,以保证其它Web浏览器能够与Web服务器建立连接


十五、tcp/ip 信息 头部包含哪些

typedef struct _TCP_HEADER 

short m_sSourPort;       // 源端口号16bit 

short m_sDestPort;        // 目的端口号16bit 

unsigned int m_uiSequNum;   // 序列号32bit 

unsigned int m_uiAcknowledgeNum; // 确认号32bit 

short m_sHeaderLenAndFlag;   // 前4位:TCP头长度;中6位:保留;后6位:标志位 

short m_sWindowSize;      // 窗口大小16bit 

short m_sCheckSum;       // 检验和16bit 

short m_surgentPointer;      // 紧急数据偏移量16bit 

}attribute((packed))TCP_HEADER, *PTCP_HEADER;


源端口号以及目的端口号:各占2个字节,端口是传输层和应用层的服务接口,用于寻找发送端和接收端的进程,通过这两个端口号和IP头部的ip发送和接收号,可以唯一的确定一个连接。一般来讲,通过端口号和IP地址,可以唯一确定一个TCP连接,在网络编程中,通常被称为一个socket接口。


序号:占4字节,用来标识从TCP发送端向TCP接收端发送的数据字节流。


确认序号:占4字节,包含发送确认的一端所期望收到的下一个序号,因此,确认序号应该是上次已经成功收到另一端数据字节序号加1。


数据偏移:占4位,最大为1111即15个数字,一个代表4个字节,用于指出TCP首部长度,若不存在选项,则这个值为20字节,数据偏移的最大值为60字节。


保留字段:占6位,值是确定的,暂时可忽略,值全为0


标志位:

URG(紧急): 为1时表明紧急指针字段有效

ACK(确认):为1时表明确认号字段有效

PSH(推送):为1时接收方应尽快将这个报文段交给应用层

RST(复位):为1时表明TCP连接出现故障必须重建连接

SYN(同步):在连接建立时用来同步序号

FIN(终止):为1时表明发送端数据发送完毕要求释放连接


接收窗口:占2个字节,用于流量控制和拥塞控制,表示当前接收缓冲区的大小。在计算机网络中,通常是用接收方的接收能力的大小来控制发送方的数据发送量,这样可以避免快主机致使较慢主机的缓冲区溢出。TCP连接的一端根据缓冲区大小确定自己的接收窗口值,告诉对方,使对方可以确定发送数据的字节数。


校验和:占2个字节,范围包括首部和数据两部分。检查当前的TCP包是否有问题,有没有损坏丢失


十六、什么是事务

事务是一个最小的工作单元,不论成功与否都作为一个整体进行工作。

当事务失败时,系统返回到事务开始时的状态。这个取消所有变化的过程称为“回滚”( rollback )。例如,如果一个事务成功更新了两个表,在更新第三个表时失败,则系统将两次更新恢复原状,并返回到原始的状态。


保持应用程序的完整性


十七、装饰器运行过程

# 装饰器

# 函数当参数传,是为了给里面的函数增加新功能(或者说加判断)

# 从outer往里走

# x 从当前层 开始寻找a, 找不到就往外寻找(从外不可以往里找)

# 1、从 outter 开始先定义了a=1 | 执行的条件outer(foo)

# 2、返回了一个inner的内存地址

# 3、inner加括号运行内层函数   inner加括号等于outer(foo)()

# 4 定义了x=a,print(x),运行函数foo(),最后返回foo()函数的执行结果=print('foo')

def foo():
    print('foo')

def outer(foo):
    a=1
    def inner(*args,**kwargs):
        x=a
        print(x)
        res=foo()
        return res
    return inner

foo=outer(foo)
foo()






内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: