侧边栏壁纸
  • 累计撰写 22 篇文章
  • 累计创建 29 个标签
  • 累计收到 2 条评论

目 录CONTENT

文章目录

运维面试题12k-20k

胖虎
2024-05-15 / 0 评论 / 0 点赞 / 54 阅读 / 42898 字
温馨提示:
本文最后更新于 2024-05-15,若内容或图片失效,请留言反馈。部分素材来自网络,若不小心影响到您的利益,请联系我们删除。

一、linux

  1. 系统启动流程

    -系统的启动流程主要包括BIOS或UEFI固件初始化、引导加载程序(如GRUB)、内核加载、系统服务启动等步骤。

  2. linux文件类型

    -在Linux中,文件类型常见的有普通文件、目录文件、符号链接文件、设备文件等,可以通过命令ls -l查看文件类型。

  3. centos6和7怎么添加程序开机自启动?

    -在CentOS 6和7中,可以使用chkconfig命令或systemctl enable命令来设置程序开机自启动。

  4. 如何升级内核,目前最新版本号多少?

    -可以通过包管理工具(如yum或apt)来升级内核。目前的最新内核版本可能因为我最后更新的时间是2021年,所以最新版本可能不一样。

  5. nginx日志访问量前十的ip怎么统计?

    -可以使用awk命令结合nginx日志格式进行统计,例如:awk '{print $1}' access.log | sort | uniq -c | sort -nr | head -10。

  6. 删除/var/log/下.log结尾的30天前的日志文件

    -可以使用find命令结合-mtime参数来查找并删除符合条件的日志文件,例如find /var/log -name "*.log" -mtime +30 -delete。

  7. ansible有哪些模块?功能是什么?

    -Ansible有众多模块,例如yum用于包管理、copy用于复制文件、service用于管理服务等,用于自动化配置和部署。

  8. nginx性能为什么比apache高?

    -主要因为Nginx采用异步非阻塞事件驱动模型,对高并发情况性能更好;而Apache采用多进程模型,资源消耗较高。

  9. 四层负载和七层负载区别是什么?

    -四层负载只关注传输层的IP地址、端口号等信息进行负载均衡,而七层负载则基于应用层的协议数据进行负载均衡,能实现更精细的控制。

  10. lvs有哪些工作模式?哪个性能高?

    -LVS有NAT模式、IP隧道模式、直接路由模式等。性能高低取决于具体场景和配置。

  11. lvs nginx haproxy keeplived区别,优缺点?

    -这些工具都是用于负载均衡的,具体区别包括工作原理、配置方式、性能特点等,优缺点需根据具体需求来评估。

  12. 如下url地址,各个部分的含义 https://www.baidu.com/s?word=123&ie=utf-8

    -协议(https)://域名(www.baidu.com)/资源路径(s)/查询参数(?word=123&ie=utf-8)。

  13. tomcat各个目录含义,如何修改端口,如何修改内存数?

    -Tomcat中bin存放启动脚本,conf存放配置文件,webapps存放Web应用程序。要修改端口和内存需修改server.xml文件和catalina.sh脚本。

  14. nginx反向代理时,如何使后端获取真正的访问来源ip?

    -需要在Nginx配置文件中添加proxy_set_header X-Real-IP $remote_addr;来传递真实的访问来源IP。

  15. nginx负载均衡算法有哪些?

    -Nginx支持轮询、IP哈希、权重轮询、最小连接数等不同的负载均衡算法。

  16. 如何进行压力测试?

    -可以使用工具如Apache JMeter、ab(ApacheBench)等工具进行压力测试。

  17. curl命令如何发送https请求?如何查看response头信息?如何发送get和post表单信息?

    -使用curl可以通过-k选项(忽略证书验证)发送https请求,通过-i选项查看response头信息,通过-X GET或-X POST指定请求方式发送表单信息。

