字節跳動后端一面

📍1. Gzip壓縮技術詳解
Gzip是一種流行的無損數據壓縮格式,它使用DEFLATE算法來減少文件大小,廣泛應用于網絡傳輸和文件存儲中以提高效率。
🚀 使用場景:
? 網站優化:通過壓縮HTML、CSS、JavaScript文件來加速頁面加載,提升用戶體驗。
? 數據備份與歸檔:壓縮大型數據集,減少存儲空間和傳輸帶寬。
? API數據傳輸:壓縮API響應,降低網絡傳輸成本,尤其是在移動網絡環境下。
? 大數據處理:在Hadoop、Spark等大數據框架中壓縮中間結果,提高處理效率。
🔧 Golang使用示例:

import ("bytes""compress/gzip"
)func GzipEncode(data []byte) ([]byte, error) {var buf bytes.Buffergw := gzip.NewWriter(&buf)defer gw.Close()_, err := gw.Write(data)if err!= nil {return nil, err}return buf.Bytes(), nil
}

📍2. MySQL慢查詢處理四部曲
? 開啟慢查詢日志:配置my.cnf文件,設置slow_query_log=1long_query_time閾值,記錄執行時間超過閾值的SQL語句。
? 使用分析工具:利用mysqldumpslowpt-query-digest等工具分析慢查詢日志,識別頻繁執行的慢SQL。
? 優化索引:根據慢查詢分析結果,為頻繁查詢的列創建索引,優化復合索引順序,遵循最左前綴原則。
? SQL優化:重構SQL語句,避免使用SELECT *,減少JOIN操作,使用LIMIT限制結果集大小,優化子查詢和關聯查詢。

📍3. Binlog日志格式對比

格式特點適用場景
STATEMENT記錄SQL語句,日志量小,性能高簡單DML操作,不涉及復雜事務
ROW記錄行級變更,數據一致性高,可精確恢復復雜事務,需要高數據安全性
MIXED自動切換STATEMENT和ROW格式混合業務場景,兼顧性能和安全性

📍4. MySQL索引優化指南
? B+樹索引:理解B+樹結構,合理設計索引,支持快速查找和范圍查詢。
? 最左前綴原則:復合索引按查詢頻率高的列在前,確保索引高效利用。
? 覆蓋索引:優化查詢列與索引列,避免回表操作,提高查詢效率。
? 索引優化案例:分析查詢性能瓶頸,為頻繁查詢的列添加索引,減少IO操作,提升查詢速度。

📍5. 強一致性定義
強一致性(也稱為線性一致性或原子一致性)要求分布式系統中所有節點在同一時刻看到的數據完全一致,確保數據的實時性和準確性。
典型實現:兩階段提交(2PC)、Paxos、Raft等分布式一致性算法。
應用場景:金融交易、庫存管理、訂單處理等對數據一致性要求極高的業務場景。

📍6. Kafka業務場景
? 日志收集與分析:實時采集用戶行為日志、系統日志,支持大數據量處理和實時分析。
? 事件驅動架構:實現服務間解耦,通過發布/訂閱模式實現異步消息傳遞,提高系統可擴展性和靈活性。
? 數據管道:作為數據流平臺,連接數據源和目標系統,實現數據集成和ETL流程。
? 實時數據流處理:結合Flink、Spark Streaming等流處理框架,實現實時數據分析和決策支持。

📍7. RocketMQ事務消息流程

  1. 發送半消息(prepare消息):生產者發送消息到RocketMQ,消息狀態為半消息。
  2. 執行本地事務:生產者執行本地事務操作,如數據庫更新、文件寫入等。
  3. 根據本地事務結果,提交或回滾消息:生產者根據本地事務執行結果,向RocketMQ發送提交或回滾消息。
    🛡? 確保消息發送與本地事務執行結果一致,常用于分布式事務場景,如訂單支付、庫存扣減等。

