SpringBoot+Vue 简单小文章项目开发全过程
文章目录
- 一、项目介绍
- 二、需求设计
- 三、数据库设计
- 四、项目构建
- 项目技术选型:
- 构建项目说明:
- 项目架构
- maven
- MySQL
- Redis
- 五、项目开发:
- 项目开发思路:
- 项目开发过程:
- 1. 导入文件包/新建项目
- 2. 新建子模块:
- common模块
- pojo模块
- server模块
- 3. 明确需求,开始开发
- 4. server模块配置,让项目跑起来:
- 5. 项目开发开始
- 6. SpringBoot操作数据库配置
- 7. 开发功能
- 8. 增删改查功能开发
- 9. 登录注册功能开发
- 10. AOP权限校验
- 11.前端相关
- vue.config.js
- main.js
- 页面向后端发送请求:
- 六、总结
一、项目介绍
这是个简单的项目,大概功能就是一个简单的记事本吧,发布文章,查看文章,登录注册。
项目仓库链接:仓库
接下来的文章最好是参考仓库里的代码来读,不要跟着文章敲。文章里面不会手把手带你敲的。
二、需求设计
就是登录注册,文章增删改查吧。
三、数据库设计
很简单得设计了一下,就三张表。一张用户表,一张分类表,一张文章表。
用户表:
id,username,password,name,email,role
分类表:
id,name
文章表:
id,title,content,category_id,user_id
四、项目构建
项目技术选型:
我们这个项目太简单了,就用用SpringBoot来构建项目。
构建项目说明:
项目架构
我们的项目主要就是3个模块,
common公用模块,公用的东西都在里面。(common模块的东西是照抄苍穹外卖的)
pojo数据模块,很多数据相关的东西就在这里面,比如说数据实体类什么的。
server服务模块,这个模块就是负责提供各种服务了。
maven
maven是一款为Java项目提供构建和依赖管理支持的工具。
我们的项目会有很多依赖,这些依赖就得依靠maven了。
而依赖的东西添加的话就可以在pom.xml文件里面加。
MySQL
关系型数据库。所谓的数据持久化,就是将数据存起来,一般就是将数据存在本地。我们前面的数据库设计就是针对的MySQL数据库的设计。
Redis
非关系型数据库。KV存储结构。
五、项目开发:
项目开发思路:
一个字,抄。
要自己写项目,首先你的要去B站找个项目,先抄着,学里面的思路,跟着敲里面的代码,慢慢理解里面代码的功能,不然你想在0基础的情况下从0开始自己写个?做梦!
我前面的那个SpringBoot开发记录就是个例子。我就打算自己写,但是自己不是那么了解流程,不知道自己该做什么,导致我频频出错,项目开发进度贼迟缓,最后这个项目就逐渐搁浅了。是个败笔!
这个项目的开发是我在完成80%苍穹外卖后开始进行的。整个项目的基础文件也是拿的苍穹外卖的。
项目开发过程:
1. 导入文件包/新建项目
其实这一步很简单的,我们只需要新建一个目录(文件夹),然后用IDEA打开这个目录,再在里面复制粘贴我们的总pom.xml文件就行了。当然你也可以新建一个项目,再打开项目中的pom.xml文件,将我们的pom.xml文件的内容复制粘贴上
其实我们的这些pom.xml文件也都是苍穹外卖的,你要是照着敲过一次项目,那么你就会对这个流程有一个深刻的了解。
总pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><artifactId>spring-boot-starter-parent</artifactId><groupId>org.springframework.boot</groupId><version>2.7.3</version></parent><artifactId>CodeHome</artifactId><groupId>com.codehome</groupId><version>1.0-SNAPSHOT</version><packaging>pom</packaging><properties><mybatis.spring>2.2.0</mybatis.spring><druid>1.2.1</druid><pagehelper>1.3.0</pagehelper><lombok>1.18.20</lombok><fastjson>1.2.76</fastjson><commons.lang>2.6</commons.lang><aliyun.sdk.oss>3.10.2</aliyun.sdk.oss><knife4j>3.0.2</knife4j><aspectj>1.9.4</aspectj><jjwt>0.9.1</jjwt><jaxb-api>2.3.1</jaxb-api><poi>3.16</poi><spring-boot-starter-mail>2.7.3</spring-boot-starter-mail></properties><dependencyManagement><dependencies><!-- mybatis依赖 --><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId><version>${mybatis.spring}</version></dependency><!-- lombok依赖 --><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok}</version></dependency><!-- fastjson依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson}</version></dependency><!-- commons-lang依赖 --><dependency><groupId>commons-lang</groupId><artifactId>commons-lang</artifactId><version>${commons.lang}</version></dependency><!-- druid依赖 --><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid}</version></dependency><!-- pagehelper依赖 --><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId><version>${pagehelper}</version></dependency><!-- knife4j依赖 --><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j}</version></dependency><!-- aspectj依赖 --><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId><version>${aspectj}</version></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId><version>${aspectj}</version></dependency><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jjwt}</version></dependency><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version></dependency><dependency><groupId>javax.xml.bind</groupId><artifactId>jaxb-api</artifactId><version>${jaxb-api}</version></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>${poi}</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>${poi}</version></dependency><!--微信支付--><dependency><groupId>com.github.wechatpay-apiv3</groupId><artifactId>wechatpay-apache-httpclient</artifactId><version>0.4.8</version></dependency><!--邮箱服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId><version>${spring-boot-starter-mail}</version></dependency></dependencies></dependencyManagement></project>
2. 新建子模块:
common模块
这个模块的文件我就是照搬苍穹外卖的了。这个一个公共模块,里面的东西都还是很通用的。
pojo模块
这个模块的作用就是放项目涉及到的一些实体类。按规范来的话分为dto(查询实体类,前端传过来的数据类),entity(实体类,对应数据库里的表的实体类),vo(返回实体类,返回给前端的数据类)。按照实际情况设置。
server模块
这个就是我们的功能模块了。后端的功能就在这个模块里使用。
3. 明确需求,开始开发
按照我们前面的需求设计和数据库来整。
先看数据库:
看到数据库是这样的了,我们就可以开始写pojo模块的entity部分:
entity的类要和表里的字段对应
Category类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Category {private Integer id;private String name;
}
Paper类:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Paper {private Integer id;private String title;private String content;private Integer categoryId;private Long userId;
}
Users:
@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Users implements Serializable {private Long id;private String username;private String password;private String name;private String email;private Integer role;
}
好了entity实体类就好了。
4. server模块配置,让项目跑起来:
进行配置:
- pom.xml文件:
老规矩了。
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"><modelVersion>4.0.0</modelVersion><parent><groupId>com.codehome</groupId><artifactId>CodeHome</artifactId><version>1.0-SNAPSHOT</version></parent><groupId>com.codehome.server</groupId><artifactId>server</artifactId><properties><maven.compiler.source>17</maven.compiler.source><maven.compiler.target>17</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding></properties><dependencies><!--springboot 启动依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-test</artifactId><scope>test</scope></dependency><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId><scope>compile</scope></dependency><!-- mysql和mybatis相关依赖 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><scope>runtime</scope></dependency><dependency><groupId>org.mybatis.spring.boot</groupId><artifactId>mybatis-spring-boot-starter</artifactId></dependency><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId></dependency><!--redis相关依赖--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-data-redis</artifactId></dependency><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><optional>true</optional></dependency><!--分页查询依赖--><dependency><groupId>com.github.pagehelper</groupId><artifactId>pagehelper-spring-boot-starter</artifactId></dependency><!--lombok相关依赖--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId></dependency><!--swagger相关依赖--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjrt</artifactId></dependency><dependency><groupId>org.aspectj</groupId><artifactId>aspectjweaver</artifactId></dependency><!-- poi --><dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId></dependency><!--邮箱服务--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-mail</artifactId></dependency><dependency><groupId>com.codehome.common</groupId><artifactId>common</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency><dependency><groupId>com.codehome.pojo</groupId><artifactId>pojo</artifactId><version>1.0-SNAPSHOT</version><scope>compile</scope></dependency></dependencies><packaging>jar</packaging><build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><!--这里写上main方法所在类的路径--><configuration><mainClass>com.codehome.server.CodeHomeApplication</mainClass></configuration><executions><execution><goals><goal>repackage</goal></goals></execution></executions></plugin></plugins></build></project>
- yml文件配置
yml文件
# 配置项目的端口
server:port: 8083
启动类:
@SpringBootApplication
@Slf4j
@ComponentScan(basePackages = {"com.codehome.server","com.codehome.common","com.codehome.pojo"})
public class CodeHomeApplication {public static void main(String[] args) {SpringApplication.run(CodeHomeApplication.class, args);log.info("代码芝士,启动!");}
}
配置类:
/*** 配置类,注册web层相关组件*/
@Configuration
@Slf4j
public class WebMvcConfiguration extends WebMvcConfigurationSupport {/*** 通过knife4j生成接口文档* @return*/@Beanpublic Docket docket() {ApiInfo apiInfo = new ApiInfoBuilder().title("代码芝士后端接口文档").version("1.0").description("代码芝士后端接口文档").build();Docket docket = new Docket(DocumentationType.SWAGGER_2).apiInfo(apiInfo).select().apis(RequestHandlerSelectors.basePackage("com.codehome.server.controller")).paths(PathSelectors.any()).build();return docket;}/*** 设置静态资源映射* @param registry*/protected void addResourceHandlers(ResourceHandlerRegistry registry) {registry.addResourceHandler("/doc.html").addResourceLocations("classpath:/META-INF/resources/");registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");}/*** 消息转换器*/protected void extendMessageConverters(List<HttpMessageConverter<?>> converters){log.info("开始扩展消息转换器");MappingJackson2HttpMessageConverter converter = new MappingJackson2HttpMessageConverter();converter.setObjectMapper(new JacksonObjectMapper());converters.add(0,converter);}
}
这样基础就实现了。项目应该就可以跑起来了。
5. 项目开发开始
开发server模块。
这里就要讲一讲controller层,service层,mapper层。
controller
层:
controller层里放Controller类,通俗的来讲,Controller类的作用就是接收前端请求数据和返回信息的。
如这样:
我们在前端就可以通过向http://localhost:8083/api/paper/add
发送带参数的Post请求来实现添加文章功能。
service
层:
这个层主要负责的就是业务功能的实现了。写接口,实现接口。
mapper
层:
这个层负责操作数据库里的内容。
6. SpringBoot操作数据库配置
Spring操作数据库一般可以通过MyBatis,MyBatisPlus来。
这里我们就需要进行一些配置了。
1.在pom.xml文件里配置。前面复制粘贴已经整好了。
2.在yml文件里配置:
spring:datasource:druid:driver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://127.0.0.1:3306/codehomebase?serverTimezone=Asia/Shanghai&useUnicode=true&characterEncoding=utf-8&zeroDateTimeBehavior=convertToNull&useSSL=false&allowPublicKeyRetrieval=trueusername: root # 这里用你自己的账号密码password: 123456mybatis:#mapper配置文件mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.codehome.pojo.entityconfiguration:#开启驼峰命名map-underscore-to-camel-case: true
配置完成后,应该怎么操作数据库呢?
很简单,我们可以整一个Mapper类
像这样就可以操作数据库了。具体内容可以看后面。
7. 开发功能
首先我们再看看我们的后端需求有哪些:
一般都是先进行登录注册功能的开发,但老实说,登录注册还是有点难度的,我们就先从文章的增删改查开始开发。
8. 增删改查功能开发
首先我们就要在controller层创建对应的controller类:
然后就是在service层创建对应的service接口,以及serviceImpl实现类:
再然后就是在mapper层创建Mapper类了:
建好后,项目结构大概是这样的:
开发CategoryController类:
这里就讲个大概,详情请看源码。
在类名上面:
@RestController
是controller层必须加的注解
@RequestMapping("/***")
就是请求路径的写法
在类中各个方法上面:
@PostMapping("/add")
这个就是请求方式,有PostMapping,GetMapping,PutMapping等等
这里的@Api,@ApiOperation是接口文档相关的东西,详情可以查看
接口文档
@RestController
@RequestMapping("/api/category")
@Api(tags = "分类管理")
public class CategoryController {@Autowired //自动装配注解public CategoryService categoryService;@PostMapping("/add")@ApiOperation("保存分类数据")public Result add(@RequestBody CategoryDTO categoryDTO){Category category = Category.builder().name(categoryDTO.getName()).build();categoryService.save(category);return Result.success("新建成功");}
顺承下去,CategoryController有了后就得要去写CategoryService接口,在CategoryServiceImpl类中实现它们的功能。
大概就是这样,要注意加上@Service
注解:
然后就开发mapper层的CategoryMapper:
关于Mapper,我们可以直接在上面写注解,也可以使用xml文件
@Mapper
public interface CategoryMapper {@Select("select * from category where name = #{name}")Category getCategoryByName(String name);void insert(Category category);@Delete("delete from category where id = #{id}")void deleteById(Integer id);void update(Category category);@Select("select * from category where id = #{id}")Category getById(Integer id);@Select("select * from category")List<Category> list();
}
有了上面的这些解释,大家就可以想想文章增删改查怎么写了。基本上都一样,大差不差的。
9. 登录注册功能开发
这里就得要参考登陆注册功能开发
10. AOP权限校验
参考AOP简单的权限校验
11.前端相关
这就很简单了,前端的内容无非就是向后端发送请求得到返回数据,更加返回的数据再在页面上进行渲染显示。
vue需要配置的部分:
vue.config.js
const { defineConfig } = require('@vue/cli-service')
module.exports = defineConfig({transpileDependencies: true,lintOnSave: false,devServer: {proxy: {'/api': {target: 'http://localhost:8083/api/',changeOrigin: true,pathRewrite: {'^/api': ''}}}},})
main.js
import { createApp } from 'vue'
import App from './App.vue'
import router from './router'
import store from './store'
import axios from 'axios'const app = createApp(App);const axiosInstance = axios.create({baseURL: '/api' // 代理前缀,对应vue.config.js中的配置
});app.config.globalProperties.$axios = axiosInstance;app.use(store).use(router).mount('#app')
页面向后端发送请求:
// 获取数据const getData = async () => {const token = localStorage.getItem('token');try {//以下就是一个带token的请求的发送方式const res = await axios.get('/api/category/list', {headers: {token: `${token}`,}});console.log(paperData.value);} catch (error) {alert("权限不足")}}
六、总结
大概就是这样了。总之就是要多抄,多总结。总结下来的东西才是你自己的。加油!
相关文章:

SpringBoot+Vue 简单小文章项目开发全过程
文章目录 一、项目介绍二、需求设计三、数据库设计四、项目构建项目技术选型:构建项目说明:项目架构mavenMySQLRedis 五、项目开发:项目开发思路:项目开发过程:1. 导入文件包/新建项目2. 新建子模块:common模块pojo模块server模块…...

如何将发明原理应用于产品设计的概念阶段?
众所周知,产品设计的概念阶段是创意孵化的关键时期,它决定了产品的方向、定位及核心卖点。在这一阶段,将发明原理融入其中,能够极大地拓宽思维边界,激发前所未有的设计灵感。具体步骤如深圳天行健企业管理咨询公司下文…...

【wsl】wsl + vscode 中使用 typora 打开 markdown 文件
vscode 连接好wsl 使用Open in External App 一个五星好评的插件Open in External App则可以在vscode中用typora打开md文件,不仅如此,还有设定其他应用打开相应的文件,比如chrome打开html。插件食用方法也比较简单,安装后&#…...
AutoDL下huggingface下载模型位置问题
AutoDL系统盘只有30G,数据盘有50G且可扩容,模型及数据集空间通常较大,为节省系统盘空间,我们将文件都存储于数据盘,在运行的代码最前端(一定要在最前面)添加 import os os.environ[HF_HOME] /…...

SpringBoot基础(一):快速入门
SpringBoot基础系列文章 SpringBoot基础(一):快速入门 目录 一、SpringBoot简介二、快速入门三、SpringBoot核心组件1、parent1.1、spring-boot-starter-parent1.2、spring-boot-dependencies 2、starter2.1、spring-boot-starter-web2.2、spring-boot-starter2.3、…...
使用Weka进行数据挖掘与机器学习
在当前大数据时代,数据挖掘与机器学习已经成为了不可或缺的技术。而Weka是一个非常流行的机器学习软件,它提供了一整套的机器学习算法和数据处理工具。Weka不仅支持命令行操作和GUI,还提供了Java API,非常适合Java开发者进行数据挖…...
定时器知识点
#视频教程: 11.TIM定时中断 CSDN教程 知识点: 1.时钟源选择图 ![[Pasted Image 20240802103525_114.png]] 基本定时器 2个功能 :只能定时中断和主模式触发DAC的功能 知识点 1.时基单元:预分配器(PSC)、…...

桌面日历还能这样玩?这个日历太酷了吧!秒变桌面记事本!
大家应该有经常看日历的习惯,每个人都有不同的日历需求。特别是一些节假日,重要节日时候,大家看日历的频次就比较高了,如何选一款好用的日历?我们给大家展示一款非常不错的桌面日历,看下你喜不喜欢…...
基于深度学习的太阳暗条检测(2020年以来)
A universal method for solar filament detection from Hα observations using semi-supervised deep learning A&A, 686, A213 (2024) A universal method for solar filament detection from Hα observations using semi-supervised deep learning (aanda.org) ABS…...

【吊打面试官系列-Elasticsearch面试题】Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?
大家好,我是锋哥。今天分享关于 【Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法?】面试题,希望对大家有帮助; Elasticsearch 在部署时,对 Linux 的设置有哪些优化方法? 面试官 :想了解对 ES 集…...

MySQL·C/C++访问数据库
目录 准备工作 测试是否安装成功 C/C语言访问 官方文档 接口介绍使用 mysql_init() mysql_close() 补充1:makefile编写 mysql_real_connect() 测试1:编译链接 mysql_query() 测试2:SQL语句测试 改 增 删 查 错误1&#x…...

python.tkinter设计标记语言(渲染2-渲染器)
TOC 前言 本文仅作为笔记记录。 在前文中,我们通过标记意义解释生成了带有明确渲染要求的参数组,以<title>为例,我们获取了title, level两个明确的渲染标记,这一部分由Tin标记解释器完成,不需要编写者花费过多…...

Cadence学习笔记 Day0 Cadence17.4环境安装
当然是选择“吴法安装” 直接跟着吴川斌博客的方法来就可以了,这里大致记录一下我的安装步骤: 安装许可证管理器破解许可证管理器安装软件以及补丁破解软件 获取 直接放出链接:吴川斌的博客 下载得到: 一、安装许可证管理器&am…...

k8s创建secret并在container中获取secret
k8s创建secret并在container中获取secret 本文使用的deployment和service与我的上一篇文章一样。link也放在下面了,如果不懂什么事deployment和service,可以先看我的上一篇文章。 k8s使用kustomize来部署应用 下面我们将通过创建secret开始。secret是我…...

Leetcode每日一题之仅仅反转字母(C++)
在学习之余对于知识的巩固也尤为重要,不论难度高低,都会对代码的理解有所加深,下面我们开始练习 思路解析 关于本题的核心思路就是如何判断字符串中元素是否为字母以及如何遍历字符串以达到仅反转的目的,这里用到的知识就是关于 s…...

PDF预览:利用vue3-pdf-app实现前端PDF在线展示
目录 PDF预览:利用vue3-pdf-app实现前端PDF在线展示 一、vue3-pdf-app组件介绍及其优点 1、vue3-pdf-app是什么 2、作用与场景 3、类似的插件 二、项目初始化与依赖安装 1、初始化Vue3项目 2、安装依赖 三、集成vue3-pdf-app插件 1、引入插件 2、配置组件…...

【OpenCV C++20 学习笔记】拉普拉斯(Laplace)二阶求导-边缘检测
拉普拉斯二阶求导 原理拉普拉斯算子(Laplacian Operator) API实例 原理 在OpenCV中,Sobel算法可以对图片中的值求一阶导数,从而计算出图片中的边缘线。其原理如下面的示意图: 那么,如果再求一次导数的,即求二阶导数&…...

MySQL的下载和安装步骤
一、数据库概述 我们先来了解三个概念:数据库、数据库管理系统、SQL。 名称全称简称数据库存储数据的仓库,数据是有组织的进行存储DataBase(DB)数据库管理系统操纵和管理数据库的大型软件DataBase Management System (DBMS)SQL操…...

Java国际版同城服务美容美发到店服务上门服务系统
🌍全球美妆新风尚!国际版同城服务,美容美发一键享 🏙️【国际视野,同城便捷】🏙️ 在这个全球化的时代,美丽不再受地域限制!国际版同城服务系统,将全球顶尖的美容美发资…...

硬件模拟的基本原理
具体来说,这种设计方法减少了集成电路 (IC) 设计和开发的设计迭代次数,并且广泛适用于所有电力电子设计。我详细介绍了我在快速上市 IC 开发方面的经验,并将该方法与其他旨在缩短产品开发时间的技术进行了对比。 产品开发流程 图 1ÿ…...

eNSP-Cloud(实现本地电脑与eNSP内设备之间通信)
说明: 想象一下,你正在用eNSP搭建一个虚拟的网络世界,里面有虚拟的路由器、交换机、电脑(PC)等等。这些设备都在你的电脑里面“运行”,它们之间可以互相通信,就像一个封闭的小王国。 但是&#…...

Lombok 的 @Data 注解失效,未生成 getter/setter 方法引发的HTTP 406 错误
HTTP 状态码 406 (Not Acceptable) 和 500 (Internal Server Error) 是两类完全不同的错误,它们的含义、原因和解决方法都有显著区别。以下是详细对比: 1. HTTP 406 (Not Acceptable) 含义: 客户端请求的内容类型与服务器支持的内容类型不匹…...

突破不可导策略的训练难题:零阶优化与强化学习的深度嵌合
强化学习(Reinforcement Learning, RL)是工业领域智能控制的重要方法。它的基本原理是将最优控制问题建模为马尔可夫决策过程,然后使用强化学习的Actor-Critic机制(中文译作“知行互动”机制),逐步迭代求解…...

基于ASP.NET+ SQL Server实现(Web)医院信息管理系统
医院信息管理系统 1. 课程设计内容 在 visual studio 2017 平台上,开发一个“医院信息管理系统”Web 程序。 2. 课程设计目的 综合运用 c#.net 知识,在 vs 2017 平台上,进行 ASP.NET 应用程序和简易网站的开发;初步熟悉开发一…...

Opencv中的addweighted函数
一.addweighted函数作用 addweighted()是OpenCV库中用于图像处理的函数,主要功能是将两个输入图像(尺寸和类型相同)按照指定的权重进行加权叠加(图像融合),并添加一个标量值&#x…...

基于当前项目通过npm包形式暴露公共组件
1.package.sjon文件配置 其中xh-flowable就是暴露出去的npm包名 2.创建tpyes文件夹,并新增内容 3.创建package文件夹...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台
🎯 使用 Streamlit 构建支持主流大模型与 Ollama 的轻量级统一平台 📌 项目背景 随着大语言模型(LLM)的广泛应用,开发者常面临多个挑战: 各大模型(OpenAI、Claude、Gemini、Ollama)接口风格不统一;缺乏一个统一平台进行模型调用与测试;本地模型 Ollama 的集成与前…...
A2A JS SDK 完整教程:快速入门指南
目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库ÿ…...

GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...