继瑞吉外卖后的又一个项目——SpringBoot+Vue的前后端博客系统
文章目录
- 博客系统项目介绍
- 前言
- 项目演示
- 前台演示
- 后台演示
- 组织结构
- 后端组织结构
- 前端组织结构
- 技术选型
- 前端技术
- 后端技术
- 架构图
- 系统架构图
- 业务架构图
- 模块介绍
- 前端模块
- 后端模块
- 环境搭建
- 开发工具
- 开发环境
- 项目运行
- 未完待续
- 结语
博客系统项目介绍
前言
本项目已开源在Gitee
- 后端代码仓库:blog: 博客系统后端代码仓库 (gitee.com)
- 前端代码仓库:
- 前台:blog-fe: 博客系统前端代码仓库(前台展示) (gitee.com)
- 后台:blog-be: 博客系统前端代码仓库(后台管理) (gitee.com)
说明:本项目属于二次开发,我之前是跟着三更老师开发的,后面也就是现在我自己花了一周的时间复盘,重新再次开发一遍。所以在此致谢三更老师💖💖💖三更老师并不是培训机构的,而是利用工作业余时间出的教程,这里也为三更老师做一波宣传
三更老师B站地址:https://space.bilibili.com/663528522?spm_id_from=333.337.0.0
这个项目也是继瑞吉外卖后的一个比较完整的项目了,从项目的 开发 - 部署 - 上线,这段时间(前前后后花了大约两周时间)学到了很多东西,比如SpringSecurity+JWT实现登录流程,项目开发的流程、如何进行模块划分,项目如何上线(这里老师没教,纯自学),数据库表如何设计才更加优雅,三跟老师交给我的,更多的并不是如何使用某某技术,而是为什么要使用这个技术(做到了真正的“授人以鱼,不如授人以渔”),这个技术好在哪些地方。
项目演示
前台演示
-
在线体验:
暂无(部署失败┭┮﹏┭┮。。。)(由于我没有配置好域名,怕暴露服务器IP,所以这里就不透露了) -
项目前台截图:
-
首页:

-
登录页面:

-
注册页面:

-
文章简介:

-
文章详情:

-
友链展示:

-
评论:

-
赞赏:

-
个人中心:

-
安全中心:

-
后台演示
-
在线体验:
暂无 -
项目后台截图:
-
首页:

-
登录:

-
写博文:

-
系统管理:
-
用户管理:

-
角色管理:

-
菜单管理:

-
-
内容管理:
-
文章管理:

-
分类管理:

-
友链管理:

-
标签管理:

-
-
组织结构
后端组织结构
blog
├─.idea
│ ├─dataSources
│ │ └─f902d677-27d9-4dcf-bcf6-2750320cbe2c
│ │ └─storage_v2
│ │ └─_src_
│ │ └─schema
│ ├─inspectionProfiles
│ ├─mybatisx
│ └─sonarlint
├─blog-be
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─hhxy
│ │ │ │ ├─config
│ │ │ │ └─controller
│ │ │ └─resources
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─hhxy
│ │ ├─mapper
│ │ └─service
│ └─target
│ ├─classes
│ │ └─com
│ │ └─hhxy
│ │ ├─config
│ │ └─controller
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ ├─maven-archiver
│ ├─maven-status
│ │ └─maven-compiler-plugin
│ │ ├─compile
│ │ │ └─default-compile
│ │ └─testCompile
│ │ └─default-testCompile
│ └─test-classes
│ └─com
│ └─hhxy
│ ├─mapper
│ └─service
├─blog-fe
│ ├─src
│ │ ├─main
│ │ │ ├─java
│ │ │ │ └─com
│ │ │ │ └─hhxy
│ │ │ │ ├─config
│ │ │ │ ├─controller
│ │ │ │ ├─job
│ │ │ │ └─runner
│ │ │ └─resources
│ │ └─test
│ │ └─java
│ │ └─com
│ │ └─hhxy
│ │ └─utils
│ └─target
│ ├─classes
│ │ └─com
│ │ └─hhxy
│ │ ├─config
│ │ ├─controller
│ │ ├─job
│ │ └─runner
│ ├─generated-sources
│ │ └─annotations
│ ├─generated-test-sources
│ │ └─test-annotations
│ ├─maven-archiver
│ ├─maven-status
│ │ └─maven-compiler-plugin
│ │ ├─compile
│ │ │ └─default-compile
│ │ └─testCompile
│ │ └─default-testCompile
│ └─test-classes
│ └─com
│ └─hhxy
│ └─utils
└─blog-framework├─src│ ├─main│ │ ├─java│ │ │ └─com│ │ │ └─hhxy│ │ │ ├─annotation│ │ │ ├─aspect│ │ │ ├─config│ │ │ ├─constants│ │ │ ├─controller│ │ │ ├─filter│ │ │ ├─handler│ │ │ │ ├─exception│ │ │ │ ├─mybatisplus│ │ │ │ └─security│ │ │ ├─mapper│ │ │ ├─model│ │ │ │ ├─dto│ │ │ │ ├─entity│ │ │ │ └─vo│ │ │ ├─service│ │ │ │ └─impl│ │ │ └─utils│ │ │ ├─convert│ │ │ ├─redis│ │ │ └─response│ │ └─resources│ │ ├─mapper│ │ ├─sql│ │ └─static│ └─test│ └─java└─target├─classes│ ├─com│ │ └─hhxy│ │ ├─annotation│ │ ├─aspect│ │ ├─config│ │ ├─constants│ │ ├─controller│ │ ├─filter│ │ ├─handler│ │ │ ├─exception│ │ │ ├─mybatisplus│ │ │ └─security│ │ ├─mapper│ │ ├─model│ │ │ ├─dto│ │ │ ├─entity│ │ │ └─vo│ │ ├─service│ │ │ └─impl│ │ └─utils│ │ ├─convert│ │ ├─redis│ │ └─response│ ├─mapper│ ├─META-INF│ └─sql├─generated-sources│ └─annotations├─maven-archiver└─maven-status└─maven-compiler-plugin├─compile│ └─default-compile└─testCompile└─default-testCompile
前端组织结构
-
前台项目
blog-admin: ├─api ├─assets │ └─css ├─components ├─pages ├─router ├─store └─utils -
后台项目
blog-vue: ├─public ├─src │ ├─api │ │ ├─content │ │ └─system │ ├─assets │ │ ├─404_images │ │ ├─icons │ │ │ └─svg │ │ └─images │ ├─components │ │ ├─Breadcrumb │ │ ├─Hamburger │ │ ├─ParentView │ │ └─SvgIcon │ ├─directive │ │ └─permission │ ├─layout │ │ ├─components │ │ │ ├─InnerLink │ │ │ └─Sidebar │ │ └─mixin │ ├─plugins │ ├─router │ ├─store │ │ └─modules │ ├─styles │ ├─utils │ └─views │ ├─content │ │ ├─article │ │ │ └─write │ │ ├─category │ │ ├─link │ │ └─tag │ ├─dashboard │ ├─login │ ├─nested │ │ └─menu1 │ │ └─menu1-2 │ └─system │ ├─menu │ ├─role │ └─user ├─static └─tests└─unit├─components└─utils
技术选型
前端技术
| 技术 | 说明 | 文档 |
|---|---|---|
HTML | 网页结构 | https://developer.mozilla.org/zh-CN/docs/Web/HTML |
CSS | 网页样式 | https://developer.mozilla.org/zh-CN/docs/Learn/CSS |
Vue2.5.2 | 前端框架 | https://vuejs.org/ |
NodeJS16.15.0 | 前端依赖的环境 | https://nodejs.org/en |
Vue-router3.0.1 | 路由框架 | https://router.vuejs.org/ |
Vuex3.0.1 | 全局状态管理框架 | https://vuex.vuejs.org/ |
Element1.4.12 | 前端UI框架 | https://element.eleme.io |
Axios0.17.0 | 前端HTTP框架 | https://github.com/axios/axios |
Js-cookie2.2.0 | cookie管理工具 | https://github.com/js-cookie/js-cookie |
后端技术
| 技术 | 说明 | 文档 |
|---|---|---|
JDK1.8 | Java8 | https://www.java.com/zh-CN/ |
SpringBoot2.5.0 | Web应用开发框架 | https://spring.io/projects/spring-boot |
SpringSecurity | 认证和授权框架 | https://spring.io/projects/spring-security |
MyBatisPlus3.4.3 | ORM框架 | http://www.mybatis.org/mybatis-3/zh/index.html |
MyBatisGenerator | 数据层代码生成器 | http://www.mybatis.org/generator/index.html |
Redis6.2.6 | 缓存数据 | https://redis.io/ |
MySQL8.0.27 | 持久化存储数据 | https://www.mysql.com |
Druid1.2.15 | 数据库连接池 | https://github.com/alibaba/druid |
OSS | 对象存储 | https://github.com/aliyun/aliyun-oss-java-sdk |
Lombok1.8.24 | Java语言增强库 | https://github.com/rzwitserloot/lombok |
PageHelper | MyBatis物理分页插件 | http://git.oschina.net/free/Mybatis_PageHelper |
Swagger-UI2.0.2 | API文档生成工具 | https://github.com/swagger-api/swagger-ui |
Knife4j3.0.3 | API文档生成工具 | https://doc.xiaominfo.com/ |
Validation-api | 参数校验 | https://beanvalidation.org/ |
FastJson1.2.23 | 序列化反序列化 | https://github.com/alibaba/fastjson/ |
Jwt0.9.0 | JWT登录支持 | http://jboot.com.cn/docs/jwt.html |
EasyExcel3.0.5 | 导入导出Excel | https://easyexcel.opensource.alibaba.com |
架构图
系统架构图

