基于python集成学习算法XGBoost农业数据可视化分析预测系统
文章目录
- 基于python集成学习算法XGBoost农业数据可视化分析预测系统
- 一、项目简介
- 二、开发环境
- 三、项目技术
- 四、功能结构
- 五、功能实现
- 模型构建
- 封装类用于网格调参
- 训练模型
- 系统可视化数据请求接口
- 模型评分 0.5*mse
- 六、系统实现
- 七、总结
基于python集成学习算法XGBoost农业数据可视化分析预测系统
一、项目简介
基于python集成学习算法XGBoost农业数据可视化分析预测系统,旨在帮助农民和相关从业者更好地预测农作物产量,以优化农业生产。该系统主要包括四个功能模块。
首先,农作物数据可视化模块利用Echarts、Ajax、Flask、PyMysql技术实现了可视化展示农作物产量相关数据的功能。
其次,产量预测模块使用pandas、numpy等技术,通过对气象和农作物产量关系数据集的分析和训练,实现了对农作物产量的预测功能。该模块可以对当前或未来某一时间段的农作物产量进行预测,并提供预测结果的可视化展示。
然后,用户登录与用户注册模块使用layui、Flask、PyMysql技术实现了用户登录和注册功能。用户可以通过登录系统后,利用该系统提供的预测和可视化功能,更好地规划和管理自己的农业生产。
最后,数据管理模块使用layui、Flask、PyMysql技术,实现了用户管理、公告管理和农作物数据管理等功能。系统管理员可以通过后台界面对用户信息、公告信息和农作物数据进行管理和维护,保证系统的正常运行和信息安全。
本系统的实现对农业生产的优化具有积极的意义。通过对气象和农作物产量关系数据的分析和训练,该系统可以帮助用户更好地了解不同作物产量随时间变化的趋势和规律,提高农作物的产量和品质,促进农业生产的可持续发展。
二、开发环境
开发环境 | 版本/工具 |
---|---|
PYTHON | 3.x |
开发工具 | PyCharm2021 |
操作系统 | Windows 10 |
内存要求 | 16GB |
浏览器 | Firefox |
数据库 | MySQL 8.0 |
数据库工具 | Navicat Premium 15 |
项目框架 | FLASK、layui |
三、项目技术
后端:Flask、sklearn、PyMySQL、MySQL、urllib
前端:Jinja2、Jquery、Ajax、layui
四、功能结构
农作物产量大屏数据可视化模块:通过ECharts实现数据可视化,展示农作物产量的趋势、关联因素等。
机器学习预测农作物产量模型构建与训练:使用Scikit-learn、Pandas、NumPy构建机器学习模型,对农作物产量进行预测。
用户登录与注册:通过Flask、PyMySQL、LAYUI实现用户登录和注册功能。
系统后台管理模块:
用户模块:管理用户信息,权限等。
公告模块:发布和管理系统相关公告信息。
农作物数据管理模块:存储和管理与农作物产量预测相关的数据集。
预测可视化后台交互:提供用户与预测数据的交互界面,使用Ajax请求后端数据接口展示数据可视化结果。
系统结构图
五、功能实现
模型构建
def model(X_data,y_label,testst,prediction):"""模型搭建"""global params_xgb #模型参数,设置全局变量便于调参n_splits = 25res = []kf = KFold(n_splits = n_splits, shuffle=True, random_state=520)for i, (train_index, test_index) in enumerate(kf.split(X_data)):print('第{}次训练...'.format(i+1))train_data = X_data.iloc[train_index]train_label = y_label.iloc[train_index]valid_data = X_data.iloc[test_index]valid_label = y_label.iloc[test_index]xgb_train = xgb.DMatrix(train_data, label=train_label)xgb_valid = xgb.DMatrix(valid_data, valid_label)evallist = [(xgb_valid, 'eval'), (xgb_train, 'train')]cgb_model = xgb.train(params_xgb, xgb_train, num_boost_round=500 , evals=evallist, verbose_eval=500, early_stopping_rounds=300, feval=myFeval)valid = cgb_model.predict(xgb_valid, ntree_limit=cgb_model.best_ntree_limit)valid_score = mean_squared_error(valid_label,valid)*0.5if valid_score > 0.01:#验证集分数不好的模型丢弃continuexgb_test = xgb.DMatrix(testst)preds = cgb_model.predict(xgb_test, ntree_limit=cgb_model.best_ntree_limit)res.append(preds)print("\n")
使用XGBoost(Extreme Gradient Boosting)算法进行回归任务的模型搭建函数。
- 参数说明:
X_data
: 训练数据的特征。y_label
: 训练数据的目标标签。testst
: 测试数据的特征,用于进行预测。prediction
: 预测结果的存储列表。
- 交叉验证:
- 该模型使用了 K 折交叉验证(KFold),将数据集分成训练集和验证集,循环进行训练和验证。这有助于评估模型的性能,并减少由于数据集划分不同而引起的波动。
- XGBoost模型训练:
- 使用 XGBoost 中的
xgb.train
函数进行模型训练。 - 参数
params_xgb
是全局变量,应该在代码其他地方定义,包含了 XGBoost 模型的超参数设置。 - 训练中使用了早停法(early stopping),如果在一定迭代次数内验证集分数没有提高,则提前结束训练。
- 使用 XGBoost 中的
- 模型预测:
- 使用训练好的模型对验证集和测试集进行预测。
- 验证集预测结果与真实标签计算均方误差(Mean Squared Error),如果分数大于0.01,则该模型被丢弃。
- 如果验证集分数较好,将测试集的预测结果添加到
res
列表中。
- 输出信息:
- 打印每次训练的信息,包括训练次数、验证集分数等。
封装类用于网格调参
class XGBoostre(object):"""封装类用于网格调参"""def __init__(self,**kwargs):self.params = kwargsif "num_boost_round" in self.params:self.num_boost_round = self.params["num_boost_round"]self.params.update({'objective': 'reg:squarederror','silent': 0,'seed': 1000})def fit(self,x_train,y_train):xgb_train = xgb.DMatrix(x_train, label=y_train)self.bst = xgb.train(params=self.params, dtrain=xgb_train, num_boost_round=self.num_boost_round, verbose_eval=100, feval=myFeval)def predict(self,x_pred):dpred = xgb.DMatrix(x_pred)return self.bst.predict(dpred)def kfold(self,x_train,y_train,n_fold=5):xgb_train = xgb.DMatrix(x_train, label=y_train)bst_cv = xgb.cv(params=self.params, dtrain=xgb_train,feval=myFeval,num_boost_round=self.num_boost_round, nfold=n_fold,)return bst_cv.iloc[-1,:]def plt_feature_importance(self):feat = pd.Series(self.bst.get_fscore()).sort_values(ascending=False)feat.plot(title = "Feature_importance")def get_params(self,deep=True):return self.paramsdef set_params(self,**params):self.params.update(params)return self
- 初始化方法
__init__
:- 这个方法用于初始化
XGBoostre
类的实例。 - 使用
**kwargs
来接收任意数量的关键字参数,并将这些参数存储在self.params
字典中。 - 如果
"num_boost_round"
存在于self.params
中,则将其值存储在self.num_boost_round
中。 - 设置默认的XGBoost参数,包括目标函数为
'reg:squarederror'
,不进行静默操作('silent': 0
),并设置随机种子为1000。
- 这个方法用于初始化
- fit 方法:
- 该方法用于训练XGBoost模型。
- 将训练数据
x_train
和y_train
转换为xgb.DMatrix
格式。 - 使用
xgb.train
函数进行模型训练,并保存训练好的模型为self.bst
。
- predict 方法:
- 该方法用于使用训练好的模型进行预测。
- 将待预测数据
x_pred
转换为xgb.DMatrix
格式。 - 使用训练好的模型
self.bst
进行预测,并返回预测结果。
- kfold 方法:
- 该方法执行K折交叉验证。
- 使用
xgb.cv
函数进行K折交叉验证,并返回交叉验证的结果。
- plt_feature_importance 方法:
- 该方法用于绘制特征重要性。
- 获取模型中特征的重要性得分,并将其排序。
- 使用
pd.Series.plot
方法绘制特征重要性的条形图。
- get_params 方法:
- 该方法用于获取当前设置的XGBoost参数。
- 返回存储在
self.params
中的参数。
- set_params 方法:
- 该方法用于更新XGBoost参数。
- 使用传入的关键字参数更新
self.params
字典中的参数,并返回更新后的参数。
这个XGBoostre
类为XGBoost模型提供了一个封装接口,使得用户可以更方便地进行模型训练、预测和评估,同时还可以进行参数调优和特征重要性分析。
训练模型
if __name__ == "__main__":deal_loss()change()change_week()params_xgb = {'booster': 'gbtree','objective': 'reg:squarederror','eval_metric': 'rmse', # 对于回归问题,默认值是rmse,对于分类问题,默认值是error'gamma': 0.1, #损失下降多少才分裂'max_depth': 4,'lambda': 1.2, #控制模型复杂度的权重值的L2曾泽化参数,参数越大越不容易过拟合'subsample': 0.9, #随机采样的训练样本'colsample_bytree': 0.9, #生成树时特征采样比例'min_child_weight': 3, # 6'silent': 0, #信息输出设置成1则没有信息输出'eta': 0.12, #类似学习率'seed': 1000,'nthread': 9,}X_data,y_label,testst,prediction = get_data()model(X_data,y_label,testst,prediction)df = pd.read_csv("result.csv",encoding="gbk")df["区县id"] = df["columns"].apply(arr)
对预测模型进行训练和预测,然后将结果保存到一个 CSV 文件中,并进行后续的数据处理。
- XGBoost模型参数设置:
- 定义了一个字典
params_xgb
,包含了 XGBoost 模型的超参数设置。这些参数控制了模型的结构和训练过程。
- 定义了一个字典
- 获取数据:
- 调用
get_data()
函数,但代码中未提供该函数的实现。这个函数用于获取训练数据 (X_data
,y_label
) 和测试数据 (testst
)。
- 调用
- 模型训练:
- 调用
model
函数,传入训练数据和测试数据,进行模型训练和预测。模型的超参数通过params_xgb
传递。
- 调用
- 读取CSV文件并进行数据处理:
- 使用 Pandas (
pd
) 读取一个 CSV 文件,文件名为 “result.csv”,使用 GBK 编码。 - 对 DataFrame 中的 “columns” 列应用
arr
函数,但未提供arr
函数的实现。
- 使用 Pandas (
系统可视化数据请求接口
@app.route('/')
def main_page():month_rain = data_service.get_month_rain_volume()ave_wind = data_service.get_ave_wind()count, output, weather = data_service.get_total()yearly_outputs = data_service.get_yearly_output()months_temp = data_service.get_months_temp()times_selling = data_service.get_times_selling()months_sun = data_service.get_months_sun()table_list = data_service.get_table_list()return render_template("main.html", month_rain=month_rain,ave_wind=ave_wind,table_list=table_list,count=count, output=output, weather=weather,yearly_outputs=yearly_outputs, months_temp=months_temp,times_selling=times_selling, months_sun=months_sun)
- 数据获取:
month_rain = data_service.get_month_rain_volume()
: 获取月降雨量的数据,是通过调用get_month_rain_volume
函数从data_service
中获取。ave_wind = data_service.get_ave_wind()
: 获取平均风速的数据,是通过调用get_ave_wind
函数从data_service
中获取。count, output, weather = data_service.get_total()
: 获取总数、输出和天气的数据,是通过调用get_total
函数从data_service
中获取。- 其他类似的语句用于获取其他数据,如年度产出、月温度、销售次数、月日照时间等。
- HTML 模板渲染:
return render_template("main.html", ...)
: 使用 Flask 提供的render_template
函数渲染 HTML 模板。传递了多个变量作为模板中的参数,这些变量包括上面获取的各种数据。
- 返回结果:
main.html
模板将使用传递的数据进行渲染,然后作为 HTTP 响应返回给用户。
模型评分 0.5*mse
def myFeval(preds, xgbtrain):"""模型评分 0.5*mse"""xgbtrain = xgbtrain.get_label() #将xgboost.core.DMatrix类转化为ndarray类别score = mean_squared_error(xgbtrain,preds)*0.5return 'myFeval', score
自定义评估函数 myFeval
,用于在XGBoost模型训练过程中评估模型的性能。
-
参数解释:
preds
: 预测的目标变量值。xgbtrain
: XGBoost训练数据,通常是xgboost.DMatrix
类型。
-
函数逻辑:
-
xgbtrain = xgbtrain.get_label()
: 将xgbtrain
转换为ndarray
类型,通过调用get_label()
方法获取标签。这是将XGBoost的DMatrix
转换为NumPy数组的操作。 -
score = mean_squared_error(xgbtrain, preds) * 0.5
: 计算均方误差(Mean Squared Error,MSE),然后乘以0.5。这是一个模型评估指标,用于衡量模型预测值与实际标签之间的平方差。将MSE乘以0.5可能是为了得到更合适的评估分数。 -
return 'myFeval', score
: 返回一个元组,包含自定义评估名称 ‘myFeval’ 和计算得到的分数。该评估函数主要用于XGBoost模型训练中,作为
eval_metric
参数的值。这个函数的设计是为了与XGBoost的内置评估函数保持一致,并且使用MSE的一半作为最终评估分数。
-
六、系统实现
启动项目
可视化模块主要实现了对各个地区农业产量的轮播数据展示、对气象变化归路展 示、对气象天气进行分类统计、对日照时间进行统计柱状图分析等功能。实现流程首先 通过浏览器发动 http 请求,Flask 接收到请求后,通过 PyMysql 对数据库进行查询,然 后格式化与分析后响应给前端,前端通过 Echarts 技术在进行可视化解析与渲染,最终 实现可视化效果。
用户模块核心带主要是用户登录时候的校验,这里以用户登录的业务逻辑层代码为
例,如下图 所示。
登录页面
注册页面
后台管理首页
用户管理
公告管理
产量数据管理
气象数据管理
产量预测管理
七、总结
基于XGBoost的算法分析预测具有许多优势,这些优势使得XGBoost成为许多应用场景的首选算法之一。
- 高性能:
- XGBoost是一种梯度提升算法,它在性能上表现出色。通过使用并行处理和基于特征的分裂方法,XGBoost能够快速、高效地处理大规模数据集。
- 强大的正则化:
- XGBoost通过正则化项(如L1和L2正则化)提供了对模型的强大控制,有助于防止过拟合。这使得模型更具泛化能力,可以适用于不同的数据集。
- 处理缺失值:
- XGBoost能够自动处理缺失值。在实际应用中,数据中的缺失值是常见的问题,而XGBoost能够有效地处理这些情况,而不需要进行额外的数据处理。
- 可解释性:
- XGBoost具有一定的可解释性,可以输出特征的重要性得分。这对于理解模型对农作物产量预测中哪些特征起到关键作用非常有帮助,从而为农业决策提供支持。
- 适用于多种任务:
- XGBoost不仅可以用于回归问题(如农作物产量预测),还可以用于分类和排序等任务。这种通用性使得XGBoost在不同类型的问题中都能够展现出色的性能。
- 可扩展性:
- XGBoost具有良好的可扩展性,可以应对大规模数据和高维特征。它支持分布式计算,可以在分布式环境中运行,提高了处理大规模数据时的效率。
- 特征重要性评估:
- XGBoost可以输出特征的相对重要性,帮助用户理解模型对输入特征的依赖程度。这对于农作物产量预测系统的可解释性和可理解性非常有价值。
总结来说,XGBoost在性能、鲁棒性和可解释性等方面都表现出色,使其成为解决复杂问题的强大工具,也为农作物产量预测系统提供了可靠的建模手段。
需项目资料/商业合作/交流探讨等可以添加下面个人名片,感谢各位的喜欢与支持!
后续持续更新更多优质内容!
相关文章:

基于python集成学习算法XGBoost农业数据可视化分析预测系统
文章目录 基于python集成学习算法XGBoost农业数据可视化分析预测系统一、项目简介二、开发环境三、项目技术四、功能结构五、功能实现模型构建封装类用于网格调参训练模型系统可视化数据请求接口模型评分 0.5*mse 六、系统实现七、总结 基于python集成学习算法XGBoost农业数据可…...

第29集《佛法修学概要》
丁三、声闻乘 分二:戊一、释义;戊二、四谛法;戊三、结示 请大家打开讲义第八十二页。我们看丁三,声闻乘。 在祖师大德的判教当中,把我们整个大乘的成佛之道分成了三个部分:第一个是安乐道,第…...

奥伦德光电耦合器5G通信领域及其相关领域推荐
光电耦合器是以光为媒介传输电信号的一种电-光-电转换器件。由于该器件使用寿命长、工作温度范围宽,所以在过程控制、工业通信、家用电器、医疗设备、通信设备、计算机以及精密仪器等方面有着广泛应用在当前工艺技术持续发展与提升的过程中,其工作速度、…...

机器学习算法 - 马尔可夫链
马尔可夫链(Markov Chain)可以说是机器学习和人工智能的基石,在强化学习、自然语言处理、金融领域、天气预测、语音识别方面都有着极其广泛的应用 > The future is independent of the past given the present 未来独立于过去ÿ…...
Linux下防火墙相关命令整理
目录 一.前言二.相关命令整理 一.前言 这篇文章简单整理一下Linux系统中防火墙相关命令。 二.相关命令整理 开启防火墙 systemctl start firewalld关闭防火墙 systemctl stop firewalld重启防火墙 systemctl restart firewalld开机启用防火墙 systemctl enable firewall…...
Python八股文总结
一. Python基本数据结构有哪四种?区别是什么? 列表(List)元组(Tuple)字典(Dictionary)集合(Set) 区别主要在于它们的可变性(是否可以修改&#x…...

计算机导论05-计算机网络
文章目录 计算机网络基础计算机网络概述计算机网络的概念计算机网络的功能计算机网络的组成 计算机网络的发展计算机网络的类型 网络体系结构网络互联模型OSI/RM结构与功能TCP/IP结构模型TCP/IP与OSI/RM的比较 网络地址与分配IP地址构成子网的划分IPv6 传输介质与网络设备网络传…...

sentinel熔断与限流
文章目录 一、sentinel简介Sentinel 是什么?Sentinel安装 二、sentinel整合工程新建cloudalibaba-sentinel-service8401微服务引入依赖yml配置主启动类添加EnableDiscoveryClient业务类测试 三、sentinel流控规则基本介绍流控模式直接(默认)关…...

vi/vim 编辑器 --基本命令
1 vi/vim编辑器介绍 vi 是visual interface 的简称,是Linux中最经典的文本编辑器 vim是vi的加强版。兼容了vi的所有指令,不仅能编辑文本,而且具有shell程序编辑的功能,可以通过不同颜色的字体辨别语法的正确性,极大…...
C++——STL标准模板库——容器详解——set
一、基本概念 set容器是一种具备自动排序功能的集合,默认递增排序;元素无法直接修改,且不能重复;另一个版本叫做multiset,允许存在重复元素,其他功能和性质一样。 set容器底层结构一般为自平衡二叉搜索树…...

Vim一键配置指南,打造高效率C++开发环境
文章目录 前言安装与卸载功能演示gcc/g升级问题 前言 Vim作为当下最受欢迎的文本编译器之一,不仅具有强大的文本编辑功能,还提供了高度的可定制性。用户可以根据自己的喜好自定义配置,并且通过自己编写插件或者使用现有的插件来扩展Vim的功能…...

新航向,新生态: Michael在出海业务圆桌会议分享HyperBDR全球业务拓展之道
1月15日-16日,以“领航新开局,共赢新生态”为主题的华为云生态大会2024在华为云贵安数据中心云上屯盛大举行。本次会议聚焦于华为云全国生态伙伴与开发者,旨在共同见证华为云生态战略的最新进展和伙伴政策的新升级。与会者将分享来自优秀生态…...
SpringBoot异步处理
Spring boot异步处理 业务场景: 如执行数据库备份任务,前端发起请求到后端,后端备份数据库的处理逻辑需要很长一段时间,此时前端会一直等待后端返回结果,给用户给等待时间过长,这是就要考虑异步处理了&…...

2024年甘肃省职业院校技能大赛信息安全管理与评估 样题一 模块二
竞赛需要完成三个阶段的任务,分别完成三个模块,总分共计 1000分。三个模块内容和分值分别是: 1.第一阶段:模块一 网络平台搭建与设备安全防护(180 分钟,300 分)。 2.第二阶段:模块二…...

matplotlib绘制动态瀑布图
绘制瀑布图思路:遍历指定文件目录下所有的csv文件,每读一个文件,取文件前20行数据进行保存,如果超过规定的行数300行,将最旧的数据删除,仅保留300行数据进行展示。 网上找的大部分绘制瀑布图的代码&#x…...

【STM32】STM32学习笔记-USART串口收发HEX和文本数据包(29)
00. 目录 文章目录 00. 目录01. 串口简介02. 串口收发HEX数据包接线图03. 串口收发HEX数据包示例104. 串口收发HEX数据包示例205. 串口收发文本数据包接线图06. 串口收发文本数据包示例07. 程序示例下载08. 附录 01. 串口简介 串口通讯(Serial Communication)是一种设备间非常…...

uniapp列表实现方式 v-for
创建列表视图 v-for v-for“对象item in 数组” v-for“(对象item,下标) in 数组” v-for“(对象item,使用这个键取到的值,下标) in 数组” :key 绑定标识 一般建议使用对象中的id等值 类型 any <template><view><view clas…...

SqlAlchemy使用教程(三) CoreAPI访问与操作数据库详解
SqlAlchemy使用教程(一) 原理与环境搭建SqlAlchemy使用教程(二) 入门示例及编程步骤 三、使用Core API访问与操作数据库 Sqlalchemy 的Core部分集成了DB API, 事务管理,schema描述等功能,ORM构筑于其上。本章介绍创建 Engine对象,使用基本的…...

PDF有编辑密码怎么办
目录 注意: windows方法: 1 python 下载 2 打开命令行 3 安装 pikepdf 4 编写python脚本 5 使用py脚本 6解密完成 Linux方法: 注意: 此方法可以用于破解PDF的编辑密码,而不是PDF的打开密码 当遇到类似如下问…...

智慧公厕:打造智慧城市公共厕所信息化管理的新升级
在现代社会中,随着科学技术的不断进步与应用,智慧公厕作为公共服务设施,正迎来一次新的升级与革新。利用先进技术,智慧公厕实现了信息化升级,能够实时监测人员、环境和设备状况,提高使用效率、安全性、舒适…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

c#开发AI模型对话
AI模型 前面已经介绍了一般AI模型本地部署,直接调用现成的模型数据。这里主要讲述讲接口集成到我们自己的程序中使用方式。 微软提供了ML.NET来开发和使用AI模型,但是目前国内可能使用不多,至少实践例子很少看见。开发训练模型就不介绍了&am…...

QT: `long long` 类型转换为 `QString` 2025.6.5
在 Qt 中,将 long long 类型转换为 QString 可以通过以下两种常用方法实现: 方法 1:使用 QString::number() 直接调用 QString 的静态方法 number(),将数值转换为字符串: long long value 1234567890123456789LL; …...
根据万维钢·精英日课6的内容,使用AI(2025)可以参考以下方法:
根据万维钢精英日课6的内容,使用AI(2025)可以参考以下方法: 四个洞见 模型已经比人聪明:以ChatGPT o3为代表的AI非常强大,能运用高级理论解释道理、引用最新学术论文,生成对顶尖科学家都有用的…...
CMake控制VS2022项目文件分组
我们可以通过 CMake 控制源文件的组织结构,使它们在 VS 解决方案资源管理器中以“组”(Filter)的形式进行分类展示。 🎯 目标 通过 CMake 脚本将 .cpp、.h 等源文件分组显示在 Visual Studio 2022 的解决方案资源管理器中。 ✅ 支持的方法汇总(共4种) 方法描述是否推荐…...

基于SpringBoot在线拍卖系统的设计和实现
摘 要 随着社会的发展,社会的各行各业都在利用信息化时代的优势。计算机的优势和普及使得各种信息系统的开发成为必需。 在线拍卖系统,主要的模块包括管理员;首页、个人中心、用户管理、商品类型管理、拍卖商品管理、历史竞拍管理、竞拍订单…...
安卓基础(Java 和 Gradle 版本)
1. 设置项目的 JDK 版本 方法1:通过 Project Structure File → Project Structure... (或按 CtrlAltShiftS) 左侧选择 SDK Location 在 Gradle Settings 部分,设置 Gradle JDK 方法2:通过 Settings File → Settings... (或 CtrlAltS)…...

使用SSE解决获取状态不一致问题
使用SSE解决获取状态不一致问题 1. 问题描述2. SSE介绍2.1 SSE 的工作原理2.2 SSE 的事件格式规范2.3 SSE与其他技术对比2.4 SSE 的优缺点 3. 实战代码 1. 问题描述 目前做的一个功能是上传多个文件,这个上传文件是整体功能的一部分,文件在上传的过程中…...

算法打卡第18天
从中序与后序遍历序列构造二叉树 (力扣106题) 给定两个整数数组 inorder 和 postorder ,其中 inorder 是二叉树的中序遍历, postorder 是同一棵树的后序遍历,请你构造并返回这颗 二叉树 。 示例 1: 输入:inorder [9,3,15,20,7…...

CTF show 数学不及格
拿到题目先查一下壳,看一下信息 发现是一个ELF文件,64位的 用IDA Pro 64 打开这个文件 然后点击F5进行伪代码转换 可以看到有五个if判断,第一个argc ! 5这个判断并没有起太大作用,主要是下面四个if判断 根据题目…...