二、mysql

  1. 索引的为什么使查询加快?有啥缺点?

    -索引的作用是可以加快查询速度,因为索引能让数据库系统快速定位到存储数据的位置。然而,索引的缺点是增加了写操作的时间消耗,因为每次插入、更新或删除数据时都需要维护索引。

  2. sql语句左外连接 右外连接 内连接 全连接区别

    -SQL语句中左外连接、右外连接、内连接和全连接的区别如下:

    • 左外连接(LEFT JOIN):返回左表中所有记录以及两个表中满足连接条件的记录。

    • 右外连接(RIGHT JOIN):返回右表中所有记录以及两个表中满足连接条件的记录。

    • 内连接(INNER JOIN):返回两个表中满足连接条件的记录。

    • 全连接(FULL JOIN):返回两个表中所有记录,无论是否满足连接条件。

  3. mysql数据备份方式,如何恢复?你们的备份策略是什么?

    -MySQL的数据备份方式包括逻辑备份和物理备份。恢复备份数据可以通过将备份文件导入到数据库中来实现。备份策略通常包括完整备份、增量备份和差异备份,根据需求和数据重要性选择不同的备份策略。

  4. 如何配置数据库主从同步,实际工作中是否遇到数据不一致问题?如何解决?

    -配置数据库主从同步可以通过修改配置文件并设置合适的参数来实现。在实际工作中可能会遇到数据不一致的问题,解决方法包括检查同步状态、重新同步、手动修复数据等。

  5. mysql约束有哪些?

    -MySQL的约束包括主键约束、唯一约束、外键约束、非空约束、默认约束等,用于保证数据的完整性和一致性。

  6. 二进制日志(binlog)用途?

    -二进制日志(binlog)主要用于记录数据库的变更操作,包括插入、更新和删除操作,可以用于数据恢复、数据同步和故障恢复等方面。

  7. mysql数据引擎有哪些?

    -MySQL数据引擎包括InnoDB、MyISAM、Memory、Archive等。不同的数据引擎具有不同的特性和适用场景,如InnoDB适合于事务处理,MyISAM适合于只读操作等。

  8. 如何查询mysql数据库存放路径?

    -查询MySQL数据库存放路径可以通过执行show variables like 'datadir';来查看数据库文件的存放路径。

  9. mysql数据库文件后缀名有哪些?用途什么?

    -MySQL数据库文件后缀名包括.ibd(InnoDB数据文件)、.frm(表结构定义文件)、.idb(MyISAM索引文件)等,每种文件都有不同的作用和存储内容。

  10. 如何修改数据库用户的密码?

    -修改数据库用户的密码可以使用ALTER USER语句,例如:ALTER USER 'username'@'localhost' IDENTIFIED BY 'newpassword';。

  11. 如何修改用户权限?如何查看?

    -修改用户权限可以使用GRANT和REVOKE语句,查看用户权限可以使用SHOW GRANTS FOR 'username'@'localhost';命令。

三、nosql

  1. redis数据持久化有哪些方式?

    -Redis数据持久化有以下几种方式:

    • RDB(Redis DataBase):将内存中的数据以快照的形式保存到磁盘上。

    • AOF(Append Only File):将所有写操作追加到文件中,恢复时重新执行这些写操作以恢复数据。

  2. redis集群方案有哪些?

    -Redis的集群方案有以下几种:

    • Redis Sentinel:通过Sentinel实现高可用。

    • Redis Cluster:通过Cluster实现分布式和横向扩展。

  3. redis如何进行数据备份与恢复?

    -Redis进行数据备份与恢复可以通过以下方式:

    • 备份:可以使用Redis的持久化功能(RDB或AOF),也可以在Redis主从复制的情况下,将从节点作为备份。

    • 恢复:根据备份的数据文件进行数据恢复,或者通过主从复制重新同步数据。

  4. MongoDB如何进行数据备份?

    -MongoDB进行数据备份可以通过以下方式:

    • mongodump:通过该命令可以备份MongoDB数据库的数据。

    • MongoDB Atlas Backup Service:如果使用MongoDB Atlas,可以利用其提供的自动备份服务。

  5. kafka为何比redis rabbitmq快?

    -Kafka比Redis和RabbitMQ快的原因有以下几点:

    • 数据存储:Kafka基于磁盘存储消息,而Redis和RabbitMQ通常是基于内存存储,磁盘存储的读写速度相对慢。

    • 持久性:Kafka提供可持久化的消息存储,适合处理大量数据,而Redis和RabbitMQ通常用于较小规模的数据处理。

