Springboot 整合 Java DL4J 构建股票预测系统
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c=1000,移动端可微信小程序搜索“历代文学”)总架构师,
15年
工作经验,精通Java编程
,高并发设计
,Springboot和微服务
,熟悉Linux
,ESXI虚拟化
以及云原生Docker和K8s
,热衷于探索科技的边界,并将理论知识转化为实际应用。保持对新技术的好奇心,乐于分享所学,希望通过我的实践经历和见解,启发他人的创新思维。在这里,我希望能与志同道合的朋友交流探讨,共同进步,一起在技术的世界里不断学习成长。
Spring Boot 与 Java Deeplearning4j 构建股票预测系统
引言
在金融投资领域,股票价格走势的预测一直是投资者和金融分析师们关注的焦点。准确地预测股票价格变化趋势,能够为投资者提供极具价值的决策参考,帮助他们在风云变幻的股票市场中获取更高的收益,同时降低风险。随着科技的不断发展,数据驱动的方法在金融预测中占据了重要地位。
传统的股票分析方法往往基于基本面分析和技术分析。基本面分析侧重于研究公司的财务状况、行业前景等因素;技术分析则是通过分析股票价格和成交量的历史数据来预测未来走势。然而,这些方法在处理复杂的市场动态和海量数据时,存在一定的局限性。
近年来,深度学习技术的兴起为股票预测带来了新的思路。通过利用大量的历史股票数据和市场信息,深度学习模型可以挖掘出隐藏在数据中的模式和规律,从而对未来股票价格的变化趋势做出预测。
本文将使用 Spring Boot
整合 Java Deeplearning4j
构建一个股票预测系统。会详细介绍整个系统的构建过程,包括数据集的准备、神经网络模型的选择与设计、模型的训练、评估和测试,以及如何在 Spring Boot 环境中部署和使用这个模型。希望通过这个案例,为开发人员和金融爱好者提供一个实用的参考,开启利用深度学习进行金融预测的新征程。
一、技术选型
(一)Spring Boot
Spring Boot 是一个用于创建基于 Spring 框架的独立、生产级应用程序的开源框架。它简化了 Spring 应用程序的初始搭建和开发过程,提供了自动配置、起步依赖等功能,使得开发者可以更加专注于业务逻辑的实现。在我们的股票预测系统中,Spring Boot 用于构建整个后端服务,包括数据的读取、模型的调用以及与前端的交互等。
(二)Deeplearning4j
Deeplearning4j(DL4J)
是一个为 Java 和 Scala
编写的开源深度学习库。它支持多种深度学习架构,如多层感知机(MLP)、卷积神经网络(CNN)、循环神经网络(RNN) 等,并提供了高效的计算和训练机制。在股票预测系统中,我们将使用 DL4J 中的长短期记忆网络(LSTM) 来构建和训练预测模型。
(三)神经网络选择:长短期记忆网络(LSTM)
在股票预测中,我们选择长短期记忆网络(LSTM) 作为主要的神经网络架构。原因如下:
-
处理时间序列数据的优势
股票价格数据是典型的时间序列数据,具有时序依赖性。LSTM
是一种特殊的循环神经网络(RNN)
,它能够有效地处理长序列数据中的长期依赖关系。与传统的RNN
相比,LSTM
通过引入门控机制,可以更好地解决梯度消失和梯度爆炸问题,从而更准确地捕捉股票价格在不同时间点之间的复杂关系。 -
对非线性关系的建模能力
股票市场是一个高度复杂的非线性系统,价格受到多种因素的影响,如宏观经济数据、公司财务报表
、市场情绪
等。LSTM
具有强大的非线性建模能力,可以通过学习数据中的非线性模式来预测股票价格的变化趋势。
二、数据集准备
(一)数据集来源
我们的数据集主要来源于金融数据提供商或在线金融平台提供的历史股票数据。这些数据包括股票的开盘价、收盘价、最高价、最低价、成交量等信息,以及可能影响股票价格的一些宏观经济指标,如利率、通货膨胀率等。
(二)数据集格式
数据集的格式通常为 CSV(逗号分隔值)文件或数据库表形式。以下是一个简化的 CSV 格式数据集样例:
日期 | 开盘价 | 收盘价 | 最高价 | 最低价 | 成交量 | 宏观经济指标 1 | 宏观经济指标 2 | … |
---|---|---|---|---|---|---|---|---|
2020 - 01 - 01 | 100.0 | 102.0 | 105.0 | 98.0 | 100000 | 2.5 | 1.2 | … |
2020 - 01 - 02 | 102.0 | 103.0 | 106.0 | 100.0 | 120000 | 2.6 | 1.3 | … |
… | … | … | … | … | … | … | … | … |
在实际应用中,数据集可能包含更多的股票信息和宏观经济指标,并且数据量会非常大。
三、项目搭建与依赖配置
(一)创建 Spring Boot 项目
使用 Spring Initializr(https://start.spring.io/)创建一个新的 Spring Boot 项目。在创建过程中,选择必要的依赖,如 Web 依赖等。
(二)添加 Deeplearning4j 依赖
在项目的 pom.xml
文件中添加以下 Deeplearning4j 相关依赖:
<dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j-core</artifactId><version>1.0.0 - SNAPSHOT</version>
</dependency>
<dependency><groupId>org.deeplearning4j</groupId><artifactId>deeplearning4j - nd4j - backend - cpu</artifactId><version>1.0.0 - SNAPSHOT</version>
</dependency>
<dependency><groupId>org.nd4j</groupId><artifactId>nd4j - native - platform</artifactId><version>1.0.0 - SNAPSHOT</version>
</dependency>
这些依赖将确保我们的项目能够使用 Deeplearning4j 库进行深度学习模型的构建和训练。
四、模型构建
(一)数据加载与预处理
首先,我们需要编写代码来加载数据集并进行预处理。以下是一个简单的示例代码,用于从 CSV 文件中读取股票数据并将其转换为适合模型训练的格式:
import org.datavec.api.records.reader.impl.csv.CSVRecordReader;
import org.datavec.api.split.FileSplit;
import org.deeplearning4j.datasets.datavec.RecordReaderDataSetIterator;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import java.io.File;public class DataLoader {public static DataSetIterator loadData(String csvFilePath, int batchSize, int labelIndex) throws Exception {CSVRecordReader recordReader = new CSVRecordReader();recordReader.initialize(new FileSplit(new File(csvFilePath)));return new RecordReaderDataSetIterator(recordReader, batchSize, labelIndex, labelIndex);}
}
在上述代码中,我们使用 CSVRecordReader
从 CSV 文件中读取数据,并通过 RecordReaderDataSetIterator
将其转换为 DataSetIterator
。batchSize
参数指定了每次训练的批量大小,labelIndex
参数指定了数据集中标签所在的列索引(在股票预测中,标签可以是未来某个时间点的股票价格)。
(二)构建 LSTM 模型
以下是构建 LSTM 模型的代码示例:
import org.deeplearning4j.nn.api.OptimizationAlgorithm;
import org.deeplearning4j.nn.conf.MultiLayerConfiguration;
import org.deeplearning4j.nn.conf.NeuralNetConfiguration;
import org.deeplearning4j.nn.conf.layers.LSTM;
import org.deeplearning4j.nn.conf.layers.RnnOutputLayer;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.activations.Activation;
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import org.nd4j.linalg.lossfunctions.LossFunctions;public class StockPredictionModel {public static MultiLayerNetwork buildModel(int inputSize, int hiddenSize, int outputSize) {NeuralNetConfiguration.Builder builder = new NeuralNetConfiguration.Builder().seed(123).optimizationAlgo(OptimizationAlgorithm.STOCHASTIC_GRADIENT_DESCENT).updater(new org.deeplearning4j.nn.conf.Updater.Nesterovs(0.01, 0.9)).l2(1e - 4).list().layer(0, new LSTM.Builder().nIn(inputSize).nOut(hiddenSize).activation(Activation.TANH).build()).layer(1, new RnnOutputLayer.Builder(LossFunctions.LossFunction.MSE).activation(Activation.IDENTITY).nIn(hiddenSize).nOut(outputSize).build()).build();MultiLayerConfiguration configuration = builder.build();return new MultiLayerNetwork(configuration);}
}
在这段代码中,我们使用 NeuralNetConfiguration.Builder
来构建神经网络的配置。首先,我们设置了一些基本参数,如随机种子、优化算法(这里使用随机梯度下降的 Nesterov 加速版本)和 L2 正则化参数。然后,我们添加了两个层:一个是 LSTM 层,指定了输入大小、隐藏单元数量和激活函数;另一个是输出层,使用均方误差(MSE)作为损失函数,输出大小与我们要预测的目标值数量相同(例如预测未来一天的股票价格,则输出大小为 1)。
五、模型训练
(一)训练过程
以下是模型训练的代码示例:
import org.deeplearning4j.eval.Evaluation;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import java.util.ArrayList;
import java.util.List;public class ModelTraining {public static void trainModel(MultiLayerNetwork model, DataSetIterator dataIterator, int epochs) {for (int i = 0; i < epochs; i++) {model.fit(dataIterator);if ((i + 1) % 10 == 0) { // 每 10 个 epoch 进行一次评估Evaluation evaluation = new Evaluation();List<DataSet> testData = new ArrayList<>();dataIterator.reset();while (dataIterator.hasNext()) {testData.add(dataIterator.next());}for (DataSet dataSet : testData) {INDArray output = model.output(dataSet.getFeatureMatrix());evaluation.eval(dataSet.getLabels(), output);}System.out.println("Epoch " + (i + 1) + " - Loss: " + evaluation.loss());}}}
}
在训练过程中,我们通过多次迭代数据集来更新模型的参数。在每 10
个 epoch(训练轮次)后,我们使用测试数据集对模型进行评估,计算损失值(这里使用均方误差作为损失度量),并打印出来,以便观察模型的训练进度。
六、模型评估
(一)评估指标
在模型评估阶段,我们除了使用均方误差(MSE)来衡量模型预测值与真实值之间的平均差异外,还可以使用其他评估指标,如平均绝对误差(MAE)、均方根误差(RMSE)等。以下是计算这些评估指标的代码示例:
import org.nd4j.linalg.api.ndarray.INDArray;
import org.nd4j.linalg.factory.Nd4j;
import java.util.Arrays;public class ModelEvaluation {public static double calculateMSE(INDArray predictions, INDArray actuals) {INDArray diff = predictions.sub(actuals);return Nd4j.mean(diff.mul(diff)).getDouble(0);}public static double calculateMAE(INDArray predictions, INDArray actuals) {INDArray diff = predictions.sub(actuals);return Nd4j.mean(diff.abs()).getDouble(0);}public static double calculateRMSE(INDArray predictions, INDArray actuals) {return Math.sqrt(calculateMSE(predictions, actuals));}
}
这些评估指标可以帮助我们更全面地了解模型的性能。MSE 对较大误差的惩罚更重,MAE 则更直观地反映了预测误差的平均大小,RMSE 与 MSE 类似,但单位与数据的原始单位相同,更便于理解。
七、模型测试
(一)测试代码
以下是一个简单的模型测试代码示例:
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.dataset.DataSet;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import java.util.ArrayList;
import java.util.List;public class ModelTesting {public static void testModel(MultiLayerNetwork model, DataSetIterator dataIterator) {List<DataSet> testData = new ArrayList<>();dataIterator.reset();while (dataIterator.hasNext()) {testData.add(dataIterator.next());}for (DataSet dataSet : testData) {INDArray predictions = model.output(dataSet.getFeatureMatrix());System.out.println("Predictions: " + Arrays.toString(predictions.data().asDouble()));System.out.println("Actuals: " + Arrays.toString(dataSet.getLabels().data().asDouble()));}}
}
在测试过程中,我们使用测试数据集对训练好的模型进行预测,并输出预测结果和真实结果,以便对比和分析模型的预测准确性。
八、单元测试与预期输出
(一)单元测试示例
以下是一个简单的单元测试示例,用于测试数据加载和模型预测功能:
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
import org.deeplearning4j.nn.multilayer.MultiLayerNetwork;
import org.nd4j.linalg.dataset.api.iterator.DataSetIterator;
import java.io.IOException;public class StockPredictionSystemTest {@Testpublic void testDataLoading() throws IOException {DataSetIterator dataIterator = DataLoader.loadData("path/to/csv/file.csv", 32, 5);assertNotNull(dataIterator);}@Testpublic void testModelPrediction() throws IOException {DataSetIterator dataIterator = DataLoader.loadData("path/to/csv/file.csv", 32, 5);MultiLayerNetwork model = StockPredictionModel.buildModel(10, 20, 1);model.init();ModelTraining.trainModel(model, dataIterator, 50);ModelTesting.testModel(model, dataIterator);// 这里可以添加更多的断言来检查预测结果的合理性,例如预测值的范围等}
}
在这个单元测试中,我们首先测试数据加载功能,确保能够正确地从 CSV 文件中加载数据并转换为 DataSetIterator
。然后,我们测试模型预测功能,通过构建一个简单的模型,进行训练,并在测试数据集上进行预测。虽然这里的预期输出比较宽泛(因为预测结果会根据数据集的不同而变化),但我们可以通过添加更多的断言来检查预测结果的合理性,例如预测值是否在合理的价格范围内等。
九、参考资料文献
- [Spring Boot 官方文档](https://spring.io/projects/spring - boot)
- Deeplearning4j 官方文档
- 相关的金融数据分析和深度学习在金融领域应用的学术论文。
相关文章:
Springboot 整合 Java DL4J 构建股票预测系统
🧑 博主简介:CSDN博客专家,历代文学网(PC端可以访问:https://literature.sinhy.com/#/literature?__c1000,移动端可微信小程序搜索“历代文学”)总架构师,15年工作经验,…...
ATmaga8单片机Pt100温度计源程序+Proteus仿真设计
目录 1、项目功能 2、仿真图 3、程序 资料下载地址:ATmaga8单片机Pt100温度计源程序Proteus仿真设计 1、项目功能 设计Pt100铂电阻测量温度的电路,温度测量范围是0-100摄氏度,要求LCD显示。画出电路图,标注元器件参数&am…...
FPGA通过MIPI CSI-2发送实时图像到RK3588,并HDMI显示
介绍FPGA通过MIPI CSI-2发送实时图像到RK3588,并HDMI显示。 FPGA本地产生动态图像模板,通过MIPI CSI-2接口发送到RK3588 MIPI CSI接口。RK3588注册成相机后,调用接口并在HDMI显示器上显示。 1、RK3588驱动调试 查看Media controller信息 Med…...
ELK8.15.4搭建开启安全认证
安装 Elastic :Elasticsearch,Kibana,Logstash 另外安装一个收集器filebeat 通过二进制安装包进行安装 创建一个专门放elk目录 mkdir /elk/ mkdir /elk/soft下载 es 、kibana、Logstash、filebeat二进制包 cd /elk/softwget https://art…...
原生微信小程序中封装一个模拟select 下拉框组件
1.首先在components 里面设置组件名称:van-select(随便取名字); 2.新建文件写代码: wxml: <view class"w100 select_all_view"><!-- 标题,可以没有 --><view class…...
商品管理系统引领时尚零售智能化升级 降价商品量锐减30%
根据贝恩咨询公司2024年发布的消费品报告,当前消费品行业正面临增长放缓、全球市场波动及消费者期望变化的巨大压力。为保持市场竞争力,企业需要重新审视其增长战略,重视可持续创新、数字化转型和运营敏捷性。企业必须灵活应对供应链中断和消…...
UE5 5.1.1创建C++项目,显示error C4668和error C4067
因为工作要求,没法使用最新 5.5版本的ue5 而是要用ue5.1和5.2版本。 但是我在安装下载了visual studio2022后,使用 ue5.1编辑器 创建C项目,爆出如下错误。 error C4668: ?????__has_feature?????ΪԤ?????꣬???0????…...
spring boot 集成 redis 实现缓存的完整的例子
Cacheable 注解是 Spring Cache 抽象的一部分,用于声明式地管理缓存。Cacheable 注解本身并不直接指定缓存的存储位置,而是依赖于配置的缓存管理器(CacheManager)来决定缓存数据的存储位置。 常见的缓存存储方式: 1、内存缓存&a…...
json-bigint处理前端精度丢失问题
问题描述:前后端调试过程中,有时候会遇到精度丢失的问题,比如后端给过来的id超过16位,就会出现精度丢失的情况,前端拿到的id与后端给过来的不一致。 解决方案: 1、安装 npm i json-bigint 2、在axios中配置…...
【算法】【优选算法】前缀和(下)
目录 一、560.和为K的⼦数组1.1 前缀和1.2 暴力枚举 二、974.和可被K整除的⼦数组2.1 前缀和2.2 暴力枚举 三、525.连续数组3.1 前缀和3.2 暴力枚举 四、1314.矩阵区域和4.1 前缀和4.2 暴力枚举 一、560.和为K的⼦数组 题目链接:560.和为K的⼦数组 题目描述&#x…...
Node.js 23 发布了!
Node.js 23 现已推出,带来了新功能、性能改进和更好的开发者体验。此次版本提升了兼容性和稳定性,提供了更多工具来构建高效的应用程序。 此外,Node.js 22 将在 10 月 29 日当周被提升为长期支持 (LTS) 版本,进入长期维护阶段&am…...
如何通过低代码逻辑编排实现业务流程自动化?
随着数字化转型的加速,企业对高效、灵活的业务流程自动化需求日益增加。传统开发模式下的定制化解决方案往往周期长、成本高且难以适应快速变化的需求。低代码平台以其直观、简便的操作界面和强大的功能逐渐成为企业实现业务流程自动化的理想选择。本文将探讨低代码…...
thinkphp6模板调用URL方法生成的链接异常
var uul params.url ;console.log(params.url);console.log("{:Url(UserLog/index)}");console.log("{:Url("uul")}"); 生成的链接地址 UserLog/index /jjg/index.php/Home/UserLog/index.html /jjg/index.php/Home/Index/UserLog/index.html…...
Spring Boot汽车资讯:科技驱动的未来
4系统概要设计 4.1概述 本系统采用B/S结构(Browser/Server,浏览器/服务器结构)和基于Web服务两种模式,是一个适用于Internet环境下的模型结构。只要用户能连上Internet,便可以在任何时间、任何地点使用。系统工作原理图如图4-1所示: 4系统概要设计 4.1概…...
嵌入式硬件电子电路设计(五)LDO低压差线性稳压器全面详解
引言: LDO(Low Dropout Regulator,低压差线性稳压器)是一种常用的电源管理组件,用于提供稳定的输出电压,同时允许较小的输入电压与输出电压之间的差值。LDO广泛应用于各种电子设备中,特别是在对…...
qiankun主应用(vue2+element-ui)子应用(vue3+element-plus)不同版本element框架css样式相互影响的问题
背景:qiankun微前端架构实现多应用集成 主应用框架:vue2 & element-ui 子应用框架:vue3 & element-plus >> 问题现象和分析 登录页面是主应用的,在登录之后才能打开子应用的菜单页面,即加载子应用。 首…...
resnet50,clip,Faiss+Flask简易图文搜索服务
一、实现 文件夹目录结构: templates -----upload.html faiss_app.py 前端代码: <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"viewport" content"widt…...
使用OkHttp进行HTTPS请求的Kotlin实现
OkHttp简介 OkHttp是一个高效的HTTP客户端,它支持同步和异步请求,自动处理重试和失败,支持HTTPS,并且可以轻松地与Kotlin协程集成。OkHttp的设计目标是提供最简洁的API,同时保持高性能和低延迟。 为什么选择OkHttp …...
使用Mac下载MySQL修改密码
Mac下载MySQL MySQL官网链接MySQL 当进入到官网后下滑到community社区,进行下载 然后选择community sever下载 这里就是要下载的界面,如果需要下载之前版本的话可以点击archives, 可能会因为这是外网原因,有时候下…...
运维面试题.云计算面试题集锦第一套
运维+网络安全学科基础升就业 测试题(总分100分) 一,单词翻译(10分,直接写在答题卡上) 二,单选题(每题2分,共30题): 1.如下哪个属于管道符?( ) A、|| B、<< C、// D、| 2.有一备份程序mybackup,需要在周一至周五下午1点和晚上8点各运行一次,下面哪条cront…...
CSS-flex布局
flex常用语法 display: flex 父级元素相关 flex-direction 主轴方向【水平方向(默认)、垂直方向】justify-content 主轴上的对齐方式【flex-end结束对齐、space-between两端对齐、center】align-items 交叉轴的对齐方式【center、flex-end】flex-wrap…...
Linux:进程的优先级 进程切换
文章目录 前言一、进程优先级1.1 基本概念1.2 查看系统进程1.3 PRI和NI1.4 调整优先级1.4.1 top命令1.4.2 nice命令1.4.3 renice命令 二、进程切换2.1 补充概念2.2 进程的运行和切换步骤(重要) 二、Linux2.6内核进程O(1)调度队列(重要&#x…...
web应用安全和信息泄露
使用springboot开发的应用可能存在各种使用不当导致的信息泄露和漏洞,在此记录 1:spring actuator导致的信息泄露 使用spring actuator你可以选择通过使用HTTP端点或使用JMX来管理和监控你的应用程序。 审计、健康和指标收集也可以自动应用于你的应用程…...
创建vue3项目步骤
脚手架创建项目: pnpm create vue Cd 项目名称安装依赖:Pnpm iPnpm Lint:修复所有文件风格 ,不然eslint语法警告报错要双引号Pnpm dev启动项目 拦截错误代码提交到git仓库:提交前做代码检查 pnpm dlx husky-in…...
尽量通俗易懂地概述.Net U nity跨语言/跨平台相关知识
本文参考来自唐老狮,Unity3D高级编程:主程手记,ai等途径 仅作学习笔记交流分享 目录 1. .Net是什么? 2. .Net框架的核心要点? 跨语言和跨平台 .Net x Unity跨平台发展史 Net Framework 2002 Unity跨平台之 Mono 2004 Unity跨平台之 IL2CPP 2015 二者区别 .NET Core …...
【AlphaFold3】开源本地的安装及使用
文章目录 安装安装DockerInstalling Docker on Host启用Rootless Docker 安装 GPU 支持安装 NVIDIA 驱动程序安装 NVIDIA 对 Docker 的支持 获取 AlphaFold 3 源代码获取基因数据库获取模型参数构建将运行 AlphaFold 3 的 Docker 容器 参考 AlphaFold3: https://github.com/goo…...
vue2/vue3中使用的富文本编辑器vue-quill
前言: 整理下常用的富文本编辑器工具。 vue3: 实现效果: 实现步骤: 1、安装插件, 编辑器核心插件 vueup/vue-quill yarn add pnpm i npm i cnpm i vueup/vue-quill vueup/vue-quill 2、安装选择性插件 &a…...
论文阅读《BEVFormer v2》
BEVFormer v2: Adapting Modern Image Backbones to Bird’s-Eye-View Recognition via Perspective Supervision 目录 摘要1 介绍2 相关工作2.1 BEV三维目标检测器 摘要 我们提出了一种具有透视监督的新型鸟瞰图(BEV)检测器,其收敛速度更快…...
自动化运维(k8s):一键获取指定命名空间镜像包脚本
前言:脚本写成并非一蹴而就,需要不断的调式和修改,这里也是改到了7版本才在 生产环境 中验证成功。 该命令 和 脚本适用于以下场景:在某些项目中,由于特定的安全或政策要求,不允许连接到你的镜像仓库。然而…...
HarmonyOS ArkUI(基于ArkTS) 开发布局 (上)
一 ArkUI(基于ArkTS)概述 基于ArkTS的声明式开发范式的方舟开发框架是一套开发极简、高性能、支持跨设备的UI开发框架,提供了构建应用UI所必需的能力 点击详情 特点 开发效率高,开发体验好 代码简洁:通过接近自然语义的方式描述UI&#x…...
确定网站推广目标/优化大师有用吗
这个不是造轮子,只是整理轮子,我在搜索引擎里,遇到的思路都是第一种思路(至少按照标题那个关键词搜索是这样的)所以我想发出来。一是如果遇到大神帮忙发现了方案一的问题与弊病,那就更好啦。二是让大家不会像我一样,只…...
想要一个网站/微营销平台
【奥鹏】-[中国石油大学(华东)]2019年秋季学期《程序设计(C语言)》在线考试(适用于2019年12月份考试)试卷总分:100 得分:100第1题,C语言中,运算对象必须是整型数的运算符是A、%B、\C、% 和 \D、**正确答案:A第2题,有如下定义:long m;char c&a…...
学怎么做建筑标书哪个网站/网络营销策划总结
Tomcat 简介Tomcat是Apache软件基金会的Jakarta项目中开发的一个Servlet容器,实现了对Servlet和JavaServerPage(JSP)的支持,Tomcat本身也是一个HTTP服务器,Tomcat主要用来解析JSP语言,html格式的网页页面。Tomcat安装JDK下载JDK下载地址:http…...
网页设计程序代码/seo推广学院
题意 给一个序列,支持两个操作:将一段区间中的每一个\(a_i\)赋值为\(c^{a_i}\),\(c\) 给定;区间求和,对\(mod\)取模,不保证\(mod\)为质数 思路 显然线段树,然而此题先要单点修改 计算中指数会非…...
都兰县公司网站建设/橙子建站怎么收费
因为之前对于sort中传递的函数不太理解,近期又重新看到了一个关于sort的视频,特此记录一次。首先说明一下,此方式只在火狐里面有效,在谷歌里面无效,出现这种原因,我也不知道为什么。 arr [5, 4];arr.sort(…...
adobe做网站/自己做网站需要什么条件
晋-陶渊明《五柳先生传》:[好读书,不求甚解],原指读书只求领会主旨,不死抠字眼。现多指满足于了解个大概,不作深入理解。 不求甚解,好吗? 在上一篇文章讲解java虚拟机栈的时候,我有…...