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网络有啥降级?
在部分机器出现故障或性能下降时,通过降级来保障整体系统的稳定。
- 超时配置,合理设置超时时间,避免因个别请求阻塞而导致,整体性能。timeout_ms
- 重试机制,max_retry
- 负载均衡和故障转移,
- 健康检查
- 熔断, 当某个服务出现大量错误或者响应过慢时,切断对该服务的调用,
- 业务代码降级处理:当某个服务不可用时,使用默认值,或者混存数据,或者使用备用服务。
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怎么保障数据的顺序?
- 单一队列
- 分区(Partitioning)
对于需要处理大量消息的系统,可以采用分区(Partition)机制,将消息分散到多个分区,每个分区内部保持顺序,而分区之间无顺序性要求。例如,Apache Kafka 使用分区来提高吞吐量和扩展性。
保证顺序的关键点:
消息根据某种逻辑(如消息中的键或ID)路由到特定的分区。
同一键值的消息总是进入同一个分区,从而保障这些消息的顺序。
3. 顺序队列(Ordered Queue)
一些消息队列系统,如 RabbitMQ,通过顺序队列来保障消息的顺序。顺序队列是一种特殊类型的队列,设计上保证了消息的顺序性。
示例:
RabbitMQ 中可以使用“Queue per Consumer”模式,每个消费者绑定到一个独立的队列,从而保证消息的顺序性。
-
多级队列(Multi-level Queue)
多级队列可以用于复杂的场景,通过将消息划分为不同级别,并在每个级别上各自保证顺序性。这样可以在一定程度上兼顾顺序性和系统的扩展性。 -
消费者端排序
在某些场景下,可以在消费者端实现顺序保障。即使消息可能乱序到达消费者,消费者会根据消息中的某个顺序标识(如时间戳、序列号)进行重排,然后再处理。
优点:
灵活,不依赖于消息队列系统本身的顺序保障能力。
缺点:
增加了消费者的复杂度,需要额外的逻辑来实现重排。
3.brpc中上下游通信,怎么测评新增字段大小,对耗时的影响?
编写测试用例跑一下。
相关文章:
24面试记录002
文章目录 12、brpc的优化2.1 brpc网络有啥降级? 3、移动语义4、python协程 二、1. mq怎么保障数据的顺序?3.brpc中上下游通信,怎么测评新增字段大小,对耗时的影响? 1 1、brpc和grpc区别,为啥选择brpc? gr…...
cocos 按钮
1、创建按钮 2、创建脚本 3、将脚本挂载到其他节点上 4、将节点和按钮绑定 即可实现点击按钮触发脚本。 在触发的脚本函数里面设置按钮节点的位置,将其移除屏幕,可以实现点击消失按钮的效果。...

文件扫描工具都有哪些?职场大佬都在用的文本提取工具大盘点~
回想起刚毕业初入职场那阵子,领导让帮忙把纸质文件扫描提取为文本时,还只会傻乎乎地一点点操作,属实是费劲得很! 好在后面受朋友安利,找到了4个能够快速实现文件扫描文字提取的方法,这才让我的办公效率蹭蹭…...

【学习】程序员资源网站
1 书栈网 简介:书栈网是程序员互联网IT开源编程书籍、资源免费阅读的网站,在书栈网你可以找到很多书籍、笔记资源。在这里,你可以根据热门收藏和阅读查看大家都在看什么,也可以根据技术栈分类找到对应模块的编程资源,…...
游戏缓存与异步持久化的完美邂逅
1、问题提出 游戏服务器,需要频繁的读取玩家数据,同时也需求频发修改玩家数据,并持久化到数据库。为了提高游戏服务器的性能,我们应该怎么处理呢? 2、针对读——使用缓存 缓存,是指应用程序从数据库读取完数据之后,就将数据缓存在进程内存或第三方内存(例如redis)。…...

