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

有专门做消除网站上对公司不利的/衡阳seo排名

有专门做消除网站上对公司不利的,衡阳seo排名,手机看网站,岐山县住房和城市建设局网站文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中,需要设计一个ECU节点的CAN网路数据发送,需求是在500k的通信波特率上&a…

文章目录


前言

背景介绍

初始代码

优化代码

分析和应用

总结


前言

        见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》

背景介绍

        在一个嵌入式软件开发项目中,需要设计一个ECU节点的CAN网路数据发送,需求是在500k的通信波特率上,动态发送10到40帧报文,发送一轮的时间最长不能超过50ms。示例如下:

初始代码

        一开始算法开发的思路非常简单,就是设置一个50ms的任务,用for循环把要发送的数据装入CAN发送Buffer。示例如下:

        以上模型生成的代码如下:


#include "untitled.h"
#include "untitled_private.h"/* Block signals (default storage) */
B_untitled_T untitled_B;/* Block states (default storage) */
DW_untitled_T untitled_DW;/* Real-time model */
static RT_MODEL_untitled_T untitled_M_;
RT_MODEL_untitled_T *const untitled_M = &untitled_M_;/* Model step function */
void untitled_step(void)
{int32_T i;int32_T rtb_Gain;int32_T s6_iter;char_T *sErr;void *inputMsgRef;/* Outputs for Enabled SubSystem: '<Root>/Subsystem' incorporates:*  EnablePort: '<S3>/Enable'*//* RelationalOperator: '<S1>/Compare' incorporates:*  Constant: '<S1>/Constant'*  UnitDelay: '<S2>/Output'*/if (untitled_DW.Output_DSTATE == 0) {if (!untitled_DW.Subsystem_MODE) {/* Enable for Iterator SubSystem: '<S3>/For Iterator Subsystem' *//* Enable for S-Function (svntcantransmit): '<S6>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);LibReset(&untitled_DW.CANTransmit_CANTransmit[0U]);LibStart(&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}/* End of Enable for S-Function (svntcantransmit): '<S6>/CAN Transmit' *//* End of Enable for SubSystem: '<S3>/For Iterator Subsystem' */untitled_DW.Subsystem_MODE = true;}/* Outputs for Iterator SubSystem: '<S3>/For Iterator Subsystem' incorporates:*  ForIterator: '<S6>/For Iterator'*/for (s6_iter = 0; s6_iter < 40; s6_iter++) {/* Gain: '<S6>/Gain' */rtb_Gain = s6_iter << 3;for (i = 0; i < 8; i++) {/* Selector: '<S6>/Selector' incorporates:*  Constant: '<Root>/Constant'*/untitled_B.Selector[i] = untitled_ConstP.Constant_Value[i + rtb_Gain];}/* S-Function (scanpack): '<S6>/CAN Pack' *//* S-Function (scanpack): '<S6>/CAN Pack' */untitled_B.CANPack.ID = 10U;untitled_B.CANPack.Length = 8U;untitled_B.CANPack.Extended = 0U;untitled_B.CANPack.Remote = 0;untitled_B.CANPack.Data[0] = 0;untitled_B.CANPack.Data[1] = 0;untitled_B.CANPack.Data[2] = 0;untitled_B.CANPack.Data[3] = 0;untitled_B.CANPack.Data[4] = 0;untitled_B.CANPack.Data[5] = 0;untitled_B.CANPack.Data[6] = 0;untitled_B.CANPack.Data[7] = 0;{(void) memcpy((untitled_B.CANPack.Data), &untitled_B.Selector[0],8 * sizeof(uint8_T));}/* S-Function (svntcantransmit): '<S6>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);/* S-Function (scanpack): '<S6>/CAN Pack' incorporates:*  S-Function (svntcantransmit): '<S6>/CAN Transmit'*/inputMsgRef = &untitled_B.CANPack;/* S-Function (svntcantransmit): '<S6>/CAN Transmit' */LibOutputs_CANTransmit(&untitled_DW.CANTransmit_CANTransmit[0U],inputMsgRef, 1);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}}/* End of Outputs for SubSystem: '<S3>/For Iterator Subsystem' */} else {if (untitled_DW.Subsystem_MODE) {/* Disable for Iterator SubSystem: '<S3>/For Iterator Subsystem' *//* Disable for S-Function (svntcantransmit): '<S6>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);LibReset(&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}/* End of Disable for S-Function (svntcantransmit): '<S6>/CAN Transmit' *//* End of Disable for SubSystem: '<S3>/For Iterator Subsystem' */untitled_DW.Subsystem_MODE = false;}}/* End of RelationalOperator: '<S1>/Compare' *//* End of Outputs for SubSystem: '<Root>/Subsystem' *//* Switch: '<S5>/FixPt Switch' incorporates:*  Constant: '<S4>/FixPt Constant'*  Constant: '<S5>/Constant'*  Sum: '<S4>/FixPt Sum1'*  UnitDelay: '<S2>/Output'*/if ((uint8_T)(untitled_DW.Output_DSTATE + 1U) > 49) {untitled_DW.Output_DSTATE = 0U;} else {untitled_DW.Output_DSTATE++;}/* End of Switch: '<S5>/FixPt Switch' */
}/* Model initialize function */
void untitled_initialize(void)
{{int32_T bitParams[4];char_T *sErr;/* Start for S-Function (svntcantransmit): '<S6>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);CreateHostLibrary("slhostlibcantransmit.dll",&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr == 0) {bitParams[0U] = 1;bitParams[1U] = 4;bitParams[2U] = 3;bitParams[3U] = 1;LibCreate_CANTransmit(&untitled_DW.CANTransmit_CANTransmit[0U], "vector","slvectorxlwrapper.dll", "Virtual", 0, 1, 1, 1,"canslconverter", "vectorxlplugin", 500000.0,&bitParams[0U], 0, 0, 0, 1.0, 0);}if (*sErr == 0) {LibStart(&untitled_DW.CANTransmit_CANTransmit[0U]);}if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}/* End of Start for S-Function (svntcantransmit): '<S6>/CAN Transmit' *//* End of SystemInitialize for SubSystem: '<S3>/For Iterator Subsystem' *//* End of SystemInitialize for SubSystem: '<Root>/Subsystem' */}
}/* Model terminate function */
void untitled_terminate(void)
{char_T *sErr;/* Terminate for Enabled SubSystem: '<Root>/Subsystem' *//* Terminate for Iterator SubSystem: '<S3>/For Iterator Subsystem' *//* Terminate for S-Function (svntcantransmit): '<S6>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);LibTerminate(&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}LibDestroy(&untitled_DW.CANTransmit_CANTransmit[0U], 0);DestroyHostLibrary(&untitled_DW.CANTransmit_CANTransmit[0U]);/* End of Terminate for S-Function (svntcantransmit): '<S6>/CAN Transmit' *//* End of Terminate for SubSystem: '<S3>/For Iterator Subsystem' *//* End of Terminate for SubSystem: '<Root>/Subsystem' */
}

        按照上述示例生成的代码,调试时监测到CAN网络上的瞬时负载率,在0%和100%之间来回跳变。0%和100%各自占用一段时间,两者的比例随着发送报文数量的多少变化。当报文数为最大的40帧时,100%瞬时负载率会持续10ms左右,如下图所示:

        分析上述网络通信的特点,100%瞬时负载率持续的10ms时间段里,肯定会有其他ECU节点也发出报文,这时候CAN网络就会自动根据ID的优先级分配谁先发,谁等待后发,即出现冲突抢占现象。在CAN网络中如果冲突抢占是偶发的,那就不会有太大影响,但是如果冲突抢占是持续的,那就不是我们希望看到的了。

