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

每日十题八股-2025年1月24日

1.面试官:Kafka 百万消息积压如何处理?
2.面试官:最多一次、至少一次和正好一次有什么区别?
3.面试官:你项目是怎么存密码的?
4.面试官:如何设计一个分布式ID?
5.面试官:单点登录是怎么工作的?
6.面试官:如何设计安全的对外 API?
7.面试官:如果你的项目要支持百万用户,你会如何设计?
8.面试官:如果你的项目用户规模放大了 100 倍,怎么应对?
9.面试官:你的项目如何做到高可用、高吞吐、高扩展性?
10.面试官:CPU 100% 问题怎么排查?

1.面试官:Kafka 百万消息积压如何处理?

当 Kafka 出现百万级消息积压时,可以从以下几个方面处理:

定位问题:

先检查消费组的 Lag(消息积压量),确认是消费者处理能力不足,还是生产端消息量过大导致的。

提升消费能力:

增加消费者实例数: 增加消费者实例来分摊压力,但确保实例数不超过分区数。
优化消费逻辑: 使用批量拉取和异步处理,减少单条消息的处理时间。
跳过无关消息(如果业务允许): 临时将 offset 调整到最新位置,优先处理新消息。

优化 Kafka 配置:

调整消费端参数,比如增大 max.poll.records 和 fetch.max.bytes,提高拉取效率。
如果 Broker 性能不足,可以扩容集群或增加分区,将负载分散。

控制生产速度:

对生产端限流,避免消息积压进一步恶化。

清理积压消息(最后手段):

如果消息已经过期或无用,可以调整 offset 或删除积压消息。

总结: 处理积压关键在于快速提升消费能力,并结合优化生产消费的配置,确保系统及时恢复正常运行。

2.面试官:最多一次、至少一次和正好一次有什么区别?

“最多一次”、“至少一次”和“正好一次”是分布式系统中常见的消息投递语义,用来描述消息在网络中被传递的行为方式。
企业在设计分布式系统时,通常根据业务需求选择:
最多一次: 低成本,高吞吐,对可靠性要求低的场景。(投递一次,甚至不投递)
至少一次: 适合高可靠性需求,允许通过逻辑处理重复消息。(至少投递一次,甚至更多)
正好一次: 适用于对准确性要求极高的关键业务。(投且投递一次)
在这里插入图片描述

3.面试官:你项目是怎么存密码的?

采用 bcrypt/Argon2 哈希密码存储,结合随机盐值确保唯一性,并使用 HTTPS 加密传输。
在这里插入图片描述

4.面试官:如何设计一个分布式ID?

设计分布式 ID 时需要权衡:

	场景需求: 是否需要有序性、分布式部署、抗单点故障。性能要求: 每秒生成量是否满足高并发需求。

企业一般会根据具体场景选用合适的方案,如雪花算法解决高性能问题,号段模式减少数据库压力,Redis 保证灵活性。

一、为什么分布式 ID 是一个重要问题?

唯一性:
在分布式系统中,多个服务实例和数据库节点需要生成全局唯一的 ID,避免数据冲突。
例如,订单号、用户 ID 等不能重复。
高性能:
分布式 ID 的生成需要满足高并发场景,比如每秒生成百万级 ID。
有序性:
一些场景需要生成的 ID 具有顺序性(如时间递增),方便排序和索引优化。
可扩展性:
系统需要支持节点动态扩展或收缩,ID 生成机制不能成为瓶颈。

二、如何设计一个分布式 ID?

