字节跳动后端一面
📍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=1
和long_query_time
阈值,记录执行时间超过阈值的SQL语句。
• 使用分析工具:利用mysqldumpslow
、pt-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事务消息流程
- 发送半消息(prepare消息):生产者发送消息到RocketMQ,消息状态为半消息。
- 执行本地事务:生产者执行本地事务操作,如数据库更新、文件写入等。
- 根据本地事务结果,提交或回滚消息:生产者根据本地事务执行结果,向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结构:使用LPUSH
和RPOP
实现简单队列,适用于低并发、轻量级消息场景。
• 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)
}
欢迎关注我的小红书一起来讨论。
相关文章:

字节跳动后端一面
📍1. Gzip压缩技术详解 Gzip是一种流行的无损数据压缩格式,它使用DEFLATE算法来减少文件大小,广泛应用于网络传输和文件存储中以提高效率。 🚀 使用场景: • 网站优化:通过压缩HTML、CSS、JavaScript文件来…...
Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题
Dify 框架连接 PGSQL 数据库与 Sandbox 环境下的 Linux 系统调用权限问题 背景 在使用 Dify 框架进行开发时,遇到了两个主要的技术挑战: 代码节点连接到 PGSQL(PostgreSQL)数据库。解决沙盒环境中由于系统调用限制导致的“oper…...
ModuleJS 与 CommonJS 混用的两种解决方案
目录 方案一 方案二 统一使用 ModuleJS 统一使用CommonJS 方案一 使用构建工具,webpack、vite等系列构建工具。这些构建工具底层则会将两种不同的系统模块语言转为同一种语言,然后代码也能正常执行。 方案二 如果你可以修改文件的文件后缀…...
代码随想录--977有序数组的平方
977 有序数组的平方 题目: 给你一个按 非递减顺序 排序的整数数组 nums,返回 每个数字的平方 组成的新数组,要求也按 非递减顺序 排序。 示例 1: 输入:nums [-4,-1,0,3,10] 输出:[0,1,9,16,100] 解释&…...

Win11下搭建Kafka环境
目录 一、环境准备 二、安装JDK 1、下载JDK 2、配置环境变量 3、验证 三、安装zookeeper 1、下载Zookeeper安装包 2、配置环境变量 3、修改配置文件zoo.cfg 4、启动Zookeeper服务 4.1 启动Zookeeper客户端验证 4.2 启动客户端 四、安装Kafka 1、下载Kafka安装包…...
MacBook Pro M2安装deepseek
序 本文主要展示一下如何在MacBook Pro M2安装deepseek mac配置 芯片Apple M2,8核(物理),内存16G,os版本Ventura,磁盘500G 步骤 下载ollama 去https://ollama.com/下载mac版本 或者使用go来编译 git clone --depth 1 http…...
springboot的http请求不通原因
Spring Boot 应用中 HTTP 请求不通可能由多种原因引起,以下是一些常见问题及解决方法: 1. 端口冲突 问题:应用端口被占用。 解决:检查端口占用情况,修改 application.properties 或 application.yml 中的端口配置。 …...

【Windows】PowerShell 缓存区大小调节
PowerShell 缓存区大小调节 方式1 打开powershell 窗口属性调节方式2,修改 PowerShell 配置文件 方式1 打开powershell 窗口属性调节 打开 CMD(按 Win R,输入 cmd)。右键标题栏 → 选择 属性(Properties)…...
使用python脚本批量删除redis缓存
首先,安装 redis-py 库: pip install redis 其次,创建一个 Python 脚本来连接到 Redis 并删除匹配的键。假设 Redis 端口是 6379,密码是 mypassword(如果有密码的话)。 import redis# 连接到 Redis r r…...

Python截图轻量化工具
一、兼容局限性 这是用Python做的截图工具,不过由于使用了ctypes调用了Windows的API, 同时访问了Windows中"C:/Windows/Cursors/"中的.cur光标样式文件, 这个工具只适用于Windows环境; 如果要提升其跨平台性的话,需要考虑替换cty…...
Android图片加载框架Coil,Kotlin
Android图片加载框架Coil,Kotlin implementation("io.coil-kt:coil:1.4.0") import android.os.Bundle import android.widget.ImageView import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import coil.Coil i…...
重生之我要当云原生大师(十四)分析和存储日志
目录 一、简述常用的日志文件所存储的消息类型。 二、syslog的优先级? 三、维护准确时间的意义? 一、简述常用的日志文件所存储的消息类型。 1. 系统日志文件 /var/log/messages 消息类型:通用的系统日志文件,记录系统启动、…...
C++基础知识学习记录—补充
1、C新增的赋值语法 #include <iostream>using namespace std;int main() {//C新的赋值语法//1、传统的赋值语法int a,b;a100;b99;//C新的赋值语法int c(2);//相当于给c赋值2int d(c);//相当于把c的值赋值给dcout << "c" << c << endl;co…...

