/* Going to select the highest power object that we are compatible with */ for (i = 0; i < port->SrcCapsHeaderReceived.NumDataObjects; i++) { switch (port->SrcCapsReceived[i].PDO.SupplyType) { case pdoTypeFixed: /* pdoTypeFixed */ objVoltage = port->SrcCapsReceived[i].FPDOSupply.Voltage * 50; if (objVoltage > port->PortConfig.SinkRequestMaxVoltage) { /* If the voltage is greater than our limit... */ continue; } else { /* Calculate the power for comparison */ objCurrent = port->SrcCapsReceived[i].FPDOSupply.MaxCurrent * 10; objPower = (objVoltage * objCurrent) / 1000; } break; case pdoTypeVariable: case pdoTypeBattery: case pdoTypeAugmented: PPSAPDO = i + 1; objVoltage = port->SrcCapsReceived[i].PPSAPDO.MaxVoltage * 100; if (objVoltage > port->PortConfig.SinkRequestMaxVoltage) { /* If the voltage is greater than our limit... */ continue; } else { /* Calculate the power for comparison */ objCurrent = port->SrcCapsReceived[i].PPSAPDO.MaxCurrent * 50; objPower = (objVoltage * objCurrent) / 1000; } break; default: /* Ignore other supply types for now */ objPower = 0; break; } /* Look for highest power */ if (objPower >= MaxPower) { MaxPower = objPower; SelVoltage = objVoltage; reqPos = i + 1; } }代码分析

时间: 2024-04-04 16:29:35 浏览: 9
这段代码是一个 USB PD(Power Delivery)协议的实现,用于在连接的设备之间确定电源供应类型和电源参数,以便为设备提供所需的电能。这段代码的作用是在所有可供选择的电源中,选择与当前设备兼容并输出最高功率的电源。 具体来说,代码通过遍历接收到的源电源容量数据对象,分别计算每个电源的电压和电流,从而计算出该电源可以提供的最大功率。对于不同类型的电源,代码使用不同的方法计算电流和电压。 代码中使用变量 MaxPower 和 SelVoltage 记录当前选择的最大功率和电压,并且使用 reqPos 记录所选电源的位置。最后,代码返回选择的电源位置和所需电压,以便设备可以向所选择的电源发出请求。
相关问题

<%@page pageEncoding="utf-8" %> <!-- Modal --> <div class="modal fade" id="registerModal" tabindex="-1" role="dialog" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title text-info">用户注册</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">&times;</span> </button> </div> <form method="post" action="${pageContext.request.contextPath }/model/register"> <div class="modal-body"> <div class="form-group row"> <label class="col-sm-2 col-form-label">用户名</label> <div class="col-sm-10"> <input class="form-control" id="username" name="un" type="text" required /> <span class="text-danger" id="checkInfo"></span> </div> </div> <div class="form-group row"> <label class="col-sm-2 col-form-label">密码</label> <div class="col-sm-10"> <input class="form-control" name="pw" type="password" required /> </div> </div> <div class="form-group row"> <label class="col-sm-2 col-form-label">电话</label> <div class="col-sm-10"> <input class="form-control" name="tel" type="number" required /> </div> </div> <div class="form-group row"> <label class="col-sm-2 col-form-label">地址</label> <div class="col-sm-10"> <input class="form-control" name="addr" type="text" required /> </div> </div> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">关闭</button> <button type="submit" class="btn btn-primary" id="regButton">确定</button> </div> </form> </div> </div> </div>解析每一行代码

