大厂SRE 工程师实习面经总结

目录

一、前言

二、面试问题及答案

(一)百度 SRE 工程师实习面经

(二)掌阅科技 SRE 运维实习生一面

(三)携程 SRE 二面


一、前言

SRE(Site Reliability Engineering)即站点可靠性工程,致力于确保软件系统的高可用性、可靠性和性能。以下是百度 SRE 工程师实习的面经总结,希望能为大家提供一些参考。

二、面试问题及答案

(一)百度 SRE 工程师实习面经

  1. 进程调度算法
    • 常见的进程调度算法有先来先服务(FCFS)、短作业优先(SJF)、高响应比优先(HRRN)、时间片轮转(RR)、多级反馈队列调度算法等。
    • 先来先服务算法按照进程到达的先后顺序进行调度;短作业优先算法优先调度执行时间短的进程;高响应比优先算法综合考虑了作业的等待时间和执行时间;时间片轮转算法将 CPU 时间划分为时间片,每个进程轮流使用时间片;多级反馈队列调度算法设置多个队列,不同队列具有不同的优先级和时间片大小。
  2. 进程通信方式
    • 进程间通信方式主要有管道、命名管道、消息队列、信号量、共享内存等。
    • 管道是一种半双工的通信方式,只能在具有亲缘关系的进程间使用;命名管道可以在不具有亲缘关系的进程间使用;消息队列是一种消息的链表,存放在内核中,并由消息队列标识符标识;信号量用于实现进程间的互斥与同步;共享内存是最快的一种进程间通信方式,多个进程可以直接访问同一块内存区域。
  3. 如果一个进程占用系统很多资源怎么定位后端的代码的具体哪部分的问题
    • 可以使用以下方法定位:
      • 查看进程的资源使用情况,如使用 top、htop 等命令查看 CPU、内存、磁盘 I/O 等资源的使用情况。
      • 使用 strace 或 ltrace 命令跟踪进程的系统调用和库函数调用,了解进程在做什么。
      • 使用性能分析工具,如 perf、gprof 等,分析进程的性能瓶颈。
      • 查看进程的日志文件,了解进程的运行状态和可能出现的问题。
  4. 查看磁盘 I/O 命令
    • 可以使用 iostat、iotop、vmstat 等命令查看磁盘 I/O 情况。
    • iostat 命令可以显示磁盘的读写速度、I/O 等待时间等信息;iotop 命令可以实时显示每个进程的磁盘 I/O 情况;vmstat 命令可以显示系统的整体性能情况,包括磁盘 I/O。
  5. k8s 的认证方式类型
    • k8s 的认证方式主要有客户端证书认证、令牌认证、用户名和密码认证等。
    • 客户端证书认证是最安全的认证方式,客户端使用证书向 k8s API 服务器进行身份验证;令牌认证是一种简单的认证方式,客户端使用令牌向 k8s API 服务器进行身份验证;用户名和密码认证是一种传统的认证方式,客户端使用用户名和密码向 k8s API 服务器进行身份验证。
  6. k8s pod 怎么给 apiserver 发送信息
    • k8s pod 可以通过以下方式向 apiserver 发送信息:
      • 使用 kubelet 代理:kubelet 是运行在每个节点上的代理程序,它负责管理节点上的容器。kubelet 可以将 pod 的状态信息发送给 apiserver。
      • 使用容器运行时:容器运行时可以将容器的状态信息发送给 kubelet,kubelet 再将这些信息发送给 apiserver。
      • 使用自定义控制器:自定义控制器可以通过监听 k8s API 服务器的资源变化,获取 pod 的状态信息,并将这些信息发送给其他系统或进行处理。
  7. k8s 扩展 CRD 组件?没听说过
    • Custom Resource Definition(CRD)是 k8s 中的一种扩展机制,可以让用户自定义资源类型。通过定义 CRD,可以在 k8s 中创建新的资源对象,并使用 k8s 的 API 进行管理。
    • 要扩展 CRD 组件,可以使用以下步骤:
      • 定义 CRD:使用 YAML 文件定义新的资源类型,包括资源的名称、属性、版本等信息。
      • 创建自定义控制器:编写自定义控制器,实现对新资源类型的管理逻辑,如创建、更新、删除等操作。
      • 部署自定义控制器:将自定义控制器部署到 k8s 集群中,使其能够监听和处理新资源类型的变化。
  8. docker 实现资源限制和资源隔离底层原理
    • Docker 实现资源限制和资源隔离主要通过 Linux 内核的 cgroups 和 namespaces 技术。
    • cgroups 可以限制容器的 CPU、内存、磁盘 I/O 等资源的使用量;namespaces 可以实现容器之间的进程、网络、文件系统等资源的隔离。
    • 当启动一个容器时,Docker 会创建一组 cgroups 和 namespaces,并将容器的进程放入这些资源限制和隔离的环境中运行。这样,容器就可以在独立的环境中运行,不会影响其他容器或主机系统的资源使用。
  9. 冒泡排序算法 思路 时间复杂度
    • 冒泡排序是一种简单的排序算法,它重复地遍历要排序的数列,一次比较两个元素,如果它们的顺序错误就把它们交换过来。遍历数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成。
    • 冒泡排序的思路是:
      • 比较相邻的元素。如果第一个比第二个大,就交换它们两个。
      • 对每一对相邻元素作同样的工作,从开始第一对到结尾的最后一对。在这一点,最后的元素应该会是最大的数。
      • 针对所有的元素重复以上的步骤,除了最后一个。
      • 持续每次对越来越少的元素重复上面的步骤,直到没有任何一对数字需要比较。
    • 冒泡排序的时间复杂度是 O (n²),其中 n 是要排序的数列的长度。这是因为在最坏情况下,需要进行 n-1 次遍历,每次遍历都需要比较 n-i 次(i 是遍历的次数),所以总的比较次数是 n (n-1)/2,即 O (n²)。
  10. Prometheus 如何自动发现主机

  • Prometheus 可以通过以下方式自动发现主机:
    • 文件服务发现:Prometheus 可以从一个文件中读取主机列表,该文件可以是静态的或者由一个脚本动态生成。
    • Consul 服务发现:Prometheus 可以集成 Consul,从 Consul 中获取主机列表和服务信息。
    • Kubernetes 服务发现:Prometheus 可以集成 Kubernetes,从 Kubernetes API 服务器中获取 Pod、Service 等资源的信息,并自动发现主机。

  1. Prometheus 监控过哪些东西?

  • Prometheus 可以监控各种系统和应用程序,包括但不限于:
    • 服务器指标:如 CPU、内存、磁盘 I/O、网络流量等。
    • 应用程序指标:如 HTTP 请求响应时间、数据库查询性能、消息队列长度等。
    • 容器指标:如 Docker 容器的 CPU、内存、网络等资源使用情况。
    • Kubernetes 指标:如 Pod、Service、Node 等资源的状态和性能指标。

  1. Prometheus 监控 redis 需要关注哪些指标

  • Prometheus 监控 Redis 时,可以关注以下指标:
    • 内存使用情况:包括 used_memory、used_memory_rss、used_memory_peak 等指标,用于了解 Redis 实例的内存使用情况。
    • 连接数:包括 connected_clients、total_connections_received 等指标,用于了解 Redis 实例的连接情况。
    • 命令执行情况:包括 total_commands_processed、instantaneous_ops_per_sec 等指标,用于了解 Redis 实例的命令执行情况。
    • 持久化情况:包括 rdb_last_save_time、aof_last_rewrite_time 等指标,用于了解 Redis 实例的持久化情况。

  1. Prometheus 有哪些指标类型 直方图和摘要的区别是什么?

  • Prometheus 支持以下指标类型:
    • Counter:计数器类型,只能增加,不能减少。常用于记录请求次数、错误次数等。
    • Gauge:仪表盘类型,可以增加也可以减少。常用于记录当前的状态值,如 CPU 使用率、内存使用量等。
    • Histogram:直方图类型,用于记录数据的分布情况。可以统计数据的最小值、最大值、平均值、中位数、分位数等。
    • Summary:摘要类型,也用于记录数据的分布情况。与 Histogram 类似,但 Summary 更加注重实时性,会在一定时间窗口内统计数据的平均值、分位数等。
  • 直方图和摘要的区别主要在于:
    • 统计方式:Histogram 是通过桶(bucket)来统计数据的分布情况,而 Summary 是通过分位数(quantile)来统计数据的分布情况。
    • 实时性:Summary 更加注重实时性,会在一定时间窗口内统计数据的平均值、分位数等,而 Histogram 则是在一段时间内统计数据的分布情况。
    • 存储方式:Histogram 需要存储每个桶的数据,而 Summary 只需要存储平均值、分位数等统计信息,因此 Summary 的存储开销更小。

  1. nginx 限流策略

  • Nginx 可以通过以下方式实现限流:
    • 连接数限流:通过 limit_conn_zone 和 limit_conn 指令来限制连接数。
    • 速率限流:通过 limit_req_zone 和 limit_req 指令来限制请求速率。
    • 基于 IP 的限流:可以通过设置 deny 和 allow 指令来限制特定 IP 的访问。

  1. 有啥想了解的吗?

  • 在面试结束时,面试官通常会问你是否有问题要问。这是一个展示你对公司和岗位的兴趣以及思考能力的机会。即使你心态不好,也可以尝试提出一些问题,例如:
    • 这个岗位的主要职责和挑战是什么?
    • 公司的技术栈和发展方向是什么?
    • 团队的工作氛围和文化是怎样的?

