从零开始:构建一个高效的开源管理系统——使用 React 和 Ruoyi-Vue-Plus 的实战指南

在这里插入图片描述

✅作者简介:2022年博客新星 第八。热爱国学的Java后端开发者,修心和技术同步精进。
🍎个人主页:Java Fans的博客
🍊个人信条:不迁怒,不贰过。小知识,大智慧。
💞当前专栏:Java案例分享专栏
✨特色专栏:国学周更-心性养成之路
🥭本文内容:从零开始:构建一个高效的开源管理系统——使用 React 和 Ruoyi-Vue-Plus 的实战指南

前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。

文章目录

    • 一、引言
      • 1. 管理系统的重要性
      • 2. 选择技术栈的考虑
      • 3. 项目的目标
      • 4. 文章结构
    • 二、项目架构
      • 1. 整体架构图
      • 2. 前端架构
        • 2.1 组件(components)
        • 2.2 页面(pages)
        • 2.3 服务(services)
        • 2.4 状态管理(store)
        • 2.5 样式(styles)
        • 2.6 工具函数(utils)
      • 3. 后端架构
        • 3.1 控制器层(controller)
        • 3.2 业务逻辑层(service)
        • 3.3 数据访问层(repository)
        • 3.4 实体类(domain)
        • 3.5 配置类(config)
      • 4. 数据库设计
      • 5. 项目扩展性
    • 三、前端开发
      • 1. 创建 React 项目
      • 2. 安装依赖
      • 3. 项目结构
      • 4. 配置路由
      • 5. 创建共享组件
        • 5.1 按钮组件
      • 6. 创建用户管理页面
      • 7. API 服务
      • 8. 状态管理
      • 9. 样式管理
    • 四、后端开发
      • 1. 创建 Ruoyi-Vue-Plus 项目
      • 2. 配置数据库
      • 3. 数据库设计
        • 3.1 用户表(users)
        • 3.2 角色表(roles)
      • 4. 创建实体类
        • 4.1 用户实体类
        • 4.2 角色实体类
      • 5. 创建数据访问层
        • 5.1 用户仓库
        • 5.2 角色仓库
      • 6. 创建服务层
        • 6.1 用户服务
        • 6.2 角色服务
      • 7. 创建控制器层
        • 7.1 用户控制器
        • 7.2 角色控制器
      • 8. 安全配置
        • 8.1 添加依赖
        • 8.2 配置安全策略
      • 9. 测试 API
    • 五、结论
      • 1. 项目回顾
      • 2. 技术优势
      • 3. 未来展望
    • 六、投票

在这里插入图片描述

一、引言

  在当今数字化时代,企业管理系统的需求日益增长。无论是中小型企业还是大型企业,管理系统的有效性直接影响到企业的运营效率和决策能力。为了满足这一需求,开发一个灵活、可扩展且易于使用的管理系统显得尤为重要。

1. 管理系统的重要性

  管理系统通常用于处理企业内部的各种业务流程,包括用户管理、权限控制、数据分析等。一个高效的管理系统能够帮助企业:

  • 提高工作效率:通过自动化流程,减少人工操作,提高工作效率。
  • 数据集中管理:将企业的各类数据集中存储,便于管理和分析。
  • 决策支持:提供实时数据分析和报告,帮助管理层做出更明智的决策。
  • 用户体验优化:通过友好的界面和交互设计,提高用户的使用体验。

2. 选择技术栈的考虑

  在开发管理系统时,选择合适的技术栈至关重要。本文选择了以下技术栈:

  • React:作为一个流行的前端框架,React 提供了组件化的开发方式,使得代码可重用性高,维护性强。
  • TypeScript:TypeScript 是 JavaScript 的超集,提供了静态类型检查,能够在开发阶段捕获潜在的错误,提高代码的可靠性。
  • Ant Design Pro:Ant Design Pro 是一个基于 Ant Design 的企业级 UI 设计语言,提供了丰富的组件库和设计规范,能够快速构建美观的用户界面。
  • Ruoyi-Vue-Plus:这是一个基于 Spring Boot 的开源管理系统框架,提供了完善的后端功能和权限管理,能够快速搭建企业级应用。

