字节跳动后端一面
📍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 的时间进行分级…...
Linux 0.11内核调试实战:手把手教你用Bochs+GDB定位第一次页故障(附完整答案)
Linux 0.11内核调试实战:从页故障到内存管理的深度探索 当你第一次在Linux 0.11内核实验中遇到页故障时,那种既兴奋又困惑的感觉可能还记忆犹新。作为操作系统学习者,理解页故障不仅是掌握内存管理的关键,更是通往内核深处的一扇门…...
ai赋能安装:让快马生成智能交互式mysql安装故障排查助手
AI赋能安装:让快马生成智能交互式MySQL安装故障排查助手 MySQL作为最流行的开源数据库之一,安装过程看似简单,但实际会遇到各种"坑"。新手经常被报错信息搞得一头雾水,老手也可能在特定环境下翻车。传统教程都是静态的…...
第二十二讲 XGBoost 回归实战 + SHAP 可视化解读(基于R语言波士顿房价数据集)
1. 从波士顿房价预测开始:为什么选择XGBoost? 每次遇到回归预测问题,我都会先想到XGBoost。这个算法在Kaggle竞赛中屡获佳绩不是没有道理的——它既能处理复杂的非线性关系,又不容易过拟合。最近我用R语言的BostonHousing数据集做…...
数字健康时代的“价值共生“:APP如何用技术重新定义身体数据的意义
一、从"数字佃农"到"价值共创者":健康数据经济的范式转移2024年,全球健康经济规模达到6.8万亿美元,数字健康板块增速领跑全行业。在这场变革中,一个核心命题浮出水面:当我们的身体数据成为驱动AI进…...
保姆级教程:Ollama+EmbeddingGemma-300m,零基础搭建嵌入模型服务
保姆级教程:OllamaEmbeddingGemma-300m,零基础搭建嵌入模型服务 1. 认识嵌入模型与EmbeddingGemma-300m 想象一下,如果你能让计算机真正"理解"文字的含义,而不仅仅是匹配关键词,会怎样?这就是嵌…...
除了浏览器点一点,Oracle 19c EM Express还能这么用?几个提升DBA效率的隐藏技巧
Oracle 19c EM Express高阶应用:解锁DBA效率提升的五大隐藏技巧 当你已经能够熟练地通过浏览器访问Oracle 19c EM Express时,是否思考过这个轻量级管理工具还能为你带来哪些惊喜?本文将带你超越基础操作,探索那些被大多数DBA忽略的…...
L0phtCrack 7密码爆破实测:8位混合密码要跑多久?(含虚拟机安全测试指南)
L0phtCrack 7密码爆破实战:从原理到防御的深度解析 在网络安全领域,密码强度与破解时间的量化分析一直是红蓝对抗中的核心课题。本文将带您深入理解密码破解背后的技术原理,并通过在VMware虚拟机环境下的对照实验,展示不同复杂度…...
Z-Image-Turbo_Sugar脸部Lora入门指南:从零开始搭建Sugar专属AI人脸生成系统
Z-Image-Turbo_Sugar脸部Lora入门指南:从零开始搭建Sugar专属AI人脸生成系统 想快速生成专属Sugar风格的甜美脸部图片?本教程将手把手教你搭建一个基于Z-Image-Turbo_Sugar脸部Lora的AI人脸生成系统,无需复杂配置,轻松上手。 1. 环…...
Jupyter Notebook内核崩溃?别急着重装!试试这个Anaconda环境修复方案
Jupyter Notebook内核崩溃?别急着重装!Anaconda环境修复全指南 当你正专注地编写代码,突然看到"内核似乎挂掉了,它很快将自动重启"的提示,那种挫败感我深有体会。作为数据科学工作者,Jupyter Not…...
2022年中国90米人口密度栅格数据(LandScan)|高精度、单年快照、科研级空间人口产品
🔍 数据简介 本数据基于全球权威人口空间分布模型 LandScan™(由美国橡树岭国家实验室 ORNL 开发),并融合2020年第七次全国人口普查乡镇级数据、10米土地利用、VIIRS夜间灯光、OSM路网与建筑物足迹,生成 2022年中国90米…...
