继瑞吉外卖后的又一个项目——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
进行了加密,无法直接查看。我设置的初识账号密码是admin
123qwe
,如果想要修改密码,直接可以通过测试类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 作者单位:四川大学华西医院 百趣提供服务…...
HTML 语义化
目录 HTML 语义化HTML5 新特性HTML 语义化的好处语义化标签的使用场景最佳实践 HTML 语义化 HTML5 新特性 标准答案: 语义化标签: <header>:页头<nav>:导航<main>:主要内容<article>&#x…...

超短脉冲激光自聚焦效应
前言与目录 强激光引起自聚焦效应机理 超短脉冲激光在脆性材料内部加工时引起的自聚焦效应,这是一种非线性光学现象,主要涉及光学克尔效应和材料的非线性光学特性。 自聚焦效应可以产生局部的强光场,对材料产生非线性响应,可能…...

边缘计算医疗风险自查APP开发方案
核心目标:在便携设备(智能手表/家用检测仪)部署轻量化疾病预测模型,实现低延迟、隐私安全的实时健康风险评估。 一、技术架构设计 #mermaid-svg-iuNaeeLK2YoFKfao {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg…...

练习(含atoi的模拟实现,自定义类型等练习)
一、结构体大小的计算及位段 (结构体大小计算及位段 详解请看:自定义类型:结构体进阶-CSDN博客) 1.在32位系统环境,编译选项为4字节对齐,那么sizeof(A)和sizeof(B)是多少? #pragma pack(4)st…...

智能在线客服平台:数字化时代企业连接用户的 AI 中枢
随着互联网技术的飞速发展,消费者期望能够随时随地与企业进行交流。在线客服平台作为连接企业与客户的重要桥梁,不仅优化了客户体验,还提升了企业的服务效率和市场竞争力。本文将探讨在线客服平台的重要性、技术进展、实际应用,并…...

CMake 从 GitHub 下载第三方库并使用
有时我们希望直接使用 GitHub 上的开源库,而不想手动下载、编译和安装。 可以利用 CMake 提供的 FetchContent 模块来实现自动下载、构建和链接第三方库。 FetchContent 命令官方文档✅ 示例代码 我们将以 fmt 这个流行的格式化库为例,演示如何: 使用 FetchContent 从 GitH…...
数据库分批入库
今天在工作中,遇到一个问题,就是分批查询的时候,由于批次过大导致出现了一些问题,一下是问题描述和解决方案: 示例: // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...
[Java恶补day16] 238.除自身以外数组的乘积
给你一个整数数组 nums,返回 数组 answer ,其中 answer[i] 等于 nums 中除 nums[i] 之外其余各元素的乘积 。 题目数据 保证 数组 nums之中任意元素的全部前缀元素和后缀的乘积都在 32 位 整数范围内。 请 不要使用除法,且在 O(n) 时间复杂度…...

SpringTask-03.入门案例
一.入门案例 启动类: package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

JVM 内存结构 详解
内存结构 运行时数据区: Java虚拟机在运行Java程序过程中管理的内存区域。 程序计数器: 线程私有,程序控制流的指示器,分支、循环、跳转、异常处理、线程恢复等基础功能都依赖这个计数器完成。 每个线程都有一个程序计数…...