看面试问题列表, 点击此处面试列表

linux基础问题

基础命令

性能命令

top,vmstat,iostat ,free

网络命令

ifconfig ,ip,netstat ( -antp ) lsof ,ss wget,curl tcpdump

常用软件的端口

进程命令

ps (aux,ef ),kill -9 ,pkill job

其他

lsmod, lscpu,

[TOC]

shell脚本

for 循环

     for i in {1..100}
     do
        sum=$((sum+1))
     done

while 循环

    cat file.txt | while read line
    do
          echo $line
    done

退出当前循环 break

立即下一个循环 continue

yum命令

中间件

redis

docker问题

这些隔离原理的组合使得Docker能够在同一主机上运行多个容器,每个容器都具有独立的运行环境和资源,并且彼此之间相互隔离,从而提供了更高的安全性和资源利用率。

实施问题

性能排查步骤

在处理过程中,可以使用的命令包括top、htop、free、df、iostat、ping、netstat、ps等。具体使用哪些命令,需要根据具体情况进行判断和选择

这些是一些常见的排查思路和命令,具体的排查过程可能因环境和配置而有所差异。请根据实际情况进行排查,并结合错误日志来定位和解决503错误的问题。

项目经验

数据库相关

常用的SQL基础

mysql主从复制的原理和步骤

一、概述

1、什么是主从复制?

概念 主从复制是用来建立一个和 主数据库完全一样的数据库环境称为从数据库;主数据库一般是准实时的业务数据库。

2、主从复制作用

我们来思考如果在企业网站中,后端MYSQL数据库只有一台时候,会有以下问题:

1、单点故障服务不可用
2、无法处理大量的并发数据请求
3、数据丢失

所以通过主从复制后,它的优点就很明显

1、如果主节点出现故障,那么我们就直接将服务切到从节点,来保证服务立马可用。

2、如果并发请求特别大的时候,我们可用进行读写分离操作,让主库负责写,从库负责读。

3、如果主库数据丢失,但从库还保存一份,减少数据丢失的风险。
二、主从复制原理

1、主从复制原理

这里先放一张图,这张图很好的诠释的主从复制的原理
在这里插入图片描述上面主要分成了三步,下面会详细说明。

(1) Master的更新事件(update、insert、delete)会按照顺序写入bin-log中。当Slave连接到Master的后,Master机器会为Slave开启

binlog dump线程,该线程会去读取bin-log日志

(2) Slave连接到Master后,Slave库有一个I/O线程 通过请求binlog dump thread读取bin-log日志,然后写入从库的relay log日志中。

(3) Slave还有一个 SQL线程,实时监控 relay-log日志内容是否有更新,解析文件中的SQL语句,在Slave数据库中去执行。
总结

(1) 既然是要把事件记录到bin-log日志,那么对于Master就必须开启bin-log功能。

(2) 整个Mysql主从复制一共开启了3个线程。Master开启 IO线程,Slave开启 IO线程 和 SQL线程。

(3) 这点也很重要那就是Master和Slave交互的时候,记住这里是Slave去请求Master,而不是Master主动推给Slave。Slave通过IO线程

连接Master后发起请求,Master服务器收到Slave IO线程发来的日志请求信息,io线程去将bin-log内容返回给slave IO线程。
2、MySQL主从复制同步方式

(1)异步复制

MySQL主从同步 默认是异步复制的。就是上面三步中,只有第一步是同步的(也就是Mater写入bin log日志),就是主库写入binlog日志后即可成功返回客户端,无须等待binlog

日志传递给从库的过程。Master 不关心 Slave 的数据有没有写入成功。因此如果Master和Slave之间有网络延迟,就会造成暂时的数据不一致的现象;如果Master出故障,而数据还没有复制过去,则会造成数据丢失;但也有好处,效率较其他两种复制方式最高。

(2)同步复制

对于同步复制而言,Master主机将事件发送给Slave主机后会触发一个等待,直到所有Slave节点(如果有多个Slave)返回数据复制成功的信息给Master。这种复制方式最安全,但是同时,效率也是最差的。

(3)半同步复制

对于半同步复制而言,Master主机将事件发送给Slave主机后会触发一个等待,直到其中一个Slave节点(如果有多个Slave)返回数据复制成功的信息给Master。由此增强了数据的一致性,但是因为Master主机的确认开销,会损耗一部分的性能;另外,半同步复制除了不需要等待所有Slave主机确认事件的接收外,半同步数据复制并不要求那些事件完全地执行,因此,仍有可能看到在Slave主机上数据复制延迟的发生,如果因为网络延迟等原因造成Slave迟迟没有返回复制成功的信息,超过了Master设置的超时时长,半同步

复制就降级为异步复制方式,而后继续数据复制。
三、Mysql主从同步延时