优化代码

        根据对上述问题的分析,我们发现每个50ms周期里边都还有至少40ms是没有利用的,那么只要把前面拥挤的报文分散开到后面一部分,就能解决前面的问题了。然后如果还有剩余的时间没有利用,那么我们就柔性地缩短50ms的周期时长,提高数据发送的频率。这样既能解决前面的问题,又能把总线资源充分利用起来,用于提高我们网络通信的性能。示例如下:

        以上模型生成的代码如下:

#include "untitled.h"
#include "untitled_private.h"/* Named constants for Chart: '<S1>/Chart' */
#define untitled_IN_a                  ((uint8_T)1U)
#define untitled_IN_a1                 ((uint8_T)2U)/* Block signals (default storage) */
B_untitled_T untitled_B;/* Block states (default storage) */
DW_untitled_T untitled_DW;/* Real-time model */
static RT_MODEL_untitled_T untitled_M_;
RT_MODEL_untitled_T *const untitled_M = &untitled_M_;/* Model step function */
void untitled_step(void)
{real_T rtb_Gain;int32_T i;char_T *sErr;void *inputMsgRef;/* Chart: '<S1>/Chart' incorporates:*  Constant: '<Root>/Constant3'*/if (untitled_DW.is_active_c3_untitled == 0U) {untitled_DW.is_active_c3_untitled = 1U;untitled_DW.is_c3_untitled = untitled_IN_a;untitled_B.FrameIndex = 0.0;} else if (untitled_DW.is_c3_untitled == untitled_IN_a) {untitled_DW.is_c3_untitled = untitled_IN_a1;untitled_B.FrameIndex++;} else {/* case IN_a1: */if (untitled_B.FrameIndex >= 39.0) {untitled_DW.is_c3_untitled = untitled_IN_a;untitled_B.FrameIndex = 0.0;}}/* End of Chart: '<S1>/Chart' *//* Gain: '<S1>/Gain' */rtb_Gain = 8.0 * untitled_B.FrameIndex;for (i = 0; i < 8; i++) {/* Selector: '<S1>/Selector' incorporates:*  Constant: '<Root>/Constant2'*/untitled_B.Selector[i] = untitled_ConstP.Constant2_Value[i + (int32_T)rtb_Gain];}/* S-Function (scanpack): '<S1>/CAN Pack' *//* S-Function (scanpack): '<S1>/CAN Pack' */untitled_B.CANPack.ID = 10U;untitled_B.CANPack.Length = 8U;untitled_B.CANPack.Extended = 0U;untitled_B.CANPack.Remote = 0;untitled_B.CANPack.Data[0] = 0;untitled_B.CANPack.Data[1] = 0;untitled_B.CANPack.Data[2] = 0;untitled_B.CANPack.Data[3] = 0;untitled_B.CANPack.Data[4] = 0;untitled_B.CANPack.Data[5] = 0;untitled_B.CANPack.Data[6] = 0;untitled_B.CANPack.Data[7] = 0;{(void) memcpy((untitled_B.CANPack.Data), &untitled_B.Selector[0],8 * sizeof(uint8_T));}/* S-Function (svntcantransmit): '<S1>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);/* S-Function (scanpack): '<S1>/CAN Pack' incorporates:*  S-Function (svntcantransmit): '<S1>/CAN Transmit'*/inputMsgRef = &untitled_B.CANPack;/* S-Function (svntcantransmit): '<S1>/CAN Transmit' */LibOutputs_CANTransmit(&untitled_DW.CANTransmit_CANTransmit[0U], inputMsgRef,1);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}
}/* Model initialize function */
void untitled_initialize(void)
{{int32_T bitParams[4];char_T *sErr;/* Start for S-Function (svntcantransmit): '<S1>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);CreateHostLibrary("slhostlibcantransmit.dll",&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr == 0) {bitParams[0U] = 1;bitParams[1U] = 4;bitParams[2U] = 3;bitParams[3U] = 1;LibCreate_CANTransmit(&untitled_DW.CANTransmit_CANTransmit[0U], "vector","slvectorxlwrapper.dll", "Virtual", 0, 1, 1, 1,"canslconverter", "vectorxlplugin", 500000.0,&bitParams[0U], 0, 0, 0, 1.0, 0);}if (*sErr == 0) {LibStart(&untitled_DW.CANTransmit_CANTransmit[0U]);}if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}/* End of Start for S-Function (svntcantransmit): '<S1>/CAN Transmit' *//* Enable for S-Function (svntcantransmit): '<S1>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);LibReset(&untitled_DW.CANTransmit_CANTransmit[0U]);LibStart(&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}/* End of Enable for S-Function (svntcantransmit): '<S1>/CAN Transmit' */}
}/* Model terminate function */
void untitled_terminate(void)
{char_T *sErr;/* Terminate for S-Function (svntcantransmit): '<S1>/CAN Transmit' */sErr = GetErrorBuffer(&untitled_DW.CANTransmit_CANTransmit[0U]);LibTerminate(&untitled_DW.CANTransmit_CANTransmit[0U]);if (*sErr != 0) {rtmSetErrorStatus(untitled_M, sErr);rtmSetStopRequested(untitled_M, 1);}LibDestroy(&untitled_DW.CANTransmit_CANTransmit[0U], 0);DestroyHostLibrary(&untitled_DW.CANTransmit_CANTransmit[0U]);/* End of Terminate for S-Function (svntcantransmit): '<S1>/CAN Transmit' */
}

        按照上述示例生成的代码,调试时监测到CAN网络上的瞬时负载率非常均匀地保持在25%左右。并且不管报文数量的如何变化,软件都能自动地柔性处理,既不会负载率过高,也不会总线资源浪费,同时又能将报文频率性能发挥到最大。如下图所示:

        分析上述网络通信的特点,已实现了项目中的需求,同时也利用通信负载柔性均衡算法把性能发挥到了最优。

