面试题收集册(一)

Web

1、nginx优化哪些、有没有做过nginx支持https的访问,怎么配置

1、修改用户和组
2、网页压缩
3、防盗链
4、隐藏版本号
5、修改缓存时间
6、日志切割
7、设置连接超时机制
8、更改进程数
9、I/O事件配置中使用epoll模型,提高性能

做过,主要需要ssl服务器证书支持,可以使用sll模块生成,生成完之后编辑nginx配置文件,新增server节点,监听443端口,编辑完成后重启nginx服务

2、nginx前端页面/图片加载不出来,如何排查

1、查看网络是否通畅
2、查看服务是否启动,端口是否被占用等
3、查看nginx配置文件
4、查看图片的格式是否匹配
查看配置文件中指定的默认首页目录下,首页文件是否存在,首页文件中是否有内容

查看配置文件中location查询路径是否正确,rewrite跳转路径是否正确,编辑完配置文件后是否重载了服务等

3、nginx+keepalived脑裂是什么、怎么预防、怎么处理

脑裂是在高可用集群中,当联系着的两个节点的断开联系时,本来是一个整体的系统,分裂为两个独立的节点,这时两个节点开始争抢共享资源,就会导致系统混乱,数据损失。

预防手段,可以写脚本,正常vip在master上,如果出现在backup上,就输出告警信息

解决方法:借助keepalived的配置文件增加check配置,或者自己写脚本定时ping自己的网关,如果ping不通,自动关闭keepalived服务,最容易的是借助keepalived提供的vrrp_script及track_script实现

4、nginx和lvs、haproxy有什么区别

目前常见的Web集群调度器分为软件和硬件
软件通常使用开源的LVS、Haproxy、Nginx

LVS性能最好,但是搭建相对复杂;Nginx的upstream模块支持集群功能,但是对集群节点健康检查功能不强,高并发没有Haproxy好

nginx
①支持正则
②只支持基于端口的健康检查
③不支持session的直接保持、但能通过ip_hash来解决
④对网络稳定性要求不高
⑤反向代理能力强

lvs
①只能基于四层端口转发
②尽在四层做分发作用、扛负载能力强
③应用范围广

haproxy
①支持8种负载均衡策略
②仅作负载均衡软件使用、在高并发情况下性能优于nginx
③支持url检测、支持session保持

5、Tomcat优化

Tomcat优化主要有三方面,操作系统优化(内核参数优化),Tomcat配置文件参数优化,Java虚拟机(JVM)调优。

6、mysql优化(软、硬)

sql语句优化
1、选择合适的字段类型
2、尽量设置为not null
3、使用join连接代替子查询
4、为合适的字段设置索引

参数优化
1、设置最大连接数

硬件优化
1、内存加大,内存的速度比磁盘I/O快得多,使增加系统缓冲区容量减少磁盘I/O
2、配置高速磁盘系统,提高响应速度
3、合理分配磁盘I/O,减少资源竞争
4、配置多处理器,mysql是多线程的数据库,多处理器可同时执行多个线程。

7、mysql架构(有哪几种、每种原理)

1、MySQL主从复制、读写分离
主MySQL服务器做的增删改,都会写入自己的二进制日志(Binary log),然后从MySQL服务器打开自己的I/O线程连接主服务器,进行读取主服务器的二进制日志,备份写入到从服务器的中继日志(Relay log)当中,然后从服务器打开SQL线程,将中继日志中的数据重放到自己的服务器中,复制完成。

读写分离基本的原理是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE),而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到集群中的从数据库。

2、mysqlMHA高可用集群
解决mysql单点故障的问题,

故障切换备选主库的算法:
1、一般判断从库的是从(position/GTID)判断优劣,数据有差异,最接近于master的slave,成为备选主。

2、数据一致的情况下,按照配置文件顺序,选择备选主库。

3、设定有权重(candidate_master=1),按照权重强制指定备选主。

默认情况下如果一个slave落后master 100M的relay logs的话,即使有权重,也会失效。
如果check_repl_delay=0的话,即使落后很多日志,也强制选择其为备选主。

8、mysql左联右联(左查询右查询)

left join(左联接)

返回包括左表中所有记录和右表中联接字段相等的记录

语法:SELECT 字段 FROM 表1 LEFT JOIN 表2 ON 表1.字段 = 表2.字段;

right join(右联接)

返回包括右表中的所有记录和左表中联接字段相等的记录

语法:SELECT 字段 FROM 表1 RIGHT JOIN 表2 ON 表1.字段 = 表2.字段;

9、mysql死锁(死锁现象、怎么解决、怎么预防)悲观锁、乐观锁