上面也说了,Mysql默认采用的异步操作,因为它的效率明显是最高的。因为只要写入bin log后事物就结束返回成功了。但由于从库从主库异步拷贝日志 以及串行执行 SQL 的特点,所以从库的数据一定会比主库慢一些,是有延时的。所以经常出现,刚写入主库的数据可能是读不到的,要过几十毫秒,甚至几百毫秒才能读取到。这就是主从同步延时问题。

1、如何查看主从延迟时间

通过监控 show slave status 命令输出的Seconds_Behind_Master参数的值来判断:

mysql> show slave status\G;
   // 状态一
    Seconds_Behind_Master: NULL
    // 状态二
    Seconds_Behind_Master: 0
    // 状态三
    Seconds_Behind_Master: 79

Seconds_Behind_Master=0: 表示主从复制良好;

Seconds_Behind_Master=NULL: 表示io_thread或是sql_thread有任何一个发生故障;

Seconds_Behind_Master=79: 数字越大表示从库延迟越严重。
2、影响延迟因素

这里整理了影响主从复制延迟大致有以下几个原因:

1)主节点如果执行一个很大的事务,那么就会对主从延迟产生较大的影响

2)网络延迟,日志较大,slave数量过多

3)主上多线程写入,从节点只有单线程同步

4)机器性能问题,从节点是否使用了“烂机器”

5)锁冲突问题也可能导致从机的SQL线程执行慢
3、优化主从复制延迟

这个没有说去完全解决,要想解决那么就只能采用同步复制策略。不过,一般不建议使用这种同步模式。显而易见,如果写操作必须等待更新同步完成,肯定会

极大地影响性能,除非你不在乎性能。

1)大事务:将大事务分为小事务,分批更新数据

2)减少Slave的数量,不要超过5个,减少单次事务的大小

3)MySQL 5.7之后,可以使用多线程复制,使用MGR复制架构

4)在磁盘、raid卡、调度策略有问题的情况下可能会出现单个IO延迟很高的情况,可用iostat命令查看DB数据盘的IO情况,再进一步判断

5)针对锁问题可以通过抓去processlist以及查看information_schema下面和锁以及事务相关的表来查看
总结

主机与从机之间的物理延迟是无法避免的,既然无法避免就可以考虑尝试通过缓存等方式,降低新修改数据被立即读取的概率。

简单聚合查询

select sum(score) from student group by sid

数据库大的了要不要分库分表

分库分表做的比较少,我们会使用分区。分区的话速度比较快,应用程序做起来会比较简单。
在MySQL中,当数据量很大时,可以采取分库分表的方式来提高系统的性能和扩展性。下面是一种常见的分库分表方案和详细步骤:

1\. 数据库水平分库:将原始数据库按照一定规则拆分成多个数据库,每个数据库存储一部分数据。可以根据业务需求选择合适的拆分规则,如按照用户ID的哈希值进行拆分。

2\. 数据库垂直分库:将原始数据库按照业务功能进行拆分,每个数据库只存储特定的数据表。可以根据业务需求选择合适的拆分规则,如将用户相关的表放在一个数据库,商品相关的表放在另一个数据库。

3\. 数据库水平分表:将原始数据表按照一定规则拆分成多个数据表,每个数据表存储一部分数据。可以根据业务需求选择合适的拆分规则,如按照时间范围进行拆分。

4\. 数据库垂直分表:将原始数据表按照业务功能进行拆分,每个数据表只存储特定的字段。可以根据业务需求选择合适的拆分规则,如将用户的基本信息和订单信息分别存储在不同的数据表中。

5\. 使用分库分表中间件:为了简化分库分表的管理和操作,可以使用一些开源的分库分表中间件,如MyCAT、ShardingSphere等。这些中间件可以自动将SQL语句路由到正确的数据库和数据表,实现透明的分库分表。

具体步骤如下:

1\. 数据库水平分库:创建多个数据库实例,每个实例存储一部分数据。可以使用MySQL的主从复制功能将数据同步到各个实例中。

2\. 数据库垂直分库:根据业务功能创建多个数据库,每个数据库存储特定的数据表。可以使用MySQL的导入导出工具将数据迁移到新的数据库中。

3\. 数据库水平分表:根据拆分规则创建多个数据表,每个数据表存储一部分数据。可以使用MySQL的分区表功能来实现数据的自动分配。

4\. 数据库垂直分表:根据业务功能创建多个数据表,每个数据表只存储特定的字段。可以使用MySQL的表拆分工具将原始数据表拆分成多个新的数据表。

5\. 配置分库分表中间件:根据中间件的文档,配置中间件的路由规则和数据源信息。可以根据业务需求选择合适的中间件。

6\. 测试和验证:对系统进行全面的测试和验证,确保分库分表的功能和性能符合预期。