3. 项目的目标

  本项目的目标是构建一个开源的管理系统,能够实现基本的用户管理功能。通过将前端的 React 应用与后端的 Ruoyi-Vue-Plus 框架对接,我们希望实现以下功能:

  • 用户的增删改查(CRUD)操作
  • 用户权限管理
  • 数据的实时展示和分析

4. 文章结构

  本文将分为几个部分,首先介绍项目的架构和技术栈,然后详细讲解前端和后端的开发过程,最后总结项目的实现和未来的扩展方向。通过这些内容,读者将能够清晰地理解如何使用现代技术构建一个高效的管理系统。

二、项目架构

  在构建一个开源管理系统时,合理的项目架构是确保系统可维护性、可扩展性和高效性的基础。本文将详细介绍本项目的整体架构,包括前端和后端的结构设计、技术选型以及各个模块的功能划分。

1. 整体架构图

my-management-system/
├── frontend/                # 前端代码
│   ├── public/              # 静态资源
│   ├── src/
│   │   ├── components/      # 共享组件
│   │   ├── pages/           # 页面组件
│   │   ├── services/        # API 服务
│   │   ├── store/           # 状态管理
│   │   ├── styles/          # 样式文件
│   │   ├── utils/           # 工具函数
│   │   └── App.tsx          # 入口文件
└── backend/                 # 后端代码
    ├── src/
    │   ├── main/
    │   │   ├── java/        # Java 源代码
    │   │   └── resources/    # 配置文件
    │   ├── domain/          # 实体类
    │   ├── repository/      # 数据访问层
    │   ├── service/         # 业务逻辑层
    │   ├── controller/      # 控制器层
    │   └── config/          # 配置类

2. 前端架构

前端部分使用 React 和 Ant Design Pro 构建,主要包括以下几个模块:

2.1 组件(components)
  • 共享组件:如按钮、表单、模态框等,封装成可复用的组件,便于在不同页面中使用。
  • 布局组件:如导航栏、侧边栏、页脚等,负责整体页面的布局。
2.2 页面(pages)
  • 首页:展示系统的概览信息和快捷操作。
  • 用户管理:实现用户的增删改查功能,展示用户列表。
  • 角色管理:管理用户角色和权限。
  • 数据分析:展示系统的统计数据和图表。
2.3 服务(services)
  • API 服务:负责与后端进行数据交互,封装 HTTP 请求,处理 API 调用和错误处理。
2.4 状态管理(store)
  • 状态管理:使用 Redux 或 Context API 管理全局状态,确保组件之间的数据共享和同步。
2.5 样式(styles)
  • 样式文件:使用 CSS 或 LESS 进行样式管理,确保页面的美观和一致性。
2.6 工具函数(utils)
  • 工具函数:封装常用的工具函数,如日期格式化、数据校验等,提升代码的复用性。

3. 后端架构

后端部分基于 Ruoyi-Vue-Plus 框架,采用分层架构设计,主要包括以下几个模块:

3.1 控制器层(controller)
  • 用户控制器:处理用户相关的 HTTP 请求,如获取用户列表、添加用户、删除用户等。
  • 角色控制器:处理角色相关的请求,管理用户角色和权限。
3.2 业务逻辑层(service)
  • 用户服务:封装用户相关的业务逻辑,如用户注册、登录、权限验证等。
  • 角色服务:处理角色的增删改查逻辑。
3.3 数据访问层(repository)
  • 用户仓库:与数据库交互,执行用户相关的 CRUD 操作。
  • 角色仓库:与数据库交互,执行角色相关的 CRUD 操作。
3.4 实体类(domain)
  • 用户实体:定义用户的属性,如用户名、密码、邮箱等。
  • 角色实体:定义角色的属性,如角色名、权限列表等。