📍8. 消息隊列選型指南
? Kafka:適合大數據量、高吞吐量的場景,如日志收集、實時數據處理、數據流平臺等。
? RocketMQ:提供事務消息、順序消息、消息過濾等高級特性,適合金融、電商等對消息可靠性要求極高的場景。
? 選型考慮:根據業務需求、性能要求、可靠性、功能特性、生態系統支持等因素選擇合適的消息隊列。

📍9. 消息冪等保障方案
? 唯一消息ID:為每條消息生成唯一ID,消費者在處理消息前檢查是否已處理過。
? 數據庫去重表:使用數據庫表記錄已處理消息ID,消費前查詢去重表判斷消息是否已處理。
? 狀態機控制:根據業務狀態判斷消息是否已處理,確保消息處理邏輯冪等。
? 分布式鎖:在高并發場景下,使用分布式鎖確保同一時刻只有一個消費者處理消息。

📍10. 死信隊列實現
? 設置消息消費超時或重試次數:配置消息隊列的消費超時時間和重試次數。
? 消費失敗的消息被投遞到死信隊列(DLQ):消息消費失敗后,被自動投遞到死信隊列。
? 監控DLQ,定期處理失敗消息:通過監控工具或定時任務檢查DLQ,處理失敗消息,如人工干預、自動重試或記錄日志。

📍11. Redis分布式鎖實現

func RedisDistributedLock(conn redis.Conn, lockKey string, lockValue string, expire int) bool {script := redis.NewScript(1, `if redis.call("setnx", KEYS[1], ARGV[1]) == 1 thenredis.call("expire", KEYS[1], ARGV[2])return 1elsereturn 0end`)result, err := script.Run(conn, []string{lockKey}, []string{lockValue, expire}).Result()if err!= nil {return false}return result.(int) == 1
}

?? 注意鎖的過期時間設置,避免死鎖,同時考慮鎖的續期問題,防止業務執行時間過長導致鎖提前釋放。

📍12. RedLock解決的問題
RedLock通過多節點分布式鎖機制,解決單點Redis故障導致的鎖失效問題,確保分布式環境下鎖的高可用性和安全性。
主要解決以下問題:
? 單點故障:避免單點Redis宕機導致鎖不可用。
? 鎖過期釋放:在鎖過期時間內,如果業務未執行完,防止其他節點獲取到鎖。
? 腦裂問題:在Redis集群中,避免因網絡分區導致多個節點同時持有鎖。

📍13. Redis消息隊列方案
? List結構:使用LPUSHRPOP實現簡單隊列,適用于低并發、輕量級消息場景。
? Streams:Redis 5.0引入的新特性,支持消息持久化、消費者組、消息確認、消息ID生成等高級功能,提供更強大的消息隊列能力。
應用場景:適用于輕量級、低延遲的消息場景,如實時通知、任務隊列等,但需注意消息持久化和數據一致性,確保消息不丟失。

📍14. ES+MySQL架構實踐
? MySQL存儲事務性數據:作為主數據庫,存儲訂單、用戶、交易等事務性數據,保證數據完整性和一致性。
? ES存儲非事務性數據:用于全文搜索、數據分析、實時查詢等場景,提供快速查詢和數據分析能力。
? 數據同步:使用Canal、Logstash等工具實現MySQL到ES的數據同步,保持數據一致性。
? 業務場景:商品信息存儲在MySQL,ES提供商品搜索功能,提升用戶體驗;同時,利用ES進行數據分析,支持業務決策。
? 架構優化:考慮數據一致性、實時性、性能等因素,優化數據同步策略,如增量同步、異步同步等,確保系統穩定高效運行。

📍15. 分庫分表策略
? 垂直分庫:按業務模塊劃分數據庫,如訂單庫、用戶庫等,降低單庫壓力,提高業務隔離性。
? 水平分表:按某個字段(如用戶ID、時間)將大表拆分為多個小表,分散數據存儲,提高查詢性能。
? 分片鍵選擇:選擇均勻分布的字段作為分片鍵,避免數據傾斜,如使用哈希函數或范圍分區。
? 中間件支持:使用ShardingSphere、MyCat等分庫分表中間件,簡化分庫分表操作,提供透明化訪問。