分析和应用

        通信负载均衡,在不同的软件开发项目中重要性是不一样的。一种是实时性要求高的的应用(例如底盘控制),每一帧消息都要在准确的时间发送出去,不允许冲突抢占导致的延误。另一种是网络通信资源非常小的总线(例如低速CAN),单位时间内能发送的报文数量本来就比较少,所以更要仔细计算充分利用,要不然很容易因为负载不均衡导致报文阻塞。

        使用通信负载柔性均衡算法时,需要注意如下几点:

        1、不同波特率,理想负载率下,单位时间对应的报文数量需要仔细的计算,才能设定出最优的算法。例如:500k波特率,在25%理想负载率下,1ms对应的报文数量就是1帧。同理如果1M波特率,那么1ms对应的报文数量就是2帧。

        2、计算好最优的理论算法之后,还要更具自己处理器的性能,设定一个合适的控制粒度。例如:自己的软件最快可以1ms运算一圈,那么就可以1ms控制一次发送1帧或者2帧。如果自己的软件最快只能5ms运算一圈,那么同理就5ms控制一次发送5帧或者10帧。这里的控制粒度越小,负载均衡的效果也越好,但是并非所有的平台都能达到理论极限,只要在自己平台的基础上发挥到最优即可。

        3、对于有网络管理机制的应用场景,需求方可能不希望我们的50ms周期发生变化。例如,网络上的主ECU节点利用同步信号,控制着各个从ECU节点分别占用这50ms中的一小段。当我们自己节点的报文发送完之后,需要等着下一个50ms的到来,或者下一个同步信号的到来。这时候就要把FrameIndex的循环Limit固定成50ms,然后在Transmit模块上加一个使能条件FrameIndex < FrameNum。这样也能达到我们通信负载柔性均衡的目的,同时也满足主ECU节点的网络管理。