需要注意的是,分库分表会增加系统的复杂性和维护成本,需要根据具体的业务需求和数据量来选择合适的方案。同时,分库分表也可能引入一些新的问题,如跨库事务、数据一致性等,需要进行充分的测试和验证。

你们公司巡检一般一天几次,

主要是监控日志,每天大概2-3次,基本有软件监控的

数据库备份

增量备份


\# 定义备份目录和文件名
BACKUP_DIR="/path/to/backup/directory"
FULL_BACKUP_DIR="$BACKUP_DIR/full"
INCREMENTAL_BACKUP_DIR="$BACKUP_DIR/incremental"
CURRENT_DATE=$(date +%Y%m%d%H%M%S)
FULL_BACKUP_NAME="full_$CURRENT_DATE"
INCREMENTAL_BACKUP_NAME="incremental_$CURRENT_DATE"

\# 定义MySQL连接参数
MYSQL_USER="mysql_user"
MYSQL_PASSWORD="mysql_password"
MYSQL_HOST="localhost"

\# 创建备份目录
mkdir -p $FULL_BACKUP_DIR
mkdir -p $INCREMENTAL_BACKUP_DIR

\# 创建全量备份
xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --target-dir=$FULL_BACKUP_DIR/$FULL_BACKUP_NAME

\# 列出最近的全量备份
LATEST_FULL_BACKUP=$(ls -t $FULL_BACKUP_DIR | head -n1)

\# 如果存在最近的全量备份,则创建增量备份
if [ -n "$LATEST_FULL_BACKUP" ]; then
  xtrabackup --backup --user=$MYSQL_USER --password=$MYSQL_PASSWORD --host=$MYSQL_HOST --target-dir=$INCREMENTAL_BACKUP_DIR/$INCREMENTAL_BACKUP_NAME --incremental-basedir=$FULL_BACKUP_DIR/$LATEST_FULL_BACKUP
fi

\# 清理旧的备份
find $FULL_BACKUP_DIR -type f -mtime +7 -exec rm {} \;
find $INCREMENTAL_BACKUP_DIR -type f -mtime +7 -exec rm {} \;
`
### 全量备份

`
\#!/bin/bash

\# 设置备份文件存储路径
backup_dir="/path/to/backup"

\# 设置MySQL登录信息
mysql_user="username"
mysql_password="password"

\# 设置备份文件名
backup_file="${backup_dir}/$(date +%Y%m%d%H%M%S).sql"

\# 创建备份文件存储目录
mkdir -p "${backup_dir}"

\# 使用mysqldump命令备份数据库
mysqldump -u"${mysql_user}" -p"${mysql_password}" --all-databases > "${backup_file}"

\# 检查备份是否成功
if [ $? -eq 0 ]; then
  echo "MySQL backup successfully created: ${backup_file}"
else
  echo "MySQL backup failed"
fi

将上述脚本保存为一个文件(例如mysql_backup.sh),然后使用chmod +x mysql_backup.sh命令赋予执行权限。接下来,可以通过运行./mysql_backup.sh命令来执行备份。

请注意,脚本中的/path/to/backup应替换为实际的备份文件存储路径,usernamepassword应替换为实际的MySQL登录信息。此外,脚本使用mysqldump命令来备份所有数据库,因此确保系统中已安装MySQL并将其添加到系统路径中。

慢日志查询

慢日志查询是一种用于分析数据库中执行缓慢的SQL语句的方法。通过慢日志查询,可以找出执行时间较长的SQL语句,从而进行性能优化。

以下是慢日志查询的详细配置步骤:

如果找到了允许速度慢的SQL,可以采取以下解决方法:

总之,通过慢日志查询可以找出执行缓慢的SQL语句,并通过优化查询语句、调整数据库参数等方式进行性能优化,提高数据库的响应速度。

k8s

