文章目录

  • 1、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?
  • 2、讲述一下Tomcat8005、8009、8080三个端口的含义?
  • 3、什么叫CDN?
  • 4、讲一下Keepalived的工作原理?
  • 4.1keepalived心跳包机制,如果master不再发心跳包怎么办?
  • 5、讲述一下LVS三种模式的工作过程?
  • 6、你常用的Nginx模块,用来做什么
  • 7、以下Python2和Python3的说法正确的有()
  • 8、某cpu32线程的服务器异常卡顿,top命令输出如下,可能反映出的问题是?
  • 9、关于Linux系统的负载(Load),以下表述正确的是?()
  • 10、请简述操作系统分页式内存管理机制,并介绍下进程fork时对内存的copy on write实现原理。
  • 11、计算出从你生日之日起到今天一共过了多少天?(python、go、shell均可)
  • 12、讲述你如何做系统优化,提高系统性能,充分利用资源?
  • 13、ddos攻击是什么?怎么防御?
  • 14、了解raid0 raid1 raid5不
  • 15、python都用过什么模块?
  • 16、如何查看一个端口被那个程序占用
  • 17、iptable命令如何实现拒绝一个ip和端口的访问,drop和reject有何区别
  • 18、了解排序么?哪些是稳定型,哪些是不稳定的?
  • 19、了解编译型语言和非编译型语言的区别么?
  • 20、查看一个端口被占用,然后如何拒绝
  • 21、kill 和kill -9区别
  • 22、cpu负载较高,用什么指令,什么方法
  • 22.1 ``CPU负载较高,有什么方法可以解决?``
  • 22.2 cpu 负载比例怎么算的
  • 23、ping和traceroute用了什么协议
  • 23.1 两台主机A和B, A能ping通B而B不能Ping通A是什么原因?
  • 24、python深浅拷贝,python的浅copy和深copy。a=[1,2,[3,4]] b=a b[-1]=2 a 会变吗? 【会变】
  • 25、反向代理和负载均衡区别?
  • 26、Mysql主从架构实现过程
  • 27、知道什么linux命令,如何查看incode节点信息,满了怎么办
  • 28、Linux 开机步骤,如果想在开机时更改为单用户模式怎么办?
  • 29、TCP第二次握手失败两边服务器会做什么操作,如何防止SYN攻击?
  • 30、Python 中类函数和静态函数有什么区别,列表元组的区别,分别用在什么场景下,哪个占用资源更少
  • 31、Python中字符串反转的方法有哪些.
  • 32、shell 如何判断一个文件是否存在


1、LVS、Nginx、HAproxy有什么区别?工作中你怎么选择?

LVS: 是基于四层的转发
HAproxy: 是基于四层和七层的转发,是专业的代理服务器
Nginx: 是WEB服务器,缓存服务器,又是反向代理服务器,可以做七层的转发

区别: LVS由于是基于四层的转发所以只能做端口的转发;而基于URL的、基于目录的这种转发LVS就做不了,就需要HAproxy

工作选择:
1.HAproxy和Nginx由于可以做七层的转发,所以URL和目录的转发都可以做
2.在很大并发量的时候我们就要选择LVS
3.中小型公司的话并发量没那么大,选择HAproxy或者Nginx足已,由于HAproxy由是专业的代理服务器配置简单,所以中小型企业推荐使用HAproxy

2、讲述一下Tomcat8005、8009、8080三个端口的含义?

8005==> 关闭时使用
8009==> 为AJP端口,即容器使用,如Apache能通过AJP协议访问Tomcat的8009端口
8080==> 一般应用使用

3、什么叫CDN?

CND即内容分发网络,其目的是通过在现有的Internet中增加一层新的网络架构,将网站的内容发布到最接近用户的网络边缘,使用户可就近取得所需的内容,提高用户访问网站的速度

4、讲一下Keepalived的工作原理?