常见的分布式 ID 设计方案如下:
1. 数据库自增 ID
利用数据库的自增字段生成唯一 ID。
优点: 简单易用,ID 有序。
缺点: 性能瓶颈(高并发下会锁表),数据库故障导致不可用。
2. UUID(Universally Unique Identifier)
直接调用系统提供的 UUID 生成方法。
优点: 易实现,生成快,ID 唯一。
缺点: 长度较长(128 位),不适合索引,缺乏有序性。
3. 号段模式(Segment Model)
从数据库中预分配一批连续的 ID 号段(如[1-1000]),每个节点使用自己的号段。
优点: 高效、减少数据库压力。
缺点: 数据库依赖,批量失效可能浪费号段。
4. 雪花算法(Snowflake Algorithm)
Twitter 提出的分布式 ID 生成方案,将 ID 拆分成以下部分:
时间戳(41 位): 毫秒级时间,表示当前时间。
数据中心 ID(5 位)+ 机器 ID(5 位): 标识生成 ID 的节点。
序列号(12 位): 每毫秒内生成的序号,防止重复。
优点: 高性能、低延迟、时间有序、去中心化。
缺点: 实现复杂,需要全局时钟同步。
5. 基于 Redis 的分布式 ID
使用 Redis 的自增操作(INCR)生成 ID。
优点: 高性能,Redis 天生支持分布式。
缺点: Redis 故障会影响 ID 生成。
6. Zookeeper 分布式 ID
利用 Zookeeper 的顺序节点生成全局唯一的 ID。
优点: 可靠性高,ID 有序。
缺点: 性能一般(每次生成都需要写 Zookeeper)。

三、现在企业是如何解决分布式 ID 的问题?

互联网公司(高性能场景):
雪花算法(Snowflake): 常用于订单号、用户 ID 等。
例如:Twitter 原创,国内很多公司(如阿里、字节)都有改进版本。
号段模式: 数据库或缓存预分配号段,适合稳定、高并发场景。
金融领域(有序性要求高):
使用 Zookeeper 顺序节点或基于数据库主键生成。
对事务一致性和顺序要求高的场景。
大规模分布式系统:
利用 Redis 集群作为 ID 生成器,结合雪花算法或分片机制。

5.面试官:单点登录是怎么工作的?

单点登录(SSO) 通过一个统一的认证中心管理 用户登录状态,不同系统之间通过共享 Token 或凭证实现登录信息的同步。它提升了用户体验,同时简化了系统的认证流程。

在这里插入图片描述

6.面试官:如何设计安全的对外 API?

如果要设计一个安全的对外 API,我会从以下几个方面入手:

认证和授权:

使用 OAuth 2.0 或 JWT 来认证用户身份,确保调用者合法。
通过角色或权限控制(RBAC/ABAC),限制用户访问特定资源。

数据加密:

强制 HTTPS,确保传输中的数据被加密。
对敏感数据进行字段级加密,并对返回结果做数据脱敏。

防护机制:

使用时间戳和签名机制防止重放攻击。
针对敏感接口,比如登录,加验证码和失败次数限制,防止暴力破解。
实施限流策略,防止恶意刷 API,比如单 IP 每秒限制请求次数。

错误和暴露控制:

返回的错误信息只提供必要信息,避免暴露内部系统细节。
只开放必须的接口,隐藏无关的内部实现。

安全监控:

记录和审计所有 API 请求日志,实时监测异常流量,便于追溯和故障排查。

定期更新:

定期轮换密钥、修补依赖库漏洞,同时进行安全测试,确保系统长期安全。

通过以上方法,可以有效保证对外 API 的数据安全和系统稳定性,同时降低潜在风险。

7.面试官:如果你的项目要支持百万用户,你会如何设计?

