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

news2024/10/7 8:23:17

文章目录

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

博客系统项目介绍

前言

本项目已开源在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/569359.html

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

相关文章

谈谈linux网络编程中的应用层协议定制、Json序列化与反序列化那些事

linux【网络编程】之协议定制、序列化与反序列化 一、序列化与反序列化二、应用层协议如何定制三、网络通信中数据流动的本质四、网络版计算器编写4.1 业务流程4.2 核心代码 一、序列化与反序列化 由于socket api的接口&#xff0c;在读写数据的时候是以字符串的方式发送接收的…

电子科技大学编译原理复习笔记(三):控制结构

目录 前言 重点一览 语句级控制结构 单元级控制结构 四种单元级控制结构 本章小结 前言 本复习笔记基于张老师的课堂PPT&#xff0c;供自己期末复习与学弟学妹参考用。 重点一览 语句级控制结构 定义&#xff1a;用来构造各种语句执行顺序的机制 传统三种语句级控制结…

Hyperledger Fabric explorer区块链浏览器搭建

https://github.com/hyperledger-labs/blockchain-explorer 官方浏览器的github地址 根据文档&#xff0c;采用docker容器的方法搭建explorer。 首先创建explorer的项目&#xff0c; mkdir explorer根据官方提供的文件&#xff0c;需要创建的目录结构如下&#xff1a; 这是官…

【计算机网络复习之路】网络层(谢希仁第八版)万字详解 主打基础

专栏&#xff1a;计算机网络复习之路 目录&#xff1a; 一、网络层的几个重要概念 1.1 网络层提供的两种服务 1.2 网络层的两个层面 二、网际协议 IP 2.1 虚拟互连网络 2.2 IP地址 2.2.1 IP地址及其表示方法 2.2.2 分类的IP地址 2.2.3 无分类编址CIDR &#xff08…

【2023 · CANN训练营第一季】应用开发(初级)第四章——模型推理

AscendCL运行资源管理 申请运行管理资源时&#xff0c;需按顺序依次申请: Device、Context、Stream&#xff0c;然后根据实际需求调用aclrtGetRunMode接口获取软件栈的运行模型(当同一个应用既支持在Host运行&#xff0c;也支持在Device运行时&#xff0c;在编程时需要就需要根…

k8s进阶5——AppArmor、Seccomp、ImagePolicyWebhook

文章目录 一、AppArmor限制容器对资源访问1.1 实现步骤1.1.1 定义策略1.1.2 加载策略1.1.3 引用策略 2.2 案例 二、Seccomp 限制容器进程系统调用案例一&#xff1a;使用自定义策略案例二&#xff1a;使用容器运行时默认策略 三、动态准入控制Webhook3.1 ImagePolicyWebhook控制…

PowerPoint输出图片分辨率设置

最近想用ppt画几张图&#xff0c;但是输出的分辨率有点不够意思&#xff0c;然后就想着改一下输出分辨率&#xff0c;这里记录一下方便以后查阅。 PowerPoint输出图片分辨率设置

PS-调色

图片的储存格式 JPEG格式&#xff1a;日常作图存储格式、只有一个图层、通用图片格式、内存小画质高 RAW格式&#xff1a;CR2、CR3佳能、NEF尼康、ARW索尼、IIQ哈苏、RAF富士、RW2松下 PNG格式&#xff1a;图片透明格式、用于抠出来的素材用这个格式保存可以是透明底没有背景 …

Linux——操作系统详解

目录 一.操作系统的含义 1.操作系统是什么&#xff1f; 2.那么操作系统为什么要对软硬件资源进行管理呢&#xff1f;这样做的好处在哪里&#xff1f; 3.操作系统又是怎么进行管理的&#xff1f; 如何理解“先描述&#xff0c;再组织”&#xff1f; 二.总结&#xff1a; …

conda环境安装使用教程

conda&#xff0c;anaconda&#xff0c;miniconda傻傻分得清楚 Conda是一个开源的包管理系统和环境管理系统&#xff0c;可以用于安装、管理和卸载软件包以及创建和管理虚拟环境。Anaconda是一个基于Python的数据科学平台&#xff0c;包括Python解释器、Conda包管理器、Jupyte…

Linux:为xfs文件系统卷 设置磁盘配额