keepalived的工作原理是VRRP(Virtual Router Redundancy Protocol)虚拟路由冗余协议。 Vrrp中存在着一种选举机制,用以选出提供服务的路由即主控路由,其他的则成了备份路由。当主控路由失效后,备份路由中会重新选举出一个主控路由,来继 续工作,来保障不间断服务。
在VRRP中有两组重要的概念:VRRP路由器和虚拟路由器,主控路由器和备份路由器。
VRRP 路由器是指运行VRRP的路由器,是物理实体,虚拟路由器是指VRRP协议创建的,是逻辑概念。一组VRRP路由器协同工作,共同构成一台虚拟路由器。

4.1keepalived心跳包机制,如果master不再发心跳包怎么办?

keepalived的主节点会定期往备节点发送心跳包,当备节点没有接收到心跳包的时候,会认为主节点挂了,那么他就会接过主节点的责任对外提供服务,表现形式就是备节点上出现了虚拟IP。这时有可能发生keepalived脑裂情况。
检测思路:正常情况下keepalived的VIP地址是在主节点上的,如果在从节点发现了VIP,就设置报警信息。

5、讲述一下LVS三种模式的工作过程?

LVS 有三种负载均衡的模式,分别是VS/NAT(nat 模式) VS/DR(路由模式) VS/TUN(隧道模式)
5.1 NAT模式(VS-NAT)
原理:就是把客户端发来的数据包的IP头的目的地址,在负载均衡器上换成其中一台RS的IP地址并发至此RS来处理,RS处理完后把数据交给负载均衡器,负载均衡器再把数据包原IP地址改为自己的IP将目的地址改为客户端IP地址即可期间,无论是进来的流量,还是出去的流量,都必须经过负载均衡器

优点:集群中的物理服务器可以使用任何支持TCP/IP操作系统,只有负载均衡器需要一个合法的IP地址

缺点:扩展性有限。当服务器节点(普通PC服务器)增长过多时,负载均衡器将成为整个系统的瓶颈.因为所有的请求包和应答包的流向都经过负载均衡器。当服务器节点过多时大量的数据包都交汇在负载均衡器那,速度就会变慢!
5.2 IP隧道模式(VS-TUN)
原理:首先要知道,互联网上的大多Internet服务的请求包很短小,而应答包通常很大那么隧道模式就是,把客户端发来的数据包,封装一个新的IP头标记(仅目的IP)发给RS,RS收到后,先把数据包的头解开,还原数据包,处理后,直接返回给客户端,不需要再经过负载均衡器。注意,由于RS需要对负载均衡器发过来的数据包进行还原,所以说必须支持IPTUNNEL协议,所以,在RS的内核中,必须编译支持IPTUNNEL这个选项

优点:负载均衡器只负责将请求包分发给后端节点服务器,而RS将应答包直接发给用户所以,减少了负载均衡器的大量数据流动,负载均衡器不再是系统的瓶颈,就能处理很巨大的请求量,这种方式,一台负载均衡器能够为很多RS进行分发。而且跑在公网上就能进行不同地域的分发。

缺点:隧道模式的RS节点需要合法IP,这种方式需要所有的服务器支持”IP Tunneling”(IP Encapsulation)协议,服务器可能只局限在部分Linux系统上

5.3 直接路由模式(VS-DR)
原理:负载均衡器和RS都使用同一个IP对外服务但只有DR对ARP请求进行响应所有RS对本身这个IP的ARP请求保持静默也就是说,网关会把对这个服务IP的请求全部定向给DR而DR收到数据包后根据调度算法,找出对应的RS,把目的MAC地址改为RS的MAC(因为IP一致)并将请求分发给这台RS这时RS收到这个数据包,处理完成之后,由于IP一致,可以直接将数据返给客户,则等于直接从客户端收到这个数据包无异,处理后直接返回给客户端,由于负载均衡器要对二层包头进行改换,所以负载均衡器和RS之间必须在一个广播域也可以简单的理解为在同一台交换机上

优点:和TUN(隧道模式)一样,负载均衡器也只是分发请求,应答包通过单独的路由方法返回给客户端与VS-TUN相比,VS-DR这种实现方式不需要隧道结构,因此可以使用大多数操作系统做为物理服务器。

缺点:(不能说缺点,只能说是不足)要求负载均衡器的网卡必须与物理网卡在一个物理段上。

6、你常用的Nginx模块,用来做什么

