最新字節跳動運維云原生面經分享

繼續分享最新的go面經。

今天分享的是組織內部的朋友在字節的go運維工程師崗位的云原生方向的面經,涉及Prometheus、Kubernetes、CI/CD、網絡代理、MySQL主從、Redis哨兵、系統調優及基礎命令行工具等知識點,問題我都整理在下面了

面經詳解


Prometheus 的信息采集原理?

回答思路:

  • 數據模型:Prometheus 采用時間序列數據模型,每個數據點由以下部分組成:
    • 度量名稱(Metric Name):標識數據的類型(如 http_requests_total)。
    • 標簽(Labels):鍵值對形式的元數據,用于唯一標識數據的來源和維度(如 job="api-server", instance="192.168.1.100:9090")。
    • 時間戳(Timestamp):記錄數據采集的時間。
    • 數值(Value):具體指標值(如 CPU 使用率 75%)。
  • 數據采集
    • 拉取模式(Pull Model):Prometheus 定期主動從目標(Targets)拉取指標數據,默認周期為 1 分鐘。
    • 推送模式(Push Model):通過中間件(如 Pushgateway)將數據推送到 Prometheus,適用于短生命周期任務(如批處理作業)。
    • Service Discovery:支持自動發現目標節點(如 Kubernetes 服務、Consul 注冊中心),減少手動配置。
  • 存儲與查詢
    • 數據存儲為時間序列,按度量名稱和標簽分組,支持高效查詢。
    • PromQL:提供豐富的查詢語言,支持聚合運算(如 avg(), sum())、范圍查詢([5m])、條件判斷(如 > 90)等。
  • 優勢與局限性
    • 優勢:高可用、分布式、靈活的標簽系統。
    • 局限性:拉取模式可能因網絡問題漏數據,存儲成本較高。

Prometheus 采集K8S是哪個接口?

回答思路:

  • Kubernetes API Server
    • Prometheus 通過 Kubernetes API 監控集群資源狀態(如 Pod、Deployment、Node 等),需配置 kubernetes_sd_config 進行服務發現。
    • 示例配置:
    scrape_configs:  - job_name: 'kubernetes-apiservers'  kubernetes_sd_configs:  - role: endpoints  relabel_configs:  - action: keep  regex: default  source_labels: [__meta_kubernetes_namespace]  
  • Metrics Server
    • 提供 Pod、Node 的資源使用指標(如 CPU/內存使用率),需通過 kube-state-metricscAdvisor 采集。
    • 示例:
    curl http://localhost:8080/api/v1/nodes/{node-name}/metrics  
  • 自定義接口
    • 應用需暴露 /metrics 端點,格式符合 Prometheus 文本格式(如通過 prometheus-client-go 庫實現)。
  • 注意事項
    • 需配置 RBAC 權限,確保 Prometheus 有權限訪問 K8S API。
    • 使用 kube-prometheus-stack Helm Chart 可一鍵部署完整監控鏈。

Prometheus 的告警是怎么配置的?

回答思路:

  • 告警規則(Alert Rules)
    • prometheus.yml 或獨立的 .rules 文件中定義規則,例如:
    groups:  - name: example  rules:  - alert: HighCPUUsage  expr: instance:node_cpu_usage:rate1m > 0.8  for: 5m  labels:  severity: warning  annotations:  summary: "Instance {{ $labels.instance }} CPU usage is high"  
  • expr:PromQL 表達式,定義觸發條件。
  • for:告警持續時間(避免短暫波動觸發)。
  • labelsannotations:補充告警元數據和描述。
  • Alertmanager 配置
    • 路由(Routes):根據標簽(如 severity)將告警分發到不同接收者。
    route:  group_by: ['alertname']  group_wait: 30s  group_interval: 5m  receiver: 'team-alerts'  routes:  - match_re:  severity: critical  receiver: 'oncall-team'  
  • 抑制(Inhibit):高優先級告警(如 InstanceDown)可抑制低優先級告警(如 HighCPUUsage)。
  • 接收器(Receivers):支持多種通知方式(如 Slack、PagerDuty、Email)。
  • 實踐建議
    • 避免“告警疲勞”:合理設置閾值和 for 參數。
    • 驗證告警:通過 fire-and-forget 模式測試配置。

Prometheus 的告警是基于哪個組件配置的?