业务架构图

模块介绍
项目整体采用三层架构的形式进行开发,在此基础上,还进行了模块的划分,让项目整体结构显得更加清晰明了,从而大大提高代码的复用性,系统的可维护性
前端模块
-
前台模块

-
后台模块

后端模块

-
公共模块

-
公共模块存哪些东西?
主要放置公共的代码,比如:通用的Controller、通用的方法类、以及数据模型对象(Model、Dto、Entity、VO),同时存放将前台模块和后台模块的Service、Mapper层的代码。并且还设置有一个公共的配置文件。
-
为什么要单独配置一个公共模块?
- 提高代码的复用性
- 提高代码的可维护性
……
-
-
前台模块

- 前台模块的作用:主要用于处理项目博客前台的请求,DDL操作较少、DQL操作较多
-
后台模块

- 后台模块的作用:主要用于处理项目博客后台的请求,DDL和DQL操作都较多
环境搭建
手把手教你如何搭建项目环境,并成功运行起来
开发工具
| 工具 | 说明 |
|---|---|
| InntelliJ IDEA 2022.2.1 | Java编译器 |
| VSCode 2022 | 前端编译器 |
| Navicat Premium 12 | 可视化操作数据库 |
| Maven 3.6.1 | 用于构建和管理Java项目 |
| Git | 版本控制 |
| Postman | 接口测试 |
| VMware | 用于部署Redis |
| FinalShell | Linux终端,远程来连接Linux |
| RESP | 可视化操作Redis |
| ProcessOn | 流程图绘制工具 |
| Snipaste | 屏幕截图工具 |
| Typora | Markdown编辑器 |
开发环境
-
前端:使用VueCLI3+Vue2
"dependencies": {"axios": "^0.17.0","element-ui": "^1.4.12","js-cookie": "2.2.0","mavon-editor": "^2.10.4","vue": "^2.5.2","vue-router": "^3.0.1","vuex": "^3.0.1"},"devDependencies": {"@vue/cli-plugin-babel": "4.4.4","@vue/cli-plugin-eslint": "4.4.4","@vue/cli-plugin-unit-jest": "4.4.4","@vue/cli-service": "4.4.4","@vue/test-utils": "1.0.0-beta.29","autoprefixer": "^7.1.2","babel-core": "^6.22.1","babel-helper-vue-jsx-merge-props": "^2.0.3","babel-loader": "^7.1.1","babel-plugin-syntax-jsx": "^6.18.0","babel-plugin-transform-runtime": "^6.22.0","babel-plugin-transform-vue-jsx": "^3.5.0","babel-preset-env": "^1.3.2","babel-preset-stage-2": "^6.22.0","chalk": "^2.0.1","copy-webpack-plugin": "^4.0.1","css-loader": "^0.28.0","extract-text-webpack-plugin": "^3.0.0","file-loader": "^1.1.4","friendly-errors-webpack-plugin": "^1.6.1","less": "^2.7.2","less-loader": "^4.0.5","html-webpack-plugin": "^2.30.1","node-notifier": "^5.1.2","optimize-css-assets-webpack-plugin": "^3.2.0","ora": "^1.2.0","portfinder": "^1.0.13","postcss-import": "^11.0.0","postcss-loader": "^2.0.8","postcss-url": "^7.2.1","rimraf": "^2.6.0","semver": "^5.3.0","shelljs": "^0.7.6","uglifyjs-webpack-plugin": "^1.1.1","url-loader": "^0.5.8","vue-loader": "^13.3.0","vue-style-loader": "^3.0.1","vue-template-compiler": "^2.5.2","webpack": "^3.6.0","webpack-bundle-analyzer": "^2.9.0","webpack-dev-server": "^2.9.1","webpack-merge": "^4.1.0"} -
后端:SpringBoot2.5.0+JDK1.8
<?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><groupId>com.hhxy</groupId><artifactId>blog</artifactId><packaging>pom</packaging><version>1.0-SNAPSHOT</version><modules><module>blog-framework</module><module>blog-be</module><module>blog-fe</module></modules><properties><maven.compiler.source>8</maven.compiler.source><maven.compiler.target>8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding><java.version>1.8</java.version><maven.plugin.version>3.1</maven.plugin.version><springboot.version>2.5.0</springboot.version><lombok-version>1.18.24</lombok-version><druid-version>1.2.15</druid-version><fastjson.version>1.2.33</fastjson.version><jwt.version>0.9.0</jwt.version><mybatisplus.version>3.4.3</mybatisplus.version><aliyun.sdk.oss>3.10.2</aliyun.sdk.oss><qiniuyun.sdk.version>[7.7.0, 7.7.99]</qiniuyun.sdk.version><easyexcel.version>3.0.5</easyexcel.version><knife4j-version>3.0.3</knife4j-version></properties><dependencyManagement><dependencies><!-- SpringBoot的依赖配置--><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-dependencies</artifactId><version>${springboot.version}</version><type>pom</type><scope>import</scope></dependency><!--Lombok--><dependency><groupId>org.projectlombok</groupId><artifactId>lombok</artifactId><version>${lombok-version}</version></dependency><!--Druid--><dependency><groupId>com.alibaba</groupId><artifactId>druid-spring-boot-starter</artifactId><version>${druid-version}</version></dependency><!--Fastjson依赖--><dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>${fastjson.version}</version></dependency><!--Jwt依赖--><dependency><groupId>io.jsonwebtoken</groupId><artifactId>jjwt</artifactId><version>${jwt.version}</version></dependency><!--MybatisPlus依赖--><dependency><groupId>com.baomidou</groupId><artifactId>mybatis-plus-boot-starter</artifactId><version>${mybatisplus.version}</version></dependency><!--阿里云OSS--><dependency><groupId>com.aliyun.oss</groupId><artifactId>aliyun-sdk-oss</artifactId><version>${aliyun.sdk.oss}</version></dependency><!--七牛云sdk--><dependency><groupId>com.qiniu</groupId><artifactId>qiniu-java-sdk</artifactId><version>${qiniuyun.sdk.version}</version></dependency><!--EasyExcel--><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>${easyexcel.version}</version></dependency><!--Knife4j--><dependency><groupId>com.github.xiaoymin</groupId><artifactId>knife4j-spring-boot-starter</artifactId><version>${knife4j-version}</version></dependency></dependencies></dependencyManagement><build><plugins><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>${maven.plugin.version}</version><configuration><source>${java.version}</source><target>${java.version}</target><encoding>${project.build.sourceEncoding}</encoding></configuration></plugin></plugins></build></project>
项目运行
温馨提示:
- 后端的blog-be模块对应前端的blog-admin模块,后端的blog-fe模块对应前端的blog-vue模块,需要先启动后端模块再启动前端模块,才能够正常访问页面
- 后端模块运行之前,一定要将项目配置文件
application-common.yml(位于blog-framework下的resource中)中的MySQL和Redis的账号、密码、主机改成你自己的,SQL文件也位于改目录下,直接使用Navicate运行改目录下的blog.sql即可- 后端数据库中的密码已通过
PasswordEncoding采用MD5进行了加密,无法直接查看。我设置的初识账号密码是admin123qwe,如果想要修改密码,直接可以通过测试类EncryptionPasswordTest(双击Shift搜索该测试类)进行加密,然后将加密后的密码复制到数据库,即可修改初识密码- 由于本项目没有使用本地上传功能,我使用的七牛云图床,所以如果想要上传图片需要修改一下配置,在
application-common.yml将upload设置为false(true-使用七牛云图床,false-使用本地存储)
-
前端
-
Step1:进入项目根目录,在文件路径中输入
cmd
-
Step2:执行
npm i(或者是npm install,都一样),下载项目所需依赖(前提是先要有node环境,这里不过多介绍node的安装了,不懂的可以自行百度🤭)
-
Step3:执行
npm run dev,启动项目
注意:要想成功访问项目,需要先启动后端
-
-
后端:
-
Step1:使用IDEA打开项目,刷新Maven,等待依赖加载

