面试总结!
OSI七层模型:
什么是OSI七层模型?
我们需要了解互联网的本质是一系列的网络协议,这个协议就叫做OSI协议(开放系统互联(Open System Interconnection)),它是由ISO(国际标准化组织)定义的。
需要注意,随着时代的发展,OSI已经被TCP/IP 4层模型淘汰,在当今世界上并没有大规模的使用。
那么对于OSI,人们按照功能不同,分工不同,人为的将OSI的分为七层。实际上这七层是并不存在的,也就是说没有这些概念,而我们今天提到的七层概念,只是人为的划分而已。目的只是为了让大家更好地理解这些都是用来做什么的。
三次握手四次挥手
所谓三次握手,即建立TCP连接,需要客户端和服务端总共发送至少三个包确认连接的建立。
1.请求连接‘
2.响应请求连接
3.确认接受响应,建立连接
四次挥手:
1.请求释放
2.收到请求,响应等待
3.完成,响应接受释放
4. 响应彻底释放
tcp/ip协议
TCP/IP 协议栈是一系列网络协议的总和,是构成网络通信的核心骨架,它定义了电子设备如何连入因特网,以及数据如何在它们之间进行传输。TCP/IP 协议采用4层结构,分别是应用层、传输层、网络层和链路层,每一层都呼叫它的下一层所提供的协议来完成自己的需求。
http协议
超文本传输协议(Hyper Text Transfer Protocol,HTTP)是一个简单的请求-响应协议,它通常运行在TCP之上。它指定了客户端可能发送给服务器什么样的消息以及得到什么样的响应。请求和响应消息的头以ASCII形式给出;而消息内容则具有一个类似MIME的格式。这个简单模型是早期Web成功的有功之臣,因为它使开发和部署非常地直截了当。
tcp和udp的区别
1、连接方面区别
TCP面向连接(如打电话要先拨号建立连接)。
UDP是无连接的,即发送数据之前不需要建立连接。
2、安全方面的区别
TCP提供可靠的服务,通过TCP连接传送的数据,无差错,不丢失,不重复,且按序到达。
UDP尽最大努力交付,即不保证可靠交付。
3、传输效率的区别
TCP传输效率相对较低。
UDP传输效率高,适用于对高速传输和实时性有较高的通信或广播通信。
4、连接对象数量的区别
TCP连接只能是点到点、一对- -的。
UDP支持一对一,一-对多,多对一和多对多的交互通信。
linux常见指令
权限查看
ls -l file 查看文件权限
ls -ld dir 查看目录权限
chmod --reference=/tmp /mnt/westosdir : 复制/tmp目录的权限到/mnt/westosdir上
chmod -R --reference=/tmp /mnt/westosdir : 复制/tmp目录的权限到/mnt/westosdir及目录中的子文件上
umask $:查看保留权力
umask 权限值 $: 临时设定系统预留权力
chown username file 更改文件拥有者
chgrp groupname file 更改文件拥有组
本地系统软件仓库的作用
#在系统中对软件进行管理
#rpm命令是不能解决依赖关系的
#如果需要软件在安装过程中自动解决依赖关系
#需要大家系统软件仓库
【name】
name= ** baseurl=*** gpgcheck=*** enable=1
dnf repolist 列出仓库信息
dnf clean all 清除系统中已经加载的仓库缓存信息
dnf install 安装
dnf remove 卸载
dnf reinstall 重新安装
dnf search 搜索
进程和线程
进程是指程序运行时的形态
进程是资源调用的最小单位
线程是进程的最小单位
进程查看命令
ps aux()
top 动态进程查看
杀死僵尸进程:
用top查看
kill -hup pid 子进程
kill -hup ppid 父进程
进程前后台调用
+ 把占用shell的进程打入后台挂起
bg 把后台挂起的进程运行起来
fg 把后台进程调回前台
& 运行进程在后台
jobs 查看当前shell中在后台的所有工作
查看文件内容
cat
功能: 查看目标文件的内容
head -n
功能:查看文件前多少行
tail -n
功能:查看文件后多少行
sed -n ‘a,b’ filename
功能:查看指定行
file
功能:查看文件类型
wc
功能:统计文件容量
wc -l 统计文件行数
-m 统计文件字符数
-w 统计文件单词数
-c 统计文件字节数
pwd
功能:显示当前工作目录
grep -o 查询关键字
grep -o | wc -l 统计次数
vim管理
vim /etc/vimrc vim配置文件 for all user
yxy 复制x行
dxd 删除x行
cxc 剪切x行
批量添加字符:
<1> C t r l+ v 选中插入字符所在列
<2> 按大写I 进入插入模式
<3> 插入要写入的字符
<4> E S C 退出插入模式
0VER
批量修改字符
:%s/原字符/替换字符/g %s全文的行,g全文的列
1,5s/: /@@/g 1,5 1-5行
gg 光标移动到文件第一行行首
G 光标移动到最后一行
:数字 光标移动到指定行
用户信息查看
id 查看用户id信息
-u 查看用户的用户id
-g 查看用户主组id
-G 查看用户所有的组的id
-n 显示名称
日志管理
journalctl
-n 3 日志的最新3条
–since " 12:00:00" 显示12:00后的日志
–until “13:00:00” 显示日志到13:00
-o 设定日志的显示方式
ip配置
在 /etc/sysconfig/network-script/XX.conf
nmcli connection network
数据库
SHOW DATABASES; 显示库名称
USE mysql; 进入mysql库
SHOW TABLES; 显示库中的所有表
SELECT * FROM user; 查询所有数据
SELECT Host,User,Password FROM user; 查询指定字段
CREATE USER lee@localhost identified by ‘lee’; 只能用localhost登陆
CREATE USER lee@% identified by ‘%’; 可以通过网络或localhost登陆
GRANT INSERT,SELECT ON westos.* TO lee@localhost;
SHOW GRANTS for lee@localhost;
连表查询:
mysqladmin -uroot -pwestos password doudou 更改密码
mysqldump -uroot -pwestos --all-database 备份数据库中的所有数据
mysqldump -uroot -pwestos --all-database --no-data 备份所有库的表结构,不备份内容
mysqldump -uroot -pwestos sk> /mnt/westos.sql 备份数据库sk的所有信息,重定向到指定位置
mysql -uroot -pwestos sk < /mnt/westos.sql 将备份文件导入数据库
mysql主从复制
MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表。
主从复制的原理
①当Master节点进行insert、update、delete操作时,会按顺序写入到binlog中。
②salve从库连接master主库,Master有多少个slave就会创建多少个binlog dump线程。
③当Master节点的binlog发生变化时,binlog dump 线程会通知所有的salve节点,并将相应的binlog内容推送给slave节点。
④I/O线程接收到 binlog 内容后,将内容写入到本地的 relay-log。
⑤SQL线程读取I/O线程写入的relay-log,并且根据 relay-log 的内容对从数据库做对应的操作
mysql主从复制延迟的话
MySQL数据库主从同步延迟是怎么产生的?当主库的TPS并发较高时,产生的DDL数量超过slave一个sql线程所能承受的范围,那么延时就产生了,当然还有就是可能与slave的大型query语句产生了锁等待。首要原因:数据库在业务上读写压力太大,CPU计算负荷大,网卡负荷大,硬盘随机IO太高次要原因:读写binlog带来的性能影响,网络传输延迟。
MySql数据库从库同步的延迟解决方案
1)、架构方面
1.业务的持久化层的实现采用分库架构,mysql服务可平行扩展,分散压力。
2.单个库读写分离,一主多从,主写从读,分散压力。这样从库压力比主库高,保护主库。
3.服务的基础架构在业务和mysql之间加入memcache或者redis的cache层。降低mysql的读压力。
4.不同业务的mysql物理上放在不同机器,分散压力。
5.使用比主库更好的硬件设备作为slave总结,mysql压力小,延迟自然会变小。
2)、硬件方面
1.采用好服务器,比如4u比2u性能明显好,2u比1u性能明显好。
2.存储用ssd或者盘阵或者san,提升随机写的性能。
3.主从间保证处在同一个交换机下面,并且是万兆环境。
总结,硬件强劲,延迟自然会变小。一句话,缩小延迟的解决方案就是花钱和花时间。
3)、mysql主从同步加速
1、sync_binlog在slave端设置为0
2、–logs-slave-updates 从服务器从主服务器接收到的更新不记入它的二进制日志。
3、直接禁用slave端的binlog
4、slave端,如果使用的存储引擎是innodb,innodb_flush_log_at_trx_commit =2
4)、从文件系统本身属性角度优化
master端修改linux、Unix文件系统中文件的etime属性
binlog的模式
1、什么是binlog
binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。
默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog解析查看。
2.binlog的作用
当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里,这个文件就是上文说的binlog文件。使用mysqldump备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现数据库服务器故障,这个时候就要用到binlog的日志了。
iptables三表五链:
关于:默认策略中的5条链
input : 输入
output : 输出
forward : 转发
postrouting : 路由之后
prerouting : 路由之前
默认的3张表
filter : 经过本机内核的数据(input output forward)
nat : 不经过内核的数据(postrouting,prerouting,input,output)
mangle : 当filter和nat表不够用时使用(input output forward ,postrouting,prerouting,)
##端口更改为8080
firewall-cmd --permanent --add-port=8080/tcp
iptables命令
-t 指定表名称
-n 不做解析
-L 查看
-A 添加策略
-p 协议
–dport
firewalld
firewall-cmd --state 查看火墙状态
firewall-cmd --get-active-zones 查看当前火墙中生效的域
firewall-cmd --get-default-zone 查看默认域
firewall-cmd --list-all 查看默认域中的火墙策略
firewall-cmd --list-all --zone=work 查看指定域的火墙策略
firewall-cmd --set-default-zone=trusted 设定默认域
firewall-cmd --get-services 查看所有可以设定的服务
firewall-cmd --permanent --remove-service=cockpit 移除服务
firewall-cmd --reload
firewall-cmd --permanent --add-source=172.25.254.0/24 --zone=block 指定数据来源访问指定域
firewall-cmd --reload
firewall-cmd --permanent --remove-source=172.25.254.0/24 --zone=block 删除自定域中的数据来源
firewall-cmd --permanent --remove-interface=ens224 --zone=public 删除指定域的网络接口
firewall-cmd --permanent --add-interface=ens224 --zone=block 添加指定域的网络接口
firewall-cmd --permanent --change-interface=ens224 --zone=public 更改网络接口到指定域
fdisk -l : 查看磁盘分区情况
mount -o 挂载参数 device 挂载点
取消挂载:
umount 设备|挂载点
nginx双向代理
代理也被称为正向代理,是一个位于客户端和目标服务器之间的代理服务器,客户端将发送的请求和制定的目标服务器都提交给代理服务器,然后代理服务器向目标服务器发起请求,并将获得的结果返回给客户端的过程
反向代理的对象就是服务器,即代理服务代理的时服务器而不是客户端,它的作用现在是代替服务器接受请求,而不在像正向代理那样代理客户端。
安全性:
正想代理的客户端能够在隐藏自身的同时访问任意网站,这给网络安全带来了极大的威胁。因此,在使用时必须采取安全的措施,以确保仅为经过授权的客户端提供服务。而反向代理的客户端只能通过外网访问代理服务器,并且用户不知道自己访问的是一个代理服务器,好处就是反向代理将真正的处理放在内网中,有效的提高了网络安全。
docker
Docker是管理容器的引擎。
Docker为应用打包、部署平台,而非单纯的虚拟化技术
docker search yakexi007
docker load -i mario.tar ##本地加载
docker pull yakexi007/game2048
docker inmages
docker run -d --name demo -p 80:8080 mario
docker run -it --name demo busybox
docker ps -a
docker rmi demo:v1
docker rm demo删掉demo后,不影响v1镜像!
导入文件到镜像中:
cat Dockerfile
FROM busybox
RUN echo westos > testfile
k8s
Kubernetes不是一个容器化平台,而是一个多容器管理解决方案。
Docker提供容器的生命周期管理,Docker镜像构建运行时容器。但是,由于这些单独的容器必须通信,因此使用Kubernetes。因此,我们说Docker构建容器,这些容器通过Kubernetes相互通信。因此,可以使用Kubernetes手动关联和编排在多个主机上运行的容器。
.Kubernetes主要由以下几个核心组件组成
etcd:保存了整个集群的状态
apiserver:提供了资源操作的唯一入口,并提供认证、授权、访问控制、API注册和发现等机制
controller manager:负责维护集群的状态,比如故障检测、自动扩展、滚动更新等
scheduler:负责资源的调度,按照预定的调度策略将Pod调度到相应的机器上
kubelet:负责维护容器的生命周期,同时也负责Volume(CVI)和网络(CNI)的管理
Container runtime:负责镜像管理以及Pod和容器的真正运行(CRI)
kube-proxy:负责为Service提供cluster内部的服务发现和负载均衡
kubeadm init --pod-network-cidr=10.244
kubeadm join *********
kubectl apply -f kube-flannel.yml
kubectl get pod --namespace kube-system
kubectl run nginx --image=myapp:v1
kubectl get nodes
kubectl delete pod nginx
kubectl get pod -o wide
kubectl describr svc php-apache
kubectl delete sc managed-nfs-storage
Beta 测试与 Alpha 测试有什么区别?
–Beta testing(β 测试 ), 测试是软件的多个用户在一个或多个用户的实际使用环境 下进行的测试。 开发者通常不在测试现场 –Alpha testing (α 测试 ), 是由一个用户在开发环境下进行的测试, 也可以是公司内 部的用户在模拟实际操作环境下进行的受控测试