(二)掌阅科技 SRE 运维实习生一面

  1. 自我介绍
    • 介绍自己的姓名、学历、专业、实习经历和技能等。重点突出自己的优势和与岗位的匹配度。
  2. 给定一个场景,用户访问一个网站,讲一下他这个过程(最终是由那个协议返回)?
    • 用户访问一个网站的过程如下:
      • 用户在浏览器中输入网址,浏览器向 DNS 服务器发送请求,解析网址对应的 IP 地址。
      • 浏览器向 IP 地址对应的服务器发送 HTTP 请求。
      • 服务器接收到 HTTP 请求后,进行处理,并返回 HTTP 响应。
      • 浏览器接收到 HTTP 响应后,进行解析和渲染,显示网页内容。
    • 最终是由 HTTP 协议返回网页内容。
  3. 有这样一个场景,给你一个主机,你如何去做安全优化?
    • 可以采取以下安全优化措施:
      • 使用普通用户去操作,尽量避免使用管理员操作。
      • 在内网情境下,禁用掉 selinux 和防火墙,外网的话设定防火墙放行端口。
      • 安装杀毒软件和防火墙,定期更新病毒库和防火墙规则。
      • 关闭不必要的服务和端口,减少攻击面。
      • 加强用户认证和授权,设置强密码,限制用户权限。
      • 定期备份重要数据,以防数据丢失。
  4. 在一个陌生的机器上,我如何去查看他的 CPU 占有率以及各种进程呢?
    • 可以使用 top 命令查看 CPU 占有率和各种进程。进入 top 视图后,按 m 键可以列出 CPU 占有率,以及 swap 分区信息。
  5. 在 top 里面某的一列名称它代表的什么意思?
    • top 命令中的列名含义如下:
      • PID:进程 ID。
      • USER:进程所有者。
      • PR:进程优先级。
      • NI:进程 nice 值。
      • VIRT:进程虚拟内存大小。
      • RES:进程实际使用的内存大小。
      • SHR:进程共享内存大小。
      • S:进程状态,如 R(运行中)、S(睡眠中)、D(不可中断睡眠)、T(停止)、Z(僵尸进程)等。
      • % CPU:进程占用的 CPU 百分比。
      • % MEM:进程占用的内存百分比。
      • TIME+:进程使用的 CPU 时间。
      • COMMAND:进程名称。
  6. 我如果需要查看系统中所有的端口号命令是?(具体的有点记不清了)
    • 可以使用 netstat 命令查看系统中所有的端口号。例如,使用 “netstat -an” 命令可以查看所有的网络连接和端口号。
  7. 向 Nginx 深度问了一下
    • Nginx 是一款高性能的 Web 服务器和反向代理服务器。可以回答以下关于 Nginx 的问题:
      • Nginx 的主要功能和特点是什么?
      • Nginx 的反向代理和负载均衡是如何实现的?
      • Nginx 的配置文件结构和常用指令有哪些?
      • Nginx 如何处理高并发请求?
      • Nginx 如何进行日志管理?
  8. 问了我简历的 Ansible,问了 role 和 playbook
    • Ansible 是一款自动化运维工具,可以用于配置管理、应用部署、任务执行等。Role 和 playbook 是 Ansible 中的重要概念:
      • Role:是 Ansible 中的一种组织方式,可以将一组相关的任务、变量、文件等封装在一起,方便重复使用。
      • Playbook:是 Ansible 中的一种配置文件,用于定义一组任务的执行顺序和条件。Playbook 可以使用 Roles 来组织任务,提高可维护性和可重用性。
  9. 问 Ansible 监测宿主机中脚本优化,如何判断脚本服务安装成功,或者失败了如何回滚?
    • 可以采取以下措施进行脚本优化和回滚:
      • 在脚本中添加错误处理机制,如捕获异常、检查返回值等,以便及时发现和处理错误。
      • 使用 Ansible 的条件判断和循环结构,根据不同的情况执行不同的任务。
      • 在脚本中记录执行过程和结果,以便进行故障排查和回滚。
      • 如果脚本服务安装失败,可以使用 Ansible 的回滚机制,如使用 “--check” 选项进行预演,或者使用 “--limit” 选项限制回滚的范围。
  10. 再就是问了一些实习经历什么的

  • 介绍自己的实习经历,包括实习公司、岗位、主要工作内容和成果等。重点突出自己在实习中所学到的技能和经验,以及对岗位的理解和认识。