总结

        以上就是本人在嵌入式软件开发中处理通信负载率不均衡问题时,一些个人理解和分析的总结,首先介绍了它的背景情况,然后展示它的初始设计和优化设计,最后分析了通信负载均衡算法的注意事项和应用场景。

        后续还会分享另外几个最近总结的软件优化知识点,欢迎评论区留言、点赞、收藏和关注,这些鼓励和支持都将成文本人持续分享的动力。

        另外,上述例程使用的Demo工程,可以到笔者的主页查找和下载。


        版权声明:原创文章,转载和引用请注明出处和链接,侵权必究

相关文章:

【研发日记】Matlab/Simulink软件优化(二)——通信负载柔性均衡算法

文章目录 前言 背景介绍 初始代码 优化代码 分析和应用 总结 前言 见《【研发日记】Matlab/Simulink软件优化(一)——动态内存负荷压缩》 背景介绍 在一个嵌入式软件开发项目中&#xff0c;需要设计一个ECU节点的CAN网路数据发送&#xff0c;需求是在500k的通信波特率上&a…...

Python 设计模式(行为型)

文章目录 策略模式场景示例 迭代器模式场景示例 访问者模式场景示例 观察者模式场景示例 命令模式场景示例 模板方法模式场景示例 模板方法模式场景示例 事件驱动模式场景示例 责任链模式场景示例 中介者模式场景示例 状态模式场景示例 策略模式 策略模式&#xff08;Strategy…...

