前后端分离案例--权限系统(跨域请求)

2023-11-08

权限系统:

1、前端:vue + elementui + axios + css + html

2、后端:springboot + mybatis-plus + nybatis + druid + shiro + swagger2 + redis

1、前端界面及按钮事件实现

1.1 登录页面的构建

1.1.1 Login.vue文件

<template>
    <div id="aps">
        <div id="con">
            <!-- 头像 -->
            <div class="avatar_box">
                <el-image :src="avatar" style="border-radius: 50%;width: 100%;height: 100%;">
                    <div slot="placeholder" class="image-slot" >
                        加载中<span class="dot">...</span>
                    </div>
                </el-image>
            </div>
            <el-form :model="loginForm" :rules="rules" ref="loginForm" class="login-ruleForm">
                <el-form-item label="账号" prop="username">
                    <el-input v-model="loginForm.username" style="width: 200px;"></el-input>
                </el-form-item>
                <el-form-item label="密码" prop="password">
                    <el-input type="password" v-model="loginForm.password" style="width: 200px;"></el-input>
                </el-form-item>
                <el-form-item style="margin-left: 0px; text-align: center">
                    <el-button type="primary" size="big">登录</el-button>
                    <!--<el-button @click="register" size="small">注册</el-button>-->
                </el-form-item>
            </el-form>
        </div>
    </div>
</template>
 
<script>
    export default {
        name: "Login",
        data() {
            return {
                avatar:"",
                loginForm: {
                    username:"",
                    password:""
                },
                rules: {
                    username: [
                        {required: true, message: '请输入账号名称', trigger: 'blur'}
                    ],
                    password: [
                        {required: true, message: '请输入密码', trigger: 'blur'}
                    ]
                },
                registerFormVisible: false,
                registerForm:{},
            }
        },
        methods: {
 
        }
    }
</script>
 
<style>
html, body {
    height: 100%;
}
body {
    margin: 0px;
    overflow-x: hidden;
}
#con{
    border: 1px solid gray;
    border-radius: 10px;
    width: 400px;
    height: 280px;
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    padding: 20px;
    text-align: center;
    background: white;
    opacity:0.8;
}
#aps{
    width: 100%;
    height: 100%;
    background-image: url("../assets/images/background3.jpg");
    background-size: 100% 100%;
    background-position: center center;
    overflow: auto;
    background-repeat: no-repeat;
    position: fixed;
    line-height: 100%;
}
#con>.avatar_box{
    height: 100px;
    width: 100px;
    border: 1px solid #eee;
    border-radius: 50%;
    padding: 10px;
    box-shadow: 0 0 10px #ddd;
    position: absolute;
    left: 50%;
    transform: translate(-50%, -50%);
    background-color: #fff;
}
.login-ruleForm {
    position: absolute;
    bottom: 0;
    width: 100%;
    padding: 0 50px;
    box-sizing: border-box;
}
</style>

1.1.2 App.vue

<template>
  <div id="app">
    <router-view/>
  </div>
</template>
 
<script>
 
export default {
  name: 'app',
  components: {
 
  }
}
</script>
 
<style>
 
</style>

1.1.3 router/index.js

import Vue from 'vue'
import VueRouter from 'vue-router'
 
import Login from '../views/Login.vue'
 
Vue.use(VueRouter)
 
const routes = [
  {
    path: '/',
    redirect: '/login'
  },
  {
    path: '/login',
    name: 'Login',
    component: Login
  }
]
 
const router = new VueRouter({
  routes
})
 
export default router

 

 1.2 登录按钮事件

如果想在vue工程中使用axios进行异步请求,则需要在main.js中导入axios
[1]//导入axios
import axios from "axios";
[2]//把axios挂载到vue对象中,以后在vue中如果使用axios直接可以用$http名称
Vue.prototype.$http=axios
 

1.2.1 main.js文件

import Vue from 'vue'
import App from './App.vue'
import router from './router'
import './plugins/element.js'
//导入axios
import axios from "axios";
 
Vue.config.productionTip = false
 