和第八题类似,一起回答。
其实本质就是将单体项目逐渐改进到分体项目的过程。首先是把数据和应用分割到两个不同服务器,然后分别优化应用和数据形成各自的集群,引入主副,主从,各种微服务组件。

  1. 架构设计:分层解耦,支持高并发。我会采用分层架构和分布式设计,分解系统的功能模块,每层专注处理自己的职责。

    前端层(负载均衡 + CDN):
    部署CDN(内容分发网络),将静态资源如图片、CSS、JavaScript缓存到边缘节点,减少服务器压力,提升用户访问速度。
    使用负载均衡器(如 Nginx、HAProxy),将流量分发到多台后端服务器,支持水平扩展。
    应用层:
    应用服务会采用无状态设计,状态信息存储在缓存或数据库中,方便应用服务扩容。
    服务拆分为独立的微服务,按功能解耦(如用户服务、订单服务、支付服务),通过 API 网关(如 Kong)统一管理。
    数据层:
    使用分布式数据库(如 MySQL 分片、TiDB)支持海量数据存储和查询。
    利用读写分离,主库写数据,多个从库读数据,提高读性能。
    引入分布式缓存(如 Redis、Memcached)加速高频访问数据,如用户会话、热点数据等。
    
  2. 高并发:异步 + 分布式队列

     异步处理:对于耗时操作(如下单后发通知),使用消息队列(如 Kafka、RabbitMQ)异步处理,减少用户等待时间。异步任务处理还能平滑流量峰值。限流和降级:在接口层实现限流策略(如漏桶算法、令牌桶算法)来保护系统,防止流量暴增导致崩溃。非核心服务出现压力时,可以降级(如取消某些推荐功能)。
    
  3. 数据库设计:分区分库分表

     分区和分表:按用户 ID 或订单 ID 对表进行分区或分表,降低单表的数据量,提升查询效率。分库:数据按业务或地理位置拆分到不同的数据库节点,形成分布式数据库集群。事务处理:分布式事务可通过 **两阶段提交(2PC)或最终一致性(TCC 模式) ** 来保证。
    
  4. 高可用性:多副本 + 故障恢复

     服务高可用:通过服务注册与发现(如 Eureka、Consul),让服务实例自动接管流量,实现无缝扩容或切换。应用层部署多个实例,利用健康检查机制快速剔除故障实例。数据库高可用:数据库采用主从复制或多主架构,主节点故障后快速切换到从节点。灾备设计:跨数据中心部署,关键数据进行定时备份,保证在意外情况下的快速恢复。
    
  5. 可扩展性:按需扩容

     通过容器化和编排工具(如 Docker + Kubernetes)实现弹性扩容:根据流量动态调整实例数量,低谷时释放资源,高峰时自动扩展。
    
  6. 性能优化:监控和调优

     全链路监控:部署监控工具(如 Prometheus + Grafana)监测各模块性能,实时报警异常情况。代码和查询优化:数据库查询建立合理索引,避免全表扫描。服务接口按热点和冷门数据优化响应逻辑,提升吞吐量。
    

8.面试官:如果你的项目用户规模放大了 100 倍,怎么应对?

9.面试官:你的项目如何做到高可用、高吞吐、高扩展性?

高可用的意思就是保证服务尽可能保证处于正常状态,例如4个9,99.99%的时间内都是正常的。这一思路就是主从,集群之类的,保证一台服务器宕机立马会有其他副本服务器顶上。

高吞吐服务需要在一段时间内处理大量请求。常用的指标是 QPS(每秒查询次数)或 TPS(每秒事务次数)。为了实现高吞吐量,我们通常会在架构中添加缓存 ,以避免经过数据库或磁盘等较慢的 I/O 设备。我们还可以为计算密集型任务增加线程数量。 我们还可以在系统中使用异步处理,以有效地单独隔离耗时耗资源的组件。

高扩展性意味着系统可以快速、轻松地扩展,以容纳更多的容量**(横向可扩展性)** 或更多的功能(纵向可扩展性)。 要实现高度可扩展性,需要隔离每个服务的职责。为此,微服务被广泛采用 。我们还利用服务注册和负载平衡器 将请求路由到适当的实例。

10.面试官:CPU 100% 问题怎么排查?

基本思路就是先判断占用cpu资源最多的进程,如果是服务程序大致可以使用两种方式。
系统工具 + jstack: 适合手动分析,步骤清晰,适合初步排查。
Arthas: 提供更友好的交互界面和实时分析功能,适合快速深入定位问题。

top进程,然后找线程,最后找到对应代码块获得占用的核心步骤。

相关文章:

每日十题八股-2025年1月24日

