24面试记录002

文章目录

  • 1
    • 2、brpc的优化
      • 2.1 brpc网络有啥降级?
    • 3、移动语义
    • 4、python协程
  • 二、
    • 1. mq怎么保障数据的顺序?
    • 3.brpc中上下游通信,怎么测评新增字段大小,对耗时的影响?

1

1、brpc和grpc区别,为啥选择brpc?
grpc是google公司开发的rpc框架,使用protocol buffer作为默认序列化框架。brpc是百度,使用多种序列化框架,pb、thrift协议和自定义协议。

grpc支持各种语言,着重跨语言,brpc主要支持c++,

grpc强调标准化,brpc强调高性能,低延迟,强调定制化。

2、brpc的优化

1、序列化因为要遍历各种数据结构,所以耗时更高,

2、brpc在序列化和反序列化时做的优化:
2.1 使用零拷贝技术,内存映射等,减少拷贝,减少cpu开销。
2.2 使用异步序列化,反序列化方式,在高并发场景下,提高吞吐和响应速度。
2.3 使用压缩技术,减少网络传输数据量,降低延迟,
2.4 使用内置序列化协议,pb,thrift,
2.5 定制序列化、反序列化接口,根据业务定制序列化(反序列化)逻辑。
2.6 支持一个动态反序列化,因为有些数据在编译时不能确定具体类型,所以就得放在运行时处理,运行时的反序列化,就是动态反序列化。

3、网络优化?
3.1 IO多路复用技术(epoll),提高网络io效率。
3.2 零拷贝
3.3 TCP连接管理,brpc实现对tcp自动管理,(建立、复用、断开、重连)提高连接的复用率和系统稳定性。
3.4 流量控制,令牌桶算法,对请求的并发量进行控制,防止资源耗尽,和网络拥堵。
3.5 多种负载均衡策略,(轮循、最小连接数、一致性哈希,下游cpu感知权重)
3.6 错误恢复机制,brpc实现了网络超时重传,断线重连,保障可靠性。

2.1 brpc网络有啥降级?

在部分机器出现故障或性能下降时,通过降级来保障整体系统的稳定。

  1. 超时配置,合理设置超时时间,避免因个别请求阻塞而导致,整体性能。timeout_ms
  2. 重试机制,max_retry
  3. 负载均衡和故障转移,
  4. 健康检查
  5. 熔断, 当某个服务出现大量错误或者响应过慢时,切断对该服务的调用,
  6. 业务代码降级处理:当某个服务不可用时,使用默认值,或者混存数据,或者使用备用服务。

3、移动语义

为了高效管理对象的资源,c++增加一种语言特性,把一个对象B变成右值引用类型,结合移动构造函数和移动赋值运算符,把对象B的资源(内存、文件句柄等)转移到另外一个对象A。避免数据的拷贝,实现高效管理资源。
std::move()是一个函数模板,可以把一个对象变成右值引用,在代码中明确指出来一个对象马上要被销毁,且他的资源要被窃取。

4、python协程

协程:轻量级的并发编程方式,在单线程内实现并发执行,并且可以方便地进行任务切换和异步操作。Python 的协程实现主要依赖于生成器(Generator)和 async/await 关键字。
当一个函数被声明为 async def,它就成为了一个协程函数,可以使用 await 关键字来挂起当前协程的执行,等待异步操作的完成。
Python 的协程基于事件循环(Event Loop)的机制,事件循环负责调度并发任务的执行,而协程则通过 async/await 实现了在任务间的挂起和恢复。当一个协程被挂起时,事件循环会转而执行其他可以执行的任务,从而实现并发执行的效果。

在底层,Python 的协程利用生成器的特性来实现挂起和恢复的操作。当一个协程函数内部使用 await 挂起时,实际上在生成器对象上进行了暂停操作,将控制权交给事件循环。当等待的异步操作完成后,事件循环会重新激活该协程,使其从上次暂停的地方继续执行。

总的来说,Python 的协程通过生成器和 async/await 关键字实现了在单线程内的并发执行,利用事件循环来调度任务的执行,从而实现了高效的异步操作和并发编程。

二、

