面试题(3)

 

 


+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-
张贺,多年互联网行业工做经验,担任过网络工程师、系统集成工程师、LINUX系统运维工程师

+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-node


基础类

打包压缩

写出常见的打包工具和解压缩工具mysql

  • gzip FILE----->gzip -d FILE.gz
  • bzip2 FILE---->bzip2 -d FILE.bz2
  • xz FILE---->unxz FILE.xz
  • zip dir.zip dir----->unzip dir.zip
  • tar -zcf DIR.tar.gz DIR--------tar -zxf DIR.tar.gz
//打包/etc/passwd文件和/etc/issue文件,并以当前时间命名,保存到/tmp目录
tar -zcf /tmp/$(date +%Y-%m-%d-%H-%M-%S).tar.gz /etc/passwd /etc/issue

vim

vim的三种模式:编辑模式(进入时的默认模式)、插入模式、末行模式nginx

vim的替换如何作,例如把txt,替换成sh:%s@txt@sh@g面试

FIND

 // 把/etc/中大于50k小于200k的普通文件,复制到/tmp目录下面(四种方法)
 cp -arp `find /etc/ -size +50k -a -size -200k` /tmp
 find /etc -size +50k -a -size -200k -exec cp -arp {} /tmp \;
 find /etc/ -size +50k -a -size -200k | xargs cp -t /tmp
 find /etc/ -size +50k -a -size -200k | xargs -i cp -arp {} /tmp
//在/tmp目录下查看七天前建立的文件删除之
find $Path -type f -mtime +7 | xargs rm -f
三剑客

添加用户

用一条命令添加zhanghe01,zhanghe02,zhanghe03,zhanghe04,zhanghe05,使用固定密码cba-123,不容许用循环。正则表达式

第一步:生成用户
[root@centos7 ~]# echo zhanghe{01..05}
zhanghe01 zhanghe02 zhanghe03 zhanghe04 zhanghe05
[root@centos7 ~]# echo zhanghe{01..05} | tr ' ' '\n'
zhanghe01
zhanghe02
zhanghe03
zhanghe04
zhanghe05
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1
zhanghe01
zhanghe02
zhanghe03
zhanghe04
zhanghe05
第二步:生成命令	
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed -r 's@(.*)@useradd \1;@g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
useradd zhanghe05;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed -r 's@(.*)@useradd &;@g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
useradd zhanghe05;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;#g'
useradd zhanghe01;
useradd zhanghe02;
useradd zhanghe03;
useradd zhanghe04;
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;echo cba-123 | passwd --stdin &#g'
useradd zhanghe01;echo cba-123 | passwd --stdin zhanghe01
useradd zhanghe02;echo cba-123 | passwd --stdin zhanghe02
useradd zhanghe03;echo cba-123 | passwd --stdin zhanghe03
useradd zhanghe04;echo cba-123 | passwd --stdin zhanghe04
useradd zhanghe05;echo cba-123 | passwd --stdin zhanghe05
第三步:交给bash
[root@centos7 ~]# echo zhanghe{01..05} | xargs -n1 | sed 's#.*#useradd &;echo cba-123 | passwd --stdin &#g' | bash
更改用户 zhanghe01 的密码 。
passwd:全部的身份验证令牌已经成功更新。
更改用户 zhanghe02 的密码 。
passwd:全部的身份验证令牌已经成功更新。
更改用户 zhanghe03 的密码 。
passwd:全部的身份验证令牌已经成功更新。
更改用户 zhanghe04 的密码 。

这个题只是一个例子,重点还要掌握其思路,经过echo加序列的方式打开出全部的用户,而后再经过sed取出全部的用户,再而后经过sed 替换强行将取出的值塞入命令当中,最后交给bash,一样的,删除这些用户也是一样的思路,以下所示:redis

echo zhanghe{01..09} | xargs -n 1 | sed -r 's@(.*)@userdel -r \1@g' | bash

过滤身份证

请从test.txt文件当中过滤出正确的的身份证号码算法

[root@localhost test.dir]# cat test.txtsql

赵 370831199405162458vim

钱 370831199305162kjlcentos

孙 37083119920516245X

李 37083110516245887k

张 37083KKKKKKK990516

在LINUX当中,咱们要过滤文本时,咱们必定要搞清楚,要过滤的文本有什么特征,那么问题来了,身份证号有什么特征?

  1. 身份证号都是18位的
  2. 有的身份证号全都是数字,有的身份证号前17位是数字,最后一位是大写的X