Linux常用命令——磁盘管理类
文章目录 du 查看文件和目录占用的磁盘空间df 查看磁盘空间使用情况free 显示内存占用情况lsblk 查看设备挂载情况mount/umount 挂载/卸载fdisk 分区Linux分区分区操作按键说明挂载硬盘操作 du 查看文件和目录占用的磁盘空间 ls-lh是查看文件大小du: disk usage 磁盘占用情况d…...

【AI学习】DeepSeek为什么强?
个人的一些思考,请大家批评指正。 这个问题,首先当然是在恰当的时间出现,模型性能跻身世界一流,又开源,戳破了OpenAI和英伟达潜心构造的叙事逻辑。 DeepSeek为什么强?四个方面:模型的智能水平…...

【快应用】原生广告下载状态监听案例
问题背景: 快应用中下载类原生广告监听下载状态变化接口调用没生效,在上报点击接口里触发下载监听后仅第一次返回状态,之后就不返回了,该如何处理? 问题分析: 快应用在1100版本新增了一个ad-button组件&a…...
C++语言的软件工程
C语言的软件工程 引言 在当今快速发展的技术领域,软件工程作为一门综合性的学科,越来越受到重视。而C语言,作为一种功能强大且具有广泛应用的编程语言,在软件工程中占据着重要的地位。本文将探讨C语言在软件工程中的应用与特点&…...

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建
上学期计算机网络课程的结课设计是使用思科模拟器搭建一个中小型校园网,当时花了几天时间查阅相关博客总算是做出来了,在验收后一直没管,在寒假想起来了简单分享一下,希望可以给有需求的小伙伴一些帮助 目录 一、设计要求 二、…...

无人机避障——基于ESDF地图的JPS算法前端路径规划
原来是用栅格地图的方式,0表示可通行区域,1表示不可通行区域,然后采用JPS算法做路径规划,从起点到终点规划出一条路径。但是目前我需要做的是将栅格地图更换为ESDF地图,那么JPS算法计算代价的部分是否需要进行变化。 …...
【MQ】RabbitMQ 高可用延时功能的探究
延迟消息如果使用延时交换机来实现,如果数据量过大,就会很占 CPU 资源,轻则时间误差大,重则 RabbitMQ 宕机 一、针对一个 RabbitMQ 节点 (1)利用队列 ttl,将延迟消息根据 delay 的时间进行分级…...
React 第五十五节 Router 中 useAsyncError的使用详解
前言 useAsyncError 是 React Router v6.4 引入的一个钩子,用于处理异步操作(如数据加载)中的错误。下面我将详细解释其用途并提供代码示例。 一、useAsyncError 用途 处理异步错误:捕获在 loader 或 action 中发生的异步错误替…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...
java_网络服务相关_gateway_nacos_feign区别联系
1. spring-cloud-starter-gateway 作用:作为微服务架构的网关,统一入口,处理所有外部请求。 核心能力: 路由转发(基于路径、服务名等)过滤器(鉴权、限流、日志、Header 处理)支持负…...
QMC5883L的驱动
简介 本篇文章的代码已经上传到了github上面,开源代码 作为一个电子罗盘模块,我们可以通过I2C从中获取偏航角yaw,相对于六轴陀螺仪的yaw,qmc5883l几乎不会零飘并且成本较低。 参考资料 QMC5883L磁场传感器驱动 QMC5883L磁力计…...
ssc377d修改flash分区大小
1、flash的分区默认分配16M、 / # df -h Filesystem Size Used Available Use% Mounted on /dev/root 1.9M 1.9M 0 100% / /dev/mtdblock4 3.0M...
Python爬虫实战:研究feedparser库相关技术
1. 引言 1.1 研究背景与意义 在当今信息爆炸的时代,互联网上存在着海量的信息资源。RSS(Really Simple Syndication)作为一种标准化的信息聚合技术,被广泛用于网站内容的发布和订阅。通过 RSS,用户可以方便地获取网站更新的内容,而无需频繁访问各个网站。 然而,互联网…...

HTML 列表、表格、表单
1 列表标签 作用:布局内容排列整齐的区域 列表分类:无序列表、有序列表、定义列表。 例如: 1.1 无序列表 标签:ul 嵌套 li,ul是无序列表,li是列表条目。 注意事项: ul 标签里面只能包裹 li…...
postgresql|数据库|只读用户的创建和删除(备忘)
CREATE USER read_only WITH PASSWORD 密码 -- 连接到xxx数据库 \c xxx -- 授予对xxx数据库的只读权限 GRANT CONNECT ON DATABASE xxx TO read_only; GRANT USAGE ON SCHEMA public TO read_only; GRANT SELECT ON ALL TABLES IN SCHEMA public TO read_only; GRANT EXECUTE O…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

令牌桶 滑动窗口->限流 分布式信号量->限并发的原理 lua脚本分析介绍
文章目录 前言限流限制并发的实际理解限流令牌桶代码实现结果分析令牌桶lua的模拟实现原理总结: 滑动窗口代码实现结果分析lua脚本原理解析 限并发分布式信号量代码实现结果分析lua脚本实现原理 双注解去实现限流 并发结果分析: 实际业务去理解体会统一注…...