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

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中上下游通信,怎么测评新增字段大小,对耗时的影响?

编写测试用例跑一下。

相关文章:

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&#xf…...

【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引入了机器学习功能&#xff…...

贪心算法——赶作业(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…...

KubeSphere 容器平台高可用:环境搭建与可视化操作指南

Linux_k8s篇 欢迎来到Linux的世界,看笔记好好学多敲多打,每个人都是大神! 题目:KubeSphere 容器平台高可用:环境搭建与可视化操作指南 版本号: 1.0,0 作者: 老王要学习 日期: 2025.06.05 适用环境: Ubuntu22 文档说…...

利用最小二乘法找圆心和半径

#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...

【HarmonyOS 5.0】DevEco Testing:鸿蒙应用质量保障的终极武器

——全方位测试解决方案与代码实战 一、工具定位与核心能力 DevEco Testing是HarmonyOS官方推出的​​一体化测试平台​​&#xff0c;覆盖应用全生命周期测试需求&#xff0c;主要提供五大核心能力&#xff1a; ​​测试类型​​​​检测目标​​​​关键指标​​功能体验基…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢

随着互联网技术的飞速发展&#xff0c;消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁&#xff0c;不仅优化了客户体验&#xff0c;还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用&#xff0c;并…...

【python异步多线程】异步多线程爬虫代码示例

claude生成的python多线程、异步代码示例&#xff0c;模拟20个网页的爬取&#xff0c;每个网页假设要0.5-2秒完成。 代码 Python多线程爬虫教程 核心概念 多线程&#xff1a;允许程序同时执行多个任务&#xff0c;提高IO密集型任务&#xff08;如网络请求&#xff09;的效率…...

今日科技热点速览

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

Bean 作用域有哪些?如何答出技术深度?

导语&#xff1a; Spring 面试绕不开 Bean 的作用域问题&#xff0c;这是面试官考察候选人对 Spring 框架理解深度的常见方式。本文将围绕“Spring 中的 Bean 作用域”展开&#xff0c;结合典型面试题及实战场景&#xff0c;帮你厘清重点&#xff0c;打破模板式回答&#xff0c…...

windows系统MySQL安装文档

概览&#xff1a;本文讨论了MySQL的安装、使用过程中涉及的解压、配置、初始化、注册服务、启动、修改密码、登录、退出以及卸载等相关内容&#xff0c;为学习者提供全面的操作指导。关键要点包括&#xff1a; 解压 &#xff1a;下载完成后解压压缩包&#xff0c;得到MySQL 8.…...

elementUI点击浏览table所选行数据查看文档

项目场景&#xff1a; table按照要求特定的数据变成按钮可以点击 解决方案&#xff1a; <el-table-columnprop"mlname"label"名称"align"center"width"180"><template slot-scope"scope"><el-buttonv-if&qu…...

Ubuntu系统多网卡多相机IP设置方法

目录 1、硬件情况 2、如何设置网卡和相机IP 2.1 万兆网卡连接交换机&#xff0c;交换机再连相机 2.1.1 网卡设置 2.1.2 相机设置 2.3 万兆网卡直连相机 1、硬件情况 2个网卡n个相机 电脑系统信息&#xff0c;系统版本&#xff1a;Ubuntu22.04.5 LTS&#xff1b;内核版本…...