1.查看集群内所有podkubectl get pod -A -A查看所有命名空间下的2.查看pod的详细信息(落在哪个node节点)用什么命令-owide3.pod的状态不对如何排查a.kubectl get pod查看状态b.状态不对的话 kubectl describe/kubectl delete重建c.状态没问题的话 kubectl logs /或进入容器 exec -it4.扩缩容的命令kubectl scale deploy name –replicas=副本数5.去除污点kubectl taint node name-6.节点需要维护,确保在此期间node上不能调度上pod怎么办kubectl cordon node 打上不可调度标签7.如何去创建一个yaml文件?有什么区别?create/apply8.回滚rollout undo9.驱逐drain10.编辑一个yamledit11.拷贝文件kubectl cp12.k8s和docker的区别k8s容器编排工具docker容器平台13.k8smaster和node上有哪些组件?分别什么功能?apiserver etcd scheduler controller-manager kubelet kube-proxy14.k8s里面是用什么来做隔离的?命名空间15.什么是pod?pod和docker里面的容器一样吗?k8s最小的资源单位 不一样pod里可以包含多个容器16.pod的生产过程和生命周期?几个组件如何协调工作的/几种状态17.pod拉取镜像有哪些策略?重启有哪些策略?18.k8s里面有几种探针?分别起到什么作用?19.初始化容器是用来干嘛的?20.k8s里有哪些调度规则?资源限制、污点、标签、亲和性、反亲和性、nodename21.service与pod是如何关联的?22.什么是pv、pvc?23.k8s里有哪些资源类型?持久化是怎么做的(有状态无状态服务)?24.k8s提供service的几种方式?25.clusterIP和nodeport的区别?26.nodeport暴露端口的范围?27.k8s里node节点显示notready的原因及排查思路?28.如何查看kubelet的日志?pod显示pending的原因及排查?29.k8s的pod显示内存不足怎么办?30.deployment和daemonset的区别?

ansible

Ansible是一个自动化运维工具,提供了丰富的模块来管理和配置远程主机。常用的Ansible模块包括:

这些只是Ansible提供的一部分常用模块,还有很多其他模块可以根据具体需求进行使用。

通过vrrp协议,虚拟出vip,通过脚本检测相关服务可以起到高可用的作用部署,命令,管理都可以的集群的

其他问题

你日常主要工作是什么

我们负责解决部署过程中的问题 。。。

你们运维的流程是什么

如果是云平台

像我说的计算类平台类数据库网络中间件存储
公有云的话就直接测试上线评审,给客户
私有云的话就是具体的客户
和客户交流这个有别的1.5线部门负责
功能(就是页面交互),性能,高可用
网络并发量

前期需求会议我们参加评审
然后我们有部门做规划表
进场部署
部署完后验收测试
交维
功能web页面

如果是自己公司内部

那么就说一个会议,然后公司部门领导审核,然后备份,风险评估,紧急措施方案,发布。

你们公有云一般有多少机器

公有云的话我们一般几百上前台我们是按期的,每个人负责不同的池子就我一个人,每个省池不同的人搭建三到四周

你们的产品是哪家的

我们是外面的产品,不是自己的产品,产品我们和他们对接的不是外包的,就是承接下面他们的项目

你们的项目奖金是怎么发的

签的合同是固定的绩效按百分比的

面试记录通过chatgpt总结出来的一些方向。

总体来说,该人对于Kubernetes、Docker、中间件和云计算等方面有一定的了解和经验,同时也具备一定的项目管理和团队合作能力。对于工作内容和技术要求,该人表示自己有信心能够胜任,并且愿意不断学习和提升自己的技能。

这段文字主要是关于作者在工作中使用的工具和技术,以及与客户的沟通和驻场经验的总结。以下是对文字的分层次总结:

排错问题

kafka,redis,mysql,zk,nginx,tomcat 的版本和端口号

redis的二种模式,你常用的模式,各有什么优点缺点

  • redis的部署过程中为什么要奇数node
  • redis的场景问题
    • redis的热点失效问题,如何解决
    • 存储方式有那些中 AOF/RDB,优缺点
    • redis的场景存储格式
      数据存储:Redis支持多种数据结构,如字符串、哈希、列表、集合和有序集合。它可以用来存储和处理各种类型的数据。

etcd的备份

etcdctl snapshot save命令可以将整个Etcd数据库快照备份到一个文件中。etcdctl snapshot restore命令可以将备份文件恢复到Etcd数据库中。

mysql主从复制,你用的是几个节点,几主几从。

mysql的慢查询怎么启用,什么时候需要用到

要在MySQL中开启慢查询日志,可以按照以下步骤操作:

打开MySQL配置文件(通常是my.cnf或my.ini),可以在MySQL安装目录下找到该文件。
在配置文件中找到或添加以下行:slow_query_log = 1,将该选项设置为1或true,表示开启慢查询日志。
可选步骤:设置慢查询日志的路径和文件名。可以在配置文件中找到或添加以下行:slow_query_log_file = /path/to/slow-query.log,将/path/to/slow-query.log替换为你希望保存慢查询日志的路径和文件名。
保存配置文件并重启MySQL服务,以使更改生效。
慢查询日志已经启用,MySQL会将执行时间超过long_query_time(默认为10秒)的SQL语句记录到慢查询日志文件中。
注意:为了避免慢查询日志文件过大,可以设置long_query_time为较小的值。同时,确保慢查询日志文件的路径有足够的空间来存储日志文件。

常见的k8s命令

  • kubectl get logs
  • kubectl get PO -owide -A
作者:严锋  创建时间:2023-08-22 19:02
最后编辑:严锋  更新时间:2024-05-11 08:55