题目:
(全程大概50来分钟左右,面试官挺好的,不清楚的问题也在一直引导我,总体来说非常好,挺喜欢这个面试官的)
1、自我介绍
2、讲讲文件的权限以及把目录下所有文件都修改
文件的权限 rwx --> 读写执行 chmod 修改
chown 修改文件的所有者和所属组 —R 递归修改该目录下的文件
3、一个目录下有大量的文件,比如百万/千万条文件,怎么删除?
不能用rm -rf命令删除,会报参数过长,应该是把文件名当作参数传给rm
删除的话,可以考虑用写shell脚本,用一个for循环删除
rsync 命令可以快速删除百万的数据
4、找到/data目录下的.log文件并且30天以上没有访问的文件并把它移动到/tmp目录下
find /data -name "*.log" -atime +30 -exec mv {} /tmp \;
5、ansible要想快速去探测机器的健康状态用什么模块
ping模块用于测试目标主机的连通性
ansible all -m ping
6、假如你有一百台服务器要管理,但每台服务器的密码不一样怎么管理
1、配置 Inventory 文件:Ansible 的 Inventory 文件用于定义要管理的主机,以及主机的账号和密码
2、使用 SSH 密钥认证,并将公钥部署到对应的服务器上,实现无密码登录
3、使用 Ansible Vault:Ansible Vault 可以用于加密敏感信息,如密码
7、一百个机器要分两批,怎么做
分组,ansible清单文件可以分组
8、介绍一下四次挥手
第一次挥手:客户端没有东西要发给服务端时,客户端会发起一个fin报文,报文中会指定一个seq序号,这时客户端处于fin_wait状态。
第二次挥手:服务端收到客户端发来的报文,立即发出确认报文,ack=seq+1,服务端进入close_wait状态
第三次挥手:服务端也没有数据要发送的时候,会向客户端发送一个fin包,也会有个seq值,服务端进入lask_ack状态。
第四次挥手:客户端收到之后进行确认,客户端进入time_wait状态,等待2msl,服务端进入closed状态。
9、close_wait在哪个状态出现的
第二次挥手的时候
10、为什么要四次挥手
当客户端向服务端传输数据完成之后,会请求断开连接,会发送fin包,服务端收到之后进行一个确认,如果是三次,服务器端如果有数据没有接收完成或者内部还有请求没有处理,他就不能断开,这是客户端以为服务端没有收到数据,又由于tcp的可靠传输,会进行重发,浪费资源。
11、linux中怎么查看tcp连接状态
使用netstat或ss命令来查看 TCP 连接状态
12、如果用了tcp协议,数据是一定不会丢的嘛
使用 TCP 协议并不能保证数据一定不会丢失,但 TCP 协议通过一系列机制来最大程度地减少数据丢失的可能性,并在数据丢失时采取措施进行恢复。
TCP 协议提供了可靠的数据传输服务,它通过以下方式来保证数据的可靠性:
确认和重传机制:发送方发送数据后,接收方会返回确认消息(ACK)。如果发送方在一定时间内没有收到确认,就会重传数据。
序列号和确认号:TCP 为每个发送的数据段分配一个序列号,接收方通过确认号告知发送方已经成功接收的数据段,从而确保数据的顺序和完整性。
流量控制:通过接收窗口机制,防止发送方发送速度过快导致接收方缓冲区溢出而丢失数据。
拥塞控制:避免网络拥塞导致的数据丢失。
然而,尽管有这些机制,在某些极端情况下,数据仍然可能丢失,例如网络故障非常严重、服务器崩溃、缓冲区溢出等。但相比之下,TCP 协议在大多数正常和可恢复的网络环境中能够提供较高的数据可靠性
13、mysql的主从复制的原理是什么
mysql主从复制用于数据库读写分离技术,适用于数据库并发量比较大的情况,主数据库用于写数据,从数据库用于查数据,主数据库需要开启二进制日志,并设置一个给从数据库的复制的账号,授权给他,在数据库的配置文件中写下server-id用于区分,从服务器开启向主服务器复制的日志命令,从服务器读取主服务器的二进制日志来保证数据跟主服务器一致。(在从数据库中会有2个线程,一个i/o线程,一个sql线程,i/o线程用来连接主服务器,读取主服务器的二进制日志,然后写入到自己的中继日志中,而sql线程就是监控自己的中继日志,发生变化时就会将对应的数据写入数据库中)
14、二进制日志文件都是什么
日志里面有一些sql语句,时间节点撒,节点位置的
15、部署主从复制有什么好处
1、读写分离:将读操作分配到从服务器,减轻主服务器的读压力,从而提高系统的整体性能和并发处理能力。
2、高可用性:即使主服务器出现故障,从服务器可以迅速接管服务,保障业务的连续性
3、数据备份和容灾:从服务器可以作为主服务器数据的实时备份,当主服务器出现故障时,能够快速切换到从服务器,减少数据丢失和业务中断的风险
16、redis的持久化方式
1.rdb:通过在指定时间间隔内将数据集快照写入磁盘来实现持久化,恢复大数据集的速度比aof快,对cpu和内存的影响比较小,但数据也会有部分的丢失。
2.aof:AOF 持久化记录每个写操作的命令,比较稳定,数据完整性更好,对数据安全性要求比较高,
3.混合持久化方式:集成了aof和rdb的优点。既保证了redis的启动速度,也降低了数据丢失的风险
17、 aof文件越来越来时,除了启动redis比较慢,还有撒缺点
1、文件占用大量磁盘空间:随着 AOF 文件的不断增长,会占用较多的磁盘存储空间。
2、AOF 重写的开销:虽然 Redis 提供了 AOF 重写机制来压缩文件大小,但重写过程本身也会消耗一定的系统资源。
数据恢复时间较长:在需要从 AOF 文件进行数据恢复时,由于文件较大,恢复过程可能会比较耗时。
3、可能影响主从复制效率:在主从复制场景中,较大的 AOF 文件可能会增加数据同步的时间和网络带宽的消耗。
4、对文件系统的压力:频繁的写入操作可能对文件系统造成一定的压力,尤其是在文件较大的情况下。
18、aof文件本身是通过追加命令的方式写入,这个时候内存也要读入,磁盘也要写入,那么他的瓶颈是撒
磁盘 I/O 性能:频繁的磁盘写入操作可能会受到磁盘本身的读写速度限制,如果磁盘性能较低,大量的写入请求可能会导致 I/O 阻塞,影响整体性能
19、redis的高可用有哪些
redis的主从复制
redis的哨兵模式
redis集群:通过数据分片,将数据分布在多个节点上,实现自动的故障检测和故障转移
20、讲讲redis的哨兵模式
Redis哨兵模式是是一个管理多个 Redis 实例的工具,它可以实现对 Redis 的监控、通知、自动故障转移,是Redis实现高可用 的实现方案。
redis的哨兵模式是基于redis的主从复制模式实现的,redis提供的主从复制模式可以用来解决单点故障的问题,但是不能解决故障转移能力,当主节点挂了之后,整个集群就失去了写能力,所以加入了哨兵模式,哨兵会监控redis实例,哨兵节点以固定的时间向所有的主从节点发送ping命令。如果发现主节点挂了,就会给其他从节点发送信息,其他从节点根据与主节点的连接情况,来投票判断主节点有没挂掉,如果赞成的票数大于配置文件的所写的数,就会基于raft算法基于一个主哨兵节点来执行故障转移的操作。缺点就是:
1、哨兵模式下只有主节点来处理写请求,存储能力和写能力受限于单机瓶颈。
2、主从切换的瞬间存在访问瞬断的情况
21、写一个sql,就是查询某个字段第二大的数据怎么写
select id from student order by id limit 1 offset 1
22、问了我有没有学习k8s
23、在浏览器输入网址到显示页面那一刻,都发生了哪些流程
当浏览器访问一个网站时,通常会经历以下过程:
1、DNS解析:浏览器首先会根据URL中的域名去DNS服务器查询对应的IP地址,如果缓存中有记录则会直接返回IP地址。
2、建立TCP连接:浏览器会与Web服务器建立TCP连接,通过三次握手确保双方连接成功。
发送HTTP请求:TCP连接建立后,浏览器会向Web服务器发送HTTP请求。
3、服务器响应请求:Web服务器接收到请求后会进行处理,并返回对应的HTTP响应。
4、浏览器解析渲染页面:浏览器收到HTTP响应后,会对响应进行解析,解析出HTML、CSS、JavaScript等资源,并进行渲染,最终呈现在用户的屏幕上。
5、连接结束:当页面渲染完毕后,TCP连接会被关闭,整个页面请求过程结束。
6、在这个过程中,还可能涉及到一些其他的步骤,比如重定向、缓存等,但以上六个步骤是最基本和核心的
24、发送请求到https加密的过程
当发送请求到 HTTPS 加密的网站时,大致会经历以下过程:
客户端发起请求:客户端(如浏览器)向服务器发送连接请求,请求访问特定的 HTTPS 网址。
服务器响应并发送证书:服务器接收到请求后,返回其数字证书给客户端。证书包含服务器的公钥、服务器的名称等信息,由权威的证书颁发机构(CA)签名。
客户端验证证书:客户端使用内置的信任根证书列表来验证服务器证书的有效性和签名。如果验证通过,说明服务器是可信的;否则,会提示警告或阻止连接。
生成会话密钥:客户端生成一个对称加密的会话密钥,然后使用服务器的公钥对会话密钥进行加密,并发送给服务器。
服务器解密获取会话密钥:服务器使用其私钥解密收到的加密会话密钥,从而双方都拥有了相同的会话密钥。
加密通信:接下来,客户端和服务器之间使用这个会话密钥对传输的数据进行对称加密,实现安全的通信。
在整个过程中,非对称加密(用于交换会话密钥)和对称加密(用于实际数据传输)相结合,确保了通信的机密性、完整性和真实性。
25、dockerfile的exec和shell格式的区别
exec 格式要求指定的可执行文件,并将参数传递给它
shell 格式会在一个默认的 shell(通常是 /bin/sh -c)中执行指定的命令
26、docker里跑了一个服务,你怎么确认这个服务有没有问题
1、我觉得最直接的解决就是直接执行这个服务相关的命令,比如检查这个mysql容器有没有挂掉,执行个查询语句撒的,就知道有没有问题
使用 docker ps 命令查看容器的状态,或者看看docker的日志出现撒错误没
在腾讯会议写:
27、aaaaa bbbb ccc aaaaa aaaaa aaaaa ccc bbbb ccc aaaaa dd bbbb bbbb按照出现次数去排序
28、[1,2,3,4,4,4,4,5,6,7,6]拿出和为7的下标,用python实现
29、nginx的日志中不是有一个状态码,把4xx的状态码统计出来,把次数排序,然后4xx不同的状态码进行相加
然后差不多就是这些了