回答思路:

  • 核心組件:Alertmanager
    • 功能
      1. 接收 Prometheus 發送的告警事件。
      2. 根據配置路由規則將告警分發給接收者(如團隊 Slack 頻道)。
      3. 聚合相似告警,減少重復通知(如 group_by)。
      4. 抑制冗余告警(如主節點宕機時抑制其下所有服務的告警)。
    • 配置文件示例
    global:  resolve_timeout: 5m  route:  receiver: 'team-email'  group_wait: 30s  receivers:  - name: 'team-email'  email_configs:  - to: 'team@example.com'  
  • Prometheus 集成
    • prometheus.yml 中指定 Alertmanager 地址:
    alerting:  alertmanagers:  - static_configs:  - targets: ['alertmanager:9093']  
  • 擴展能力
    • 支持與 Grafana、PagerDuty 等工具集成,實現更復雜的告警管理。

CI 流水線發現問題是怎么排查解決的?

回答思路:

  • 分層排查法
    1. 環境層
      • 檢查流水線運行的環境(如 Docker 鏡像、依賴版本、網絡配置)。
      • 使用 docker inspectkubectl describe pod 查看容器狀態。
    2. 日志層
      • 定位到失敗步驟的日志,關注錯誤代碼、堆棧信息。
      • 使用日志聚合工具(如 ELK、Splunk)快速篩選關鍵信息。
    3. 代碼層
      • 復現問題:本地復現流水線環境,逐步調試代碼。
      • 單元測試:針對可疑代碼添加測試用例。
    4. 配置層
      • 檢查流水線 YAML 文件中的參數、路徑、工具版本。
      • 確認敏感信息(如 API 密鑰)是否正確注入。
  • 工具輔助
    • GitLab CI/CD:通過 echo 命令輸出中間變量,或使用 debug 模式。
    • Jenkins:使用 Blue Ocean 插件可視化流水線狀態。
  • 預防措施
    • 增加流水線前置檢查(如依賴庫版本校驗)。
    • 實施變更管理流程,減少環境漂移。

訪問服務出現 502 是什么問題?