1.面试官:Kafka 百万消息积压如何处理? 2.面试官:最多一次、至少一次和正好一次有什么区别? 3.面试官:你项目是怎么存密码的? 4.面试官:如何设计一个分布式ID? 5.面试官:单点登录是怎么工作的…...

tomcat的accept-count、max-connections、max-threads三个参数的含义

tomcat的accept-count、max-connections、max-threads三个参数的含义 tomcat的accept-count、max-connections、max-threads三个参数的含义 max-connections:最大连接数 最大连接数是指,同一时刻,能够连接的最大请求数 需要注意的是&#x…...

【无标题】mysql python 连接

coding:utf8 import os import pymysql import yaml from common.log import logger class Mysql: # 处理.sql备份文件为SQL语句 def __read_sql_file(self,file_path): # 打开SQL文件到f sql_list = [] with open(file_path, ‘r’, encoding=‘utf8’) as f: # 逐行读取和…...

linux naive代理设置

naive linux客户端 Release v132.0.6834.79-2 klzgrad/naiveproxy GitHub Client setup Run ./naive with the following config.json to get a SOCKS5 proxy at local port 1080. {"listen": "socks://127.0.0.1:1080","proxy": "htt…...

[STM32 - 野火] - - - 固件库学习笔记 - - -十一.电源管理系统

一、电源管理系统简介 电源管理系统是STM32硬件设计和系统运行的基础,它不仅为芯片本身提供稳定的电源,还通过多种电源管理功能优化功耗、延长电池寿命,并确保系统的可靠性和稳定性。 二、电源监控器 作用:保证STM32芯片工作在…...

DBO优化最近邻分类预测matlab

蜣螂优化算法(Dung Beetle Optimizer,简称 DBO)作为一种新兴的群智能优化算法,于 2022 年末被提出,其灵感主要来源于蜣螂的滚球、跳舞、觅食、偷窃以及繁殖等行为。 本次使用的数据为 Excel 格式的分类数据集。该数据…...

【深入理解FFMPEG】命令行阅读笔记

这里写自定义目录标题 第三章 FFmpeg工具使用基础3.1 ffmpeg常用命令3.1.13.1.3 转码流程 3.2 ffprobe 常用命令3.2.1 ffprobe常用参数3.2.2 ffprobe 使用示例 3.3 ffplay常用命令3.3.1 ffplay常用参数3.3.2 ffplay高级参数3.3.4 ffplay快捷键 第4章 封装与解封装4.1 视频文件转…...

图形化数据报文转换映射工具

目录 概要整体架构流程技术名词解释技术细节小结 概要 在当今数字化时代,数据的处理和分析是企业、科研机构以及各类组织日常运营的核心环节。数据来源广泛,格式多样,常见的数据格式包括XML(可扩展标记语言)和JSON&a…...

智能体0门槛开发

分享一个智能体开发流程。 2025 年啊,好多专家还有行业报告都觉得这是智能体(AI Agent)应用的头一年。相关的应用在商业、工业、消费等好些领域都到了关键的时候,这意味着从实验室走向大规模实际应用的重要转变。而且呢&#xff0…...

ssh密钥登录GitHub时一直提示“Error: Permission denied (publickey)”

起因 环境:Windows10 背景:之前就是按照官方说明创建个rsa密钥,在git后台添加上,就行了,近期怎么添加怎么失败,总是“Error: Permission denied (publickey)”的提示! 尝试 各种尝试&#xf…...

mapbox加载geojson,鼠标移入改变颜色,设置样式以及vue中的使用

全国地图json数据下载地址 目录 html加载全部代码 方式一:使用html方式加载geojson 1. 初始化地图 2. 加载geojson数据 设置geojson图层样式,设置type加载数据类型 设置线条 鼠标移入改变颜色,设置图层属性,此处是fill-extru…...

考研机试题:打印日期

描述 给出年分m和一年中的第n天&#xff0c;算出第n天是几月几号。 输入描述: 输入包括两个整数y(1<y<3000)&#xff0c;n(1<n<366)。 输出描述: 可能有多组测试数据&#xff0c;对于每组数据&#xff0c; 按 yyyy-mm-dd的格式将输入中对应的日期打印出来。 …...

OpenHarmonyOS 3.2 编译生成的hap和app文件的名称如何配置追加版本号?

找了一圈发现官方的文档都是最新的&#xff0c;3.2很多API都不支持&#xff0c;比如获取OhosAppContext&#xff0c;通过OhosAppContext来获取应用版本号&#xff0c;最终是通过读取app.json5的文件内容来读取版本号&#xff0c;最终修改entry下的hvigorfile.ts如下&#xff0c…...

【openwrt】openwrt odhcpd配置介绍

odhcpd odhcpd是一个嵌入式DHCP/DHCPv6/RA服务器和NDP中继的进程,odhcpd是一个守护进程,用于服务和中继IP管理协议,以配置客户端和下游路由器。它试图遵循IPv6家用路由器的RFC 6204要求。odhcpd为DHCP、RA、无状态SLAAC和有状态DHCPv6、前缀委派提供服务器服务,并可用于在没…...

基于神经网络的视频编码NNVC(1):帧内预测

在H.266/VVC发布后&#xff0c;基于传统编码框架提升压缩率越来越难&#xff0c;随着深度学习的发展&#xff0c;研究人员开始尝试将神经网络引入编码器。为此&#xff0c;JVET工作组在2020年成立AHG11小组来专门进行基于神经网络的视频编码的研究。 为了方便研究&#xff0c;工…...

Android开发,待办事项提醒App的设计与实现

文章目录 1. 研究目的2. 主要内容3. 运行效果图4. 涉及到的技术点5. 开发环境6. 关于作者其它项目视频教程介绍 1. 研究目的 当今,随着时代的发展和计算机的普及,人们开始利用网络来记录并管理日常的事务,时下这方面的软件数不胜数。各种日程管理软件就是将每天的工作和事务安…...

豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)