3.5 配置类(config)
  • 数据库配置:配置数据库连接信息。
  • 安全配置:配置安全相关的设置,如 JWT 认证、权限过滤等。

4. 数据库设计

数据库设计是系统架构的重要组成部分。我们将使用 MySQL 数据库,主要包括以下表:

  • 用户表(users):存储用户的基本信息,如 ID、用户名、密码、邮箱、角色 ID 等。
  • 角色表(roles):存储角色的基本信息,如 ID、角色名、权限列表等。
  • 用户角色关联表(user_roles):存储用户与角色的关联关系。

5. 项目扩展性

本项目架构设计考虑了未来的扩展性。随着需求的变化,可以轻松添加新的功能模块,如:

  • 日志管理:记录用户操作日志,便于审计和追踪。
  • 数据报表:生成各类数据报表,支持导出功能。
  • 通知系统:实现系统通知和消息推送功能。

通过合理的项目架构设计,我们能够确保系统的可维护性和可扩展性。前后端的分离使得开发过程更加高效,团队可以并行工作,快速迭代。

三、前端开发

  前端开发是构建管理系统的重要环节,负责实现用户界面和用户交互。本文将详细介绍前端开发的各个步骤,包括项目初始化、组件设计、路由配置、状态管理、API 服务以及样式管理。

1. 创建 React 项目

首先,我们需要使用 Create React App 创建一个新的 React 项目,并配置 TypeScript。

npx create-react-app frontend --template typescript
cd frontend

2. 安装依赖

接下来,安装 Ant Design Pro 及其相关依赖,以便使用其丰富的组件库和设计规范。

npm install @ant-design/pro-layout @ant-design/pro-table antd axios react-router-dom

3. 项目结构

src 目录下,按照以下结构组织代码:

src/
├── components/              # 共享组件
├── pages/                   # 页面组件
├── services/                # API 服务
├── store/                   # 状态管理
├── styles/                  # 样式文件
├── utils/                   # 工具函数
└── App.tsx                  # 入口文件

4. 配置路由

src/App.tsx 中配置路由,使用 react-router-dom 实现页面导航。

import React from 'react';
import { BrowserRouter as Router, Route, Switch } from 'react-router-dom';
import Home from './pages/Home';
import UserManagement from './pages/UserManagement';
import RoleManagement from './pages/RoleManagement';

const App: React.FC = () => {
  return (
    <Router>
      <Switch>
        <Route path="/" exact component={Home} />
        <Route path="/users" component={UserManagement} />
        <Route path="/roles" component={RoleManagement} />
      </Switch>
    </Router>
  );
};

export default App;

5. 创建共享组件

src/components/ 目录下,创建一些共享组件,例如按钮、表单和模态框。

5.1 按钮组件
// src/components/MyButton.tsx
import React from 'react';
import { Button } from 'antd';

interface MyButtonProps {
  label: string;
  onClick: () => void;
}

const MyButton: React.FC<MyButtonProps> = ({ label, onClick }) => {
  return <Button type="primary" onClick={onClick}>{label}</Button>;
};

export default MyButton;

6. 创建用户管理页面

src/pages/ 目录下创建用户管理页面,展示用户列表并实现增删改查功能。

// src/pages/UserManagement.tsx
import React, { useEffect, useState } from 'react';
import { Table, Button, Modal, Form, Input } from 'antd';
import { getUsers, addUser, deleteUser } from '../services/api';