四、docker

  1. dockerfile有哪些关键字?用途是什么?

    • 一些常见的关键字包括:FROM、RUN、COPY、ADD、CMD、ENTRYPOINT、WORKDIR、EXPOSE、ENV 等。

    • 这些关键字用于定义 Docker 镜像的结构和构建过程,从指定基础镜像、安装软件、拷贝文件等方面进行描述。

  2. 如何减小dockerfile生成镜像体积?

    • 可以使用多阶段构建(Multi-stage builds)来精简镜像。

    • 在构建过程中合理使用 .dockerignore 文件来排除不必要的文件。

    • 尽量在一个步骤中安装、拷贝文件、清理操作,减少层次。

    • 使用 Alpine 等精简的基础镜像。

  3. dockerfile中CMD与ENTRYPOINT区别是什么?

    • CMD 定义容器启动时执行的默认命令,可以被 docker run 后面的命令参数覆盖。

    • ENTRYPOINT 定义容器运行时执行的命令,docker run 后面的命令参数会被当作参数传入 ENTRYPOINT 指定的命令。

  4. dockerfile中COPY和ADD区别是什么?

    • COPY 仅用来复制本地文件或者目录到镜像中,而 ADD 不仅可以复制本地文件和目录,还支持 URL 和 tar 自动解压功能。

  5. docker的cs架构组件有哪些?

    • Docker 的 CS 架构包括 Docker Client、Docker Daemon 和 Containerd。

  6. docker网络类型有哪些?

    • Docker 支持多种网络类型,例如 bridge、host、overlay、macvlan 等。

  7. 如何配置docker远程访问?

    • 可以通过编辑 Docker 服务配置文件来启用远程 API 和相关访问权限设置,在 Docker 19.03 之后还可以通过系统环境变量设置远程访问。

  8. docker核心namespace CGroups 联合文件系统功能是什么?

    • Namespace 提供了容器运行环境的隔离,CGroups 用来限制容器可使用的资源,联合文件系统则支持容器的读写分离特性。

  9. 命令相关:导入导出镜像,进入容器,设置重启容器策略,查看镜像环境变量,查看容器占用资源

    • 导入导出镜像:docker save 和 docker load 命令。

    • 进入容器:docker exec -it 容器ID /bin/bash。

    • 设置重启容器策略:docker run --restart=always 容器名称。

    • 查看镜像环境变量:docker inspect --format='{{range .Config.Env}}{{println .}}{{end}}' 镜像名称。

    • 查看容器占用资源:docker stats 容器ID。

  10. 构建镜像有哪些方式?

    • 主要有通过 Dockerfile 构建镜像、通过 docker commit 命令以及使用 Docker Hub 的自动构建功能等方式。

  11. docker和vmware虚拟化区别?

    • Docker 是基于容器的虚拟化技术,利用 Linux 内核的 namespace、CGroups 等特性实现轻量级隔离;VMware 则是基于虚拟机的全虚拟化技术,每个虚拟机有自己的操作系统内核。

