继瑞吉外卖后的又一个项目——SpringBoot+Vued前后端的博客系统

news2024/11/19 20:41:20

文章目录

  • 博客系统项目介绍
    • 前言
    • 项目演示
      • 前台演示
      • 后台演示
    • 组织结构
      • 后端组织结构
      • 前端组织结构
    • 技术选型
      • 前端技术
      • 后端技术
      • 架构图
        • 系统架构图
        • 业务架构图
    • 模块介绍
      • 前端模块
      • 后端模块
    • 环境搭建
      • 开发工具
      • 开发环境
      • 项目运行
    • 未完待续
    • 结语

博客系统项目介绍

前言

本项目已开源在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,所以这里就不透露了)

  • 项目前台截图:

    • 首页:

      image-20230508202436400

    • 登录页面:

      image-20230508202344010

    • 注册页面:

      image-20230508202406808

    • 文章简介:

      image-20230508202456937

    • 文章详情:

      image-20230508202525266

    • 友链展示:

      image-20230508202608053

    • 评论:

      image-20230508202621860

    • 赞赏:

      image-20230508202638850

    • 个人中心:

      image-20230508202650836

    • 安全中心:

      image-20230508202703804

后台演示

  • 在线体验:暂无

  • 项目后台截图:

    • 首页:

      image-20230508203144437

    • 登录:

      image-20230508202324056

    • 写博文:

      image-20230509160029803

    • 系统管理:

      • 用户管理:

        image-20230509160041384

      • 角色管理:

        image-20230509160049139

      • 菜单管理:

        image-20230509160058047

    • 内容管理:

      • 文章管理:

        image-20230509160150259

      • 分类管理:

        image-20230509160158700

      • 友链管理:

        image-20230509160206916

      • 标签管理:

        image-20230509160218331

组织结构

后端组织结构

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.0cookie管理工具https://github.com/js-cookie/js-cookie

后端技术

技术说明文档
JDK1.8Java8https://www.java.com/zh-CN/
SpringBoot2.5.0Web应用开发框架https://spring.io/projects/spring-boot
SpringSecurity认证和授权框架https://spring.io/projects/spring-security
MyBatisPlus3.4.3ORM框架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.24Java语言增强库https://github.com/rzwitserloot/lombok
PageHelperMyBatis物理分页插件http://git.oschina.net/free/Mybatis_PageHelper
Swagger-UI2.0.2API文档生成工具https://github.com/swagger-api/swagger-ui
Knife4j3.0.3API文档生成工具https://doc.xiaominfo.com/
Validation-api参数校验https://beanvalidation.org/
FastJson1.2.23序列化反序列化https://github.com/alibaba/fastjson/
Jwt0.9.0JWT登录支持http://jboot.com.cn/docs/jwt.html
EasyExcel3.0.5导入导出Excelhttps://easyexcel.opensource.alibaba.com

架构图

系统架构图

image-20230508171801282

业务架构图

image-20230508174627779

模块介绍

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

前端模块

  • 前台模块

    image-20230508194038339

  • 后台模块

    image-20230509160709565

后端模块

image-20230509160653287

  • 公共模块

    image-20230509160553786

    • 公共模块存哪些东西

      主要放置公共的代码,比如:通用的Controller、通用的方法类、以及数据模型对象(Model、Dto、Entity、VO),同时存放将前台模块和后台模块的Service、Mapper层的代码。并且还设置有一个公共的配置文件。

    • 为什么要单独配置一个公共模块

      1. 提高代码的复用性
      2. 提高代码的可维护性

      ……

  • 前台模块

    image-20230509160610022

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

    image-20230509160623360

    • 后台模块的作用:主要用于处理项目博客后台的请求,DDL和DQL操作都较多

环境搭建

手把手教你如何搭建项目环境,并成功运行起来

开发工具

工具说明
InntelliJ IDEA 2022.2.1Java编译器
VSCode 2022前端编译器
Navicat Premium 12可视化操作数据库
Maven 3.6.1用于构建和管理Java项目
Git版本控制
Postman接口测试
VMware用于部署Redis
FinalShellLinux终端,远程来连接Linux
RESP可视化操作Redis
ProcessOn流程图绘制工具
Snipaste屏幕截图工具
TyporaMarkdown编辑器

开发环境

  • 前端:使用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.ymlupload设置为false(true-使用七牛云图床,false-使用本地存储)
  • 前端

    • Step1:进入项目根目录,在文件路径中输入cmd

      image-20230508195348305

    • Step2:执行npm i(或者是 npm install,都一样),下载项目所需依赖(前提是先要有node环境,这里不过多介绍node的安装了,不懂的可以自行百度🤭)

      image-20230508195615086

    • Step3:执行npm run dev ,启动项目

      image-20230508201042088

      注意:要想成功访问项目,需要先启动后端

  • 后端

    • Step1:使用IDEA打开项目,刷新Maven,等待依赖加载

      image-20230508200909130

      PS:依赖加载慢,可以配置Maven镜像,这里也不多做解释了,不会的可以自行百度

    • Step2:开启虚拟机,然后启动Redis,关闭防火墙

      image-20230508200219372

      PS:关于Redis的安装部署,这里也不多做解释了,不会的可以参考这篇文章 Redis基础篇

    • Step3:右击启动类,然后运行(后者在服务中添加SpringBoot程序,也可以启动)

      image-20230508201016311

      image-20230508201743985