const UserManagement: React.FC = () => {
  const [users, setUsers] = useState([]);
  const [isModalVisible, setIsModalVisible] = useState(false);
  const [form] = Form.useForm();

  useEffect(() => {
    const fetchUsers = async () => {
      const data = await getUsers();
      setUsers(data);
    };
    fetchUsers();
  }, []);

  const handleAddUser = async (values: any) => {
    await addUser(values);
    setIsModalVisible(false);
    const data = await getUsers();
    setUsers(data);
  };

  const handleDeleteUser = async (id: number) => {
    await deleteUser(id);
    const data = await getUsers();
    setUsers(data);
  };

  return (
    <div>
      <Button type="primary" onClick={() => setIsModalVisible(true)}>添加用户</Button>
      <Table dataSource={users} rowKey="id">
        <Table.Column title="用户名" dataIndex="username" />
        <Table.Column title="邮箱" dataIndex="email" />
        <Table.Column title="操作" render={(text, record) => (
          <Button type="link" onClick={() => handleDeleteUser(record.id)}>删除</Button>
        )} />
      </Table>

      <Modal title="添加用户" visible={isModalVisible} onCancel={() => setIsModalVisible(false)} footer={null}>
        <Form form={form} onFinish={handleAddUser}>
          <Form.Item name="username" label="用户名" rules={[{ required: true }]}>
            <Input />
          </Form.Item>
          <Form.Item name="email" label="邮箱" rules={[{ required: true, type: 'email' }]}>
            <Input />
          </Form.Item>
          <Form.Item>
            <Button type="primary" htmlType="submit">提交</Button>
          </Form.Item>
        </Form>
      </Modal>
    </div>
  );
};

export default UserManagement;

7. API 服务

src/services/ 目录下创建 API 服务,封装与后端的 HTTP 请求。

// src/services/api.ts
import axios from 'axios';

const API_URL = '/api/users';

export const getUsers = async () => {
  const response = await axios.get(API_URL);
  return response.data;
};

export const addUser = async (user: any) => {
  await axios.post(API_URL, user);
};

export const deleteUser = async (id: number) => {
  await axios.delete(`${API_URL}/${id}`);
};

8. 状态管理

如果项目复杂度增加,可以使用 Redux 或 Context API 进行状态管理。以下是使用 Context API 的简单示例:

// src/store/UserContext.tsx
import React, { createContext, useContext, useState } from 'react';

const UserContext = createContext<any>(null);

export const UserProvider: React.FC = ({ children }) => {
  const [users, setUsers] = useState([]);

  return (
    <UserContext.Provider value={{ users, setUsers }}>
      {children}
    </UserContext.Provider>
  );
};

export const useUserContext = () => useContext(UserContext);

9. 样式管理

使用 Ant Design 提供的样式和自定义样式文件,确保页面的美观和一致性。可以在 src/styles/ 目录下创建样式文件,使用 LESS 或 CSS 进行样式管理。

/* src/styles/global.css */
body {
  margin: 0;
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, 'Helvetica Neue', Arial, sans-serif;
}

通过以上步骤,我们成功构建了一个简单的前端管理系统,能够实现用户的增删改查功能。前端部分使用了 React 和 Ant Design Pro,确保了良好的用户体验和界面美观。后续可以根据需求扩展更多功能,如角色管理、数据分析等。

四、后端开发

  后端开发是管理系统的核心部分,负责处理业务逻辑、数据存储和与前端的交互。本文将详细介绍后端开发的各个步骤,包括项目初始化、数据库设计、控制器、服务层、数据访问层以及安全配置。

1. 创建 Ruoyi-Vue-Plus 项目

首先,按照 Ruoyi-Vue-Plus 的官方文档创建一个新的项目。确保你已经安装了 JDK 和 Maven。

git clone https://gitee.com/y_project/Ruoyi-Vue-Plus.git
cd Ruoyi-Vue-Plus

2. 配置数据库

src/main/resources/application.yml 文件中配置数据库连接信息。以下是一个 MySQL 数据库的示例配置:

spring:
  datasource:
    url: jdbc:mysql://localhost:3306/your_database_name?useUnicode=true&characterEncoding=utf8&serverTimezone=UTC
    username: your_username
    password: your_password
  jpa:
    hibernate:
      ddl-auto: update

3. 数据库设计

根据系统需求设计数据库表。以下是用户和角色表的设计示例:

3.1 用户表(users)
字段名类型描述
idBIGINT用户ID(主键)
usernameVARCHAR(50)用户名
passwordVARCHAR(255)密码
emailVARCHAR(100)邮箱
role_idBIGINT角色ID
created_atTIMESTAMP创建时间
updated_atTIMESTAMP更新时间
3.2 角色表(roles)
字段名类型描述
idBIGINT角色ID(主键)
role_nameVARCHAR(50)角色名称
permissionsTEXT权限列表

4. 创建实体类

src/main/java/com/example/domain 目录下创建用户和角色的实体类。

4.1 用户实体类
package com.example.domain;

import javax.persistence.*;
import java.time.LocalDateTime;

@Entity
@Table(name = "users")
public class User {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    private String username;
    private String password;
    private String email;

    @Column(name = "role_id")
    private Long roleId;

    @Column(name = "created_at")
    private LocalDateTime createdAt;

    @Column(name = "updated_at")
    private LocalDateTime updatedAt;

    // Getters and Setters
}
4.2 角色实体类
package com.example.domain;

import javax.persistence.*;

@Entity
@Table(name = "roles")
public class Role {
    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private Long id;

    @Column(name = "role_name")
    private String roleName;

    private String permissions;

    // Getters and Setters
}

5. 创建数据访问层

src/main/java/com/example/repository 目录下创建用户和角色的仓库接口。

5.1 用户仓库
package com.example.repository;

import com.example.domain.User;
import org.springframework.data.jpa.repository.JpaRepository;

public interface UserRepository extends JpaRepository<User, Long> {
    User findByUsername(String username);
}
5.2 角色仓库
package com.example.repository;

import com.example.domain.Role;
import org.springframework.data.jpa.repository.JpaRepository;

public interface RoleRepository extends JpaRepository<Role, Long> {
}

6. 创建服务层

src/main/java/com/example/service 目录下创建用户和角色的服务类,封装业务逻辑。

6.1 用户服务
package com.example.service;

import com.example.domain.User;
import com.example.repository.UserRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class UserService {
    @Autowired
    private UserRepository userRepository;

    public List<User> findAll() {
        return userRepository.findAll();
    }

    public User findById(Long id) {
        return userRepository.findById(id).orElse(null);
    }

    public User save(User user) {
        return userRepository.save(user);
    }

    public void delete(Long id) {
        userRepository.deleteById(id);
    }
}
6.2 角色服务
package com.example.service;

import com.example.domain.Role;
import com.example.repository.RoleRepository;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
public class RoleService {
    @Autowired
    private RoleRepository roleRepository;

    public List<Role> findAll() {
        return roleRepository.findAll();
    }

    public Role save(Role role) {
        return roleRepository.save(role);
    }

    public void delete(Long id) {
        roleRepository.deleteById(id);
    }
}

7. 创建控制器层

src/main/java/com/example/controller 目录下创建用户和角色的控制器,处理 HTTP 请求。

7.1 用户控制器
package com.example.controller;

import com.example.domain.User;
import com.example.service.UserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/users")
public class UserController {
    @Autowired
    private UserService userService;

    @GetMapping
    public List<User> getUsers() {
        return userService.findAll();
    }

    @PostMapping
    public ResponseEntity<User> createUser(@RequestBody User user) {
        User createdUser = userService.save(user);
        return ResponseEntity.ok(createdUser);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteUser(@PathVariable Long id) {
        userService.delete(id);
        return ResponseEntity.noContent().build();
    }
}
7.2 角色控制器
package com.example.controller;

import com.example.domain.Role;
import com.example.service.RoleService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.*;

import java.util.List;

@RestController
@RequestMapping("/api/roles")
public class RoleController {
    @Autowired
    private RoleService roleService;

    @GetMapping
    public List<Role> getRoles() {
        return roleService.findAll();
    }

    @PostMapping
    public ResponseEntity<Role> createRole(@RequestBody Role role) {
        Role createdRole = roleService.save(role);
        return ResponseEntity.ok(createdRole);
    }