1. mq怎么保障数据的顺序?

  1. 单一队列
  2. 分区(Partitioning)
    对于需要处理大量消息的系统,可以采用分区(Partition)机制,将消息分散到多个分区,每个分区内部保持顺序,而分区之间无顺序性要求。例如,Apache Kafka 使用分区来提高吞吐量和扩展性。

保证顺序的关键点:

消息根据某种逻辑(如消息中的键或ID)路由到特定的分区。
同一键值的消息总是进入同一个分区,从而保障这些消息的顺序。
3. 顺序队列(Ordered Queue)
一些消息队列系统,如 RabbitMQ,通过顺序队列来保障消息的顺序。顺序队列是一种特殊类型的队列,设计上保证了消息的顺序性。

示例:
RabbitMQ 中可以使用“Queue per Consumer”模式,每个消费者绑定到一个独立的队列,从而保证消息的顺序性。

  1. 多级队列(Multi-level Queue)
    多级队列可以用于复杂的场景,通过将消息划分为不同级别,并在每个级别上各自保证顺序性。这样可以在一定程度上兼顾顺序性和系统的扩展性。

  2. 消费者端排序
    在某些场景下,可以在消费者端实现顺序保障。即使消息可能乱序到达消费者,消费者会根据消息中的某个顺序标识(如时间戳、序列号)进行重排,然后再处理。

优点:

灵活,不依赖于消息队列系统本身的顺序保障能力。
缺点:

增加了消费者的复杂度,需要额外的逻辑来实现重排。

3.brpc中上下游通信,怎么测评新增字段大小,对耗时的影响?

编写测试用例跑一下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/29981.shtml

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

相关文章

护眼灯哪些牌子好?一文刨析护眼灯怎么选择!

护眼灯哪些牌子好?护眼台灯作为对抗视力挑战的一种方法,逐渐赢得了众多家长的青睐。这些台灯利用尖端光学技术,发出柔和且无刺激的照明,有助于保护眼睛不受伤害。它们不但可以调节亮度和色温,打造一个舒适且自然的阅读…

2024-06-19 问AI: 在LLM中,RAG是什么?

文心一言 在LLM(大型语言模型)中,RAG全称为Retrieval-Augmented Generation,即检索增强生成。以下是关于RAG的详细解释: 基本概念: RAG是一种通过检索LLMs之外的数据源来支持其生成答案的技术。它结合了搜…

【字符串在Python中的应用】

字符串是Python中非常重要的数据类型,它们是一系列字符的集合。Python提供了丰富的字符串操作方法,可以方便地处理和操作字符串。以下是一些常见的字符串操作及其详细教程。 字符串的基本操作 1. 创建字符串 字符串可以用单引号 或双引号 " 包围…

upload-labs第十三关教程

upload-labs第十三关教程 第十三关一、源代码分析代码审计 二、绕过分析1)0x00绕过a.上传eval.pngb.使用burpsuite进行拦截修改之前:修改之后:进入hex模块: c.放包上传成功: d.使用中国蚁剑进行连接 2)%00绕…

【分布预测】DistPred:回归与预测的无分布概率推理方法

论文题目:DistPred: A Distribution-Free Probabilistic Inference Method for Regression and Forecasting 论文作者:Daojun Liang, Haixia Zhang,Dongfeng Yuan 论文地址:https://arxiv.org/abs/2406.11397 代码地址&#xff1a…

小白学RAG:大模型 RAG 技术实践总结

节前,我们组织了一场算法岗技术&面试讨论会,邀请了一些互联网大厂朋友、今年参加社招和校招面试的同学。 针对大模型技术趋势、大模型落地项目经验分享、新手如何入门算法岗、该如何准备面试攻略、面试常考点等热门话题进行了深入的讨论。 汇总合集…

C++之模板(三)

1、缺省模板参数 可以将数据结构类型传递进来&#xff0c;比如vectop<T>&#xff08;如果没传就是默认&#xff09; 把vector当作类型参数来传递&#xff0c;从而使用它的接口然后适配出新的接口。实际上这个Stack称为适配器。有时候可能需要vector&#xff0c;但是又需…

编程电脑怎么接网线:详细步骤与注意事项