rewrite模块,实现重写功能
access模块:来源控制
ssl模块:安全加密
ngx_http_gzip_module:网络传输压缩模块
ngx_http_proxy_module 模块实现代理
ngx_http_upstream_module模块实现定义后端服务器列表
ngx_cache_purge实现缓存清除功能

7、以下Python2和Python3的说法正确的有()

正确答案: A B C D
A、Python3使用 print 必须要以小括号包裹打印内容
B、Python2中使用ascii编码,Python3中使用utf-8编码
C、 Python2中是raw_input()函数,Python3中是input()函数
D、Python2中range(1,10)返回列表,Python3中返回迭代器

8、某cpu32线程的服务器异常卡顿,top命令输出如下,可能反映出的问题是?

[host@test ~]# top
top - 10:38:52 up 288 days, 23:42, 2 users, load average: 32.50, 31.25, 31.71
Tasks: 407 total, 1 running, 405 sleeping, 1 stopped, 0 zombie
%Cpu(s): 0.1 us, 0.1 sy, 0.0 ni, 99.9 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st
KiB Mem : 13191774+total, 13625808 free, 3012256 used, 11527968+buff/cache
KiB Swap: 12582908 total, 12582908 free, 0 used. 12415273+avail Mem
A.系统进程消耗的CPU 时间比较多
B.cpu使用率过低
C.cpu使用率过高
D.程序异常,上下文切换频繁
1分钟Load>5,5分钟Load>5,15分钟Load>5:短中长期都繁忙,系统“正在拥塞

9、关于Linux系统的负载(Load),以下表述正确的是?()

A.表示处于就绪状态,等待CPU执行的进程数
B.可以通过top命令查看
C.可以通过uptime查看

D.Load:2.5,1.3,1.1表示系统的负载压力在逐渐减少(不能判断)

10、请简述操作系统分页式内存管理机制,并介绍下进程fork时对内存的copy on write实现原理。

(1)逻辑地址和物理地址分离的内存分配管理方案,程序的逻辑地址划分为固定大小的页,物理地址划分为同样大小的帧,通过页表对应逻辑地址和物理地址
(2)内核fork()(创建一个子进程)时并不复制整个进程地址空间,而是让父子进程共享一个地址空间—》只有在需要写入时,数据才会被复制,从而使各个进程拥有各自的拷贝数据。也就是说,只有在需要写入的时候才复制资源,在此之前,以只读方式共享

11、计算出从你生日之日起到今天一共过了多少天?(python、go、shell均可)

#!/bin/bash
brith_day=$(date -d "1997-06-25" +%s)
now_day=$(date -d "2020-09-17" +%s)
s=$[now_day-brith_day]
my_days=$[s/86400]
echo $my_days

12、讲述你如何做系统优化,提高系统性能,充分利用资源?

(1)优化内存,把不需要的服务关掉(2)定期清理备份文件,加大磁盘使用空间
(3)/etc/sysctl.conf文件做内核优化
(4)文件句柄数(打开最大文件数)调到65535(直接把ulimit -SHn 65535命令加入/etc/rc.d/rc.local)
echo " ulimit -HSn 65535" >>/etc/rc.d/rc.local
echo " ulimit -s 65535" >>/etc/rc.d/rc.local
(5)通过修改应用软件的配置文件,对服务进行优化,提高内存、CPU的使用率

13、ddos攻击是什么?怎么防御?

14、了解raid0 raid1 raid5不

raid0:由2或2的n次方个磁盘组成,安全性最差,成本最低且读写能力高、没有冗余。
raid1:由大于等于2个盘组成,安全性最高,成本最高且读写能力低、提供冗余。
raid5:由大于等于3个盘组成,安全性在raid0和raid1之间,成本折中且读写能力低。

15、python都用过什么模块?

os os.path re sys time string math

16、如何查看一个端口被那个程序占用

lsof -i:端口号

17、iptable命令如何实现拒绝一个ip和端口的访问,drop和reject有何区别

iptables -I INPUT -s ip地址 -p TCP --dport 端口 -j DROP

REJECT动作:会返回一个拒绝(终止)数据包(TCP FIN或UDP-ICMP-PORT-UNREACHABLE),明确的拒绝对方的连接动作。
DROP动作:只是简单的直接丢弃数据,并不反馈任何回应。需要Client等待超时,Client容易发现自己被防火墙所阻挡。