未完待续

我还想要完善的一些功能:

  • 点赞功能,包括文章、评论点赞功能(Redis实现)

  • 文章收藏功能

  • 用户关注功能(Redis实现)

  • 共同关注功能(并查集实现)

  • 对页面进行美化(加入一些有意思的动画效果,比如主题切换、看板娘)

  • 对于登录功能

    • 添加忘记密码和记住我两个功能
    • 接入QQ或者微信的扫码登录接口,实现扫码登录
  • 对于注册功能,添加验证码校验,提高系统的安全性,防止恶意注册

  • 对于后台管理首页展示区,缺乏动态数据查询功能

    image-20230511114044059

……

结语

  本项目历时一周开发完成。本次开发,采用分模块开发,由我设计接口并将接口分发给组员,通过Gitee版本控制工具,最终同理合作完成本项目。其中印象最深的是:对通用代码的抽取(比如查询字段是否存在,删除已有关联关系),SpringSecurity+JWT完成登录功能时拦截器的编写,这两块卡了一段时间,最终在组员的商议下共同合力解决。

  本项目在我看来,难点应该是对于权限的控制(SpringSecurity的使用),很多时候稍不注意就控制失败,抛出各种异常,其次就是前端,前端各种组件的设计,也显得有点力不从心,但好在在组员的通力合作下,最终完成了这个博客系统……

动力满满,继续加油冲冲冲!!!丫( •̀ ω •́ )y

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/568989.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【P32】JMeter While 控制器(While Controller)

文章目录 一、While 控制器&#xff08;While Controller&#xff09;参数说明二、测试计划设计2.1、变量2.2、函数2.2.1、groovy脚本2.2.2、jex13脚本2.2.3、js脚本 一、While 控制器&#xff08;While Controller&#xff09;参数说明 可以对部分逻辑按变量条件进行循环迭代…

【算法】—— 简单多状态 dp 问题

在上期&#xff0c;我给大家讲解了关于单个状态下的dp问题&#xff0c;本期我给大家讲述几道关于多状态下的dp问题。希望大家有所帮助&#xff01;&#xff01;&#xff01; 目录 &#xff08;一&#xff09;粉刷房⼦ &#xff08;二&#xff09;买卖股票的最佳时机含冷冻期 …

破解提升 LLMs 性能的黑匣子—— LlamaIndex

“可以将 LlamaIndex 视为外部数据和 LLM 连接在一起的黑匣子。”在 Zilliz 组织的网络研讨会中&#xff0c;LlamaIndex 的联合创始人兼首席执行官 Jerry Liu 曾这样说道。 对于 Jerry Liu 的这个比喻&#xff0c;熟悉 LLMs 的开发者会觉得颇为贴切&#xff0c;尤其是对于那些想…

Chinese-LLaMA-Alpaca代码实战

文章目录 微调chinese-alpaca部署llama.cpp将FP16模型量化为4-bit 项目地址&#xff1a; https://github.com/ymcui/Chinese-LLaMA-Alpaca 微调chinese-alpaca 本项目基于中文数据 开源了使用中文文本数据预训练的中文LLaMA大模型&#xff08;7B、13B&#xff09;开源了进一…

JavaFX【TableView使用详解】

目录 概述 组件 Student ObservableList TableView setCellValueFactory() TableColumn 1. Callback 2. PropertyValueFactory 增加到末行 1、tableView.getItems().add(Student s) 2、list.add(Student s) 删除指定行 1、tableView.getItems().remove(int i) 2、…

软件测试完后,运行后还有BUG,测试人员就应该背锅吗?

测试完成后还有bug&#xff0c;测试人员肯定是有责任的&#xff0c;第一时间要赶紧处理而不是着急甩锅。但是这口锅全部扣测试身上&#xff0c;明显也是不能接受的&#xff0c;关键在于测试人员需要找出足够的证据来保护自己。 或许很多人会说测试不可能发现所有的bug&#xf…

软件测试人的第一个实战项目:web端(视频教程+文档+用例库)

最近很多自学测试的小伙伴在问我&#xff0c;学完基础的知识后面临着项目问题&#xff0c;网上项目大都不全&#xff0c;而且也不知道该怎么做&#xff0c;不知道做哪些项目能帮助自己提升 今天给大家分享一个web软件测试实战项目&#xff0c;该项目对新手十分友好&#xff0c;…

STM32入门100步(第4步~第5步)

第4~5步 STM32内部核心功能 前两节中,我们了解了什么是ARM、什么是STM32系列,接下来就是了解具体的一款STM32单片机的内部功能。单片机就是一种微小型计算机,其核心原理就是计算机原理。对于其他非ARM构架的单片机来说学习过程也是相似的。 我们学习的是STM32F103C8T6这款单…