📍16. 算法題:二叉樹重建及后序遍歷

type TreeNode struct {Val   intLeft  *TreeNodeRight *TreeNode
}func buildTree(preorder []int, inorder []int) *TreeNode {if len(preorder) == 0 || len(inorder) == 0 {return nil}root := &TreeNode{Val: preorder[0]}index := findIndex(inorder, preorder[0])root.Left = buildTree(preorder[1:index+1], inorder[:index])root.Right = buildTree(preorder[index+1:], inorder[index+1:])return root
}func findIndex(arr []int, target int) int {for i, v := range arr {if v == target {return i}}return -1
}func postorderTraversal(root *TreeNode) []int {if root == nil {return []int{}}left := postorderTraversal(root.Left)right := postorderTraversal(root.Right)return append(append(left, right...), root.Val)
}

歡迎關注我的小紅書一起來討論。
在這里插入圖片描述

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

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

相關文章

Leetcode 3448. Count Substrings Divisible By Last Digit

Leetcode 3448. Count Substrings Divisible By Last Digit 1. 解題思路2. 代碼實現 題目鏈接:3448. Count Substrings Divisible By Last Digit 1. 解題思路 這一題的話我們走的是一個累積數組的思路。 首先,我們使用一個cache數組記錄下任意段數字…

三維模擬-機械臂自翻車

機械仿真 前言效果圖后續 前言 最近在研究Unity機械仿真,用Unity實現其運動學仿真展示的功能,發現一個好用的插件“MGS-Machinery-master”,完美的解決了Unity關節定義缺少液壓缸伸縮關節功能,內置了多個場景,講真的&…

USB子系統學習(四)用戶態下使用libusb讀取鼠標數據

文章目錄 1、聲明2、HID協議2.1、描述符2.2、鼠標數據格式 3、應用程序4、編譯應用程序5、測試6、其它 1、聲明 本文是在學習韋東山《驅動大全》USB子系統時,為梳理知識點和自己回看而記錄,全部內容高度復制粘貼。 韋老師的《驅動大全》:商…

2月9日QT

優化登錄框: 當用戶點擊取消按鈕,彈出問題對話框,詢問是否要確定退出登錄,并提供兩個按鈕,yes|No,如果用戶點擊的Yes,則關閉對話框,如果用戶點擊的No,則繼續登錄 當用戶…

安卓路由與aop 以及 Router-api

安卓路由(Android Router)和AOP(面向切面編程)是兩個在Android開發中常用的概念。下面我將詳細講解這兩個概念及其在Android開發中的應用。 一、安卓路由 安卓路由主要用于在應用程序中管理不同組件之間的導航和通信。它可以簡化…

大模型賦能網絡安全整體應用流程概述

一、四個階段概述 安全大模型的應用大致可以分為四個階段: 階段一主要基于開源基礎模型訓練安全垂直領域的模型; 階段二主要基于階段一訓練出來的安全大模型開展推理優化、蒸餾等工序,從而打造出不同安全場景的專家模型,比如數據安全領域、安全運營領域、調用郵件識別領…

nexus部署及配置https訪問

1. 使用docker-compose部署nexus docker-compose-nexus.yml version: "3" services:nexus:container_name: my-nexusimage: sonatype/nexus3:3.67.1hostname: my-nexusnetwork_mode: hostports:- 8081:8081deploy:resources:limits:cpus: 4memory: 8192Mreservations…

史上最快 Python版本 Python 3.13 安裝教程

Python3.13安裝和配置 一、Python的下載 1. 網盤下載地址 (下載速度比較快,推薦) Python3.13.0下載:Python3.13.0下載地址(windows)3.13.0下載地址(windows) 點擊下面的下載鏈接&#xff0c…

Docker從入門到精通- 容器化技術全解析

第一章:Docker 入門 一、什么是 Docker? Docker 就像一個超級厲害的 “打包神器”。它能幫咱們把應用程序和它運行所需要的東東都整整齊齊地打包到一起,形成一個獨立的小盒子,這個小盒子在 Docker 里叫容器。以前呢,…

