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

news2024/10/26 20:00:54

在这里插入图片描述

✅作者简介: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. 未来展望

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

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

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

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

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

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

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

六、投票

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

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

相关文章

QT界面开发:图形化设计、资源文件添加

设计界面介绍 此时我们创建项目时就可以选择添加UI选项了。 添加完之后&#xff0c;我们可以看到&#xff0c;文件中多出了一个存放界面文件的目录&#xff0c;下面有个.ui的界面文件。甚至pro的项目文件中也会添加一项内容。 我们点击界面文件中的.ui文件&#xff0c;我们可以…

mono源码交叉编译 linux arm arm64全过程

初级代码游戏的专栏介绍与文章目录-CSDN博客 我的github&#xff1a;codetoys&#xff0c;所有代码都将会位于ctfc库中。已经放入库中我会指出在库中的位置。 这些代码大部分以Linux为目标但部分代码是纯C的&#xff0c;可以在任何平台上使用。 源码指引&#xff1a;github源…

有道在线翻译外,这三款翻译工具值得一试!

在众多翻译工具中&#xff0c;有道在线翻译是很多小伙伴都会用的。而市场上当然也有很多好用的翻译工具&#xff0c;这里就来给大家介绍几个&#xff01; 福昕在线翻译 直达链接&#xff1a; fanyi.pdf365.cn/ 操作教程&#xff1a;立即获取 这也是一款在线翻译工具。它以…

解决 VScode 每次打开都是上次打开的文件问题

每次使用 VScode 打开总是上次的文件&#xff0c;可以简单设置即可&#xff0c;记录一下。 VScode Visual Studio Code&#xff08;简称VSCode&#xff09;是一个由微软开发的免费、开源的代码编辑器。它支持多种编程语言&#xff0c;并提供了代码高亮、智能代码补全、代码重构…

【分布式知识】分布式对象存储组件-Minio

文章目录 什么是minio核心特点&#xff1a;使用场景&#xff1a;开发者工具&#xff1a;社区和支持&#xff1a; 核心概念什么是对象存储&#xff1f;MinIO 如何确定对对象的访问权限&#xff1f;我可以在存储桶内按文件夹结构组织对象吗&#xff1f;如何备份和恢复 MinIO 上的…

【力扣 + 牛客 | SQL题 | 每日4题】牛客大厂笔试真题SQLW6, W7, W8

1. 牛客大厂笔试真题SQLW6&#xff1a;统计所有课程参加培训人次 1.1 题目&#xff1a; 描述 某公司员工培训信息数据如下&#xff1a; 员工培训信息表cultivate_tb(info_id-信息id,staff_id-员工id,course-培训课程)&#xff0c;如下所示&#xff1a; 注&#xff1a;该公…

不依赖F8键,如何快速进入电脑安全模式

如果不希望通过狂按F8键进入安全模式&#xff0c;可以尝试以下几种方法来进入电脑的安全模式&#xff1a; 方法一&#xff1a;使用Ctrl键 关闭电脑并重新启动。在电脑启动过程中&#xff0c;按下Ctrl键&#xff08;需要在Windows系统启动画面出现之前就开始按&#xff09;。当…

基于Django+Python的房屋信息可视化及价格预测系统设计与实现(带文档)

项目运行 需要先安装Python的相关依赖&#xff1a;pymysql&#xff0c;Django3.2.8&#xff0c;pillow 使用pip install 安装 第一步&#xff1a;创建数据库 第二步&#xff1a;执行SQL语句&#xff0c;.sql文件&#xff0c;运行该文件中的SQL语句 第三步&#xff1a;修改源…

Linux: network: wireshark IO图的一个问题

今天遇到一个问题&#xff0c;发现wireshark画的IO图&#xff0c;前几秒没有数据&#xff0c;但是根据Raw的pcap看&#xff0c;是有包的&#xff0c;这就迷惑了。 经同事提醒&#xff0c;这个IO在设置了多个画图filter的时候&#xff0c;可能导致开始前几秒没有输出。如下图 这…

Java中Thread类的基本认识与使用(如果想知道Java中有关Thread类的基本知识,那么只看这一篇就足够了!)

前言&#xff1a;在Java中&#xff0c;Thread类是实现多线程编程的核心。它允许程序同时执行多个任务&#xff0c;提高应用程序的响应能力和性能。通过Thread类&#xff0c;开发者可以轻松创建和管理线程&#xff0c;并实现复杂的并发操作。接下来&#xff0c;我们将探讨Thread…