    @DeleteMapping("/{id}")
    public ResponseEntity<Void> deleteRole(@PathVariable Long id) {
        roleService.delete(id);
        return ResponseEntity.noContent().build();
    }
}

8. 安全配置

为了保护 API 接口,可以使用 Spring Security 进行安全配置。以下是一个简单的安全配置示例:

8.1 添加依赖

pom.xml 中添加 Spring Security 依赖:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>
8.2 配置安全策略

创建一个安全配置类,配置基本的安全策略:

package com.example.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.security.config.annotation.web.builders.HttpSecurity;
import org.springframework.security.config.annotation.web.configuration.EnableWebSecurity;
import org.springframework.security.config.annotation.web.configuration.WebSecurityConfigurerAdapter;

@Configuration
@EnableWebSecurity
public class SecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        http.csrf().disable()
            .authorizeRequests()
            .antMatchers("/api/**").authenticated()
            .and()
            .httpBasic(); // 使用基本认证
    }
}

9. 测试 API

使用 Postman 或其他 API 测试工具,测试后端接口的功能。确保用户的增删改查功能正常工作。

通过以上步骤,我们成功构建了一个简单的后端管理系统,能够实现用户和角色的增删改查功能。后端部分使用了 Spring Boot 和 JPA,确保了良好的代码结构和可维护性。后续可以根据需求扩展更多功能,如权限管理、日志记录等。

五、结论

  在本文中,我们详细探讨了如何使用 React 和 Ant Design Pro 对接 Ruoyi-Vue-Plus,构建一个开源管理系统。通过前端和后端的分层架构设计,我们实现了用户和角色的基本管理功能。以下是对整个开发过程的总结和未来展望。

1. 项目回顾

在项目中,我们经历了以下几个关键步骤:

  • 项目架构设计:我们首先设计了合理的项目架构,确保前后端的分离,使得系统的可维护性和可扩展性得以提升。前端使用 React 和 Ant Design Pro,后端基于 Spring Boot 和 JPA。

  • 前端开发:通过创建 React 应用,我们实现了用户管理页面,使用 Ant Design 组件库构建了友好的用户界面。我们还封装了 API 服务,确保前端与后端的高效数据交互。

  • 后端开发:在后端,我们设计了数据库结构,创建了实体类、数据访问层、服务层和控制器层,确保了业务逻辑的清晰和可复用性。同时,我们实现了基本的安全配置,保护了 API 接口。

2. 技术优势

通过使用现代技术栈,我们的管理系统具备了以下优势:

  • 高效的开发体验:React 的组件化开发方式和 Ant Design 的丰富组件库,使得前端开发更加高效,能够快速构建出美观的用户界面。

  • 灵活的后端架构:Spring Boot 提供了快速开发的能力,结合 JPA 的数据访问方式,使得后端开发更加简洁和高效。

  • 良好的用户体验:通过使用 Ant Design 的设计规范,我们的系统在用户体验上得到了显著提升,用户可以更直观地进行操作。

3. 未来展望

虽然我们已经实现了基本的用户和角色管理功能,但系统的扩展性和可维护性使得我们可以在未来进行更多的功能扩展和优化:

  • 权限管理:可以进一步实现细粒度的权限控制,确保不同角色的用户只能访问其被授权的功能和数据。

  • 数据分析与报表:通过集成数据分析工具,提供实时的数据报表和可视化图表,帮助管理层做出更明智的决策。

  • 日志管理:实现用户操作日志记录,便于审计和追踪,提升系统的安全性和可追溯性。

  • 移动端支持:考虑到用户的多样化需求,可以扩展系统的移动端支持,确保用户在不同设备上的良好体验。

  • 性能优化:随着用户数量的增加,系统的性能优化将变得尤为重要。可以考虑引入缓存机制、负载均衡等技术,提升系统的响应速度和稳定性。

  通过本项目的开发,我们不仅实现了一个功能完整的管理系统,还深入理解了前后端分离架构的优势和实现方式。

六、投票

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Kafka-代码示例