MySQL 高级 - 第十二章 | 数据库的设计规范
目录 第十二章 数据库的设计规范12.1 为什么需要数据库设计12.2 范式12.2.1 范式简介12.2.2 范式都包括哪些12.2.3 键和相关属性的概念12.2.4 第一范式(1st NF)12.2.5 第二范式(2nd NF)12.2.6 第三范式(3rd NF…...

【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…...
scikit-image安装报错
scikit-image安装报错: pip install scikit-image0.21.0 报错信息: Collecting PyWavelets>1.1.1 (from scikit-image0.21.0) Installing build dependencies … error error: subprocess-exited-with-error 解决方法: 提前安装好PyWave…...

STM32(七)———TIM定时器(基本and通用)
文章目录 前言一、通用定时器TIM简介1.STM32F10X系列总共最多有八个定时器:2.三种STM32定时器的区别:3.STM32 的通用定时器功能:4.计数器模式 二、基本定时器1.基本定时器的结构框图2.定时时间的计算3.定时器的结构体和库函数 总结 前言 一个…...

Spring中网络请求客户端WebClient的使用详解
Spring中网络请求客户端WebClient的使用详解_java_脚本之家 Spring5的WebClient使用详解-腾讯云开发者社区-腾讯云 在 Spring 5 之前,如果我们想要调用其他系统提供的 HTTP 服务,通常可以使用 Spring 提供的 RestTemplate 来访问,不过由于 …...

那些年我为了考PMP踩过的坑.....
说到考PMP我尊嘟很难过且伤心,众所周知,报考PMP都是要报机构的而且还是PMI认证的机构,所以在报考PMP过程中选的机构我可以说踩过了很多坑了...... Q:包过吗? 大家千万不要信某某机构说的包过噱头,真的很坑…...
邦芒解析:新人入职后存在的三种职场心理误区
多数职场新人会认为自己工作不快乐,不能正确处理职场人际关系。尤其是新人入职后在处理人际关系方面更明显,下面简述新人入职后主要存在的三种职场心理误区。 误区一:面对对上司的恐惧 学会和上司沟通,新人要采用上司容易接受…...

MFC案例:利用SetTimer函数编写一个“计时器”程序
一、希望达成效果 利用基于对话框的MFC项目,做一个一方面能够显示当前时间;另一方面在点击开始按钮时进行读秒计时,计时结果动态显示,当点击结束时读秒结束并保持最后结果。 二、编程步骤及相关代码、注释 1、启动VS…...

2. 音视频H264
视频软件基本流程 1.什么是H264 H.264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准 H265又名高…...

烽宇团队回报社会,走进贵州山区公益行
贵州省——在一片美丽的黔山秀水间,烽宇团队成员用实际行动诠释了“取之于民,用之于民”的公益精神。作为在科技和商业领域取得显著成就的团队,烽宇团队不仅在商业上取得了辉煌的成绩,还积极投身于社会公益事业,回报社会。 取之于民,用之于民 近年来,烽宇团队在多位行业领袖的…...

硬盘格式化NTFS好还是exFAT好 U盘存储文件用哪个格式好? 硬盘用exfat还是ntfs mac不能读取移动硬盘怎么解决
在计算机世界中,文件系统是数据管理的基石,而NTFS和exFAT无疑是这块基石上的两大巨头。它们各自拥有独特的特点和优势,并在不同的使用场景中发挥着重要作用。 什么是文件系统 文件系统提供了组织驱动器的方法。它规定了如何在驱动器上存储数…...
Elasticsearch机器学习初探:智能数据洞察
在当今数据驱动的时代,企业越来越依赖于数据来做出明智的决策。然而,随着数据量的不断增长和复杂性的增加,传统的数据分析方法已经无法满足快速、准确洞察数据的需求。为了应对这一挑战,Elasticsearch引入了机器学习功能ÿ…...

贪心算法——赶作业(C++)
慢慢来,沉稳一点。 2024年6月18日 题目描述 A同学有n份作业要做,每份作业有一个最后期限,如果在最后期限后交作业就会扣分,现在假设完成每份作业都需要一天。A同学想安排作业顺序,把扣分降到最低,请帮他实…...

Python 数据可视化 多色散点图
Python 数据可视化 多色散点图 fig, ax plt.subplots() max_line max([max(merged_df[unif_ref_value]), max(merged_df[unif_rust_value])]) min_line min([max(merged_df[unif_ref_value]), max(merged_df[unif_rust_value])]) ax.plot([min_line, max_line], [min_line, …...

C语言入门系列:数据类型之浮点数
文章目录 一,什么是浮点数二,C语言中的浮点数1,float1.1 float的声明1.2 float的存储格式1.3 float的精度和范围 2,double2.1 double变量的声明2.2 double的存储格式1.3 double的精度和范围1.4 long double 3,0.2 0.1…...
模型参数、模型存储精度、参数与显存
模型参数量衡量单位 M:百万(Million) B:十亿(Billion) 1 B 1000 M 1B 1000M 1B1000M 参数存储精度 模型参数是固定的,但是一个参数所表示多少字节不一定,需要看这个参数以什么…...

shell脚本--常见案例
1、自动备份文件或目录 2、批量重命名文件 3、查找并删除指定名称的文件: 4、批量删除文件 5、查找并替换文件内容 6、批量创建文件 7、创建文件夹并移动文件 8、在文件夹中查找文件...

UE5 学习系列(三)创建和移动物体
这篇博客是该系列的第三篇,是在之前两篇博客的基础上展开,主要介绍如何在操作界面中创建和拖动物体,这篇博客跟随的视频链接如下: B 站视频:s03-创建和移动物体 如果你不打算开之前的博客并且对UE5 比较熟的话按照以…...
条件运算符
C中的三目运算符(也称条件运算符,英文:ternary operator)是一种简洁的条件选择语句,语法如下: 条件表达式 ? 表达式1 : 表达式2• 如果“条件表达式”为true,则整个表达式的结果为“表达式1”…...

从零实现STL哈希容器:unordered_map/unordered_set封装详解
本篇文章是对C学习的STL哈希容器自主实现部分的学习分享 希望也能为你带来些帮助~ 那咱们废话不多说,直接开始吧! 一、源码结构分析 1. SGISTL30实现剖析 // hash_set核心结构 template <class Value, class HashFcn, ...> class hash_set {ty…...

多种风格导航菜单 HTML 实现(附源码)
下面我将为您展示 6 种不同风格的导航菜单实现,每种都包含完整 HTML、CSS 和 JavaScript 代码。 1. 简约水平导航栏 <!DOCTYPE html> <html lang"zh-CN"> <head><meta charset"UTF-8"><meta name"viewport&qu…...

Linux --进程控制
本文从以下五个方面来初步认识进程控制: 目录 进程创建 进程终止 进程等待 进程替换 模拟实现一个微型shell 进程创建 在Linux系统中我们可以在一个进程使用系统调用fork()来创建子进程,创建出来的进程就是子进程,原来的进程为父进程。…...

html css js网页制作成品——HTML+CSS榴莲商城网页设计(4页)附源码
目录 一、👨🎓网站题目 二、✍️网站描述 三、📚网站介绍 四、🌐网站效果 五、🪓 代码实现 🧱HTML 六、🥇 如何让学习不再盲目 七、🎁更多干货 一、👨…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...