如何对人工智能系统进行测试|要点,方法及流程
当今社会,人工智能发展非常快。现在人工智能的发展已经渗透到了我们生活的方方面面,自动驾驶、或者我们手机里经常用到的一些应用都或多或少涉及到了一些人工智能的功能,比如说美图秀秀、新闻推荐、机器翻译以及个性化的购物推荐等等都涉及到了人工智能的一些技术。
在人工智能高速发展的今天,也暴露出了人工智能的一些问题。由于人工智能往往存在一些训练过程中的过拟合、欠拟合等等的一些原因,或者遇到了环境中的一些样本的偏差,使得它可能在一些情况下对输入的判断有一些偏差。
最典型的比如说2016年特斯拉的自动驾驶系统导致的车祸。在白天的时候由于光线的原因,它没有办法去识别一辆白色的大卡车,使得它以为前面没有障碍物,就撞了上去,造成了严重的车祸。
还有比如说这个在这个道路中,有一个天下一品的商标,有很多的自动驾驶看到这个商标之后,以为是一个“停止”交通信号标志,就会造成一个误判。
还有,近期人工智能系统大家都研究地比较热门的一个技术叫对抗样本技术也会对人工智能造成一个非常严重的干扰,特别是对于这种关乎性命攸关的系统,比如自动驾驶系统、医疗辅助诊断系统。我们希望在测试中能够测出这些人工智能系统存在的偏差,这也是为什么人工智能系统的测评非常地重要。
人工智能系统的测试与传统的软件测试
人工智能系统的测试和传统的软件测试之间的差异可以从两者之间程序设计上的范式去看待。
经典的程序设计是通过编程去输入一些算法规则和数据,然后再通过程序的算法去输出答案,这是经典程序设计的模式。但是对于人工智能来说不是这样,人工智能是先输入数据和答案,中间的规则是由AI系统的训练过程所得到的。
经典程序的规则是人为写进去的,人工智能系统的规则是从数据中学到的,不断有新的数据进来之后,它里面的规则也会进一步地进行改变。根据学到的规则再从你的输入的数据中得出一个结果。
人工智能系统不是通过编写明确的逻辑,而是通过数据来训练数据、训练规则。所以它的测试方法和传统软件的测试方法肯定是有所区别的。
传统软件测试我们知道了规则之后,根据这个规则去设计测试用例就可以了,但是人工智能系统很难通过设计用例的这种方式去进行测试,这也是人工智能系统测试为什么有挑战性的一个根本性的一个原因。
总结来说,由于编程模式的改变,使得人工智能的程序会有很多的特性,导致其无法用传统的方法去进行测试。首先它输出的结果具有一定的随机性。因为它是从训练数据中所训练出的一个逻辑规则,使得它输出的结果和你的输入数据是非常相关的。
比如说对于一个图像分类的例子,它的输出往往是具有统计规律的一组概率值,这个概率值是无法事先预测的。我们传统的软件测试往往是有一个先验条件的,比如说我一个确定的输入,得出一个确定的输出,我再用这样的标准去验证传统软件的正确性。这条路在人工智能系统里面很难走通。
再一个就是人工智能系统通过的准则很难去确定,我怎么判断这个人工智能系统的测试是符合我的要求的?这个是非常难以判断的。从另外一个角度说,我很难判断人工智能系统它的输出还不是正确的。这个在测试领域也有一个专门的名词叫做“test oracle”的问题。也就是说我很难确定测试的结果到底是不是对的。
下面这两幅图是医学辅助诊断领域的样例图,是皮肤上的疤痕的拍片的一个图,其中一张是真实的医院拍摄的图像,另一张是模仿医学图像去自动生成的一张新的图像,比如说我们现在要测试这样一个功能,测试我们的计算机生成的图片到底好不好,我们怎么来确定呢?我们很难通过一个量化的指标去确定,只能通过人的肉眼去做一个定性的判断。很难去判定我生成的图片是不是足够好,很难有客观的判定的准则。
接下来的一点是,我们刚才也说过,人工智能系统的规则是通过数据训练出来的,它的性能也就严重依赖于我们输入的训练数据的质量,数据的规模、数据的质量、数据的差别都会影响人工智能系统的性能。
特别是在很多时候,人工智能系统可能会表现出一个过拟合的现象,也就是说在训练阶段表现得很好的一个模型,可能在测试阶段表现并不是特别好,这样就造成我们在测试的时候,对数据的把握就非常的重要。
最后一点就是人工智能系统它的输出结果,除了刚才说的不确定性之外,也是可能会随着时间进行变化的。一般来说,我们大多数企业中的人工智能系统是一个不断更新迭代的过程。先由一定的原始数据训练出一个模型出来,之后根据业务的调整,或者说随着用户数据的一些变化,一段时间之后,原来的模型准确率可能无法满足业务要求,企业往往会对模型进行一个更新的训练。这样这个系统输出的结果会随着你不断更新数据会产生变化。每次更新之后,可能会对这个系统进行一个重新的评估测试。
所以人工智能系统需要一个更高效、持续的测试方法。
人工智能系统随着时间的变化,数据的演化,性能、输出结果也会发生变化,因此需要一个可持续的、可循环迭代的测试方法。能够尽快地去训练、测评、部署更新版的模型。这也是人工智能系统测试需要遵循的一个原则。
人工智能系统测试流程和方法
接下来我们一起来看一下,人工智能系统究竟应该用什么样的流程和方法去进行测试呢?首先我们一起来看一下,一个企业的人工智能产品部署和发布的一个流程,首先企业会从历史数据库中,利用数据去训练出一个初始的模型,这个初始的模型首先会进行一个offline testing,也就是说一个离线的测试。离线的测试就是针对现阶段训练出来的模型进行一些功能、性能方面的测试。
离线测试通过之后,就会把这个模型部署到线上的一个具体业务当中去。部署到线上之后,我们的数据也会进行实时的更新,随着用户访问这个人工智能系统越来越多之后,数据也会随着业务开展变得越来越多。这时候,在线上进行业务的同时,我们会对这个人工智能系统模型进行一个线上的测试,也就是online testing。
线上的测试和线下的测试有什么主要的区别呢?第一个是线上测试会接触到更多的新的一些数据,有些数据可能是一些非法的,有的可能是造成一定影响的,都是有可能发生的,这个对于线下的测试来说一般是很难做到的。
第二点,线上的测试除了线下测试需要考虑的模型的一些参数之外,还可能会考虑到一些性能方面的问题。比如说用户的响应时间等。
在进行线上测试之后,我们会收集到一些新的线上用户的一些数据,这些数据一般来说都会更新到原来的数据库当中去。这样就形成了一个循环迭代的过程。也就是说,不断的用这个数据库去训练这个模型,再从新的数据中去更新这个模型,去不断地进行线下和线上的测试这样一个过程。
从这个过程中我们也可以看到,整个人工智能测试是一个循环迭代更新的一个过程,对于数据的更新也是非常重要的一环。
测试的步骤具体来说到底是怎么做的呢?我们经过大量的时间和研究总结出来了人工智能测试的生命周期。基本上它也是一个循环迭代的一个过程,需要经历测试需求的分析、测试环境的准备、数据的准备与验证、测试的执行预分析以及上线后的监控这样一个过程。
接下来我们详细讲一个各个环节需要注意的地方。
测试需求分析
首先从测试需求分析阶段,这个可以借鉴我们测试需求分析的一些方法,我们需要明确测试的对象、测试的范围、测试的方法和工具等。对于人工智能系统的测试来说,有两点是需要特别注意的:
1、AI系统测试通过的准则,不再仅仅是测试团队的任务,而需要算法开发人员、测试人员、系统运营人员共同参与讨论测试通过准则。
我们刚才也说过,针对人工智能的测试我们很难去确定它的测试到底怎么样才算是通过,怎么样才算是不通过,也就是所谓的“test oracle”的问题。还涉及到一个问题,测试的充分性的问题。在后面的测试技术板块我们会专门讲这两个问题。
我们如何确定测试通过的准则,需要我们的测试团队结合人工智能系统的一些应用场景,进行一些共同参与、讨论,不同的应用场景,测试通过的准则是不一样的。比如一些关乎性命攸关的系统,它测试的准则往往要求会非常的严格,而对于无关性命的系统,它的测试准则就会相应地放宽一些。
2、AI系统的行为或结果无法完全确定或预测,因此还需要开发、测试和系统运营人员共同定义可允许的风险,风险可根据技术的限制和社会共识来确定。
这个跟我们上面讲到的也是相关联的,比如说一个医疗诊断系统,允许的风险就必须要降到非常低,比如说系统的准确率必须要达到99%以上,即使有1%的差错,也有可能导致医疗事故。
但是对于一个一般的人工智能系统,与生命没有什么关系的人工智能系统,比如说识别一个人的年龄、识别花花草草,这种应用即使出错危险也不会特别大。所以一定要根据具体的业务去分析人工智能测试可能带来的风险可能会有哪些,根据这个风险我们再去设计测试通过的准则有哪些。
以上就是需求分析阶段所需要注意的问题,第二个阶段我们需要进行一个测试环境的准备。
测试环境准备
这里通常有三大因素,第一个我们需要考虑数据量、计算量、测试时间等因素。对于人工智能的一个系统来说,往往我们需要输入一些特定的测试数据,这个在接下来的一步我们会具体谈到。这个时候我们就需要考虑我们的测试环境能不能顺利地运行这些测试数据的推断和功能。
第二个是需要测试团队具备环境快速部署的能力,因为人工智能系统的部署开发往往是一个循环迭代的一个过程,这时候需要我们在构建测试环境的时候,需要能够快速地更新和部署。
由此,我们结合以前研究的一些经验,我们发觉DevOps的一些相关技术,尤其是容器技术(Docker+Kubernetes)越来越多地应用于人工智能公司当中,被用于人工智能系统测试的快速测试与部署。因为用容器的方式以及Kubernetes的方式能够快速地去部署我们AI测试所需要的环境。
数据准备
第三阶段主要数据准备阶段,测试数据准备往往是影响最终测试结果的一个重要的指标,对于测试数据集的选择也是非常有讲究的。
首先,测试人员使用的测试数据集,需要尽可能的覆盖真实环境用户产生的数据情况。比如说真实环境下用户上传图像是用手机拍摄的?还是分辨率比较高的?像这种问题肯定是需要考虑进去的。
测试数据集的验证可遵循以下原则:
测试数据与训练数据的比例要合适,这个比例应根据实际算法和应用场景确定;
这个往往发生在离线测试的情况,比如说我们训练好了一个人工智能模型之后,我们需要进行离线测试的时候,我们这个时候的测试数据可以和原来的训练数据成一定的比例关系。这个比例关系可以根据实际的算法和应用场景来确定。
测试数据与训练数据需要独立同分布;
关于同分布这一点,要看具体的需求,如果说真实环境集下和训练数据差得非常远的话,也是建议构建测试数据集的时候需要考虑一下真实环境下的比例分布。比如说正负样本的比例需要和真实的环境尽量可以保持一致。
但是我们在离线测试的时候,如果那时候还没有足够真实环境的数据的话,我们可以考虑先构建一个测试数据和训练数据分布尽量保持一致的测试数据。这样可以比较好地进行一个离线的对人工智能系统的判断。
对于监督模型,测试数据的标签需要保证正确。最后是对于监督的模型,所谓监督的模型就是说我训练的时候,我训练的数据是经过人为的标注的,就叫做可监督的学习,对于这种学习出来的模型,我们测试数据的标签也要尽量保证它的正确性。因为不这样的话,我们最后测试出来的一些结论可能也是错误的。
以上说的测试环境、测试数据都准备好了之后,我们就可以进行具体的人工智能的测试工作了。这里面又可以分为很多种测试的流程,比如说刚才说到的有模型离线的评估、系统的测试、性能的测试、可靠性的测试、A/B测试,最后我们还要针对我们的测试结果进行一定的分析。
模型的离线评估
比如说对于模型的离线评估来说,在人工智能测试中主要是用来评测AI模型对未知新数据的预测能力,即泛化能力。通常而言,泛化能力越好,模型的预测能力就越好。衡量模型泛化能力的通用评测指标包括:均方根误差RMSE、平均绝对误差MAE、准确率Precision、召回率Recall及F-measure等。
衡量泛化能力的标准有很多,通常对于不同的应用场景来说,它的指标也有可能会不同,比如说对于典型的图像分裂的场景,我们有准确率、召回率、MAE值等。对于别的场景也有可能会有别的指标,待会我们也会讲到,比如说对于目标监测的应用场景来说,也有会有其他的计算指标,像均方根误差、绝对误差等等,这个是根据具体的业务应用来定的。
系统测试
模型的离线评估之后,我们也可以进行一个系统的测试,这个时候跟传统的软件测试是有一定的重合的,比如说我们会测试系统整体的业务流程,测试模块之间 数据流动以及测试一些真实用户的使用场景。
在系统测试的过程中我们也可以包括进去一些性能测试、可靠性测试。
性能测试
性能测试我们也是可以考虑负载和压力,或者用户并发这样的一些测试。如果说这个人工智能系统用户访问量非常大的话,我们就可以进行一些性能方面的测试,因为人工智能推断的相应时间也是可以影响到我们整体的系统的相应指标。
可靠性测试
人工智能系统的可靠性包括了鲁棒性、可用性、容错性、易恢复性等指标;特别是我们需要去测试一些鲁棒性、容错性。对于无人驾驶、人脸识别等安全攸关的人工智能系统,需尽可能采用异常数据来进行测试,如对抗样本、易出错的样本等去进行一些测试。这个对于对于人工智能系统的安全和鲁棒是非常重要的。具体的测试技术我们之后会进行一个介绍。
A/B 测试
除了以上这些测试之外,我们也可以进行一个A/B测试。人工智能系统的模型往往是不断迭代更新的,我们如何确定迭代更新之前和之后这两个模型有没有提升?这时候我们就可以用A/B测试去比较两个模型、或者多个模型的差别。
当我们的模型改动之后,我们可以和前面的模型进行一个比较,看看它到底是有优化还是有衰退。来确定我们究竟是用哪一个模型来上线。
测试分析
我们通过上面的一系列的测试之后,我们需要对测试的结果进行分析,需要对AI系统各类测试的质量特性进行深入分析;在模型离线评估阶段,需要分析模型泛化能力是否满足应用的需求;在性能测试阶段,需要分析应用响应时间是否满足需求;在可靠性测试阶段,需要分析系统是否可以抵御对抗样本的攻击,及输入异常数据时系统的表现;在A/B测试阶段,则需要通过统计分析,评判新模型是否到达了预期。
以上就是人工智能系统测试整体上的流程和方法论。这里面还有几点需要我们注意:
AI模型上线后,测试人员需要以固定间隔监控模型的实时表现,根据实际业务每隔几天或几星期,对模型各类指标进行评估;
上面我们也讲到过,除了我们要进行不断迭代的测试之外,我们也需要对模型进行一些固定的时间间隔或者实时的监控。为什么呢,之前也有一些新闻讲到,有些模型如果它是根据用户新输入的一些数据去进行一个实时的训练的话,用户新输入的这些数据往往会对模型的性能造成一定的负面影响。
如果模型随着数据的演化而性能下降,说明模型在新数据下性能不佳,就需要利用新数据重新训练模型,更新模型参数;比如说用户习惯突然有了一些变化,用户输入的特征有所变化的话,以前模型的性能可能就没法满足现在的业务要求,也是要不断的监控去探测。
在一些场景中,我们还需要对用户输入数据进行监控。除了在模型监控之外,对用户输入数据进行监控也是非常重要的。特别是对实时用户新增的数据去进行训练、更新的系统来说尤为重要。
比如说2016年微软在Twitter上发布的一款聊天机器人,他说根据用户不断地聊天数据去训练数据,来进行不断地更新。这样就导致有的人输入一些脏话、或者反动的一些话语,对这个机器人进行不断的调教之后,就导致了这个聊天机器人会表达一些法西斯的思想或者脏话连篇的现象,最后不得不宣布让这个聊天机器人的模型重置。
所以说对这类系统来说,我们也要不断地去监控模型的一些实时的表现,以及用户输入数据的一些实时的表现,防止人们把模型“教坏”的情况。
后面的文章会继续为大家详细介绍人工智能系统测试相关的具体技术,欢迎继续关注。
(谢绝转载,更多内容可查看我的主页,本文章整理自优品软件培育计划公益直播,可私信我获取直播回放)
相关文章:

如何对人工智能系统进行测试|要点,方法及流程
当今社会,人工智能发展非常快。现在人工智能的发展已经渗透到了我们生活的方方面面,自动驾驶、或者我们手机里经常用到的一些应用都或多或少涉及到了一些人工智能的功能,比如说美图秀秀、新闻推荐、机器翻译以及个性化的购物推荐等等都涉及到…...

CVE-2023-37569~文件上传【春秋云境靶场渗透】
# 今天我们拿下CVE-2023-37569这个文件上传漏洞# 经过简单账号密码猜测 账号:admin 密码:password# 找到了文件上传的地方# 我们直接给它上传一句话木马并发现上传成功# 上传好木马后,右键上传的木马打开发现上传木马页面# 直接使用蚁剑进行连…...

MySQL简介 数据库管理与表管理
文章目录 1 MySQL的优势2 MySQL数据类型1 数字类型2 日期和时间类型3 字符串类型 3 数据库管理4 数据表管理参考 1 MySQL的优势 性能优化:通过优化存储引擎(InnoDB,MyISAM)和查询优化。解决大规模数据处理和查询优化开源…...

PHP 函数性能优化的技巧是什么?
本文由 ChatMoney团队出品 本文将详细介绍 PHP 函数性能优化的技巧。通过分析 PHP 函数的执行过程和性能瓶颈,提供一系列实用的优化方法,并结合代码示例,帮助读者提升 PHP 代码的执行效率。文章内容将涵盖变量作用域、递归算法、循环优化、内…...