一、构建开发环境 File > New > Project 选择一个最简单的模板 项目和坐标命名 配置maven路径 添加maven依赖 <dependencies><!-- https://mvnrepository.com/artifact/org.apache.kafka/kafka-clients --><dependency><groupId>org.apache.kaf…

学习笔记——动态路由——OSPF(距离矢量协议)OSPF路由类型

OSPF路由类型 在OSPF中&#xff0c;路由类型指的是不同种类的路由&#xff0c;用于描述网络中不同的路由信息及其传输方式。 1、Intra Area路由(区域内路由) Intra Area路由(区域内路由/本地路由/内部路由)是OSPF协议中的一种路由类型&#xff0c;用于描述在同一个OSPF区域内…

【论文阅读】ESRGAN

学习资料 论文题目&#xff1a;增强型超分辨率生成对抗网络&#xff08;ESRGAN: Enhanced Super-Resolution Generative Adversarial Networks&#xff09;论文地址&#xff1a;[1809.00219] ESRGAN&#xff1a;增强型超分辨率生成对抗网络代码&#xff1a;xinntao / ESRGAN&am…

牛客周赛 Round 64(博弈论、思维、构造、LCA、换根DP)

文章目录 牛客周赛 Round 64(博弈论、思维、构造、LCA、换根DP)A. 小红的对错判断B. 小红的幂表达C. 小红的前缀询问D. 小红和小紫的博弈游戏&#xff08;博弈论&#xff09;E. 小红的字符串重排&#xff08;思维、构造&#xff09;F&G. 小红的树上路径查询&#xff08;LCA…

LabVIEW共享变量通信故障

问题概述&#xff1a; 在LabVIEW项目中&#xff0c;使用IO服务器创建共享变量&#xff0c;并通过LabVIEW作为从站进行数据通信。通讯在最初运行时正常&#xff0c;但在经过一段时间或几个小时后&#xff0c;VI前面板出现错误输出&#xff0c;导致数据传输失败。虽然“分布式系统…

equals方法重写--自写Person类

1.Object类的equals方法&#xff08;源码&#xff09; public boolean equals(Object obj) {return (this obj);//判断如果比较的两个对象是同一个对象&#xff0c;则返回true} 2.String类重写Object类的equals方法&#xff08;源码&#xff09; public boolean equals(Obje…

Git的初次使用

一、下载git 找淘宝的镜像去下载比较快 点击这里 二、配置git 1.打开git命令框 2.设置配置 git config --global user.name "你的用名"git config --global user.email "你的邮箱qq.com" 3.制作本地仓库 新建一个文件夹即可&#xff0c;然后在文件夹…

网络一些相关术语

目录 网络一些相关术语 转发平面效率 可扩展性 控制平面 网络拓扑 服务质量&#xff08;QoS&#xff09; 网络协议 网络带宽 网络拥塞 网络安全 网络冗余 网络切片 网络延迟 网络地址转换&#xff08;NAT&#xff09; 虚拟专用网络&#xff08;VPN&#xff09; …

尚硅谷-react教程-求和案例-优化2-Provider组件的使用-笔记

在这篇文章的基础上&#xff0c;https://blog.csdn.net/weixin_41987016/article/details/143257435?spm1001.2014.3001.5501 继续优化&#xff0c; 借助Provider批量的给整个应用里面的所有的容器组件的添加store 原来的,src/index.js import React from "react&quo…

从0开始深度学习(17)——数值稳定性和模型初始化

在每次训练之前&#xff0c;都会对模型的参数进行初始化&#xff0c;初始化方案的选择在神经网络学习中起着举足轻重的作用&#xff0c; 它对保持数值稳定性至关重要。 我们选择哪个函数以及如何初始化参数可以决定优化算法收敛的速度有多快。 糟糕选择可能会导致我们在训练时遇…

云电脑的真实使用体验

最近这几年&#xff0c;关于云电脑的宣传越来越多。 小枣君之前曾经给大家介绍过云电脑&#xff08;链接&#xff09;。简单来说&#xff0c;它属于云计算的一个应用。通过在云端虚拟出一些虚拟电脑&#xff0c;然后让用户可以远程使用&#xff08;仍然需要借助本地电脑&#x…