首先准备一个xfs文件系统的 卷 || 分区 可以是逻辑卷 &#xff0c;也可以是普通卷&#xff0c;等等……但是他们的文件格式都要是xfs格式 我这里选择的是逻辑卷&#xff0c;普通卷也是一样的道理 开始前要有两个软件包需要安装 如果已安装直接看下一步 Linux&#xff1a;rpm…

一个人的旅行

说一下&#xff0c;两次的旅行。一次是三月底四月初&#xff0c;一次是四月底五月初。 我的第一站&#xff0c;帝都&#xff01;&#xff01;&#xff01; 31号晚上八点半的高铁去北京&#xff0c;到达北京已经快十二点了。武局的G528次列车。 来到北京后&#xff0c;这是我第…

Android开发环境搭建[Java1.7+eclipse+sdk4.0](某高校物联网工程专业必看!)

Android开发环境搭建[Java1.7eclipsesdk4.0]&#xff08;某高校物联网工程专业必看&#xff01;&#xff09; 0. 前言1. 资料拷贝2. 配置环境变量2.1新建 Java_Home2.2 编辑Path情况1情况2 2.3 新建sdk环境变量 3. 验证安装3.1 验证java安装情况3.2 验证eclipse安装 4. 导入已有…

《OrangeS一个操作系统的实现》中printf无法打印数字问题

【问题现象】 《OrangeS一个操作系统的实现》 第9章 a目录下的代码编译运行后&#xff0c;所有printf打印数字的地方都有问题&#xff0c;如下图&#xff1a; HD size 始终为 0MB。 【问题分析】 通过断点&#xff0c;发现printf第61行&#xff1a; int printf(const char *…

【历史上的今天】4 月 28 日:人工智能理论之父出生;大众点评上线;苹果开设 iTunes 音乐商店

整理 | 王启隆 透过「历史上的今天」&#xff0c;从过去看未来&#xff0c;从现在亦可以改变未来。 今天是 2023 年 4 月 28 日&#xff0c;在 1994 年的今天&#xff0c;美国克林顿政府公布了一项价值数百万美元的计划&#xff0c;以帮助那些制造平板显示屏的美国公司维持生计…

Filter详解

Filter是什么&#xff1a; Filter表示过滤器&#xff0c;是Java Web三大组件之一&#xff08;Servlet、Filter、Listener&#xff09;。 过滤器可以把对资源的请求拦截下来&#xff0c;从而实现一些特殊的功能。 过滤器一般完成一些通用的操作&#xff0c;比如&#xff1a;权…

chatgpt赋能python:PythonSearchDialog:利用Python编写高效的搜索对话框

Python Search Dialog&#xff1a;利用Python编写高效的搜索对话框 在当今数字时代&#xff0c;大多数产品都提供搜索功能。而Python Search Dialog 则为产品提供了一个强大、高效的搜索对话框&#xff0c;使得用户能够更快速地、更准确地定位所需信息。 什么是Python Search…

实验三:熟悉常用的HBase操作

实验环境&#xff1a; (1)操作系统&#xff1a;Linux(建议 Ubuntu 16.04 或 Ubuntu 18.04)。 (2)Hadoop 版本&#xff1a;3.1.3。 (3)HBase 版本&#xff1a;2.2.2。 (4)JDK 版本&#xff1a;1.8。 (5)Java IDE: Eclipse。 实验内容与完成情况&#xff1a; (1)现有以下关系数据…

【数据挖掘与商务智能决策】第十七章 神经网络

前言 本人CSDN博客为“仿生程序员会梦见电子羊吗”&#xff0c;本文基于markdown本文书写&#xff0c;平台及软件为CSDN与Typora&#xff0c;文中图片存储地址为CSDN&#xff0c;故部分图片可能带有“CSDN仿生程序员会梦见电子羊吗”的水印&#xff0c;属于本人原创&#xff0c…

视频理解学习笔记(二):I3D and Kinetics Dataset

视频理解学习笔记&#xff08;二&#xff09;&#xff1a;I3D and Kinetics Dataset 视频理解的三个流派&#xff08;怎么处理时序&#xff09;论文概览Kinetics Dataset模型详解将2D卷积网络扩张到3D&#xff08;Inflating 2D ConvNets into 3D&#xff09;如何用预训练好的2D…