Java中自增自减,赋值,逻辑,三元运算符

自增自减运算符 在某个变量前面或者后面加一--在某个变量前面或者后面减一 可以看见&#xff0c;当a输出时&#xff0c;a是没有变化的&#xff0c;说明如果是在变量后就是先使用再增加&#xff0c;而b输出时&#xff0c;b增加了1&#xff0c;说明如果是在变量前面就是先增加再…

机器人转人工时,开启实时质检(mod_cti基于FreeSWITCH)

文章目录 前言联系我们实现步骤1. 修改拨号方案2. 启用拨号方案 前言 在客户与机器人对话中&#xff0c;是不能开启质检功能的。因为机器人识别会与质检识别产生冲突。如果用户想通过机器人转接到人工时&#xff0c;开启质检功能&#xff0c;记录客户与人工之间的对话。应该如…

《a16z : 2024 年加密货币现状报告》解析

加密社 原文链接&#xff1a;State of Crypto 2024 - a16z crypto译者&#xff1a;AI翻译官&#xff0c;校对&#xff1a;翻译小组 当我们两年前第一次发布年度加密状态报告的时候&#xff0c;情况跟现在很不一样。那时候&#xff0c;加密货币还没成为政策制定者关心的大事。 比…

Python Numpy 实现神经网络自动训练:反向传播与激活函数的应用详解

Python Numpy 实现神经网络自动训练&#xff1a;反向传播与激活函数的应用详解 这篇文章介绍了如何使用 Python 的 Numpy 库来实现神经网络的自动训练&#xff0c;重点展示了反向传播算法和激活函数的应用。反向传播是神经网络训练的核心&#xff0c;能够通过计算梯度来优化模…

unity项目导出安卓工程后,在AndroidStudio打包报错:unityLibrary:BuildIl2CppTask‘.

下面这个是我在unity开发者社区提问后&#xff0c;他们回答得&#xff1a; 解决方案&#xff1a;我这边按照这几个方案检查了下&#xff0c;NDK和JDK都没问题&#xff0c;最后重启电脑才解决的&#xff0c;应该是文件被锁定了&#xff0c;我用的windows系统的。 验证&#xff…

达梦数据守护集群_备库重建(二)

目录 1、概述 1.1 实验场景 1.2 实验环境 2、故障模拟 3、重建方案1 3.1 登录主库、联机备份 3.2 脱机还原备库 3.3 模拟新业务数据 3.4 主库备份归档 3.5 利用归档恢复备库 3.6 启动备库 3.7 验证 4、重建方案2 4.1 登录主库、联机备份 4.2 脱机还原备库 4.3 …

是否有必要考PG认证?

如今PG很火,我在BOSS招聘查了一下,确实很多职位需要PG.那么考个PG认证确实很有必要! 当然这么快给出肯定答案,这公众号是发不出来的.必须有300个字才可以哦! 大家友情支持下,点点广告! 听我来细说 1.2.3 本小仙40有余可以说是80后.我们这代80后什么好事都没捞着,糟糕的事没有…

基于docker 部署redis

1、拉取镜像 docker pull redis:latest如果拉取失败可以尝试下配置镜像源&#xff0c;具体参考如下&#xff0c;目前暂可以使用 Docker切换镜像源-CSDN博客 2、创建配置文件 mkdir /usr/local/redis/conf vim redis.conf bind 0.0.0.0#protected-mode no port 6379 tcp-b…

用更多的钱买电脑而不是手机

如果&#xff0c;我们对自己的定义是知识工作者&#xff0c;那么在工作、学习相关的电子设备投入上&#xff0c;真的别舍不得花钱。 需要留意的是&#xff0c;手机&#xff0c;对于大部分在电脑前工作的人&#xff0c;不是工作设备。在我看来&#xff0c;每年投入到电脑的钱&…

前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等

HTML/CSS 面试题 什么是语义化 HTML&#xff1f; 说明&#xff1a;语义化 HTML 使用 HTML 标签来描述内容的含义&#xff0c;而不仅仅是其外观。使用语义化标签可以提高可读性和可访问性&#xff0c;并对 SEO 友好。示例&#xff1a; <header><h1>网站标题</h1&…