PS:依赖加载慢,可以配置Maven镜像,这里也不多做解释了,不会的可以自行百度
-
Step2:开启虚拟机,然后启动Redis,关闭防火墙

PS:关于Redis的安装部署,这里也不多做解释了,不会的可以参考这篇文章 Redis基础篇
-
Step3:右击启动类,然后运行(后者在服务中添加SpringBoot程序,也可以启动)


-
未完待续
我还想要完善的一些功能:
-
点赞功能,包括文章、评论点赞功能(Redis实现)
-
文章收藏功能
-
用户关注功能(Redis实现)
-
共同关注功能(并查集实现)
-
对页面进行美化(加入一些有意思的动画效果,比如主题切换、看板娘)
-
对于登录功能
- 添加忘记密码和记住我两个功能
- 接入QQ或者微信的扫码登录接口,实现扫码登录
-
对于注册功能,添加验证码校验,提高系统的安全性,防止恶意注册
-
对于后台管理首页展示区,缺乏动态数据查询功能

……
结语
本项目历时一周开发完成。本次开发,采用分模块开发,由我设计接口并将接口分发给组员,通过Gitee版本控制工具,最终同理合作完成本项目。其中印象最深的是:对通用代码的抽取(比如查询字段是否存在,删除已有关联关系),SpringSecurity+JWT完成登录功能时拦截器的编写,这两块卡了一段时间,最终在组员的商议下共同合力解决。
本项目在我看来,难点应该是对于权限的控制(SpringSecurity的使用),很多时候稍不注意就控制失败,抛出各种异常,其次就是前端,前端各种组件的设计,也显得有点力不从心,但好在在组员的通力合作下,最终完成了这个博客系统……
动力满满,继续加油冲冲冲!!!丫( •̀ ω •́ )y
相关文章:
继瑞吉外卖后的又一个项目——SpringBoot+Vue的前后端博客系统
文章目录 博客系统项目介绍前言项目演示前台演示后台演示 组织结构后端组织结构前端组织结构 技术选型前端技术后端技术架构图系统架构图业务架构图 模块介绍前端模块后端模块 环境搭建开发工具开发环境项目运行 未完待续结语 博客系统项目介绍 前言 本项目已开源在Gitee 后端…...
2023暑期实习历程总结
一.前言 Hello 大家好久不见,已经三个月左右没有更新了,那我这三个月在干什么呢?自2023年3月中旬开始到现在五月底这期间接近三个月的时间里,我一直在进行2023暑期实习的投递和面试。这期间投递了包括各大中厂(阿里&am…...
UART-STM32
UART-STM32 通信的目的:将一个设备的数据传送到另一个设备,扩展硬件系统 通信协议:制定通信的规则,通信双方按照协议规则进行数据收发 第一步,开启时钟,把需要用的USART和GPIO的时钟打开 第二步,GPIO初始化,把TX配置成复用输出,RX配置成输入 第三步,配置USART,直接使…...
jetson nano csi摄像头 tensorrt 运行yolov8检测
jetson nano csi摄像头 tensorrt 运行yolov8检测 基于原始onnx模型的tensorrt预测1. 在本地电脑训练环境下将onnx模型导出yolov8 导出onnx 模型2. 在jetson nano下 转换到tensorrt模型配置好环境后 使用trtexec 生成engine3. 使用python3 tensorrt 读取csi摄像头进行预测修改on…...
提升国际品牌影响力:小企业海外网红营销实战指南
在当今数字化时代,小企业们越来越意识到海外市场的巨大潜力。与此同时,海外网红的崛起也为小企业提供了一个独特的机会,通过与他们合作,迅速拓展国际市场并吸引更多目标受众的关注。然而,对于许多小企业来说࿰…...
从零开始的力扣刷题记录-第三十九天
力扣每日四题 228. 汇总区间-简单1431. 拥有最多糖果的孩子-简单637. 二叉树的层平均值-简单49. 字母异位词分组-中等总结 228. 汇总区间-简单 题目描述: 给定一个 无重复元素 的 有序 整数数组 nums 。 返回 恰好覆盖数组中所有数字 的 最小有序 区间范围列表 。也…...
PDPS教程:机器人工作站导出为JT格式文件操作方法
目录 功能简介 功能注意事项 导出JT格式文件操作 导出JT格式文件查看 功能简介 PDPS软件不仅能够从外部导入JT格式的模型文件,还能够将创建好的机器人工作站/生产线导出为JT格式的模型文件。这个能够导出JT格式文件的功能就是“Export JT”命令。 使用“Expor…...
【面试】为什么Mysql用B+树做索引而不用B-树或红黑树
文章目录 前言一、B树只有叶节点存放数据,其余节点用来索引,而B-树是每个索引节点都会有Data域。二、那么Mysql如何衡量查询效率呢?三、B树相对于红黑树的区别 前言 原因如下: B树能显著减少IO次数,提高效率B树的查询…...
教你如何选择真正有用的防关联指纹浏览器
从事亚马逊、eBay、Shopify等电商平台的卖家都知道,如果我们需要在这些平台上经营多个店铺,需要使用多个账号为店铺进行评价,在Facebook和Instagram上做SEO和广告,通常也需要使用一个防关联指纹浏览器。 防关联指纹浏览器主要解决…...
某程序员哀叹:月薪四五万,却每天极度焦虑痛苦,已有生理性不适,又不敢裸辞,该怎么办?
高薪能买来快乐吗? 来看看这位程序员的哀叹: 实在是扛不住了,每天都在极度焦虑和痛苦中度过,早上起来要挣扎着做心理建设去上班,已经产生生理性的头晕恶心食欲不振。有工作本身的原因,更多是自己心态的问…...
不愧是腾讯出来的,太厉害了...
前段时间公司缺人,也面了许多测试,一开始瞄准的就是中级水准,当然也没指望能来大牛,提供的薪资在15-20k这个范围,来面试的人有很多,但是平均水平真的让人很失望。看了简历很多上面都是写有4年工作经验&…...
2023年上半年系统集成项目管理工程师上午真题及答案解析
1.在( )领域我国远末达到世界先进水平,需要发挥新型国家体制优势,集中政府和市场两方面的力量全力发展。 A.卫星导航 B.航天 C.集成电路 D.高铁 2.ChatGPT 于2022年11月30日发布,他是人工智能驱动( )。 …...
psd文件丢失了怎么恢复?分享原因及对应恢复方法
PSD文件在设计行业中非常重要。但是,不幸的是,有时这些文件可能会因多种原因而丢失。那么在未备份PSD文件的情况下,PSD文件丢失了怎么恢复呢?如果您遇到了这种问题,不要惊慌,在本篇文章中,我们将…...
【Netty】 工作原理详解(十一)
文章目录 前言一、Netty 模型二、代码示例2.1、引入Maven依赖2.2、服务端的管道处理器2.3、服务端主程序2.4、客户端管道处理器2.5、客户端主程序2.6、测试运行 总结 前言 回顾Netty系列文章: Netty 概述(一)Netty 架构设计(二&…...
SQL面试必备:100道高频考题解析
前言 在众多IT职场中,SQL技术一直是一个非常重要的技能点。如果你正在准备SQL相关的面试,那么这份“SQL面试 100 问”绝对是你不能错过的宝藏! 这份清单涵盖了100道高频考题,从基础知识到复杂应用都有所涉及,帮助你全…...
基于区域的图像分割
文章目录 基于区域的图像分割基本原理常用的算法实现步骤示例代码结论 基于区域的图像分割 基于区域的图像分割是数字图像处理中常用的一种方法,它通过将图像中的像素分配到不同的区域或对象来实现图像分割的目的。相比于基于边缘或阈值的方法,基于区域…...
【Python json】零基础也能轻松掌握的学习路线与参考资料
Python中的JSON模块主要用于将Python对象序列化成JSON数据或解析包含JSON数据的字符串。JSON(JavaScript Object Notation)是一种轻量级的数据交换格式,易于人阅读和编写,同时也易于机器解析和生成。由于JSON在Web应用中的广泛使用…...
大数据开发之Hive案例篇8-解析XML
文章目录 一. 问题描述二. 解决方案2.1 官方文档2.2 XML格式不规范 一. 问题描述 今天接到一个新需求,hive表里面有个字段存储的是XML类型数据 数据格式: <a><b>bb</b><c>cc</c> </a>二. 解决方案 2.1 官方文档 遇到不懂的…...
Sentinel降级规则
1.降级规则简介 官方文档 熔断降级概述 除了流量控制以外,对调用链路中不稳定的资源进行熔断降级也是保障高可用的重要措施之一。一个服务常常会调用别的模块,可能是另外的一个远程服务、数据库,或者第三方 API 等。例如,支付的…...
基于非靶向和靶向代谢组学分析婴幼儿血管瘤的氨基酸代谢
文章标题:Integrated nontargeted and targeted metabolomics analyses amino acids metabolism in infantile hemangioma 发表期刊:Frontiers in Oncology 影响因子:5.738 作者单位:四川大学华西医院 百趣提供服务…...
React第五十七节 Router中RouterProvider使用详解及注意事项
前言 在 React Router v6.4 中,RouterProvider 是一个核心组件,用于提供基于数据路由(data routers)的新型路由方案。 它替代了传统的 <BrowserRouter>,支持更强大的数据加载和操作功能(如 loader 和…...
鸿蒙中用HarmonyOS SDK应用服务 HarmonyOS5开发一个医院挂号小程序
一、开发准备 环境搭建: 安装DevEco Studio 3.0或更高版本配置HarmonyOS SDK申请开发者账号 项目创建: File > New > Create Project > Application (选择"Empty Ability") 二、核心功能实现 1. 医院科室展示 /…...
Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
TRS收益互换:跨境资本流动的金融创新工具与系统化解决方案
一、TRS收益互换的本质与业务逻辑 (一)概念解析 TRS(Total Return Swap)收益互换是一种金融衍生工具,指交易双方约定在未来一定期限内,基于特定资产或指数的表现进行现金流交换的协议。其核心特征包括&am…...
微服务商城-商品微服务
数据表 CREATE TABLE product (id bigint(20) UNSIGNED NOT NULL AUTO_INCREMENT COMMENT 商品id,cateid smallint(6) UNSIGNED NOT NULL DEFAULT 0 COMMENT 类别Id,name varchar(100) NOT NULL DEFAULT COMMENT 商品名称,subtitle varchar(200) NOT NULL DEFAULT COMMENT 商…...
【Zephyr 系列 10】实战项目:打造一个蓝牙传感器终端 + 网关系统(完整架构与全栈实现)
🧠关键词:Zephyr、BLE、终端、网关、广播、连接、传感器、数据采集、低功耗、系统集成 📌目标读者:希望基于 Zephyr 构建 BLE 系统架构、实现终端与网关协作、具备产品交付能力的开发者 📊篇幅字数:约 5200 字 ✨ 项目总览 在物联网实际项目中,**“终端 + 网关”**是…...
大模型多显卡多服务器并行计算方法与实践指南
一、分布式训练概述 大规模语言模型的训练通常需要分布式计算技术,以解决单机资源不足的问题。分布式训练主要分为两种模式: 数据并行:将数据分片到不同设备,每个设备拥有完整的模型副本 模型并行:将模型分割到不同设备,每个设备处理部分模型计算 现代大模型训练通常结合…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
AI编程--插件对比分析:CodeRider、GitHub Copilot及其他
AI编程插件对比分析:CodeRider、GitHub Copilot及其他 随着人工智能技术的快速发展,AI编程插件已成为提升开发者生产力的重要工具。CodeRider和GitHub Copilot作为市场上的领先者,分别以其独特的特性和生态系统吸引了大量开发者。本文将从功…...
20个超级好用的 CSS 动画库
分享 20 个最佳 CSS 动画库。 它们中的大多数将生成纯 CSS 代码,而不需要任何外部库。 1.Animate.css 一个开箱即用型的跨浏览器动画库,可供你在项目中使用。 2.Magic Animations CSS3 一组简单的动画,可以包含在你的网页或应用项目中。 3.An…...