五、kubernetes

  1. k8s的集群组件有哪些?功能是什么?

    • 一些核心组件包括:

      • kube-apiserver:提供Kubernetes API 的入口

      • kube-controller-manager:运行控制器

      • kube-scheduler:负责调度 Pod 到节点

      • kubelet:运行在每个节点,负责维护容器的生命周期

      • kube-proxy:负责维护网络规则

    • 还有一些附加组件如 kube-dns、Dashboard、Ingress Controller 等。

  2. kubectl命令相关:如何修改副本数,如何滚动更新和回滚,如何查看pod的详细信息,如何进入pod交互?

    • 修改副本数:kubectl scale deployment <deployment-name> --replicas=<number>

    • 滚动更新和回滚:kubectl set image deployment/<deployment-name> <container-name>=<new-image> 和 kubectl rollout undo deployment/<deployment-name>

    • 查看Pod详细信息:kubectl describe pod <pod-name>

    • 进入Pod交互:kubectl exec -it <pod-name> -- /bin/bash

  3. etcd数据如何备份?

    • 可以通过 etcd 自带的 snapshot 功能定期备份数据,也可以手动使用 etcdctl 工具执行备份操作。

  4. k8s控制器有哪些?

    • ReplicaSet、Deployment、StatefulSet、DaemonSet、Job、CronJob 等。

  5. 哪些是集群级别的资源?

    • Namespace、ServiceAccounts 等是集群级别的资源。

  6. pod状态有哪些?

    • Pending、Running、Succeeded、Failed、Unknown。

  7. pod创建过程是什么?

    • 创建 PodSpec -> 通过 API Server 提交 PodSpec -> kube-scheduler 分配节点 -> kubelet 在节点上创建容器 -> 运行容器。

  8. pod重启策略有哪些?

    • Always(总是重启)、OnFailure(失败时重启)、Never(不重启)。

  9. 资源探针有哪些?

    • livenessProbe、readinessProbe、startupProbe。

  10. requests和limits用途是什么?

    • requests 指定 Pod 的资源请求量,limits 指定 Pod 的资源上限。

  11. kubeconfig文件包含什么内容,用途是什么?

    • kubeconfig 包含集群、用户和上下文信息,用于授权和连接到 Kubernetes 集群。

  12. RBAC中role和clusterrole区别,rolebinding和 clusterrolebinding区别?

    • Role 只能应用到一个 Namespace,ClusterRole 可以应用到整个集群;RoleBinding 绑定 Role 到特定 Namespace,ClusterRoleBinding 绑定 ClusterRole 到整个集群。

  13. ipvs为啥比iptables效率高?

    • ipvs 在负载均衡时性能更高,因为它是在内核空间处理的,而 iptables 是在用户空间。

  14. sc pv pvc用途,容器挂载存储整个流程是什么?

    • StorageClass 定义存储类型,PersistentVolume 表示集群中的存储卷,PersistentVolumeClaim 请求存储。

    • 流程:创建 StorageClass -> 创建 PersistentVolume -> 创建 PersistentVolumeClaim -> 挂载到 Pod。

  15. nginx ingress的原理本质是什么?

    • Nginx Ingress Controller 在 Kubernetes 中提供反向代理和路由功能,将外部请求转发到相应的 Service。

  16. 网络类型,描述不同node上的Pod之间的通信流程

    • 网络类型如 Flannel、Calico、Cilium 等,Pod 间通信通过 Overlay Network 进行路由。

      1. Pod 在同一个 Node 上:

        • 当两个 Pod 在同一个 Node 上运行时,它们可以直接通过 localhost 或者 Pod IP 地址相互通信。

      2. Pod 在不同 Node 上:

        • 当两个 Pod 在不同的 Node 上运行时,它们之间的通信通常需要经过 Kubernetes 集群内部的网络插件进行处理,如 Calico、Flannel、Cilium 等。这些插件会为每个 Pod 分配一个独特的 IP 地址,允许 Pod 在不同 Node 之间通信。

      3. 通信流程:

        • 当一个 Pod 需要与另一个 Pod 通信时,首先 Pod 会通过 Pod IP 地址发送请求。

        • Kubernetes 中的 kube-proxy 组件会根据服务的 ClusterIP 或者 Endpoint 决定转发的路径:

          • 如果 Pod 之间通过 Service 进行通信,kube-proxy 会根据 Service 的 ClusterIP(或者 Endpoints)将请求转发到目标 Pod 所在的 Node 上。

          • 在目标 Node 上,NAT 表和 IP 路由表会将流量路由到目标 Pod。

        • 目标 Pod 收到请求后,会响应给发送方 Pod,从而完成通信。

  17. k8s集群节点需要关机维护,需要怎么操作

    • 使用 kubectl drain <node> 将节点上的 Pod 移到其他节点,然后关机维护,完成后再上线节点。

  18. 启动一个Deployment,Kubernetes做了什么?

    • Kubernetes 根据 Deployment 的定义创建一个 ReplicaSet,并根据 Pod Template 创建对应的 Pod,实现应用的部署和管理。