细说前端打包发布后,浏览器缓存如何清理?其实只需要简单的webpack配置就行

前言 有没有这么一种场景&#xff0c;项目上线后&#xff0c;客户使用过程中发现了bug&#xff0c;你急急忙忙改完&#xff0c;发布。但你发布后 测试人员或者客户会说&#xff1a;“你这改了没用啊”。 你&#xff1a;“清下缓存试试” 客户&#xff1a;“&#xff1f;&am…

c#——WCF和HTTP文件传输实验

&#xff08;1&#xff09;掌握HTTP协议下WCF服务应用程序构建方法。 &#xff08;2&#xff09;掌握WCF客户端和服务端的消息交换模式。 &#xff08;3&#xff09;掌握协定的设计及实现方法。 &#xff08;4&#xff09;熟悉WCF和HTTP的相关绑定设置。 &#xff08;5&#xf…

CentOS7编译安装Python3.10(含OpenSSL1.1.1安装),创建虚拟环境,运行Django项目(含sqlite版本报错)

文章目录 1、CentOS安装OpenSSL1.1.1&#xff08;前置环境&#xff09;2、CentOS安装 Python 3.103、创建虚拟环境4、运行Django项目 1、CentOS安装OpenSSL1.1.1&#xff08;前置环境&#xff09; 编译安装Python3.10时需要openssl1.1.1 查看当前版本 & 删除openssl1.0 …

Java高并发核心编程—JUC显示锁原理

注&#xff1a;本笔记是阅读《Java高并发核心编程卷2》整理的笔记&#xff01; 显示锁 使用Java内置锁时&#xff0c;不需要通过Java代码显式地对同步对象的监视器进行抢占和释放&#xff0c;这些工作由JVM底层完成&#xff0c;而且任何一个Java对象都能作为一个内置锁使用&a…

Apache Kafka - ConsumerInterceptor 实战 (1)

文章目录 概述使用场景实战配置文件配置类自定义ConSumerInterceptor使用 概述 ConsumerInterceptor是Kafka中的一个重要组件&#xff0c;它允许开发人员在Kafka消费者端拦截和修改消息的处理过程。ConsumerInterceptor可以用于实现各种功能&#xff0c;从消息监控到数据转换和…

【Python开发】FastAPI 01:hello world

FastAPI 是一个轻量级的后端框架&#xff0c;对于定制化不高或者功能简单的业务完全可以拿他作为后台。 FastAPI 一个比较重要的特性就是异步&#xff0c;简单来说就是相比 django 和 flask 快&#xff0c;FastAPI 和 flask 的语法类似。本篇文章介绍 FastAPI 运用的简单实例&a…

从索引结点出发探索软、硬链接

索引结点的初步认识 对于整个计算机系统的资源管理&#xff0c;我们可以认为&#xff0c;OS先将这些资源的数据信息&#xff0c;给描述起来构成一个部分&#xff0c;然后再将它们组织起来&#xff0c;就能够实现由OS集中管理。举一个最经典的例子&#xff0c;进程的引入是为了…

Cos上传(腾讯云):图片存储方案

Cos上传(腾讯云) 01.图片存储方案介绍 目标 了解主流的图片存储方案 两种常见方案 方案一&#xff1a;存到自己公司购买的服务器上 优点&#xff1a;好控制 缺点&#xff1a;成本高由于图片都存放到自己的服务器上&#xff0c;占据空间很大 方案二&#xff1a;存到三方…

总结SpringBoot常用读取配置文件的3种方法

文章目录 1、使用 Value 读取配置文件2、 使用 ConfigurationProperties 读取配置文件3、读取配置文件中的List 1、使用 Value 读取配置文件 注&#xff1a;这种方法适用于对象的参数比较少的情况 使用方法&#xff1a; 在类上添加configuration注解&#xff0c;将这个配置对…

Hotbit交易平台停运,百万用户待清退,币圈危机再度蔓延

“币圈”的危机似乎还没有走到尽头。5月22日&#xff0c;加密货币交易平台Hotbit发文宣布&#xff0c;决定从世界标准时间当日4:00停止所有CEX&#xff08;中心化交易所&#xff09;操作&#xff0c;希望所有用户在6月21日4:00之前提取剩余资产。据悉&#xff0c;该平台在其任期…

微前端乾坤

1. 乾坤 简介 qiankun 是一个基于 single-spa 的微前端实现库&#xff0c;旨在帮助大家能更简单、无痛的构建一个生产可用微前端架构系统 官网&#xff1a;https://qiankun.umijs.org/zh/guide 2.使用 背景&#xff1a; vue2.0 , vue-cli 5.0 主应用&#xff1a; 安装乾坤…

基于上下文折扣的多模态医学图像分割证据融合

文章目录 Evidence Fusion with Contextual Discounting for Multi-modality Medical Image Segmentation摘要本文方法Evidential SegmentationMulti-modality Evidence FusionDiscounted Dice Loss 实验结果 Evidence Fusion with Contextual Discounting for Multi-modality …