//把axios挂载到vue对象中,以后在vue中如果使用axios直接可以使用$http名称
Vue.prototype.$http = axios
 
new Vue({
  router,
  render: h => h(App)
}).$mount('#app')

1.2.2 Login.vue文件

在Login.vue文件中点击登录按钮,向后台服务器发送axios异步请求

methods: {
    login(){
        //表单校验
        this.$refs['loginForm'].validate((valid)=>{
            if (valid){
                //url:后端登录接口的路径
                this.$http.post("http://localhost:8080/login",this.loginForm).then(result=>{
                    console.log(result)
                })
            }
        })
    }
}

2、后端登录接口

2.1 pom.xml

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.3.12.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.gjx</groupId>
    <artifactId>springboot-vue</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>springboot-vue</name>
    <description>springboot-vue</description>
    <properties>
        <java.version>1.8</java.version>
    </properties>
    <dependencies>
        <!--引入swagger的启动依赖-->
        <dependency>
            <groupId>com.spring4all</groupId>
            <artifactId>swagger-spring-boot-starter</artifactId>
            <version>1.9.1.RELEASE</version>
        </dependency>
        <!--引入swagger的图形界面-->
        <dependency>
            <groupId>com.github.xiaoymin</groupId>
            <artifactId>swagger-bootstrap-ui</artifactId>
            <version>1.7.8</version>
        </dependency>
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-boot-starter</artifactId>
            <version>3.5.2</version>
        </dependency>
        <!--代码生成器-->
        <dependency>
            <groupId>com.baomidou</groupId>
            <artifactId>mybatis-plus-generator</artifactId>
            <version>3.5.2</version>
        </dependency>
        <dependency>
            <groupId>org.freemarker</groupId>
            <artifactId>freemarker</artifactId>
            <version>2.3.31</version>
        </dependency>
 
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.mybatis.spring.boot</groupId>
            <artifactId>mybatis-spring-boot-starter</artifactId>
            <version>2.2.2</version>
        </dependency>
 
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
 
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>
        </plugins>
    </build>
 
</project>

 

2.2 mybatis-plus代码生成器

public class CodeGenerator {
    public static void main(String[] args) {
        FastAutoGenerator.create("jdbc:mysql://192.168.1.29:3306/acl_permission?serverTimezone=Asia/Shanghai", "root", "990412")
                .globalConfig(builder -> {
                    builder.author("gjx") // 设置作者
                            .enableSwagger() // 开启 swagger 模式
                            .fileOverride() // 覆盖已生成文件
                            .outputDir(".\\src\\main\\java"); // 指定输出目录
                })
                .packageConfig(builder -> {
                    builder.parent("com") // 设置父包名
                            .moduleName("gjx") // 设置父包模块名
                            .pathInfo(Collections.singletonMap(OutputFile.xml, ".\\src\\main\\resources\\mapper\\")); // 设置mapperXml生成路径
                })
                .strategyConfig(builder -> {
                    builder.addInclude("acl_permission","acl_role","acl_user") // 设置需要生成的表名
                            .addTablePrefix("acl_"); // 设置过滤表前缀
                })
                .templateEngine(new FreemarkerTemplateEngine()) // 使用Freemarker引擎模板,默认的是Velocity引擎模板
                .execute();
 
    }
}

2.3 配置application文件

server.port=8081
# 配置mysql数据源
spring.datasource.driver-class-name=com.mysql.cj.jdbc.Driver
spring.datasource.url=jdbc:mysql://192.168.1.29:3306/acl_permission?serverTimezone=Asia/Shanghai
spring.datasource.username=root
spring.datasource.password=990412
 