电商API商品数据采集接口||助力电商企业采集商品大数据提高开发效率

提高开发效率&#xff1a;电商API接口允许不同的应用程序之间高效地进行交互&#xff0c;节省了大量的人力物力成本&#xff0c;使得开发者可以将更多时间和精力集中于自身的核心业务。 增加数据安全性&#xff1a;通过对数据进行安全加密&#xff0c;API接口实现了对数据的保护…...

Day34 事件聚合器实现消息过滤功能

​ 当前章节,实现了消息事件过滤功能 在上一章节中,我们发现在Login视图页和Main视图页都使用了同一个事件聚合器,导致在Login视图页发送的消息也被Main 视图主页所接收,这违反了事件传递的意图和模块化设计的原则。为了解决这个问题,我们需要为事件聚合器引入消息过滤的…...

前端 JS 经典:Reflect 本质

1. 什么是 Reflect Reflect 可以调用对象的基本方法&#xff08;内部方法&#xff09;&#xff0c;在 ES6 之前我们是没有任何方法去直接调用对象的基本方法的。只能间接调用&#xff0c;间接调用它又会给你做一些额外得事。 2. 对象的基本方法 什么是对象的基本方法呢&…...

accelerate 的一个tip:early stopping 处可能存在的bug

在分布式训练中进行提前停止时&#xff0c;如果每个进程都有特定的停止条件&#xff08;例如验证损失&#xff09;&#xff0c;这可能不会在所有进程中同步。 因此&#xff0c;可能在进程 0 中发生中断&#xff0c;而进程 1 则不会——>这将导致代码无限期挂起&#xff0c;直…...

企业数据挖掘建模平台极简建模流程

泰迪智能科技企业数据挖掘建模平台是企业自主研发&#xff0c;面向企业级用户的快速数据处理构建模型工具。平台底层算法基于R语言、Python、Spark等引擎&#xff0c;使用JAVA语言开发&#xff0c;采用 B/S 结构&#xff0c;用户无需下载客户端&#xff0c;可直接通过浏览器进…...

使用pkg打包了一个使用了sqlite3的nodejs项目,启动后闪退

从截图来看&#xff0c;问题出在 sqlite3 模块上。说明在打包过程中&#xff0c;sqlite3 模块的 .node 文件没有正确加载。 紧急解决方法&#xff1a; 其实就是exe文件还需要node_modules中的sqlite3 依赖&#xff0c;我们直接在系统顶级放一个node_modules&#xff0c;且其中只…...

网络编程(UPD和TCP)

//发送数据 //UDP协议发送数据 package com.example.mysocketnet.a02UDPdemo;import java.io.IOException; import java.net.*;public class SendMessageDemo {public static void main(String[] args) throws IOException {//发送数据//1.创建DatagramSocket对象(快递公司)//…...

cesium 之 flyTo、setView、lookat

orientation配置项的参数 cesium中&#xff0c;朝向orientation&#xff0c;通常使用heading、pitch、roll这三个参数来描述 heading 通过调整heading的值&#xff0c;使相机朝向特定的方向朝向方向说明【北&#xff1a;0&#xff0c; 东&#xff1a;π/2弧度&#xff0c; …...

超速解读多模态InternVL-Chat1.5 ,如何做到开源SOTA——非官方首发核心技巧版(待修订)