= score_management.average_score('math') print(f'数学成绩最高分:{highest_score}') print(f'数学成绩最低分:{lowest_score}') print(f'数学成绩平均分:{average_score}') 1. 第一行是指定页面编码为 UTF-8。 2. 注释行,提示该模态框是用 elif sub_option == '3': highest_score = score_management.highest_score('english') lowest_score = score_management.lowest_score于注册用户的。 3. 创建一个模态框,id 为 registerModal,用于显示用户注册的内容。 4.('english') average_score = score_management.average_score('english') print(f'英语成绩最高分:{highest 创建一个模态框的主体部分。 5. 创建一个模态框的标题部分。 6. 创建一个关闭按钮,用于关闭模态框。 7. 创建一个表单,method 为 post,action 为 register,用于提交用户_score}') print(f'英语成绩最低分:{lowest_score}') print(f'英语成绩平均分注册信息。 8. 创建一个模态框的主体内容部分。 9. 创建一个表单组,标签为“:{average_score}') elif option == '3': print('退出系统') break else: print('输入用户名”,包含一个输入框,要求输入框必填,id 为 username,name 为 un,同时包含一个有误,请重新选择!') ``` 该代码实现了基本信息管理模块和学生成绩管理模块的主要功能。你可以根据实际需求进行修改和完善。同时,这份代码也是面向对象编程用于显示错误信息的 span 元素。 10. 创建一个表单组,标签为“密码”,包含一个密码输入的一个简单示例,你可以参考其中的设计思路和代码实现。

List<int> aryList1 = new List<int>(); aryList1.AddRange(new int[] { 85, 92, 67, 94, 94 }); List<int> aryList2 = new List<int>(); aryList2.AddRange(new int[] { 50, 60, 57, 95 }); List<int> aryList3 = new List<int>(); aryList3.AddRange(new int[] { 95 }); List<List<int>> classGrade = new List<List<int>>(); classGrade.Add(aryList1); classGrade.Add(aryList2); classGrade.Add(aryList3); List<int> highestGrade(List<List<int>> p2) { List<int> result = new List<int>(); for (int i = 0; i < p2.Count; i++) { int max; List<int> temp = p2[i]; for (int j = 1; j < temp.Count; j++) { if (temp[0] < temp[j]) { max = temp[j]; temp[j] = temp[0]; temp[0] = max; } } result.Add(temp[0]); } return result; }; Console.WriteLine($"The highest grade is {highestGrade(classGrade).Max()}"); 改进代码

可以将内部循环改为使用 LINQ 的 Max() 方法来查找列表中的最大值,而不必手动进行比较和交换。同时,可以使用 var 关键字简化代码。改进后的代码如下: ``` List<int> highestGrade(List<List<int>> p2) { List<int> result = new List<int>(); foreach (var temp in p2) { result.Add(temp.Max()); } return result; } List<List<int>> classGrade = new List<List<int>> { new List<int> { 85, 92, 67, 94, 94 }, new List<int> { 50, 60, 57, 95 }, new List<int> { 95 } }; Console.WriteLine($"The highest grade is {highestGrade(classGrade).Max()}"); ```

相关推荐

Accum TrustedAccum::TEEaccum(Stats &stats, Nodes nodes, Vote<Void, Cert> votes[MAX_NUM_SIGNATURES]) { View v = votes[0].getCData().getView(); View highest = 0; Hash hash = Hash(); std::set signers; for(int i = 0; i < MAX_NUM_SIGNATURES && i < this->qsize; i++) { Vote<Void, Cert> vote = votes[i]; CData<Void, Cert> data = vote.getCData(); Sign sign = vote.getSign(); PID signer = sign.getSigner(); Cert cert = data.getCert(); bool vd = verifyCData(stats, nodes, data, sign); bool vc = verifyCert(stats, nodes, cert); if(data.getPhase() == PH1_NEWVIEW && data.getView() == v && signers.find(signer) == signers.end() && vd && vc) { if(DEBUG1) { std::cout << KMAG << "[" << this->id << "]" << "inserting signer" << KNRM << std::endl; } signers.insert(signer); if(cert.getView() >= highest) { highest = cert.getView(); hash = cert.getHash(); } } else { if(DEBUG1) { std::cout << KMAG << "[" << this->id << "]" << "vote:" << vote.prettyPrint() << KNRM << std::endl; } if(DEBUG1) { std::cout << KMAG << "[" << this->id << "]" << "not inserting signer (" << signer << ") because:" << "check-phase=" << std::to_string(data.getPhase() == PH1_NEWVIEW) << "(" << data.getPhase() << "," << PH1_NEWVIEW << ")" << ";check-view=" << std::to_string(data.getView() == v) << ";check-notin=" << std::to_string(signers.find(signer) == signers.end()) << ";verif-data=" << std::to_string(vd) << ";verif-cert=" << std::to_string(vc) << KNRM << std::endl; } } } bool set = true; unsigned int size = signers.size(); std::string text = std::to_string(set) + std::to_string(v) + std::to_string(highest) + hash.toString() + std::to_string(size); Sign sign(this->priv,this->id,text); return Accum(v, highest, hash, size, sign); }

#include <iostream> #include <iomanip> #include <string.h> #include <cmath> #define M 3 // 课程门数 #define N 4 //学生数组中的学生个数 using namespace std; class Student { public: Student() {} Student(const Student&); void input_info() { cin>>id; cin>>name; for(int i=0; i<3; i++) cin>>score[i]; isFail=false; for(int i=0; i<3; i++) if(score[i]<60) isFail=true; } void input_lesson_ids() { for(int i=0; i<M; i++) cin>>lesson_id[i]; } void show_info() { cout<<"Student id:"<<id<<endl; cout<<"Student name:"<<name<<endl; cout<<setw(10)<<"lesson_id "; for(int i=0; i<M; i++) cout<<setw(10)<<lesson_id[i]; cout<<setw(10)<<"Average"; cout<<endl; cout<<setw(10)<<"scores "; for(int i=0; i<M; i++) cout<<setw(10)<<score[i]; cout<<setw(10)<<ave(); cout<<endl; if(isFail) cout<<"The student failed."<<endl; else cout<<"The student didn\'t fail."<<endl; cout<<"------华丽的分割线--------"<<endl; } float ave()//求平均成绩 { //实现求平均成绩并返回 ...... } string get_name() { return name; } private: int id; string name; bool isFail; static int lesson_id[M]; float score[M]; }; int Student::lesson_id[M]; Student::Student(const Student& s) { //完成拷贝构造函数的实现,拷贝出的对象和原对象一致 ...... } int main() { Student cs[N]; cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值 for(int i=0; i<N; i++) cs[i].input_info(); //求出最高平均成绩并按要求格式输出相关语句 ...... //求出最低平均成绩并按要求格式输出相关语句 ...... //按照平均成绩的高低对学生数组进行排序 ...... for(int i=0; i<N; i++)//输出排序后的结果 cs[i].show_info(); return 0; }补全c++

输入: 201 202 203 1 zhang 67 88 92 2 li 44 77 99 3 wang 76 82 95 4 zhao 63 82 86 输出: Student wang got the highest average score as 84.3333 Student li got the lowest average score as 73.3333 Student id:3 Student name:wang lesson_id 201 202 203 Average scores 76 82 95 84.3333 The student didn't fail. ------华丽的分割线-------- Student id:1 Student name:zhang lesson_id 201 202 203 Average scores 67 88 92 82.3333 The student didn't fail. ------华丽的分割线-------- Student id:4 Student name:zhao lesson_id 201 202 203 Average scores 63 82 86 77 The student didn't fail. ------华丽的分割线-------- Student id:2 Student name:li lesson_id 201 202 203 Average scores 44 77 99 73.3333 The student failed. ------华丽的分割线-------- 程序部分代码如下,请补充完整。 #include <iostream> #include <iomanip> #include <string.h> #include <cmath> #define M 3 // 课程门数 #define N 4 //学生数组中的学生个数 using namespace std; class Student { public: Student() {} Student(const Student&); void input_info() { cin>>id; cin>>name; for(int i=0; i<3; i++) cin>>score[i]; isFail=false; for(int i=0; i<3; i++) if(score[i]<60) isFail=true; } void input_lesson_ids() { for(int i=0; i<M; i++) cin>>lesson_id[i]; } void show_info() { cout<<"Student id:"<<id<<endl; cout<<"Student name:"<<name<<endl; cout<<setw(10)<<"lesson_id "; for(int i=0; i<M; i++) cout<<setw(10)<<lesson_id[i]; cout<<setw(10)<<"Average"; cout<<endl; cout<<setw(10)<<"scores "; for(int i=0; i<M; i++) cout<<setw(10)<<score[i]; cout<<setw(10)<<ave(); cout<<endl; if(isFail) cout<<"The student failed."<<endl; else cout<<"The student didn\'t fail."<<endl; cout<<"------华丽的分割线--------"<<endl; } float ave()//求平均成绩 { //实现求平均成绩并返回 ...... } string get_name() { return name; } private: int id; string name; bool isFail; static int lesson_id[M]; float score[M]; }; int Student::lesson_id[M]; Student::Student(const Student& s) { //完成拷贝构造函数的实现,拷贝出的对象和原对象一致 ...... } int main() { Student cs[N]; cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值 for(int i=0; i<N; i++) cs[i].input_info(); //求出最高平均成绩并按要求格式输出相关语句 ...... //求出最低平均成绩并按要求格式输出相关语句 ...... //按照平均成绩的高低对学生数组进行排序 ...... for(int i=0; i<N; i++)//输出排序后的结果 cs[i].show_info(); return 0; }

#include <iostream>#include <iomanip>#include <string.h>#include <cmath>#define M 3 // 课程门数#define N 4 //学生数组中的学生个数using namespace std;class Student{public:Student() {}Student(const Student&);void input_info(){cin>>id;cin>>name;for(int i=0; i<3; i++)cin>>score[i];isFail=false;for(int i=0; i<3; i++)if(score[i]<60) isFail=true;}void input_lesson_ids(){for(int i=0; i<M; i++)cin>>lesson_id[i];}void show_info(){ cout<<"Student id:"<<id<<endl;cout<<"Student name:"<<name<<endl;cout<<setw(10)<<"lesson_id ";for(int i=0; i<M; i++)cout<<setw(10)<<lesson_id[i];cout<<setw(10)<<"Average";cout<<endl;cout<<setw(10)<<"scores ";for(int i=0; i<M; i++)cout<<setw(10)<<score[i];cout<<setw(10)<<ave();cout<<endl;if(isFail) cout<<"The student failed."<<endl;elsecout<<"The student didn\'t fail."<<endl;cout<<"------华丽的分割线--------"<<endl;}float ave()//求平均成绩{ //实现求平均成绩并返回 int sum=0,i,ave; for(int i=0;i<M;i++) sum=sum+score[i]; return ((float)sum/M);}string get_name(){ return name; }private:int id;string name;bool isFail;static int lesson_id[M];float score[M];};int Student::lesson_id[M];Student::Student(const Student& s){ //完成拷贝构造函数的实现,拷贝出的对象和原对象一致id=s.id;name=s.name;for(int i=0;i<M;i++){ lesson_id[i]=s.lesson_id[i]; score[i]=s.score[i];}isFail=s.isFail;}int main(){ Student cs[N];cs[0].input_lesson_ids();// 用一个学生对象对静态数组成员赋值for(int i=0; i<N; i++)cs[i].input_info();//求出最高平均成绩并按要求格式输出相关语句//求出最低平均成绩并按要求格式输出相关语句 //按照平均成绩的高低对学生数组进行排序for(int i=0; i<N; i++)//输出排序后的结果cs[i].show_info();return 0;}补齐代码

TypeError Traceback (most recent call last) <ipython-input-8-5c01a7ed3ab2> in <module> 39 #=Matrix([2,0,1,3,4,5,2,5,3]).reshape(3,3) 40 A = sp.Matrix([2, 0, 2, 2, 1, 1, 2, 2, 0, 1, 1, 2, 0, 0, 2, 0]).reshape(4, 4) ---> 41 Q, R = DecompositionQR(A) 42 Q <ipython-input-8-5c01a7ed3ab2> in DecompositionQR(A) 31 B[j, i] = 0 32 Ci = sp.Matrix([int(k == i) for k in range(n)]) ---> 33 S = mat_simp(mat(Ci-B[:, i:i+1]/B[:, i:i+1].norm())) 34 O = S@O 35 AA = S@AA <ipython-input-8-5c01a7ed3ab2> in mat(u) 14 for j in range(n): 15 cj = sp.Matrix([int(i == j) for i in range(n)]) ---> 16 Mcj = cj-2*cj.dot(u)/u.norm()**2*u 17 for i in range(n): 18 M[i, j] = Mcj[i] ~\anaconda3\lib\site-packages\sympy\core\decorators.py in binary_op_wrapper(self, other) 134 if f is not None: 135 return f(self) --> 136 return func(self, other) 137 return binary_op_wrapper 138 return priority_decorator ~\anaconda3\lib\site-packages\sympy\matrices\common.py in __sub__(self, a) 2975 @call_highest_priority('__rsub__') 2976 def __sub__(self, a): -> 2977 return self + (-a) 2978 2979 class MatrixCommon(MatrixArithmetic, MatrixOperations, MatrixProperties, ~\anaconda3\lib\site-packages\sympy\core\decorators.py in binary_op_wrapper(self, other) 134 if f is not None: 135 return f(self) --> 136 return func(self, other) 137 return binary_op_wrapper 138 return priority_decorator ~\anaconda3\lib\site-packages\sympy\matrices\common.py in __add__(self, other) 2694 return MatrixArithmetic._eval_add(self, other) 2695 -> 2696 raise TypeError('cannot add %s and %s' % (type(self), type(other))) 2697 2698 @call_highest_priority('__rtruediv__') TypeError: cannot add <class 'sympy.matrices.dense.MutableDenseMatrix'> and <class 'sympy.core.numbers.NaN'>

最新推荐

recommend-type

Google已经推出了Google VR SDK,

VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
recommend-type

基于51单片机的自动循迹、蓝牙遥控,超声波避障的智能小车+全部资料+详细文档(高分项目).zip

【资源说明】 基于51单片机的自动循迹、蓝牙遥控,超声波避障的智能小车+全部资料+详细文档(高分项目).zip基于51单片机的自动循迹、蓝牙遥控,超声波避障的智能小车+全部资料+详细文档(高分项目).zip基于51单片机的自动循迹、蓝牙遥控,超声波避障的智能小车+全部资料+详细文档(高分项目).zip 【备注】 1、该项目是个人高分项目源码,已获导师指导认可通过,答辩评审分达到95分 2、该资源内项目代码都经过测试运行成功,功能ok的情况下才上传的,请放心下载使用! 3、本项目适合计算机相关专业(人工智能、通信工程、自动化、电子信息、物联网等)的在校学生、老师或者企业员工下载使用,也可作为毕业设计、课程设计、作业、项目初期立项演示等,当然也适合小白学习进阶。 4、如果基础还行,可以在此代码基础上进行修改,以实现其他功能,也可直接用于毕设、课设、作业等。 欢迎下载,沟通交流,互相学习,共同进步!
recommend-type

整合了在Unity开发过程中自主开发的实用代码,如摄影机操作,角色操作,控制器交互等。涵盖3D游戏到VR领域。.zip

VR(Virtual Reality)即虚拟现实,是一种可以创建和体验虚拟世界的计算机技术。它利用计算机生成一种模拟环境,是一种多源信息融合的、交互式的三维动态视景和实体行为的系统仿真,使用户沉浸到该环境中。VR技术通过模拟人的视觉、听觉、触觉等感觉器官功能,使人能够沉浸在计算机生成的虚拟境界中,并能够通过语言、手势等自然的方式与之进行实时交互,创建了一种适人化的多维信息空间。 VR技术具有以下主要特点: 沉浸感:用户感到作为主角存在于模拟环境中的真实程度。理想的模拟环境应该使用户难以分辨真假,使用户全身心地投入到计算机创建的三维虚拟环境中,该环境中的一切看上去是真的,听上去是真的,动起来是真的,甚至闻起来、尝起来等一切感觉都是真的,如同在现实世界中的感觉一样。 交互性:用户对模拟环境内物体的可操作程度和从环境得到反馈的自然程度(包括实时性)。例如,用户可以用手去直接抓取模拟环境中虚拟的物体,这时手有握着东西的感觉,并可以感觉物体的重量,视野中被抓的物体也能立刻随着手的移动而移动。 构想性:也称想象性,指用户沉浸在多维信息空间中,依靠自己的感知和认知能力获取知识,发挥主观能动性,寻求解答,形成新的概念。此概念不仅是指观念上或语言上的创意,而且可以是指对某些客观存在事物的创造性设想和安排。 VR技术可以应用于各个领域,如游戏、娱乐、教育、医疗、军事、房地产、工业仿真等。随着VR技术的不断发展,它正在改变人们的生活和工作方式,为人们带来全新的体验。
recommend-type

zigbee-cluster-library-specification

最新的zigbee-cluster-library-specification说明文档。
recommend-type

管理建模和仿真的文件

管理Boualem Benatallah引用此版本:布阿利姆·贝纳塔拉。管理建模和仿真。约瑟夫-傅立叶大学-格勒诺布尔第一大学,1996年。法语。NNT:电话:00345357HAL ID:电话:00345357https://theses.hal.science/tel-003453572008年12月9日提交HAL是一个多学科的开放存取档案馆,用于存放和传播科学研究论文,无论它们是否被公开。论文可以来自法国或国外的教学和研究机构,也可以来自公共或私人研究中心。L’archive ouverte pluridisciplinaire
recommend-type

实现实时数据湖架构:Kafka与Hive集成

![实现实时数据湖架构:Kafka与Hive集成](https://img-blog.csdnimg.cn/img_convert/10eb2e6972b3b6086286fc64c0b3ee41.jpeg) # 1. 实时数据湖架构概述** 实时数据湖是一种现代数据管理架构,它允许企业以低延迟的方式收集、存储和处理大量数据。与传统数据仓库不同,实时数据湖不依赖于预先定义的模式,而是采用灵活的架构,可以处理各种数据类型和格式。这种架构为企业提供了以下优势: - **实时洞察:**实时数据湖允许企业访问最新的数据,从而做出更明智的决策。 - **数据民主化:**实时数据湖使各种利益相关者都可
recommend-type

list根据id查询pid 然后依次获取到所有的子节点数据

可以使用递归的方式来实现根据id查询pid并获取所有子节点数据。具体实现可以参考以下代码: ``` def get_children_nodes(nodes, parent_id): children = [] for node in nodes: if node['pid'] == parent_id: node['children'] = get_children_nodes(nodes, node['id']) children.append(node) return children # 测试数
recommend-type