六、prometheus

  1. prometheus对比zabbix有哪些优势?

    • Prometheus是基于多维数据模型和灵活查询语言PromQL的开源监控系统,相比Zabbix具有以下优势:

      • 支持标签数据模型,更加灵活和强大的数据查询能力;

      • 高度可扩展,支持多维度水平扩展;

      • 对容器化环境支持更好;

      • 更加现代化的架构和社区支持。

  2. prometheus组件有哪些,功能是什么?

    • Prometheus组件主要包括:

      • Prometheus Server:负责数据采集和存储;

      • Alertmanager:处理警报和通知;

      • Exporters:用于将不同的服务或系统的监控数据导入Prometheus中;

      • Grafana:用于展示Prometheus收集到的监控数据。

  3. 指标类型有哪些?

    • 主要有四种指标类型:

      • Counter(计数器):只增不减,用于表示增量值;

      • Gauge(仪表):表示可随时间任意变化的值;

      • Histogram(直方图):用于表示数据的分布情况;

      • Summary(摘要):用于记录样本数据的总结信息。

  4. 在应对上千节点监控时,如何保障性能

    • 合理规划Prometheus实例的数量,考虑使用Federation进行分布式部署;

    • 优化Prometheus配置,如调整存储周期、抓取间隔等参数;

    • 使用Prometheus的多种存储适配器,如VictoriaMetrics等。

  5. 简述从添加节点监控到grafana成图的整个流程

    • 添加节点监控:在节点上部署Prometheus Exporter,并配置Prometheus Server以收集数据;

    • 配置Prometheus:定义监控目标、告警规则等;

    • 配置Grafana:连接Prometheus数据源,编写Dashboard展示所需指标;

    • Grafana成图:在Grafana上通过Dashboard展示Prometheus的监控数据。

  6. 在工作中用到了哪些exporter

    • 常用的Prometheus Exporter包括Node Exporter(节点监控)、Blackbox Exporter(探测HTTP、DNS等服务可达性)、MySQL Exporter、Exporter等。

七、ELK

  1. Elasticsearch的数据如何备份与恢复?

    • Elasticsearch的数据备份可以通过快照和恢复来实现。快照是对索引数据的定期备份,可以存储在本地或远程存储库中,用于灾难恢复和数据迁移。

  2. 你们项目中使用的logstash过滤器插件是什么?实现哪些功能?

    • 在项目中,我们使用了GroK插件作为logstash过滤器插件。Grok插件能够将未结构化的日志转换为结构化数据,实现日志的解析和提取有用信息的功能。

  3. 是否用到了filebeat的内置module?用了哪些?

    • 我们确实使用了filebeat的内置module,比如System、Nginx、Apache等。这些内置module能够帮助快速收集特定应用程序或系统的日志,并将其发送到Elasticsearch以进行检索和分析。

  4. kibana如何自定义图表和仪表盘?

    • Kibana可以通过Visualization和Dashboard来自定义图表和仪表盘。通过Visualization模块,可以选择不同类型的图表,调整参数和指标以展示所需数据;而Dashboard则可以整合多个Visualization,并对其布局和样式进行自定义,以构建个性化的仪表盘。

  5. elasticsearch分片副本是什么?你们配置的参数是多少?

    • Elasticsearch中的分片副本是指对索引数据的冗余拷贝,用于提升系统的可靠性和性能。在配置参数时,我们通常会设定主分片数和副本数,以平衡性能和容错需求,确保数据的可靠性和高可用性。