文章目录 豆瓣Top250电影的数据采集与可视化分析(scrapy+mysql+matplotlib)写在前面数据采集(Visual Studio Code+Navicat)1.观察网页信息2.编写Scrapy代码(Visual Studio Code)2.1 创建Scrapy项目`doubanProject`2.2 创建爬虫脚本`douban.py`2.3 修改`douban.py`的代码2…...

MySQL索引——让查询飞起来

文章目录 索引是什么&#xff1f;&#xff1f;硬件理解MySQL与存储 MySQL 与磁盘交互基本单位索引的理解B vs B聚簇索引 VS 非聚簇索引索引操作创建主键索引唯一索引的创建普通索引的创建全文索引的创建查询索引删除索引 在现代数据库应用中&#xff0c;查询性能是决定系统响应…...

Springboot集成Elasticsearch8.0(ES)版本,采用JAVA Client方式进行连接和实现CRUD操作

本文章介绍了 springboot t集成Elasticsearch8.0(ES)版本,如何通过 AVA Client方式进行连接和实现CRUD操作 在ES7.15版本之后,ES官方将高级客户端 RestHighLevelClient标记为弃用状态。同时推出了全新的 Java API客户端 Elasticsearch Java API Client,该客户端也将在 Ela…...

【Linux】APT 密钥管理迁移指南:有效解决 apt-key 弃用警告

引言 随着 Debian 11 和 Ubuntu 22.04 版本的推出&#xff0c;APT 的密钥管理方式发生了重大的变化。apt-key 命令被正式弃用&#xff0c;新的密钥管理机制要求使用 /etc/apt/keyrings/ 或 /etc/apt/trusted.gpg.d/ 来存储和管理密钥。这一变化对管理员和普通用户来说至关重要…...

洛谷P1143 进制转换

题目链接&#xff1a;P1143 进制转换 - 洛谷 | 计算机科学教育新生态 题目难度&#xff1a;普及— 解题思路&#xff1a;本题先将输入的数转为10进制&#xff0c;然后取模&#xff0c;最后倒着输出就好了&#xff0c;最后直接上代码 #include<bits/stdc.h> using namespa…...