编程电脑怎么接网线&#xff1a;详细步骤与注意事项 在数字化日益普及的今天&#xff0c;无论是编程工作还是日常使用&#xff0c;电脑连接网络都是必不可少的步骤。其中&#xff0c;通过网线连接网络以其稳定性和高速率而备受青睐。然而&#xff0c;对于许多非专业人士来说&a…

【Python】AJAX

AJAX基础 一、AJAX1.1 概述1.2 XMLHttpRequest对象1.3 AJAX请求六部曲1.4 图解AJAX请求步骤 二、jQuery与AJAX2.1 jQuery.get()2.2 jQuery.getJSON()2.3 jQuery.post()2.4 jQuery.ajax() 三、Django使用AJAX3.1 请求类型3.2 PUT与PATCH的区别3.3 接收及响应JSON3.3.1 接收JSON3…

前端-echarts5.0 tooltip不显示问题

在echarts官网完成绘制后&#xff0c;将配置复制到本地&#xff0c;结果tooltip无法显示。 项目使用vue3,echarts5.0,代码写的是vue2。 option {tooltip: {trigger: axis,axisPointer: {type: cross,crossStyle: {color: #999}}},legend: {data: [完工数量, 完成率]},xAxis:…

ui自动化selenium,清新脱俗代码,框架升级讲解

一&#xff1a;简化 1. 新建common 包 新建diver.py 封装浏览器驱动类 from selenium import webdriverclass Driver():"""浏览器驱动类定义 一个【获取浏览器驱动对象driver的方法】。支持多种类型浏览器"""def get_driver(self,browser_typ…

《扩散模型 从原理到实战》Hugging Face (三)

第四章 Diffusers 实战 安装Difffusers 库 pip install -qq -U diffusers datasets transformers accelerate ftfy pyarrow扩散模型调度器 from diffusers import DDPMScheduler noise_scheduler DDPMScheduler(num_train_timesteps1000)定义扩散模型 from diffusers impo…

二维码展示与下载

1. 二维码展示(前端展示) 基于vue-qr组件实现 下载vue-qr组件 npm install vue-qr --save页面vueqr组件导入 import VueQr from vue-qr;export default {components: {VueQr} }页面展示 <el

VS安装FFmpeg库

在Visual Studio中安装FFmpeg库通常涉及以下步骤: 下载FFmpeg:访问FFmpeg官网(https://ffmpeg.org/download.html)下载对应于您的操作系统的预编译二进制文件。 解压FFmpeg:将下载的压缩包解压到您选择的目录。 配置系统环境变量:将FFmpeg的bin目录添加到系统的PATH环境变…

JimuReport 积木报表 v1.7.6 版本发布,免费的低代码报表

项目介绍 一款免费的数据可视化报表工具&#xff0c;含报表和大屏设计&#xff0c;像搭建积木一样在线设计报表&#xff01;功能涵盖&#xff0c;数据报表、打印设计、图表报表、大屏设计等&#xff01; Web 版报表设计器&#xff0c;类似于excel操作风格&#xff0c;通过拖拽完…

Python构造TCP三次握手、传输数据、四次挥手pcap数据包并打乱顺序

Python构造数据包&#xff0c;包含&#xff1a; TCP三次握手、 传输数据、 四次挥手 实现 随机乱序TCP数据包 from scapy.all import * from scapy.all import Ether, IP, TCP, UDP, wrpcap from abc import ABC, abstractmethod import random import dpkt from scapy.all…

6月18日(周二)美股行情总结:纳指七日连创新高,英伟达市值全球第一,苹果微软回落,油价七周最高

美国5月零售销售意外走软&#xff0c;尽管一众美联储官员均鹰派发声支持多等待通胀数据再做决策&#xff0c;市场仍抬升对年内降息两次的押注。标普500指数在七天里第六天上涨并再创新高&#xff0c;标普科技板块连续七天创新高、期间累涨8.6%&#xff0c;道指一周高位&#xf…

MySQL----慢查询日志

慢日志 MySQL可以设置慢查询日志&#xff0c;当SQL执行的时间超过我们设定的时间&#xff0c;那么这些SQL就会被记录在慢查询日志当中&#xff0c;然后我们通过查看日志&#xff0c;用explain分析这些SQL的执行计划&#xff0c;来判定为什么效率低下。 查看相关信息 show va…