ProcessingP5js數據可視化

折線圖繪制程序設計說明 可以讀取表格數據,并轉換成折線圖,條形圖和餅狀圖,并設計了銜接動畫效果 1. 功能概述 本程序使用 Processing 讀取 CSV 文件數據,并繪制帶有坐標軸和數據點的折線圖。橫坐標(X 軸&#xff09…

使用云計算,企業的數據監管合規問題如何解決?

使用云計算,企業的數據監管合規問題如何解決? 在當今這個信息化、數字化的時代,數據無疑成為了企業最寶貴的資產之一。隨著云計算的普及,企業將大量數據存儲在云端,不僅提升了效率,也帶來了更多靈活性。然…

AWS Fargate

AWS Fargate 是一個由 Amazon Web Services (AWS) 提供的無服務器容器計算引擎。它使開發者能夠運行容器化應用程序,而無需管理底層的服務器或虛擬機。簡而言之,AWS Fargate 讓你只需關注應用的容器本身,而不需要管理運行容器的基礎設施&…

vue3+vite+eslint|prettier+elementplus+國際化+axios封裝+pinia

文章目錄 vue3 vite 創建項目如果創建項目選了 eslint prettier從零教你使用 eslint prettier第一步,下載eslint第二步,創建eslint配置文件,并下載好其他插件第三步:安裝 prettier安裝后配置 eslint (2025/2/7 補充) 第四步&am…

vLLM V1 重磅升級:核心架構全面革新

本文主要是 翻譯簡化個人評讀,原文請參考:vLLM V1: A Major Upgrade to vLLM’s Core Architecture vLLM V1 開發背景 2025年1月27日,vLLM 開發團隊推出 vLLM V1 alpha 版本,這是對框架核心架構的里程碑式升級。基于過去一年半的…

Jupyter Notebook自動保存失敗等問題的解決

一、未生成配置文件 需要在命令行中,執行下面的命令自動生成配置文件 jupyter notebook --generate-config 執行后會在 C:\Users\用戶名\.jupyter目錄中生成文件 jupyter_notebook_config.py 二、在網頁端打開Jupyter Notebook后文件保存失敗;運行代碼…

使用wpa_supplicant和wpa_cli 掃描wifi熱點及配網

一:簡要說明 交叉編譯wpa_supplicant工具后會有wpa_supplicant和wpa_cli兩個程序生產,如果知道需要連接的wifi熱點及密碼的話不需要遍歷及查詢所有wifi熱點的名字及信號強度等信息的話,使用wpa_supplicant即可,否則還需要使用wpa_…

Flink (十七) :Table API SQL (五) 時區

Flink 為日期和時間提供了豐富的數據類型, 包括 DATE, TIME, TIMESTAMP, TIMESTAMP_LTZ, INTERVAL YEAR TO MONTH, INTERVAL DAY TO SECOND 。 Flink 支持在 session (會話)級別設置…

【真一鍵部署腳本】——一鍵部署deepseek

目錄 deepseek一鍵部署腳本說明 0 必要前提 1 使用方法 1.1 使用默認安裝配置 1.1 .1 使用其它ds模型 1.2 使用自定義安裝 2 附錄:deepseek模型手動下載 3 腳本下載地址 deepseek一鍵部署腳本說明 0 必要前提 linux環境 python>3.10 1 使用方法 1.1 …

5.2Internet及其作用

5.2.1Internet概述 Internet稱為互聯網,又稱英特網,始于1969年的美國ARPANET(阿帕網),是全球性的網絡。 互連網指的是兩個或多個不同類型的網絡通過路由器等網絡設備連接起來,形成一個更大的網絡結構。互連…

“圖像識別分割算法:解鎖視覺智能的關鍵技術

嘿,各位朋友!今天咱們來聊聊圖像識別分割算法。這可是計算機視覺領域里特別厲害的一項技術,簡單來說,它能讓機器“看懂”圖像中的不同部分,并把它們精準地分出來。想象一下,機器不僅能識別出圖里有貓還是狗…