99.12 金融难点通俗解释:毛利率

目录 0. 承前1. 简述2. 比喻&#xff1a;冰淇淋店赚钱2.1 第一步&#xff1a;准备材料2.2 第二步&#xff1a;卖冰淇淋2.3 第三步&#xff1a;计算毛利率 3. 生活中的例子3.1 好的毛利率3.2 一般的毛利率3.3 差的毛利率 4. 小朋友要注意4.1 毛利率高不一定好4.2 毛利率低不一定…...

HUMANITY’S LAST EXAM (HLE) 综述:人工智能领域的“最终考试”

论文地址&#xff1a;Humanity’s Last Exam 1. 背景与动机 随着大型语言模型&#xff08;LLMs&#xff09;能力的飞速发展&#xff0c;其在数学、编程、生物等领域的任务表现已超越人类。为了系统地衡量这些能力&#xff0c;LLMs 需要接受基准测试&#xff08;Benchmarks&…...

C++从入门到实战(二)C++命名空间

C从入门到实战&#xff08;二&#xff09;C命名空间 前言一、C的第一个程序二、命名空间&#xff08;一&#xff09;为什么需要命名空间&#xff08;二&#xff09;定义命名空间&#xff08;三&#xff09;使用命名空间1.通过命名空间限定符&#xff1a;2.使用 using 声明&…...

C# OpenCV机器视觉:实现农作物病害检测

在酷热难耐的夏日&#xff0c;阳光似火舌般舔舐大地。阿强惬意地躺在老家院子摇椅上&#xff0c;哼着小曲&#xff0c;手边放着一碗冰镇西瓜&#xff0c;头顶大槐树宛如巨大遮阳伞&#xff0c;洒下斑驳阴凉。他本想趁假期回老家放松&#xff0c;远离城市喧嚣与代码 “纠缠”。 …...

开源软件协议介绍

一、可以闭源使用/不具传染性的协议 允许商业使用和分发 1、BSD&#xff1a;详细介绍 2、LGPL许可证&#xff1a;详细介绍 3、MPL2.0&#xff1a;详细介绍 二、具有传染性/使用后需要开源自身软件的协议 不建议商业使用 1、GPL许可证&#xff1a;详细介绍...

CLion开发Qt桌面

IDE&#xff1a;CLion Qt Qt版本&#xff1a;5.12 学习正点原子的嵌入式Linux开发板时&#xff0c;使用Qt Creator写代码不是很方便&#xff0c;遂尝试使用CLion搭建Qt开发环境。 一、CLion的Qt环境搭建 1&#xff0c;配置工具链 找到Qt的安装目录&#xff0c;此处为E:\Tools\…...

09_异步加载_单例模式_常量类配置_不可销毁

1.首先在 资源加载服务层ResSvc.cs中添加 自定义异步加载函数 using UnityEngine; using UnityEngine.SceneManagement; //异步加载 命名空间 //功能 : 资源加载服务 public class ResSvc : MonoBehaviour{public void InitSvc(){Debug.Log("Init ResSvc...");}//自定…...

士的宁(strychnine)的生物合成-文献精读104

Biosynthesis of strychnine 士的宁&#xff08;strychnine&#xff09; 又名 番木鳖碱 的生物合成 摘要 士的宁&#xff08;番木鳖碱&#xff09;是一种天然产物&#xff0c;通过分离、结构阐明和合成努力&#xff0c;塑造了有机化学领域。目前&#xff0c;士的宁因其强大的…...

【开源免费】基于Vue和SpringBoot的常规应急物资管理系统(附论文)

本文项目编号 T 159 &#xff0c;文末自助获取源码 \color{red}{T159&#xff0c;文末自助获取源码} T159&#xff0c;文末自助获取源码 目录 一、系统介绍二、数据库设计三、配套教程3.1 启动教程3.2 讲解视频3.3 二次开发教程 四、功能截图五、文案资料5.1 选题背景5.2 国内…...