18、了解排序么?哪些是稳定型,哪些是不稳定的?

19、了解编译型语言和非编译型语言的区别么?

20、查看一个端口被占用,然后如何拒绝

netstat -lnutp | grep 端口  #查看端口是否被占用
lsof -i:端口  #查看端口的Pid
kill -9 pid  #杀掉该端口的pid

21、kill 和kill -9区别

kill发送SIGTERM(15)信号给进程,告诉进程你需要关闭。
kill -9表示强制杀死进程,发送的是SIGKILL信号给进程。

22、cpu负载较高,用什么指令,什么方法

平均负载(load average)是一段时间内系统的平均负载,1分钟、5分钟、15分钟
可以通过top或者uptime命令查看系统的平均负载

[root@node1 ~]# uptime
 11:20:17 up 16 min,  2 users,  load average: 0.00, 0.03, 0.09

22.1 CPU负载较高,有什么方法可以解决?

情况一:top命令查看对cpu消耗大的进程,直接输入"k",然后输入相应进程的PID号即可终止该进程
情况二:cpu很空闲,但是负载比较高的情况
可能是由于僵死进程导致的。可以通过指令 ps -axjf 查看是否存在 D 状态进程。 D 状态是指不可中断的睡眠状态。该状态的进程无法被 kill,也无法自行退出。只能通过恢复其依赖的资源或者重启系统来解决。

22.2 cpu 负载比例怎么算的

每个程序占用的cpu时间和除以总的cpu时间

23、ping和traceroute用了什么协议

ICMP 协议(互联网控制报文协议)工作于传输层和网络层之间,但由于需要网络层的封装,因此认为是 网络层的协议。
ping 是查询报文的应用,主动查询类型为8,主动查询类型的应答为0。
tracerout 是差错报文的应用,细分为两个功能,一个是追踪路由(到终点:端口不可达;未到终点:超时),另一个是确定路径MTU(通过设置不分片完成)

23.1 两台主机A和B, A能ping通B而B不能Ping通A是什么原因?

可能是A防火墙的问题。

24、python深浅拷贝,python的浅copy和深copy。a=[1,2,[3,4]] b=a b[-1]=2 a 会变吗? 【会变】

1.赋值:值和地址都复制了2.拷贝:拷贝对象后,就拥有了一个新的内存地址。
浅拷贝:只拷贝第一层对象,子对象藕断丝连。
深拷贝:使用递归的方式拷贝,两个对象没有任何关系
注1:元组和字符串是不可变类型,深浅拷贝之后,只有一份内存
注2:元组里面有列表子对象时,浅拷贝还是拷贝第一层对象还是个元组所以只有一份内存;深拷贝是递归拷贝里面有列表所以有不同的内存空间

问1:a=[1,2,[3,4]] b=a b[-1]=2 a 会变吗?
答:会变
问2:a=[1,2,[3,4]] b浅拷贝a a[2].append(5) b会变吗?
答:会变
>>> a=[1,2,[3,4]]
>>> import copy
>>> b=copy.copy(a)
>>> b              #浅拷贝,只拷贝第一层对象,子对象藕断丝连          
[1, 2, [3, 4]]
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5]]
>>> b
[1, 2, [3, 4, 5]]
>>> a is b         #拷贝对象,获得一个新的内存地址
False
问3:a=[1,2,[3,4]] b深拷贝a a[2].append(5) b会变吗?
答:不会变
>>> a=[1,2,[3,4]]
>>> import copy
>>> b=copy.deepcopy(a)
>>> b
[1, 2, [3, 4]]
>>> a[2].append(5)
>>> a
[1, 2, [3, 4, 5]]
>>> b             #深拷贝,递归拷贝,两个对象没有任何关系
[1, 2, [3, 4]]
>>> a is b        #拷贝对象,获得一个新的内存地址
False

25、反向代理和负载均衡区别?