回答思路:

  • 常見原因及排查步驟
    1. 反向代理問題
      • Nginx 配置錯誤:檢查 proxy_pass 是否指向正確的后端服務地址。
      • 超時設置:調整 proxy_read_timeoutproxy_connect_timeout
    2. 后端服務問題
      • 服務未啟動:檢查進程狀態(ps aux | grep service_name)。
      • 負載過高:監控 CPU/內存使用率,優化代碼或擴容。
    3. 網絡問題
      • 防火墻/安全組:確認后端服務端口是否開放。
      • DNS 解析:使用 dignslookup 驗證域名解析。
    4. 健康檢查失敗
      • 如果使用負載均衡(如 Kubernetes Ingress),檢查健康檢查配置是否合理。
  • 示例排查流程
    1. 訪問日志:檢查 Nginx 的 error.log 中的 502 錯誤詳情。
    2. 模擬請求:直接訪問后端服務(如 curl http://backend:8080)。
    3. 查看后端日志:檢查服務端日志(如 tail -f /var/log/app.log)。
  • 解決方案
    • 重啟服務或代理。
    • 調整超時參數或負載均衡策略。
    • 優化后端服務性能(如增加緩存、分頁查詢)。

K8S service 的服務類型有幾種?

回答思路:

  • ClusterIP
    • 默認類型,僅在集群內部通過虛擬 IP(VIP)訪問。
    • 適用場景:后端服務間通信(如數據庫、API 服務)。
  • NodePort
    • 在每個 Node 的 IP 上開放一個端口(默認 30000-32767),外部可通過 NodeIP:NodePort 訪問。
    • 適用場景:開發/測試環境暴露服務,或需要快速訪問。
  • LoadBalancer
    • 在云平臺(如 AWS、GCP)創建云負載均衡器,流量自動轉發到 Service。
    • 適用場景:生產環境的高可用服務暴露。
  • ExternalName
    • 通過 CNAME 將 Service 映射到外部域名(如 api.example.com),常用于跨集群訪問。
  • 高級場景
    • 頭信息修改:通過 externalTrafficPolicy: Local 控制流量來源。
    • Ingress 控制器:結合 Ingress 資源實現基于路徑或域名的路由(如 Nginx Ingress)。
  • 選擇建議
    • 生產環境優先使用 LoadBalancer 或 Ingress。
    • 避免在生產環境使用 NodePort,因其端口沖突風險較高。

給文件的每一個前面增加head?

回答思路:

  • Vim 編輯器
    1. 打開文件:vim filename
    2. 進入命令模式,輸入 :%s/^/head /g(替換每一行開頭)。
    3. 或使用可視模式:ggVG:Ihead (全局插入)。
  • sed 命令
  sed -i 's/^/head /' filename  # 或批量處理多行:  sed -i '1i\head' filename  # 在文件開頭插入(非每行)  
  • awk 命令
  awk '{print "head " $0}' filename > newfile  
  • 注意事項
    • -i 參數會直接修改原文件,建議先備份。
    • 若需保留原文件,可重定向輸出:awk ... > newfile

awk 提取數值為8的第二列的數量,分隔符為 | ,怎么提取?

回答思路:

  • 基礎命令
  awk -F '|' '$2 == 8 {count++} END {print count}' filename  
  • -F '|':設置分隔符為 |
  • $2 == 8:篩選第二列值為 8 的行。
  • count++:計數器自增。
  • 擴展場景
    • 統計范圍$2 > 5 && $2 < 10 統計第二列在 5~10 之間的行數。
    • 多條件匹配
    awk -F '|' '$2 == 8 && $3 ~ /error/ {count++} END {print count}'  
  • 輸出詳細信息
    awk -F '|' '$2 == 8 {print $0}' filename > result.txt  
  • 性能優化
    • 處理大文件時,可結合 time 命令或 parallel 加速。

nginx 的負載均衡怎么配置?

回答思路:

  • 基礎配置步驟
    1. 定義 upstream 組
     upstream backend {  server backend1.example.com weight=3;  server backend2.example.com;  # 權重默認1  server backup.example.com backup;  # 備用節點  }  
  1. 配置 server 和 location
     server {  listen 80;  server_name example.com;  location / {  proxy_pass http://backend;  proxy_next_upstream error timeout invalid_header http_500;  # 失敗重試策略  }  }  
  1. 負載均衡算法
    • round_robin(默認):輪詢。
    • ip_hash:根據客戶端 IP 分配,保持會話。
    • least_conn:最少連接數。
  • 健康檢查
    • 主動健康檢查(需 Nginx Plus):
    upstream backend {  zone backend 64k;  server backend1.example.com;  health_check;  }  
  • 被動健康檢查:通過 proxy_next_upstream 規則剔除故障節點。
  • 高級配置
    • 超時設置proxy_connect_timeout 5s;
    • 會話保持:結合 ip_hash 或 Cookie。
  • 驗證與測試
    • 使用 curl -I http://example.com 檢查響應頭的 X-Forwarded-For
    • 模擬節點故障,觀察流量切換是否正常。

MySQL 主從架構和 redis哨兵 前端是用什么連接的服務,讀取數據庫中的數據,對數據進行一個應用的?

回答思路:

  • MySQL 主從架構
    1. 連接方式
      • 前端應用通過主節點寫入數據,通過從節點讀取(讀寫分離)。
      • 使用連接池(如 HikariCP)管理數據庫連接。
    2. 注意事項
      • 從庫延遲可能導致讀寫不一致,需通過 read_only 參數控制從庫寫入。
      • 使用中間件(如 MyCat)實現自動路由。
  • Redis 哨兵模式
    1. 連接方式
      • 客戶端連接哨兵集群(如通過 JedisSentinelPool),哨兵自動發現主節點。
    2. 高可用機制
      • 哨兵監控主節點,主節點故障時自動選舉新主節點。
      • 客戶端通過哨兵獲取最新主節點地址。
  • 應用層設計
    • MySQL:業務邏輯中區分讀寫操作(如 @Transactional 注解控制)。
    • Redis:使用連接池自動處理主從切換,避免手動干預。

linux 系統調優是怎么進行調優的,對應簡歷中的性能是怎么調優的?

回答思路:

  • 性能監控工具
    • 資源監控
      • top/htop:實時查看 CPU、內存、進程狀態。
      • vmstat:監控內存、swap、IO 等。
      • iostat:分析磁盤 IO 性能。
    • 網絡監控netstat, tcpdump, iftop
  • 調優方向
    1. CPU
      • 優化線程調度(如 nice 調整優先級)。
      • 調整內核參數(如 vm.swappiness 控制 swap 使用)。
    2. 內存
      • 增加 vm.max_map_count(如 Elasticsearch 需要)。
      • 使用 oom_score_adj 防止關鍵進程被 OOM Killer 終止。
    3. IO
      • 調整 read_ahead 緩沖區大小。
      • 使用 noatime 掛載選項減少磁盤寫入。
    4. 網絡
      • 調整 net.core.somaxconn 擴大連接隊列。
      • 啟用 TCP BBR 擁塞控制算法。
  • 實踐案例
    • 場景:數據庫服務器 CPU 使用率持續 90%。
    • 步驟
      1. 通過 perf top 定位熱點函數。
      2. 優化 SQL 查詢(添加索引、減少全表掃描)。
      3. 調整 MySQL 配置(如 innodb_buffer_pool_size)。
    • 驗證:對比調優前后的 sar 數據,確保性能提升。
  • 自動化監控
    • 結合 Prometheus + Grafana 實時監控關鍵指標,設置告警閾值。

歡迎關注 ?

我們搞了一個免費的面試真題共享群,互通有無,一起刷題進步。

沒準能讓你能刷到自己意向公司的最新面試題呢。

感興趣的朋友們可以私信我,備注:面試群。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/79003.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/79003.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/79003.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

PyQt6實例_pyqtgraph散點圖顯示工具_代碼分享

目錄 描述&#xff1a; 效果&#xff1a; 代碼&#xff1a; 返回結果對象 字符型橫坐標 通用散點圖工具 工具主界面 使用舉例 描述&#xff1a; 1 本例結合實際應用場景描述散點圖的使用。在財報分析中&#xff0c;需要將數值放在同行業中進行比較&#xff0c;從而判…

純C協程框架NtyCo

原文是由寫的&#xff0c;寫的真的很好&#xff0c;原文鏈接&#xff1a;純c協程框架NtyCo實現與原理-CSDN博客 1.為什么會有協程&#xff0c;協程解決了什么問題&#xff1f; 網絡IO優化 在CS&#xff0c;BS的開發模式下&#xff0c;服務器的吞吐量是一個受關注的參數&#x…

信息系統項目管理師——第10章 項目進度管理 筆記

10項目進度管理 1.規劃進度管理&#xff1a;項目章程、項目管理計劃&#xff08;開發方法、范圍管理計劃&#xff09;、事業環境因素、組織過程資產——專家判斷、數據分析&#xff08;備選方案分析&#xff09;、會議——進度管理計劃 2.定義活動&#xff1a;WBS進一步分解&am…

通過門店銷售明細表用SQL得到每月每個門店的銷冠和按月的同比環比數據

假設我在Snowflake里有銷售表&#xff0c;包含ID主鍵、門店ID、日期、銷售員姓名和銷售額&#xff0c;需要統計出每個月所有門店和各門店銷售額最高的人&#xff0c;不一定是一個人&#xff0c;以及他所在的門店ID和月總銷售額。 統計每個月份下&#xff0c;各門店內銷售額最高…

移遠通信LG69T賦能零跑B10:高精度定位護航,共赴汽車智聯未來

當前&#xff0c;汽車行業正以前所未有的速度邁向智能化時代&#xff0c;組合輔助駕駛技術已然成為車廠突出重圍的關鍵所在。高精度定位技術作為實現車輛精準感知與高效協同的基石&#xff0c;其重要性日益凸顯。 作為全球領先的物聯網及車聯網整體解決方案供應商&#xff0c;移…

jmeter-Beashell獲取http請求體json

在JMeter中&#xff0c;使用BeanShell處理器或BeanShell Sampler來獲取HTTP請求體中的JSON數據是很常見的需求。這通常用于在測試計劃中處理和修改請求體&#xff0c;或者在響應后進行驗證。以下是一些步驟和示例代碼&#xff0c;幫助你使用BeanShell來獲取HTTP請求體中的JSON數…

若干查找算法

一、順序查找 1.原理 2.代碼 #if 0 const int FindBySeq(const vector<int>& ListSeq, const int KeyData) {int retrIdx -1;int size ListSeq.size();for(int i 0; i < size; i) {if (ListSeq.at(i) KeyData){retrIdx i;break;}}return retrIdx; } #else c…

Uniapp(vue):生命周期

目錄 一、Vue生命周期二、Uniapp中頁面的生命周期三、執行順序比較一、Vue生命周期 setup():是在beforeCreate和created之前運行的,所以可以用setup代替這兩個鉤子函數。onBeforeMount():已經完成了模板的編譯,但是組件還未掛載到DOM上的函數。onMounted():組件掛載到DOM完…

Prometheus監控

1、docker - prometheusgrafana監控與集成到spring boot 服務_grafana spring boot-CSDN博客 2、【IT運維】普羅米修斯基本介紹及監控平臺部署&#xff08;PrometheusGrafana&#xff09;-CSDN博客 3、Prometheus監控SpringBoot-CSDN博客 4、springboot集成普羅米修斯-CSDN博客…

C#進階學習(十四)反射的概念以及關鍵類Type

目錄 本文末尾有相關類中的總結&#xff0c;如有需要直接跳到最后即可 前置知識&#xff1a; 1、程序集&#xff08;Assembly&#xff09; 2、元數據&#xff08;Metadata&#xff09; 3、中間語言&#xff08;IL, Intermediate Language&#xff09; 中間語言&#xff08;…

Kotlin中的also、apply、invoke用法詳解

以下是 Kotlin 中作用域函數(let、run、with、also、apply)和 invoke 操作符的完整總結,結合代碼示例和對比說明,幫助您理解它們的用法和區別。 一、作用域函數:簡化對象操作 作用域函數用于在對象的上下文中執行代碼塊,并根據函數的不同返回對象本身或 lambda 的結果。…

Ubuntu實現遠程文件傳輸

目錄 安裝 FileZillaUbuntu 配套設置實現文件傳輸 在Ubuntu系統中&#xff0c;實現遠程文件傳輸的方法有多種&#xff0c;常見的包括使用SSH&#xff08;Secure Shell&#xff09;的SCP&#xff08;Secure Copy Protocol&#xff09;命令、SFTP&#xff08;SSH File Transfer P…

TEC制冷片詳解(STM32)

目錄 一、介紹 二、傳感器原理 1.原理圖 2.引腳描述 三、程序設計 main文件 jdq.h文件 jdq.c文件 四、實驗效果 五、資料獲取 項目分享 一、介紹 半導體制冷片&#xff08;又稱熱電模塊&#xff09;&#xff0c;是利用半導體材料的珀耳帖效應制造的一種新型制冷元件…

DotNet 入門:(一) 環境安裝

一、前言 本想用 Go 語言實現一個通過小愛同學操作電腦的&#xff0c;比如我對著手機說打開音樂&#xff0c;或調小音樂&#xff0c;電腦能做相應的處理。奈何我一時間沒看懂&#xff0c;就想著用.Net 來試一下&#xff0c;于是就有了下面這篇文章。 二、安裝.Net 環境 1. 下…

人工智能數學基礎(四):線性代數

線性代數是人工智能領域的核心數學工具之一&#xff0c;廣泛應用于數據表示、模型訓練和算法優化等多個環節。本文將系統梳理線性代數的關鍵知識點&#xff0c;并結合 Python 實例&#xff0c;助力讀者輕松掌握這一重要學科。資源綁定附上完整資源供讀者參考學習&#xff01; …

Github 2025-04-26 Rust開源項目日報Top10

根據Github Trendings的統計,今日(2025-04-26統計)共有10個項目上榜。根據開發語言中項目的數量,匯總情況如下: 開發語言項目數量Rust項目10Dart項目1RustDesk: 用Rust編寫的開源遠程桌面軟件 創建周期:1218 天開發語言:Rust, Dart協議類型:GNU Affero General Public Li…

使用org.java_websocket庫第三方庫實現廣播

可以使用org.java_websocket庫來實現WebSocket服務器&#xff0c;并通過broadcast方法實現廣播 java實現 import org.java_websocket.WebSocket; import org.java_websocket.handshake.ClientHandshake; import org.java_websocket.server.WebSocketServer; import java.net.…

【自然語言處理與大模型】LangChain大模型應用框架入門②

本文介紹LangChain的另一個重要組件——提示詞模板&#xff08;Prompt Template&#xff09;組件&#xff0c;它主要用于將用戶輸入和參數轉換為語言模型可理解的指令。有助于引導模型生成符合預期的響應&#xff0c;幫助其更好地理解上下文&#xff0c;從而輸出相關且連貫的語…

單例設計模式之懶漢式以及線程安全問題

在單例設計模式中&#xff0c;懶漢式&#xff08;Lazy Initialization&#xff09; 通過延遲實例化來優化資源使用&#xff0c;但在多線程環境下存在線程安全問題。以下是其核心問題及解決方案的詳細解析&#xff1a; 一、基礎懶漢式代碼&#xff08;線程不安全&#xff09; pu…

Windows7升級PowerShell到5.1

window7系統&#xff0c;安裝了vs2019后&#xff0c;應用要用到PowerShell&#xff0c;Tool->Commond Line->Developer PowerShell時&#xff0c;提示版本需要3.0以上。還有編譯新版本vcpkg&#xff08;2021前的版本&#xff09;&#xff0c;腳本報錯。所以需要升級下Pow…