好,那事情就简单了!

咱们先来知足第一个要求,即身份证号都是18位,18位!如何用正则表达式表示呢?其实没法用基本的正则表达式表达18位数字,须要用到扩展的正则表达式,即:{18};第二个要求就有点麻烦了,最后一位是什么不肯定,最后一位要么是数字要么是大写的X,“或”的关系,或的关系用扩展的正则表达式如何表达呢?要用到"|"这个符号,前面的17位数字却是容易了,数字经过[0-9]就能够表示了。

好,注意了,来了啊!两种方法均可以:

[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt
赵 370831199405162458 
孙 37083119920516245X 

#查找有18位数字的或者前17位是数字最后一位是X的行,把彻底是数字的号码与数字X混杂的号码分开考虑

[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt
赵 370831199405162458 
孙 37083119920516245X 

#查找前17位是数字后面跟一位数字或大写的X的行,把彻底是数字的号码与数字X混杂的号码放在一块儿考虑

好,如今增长难度!如今文件变成这样了:

[root@localhost test.dir]# cat test.txt
赵 370831199405162458 
钱 370831199305162kjl 
孙 39083119920516245X 
陈 37083119920516245X377
李 37083110516245887k 
张 37083KKKKKKK990516
[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt
赵 370831199405162458 
孙 39083119920516245X 
陈 37083119920516245X377   #出现了这个,不符合咱们的需求 #为何不符合要求呢?由于这这一行明显是超过了18位的要求
[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt
赵 370831199405162458 
孙 39083119920516245X 
陈 37083119920516245X377 #出现了这个,不符合咱们的需求

怎么办呢?咱们怎样才能只过滤出18位的呢?能够这样,以下所示:

//对egrep使用-w选项,-w精确匹配
[root@localhost test.dir]# egrep '[0-9]{18}|[0-9]{17}X' test.txt -w    
赵 370831199405162458 
孙 39083119920516245X 
[root@localhost test.dir]# egrep '[0-9]{17}[0-9X]{1}' test.txt -w
赵 370831199405162458 
孙 39083119920516245X

-w是什么意思呢?即锚定连续的字符,即锚定单词,精确匹配单词,仔细体会一下!

[root@n9 ~]# cat test2.txt
23
2423
7235
423
zh230.
[root@n9 ~]# egrep 23 test2.txt
23
2423
7235
423
zh230.
[root@n9 ~]# egrep -w 23 test2.txt
23

取IP

//切的思路,awk实现最快
[root@n9 ~]# ifconfig eth0 | awk 'NR==2{print $2}'
192.168.80.59

//替换的思路
ifconfig eth0 | sed -n 2p | sed -r 's@[[:space:]]+inet (.*) netmask.*@\1@g'

//过滤的思路
ifconfig eth0 | sed -n 2p | egrep -o "([0-9]{1,3}\.){3}[0-9]{1,3}" | head -1
192.168.80.59
存储相关

cache和buffer

缓冲和缓存在计算机的不少领域都有用到,咱们能够将其从IT领域内部抽离出来,用咱们生活的例子来讲。

我喜欢吃瓜子,一个个的吃不爽,我先忍住不吃,剥开以后都放到一个瓶子里面,等到这个瓶子装满以后,我一口气将全部的瓜子吃光,对我来讲,这个瓶子就是缓存。

剥下来的瓜子皮我不想一个个的扔,由于我住在七楼,我把全部的瓜子皮都放在一个小垃圾桶里面了,等到这个小垃圾桶满了以后我再去扔,对我来讲,这个小垃圾桶就是缓冲。

软硬连接

软连接和硬连接的理解要创建在文件系统的理解之上,这里就再也不赘述了。

硬连接:

硬连接是通往同一个inode块的不一样的名字而已,就像是超市有多个入口,堵上一个入口还能够从别的入口进去,硬连接能够用来备份。

硬连接不能对目录使用,也不能跨越分区,只能在同一个分区内对文件系统使用。

硬连接为何不能对目录使用呢?网上有不少人对这个机制有各类猜想,我则认为这没有什么意义!系统能够本身在目录下面对目录自己建立硬连接,可是不容许用户建立,就当这是一个硬性的规定,不用多去深研究。

对于硬连接不能跨文件系统这一点很好理解,不一样的文件系统内部的结构不一样的,好比这一个分区的inode块是66,而另外一个分区可能根本没有66号inode块,好比FAT文件系统,里面根本没有inode块!

软连接:

软连接就是一个文件,文件的内容不是文件的内容而是文件的路径。

软连接能够对目录使用,也能够跨越分区。

数据丢失

前两年,支付宝中止服务半小时,这对大型互联网公司来讲是很是严重的。像支付宝的的备份、容灾作的是很是好的(我猜应该是两地三中心),可是当他们的光缆被施工队给挖坏了以后,他们并无立马进行切换到异地的数据中心,而是等待光缆抢修恢复,这是为何呢?即便作了异地的容灾为何不用?当咱们作了异地的容灾,本地出了意外,咱们就要马上立刻恢复数据吗?
咱们首先要考虑的是什么?业务!成本!后果!风险!

咱们先说一下若是支付宝不切换数据中心的话,后果是什么?直接的损失就是用户的体验,半个小时以内不能用支付宝了,用户的钱还老老实实的存放在本地的数据中内心面,并且运营商会赔偿一部分的给支付宝的;若是支付宝切换数据中心的话,后果是什么?后果是颇有可能形成数据不一致的问题,由于用户的实时数据都在本地机房,把外网线给挖断了,可能有一部分数据没有实时同步到异地的数据中心,这时若是切换数据中心,颇有可能形成数据的不一致问题,这种问题就大了,假设用户帐户里面一共只有100万,当天消费了90万,还有10万,这个记录是存放在本地的数据中心,尚未同步到异地,切换了数据中心以后,该用户再次查看发现帐户上居然还有100万!若是用户趁这个机会,把这100给花了,这笔帐应该算到谁的头上?
支付宝的运维团队权衡利弊以后,权衡的什么?用户体验和用户的资金,考虑以后仍是决定等待光缆抢修恢复,这样用户虽然暂时不能用支付宝,用户体验有所损失,可是用户的钱不会出现意外,涉及到金钱的问题,安全和稳定压倒一切。

一样的问题,若是是快手和抖音这样的公司遇到呢?他们会不会切换数据中心呢?这个就不必定了,抖音和快手的用户就算是暂时丢失一部分数据,其实也没什么大不了的,又不是什么关键数据,我想快手和抖音的运维团队就颇有可能会进行数据中心的切换。

因此结论就是具体业务、具体问题,具体分析,技术要和业务挂钩才能更有价值。

RAID

raid 0 :空间叠加,无冗余,几块盘 均可以作,性能提高

reid 1 ;镜像卷,空间损失一半,有冗余,性能提高

raid 5 :起码三块盘,""加数+被加数=和"的关系,有冗余,性能提高。

定时任务

例0:天天凌晨3点作一次备份,备份/etc/目录到/backup下面

将备份命令写入到一个脚本中,天天备份文件名要求格式:当前时时间_文件名_tar.gz,不输出任何信息,存放的备分内容只存放三天的数据

[root@nginx scripts]# vim backup.sh
#!/bin/bash
tar -czf /backup/$(date +%F)_etc_tar.gz /etc/  &>/dev/null
find /backup -name *.tar.gz -mtime +3 | xargs rm -f

[root@nginx ~]# chmod +x /server/scripts/backup.sh 

[root@nginx ~]# crontab -e
0 3 * * * /bin/bash /backup/backup.sh

例2:每20秒打印hello!

***** for i in {0,1,2};do  /bin/echo “hello!”; sleep  20 ;done

这就表明每分钟,一分钟到了以后i就等于0,而后就运行echo hello!运行完成以后就睡20秒,20秒睡完了,i又等于1了,而后再打印,而后再睡20秒,而后i等于3,再打印,再睡着.............从而实现每隔20秒打印一次的效果。

网络相关

tcp有限机状态机

三次握手、四次挥手

以及实时的变化状态

icmp状态码

8:请求

0:响应

子网掩码划分

将192.168.80/24划分红四个子网。

答:掩码变成26位,即192.168.80.0/26

第一个子网范围:00

第二个子网范围:01

第三个子网范围:10

第四个子网范围:11

经常使用ping参数

-c :count指定个数

-I(大I)interface指定网卡

-s:size指定包的大小,经常使用于分析

568B线序列

橙白 | 橙 | 绿白 | 蓝 |蓝 白 | 绿 |棕 白| 棕

经常使用***

SSL ***

IPSEC ***

L2TP ***

MPLS ***

修改网络配置

//修改IP
ifconfig eth0 192.168.80.8/24
ip addr add 192.168.80.99/24 dev eth0
//默认IP配置文件经常使用参数
[root@n9 ~]# vim /etc/sysconfig/network-scripts/ifcfg-eth0 
TYPE="Ethernet"
NAME="eth0"
BOOTPROTO="static"
DEVICE="eth0"
ONBOOT="yes"
IPADDR=192.168.80.59
GATEWAY=192.168.80.1
PREFIX=24
DNS1=223.6.6.6
DNS2=8.8.8.8
//路由相关操做
route add default gw 192.168.80.1 eth0
route add -net 192.168.70.0/24 gw 192.168.80.1 eth0
route del -net 192.168.70.0/24
//修改DNS
[root@n9 ~]# cat /etc/resolv.conf
nameserver 192.168.80.1
nameserver 223.6.6.6
nameserver 8.8.8.8

二层和三层交换机

二层交换机没有路由功能,而三层交换机有路由功能。

OSI七层参考模型

物理层、链路层、网络层、传输层、会话层、表示层、应用层。

IPv4地址分类

A类:(1.0.0.0-126.0.0.0)(默认子网掩码:255.0.0.0或 0xFF000000)第一个字节为网络号,后三个字节为主机号。该类IP地址的最前面为“0”,因此地址的网络号取值于1~126之间。通常用于大型网络。

B类:(128.0.0.0-191.255.0.0)(默认子网掩码:255.255.0.0或0xFFFF0000)前两个字节为网络号,后两个字节为主机号。该类IP地址的最前面为“10”,因此地址的网络号取值于128~191之间。通常用于中等规模网络。

C类:(192.0.0.0-223.255.255.0)(子网掩码:255.255.255.0或 0xFFFFFF00)前三个字节为网络号,最后一个字节为主机号。该类IP地址的最前面为“110”,因此地址的网络号取值于192~223之间。通常用于小型网络。

D类:是多播地址。该类IP地址的最前面为“1110”,因此地址的网络号取值于224~239之间。通常用于多路广播用户[1] 。

在IP地址3种主要类型里,各保留了3个区域做为私有地址,其地址范围以下:
A类地址:10.0.0.0~10.255.255.255
B类地址:172.16.0.0~172.31.255.255
C类地址:192.168.0.0~192.168.255.255

dhcp的原理

dhcp是动态地址分配协议。

当主机启动以后会广播发送discover包,dhcp服务器收到单播offer包,客户再广播request,dhcp服务器再单播ack包。

递归和迭代

递归:

老板问我哪一家川菜馆好吃?我历来没去过川菜馆,我是不知道的,但我一个同窗的女友是四川人,因而我找到个人同窗,个人同窗又问了他女友,他女友将答案告诉了他,他又将答案告诉了我,我又将答案告诉了老板,这个过程对于老板来讲就是递归。

迭代:

老板问我哪个洗脚城有那种服务?我从业没去过洗脚城,我是不知道的,我让老板问问公关部的李经理,老板找到李经理,李经理对老板说让他问问销售部小孙,老板因而又找到小孙,小孙将答案告诉了老板,这个过程对老板来讲就是迭代。

什么是DDOS

假如说一家饭店只能接待100位客人,有一群流氓进入饭店,也不吃饭就那里坐着,并且把坐位都坐满了,结果正常的客户也没法进去吃饭,就这样耗着,这就是DDOS。

DNS解释过程

在运维笔试的时候,回答DNS解析的过程,不能写一大堆,一是不美观,二是浪费时间,应该怎么写呢?我以为这样写比较好。

一、客户端:chche----hosts

二、DNS服务器:cache---递归---将递归回来的结果缓存一份并发送一份到客户端。

三、客户端:客户端缓存并使用

DNS何时用udp、什么用tcp,为何这么设计

客户端解析的时候用udp,而区域传送时使用tcp
大多数状况下,DNS解析请求和响应都很小,使用UDP协议更加高效,虽然没有TCP可靠,可是速度快,消耗的系统资源更少,很是适合少许数据包的传输。
一些DNS事务,好比区域传输或其余附加查询,可能会产生大于512字节的数据包,所以使用TCP更加可靠,使用TCP会减小丢包和从新发包的状况,所以更加可靠与高效。

递归和迭代的区别

正向区域和反向区域

正向区域就是咱们日常使用的将域名解析成ip地址
反向区域经常使用于邮件领域,作反垃圾邮件时使用,将IP地址解析成域名。

NAT

最先接触NAT是在作网络工程师的时候,NAT是作网络工程师必需会的知识点和技能,后来在面试运维的时候也常常被用到,在运维的某些知识点当中也会被引用到,如iptables当中,LVS当中。

为何须要NAT(网络地址转换)?由于IPV4时代公网IP地址缺,因此公司内部一般用的就是私网地址,公司内网的数据想要在互联网上传播就要将私网的地址转换为公网的地址,NAT技术就要用来作这个事情的,所谓的转换其实就将私网地址替换成公网地址,就是这么简单。

网络地址转换分为源地址转换和目的地址转换。源地址转换就是将源地址转换一下,如何转换呢?就是将私网的源IP替换成公网接口的IP,替换的时候会有替换对应的记录,在路由器会体现为一张表。那为何会用到这张表呢?内网有不少电脑,都使用一个公网IP地址向公网发送数据包,那么当数据包回来的时候路由器怎么知道要将回包发送给哪个私网电脑,因此路由器在进行源地址转换的时候就须要生成一张对应表,这张对应表的做用就是当数据包回来的时候,路由器能够根据这张表知道将数据转发给哪个私网电脑。以上就是源NAT转换的基本原理,源NAT转换的根本目的是节省IPV4的公网地址。

此外还有一个目的地址转换,那么目的地址转换用在什么地方呢?目的地址转换用在内网DMZ区有服务器使用私网地址将服务发布到公网的场景中,客户端访问公网IP时,路由器就将公网IP替换成私网IP转换给私网DMZ区的服务器。

那么NAT地址用在什么地方呢?以前都是用在路由器上,但如今中低端的的路由器和防火墙逐渐有了整合的趋势,因此NAT也常见部署于网络出口防火墙上。

此外LVS里面的模式也有用到LVS的,原理差很少, 这里就不仔细说了。

若是笔试的时候若是问到这个问题,让咱们阐述NAT的原理?如何用最简单、直白的方式说明呢?不能长篇大论吧,写的多了即影响美观又浪费时间,最好的方式就是画图了,因此咱们去面试的时候最好是带着文具盒去,准备铅笔和橡皮,最好准备几张白纸,机会老是留给有准备的人。

DNS/CDN
  • DNS解析原理

  • 递归和迭代的区别

  • 什么是CDN?

  • 常见的CDN厂商:阿里云CDN、腾讯云CDN、360CDN、又拍云CDN、七牛云CDN。

  • 如何购买CDN?

  • CDN的原理?

redis

redis是什么?

侦听哪一个端口?6379

redis和memcache的区别?

redis持久化的两种类型(RDB、AOF)

主从复制基于哪一种持久化类型?

解决一下RDB和手工和自动两种模式?

AOF有些相似于binlog日志,很是精细。

redis的数据类型?(字符、字典、列表、集合、有序集合)

redis和mysql是如何解决数据一致性问题?

解释一下哨兵机制(sentinel)?

如何作主从复制?

memcache

是什么?两个做用?与redis有什么区别?

端口11211

memcache的读写流程?

Memcached服务特色及是什么? (c/s、键值存储、异步IO模型、非持久化、可设置过时时间)

memcach的内存管理机制?

删除机制?

分布式机制?

监控哪些指标:端口、命中率,反应时间

lvs

lvs的原理?

lvs、nginx、haproxy最本质的区别?

会话保持的三种方法?(调度到同一台服务器、会话复制、会话服务器)

怎样实现调度到同一台服务器?(ip/cookie/url/)

解释一下lvs的四种模型?NAT的缺点。

说出经常使用的LVS算法?

lvs+firewall mark是为何解决什么问题?以及如何解决这种问题的?

lvs有描述哪三种方式能够实现持久链接?(port/sh、firewall-mark、每客户端持久)

三种健康检查方式?

ldirectord 的做用是什么?与keepaalived有什么不同?

keepalived

为何须要keepalived

keepalived与lvs的关系?

keepalived的两种功能?

keepalived的原理?至关于vrrp的原理

为何会有脑裂问题?如何解决?

相关文章
相关标签/搜索