(三)携程 SRE 二面

  1. 没有自我介绍,面试官上来锐评本人做的东西没有技术含量,然后要求细讲项目经历
    • 在讲述项目经历时,要突出项目的技术难点、解决方案和成果。可以从项目的背景、目标、技术架构、实现过程等方面进行介绍,同时要注意语言表达清晰、简洁。
  2. 讲到第一个项目经历就被打断(是论文复现)问复现论文有什么意义吗,对你有什么用?(本人词穷)
    • 复现论文的意义可以从以下几个方面回答:
      • 验证论文的方法和结果,提高对该领域的理解和认识。
      • 学习论文中的技术和方法,为自己的研究和实践提供参考。
      • 发现论文中的问题和不足,提出改进和优化的方案。
      • 培养自己的科研能力和实践能力,提高解决问题的能力。
  3. 引申到复现论文与毕设的关系,要求讲毕设,讲到一半被打断,开始八股:
    • 复现论文与毕设的关系可以从以下几个方面回答:
      • 复现论文可以为毕设提供技术和方法的参考,帮助自己更好地完成毕设。
      • 毕设可以是对复现论文的进一步扩展和应用,体现自己的创新和实践能力。
      • 复现论文和毕设都需要进行深入的研究和实践,提高自己的科研能力和实践能力。
  4. TCP 协议不重不丢机制怎么实现(讲了序列号确认号和超时重传)
    • TCP 协议通过序列号、确认号和超时重传机制来实现不重不丢。具体过程如下:
      • 发送方在发送数据时,会为每个数据包分配一个序列号。接收方在接收到数据包后,会发送一个确认号,表示已经接收到了该数据包。
      • 发送方在发送数据包后,会启动一个定时器。如果在定时器超时之前没有收到接收方的确认号,发送方会认为该数据包丢失,并重新发送该数据包。
      • 接收方在接收到数据包后,会检查序列号是否连续。如果序列号不连续,接收方会认为该数据包是重复的,并丢弃该数据包。同时,接收方会发送一个确认号,表示已经接收到了该数据包。
  5. 要求细讲上面哪些实现了不重,本问题重复问了三次
    • TCP 协议中的序列号和确认号机制实现了不重。具体过程如下:
      • 发送方在发送数据时,会为每个数据包分配一个序列号。接收方在接收到数据包后,会发送一个确认号,表示已经接收到了该数据包。
      • 接收方在接收到数据包后,会检查序列号是否连续。如果序列号不连续,接收方会认为该数据包是重复的,并丢弃该数据包。同时,接收方会发送一个确认号,表示已经接收到了该数据包。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值