JSBSim Reference Manual

JSBSim参考手册,其中包含JSBSim简介,JSBSim配置文件xml的编写语法,编程手册以及一些应用实例等。其中有部分内容还没有写完,估计有生之年很难看到完整版了,但是内容还是很有参考价值的。
recommend-type

"互动学习:行动中的多样性与论文攻读经历"

多样性她- 事实上SCI NCES你的时间表ECOLEDO C Tora SC和NCESPOUR l’Ingén学习互动,互动学习以行动为中心的强化学习学会互动,互动学习,以行动为中心的强化学习计算机科学博士论文于2021年9月28日在Villeneuve d'Asq公开支持马修·瑟林评审团主席法布里斯·勒菲弗尔阿维尼翁大学教授论文指导奥利维尔·皮耶昆谷歌研究教授:智囊团论文联合主任菲利普·普雷教授,大学。里尔/CRISTAL/因里亚报告员奥利维耶·西格德索邦大学报告员卢多维奇·德诺耶教授,Facebook /索邦大学审查员越南圣迈IMT Atlantic高级讲师邀请弗洛里安·斯特鲁布博士,Deepmind对于那些及时看到自己错误的人...3谢谢你首先,我要感谢我的两位博士生导师Olivier和Philippe。奥利维尔,"站在巨人的肩膀上"这句话对你来说完全有意义了。从科学上讲,你知道在这篇论文的(许多)错误中,你是我可以依
recommend-type

实现实时监控告警系统:Kafka与Grafana整合

![实现实时监控告警系统:Kafka与Grafana整合](https://imgconvert.csdnimg.cn/aHR0cHM6Ly9tbWJpei5xcGljLmNuL21tYml6X2pwZy9BVldpY3ladXVDbEZpY1pLWmw2bUVaWXFUcEdLT1VDdkxRSmQxZXB5R1lxaWNlUjA2c0hFek5Qc3FyRktudFF1VDMxQVl3QTRXV2lhSWFRMEFRc0I1cW1ZOGcvNjQw?x-oss-process=image/format,png) # 1.1 Kafka集群架构 Kafka集群由多个称为代理的服务器组成,这