所谓死锁:是指两个或两个以上的进程在执行过程中,因争夺资源而造成的一种互相等待的现象,若无外力作用,它们都将无法推进下去.此时称系统处于死锁状态或系统产生了死锁,这些永远在互相等待的进程称为死锁进程。表级锁不会产生死锁.所以解决死锁主要还是针对于最常用的InnoDB。

悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。在查询完数据的时候就把事务锁起来,直到提交事务。实现方式:使用数据库中的锁机制

乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。在修改数据的时候把事务锁起来,通过version的方式来进行锁定。实现方式:乐一般会使用版本号机制或CAS算法实现。

myisam表锁:不会出现死锁,发生锁冲突几率高,并发低。

innodb默认行锁:会出现死锁,发生锁冲突几率低,并发高。

10、mysql主从复制如果io、sql线程为非running状态,可能是哪些情况

1、网络不通畅
2、slave未开启
3、连接master未成功
4、防火墙未关闭
5、没有授权
6、主配置文件写错
7、偏移量和二进制日志名输入有误
8、server-id有冲突

11、redis三种集群模式,redis持久化方式有哪些

主从复制、哨兵、集群

rdb、aof

rdb分为手动触发、自动触发
手动触发主要靠save和bgsave命令生成rdb文件,save命令会阻塞服务器,直到文件创建完成为止,在此期间服务器不能处理任何请求,bgsave会生成一个子进程,在生成子进程的瞬间会阻塞服务器,之后由子进程负责创建rdb文件,主进程处理请求

自动触发redis也会选择bgsave而不是save

aof
与RDB持久化相对应,AOF的优点在于支持秒级持久化、兼容性好,缺点是文件大、恢复速度慢、对性能影响大。

12、ELK中logstash有哪三部分组成、logstash如何做格式转化

E:Elasticsearch
L:Logstash
K:Kibana

1、将日志进行集中化管理
2、将日志格式化(Logstash)并输出到Elasticsearch
3、对格式化后的数据进行索引和存储(Elasticsearch)
4、前端数据的展示(Kibana)

LogStash
由三个组件组成:Input、Output、Filter Plugin

Input:获取日志
Output:输出日志
Filter Plugin:过滤日志、格式处理

网络部分

1、三次握手、四次挥手分别解释一下过程以及为什么是四次挥手?

三次握手

假如两台服务器PC1、PC2
1、PC1想与PC2建立连接,先发送SYN报文(SYN=1)请求建立连接PC1seq序号x。

2、PC2接收到之后发送SYN和ACK报文,就是(ACK=1)确认并也(SYN=1)请求建立连接PC2seq是y,Ack=x+1,这个Ack是确认号,代表前面PC1的x已经收到。

3、PC1收到PC2的请求建立连接,也进行(ACK=1)确认,并进行回复seq=x+1,Ack=y+1代表PC2的y已收到。

四次挥手

1、PC1想要与PC2断开连接,先发送(FIN=1)请求断开和(ACK=1)确认。

2、PC2回复(ACK=1)同意断开。

这是已成半断开,这时PC1已无法继续连接PC2,但是PC2仍能给PC1发送数据。

3、接着PC2也想断开与PC1的连接,发送(FIN=1)并(ACK=1)确认。

4、PC1(ACK=1)确认断开。

为什么是四次挥手
因为tcp协议是面向连接的安全可靠的传输层协议,同时也是全双工通信,不能单方面完全断开连接,需要双方进行确认无误后,可以断开

顺序为PC1请求断开,PC2同意断开,此时半断开状态,PC2仍然可以发送数据给PC1,但是PC1无法回复,然后PC2请求断开,PC1确认断开,此时完全断开连接。

2、BGP有哪几种类型,分别用于哪些场景?

BGP按照运行方式分为EBGP和IBGP

EBGP:运行于不同AS之间的BGP称为EBGP。为了防止AS内产生环路。当BGP设备接收EBGP对等体发送的路由时,会将带有本地AS号的路由丢弃。

IBGP:运行于同一AS内部的BGP称为IBGP。为了防止AS内产生环路,BGP设备不将从IBGP对等体学到的路由通告给其他IBGP对等体,并与所有IBGP对等体建立全连接。为了解决IBGP对等体的连接数量太多的问题,BGP设计了反射器和BGP联盟。

3、说说OSPF五包、七状态

五包
1.hello包——————————用于发现和维持邻居关系,选举DR和BDR
2.数据库描述包(DBD)————用于向邻居发送摘要信息以同步链路状态数据库
3.链路状态请求包(LSR)————在路由器收到包含新的DBD后发送,请求更详细的信息
4.链路状态更新包(LSU)————收到LSR后发送链路状态通告(LSA),LSA的集合体LSU
5.链路状态确认包(LSACK)———确认已经收到DBD/LSU,每个LSA需要被分别确认