关系:
反向代理,是把一些静态资源存储在服务器上,当用户有请求的时候,就直接返回反向代理服务器上的资源给用户,而如果反向代理服务器上没有的资源,就转发给后面的负载均衡服务器,负载均衡服务器再将请求分发给后端的web服务器。
区别:
反向代理服务器是需要存储资源的,让用户更快速的接收到资源。
负载均衡就是,为了保证后端web服务器的高可用,高并发,是不需要要存储资源,只需要转发用户的请求。

26、Mysql主从架构实现过程

27、知道什么linux命令,如何查看incode节点信息,满了怎么办

ls -i
df -ih

背景:磁盘无法写入,查看df -hT发现空间是足够的,那么应该是inode满了,使用df -ih查看然后inode使用率100%
解决思路:
1、磁盘inode满了,应该是小文件过多导致的。
2、查找出所有的小文件,然后删除不需要的小文件

解决方法:
1、取出磁盘下每个文件夹下面的文件数量
for i in ls /;do find /$i -type f | wc -l >> 1.txt && echo $i >> 1.txt;done;
2、找到对应的文件夹然后手动删除掉即可

28、Linux 开机步骤,如果想在开机时更改为单用户模式怎么办?

如果是关机要开机时:只要进入启动画面之后,敲入“e”,把光标移动到kernel …那一行,再敲入“e”,在kernel 一行的最后加上空格single,回车敲入“b”,启动系统,即进入单用户模式。
如果是已经登入系统的话:init 1

29、TCP第二次握手失败两边服务器会做什么操作,如何防止SYN攻击?

过程:syn攻击是基于TCP连接的三次握手的半连接,属于DOS攻击。攻击者发送完第一次握手后,服务器维护一个未连接队列并发送回复,但是攻击者不发送第三次握手的ack,造成服务器会等待,浪费CPU和内存,在半连接存活时间内有大量的半连接就会造成服务器无法服务现象。

防御:减小超时时间;SYN网关和SYN代理;增大最大半连接数;SYN cookies技术
SYN Cookie是对TCP服务器端的三次握手协议作一些修改,专门用来防范SYN Flood攻击的一种手段。它的原理是,在TCP服务器收到TCP SYN包并返回TCP SYN+ACK包时,不分配一个专门的数据区,而是根据这个SYN包计算出一个cookie值。在收到TCP ACK包时,TCP服务器在根据那个cookie值检查这个TCP ACK包的合法性。如果合法,再分配专门的数据区进行处理未来的TCP连接。

30、Python 中类函数和静态函数有什么区别,列表元组的区别,分别用在什么场景下,哪个占用资源更少

31、Python中字符串反转的方法有哪些.

reverse()方法
切片[::-1]

32、shell 如何判断一个文件是否存在

[ -f 文件名 ]

1.502和204区别?
502是指错误网关或无效网关。
504是指网关超时。 服务器作为网关或代理,但是没有及时从上游服务器收到请求。
304:服务器资源未变化
2.ARP攻击是什么?
arp攻击就是arp欺骗。
使用别人的IP地址和自己的MAC地址向目标主机发送ARP包
欺骗成功后,目标发给别人IP地址的数据,都会发到你对应的MAC地址的设备上。
3.http与https的区别?HTTPS(超文本传输安全协议)
http是明文传输,https是加密的安全传输;3) 连接的端口不一样,http是80,https是443;4)http连接很简单,没有状态;https是ssl加密的传输,身份认证的网络协议,相对http传输比较安全。
4.什么情况下会发生死锁?解决死锁的策略有哪些?
死锁产生的原因:①多个进程竞争不可剥夺资源②进程推进顺序不当。
解决死锁的方法:①预防死锁,即破坏死锁的四个必要条件,不过互斥条件一般不破坏②死锁避免,采用银行家算法③死锁的检测及解除
5.请你讲讲http1.1和1.0的区别
HTTP/1.0中默认使用短连接。也就是说,客户端和服务器每进行一次HTTP操作,就建立一次连接,任务结束就中断连接。
HTTP/1.1起,默认使用长连接,用以保持连接特性。在使用长连接的情况下,当一个网页打开完成后,客户端和服务器之间用于传输HTTP数据的TCP连接不会关闭,客户端再次访问这个服务器时,会继续使用这一条已经建立的连接。