八、运维开发

  1. 备份系统中所有镜像

    • 可以使用备份工具如 Duplicity 或者 Rclone 来备份系统中的镜像文件。

  2. 编写脚本,定时备份某个库,然后压缩,发送异机(注意:①公共部分定义函数,如获取时间戳,配置报警接口②异常处理,如数据库大,检测任务是否完成。检测生成文件大小是否是空文件)

    • 可以使用 cron 或者 systemd timer 定时任务来实现备份定时操作。

    • 使用 tar 命令来压缩备份的文件。

    • 通过 scp 或者 rsync 命令将备份文件发送至其他机器。

      当创建这样的自动备份脚本时,需要考虑以下步骤来确保脚本的可靠性和完整性。以下是一个简要的脚本示例,仅供参考:

      #!/bin/bash
      ​
      # 定义需要备份的数据库名和备份文件存放路径
      db_name="your_database_name"
      backup_dir="/path/to/backup/directory"
      ​
      # 获取时间戳
      get_timestamp() {
          date +'%Y%m%d%H%M%S'
      }
      ​
      # 配置报警接口
      send_alert() {
          # 通过邮件或其他途径发送报警信息
          echo "Alert: $1"
          # 示例:发送邮件通知
          # mail -s "Backup Alert" your_email_address <<< "Backup Error: $1"
      }
      ​
      # 异常处理
      error_handler() {
          send_alert "$1"
          exit 1
      }
      ​
      # 备份数据库
      backup_db() {
          timestamp=$(get_timestamp)
          backup_file="$db_name-$timestamp.sql"
          
          mysqldump -u your_username -p'your_password' $db_name > "$backup_dir/$backup_file" || error_handler "Database backup failed"
      }
      ​
      # 压缩备份文件
      compress_backup() {
          cd "$backup_dir" || error_handler "Backup directory not found"
          
          for file in *.sql; do
              gzip "$file" || error_handler "Compression failed for $file"
          done
      }
      ​
      # 发送备份文件至远程服务器
      send_to_remote() {
          remote_server="user@remote_server:/path/to/backup/destination"
          
          scp "$backup_dir/*.gz" $remote_server || error_handler "Failed to transfer backup files to remote server"
      }
      ​
      # 检查文件是否为空
      check_file() {
          file_size=$(stat -c %s "$1")
          if [ $file_size -eq 0 ]; then
              error_handler "Empty file $1 detected"
          fi
      }
      ​
      # 主程序
      backup_db
      compress_backup
      send_to_remote
      ​
      # 检测备份文件是否为空
      for file in "$backup_dir"/*.gz; do
          check_file "$file"
      done
      ​
      # 备份完成
      send_alert "Backup completed successfully 🎉"
      ​

      请注意,上述脚本中的MySQL备份命令仅适用于MySQL数据库,请根据实际情况修改为其他数据库的备份命令。另外,您也需要根据实际情况配置数据库连接信息、备份文件路径、远程服务器信息等。建议在生产环境中测试并根据需要进行调整。

  3. 批量获取所有主机的系统信息

    • 可以使用工具如 Ansible 来批量获取主机的系统信息。

  4. django的mtv模式流程

    • MTV 模式代表 Model-Template-View,是 Django 中的架构设计模式,用于构建 Web 应用程序。 🌐

    • 🎨 Template(模板):负责定义用户看到的页面的结构和内容。它包含 HTML 代码,以及可嵌入的模板标签和模板过滤器,用于展示由视图传递过来的数据。🖼️

    • 🧩 View(视图):处理用户请求并返回相应的页面。它包含应用程序的业务逻辑,可以从 Model 中获取数据,然后传递给 Template 进行渲染。👀

    • 🗃️ Model(模型):负责与数据相关的事务。它定义了数据的结构和数据库的交互方式。Model 对象代表数据库中的表,每个对象实例对应表中的一条数据记录。📦

    • 💡 在 MTV 模式中,View 接收用户请求,处理逻辑并从 Model 获取数据,然后将数据传递给 Template 进行呈现。这样,模板描绘了最终用户所看到的页面。🤖

  5. python如何导出、导入环境依赖包

    • 可以使用 pip freeze > requirements.txt 导出依赖,然后使用 pip install -r requirements.txt 导入依赖包。

  6. python创建,进入,退出,查看虚拟环境

    • 创建虚拟环境:python -m venv myenv

    • 进入虚拟环境:. myenv/bin/activate

    • 退出虚拟环境:deactivate

    • 查看虚拟环境中安装的包:pip list

  7. flask和django区别,应用场景

    🌟 Flask 和 Django 是两个常用的 Python web 框架,它们有一些区别和适用场景:

    1. Flask

      • 😊 轻量级框架,相对灵活,更适合小型应用或者需要定制化开发的项目。

      • 💡 社区相对较小,但有丰富的扩展组件可供选择。

      • 🎯 更自由地选择数据库、模板引擎等组件。

      • 💪 更适合做API服务或者简单的 web 应用。

    2. Django

      • 🚀 大而全的框架,提供了许多内置功能,像是认证、管理后台、表单验证等,适合快速开发。

      • 🌟 强大的 ORM,自带 admin 后台管理系统等功能。

      • 🛡️ 安全性好,并提供大量的文档和社区支持。

      • 🔨 更适合构建大型复杂的 web 应用,如电商平台、社交网络等。

    应用场景:

    • 如果你需要快速搭建一个网站并且项目规模较大,可以选择 Django。

    • 如果你需要一个更简单、轻量级、更灵活的框架用于快速搭建小型应用或者提供 API 服务,可以选择 Flask。

  8. flask开发一个hello word页面流程

    1. 首先,确保你已经安装了 Flask。如果没有安装,可以使用以下命令来安装 Flask:

      pip install Flask
    2. 创建一个 Python 脚本,比如 app.py,并在其中导入 Flask 模块:

      from flask import Flask
    3. 实例化一个 Flask 应用:

      app = Flask(__name__)
    4. 创建一个路由,定义访问根路径时的行为,返回 "Hello, World!" 字符串:

      @app.route('/')
      def hello():
          return 'Hello, World! 😀'
    5. 在脚本的末尾,添加启动应用的代码:

      if __name__ == '__main__':
          app.run()
    6. 在命令行中执行脚本,启动 Flask 应用:

      python app.py
    7. 打开浏览器,访问 http://127.0.0.1:5000/,应该可以看到 "Hello, World!" 字样。

  9. 列举常用的git命令 git push pull checkout config

    1. git push: 将本地代码推送到远程仓库。

    2. git pull: 从远程仓库拉取并合并到本地仓库。

    3. git checkout: 切换分支或还原文件。

    4. git config: 配置Git,如设置用户名、邮箱、查看配置等。

  10. git gitlab jenkins的CICD流程如何配置

    当使用 GitLab 和 Jenkins 运行 CI/CD 流程时,通常的配置包括以下步骤:

    1. 在 GitLab 上创建项目:首先在 GitLab 上创建一个项目,并将项目的代码托管在仓库中。

    2. 配置 Jenkins

      • 在 Jenkins 上安装相应的插件,如 GitLab 插件、Pipeline 插件等。

      • 创建一个新的 Jenkins 项目,选择 Freestyle 项目或 Pipeline 项目。

      • 配置 Jenkins 与 GitLab 之间的集成,例如设置 GitLab Webhook 让 GitLab 触发 Jenkins 构建。

    3. 设置凭据:在 Jenkins 中设置 GitLab 的凭据,以便 Jenkins 能够访问 GitLab 仓库。

    4. 创建 Jenkins Pipeline:使用 Jenkins Pipeline 或者在 Jenkins 中通过界面配置构建流程,比如:

      • 下载代码:从 GitLab 仓库中拉取代码。

      • 构建代码:编译、运行单元测试等。

      • 测试代码:运行自动化测试。

      • 部署代码:将构建后的代码部署到目标环境。

    5. 触发构建

      • 在 GitLab 项目中设置 Webhook,以便当代码有变动时触发 Jenkins 构建。

      • 或者使用定时任务等方式触发 Jenkins 构建。

    6. 配置部署环境:根据实际情况配置部署环境,可以是测试环境、预发布环境或者生产环境。

    7. 监控和日志:配置监控系统和日志管理,以便及时发现问题和进行排查。

九、日常工作

  1. 在日常工作中遇到了什么棘手的问题,如何排查

    • 当遇到棘手问题时,我通常会采取以下步骤:

      • 排查日志:查看相关日志,以确定问题的根本原因。

      • 检查监控:查看系统指标和监控报警,了解系统行为。

      • 进行测试:在测试环境中复现问题以找出解决方案。

      • 与团队合作:与同事合作分享问题,共同找出最佳解决方案。

  2. 日常故障处理流程

    • 我的日常故障处理流程通常如下:

      • 识别问题:通过监控系统或用户报告识别故障。

      • 定位问题:查看日志、检查相关系统指标定位故障原因。

      • 采取措施:根据故障类型,执行相应的修复措施。

      • 验证修复:确保故障修复并监控一段时间以确保系统稳定。

  3. 修改线上业务配置文件流程

    • 修改线上业务配置文件需要谨慎操作,我的流程一般如下:

      • 备份原配置:在修改前先备份原有配置文件。

      • 修改配置文件:根据需求修改配置文件。

      • 验证修改:在非关键时间段进行修改并验证配置更改。

      • 发布修改:将修改后的配置文件发布到线上环境。

      • 监控影响:监控业务运行情况,确保修改不会引起其他问题。

  4. 业务pv多少?集群规模多少?怎么保障业务高可用?

    • 业务PV(页面访问量)和集群规模的具体数据取决于具体的业务情况,一般会根据监控和业务需求来调整集群规模以及保障高可用的措施,常见的方法包括:

      • 水平扩展:根据流量负载情况,自动或手动扩展集群规模。

      • 负载均衡:使用负载均衡技术分发流量,避免单点故障。

      • 容灾备份:建立灾备中心,保障在不同位置故障时的业务可用性。

      • 监控报警:设定监控阈值和报警机制,及时发现并解决潜在问题。

      • 持续优化:持续优化架构和流程,提高系统稳定性和可靠性。

十、开放性问题

  1. 你认为初级运维工程师和高级运维工程师的区别?

    • 初级运维工程师和高级运维工程师之间的区别在于经验、技能和责任水平。初级运维工程师通常具有较少的经验和技能,需要更多指导和培训,主要负责日常的系统监控、故障排查和基础运维工作。而高级运维工程师则通常有更丰富的经验和深厚的技术功底,能够独立解决复杂的问题,设计和优化系统架构,负责制定整体的运维战略和规划。

  2. 你认为未来运维发展方向(自动化,智能化)

    • 未来运维的发展方向是自动化和智能化。随着技术的发展,运维工作已经逐渐向自动化、智能化方向演进,通过自动化工具和人工智能技术可以提高运维效率、降低人工干预,预防潜在故障,提升系统的稳定性和可靠性。因此,未来运维人员需要具备自动化运维工具的使用能力、编程和脚本能力,以及对人工智能技术的理解和应用能力。

0

评论区