字节跳动后端一面

📍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.mzph.cn/news/895144.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

三维模拟-机械臂自翻车

机械仿真 前言效果图后续 前言 最近在研究Unity机械仿真,用Unity实现其运动学仿真展示的功能,发现一个好用的插件“MGS-Machinery-master”,完美的解决了Unity关节定义缺少液压缸伸缩关节功能,内置了多个场景,讲真的&…

USB子系统学习(四)用户态下使用libusb读取鼠标数据

文章目录 1、声明2、HID协议2.1、描述符2.2、鼠标数据格式 3、应用程序4、编译应用程序5、测试6、其它 1、声明 本文是在学习韦东山《驱动大全》USB子系统时,为梳理知识点和自己回看而记录,全部内容高度复制粘贴。 韦老师的《驱动大全》:商…

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

Python3.13安装和配置 一、Python的下载 1. 网盘下载地址 (下载速度比较快,推荐) Python3.13.0下载:Python3.13.0下载地址(windows)3.13.0下载地址(windows) 点击下面的下载链接&#xff0c…

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_…

【真一键部署脚本】——一键部署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(阿帕网),是全球性的网络。 互连网指的是两个或多个不同类型的网络通过路由器等网络设备连接起来,形成一个更大的网络结构。互连…

“图像识别分割算法:解锁视觉智能的关键技术

嘿,各位朋友!今天咱们来聊聊图像识别分割算法。这可是计算机视觉领域里特别厉害的一项技术,简单来说,它能让机器“看懂”图像中的不同部分,并把它们精准地分出来。想象一下,机器不仅能识别出图里有猫还是狗…

AJAX项目——数据管理平台

黑马程序员视频地址: 黑马程序员——数据管理平台 前言 功能: 1.登录和权限判断 2.查看文章内容列表(筛选,分页) 3.编辑文章(数据回显) 4.删除文章 5.发布文章(图片上传&#xff0…

html转PDF文件最完美的方案(wkhtmltopdf)

目录 需求 一、方案调研 二、wkhtmltopdf使用 如何使用 文档简要说明 三、后端服务 四、前端服务 往期回顾 需求 最近在做报表类的统计项目,其中有很多指标需要汇总,网页内容有大量的echart图表,做成一个网页去浏览,同时…

示例:JAVA调用deepseek

近日,国产AI DeepSeek在中国、美国的科技圈受到广泛关注,甚至被认为是大模型行业的最大“黑马”。在外网,DeepSeek被不少人称为“神秘的东方力量”。1月27日,DeepSeek应用登顶苹果美国地区应用商店免费APP下载排行榜,在…

.NET周刊【2月第1期 2025-02-02】

国内文章 dotnet 9 已知问题 默认开启 CET 导致进程崩溃 https://www.cnblogs.com/lindexi/p/18700406 本文记录 dotnet 9 的一个已知且当前已修问题。默认开启 CET 导致一些模块执行时触发崩溃。 dotnet 使用 ColorCode 做代码着色器 https://www.cnblogs.com/lindexi/p/…

AES200物理机部署DeepSeek-R1蒸馏模型

AES200物理机部署DeepSeek-R1模型 华为官方官宣自己的NPU支持DeepSeek-R1模型部署,华为的大模型推理部署依托于其大模型推理引擎:MindIE,但是根据MindIE的文档,其只支持以下硬件: 表1 MindIE支持的硬件列表 类型配置…

【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解)

【后端开发】系统设计101——Devops,Git与CICD,云服务与云原生,Linux,安全性,案例研究(30张图详解) 文章目录 1、DevopsDevOps与SRE与平台工程的区别是什么?什么是k8s(Ku…

正泰中间电磁继电器【8脚10A】DC24V 待机功率

需求:继电器能耗测试。 1.连接24V2A的电源, 2. 稳定功率为 1.4W 3. 正泰中间电磁继电器【8脚10A】直流DC24V 注:联通时电磁继电器会轻微发热 4.电磁继电器的工作原理基于电流的磁效应 电磁激励:电磁继电器主要由线圈、铁芯、衔…

npm无法加载文件 因为此系统禁止运行脚本

安装nodejs后遇到问题: 在项目里【node -v】可以打印出来,【npm -v】打印不出来,显示npm无法加载文件 因为此系统禁止运行脚本。 但是在winr,cmd里【node -v】,【npm -v】都也可打印出来。 解决方法: cmd里可以打印出…

JVM春招快速学习指南

1.说在前面 在Java相关岗位的春/秋招面试过程中,JVM的学习是必不可少的。本文主要是通过《深入理解Java虚拟机》第三版来介绍JVM的学习路线和方法,并对没有过JVM基础的给出阅读和学习建议,尽可能更加快速高效的进行JVM的学习与秋招面试的备战…