小程序支付(前端)
前端只需要调用 wx.requestPayment(Object object) 文档 参考代码 const openId wx.getStorageSync(openId)payOrder({payId: this.data.resData.payId,openId}).then((res) > {console.log(2222, res);try {const data JSON.parse(res.res)console.log(22, data)const {…...

开发一个自己的VSCode插件
1、前言 对于一个前端开发者来说,开发工具,最常用的应该就是VSCode了,因为它免费,速度快,提供了丰富了插件等优点,使得越来越多的前端开发者都来使用它了,在开发的时候如果有丰富的插件提供支持…...

Milvus 向量数据库进阶系列丨构建 RAG 多租户/多用户系统 (上)
本系列文章介绍 在和社区小伙伴们交流的过程中,我们发现大家最关心的问题从来不是某个具体的功能如何使用,而是面对一个具体的实战场景时,如何选择合适的向量数据库解决方案或最优的功能组合。在 “Milvus 向量数据库进阶” 这个系列文章中&…...

前缀和(更新中)
目录 1.寻找数组的中心下标 2.除自身以外数组的乘积 3.和为k的子数组 4.可被k整除的子数组 5.连续数组 1.寻找数组的中心下标 . - 力扣(LeetCode) class Solution { public:int pivotIndex(vector<int>& nums) {int size nums.size();v…...

记录一次单例模式乱用带来的危害。
项目场景: 我们在接受到短信网关下发的回执之后,需要将回执内容也下发给我们的下游服务。为了防止下游响应超时,我们需要将超时的信息存放到Redis中然后进行补发操作。 问题描述 在使用Redis进行数据存储的时候,报NPE问题。 原因…...

外卖项目day14(day11)---数据统计
Apache ECharts 大家可以看我这篇文章: Apache ECharts-CSDN博客 营业额统计 产品原型 接口设计 新建admin/ReportController /*** 数据统计相关接口*/ RestController RequestMapping("/admin/report") Api(tags "数据统计相关接口") Slf…...

养猫科普!牙口不好的猫咪怎么选粮?好吃易消化主食罐推荐
我家的猫猫已经九岁了,已经是一位老奶奶了,她的牙口不太好。对于她来说,膨化猫粮过于硬,很难咀嚼,所以我为她准备了质地柔软的主食罐头。哪种主食罐头更适合牙口不好的猫咪呢?下面,我就来分享一…...

力扣刷题之3143.正方形中的最多点数
题干描述 给你一个二维数组 points 和一个字符串 s ,其中 points[i] 表示第 i 个点的坐标,s[i] 表示第 i 个点的 标签 。 如果一个正方形的中心在 (0, 0) ,所有边都平行于坐标轴,且正方形内 不 存在标签相同的两个点,…...

【更新2022】省级经济高质量发展指标体系测度 含代码 2000-2022
重磅更新!【章汕】制作“省级经济高质量发展指标体系测度 含代码”,市面上有这个版本的数据,但其内容非常不全面,个别指标有误,没有stata和代码,即使有代码小白也很容易报错;没有权重、宽面板等…...

缓冲流练习
练习1:拷贝文件 四种方式拷贝文件,并统计各自用时。 字节流的基本流:一次读写一个字节 字节流的基本流:一次读写一个字节数组 字节缓冲流:一次读写一个字节 字节缓冲流:一次读写一个字节数组 这里我只使用了…...

自己履行很多的话语,依旧按照这个方式进行生活
《明朝那些事儿》最后一段讲述了徐霞客的故事,作者当年明月通过徐霞客的生平表达了一种人生哲学。在书的结尾,当年明月写道:"成功只有一个——按照自己的方式,去度过人生",这句话被用作《明朝那些事儿》的结…...

交通预测数据文件梳理:METR-LA
文章目录 前言一、adj_METR-LA.pkl文件读取子文件1读取子文件2读取子文件3 二、METR-LA.h5文件 前言 最近做的实验比较多,对于交通预测数据的各种文件和文件中的数据格式理解愈加混乱,因此打算重新做一遍梳理来加深实验数据集的理解,本文章作…...

按钮类控件
目录 1.Push Button 代码示例: 带有图标的按钮 代码示例: 带有快捷键的按钮 代码示例: 按钮的重复触发 2.Radio Buttion 代码示例: 选择性别 代码示例: click, press, release, toggled 的区别 代码示例: 单选框分组 3.3 Check Box 代码示例: 获取复选按钮的取值 1.Pu…...

opencascade AIS_ViewController源码学习 视图控制、包含鼠标事件等
opencascade AIS_ViewController 前言 用于在GUI和渲染线程之间处理视图器事件的辅助结构。 该类实现了以下功能: 缓存存储用户输入状态(鼠标、触摸和键盘)。 将鼠标/多点触控输入映射到视图相机操作(平移、旋转、缩放࿰…...

拉削基础知识——拉床的类型及特点
拉床是所有机械加工工具中最简单的一种,由拉削工具、夹具、驱动装置和支撑架组成。拉削加工可获得较高的尺寸精度和较小的表面粗糙度,生产率较高,适用于大批量生产。拉床按其结构主要分为卧式和立式。应用领域和功能可分为液压拉床、自动拉床…...

docker-compose笔记
docker 目前docker官网已经无法登录,但是还可以从清华镜像站(https://mirrors.tuna.tsinghua.edu.cn/docker-ce/)下载。 使用方法可以参考早期文章《docker笔记》 docker-compose 可以从Github下载不同版本的二进制文件,例如do…...

C# 自定义控件无法加载
问题 在做winform开发时自己定义了一个控件,控件在工具箱中显示了,但是拖动到窗体设计器时会提示未能加载工具箱项xxx,将从工具箱中将其删除,如下图所示: 点击确定后,控件会从工具箱中移除。 解决方法 将 生成>…...

avl树自实现(带图),探讨平衡因子与旋转
引子: 在此之前,我们学过了搜索二叉树,这种树,在如果数据有序或接近有序的情况下,二叉搜索树将退化为单支树,查找元素相当于在顺序表中搜索元素,效率低下,而且普通搜索二叉树无法有…...

Elasticsearch 的DSL查询,聚合查询与多维度数据统计
文章目录 搜索聚合高阶概念 搜索 即从一个索引下按照特定的字段或关键词搜索出符合用户预期的一个或者一堆cocument,然后根据文档的相关度得分,在返回的结果集里并根据得分对这些文档进行一定的排序。 聚合 根据业务需求,对文档中的某个或…...

【如何高效处理前端常见问题:策略与实践】
在快速发展的Web开发领域,前端作为用户与应用程序直接交互的界面,其重要性不言而喻。然而,随着技术的不断演进和项目的复杂化,前端开发者在日常工作中难免会遇到各种挑战和问题。本文旨在深入探讨前端开发中常见的问题类型&#x…...

聊聊前端 JavaScript 的扩展运算符 “...“ 的使用场景
前言 在 JavaScript 中,... 被称为 “扩展运算符” 或 “剩余参数运算符”。 扩展运算符是在 ES6(ECMAScript 2015)中被引入的,目的是为了提高语言的表达能力和代码的可读性。 根据上下文不同,它主要用在数组、对象…...

华为续签了,但我准备离职了
离职华为 今天在牛客网看到一篇帖子,名为《华为续签了,但我准备离职了》。 讲得挺真诚,可能也是一类毕业进华为的同学的心声。 贴主提到,当年自己还是应届毕业的时候,手握多个 offer,最终选的华为ÿ…...

RocketMQ 的认证与授权机制
Apache RocketMQ 是一个高性能、高吞吐量、分布式的消息中间件,广泛应用于异步通信、应用解耦、流量削峰等场景。在企业级应用中,消息安全尤为重要,本文将深入探讨 RocketMQ 的认证与授权机制,帮助开发者和系统管理员更好地理解和…...

【设计模式】六大原则-上
首先什么是设计模式? 相信刚上大学的你和我一样,在学习这门课的时候根本不了解这些设计原则和模式有什么用处,反而不如隔壁的C更有意思,至少还能弹出一个小黑框,给我个hello world。 如何你和我一样也是这么想…...

CRC16循环冗余校验
代码: #include<stdio.h> #include <stdint.h>#define uchar unsigned char #define uint unsigned int static const uint8_t auchCRCHi[] { 0x00, 0xC1, 0x81, 0x40, 0x01, 0xC0, 0x80, 0x41, 0x01, 0xC0, 0x80, 0x41, 0x00, 0xC1, 0x81, 0x40, 0x0…...

Mysql80主从复制搭建;遇到问题 Slave_IO_Running: Connecting和Slave_SQL_Running以及解决过程
总结主要步骤 1.配置一个提供复制的账号; 创建用户 CREATE USER replication% IDENTIFIED BY your_password; GRANT REPLICATION SLAVE ON *.* TO replication%; FLUSH PRIVILEGES;2.修改配置 选择模式 主库配置; windows的得话是my.ini文件 默认这个目…...