解读InternVL-chat1.5系列 最近并行是事情太杂乱了&#xff0c;静下心来看一看优秀的开源项目,但是AI技术迭代这么快&#xff0c;现在基本是同时看五、六个方向的技术架构和代码&#xff0c;哪个我都不想放&#xff0c;都想知道原理和代码细节&#xff0c;还要自己训练起来&am…...

Vue 组件_动态组件+keep-alive

文章目录 Vue 动态组件 keep-alive知识点讲解业务场景实例代码实现keep-alive Vue 动态组件 keep-alive 知识点讲解 通过 Vue 的 <component> 组件和特殊的 is 属性实现的。 <!-- curentComponent 改变时组件也改变 --> <component :is"componentMap[…...

深入理解Redis:多种操作方式详解

Redis&#xff08;Remote Dictionary Server&#xff09;是一款高性能的开源键值存储系统&#xff0c;广泛应用于缓存、会话管理、实时分析等领域。它支持多种数据结构&#xff0c;如字符串、哈希、列表、集合和有序集合等&#xff0c;提供了丰富的操作命令。本篇博客将详细介绍…...

stm32太阳能追光储能系统V2

大家好&#xff0c;我是 小杰学长 stm32太阳能追光储能系统V2. 增加了命令行交互和内置AT指令解析框架 &#xff08;就是可以用电脑串口发送at指令控制板子的所有功能&#xff09; 改动了spi 换成硬件 改动了硬件电源 增加了pcb原理图 附带上pcb源文件 增加了freertos 互斥锁…...

Docker笔记-解决非交互式运行python时print不输出的问题

换句话来说就是在docker中如何不会python的print 只需要在启动时&#xff0c;不让python缓冲其输出。 关键命令如下&#xff1a;PYTHONUNBUFFERED1 如下&#xff1a; docker run -e PYTHONUNBUFFERED1 <your_image> 下面解释下-e "-e"选项的全称是"…...

06- 数组的基础知识详细讲解

06- 数组的基础知识详细讲解 一、基本概念 一次性定义多个相同类型的变量&#xff0c;并且给它们分配一片连续的内存。 int arr[5];1.1 初始化 只有在定义的时候赋值&#xff0c;才可以称为初始化。数组只有在初始化的时候才可以统一赋值。 以下是一些示例规则&#xff1a; …...

CentOS6系统因目录有隐含i权限属性致下属文件无法删除的故障一例

CentOS6服务器在升级openssh时因系统目录权限异常&#xff08;有隐含i权限属性&#xff09;&#xff0c;下属文件无法删除&#xff0c;导致系统问题的故障一例。 一、问题现象 CentOS6在升级openssh时&#xff0c;提示如下问题&#xff1a; warning: /etc/ssh/sshd_config c…...

【视频转码】ZLMediaKit漏洞报告的问题

漏洞问题&#xff1a; 支持ss1 rc4密码套件(bar mitzvah) 漏洞级别&#xff1a; 中危 漏洞修复&#xff1a; 方法&#xff1a;避免使用RC4密码&#xff0c;参考代码如下&#xff1a; 修改文件位于&#xff1a;webrtc/DtlsTransport.cpp ret SSL_CTX_set_cipher_list(ssl…...

100道大模型面试八股文

算法暑期实习机会快结束了&#xff0c;校招大考即将来袭。 当前就业环境已不再是那个双向奔赴时代了。求职者在变多&#xff0c;岗位在变少&#xff0c;要求还更高了。 最近&#xff0c;我们陆续整理了很多大厂的面试题&#xff0c;帮助球友解惑答疑和职业规划&#xff0c;分…...

【ARM Cache 及 MMU 系列文章 6.2 -- ARMv8/v9 Cache 内部数据读取方法详细介绍】

请阅读【ARM Cache 及 MMU/MPU 系列文章专栏导读】 及【嵌入式开发学习必备专栏】 文章目录 Direct access to internal memoryL1 cache encodingsL1 Cache Data 寄存器Cache 数据读取代码实现Direct access to internal memory 在ARMv8架构中,缓存(Cache)是用来加速数据访…...

使用Vue.js将form表单传递到后端