七状态
1.Down状态–——初始状态
2.Init状态————收到第一个hello包,只有对方的route id,进行回复,将自己的route id发送给对方
3.2-way状态–——建立邻接关系,开始选举DR,BDR
4.ExStart状态——确认主从关系
5.Exchange状态–双方发送DBD数据库描述,并互相确认收到
6.Loading状态——LSR互相请求新链路状态的详细信息,LSU互相发送关于新链路的链路状态包,LSACK互相收到确认
7.Full状态————双方达成一致,进入收敛状态

4、你用过哪些设备

华为、思科

5、二层交换机能做什么?

vlan控制服务器的网络接入、流量监控、实现网络隔离、QOS配置、流量优化等

6、QOS是什么?

服务质量,指一个网络能够利用各种基础技术,为指定的网络通信提供更好的服务能力,是网络的一种安全机制,用来解决网络延迟和阻塞等问题的一种技术

Linux

1、简单说说dhcp交互过程中四种报文

discover
offer
request
ack

2、你一般使用shell脚本做什么

①巡检
②自动化部署
③日志分割
④耦合服务,例:rsync+inotify

3、shell脚本常问

①冒泡排序,思路

②shell脚本如何开启多进程、多线程运行

③遍历一个指定目录下的所有文件并打印

find xxx -type f

④过滤日访问量最多的ip来源,前十个计数并打印

cat xxx | awk '{print$x}' | sort |uniq -c | sort -nr | head -10

4、linux常见运维命令(常规除外)

free -m、ss、iostat、iotop、lsof
free -m 查看内存信息
  • ss 是 socket statistics 的缩写。顾名思义,ss 命令可以用来获取socket 统计信息,它可以显示和netstat 类似的内容。但 ss 的优势在于它能够显示更多更详细的有关TCP和连接状态的信息,而且比netstat更快速更高效。

  • iostat 主要用于输出磁盘IO 和 CPU的统计信息。
    iostat属于sysstat软件包。可以用yum install sysstat 直接安装。

  • iotop是一个用来监视磁盘I/O使用状况的 top 类工具,可监测到哪一个程序使用的磁盘IO的信息,也是需要安装的,yum -y install iotop

  • lsof命令用于查看你进程开打的文件,打开文件的进程,进程打开的端口(TCP、UDP)。找回/恢复删除的文件。是十分方便的系统监视工具,因为lsof命令需要访问核心内存和各种文件,所以需要root用户执行。

5、你常用的抓包工具

  • wireshark
  • tcpdump

6、服务器性能分析命令有哪些

top命令(面试问参数解释)
查看系统运行级别runlevel

load average:0.09,0.05,0.01
三个数分别代表不同时间段系统平均负载(一分钟、五分钟、十五分钟)

7、常用的查看系统硬件资源的命令

磁盘占用:df -hT
内存信息:free -m或者cat /proc/meminfo
cpu占用:cat /proc/cpuinfo
i/o信息:iostat istop

8、tcpdump可以获取哪些信息

tcpdump可以抓取经过该机器所有网卡的数据包头信息,它允许我们编写bool表达式对抓取的数据包进行过滤,可以通过指定过滤条件对网卡、端口、ip地址以及协议等进行过滤,获取我们对我们有用的信息。

9、linux系统启动过程

引导过程:开机自检、mbr引导、grub菜单、linux内核、init进程初始化

启动过程:加载bios、读取mbr、boot loader 、加载内核、用户init根据inittab文件设定运行级别

init进程指向rc.sysinit > 启动内核 > 指向不同运行级别的脚本程序 > 指向/etc/rc.d/rc.local > 指向/bin/login程序,进入登录状态

10 、检测端口占用情况命令

netstat -nautp | grep ……
ss -nautp | grep ……

11、查询日志的方式

cat
vim
systemctl status
journal -u 指定查看服务日志
journal -xe 查看系统日志
tail -f ……

启动过程:加载bios、读取mbr、boot loader 、加载内核、用户init根据inittab文件设定运行级别

init进程指向rc.sysinit > 启动内核 > 指向不同运行级别的脚本程序 > 指向/etc/rc.d/rc.local > 指向/bin/login程序,进入登录状态

10 、检测端口占用情况命令

netstat -nautp | grep ……
ss -nautp | grep ……

11、查询日志的方式

cat
vim
systemctl status
journal -u 指定查看服务日志
journal -xe 查看系统日志
tail -f ……

猜你喜欢

转载自blog.csdn.net/Gloomyumenge/article/details/115065025