# mybatis mapper映射文件的路径
mybatis.mapper-locations=classpath:mapper/*.xml
# mybatis-plus的日志文件stdout
mybatis-plus.configuration.log-impl=org.apache.ibatis.logging.stdout.StdOutImpl

 

2.4 前端传递的参数接收类vo包下

2.5 接口

@RestController
public class LoginController {
 
    @Autowired
    private IUserService iUserService;
 
    @PostMapping("/login")
    public CommonResult login(@RequestBody LoginVO loginVO){
        User login = iUserService.login(loginVO);
        if (login!=null){
            return new CommonResult(2000,"登录成功",null);
        }
        return new CommonResult(5000,"登录失败",null);
    }
}

 

2.6 使用swagger2进行接口测试

@Configuration
public class SwaggerConfig {
 
    @Autowired
    Docket docket;
    @Bean
    public Docket docket(){
        Docket docket = new Docket(DocumentationType.SWAGGER_2)
                .apiInfo(apiInfo())
                .select()
                .apis(RequestHandlerSelectors.basePackage("com.gjx.controller"))
                .build();
        return docket;
    }
 
    private ApiInfo apiInfo(){
 
        Contact DEFAULT_CONTACT = new Contact("dumpling", "https://taobao.com", "1983275549@qq.com");
        ApiInfo apiInfo = new ApiInfo("dumpling的接口文档", "关于Student表的一些基本操作", "1.0", "http://192.168.1.29:8080/",
                DEFAULT_CONTACT, "Apache 2.0", "http://192.168.1.29:8080/", new ArrayList<VendorExtension>());
        return apiInfo;
    }
}

测试

3、前端调用后端登录接口

 

我们会发现报了不支持跨域请求的错误

当使用异步请求从一个网址访问另一个网址时可能会出现跨域问题。
前提:
   1. 必须为异步请求
   2. 当端口号或协议或ip不同时则会出现跨域

 

什么是跨域呢?

前端发起请求的域与该请求指向的资源所在的域不一样,凡是发送请求的url的 协议、域名、端口号三者之间任意一者与当前页面地址不同的请求。这里的域指的是这样的一个概念:我们认为若协议 + 域名 + 端口号均相同,那么就是同域。

出现了两个请求: 有一个请求的方式为: OPTIONS 和真实的请求方式

 OPTIONS先头部队。---探视后台有没有解决跨域。

解决方法:

1.前端解决

2.后端解决---->这里也有几种方式:  

【1】可以借助nginx.  

【2】在代码中解决

在控制层接口上添加@CrossOrigin ,不过每一个controller文件都许哟啊加上这个注解

 

 

 

这个注解的一些属性

(origins = {"192.168.0.111:8080","192.168.0.120:8081"},allowedHeaders="运行哪些请求头跨域",methods={"GET","POST"})

origins: 允许哪些域可以跨域访问我这个接口
allowedHeaders:允许哪些请求头信息跨域
methods: 允许哪些请求方式跨域

设置一个全局跨域配置类。

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.cors.CorsConfiguration;
import org.springframework.web.cors.UrlBasedCorsConfigurationSource;
import org.springframework.web.filter.CorsFilter;
 
@Configuration
public class CorsConfig {
 
    // 当前跨域请求最大有效时长。这里默认1天
    private static final long MAX_AGE = 24 * 60 * 60;
 
    @Bean
    public CorsFilter corsFilter() {
        UrlBasedCorsConfigurationSource source = new UrlBasedCorsConfigurationSource();
        CorsConfiguration corsConfiguration = new CorsConfiguration();
        corsConfiguration.addAllowedOrigin("*"); // 1 设置访问源地址
        corsConfiguration.addAllowedHeader("*"); // 2 设置访问源请求头
        corsConfiguration.addAllowedMethod("*"); // 3 设置访问源请求方法
        corsConfiguration.setMaxAge(MAX_AGE);
        source.registerCorsConfiguration("/**", corsConfiguration); // 4 对接口配置跨域设置
        return new CorsFilter(source);
    }
}

 

这个配置类和上面的@CrossOrigin注解两者只能选其一。

 

4、登录成功后前端路由跳转

 5、将用户会话信息存储在redis中

上面咱们写的登录,后端没有保存数据 前端也没有拿到数据进行保存

 

5.1 修改登录的接口

pom.xml文件
 
<!--引入jedis-->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-redis</artifactId>
</dependency>

 

配置文件
 
#redis数据库配置
spring.redis.host=localhost
spring.redis.port=6379
@RestController
@Api("登录的接口类")
//@CrossOrigin
public class LoginController {
 
    @Autowired
    private IUserService iUserService;
 
    @Autowired
    private RedisTemplate redisTemplate;
 
    @PostMapping("/login")
    @ApiOperation("登录接口")
    public CommonResult login(@RequestBody LoginVO loginVO){
        User login = iUserService.login(loginVO);
        if (login!=null){
            String token = UUID.randomUUID().toString();
            ValueOperations forValue = redisTemplate.opsForValue();
            forValue.set(token,login,24, TimeUnit.HOURS);
            return new CommonResult(2000,"登录成功",token);
        }
        return new CommonResult(5000,"登录失败",null);
    }
}

5.2 修改前端登录方法

 

 后面每次请求都可以携带该token,每次请求都得要人为添加参数token, 我们可以使用axios得请求拦截器。

 

在登录成功之后,使用一个按钮测试token是否在请求头中

 

然后观察后台能否获取token

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前后端分离案例--权限系统(跨域请求) 的相关文章

  • 如何将画廊意图中的“打开”更改为“完成”?

    我使用以下意图打开画廊来选择多个图像和视频 Intent intent new Intent intent setType image video intent putExtra Intent EXTRA ALLOW MULTIPLE tr
  • 使用 Ant 将非代码资源添加到 jar 文件

    我正在将 java 应用程序打包成 jar 文件 我正在使用 ant 和 eclipse 我实际上需要在 jar 中直接在根文件夹下包含几个单独的非代码文件 xml 和 txt 文件 而不是与代码位于同一位置 我正在尝试使用includes
  • JVisualVM/JConsole 中的 System.gc() 与 GC 按钮

    我目前正在测试处理 XML 模式的概念验证原型 并围绕一个非常消耗内存的树自动机外部库 我已经获得了源代码 构建 我想绘制 真实峰值 堆 随着模式大小的增加 不同运行的内存消耗 使用的指标符合我的目的并且不会影响问题 或者至少是它的合理近似
  • 如何在 Antlr4 中为零参数函数编写语法

    我的函数具有参数语法 如下面的词法分析器和解析器 MyFunctionsLexer g4 lexer grammar MyFunctionsLexer FUNCTION FUNCTION NAME A Za z0 9 DOT COMMA L
  • 打印星号的 ASCII 菱形

    我的程序打印出这样的钻石 但只有当参数或菱形的每一面为4 例如如果我输入6 底部三角形的间距是错误的 我一直在试图找出答案 当参数改变时 底部的三角形不会改变 只有顶部的三角形会改变 它只适用于输入4 public static void
  • Spring RestTemplate 使用 cookie 遵循重定向

    最近我遇到了一个问题 我需要做一个GET请求远程服务 我假设使用一个简单的 servlet 并且 RestTemplate 返回Too many redirects 经过一番调查 似乎对指定远程服务发出的第一个请求实际上只是一个 302 重
  • Spring Data JPA 选择不同

    我有一个情况 我需要建立一个select distinct a address from Person a 其中地址是 Person 内的地址实体 类型的查询 我正在使用规范动态构建我的 where 子句并使用findAll Specifi
  • 如何将 Mat (opencv) 转换为 INDArray (DL4J)?

    我希望任何人都可以帮助我解决这个任务 我正在处理一些图像分类并尝试将 OpenCv 3 2 0 和 DL4J 结合起来 我知道DL4J也包含Opencv 但我认为它没什么用 谁能帮我 如何转换成 INDArray 我尝试阅读一些问题here
  • ConcurrentHashMap 内部是如何工作的?

    我正在阅读有关 Java 并发性的 Oracle 官方文档 我想知道Collection由返回 public static
  • 自动生成Flyway的迁移SQL

    当通过 Java 代码添加新模型 字段等时 JPA Hibernate 的自动模式生成是否可以生成新的 Flyway 迁移 捕获自动生成的 SQL 并将其直接保存到新的 Flyway 迁移中 以供审查 编辑 提交到项目存储库 这将很有用 预
  • 套接字的读写如何同步?

    我们创建一个套接字 在套接字的一侧有一个 服务器 在另一侧有一个 客户端 服务器和客户端都可以向套接字写入和读取 这是我的理解 我不明白以下事情 如果服务器从套接字读取数据 它在套接字中是否只看到客户端写入套接字的内容 我的意思是 如果服务
  • 使用 Guice 优化注册表

    你好 今天思考了一种优化 有一些疑问 语境 我正在使用 Guice 2 进行 Java 开发 在我的网络应用程序中 我有一个转换器注册表 可以即时转换为某种类型 转换器描述如下 public class StringToBoolean im
  • Java Swing For mac 中的 DJ Native Swing 浏览器

    我有一个用 Swing 制作的 Java 应用程序 并且使用了一个 DJ Native Swing 浏览器 当我尝试在 OS X 上使用它时 它抛出了一个NoClassDefFoundError尽管我添加了 swt jar 但始终如此 有人
  • 如何在 Spring 属性中进行算术运算?

  • 内部存储的安全性如何?

    我需要的 对于 Android 我需要永久保存数据 但也能够编辑 并且显然是读取 它 用户不应访问此数据 它可以包含诸如高分之类的内容 用户不得对其进行编辑 我的问题 我会 并且已经 使用过Internal Storage 但我不确定它实际
  • 在 SWT/JFace RCP 应用程序中填充巨大的表

    您将如何在 SWT 表中显示大量行 巨大是指超过 20K 行 20 列的东西 不要问我为什么需要展示那么多数据 这不是重点 关键是如何让它尽可能快地工作 这样最终用户就不会厌倦等待 每行显示某个对象的实例 列是其属性 一些 我想使用 JFa
  • org.apache.commons.net.io.CopyStreamException:复制时捕获 IOException

    我正在尝试使用以下方法中的代码将在我的服务器中创建的一些文件复制到 FTP 但奇怪的是我随机地低于错误 我无法弄清楚发生了什么 Exception org apache commons net io CopyStreamException
  • 配置“DataSource”以使用 SSL/TLS 加密连接到 Digital Ocean 上的托管 Postgres 服务器

    我正在尝试托管数据库服务 https www digitalocean com products managed databases on 数字海洋网 https en wikipedia org wiki DigitalOcean 创建了
  • 在java中使用多个bufferedImage

    我正在 java 小程序中制作游戏 并且正在尝试优化我的代码以减少闪烁 我已经实现了双缓冲 因此我尝试使用另一个 BufferedImage 来存储不改变的游戏背景元素的图片 这是我的代码的相关部分 public class QuizApp
  • Spring表单ModelAttribute字段验证避免400 Bad Request错误

    我有一个ArticleFormModel包含正常发送的数据html form由 Spring 使用注入 ModelAttribute注释 即 RequestMapping value edit method RequestMethod PO

随机推荐

  • Python进阶-----面向对象1.0(对象和类的介绍、定义)

    目录 前言 面向过程和面向对象 类和对象 Python中类的定义 1 类的定义形式 2 深层剖析类对象 前言 感谢各位的一路陪伴 我学习Python也有一个月了 在这一个月里我收获满满 学到了很多知识 每当我学会了一个新的知识点我会发表一篇
  • 压控恒流源学习笔记

    激光二极管 以下称LD 即使采用恒流驱动 其光输出功率也会随温度变化而发生大的变动 因此必须监视它的光输出 利用反馈环路来控制驱动电流 这即是自动输出控制APC AutomatICPowerControl 电路 第一种 调节激光亮度 可以依
  • Java——ArrayList基本使用

    1 简介 ArrayList是实现List接口的 底层采用数组实现 ArrayList 实现了Cloneable接口 即覆盖了函数clone 能被克隆 ArrayList 实现java io Serializable接口 这意味着Array
  • LRU缓存机制

    LRU缓存机制LeetCode146官方题解 struct DLinkedNode int key value DLinkedNode prev DLinkedNode next DLinkedNode key 0 value 0 prev
  • spring boot 启动报错,找不到DataSource

    报错信息如下 16 39 11 372 1653 main WARN o s b c e AnnotationConfigEmbeddedWebApplicationContext AbstractApplicationContext ja
  • 【C++】-- 哈希算法

    目录 一 哈希概念 1 插入和查找 2 哈希表 3 常见的哈希函数 1 直接定址法 2 除留余数法 二 用闭散列解决哈希冲突 1 线性探测法介绍 2 线性探测的实现 1 状态 2 定义HashData 3 哈希表 4 查找 5 插入 6 删
  • sparkStreaming:实时流数据详解

    目录 一 概述 二 wordCount示例 三 初始化StreamingContext 四 DStreams 离散数据流 五 输入DStream和接收器 Basic sources File Streams Custom Receivers
  • js 实现鼠标点击tab栏选项卡切换,下面相应内容跟随变化

  • Github上 简单易用的 Android ViewModel Retrofit框架

    RequestViewModel 长期更新 支持网络请求的ViewMode框架 ViewModel LiveData Retrofit github 地址 https github com miaotaoii RequestViewMode
  • [980]Windows host配置域名

    程序员开发中可能会需要域名访问程序 说白了就是修改hosts文件 过程如下 1 找到本机hosts文件路径一般位置在 C Windows System32 drivers etc 2 右键编辑hosts文件 在最下面增加 127 0 0 1
  • java的格式化时间工具类

    代码 public class DateTimeUtil private static final Logger logger LoggerFactory getLogger DateTimeUtil class public static
  • 全链路监控之pinpoint

    一 pinpoint出现与其他相似概念比较 1 pinpoint概念 pinpoint是由java PHP编写而成的 用来对大规模的分布式系统提供应用性能管理 pinpoint可以解决复杂架构下的拓扑解析与性能分析 2 pinpoint的特
  • NCNN、OpenVino、 TensorRT、MediaPipe、ONNX,各种推理部署架构,到底哪家强?

    以深度学习为主的人工智能算法模型在日常AI应用中逐渐占据主流方向 相关的各类产品也是层出不穷 我们平时所看到的AI产品 像刷脸支付 智能语音 银行的客服机器人等 都是AI算法的具体落地应用 AI技术在具体落地应用方面 和其他软件技术一样 也
  • 数字图像与视频处理 作业模板 Latex版

    搞了好久 终于把这个简单的模板给拼出来了 不熟悉想做点什么真的太难 做的时候一点点小的问题就可能发去半天的时间都找不出来 比如到最后完全没有问题的时候bibtex命令就是通不过 后来我把文件名改短了 去掉分隔符 成功了 所以说不懂的事情要从
  • 黑窗口下带进度条的http下载

    package main import flag fmt io log net http os strconv strings time github com cheggaaa pb var url flag String url The
  • mac下pycharm使用小技巧--持续更新

    Pycharm使用小技巧 pycharm创建新文件自动添加文件头注释 背景 我们平时在使用pycharm发现有些大神创建一个新文件的时候会自动在文件头添加一些注释 像是有文件路径 创建时间 创建人 集成平台等信息 但是我们自己创建的时候就没
  • 论文翻译:2021_Performance optimizations on deep noise suppression models

    Python微信订餐小程序课程视频 https blog csdn net m0 56069948 article details 122285951 Python实战量化交易理财系统 https blog csdn net m0 5606
  • 快速排序---从大到小和从小到大(Java)

    快速排序 快速排序由于排序效率在同为O nlogn 的几种排序方法中效率较高 因此经常被采用 再加上快速排序使用了分治法的思想 算是基础排序中比较高档的一种排序了 基本思想 1 先从数列中取出一个数作为基准数 可以是第一个 也可是中间的或者
  • 大数据系统体系架构(含图示)

    目录 1 大数据体系架构图 2 数据采集层 3 数据计算层 4 数据服务层 5 数据应用层 1 大数据体系架构图 2 数据采集层 阿里的的日志采集包括两大体系 Aplus JS是Web端的日志采集技术方案 UserTrack是APP端的日志
  • 前后端分离案例--权限系统(跨域请求)

    权限系统 1 前端 vue elementui axios css html 2 后端 springboot mybatis plus nybatis druid shiro swagger2 redis 1 前端界面及按钮事件实现 1 1