一.form表单 <form submit.prevent"submitForm"></form> form表单像这样写出来&#xff0c;然后把需要用户填写的内容写在form表单内。 二.表单内数据绑定 <div class"input-container"><div style"margin-left: 9px;"&…...

6、架构-服务端缓存

为系统引入缓存之前&#xff0c;第一件事情是确认系统是否真的需要缓 存。从开发角度来说&#xff0c;引入缓存会提 高系统复杂度&#xff0c;因为你要考虑缓存的失效、更新、一致性等问题&#xff1b;从运维角度来说&#xff0c;缓存会掩盖一些缺 陷&#xff0c;让问题在更久的…...

服务器遭遇UDP攻击时的应对与解决方案

UDP攻击作为分布式拒绝服务(DDoS)攻击的一种常见形式&#xff0c;通过发送大量的UDP数据包淹没目标服务器&#xff0c;导致网络拥塞、服务中断。本文旨在提供一套实用的策略与技术手段&#xff0c;帮助您识别、缓解乃至防御UDP攻击&#xff0c;确保服务器稳定运行。我们将探讨监…...

美团发布2024年一季度财报:营收733亿元,同比增长25%

6月6日&#xff0c;美团(股票代码:3690.HK)发布2024年第一季度业绩报告。受益于经济持续回暖和消费复苏&#xff0c;公司各项业务继续取得稳健增长&#xff0c;营收733亿元(人民币&#xff0c;下同)&#xff0c;同比增长25%。 财报显示&#xff0c;一季度&#xff0c;美团继续…...

sql注入-布尔盲注

布尔盲注&#xff08;Boolean Blind SQL Injection&#xff09;是一种SQL注入攻击技术&#xff0c;用于在无法直接获得查询结果的情况下推断数据库信息&#xff1b;它通过发送不同的SQL查询来观察应用程序的响应&#xff0c;进而判断查询的真假&#xff0c;并逐步推断出有用的信…...

docker-compose部署 kafka 3.7 集群(3台服务器)并启用账号密码认证

文章目录 1. 规划2. 服务部署2.1 kafka-012.2 kafka-022.3 kafka-032.4 启动服务 3. 测试3.1 kafkamap搭建&#xff08;测试工具&#xff09;3.2 测试 1. 规划 服务IPkafka-0110.10.xxx.199kafka-0210.10.xxx.198kafka-0310.10.xxx.197kafkamp10.10.xxx.199 2. 服务部署 2.1…...

LeetCode-704. 二分查找【数组 二分查找】

LeetCode-704. 二分查找【数组 二分查找】 题目描述&#xff1a;解题思路一&#xff1a;注意开区间和闭区间背诵版&#xff1a;解题思路三&#xff1a; 题目描述&#xff1a; 给定一个 n 个元素有序的&#xff08;升序&#xff09;整型数组 nums 和一个目标值 target &#xf…...

Rust 性能分析

都说Rust性能好,但是也得代码写得好,猜猜下面两个代码哪个快 . - 力扣&#xff08;LeetCode&#xff09; use std::collections::HashMap; use lazy_static::lazy_static;lazy_static! {static ref DIGIT: HashMap<char, usize> {let mut m HashMap::new();for c in …...

Gradle和Maven都是广泛使用的项目自动化构建工具

Gradle和Maven都是广泛使用的项目自动化构建工具&#xff0c;但它们在多个方面存在差异。以下是关于Gradle和Maven的详细对比&#xff1a; 一、构建脚本语言 Maven&#xff1a;使用XML作为构建脚本语言。XML的语法较为繁琐&#xff0c;不够灵活&#xff0c;对于复杂的构建逻辑…...

Seed-TTS语音编辑有多强?对比实测结果让你惊叹!

GLM-4-9B 开源系列模型 前言 就在最近&#xff0c;ByteDance的研究人员最近推出了一系列名为Seed-TTS的大规模自回归文本转语音(TTS)模型,能够合成几乎与人类语音无法区分的高质量语音。那么Seed-TTS的表现究竟有多强呢?让我们一起来感受下Seed-TTS带来的惊喜吧! 介绍Seed-TTS…...