jupyter notebook改变默认启动路径

安装好Anaconda 3以后,就可以使用Jupyter notebook了,但是我们打开Jupyter notebook后,发现界面是一个默认的目录,这个目录在哪里?如果想把自己写的程序文件保存在自己新建的一个文件夹里,修改默认目录到自建的文件夹下,该如何做呢! 先看一下Jupyter notebook的默认界…

【ubuntu18.04】ubuntu18.04升级cmake-3.29.8及还原系统自带cmake操作说明

参考链接 cmake升级、更新&#xff08;ubuntu18.04&#xff09;-CSDN博客 升级cmake操作说明 下载链接 Download CMake 下载版本 下载软件包 cmake-3.30.3-linux-x86_64.tar.gz 拷贝软件包到虚拟机 cp /var/run/vmblock-fuse/blockdir/jrY8KS/cmake-3.29.8-linux-x86_64…

【华为路由】OSPF多区域配置

网络拓扑 设备接口地址 设备 端口 IP地址 RTA Loopback 0 1.1.1.1/32 G0/0/0 10.1.1.1/24 RTB Loopback 0 2.2.2.2/32 G0/0/0 10.1.1.2/24 G0/0/1 10.1.2.1/24 RTC Loopback 0 3.3.3.3/32 G0/0/0 10.1.2.2/24 G0/0/1 10.1.3.1/24 RTD Loopback 0 4.4.4…

大模型Transformer笔记:KV缓存

1 MHA&#xff08;Multi-Head Attention&#xff09; 最经典的多头注意力 等价于多个独立的单头注意力的拼接 对于LLM来说&#xff0c;一般都是自回归地一个一个token的输出&#xff0c;也就相当于只有Transformer的decoder input在变化&#xff0c;之前作为prompt部分的是不变…

java智能物流管理系统源码(springboot)

项目简介 智能物流管理系统实现了以下功能&#xff1a; 智能物流管理系统的主要使用者分为管理员&#xff0c;顾客&#xff0c;员工&#xff0c;店主。功能有个人中心&#xff0c;顾客管理&#xff0c;员工管理&#xff0c;店主管理&#xff0c;门店信息管理&#xff0c;门店…

【制造业&电子产品】电脑电子元件检测系统源码&数据集全套:改进yolo11-TADDH

改进yolo11-SCConv等200全套创新点大全&#xff1a;电脑电子元件检测系统源码&#xff06;数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.24 注意&#xff1a;由于项目一直在更新迭代&#xff0c;上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片或者…

蓝桥杯题目理解

1. 一维差分 1.1. 小蓝的操作 1.1.1. 题目解析&#xff1a; 这道题提到了对于“区间”进行操作&#xff0c;而差分数列就是对于区间进行操作的好方法。 观察差分数列&#xff1a; 给定数列&#xff1a;1 3 5 2 7 1 差分数列&#xff1a;1 2 2 -3 5 6 题目要求把原数组全部…

基于Springboot+Vue的食品商城系统 (含源码数据库)

1.开发环境 开发系统:Windows10/11 架构模式:MVC/前后端分离 JDK版本: Java JDK1.8 开发工具:IDEA 数据库版本: mysql5.7或8.0 数据库可视化工具: navicat 服务器: SpringBoot自带 apache tomcat 主要技术: Java,Springboot,mybatis,mysql,vue 2.视频演示地址 3.功能 这个系…

duilib的应用 在双屏异分辨率的显示器上 运行显示不出来

背景&#xff1a;win11&#xff0c;duilib应用&#xff0c;双显示器&#xff0c;两台分辨率相同&#xff0c;分别设置不同的缩放以后&#xff0c;应用运行以后&#xff0c;程序闪一下消失或者程序还在&#xff0c;但是UI显示不出来。 原因 窗口风格设置不合理&#xff0c;所以…