当前位置: 首页 > news >正文

字节跳动后端一面

📍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)
}

欢迎关注我的小红书一起来讨论。
在这里插入图片描述

相关文章:

字节跳动后端一面

📍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等系列构建工具。这些构建工具底层则会将两种不同的系统模块语言转为同一种语言,然后代码也能正常执行。 方案二 如果你可以修改文件的文件后缀&#xf…...

代码随想录--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为什么强?

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

【快应用】原生广告下载状态监听案例

问题背景&#xff1a; 快应用中下载类原生广告监听下载状态变化接口调用没生效&#xff0c;在上报点击接口里触发下载监听后仅第一次返回状态&#xff0c;之后就不返回了&#xff0c;该如何处理&#xff1f; 问题分析&#xff1a; 快应用在1100版本新增了一个ad-button组件&a…...

C++语言的软件工程

C语言的软件工程 引言 在当今快速发展的技术领域&#xff0c;软件工程作为一门综合性的学科&#xff0c;越来越受到重视。而C语言&#xff0c;作为一种功能强大且具有广泛应用的编程语言&#xff0c;在软件工程中占据着重要的地位。本文将探讨C语言在软件工程中的应用与特点&…...

计算机网络结课设计:通过思科Cisco进行中小型校园网搭建

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

无人机避障——基于ESDF地图的JPS算法前端路径规划

原来是用栅格地图的方式&#xff0c;0表示可通行区域&#xff0c;1表示不可通行区域&#xff0c;然后采用JPS算法做路径规划&#xff0c;从起点到终点规划出一条路径。但是目前我需要做的是将栅格地图更换为ESDF地图&#xff0c;那么JPS算法计算代价的部分是否需要进行变化。 …...

【MQ】RabbitMQ 高可用延时功能的探究

延迟消息如果使用延时交换机来实现&#xff0c;如果数据量过大&#xff0c;就会很占 CPU 资源&#xff0c;轻则时间误差大&#xff0c;重则 RabbitMQ 宕机 一、针对一个 RabbitMQ 节点 &#xff08;1&#xff09;利用队列 ttl&#xff0c;将延迟消息根据 delay 的时间进行分级…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中&#xff0c;结构体可以嵌套使用&#xff0c;形成更复杂的数据结构。例如&#xff0c;可以通过嵌套结构体描述多层级数据关系&#xff1a; struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

Flask RESTful 示例

目录 1. 环境准备2. 安装依赖3. 修改main.py4. 运行应用5. API使用示例获取所有任务获取单个任务创建新任务更新任务删除任务 中文乱码问题&#xff1a; 下面创建一个简单的Flask RESTful API示例。首先&#xff0c;我们需要创建环境&#xff0c;安装必要的依赖&#xff0c;然后…...

PPT|230页| 制造集团企业供应链端到端的数字化解决方案:从需求到结算的全链路业务闭环构建

制造业采购供应链管理是企业运营的核心环节&#xff0c;供应链协同管理在供应链上下游企业之间建立紧密的合作关系&#xff0c;通过信息共享、资源整合、业务协同等方式&#xff0c;实现供应链的全面管理和优化&#xff0c;提高供应链的效率和透明度&#xff0c;降低供应链的成…...

江苏艾立泰跨国资源接力:废料变黄金的绿色供应链革命

在华东塑料包装行业面临限塑令深度调整的背景下&#xff0c;江苏艾立泰以一场跨国资源接力的创新实践&#xff0c;重新定义了绿色供应链的边界。 跨国回收网络&#xff1a;废料变黄金的全球棋局 艾立泰在欧洲、东南亚建立再生塑料回收点&#xff0c;将海外废弃包装箱通过标准…...

今日科技热点速览

&#x1f525; 今日科技热点速览 &#x1f3ae; 任天堂Switch 2 正式发售 任天堂新一代游戏主机 Switch 2 今日正式上线发售&#xff0c;主打更强图形性能与沉浸式体验&#xff0c;支持多模态交互&#xff0c;受到全球玩家热捧 。 &#x1f916; 人工智能持续突破 DeepSeek-R1&…...

【Oracle】分区表

个人主页&#xff1a;Guiat 归属专栏&#xff1a;Oracle 文章目录 1. 分区表基础概述1.1 分区表的概念与优势1.2 分区类型概览1.3 分区表的工作原理 2. 范围分区 (RANGE Partitioning)2.1 基础范围分区2.1.1 按日期范围分区2.1.2 按数值范围分区 2.2 间隔分区 (INTERVAL Partit…...

分布式增量爬虫实现方案

之前我们在讨论的是分布式爬虫如何实现增量爬取。增量爬虫的目标是只爬取新产生或发生变化的页面&#xff0c;避免重复抓取&#xff0c;以节省资源和时间。 在分布式环境下&#xff0c;增量爬虫的实现需要考虑多个爬虫节点之间的协调和去重。 另一种思路&#xff1a;将增量判…...

提升移动端网页调试效率:WebDebugX 与常见工具组合实践

在日常移动端开发中&#xff0c;网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时&#xff0c;开发者迫切需要一套高效、可靠且跨平台的调试方案。过去&#xff0c;我们或多或少使用过 Chrome DevTools、Remote Debug…...

【SpringBoot自动化部署】

SpringBoot自动化部署方法 使用Jenkins进行持续集成与部署 Jenkins是最常用的自动化部署工具之一&#xff0c;能够实现代码拉取、构建、测试和部署的全流程自动化。 配置Jenkins任务时&#xff0c;需要添加Git仓库地址和凭证&#xff0c;设置构建触发器&#xff08;如GitHub…...

HTML前端开发:JavaScript 获取元素方法详解

作为前端开发者&#xff0c;高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法&#xff0c;分为两大系列&#xff1a; 一、getElementBy... 系列 传统方法&#xff0c;直接通过 DOM 接口访问&#xff0c;返回动态集合&#xff08;元素变化会实时更新&#xff09;。…...