Vue中的Ajax 配置代理 slot插槽

news2025/1/11 20:04:37

4.1.Vue脚手架配置代理

本案例需要下载axiosnpm install axios

配置参考文档Vue-Cli devServer.proxy

vue.config.js 是一个可选的配置文件,如果项目的 (和 package.json 同级的) 根目录中存在这个文件,那么它会被 @vue/cli-service 自动加载。你也可以使用 package.json 中的 vue 字段,但是注意这种写法需要你严格遵照 **JSON **的格式来写

4.1.1.方法一

vue.config.js中添加如下配置

module.exports = { 
devServer : { 
  proxy:"http://localhost:5000" 
  } 
}

说明

  1. 优点:配置简单,请求资源时直接发给前端(8080)即可
  2. 缺点:不能配置多个代理,不能灵活的控制请求是否走代理
  3. 工作方式:若按照上述配置代理,当请求了前端不存在的资源时,才会将请求会转发给服务器 (优先匹配前端资源)

4.1.2.方法二

编写vue.config.js配置具体代理规则

module.exports = {
  devServer: {
    proxy: {
      '/api1': {                            // 匹配所有以 '/api1'开头的请求路径
        target: 'http://localhost:5000',    // 代理目标的基础路径
        pathRewrite: {'^/api1':''},         // 代理往后端服务器的请求去掉 /api1 前缀
        ws: true,                           // 用于支持websocket,默认值为true
        changeOrigin: true                  // 用于控制请求头中的host值,默认值为true 
      },
      '/api2': {
        target: 'http://localhost:5001',
        pathRewrite: {'^/api2': ''},
        changeOrigin: true
      }
    }
  }
}

/**
 * changeOrigin设置为true时,服务器收到的请求头中的host为:localhost:5000
 * changeOrigin设置为false时,服务器收到的请求头中的host为:localhost:8080
 * changeOrigin默认值为true
 */

说明

  1. 优点:可以配置多个代理,且可以灵活的控制请求是否走代理
  2. 缺点:配置略微繁琐,请求资源时必须加前缀

vue.config.js

const { defineConfig } = require('@vue/cli-service')

module.exports = {
  pages: {
    index: {
      // page 的入口
      entry: './src/main.js'
    }
  },
  // 关闭语法检查
  lintOnSave: false,
  // 开启代理服务器 (方式一)
  // devServer: { 
  //   proxy:"http://localhost:5000" 
  // }
   
  // 开启代理服务器 (方式二)
  devServer: {
    proxy: {
      '/api1': {
        target: 'http://localhost:5000',
        pathRewrite: {
          '^/api1': ''
        }
        // ws: true, //用于支持websocket,默认值为true
        // changeOrigin: true //用于控制请求头中的host值,默认值为true , 
      },
      '/api2': {
        target: 'http://localhost:5001',
        pathRewrite: {
          '^/api2': ''
        },
      }
    }
  }
}

src/App.vue

<template>
    <div>
        <button @click="getStudents">获取学生信息</button>
    </div>
</template> 

<script> 
    // 引入组件
    import axios from 'axios';
    export default { 
        name:'App',
        methods: {
            getStudents() {
                axios.get('http://localhost:8080/api1/students').then(
                    response => { 
                        console.log('请求成功了',response.data);
                    },
                    error => { 
                        console.log('请求失败了',error.message);
                    }
                )
            },
            getCars() {
                axios.get('http://localhost:8080/api2/cars').then(
                    response => { 
                        console.log('请求成功了',response.data); 
                    },
                    error => { 
                        console.log('请求失败了',error.message); 
                    }
                );
            }
        }
    }
</script>

在这里插入图片描述

4.2.GitHub用户搜索案例

public/index.html

<!DOCTYPE html>
<html lang="">
  <head>
    <meta charset="utf-8">
    <!-- 针对IE游览器的一个特殊配置,含义是让IE游览器以最高的渲染级别渲染页面 -->
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <!-- 开启移动端的理想视口 -->
    <meta name="viewport" content="width=device-width,initial-scale=1.0">
    <!-- 配置页签图标 -->
    <link rel="icon" href="<%= BASE_URL %>favicon.ico">

    <!-- 引入bootstrap样式 --> 
    <link rel="stylesheet" href="<%= BASE_URL %>css/bootstrap.css">

    <!-- 配置网页的标题 -->
    <title><%= htmlWebpackPlugin.options.title %></title>
  </head>
  <body>
    <!-- 当游览器不支持js时noscript中的元素就会被渲染-->
    <noscript>
      <strong>We're sorry but <%= htmlWebpackPlugin.options.title %> doesn't work properly without JavaScript enabled. Please enable it to continue.</strong>
    </noscript>
    <!-- 容器 -->
    <div id="app"></div>
    <!-- built files will be auto injected -->
  </body>
</html>

src/main.js

import Vue from 'vue';
import App from './App.vue';

Vue.config.productionTip = false;

new Vue({
  el: '#app',
  render: h => h(App),
  beforeCreate() {
    Vue.prototype.$bus = this; // 安装全局事件总线
  }
})

src/App.vue

<template>
    <div class="container">
        <Search/>
        <List/>
    </div>
</template> 

<script> 
    // 引入组件
    import Search from './components/Search.vue';
    import List from './components/List.vue';

    export default {
        name:'App',
        components:{
            Search,
            List
        },
    }
</script>

src/components/Search.vue

<template>
    <section class="jumbotron">
        <h3 class="jumbotron-heading">Search Github Users</h3>
        <div>
            <input type="text" placeholder="enter the name you search" v-model="keyWord"/>&nbsp;
            <button @click="searchUsers">Search</button>
        </div>
    </section>
</template>

<script>
    import axios from "axios";

    export default {
        name: "Search",
        data() {
            return {
                keyWord: ""
            };
        },
        methods: {
            searchUsers() {
                // 请求前更新List的数据
                this.$bus.$emit("updateListData", {
                    isLoading: true,
                    errMsg: "",
                    users: [],
                    isFirst: false,
                });
                axios.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(
                    (response) => {
                        console.log("请求成功了");
                        // 请求成功后更新List的数据
                        this.$bus.$emit("updateListData", {
                            isLoading: false,
                            errMsg: "",
                            users: response.data.items
                        });
                    },
                    (error) => {
                        // 请求后更新List的数据
                        this.$bus.$emit("updateListData", {
                            isLoading: false,
                            errMsg: error.message,
                            users: []
                        });
                    }
                );
            }
        }
    }
</script>

src/components/List.vue

<template>
    <div class="row">
        <!-- 展示用户列表 -->
        <div
                v-show="info.users.length"
                class="card"
                v-for="user in info.users"
                :key="user.login"
        >
            <a :href="user.html_url" target="_blank">
                <img :src="user.avatar_url" style="width: 100px" />
            </a>
            <p class="card-text">{{ user.login }}</p>
        </div>

        <!-- 展示欢迎词 -->
        <h1 v-show="info.isFirst">欢迎使用!</h1>
        <!-- 展示加载中 -->
        <h1 v-show="info.isLoading">加载中....</h1>
        <!-- 展示错误信息 -->
        <h1 v-show="info.errMsg">{{ info.errMsg }}</h1>
    </div>
</template>

<script>
    export default {
        name: "List",
        data() {
            return {
                info: {
                    isFirst: true,
                    isLoading: false,
                    errMsg: "",
                    users: [],
                }
            }
        },
        mounted() {
            this.$bus.$on("updateListData", (dataObj) => {
                    this.info = { ...this.info, ...dataObj };
                }
            );
        }
    }
</script>

<style scoped>
    album {
        min-height: 50rem; /* Can be removed; just added for demo purposes */
        padding-top: 3rem;
        padding-bottom: 3rem;
        background-color: #f7f7f7;
    }
    .card {
        float: left;
        width: 33.333%;
        padding: 0.75rem;
        margin-bottom: 2rem;
        border: 1px solid #efefef;
        text-align: center;
    }
    .card > img {
        margin-bottom: 0.75rem;
        border-radius: 100px;
    }
    .card-text {
        font-size: 85%;
    }
</style>

在这里插入图片描述

4.3.vue-resource

vue项目常用的两个Ajax

  1. axios:通用的Ajax请求库,官方推荐,效率高
  2. vue-resource:vue插件库,vue 1.x使用广泛,官方已不维护

下载vue-resourcenpm i vue-resource

src/main.js

import Vue from 'vue';
import App from './App.vue';
import vueResource from 'vue-resource';

Vue.config.productionTip = false;

Vue.use(vueResource);

new Vue({
  el: '#app',
  render: h => h(App),
  beforeCreate() {
    Vue.prototype.$bus = this; // 安装全局事件总线
  }
})

src/App.vue

<template>
    <div class="container">
        <Search/>
        <List/>
    </div>
</template> 

<script> 
    // 引入组件
    import Search from './components/Search.vue';
    import List from './components/List.vue';

    export default {
        name:'App',
        components:{
            Search,
            List
        },
    }
</script>

src/components/Search.vue

<template>
    <section class="jumbotron">
        <h3 class="jumbotron-heading">Search Github Users</h3>
        <div>
            <input type="text" placeholder="enter the name you search" v-model="keyWord"/>&nbsp;
            <button @click="searchUsers">Search</button>
        </div>
    </section>
</template>

<script>
    export default {
        name: "Search",
        data() {
            return {
                keyWord: ""
            };
        },
        methods: {
            searchUsers() {
                // 请求前更新List的数据
                this.$bus.$emit("updateListData", {
                    isLoading: true,
                    errMsg: "",
                    users: [],
                    isFirst: false,
                });
                this.$http.get(`https://api.github.com/search/users?q=${this.keyWord}`).then(
                    (response) => {
                        console.log("请求成功了");
                        // 请求成功后更新List的数据
                        this.$bus.$emit("updateListData", {
                            isLoading: false,
                            errMsg: "",
                            users: response.data.items
                        });
                    },
                    (error) => {
                        // 请求后更新List的数据
                        this.$bus.$emit("updateListData", {
                            isLoading: false,
                            errMsg: error.message,
                            users: []
                        });
                    }
                );
            }
        }
    }
</script>

src/components/List.vue

<template>
    <div class="row">
        <!-- 展示用户列表 -->
        <div
                v-show="info.users.length"
                class="card"
                v-for="user in info.users"
                :key="user.login"
        >
            <a :href="user.html_url" target="_blank">
                <img :src="user.avatar_url" style="width: 100px" />
            </a>
            <p class="card-text">{{ user.login }}</p>
        </div>

        <!-- 展示欢迎词 -->
        <h1 v-show="info.isFirst">欢迎使用!</h1>
        <!-- 展示加载中 -->
        <h1 v-show="info.isLoading">加载中....</h1>
        <!-- 展示错误信息 -->
        <h1 v-show="info.errMsg">{{ info.errMsg }}</h1>
    </div>
</template>

<script>
    export default {
        name: "List",
        data() {
            return {
                info: {
                    isFirst: true,
                    isLoading: false,
                    errMsg: "",
                    users: [],
                }
            }
        },
        mounted() {
            this.$bus.$on("updateListData", (dataObj) => {
                    this.info = { ...this.info, ...dataObj };
                }
            );
        }
    }
</script>

<style scoped>
    album {
        min-height: 50rem; /* Can be removed; just added for demo purposes */
        padding-top: 3rem;
        padding-bottom: 3rem;
        background-color: #f7f7f7;
    }
    .card {
        float: left;
        width: 33.333%;
        padding: 0.75rem;
        margin-bottom: 2rem;
        border: 1px solid #efefef;
        text-align: center;
    }
    .card > img {
        margin-bottom: 0.75rem;
        border-radius: 100px;
    }
    .card-text {
        font-size: 85%;
    }
</style>

4.4.slot 插槽

<slot>插槽:让父组件可以向子组件指定位置插入html结构,也是一种组件间通信的方式,适用于 父组件 ===> 子组件

  1. 分类:默认插槽、具名插槽、作用域插槽
  2. 使用方式
    1. 默认插槽

      父组件中: 
        <Category> 
          <div>html结构1</div> 
        </Category> 
      子组件中:Category 
        <template> 
          <div> 
            <!-- 定义插槽 --> 
            <slot>插槽默认内容...</slot> 
          </div> 
        </template>
      
    2. 具名插槽,父组件指明放入子组件的哪个插槽slot=“footer”,如果是template可以写成v-slot:footer

      父组件中: 
        <Category> 
          <template slot="center"> 
            <div>html结构1</div> 
          </template> 
          
          <template v-slot:footer>
            <div>html结构2</div> 
          </template> 
        </Category>
      子组件中: 
        <template> 
          <div> 
            <!-- 定义插槽 --> 
            <slot name="center">插槽默认内容...</slot> 
            <slot name="footer">插槽默认内容...</slot> 
          </div> 
        </template>
      
    3. 作用域插槽,scope用于父组件往子组件插槽放的html结构接收子组件的数据;理解数据在组件的自身,但根据数据生成的结构需要组件的使用者来决定(games数据在Category组件中,但使用数据所遍历出来的结构由App组件决定)

      注意:关于样式,既可以写在父组件中,解析后放入子组件插槽;也可以放在子组件中,传给子组件再解析

      父组件中: 
        <Category> 
          <template scope="scopeData"> 
            <!-- 生成的是ul列表 --> 
            <ul> 
              <li v-for="g in scopeData.games" :key="g">{{g}}</li> 
            </ul> 
          </template>
          
        <Category> 
          <template slot-scope="scopeData"> 
          <!-- 生成的是h4标题 --> 
          <h4 v-for="g in scopeData.games" :key="g">{{g}}</h4> 
          </template> 
        </Category>
      子组件中:
        <template> 
          <div> 
            <slot :games="games"></slot> 
          </div> 
        </template>
        
        <script> 
          export default { 
            name:'Category', props:['title'], 
            //数据在子组件自身 
            data() { 
              return { 
                games:['红色警戒','穿越火线','劲舞团','超级玛丽'] 
              } 
            },
          } 
        </script>
      

4.4.1.默认插槽

src/App.vue

<template>
    <div class="container">
        <Category title="美食">
            <img src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="">
        </Category>
        
        <Category title="游戏">
            <ul>
                <li v-for="(item, index) in games" :key="index">{{item}}</li>
            </ul>
        </Category>
        
        <Category title="电影">
            <video controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>
        </Category>
    </div>
</template> 

<script> 
    // 引入组件
    import Category from './components/Category.vue';

    export default {
        name:'App',
        components:{
            Category
        },
        data() {
            return {
                foods: ['火锅','烧烤','小龙虾','牛排'],
                games: ['红色警戒','穿越火线','劲舞团','超级玛丽'],
                films:['《教父》','《拆弹专家》','《你好,李焕英》','《尚硅谷》']
            }
        }
    }
</script>

<style>
    .container {
        display: flex;justify-content: space-around;
    }
</style>

src/components/Category.vue

<template>
    <div class="category">
        <h3>{{title}}分类</h3>
        <!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) -->
        <slot>我是一些默认值,当使用者没有传递具体结构时,我会出现</slot>
    </div>
</template>

<script>
    export default {
        name: "Category",
        props:['title']
    }
</script>

<style scoped>
    .category {
        background-color: skyblue;
        width: 200px;
        height: 300px;
    }
    h3 {
        text-align: center;
        background-color: orange;
    }
    video {
        width: 100%;
    }
    img {
        width: 100%;
    }
</style>

在这里插入图片描述

4.4.2.具名插槽

src/App.vue

<template>
    <div class="container">
        <Category title="美食">
            <img slot="center" src="https://s3.ax1x.com/2021/01/16/srJlq0.jpg" alt="" >
            <a slot="footer" href="http://www.atguigu.com">更多美食</a>
        </Category>
        
        <Category title="游戏">
            <ul slot="center">
                <li v-for="(item, index) in games" :key="index">{{item}}</li>
            </ul>
            <div class="foot" slot="footer">
                <a href="http://www.atguigu.com">单机游戏</a> 
                <a href="http://www.atguigu.com">网络游戏</a>
            </div>
        </Category>
        
        <Category title="电影">
            <video slot="center" controls src="http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4"></video>
            <template v-slot:footer>
                <div class="foot">
                    <a href="http://www.atguigu.com">经典</a> 
                    <a href="http://www.atguigu.com">热门</a> 
                    <a href="http://www.atguigu.com">推荐</a>
                </div>
                <h4>欢迎前来观影</h4>
            </template>
        </Category>
    </div>
</template> 

<script> 
    // 引入组件
    import Category from './components/Category.vue';

    export default {
        name:'App',
        components:{
            Category
        },
        data() {
            return {
                foods: ['火锅','烧烤','小龙虾','牛排'],
                games: ['红色警戒','穿越火线','劲舞团','超级玛丽'],
                films:['《教父》','《拆弹专家》','《你好,李焕英》','《尚硅谷》']
            }
        }
    }
</script>

<style>
    .container,.foot {
        display: flex;justify-content: space-around;
    }
    h4{text-align: center;}
</style>

src/components/Category.vue

<template>
    <div class="category">
        <h3>{{title}}分类</h3>
        <!-- 定义一个插槽(挖个坑,等着组件的使用者进行填充) -->
        <slot name="center">我是一些默认值,当使用者没有传递具体结构时,我会出现1</slot>
        <slot name="footer">我是一些默认值,当使用者没有传递具体结构时,我会出现2</slot>
    </div>
</template>

<script>
    export default {
        name: "Category",
        props:['title']
    }
</script>

<style scoped>
    .category {
        background-color: skyblue;
        width: 200px;
        height: 300px;
    }
    h3 {
        text-align: center;
        background-color: orange;
    }
    video {
        width: 100%;
    }
    img {
        width: 100%;
    }
</style>

在这里插入图片描述

4.4.3.作用域插槽

src/App.vue

<template>
    <div class="container">
        <Category title="游戏">
            <template scope="liqb">
                <ul>
                    <li v-for="(item, index) in liqb.games" :key="index">{{item}}</li>
                </ul>
            </template>
        </Category>

        <Category title="游戏">
            <template scope="{games}">
                <ol>
                    <li style="color:red" v-for="(item, index) in games" :key="index">{{item}}</li>
                </ol>
            </template>
        </Category>
        
        <Category title="游戏">
            <template slot-scope="{games}">
                <h4 v-for="(g,index) in games" :key="index">{{g}}</h4>
            </template>
        </Category>
    </div>
</template> 

<script> 
    // 引入组件
    import Category from './components/Category.vue';

    export default {
        name:'App',
        components:{
            Category
        }
    }
</script>

<style>
    .container,.foot {
        display: flex;justify-content: space-around;
    }
    h4{text-align: center;}
</style>

src/components/Category.vue

<template>
    <div class="category">
        <h3>{{title}}分类</h3>
        <slot :games="games" msg="hello">我是默认的一些内容</slot>
    </div>
</template>

<script>
    export default {
        name: "Category",
        props:['title'],
        data() {
            return {
                games: ['红色警戒','穿越火线','劲舞团','超级玛丽']
            }
        }
    }
</script>

<style scoped>
    .category {
        background-color: skyblue;
        width: 200px;
        height: 300px;
    }
    h3 {
        text-align: center;
        background-color: orange;
    }
    video {
        width: 100%;
    }
    img {
        width: 100%;
    }
</style>

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

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

相关文章

【OJ比赛日历】快周末了,不来一场比赛吗? #06.17-06.23 #13场

CompHub[1] 实时聚合多平台的数据类(Kaggle、天池…)和OJ类(Leetcode、牛客…&#xff09;比赛。本账号会推送最新的比赛消息&#xff0c;欢迎关注&#xff01; 以下信息仅供参考&#xff0c;以比赛官网为准 目录 2023-06-17&#xff08;周六&#xff09; #2场比赛2023-06-18…

使用matplotlib制作动态图

使用matplotlib制作动态图 一、简介二、模块简介1. **FuncAnimation**类介绍2. 定义动画更新函数 三、使用matplotlib制作动画1.一步法制作动态图片2. 两步法制作动态图片 一、简介 matplotlib(https://matplotlib.org/)是一个著名的python绘图库&#xff0c;由于其灵活强大的…

【Qt】使用libmodbus

这里写目录标题 下载编译使用Demo参照&#xff1a; Qt自带QModbusTcpClient&#xff0c;换个电脑就不好使了&#xff0c;换libmodbus 下载 可以去github下载 链接: https://pan.baidu.com/s/13lgEZ59Dt5M7zmTJNpfKvg?pwdyzfm 提取码: yzfm 下载libmodbus 并解压 编译 进入…

20分钟做一套采购审批系统

1、设计输入模板 excel画表格界面 # 公式代表新建时以默认值代替 2、设置单元格为签名控件 双击单元格后&#xff0c;会默认显示当前用户的信息,用于签名 3、设置要合计的数据 生成的合计公式会默认放到下一行 4、设置单元格的ID与标题&#xff0c;在添加或者删除行或者列时&am…

影像组学技术的基础和应用

一、概述 1. 影像组学足迹史 2003年&#xff0c;Mark A. Kriegsman和Randy L. Buckner发表的关于视觉系统空间组织的研究文章The genetic and functional basis of the spatial organization of the visual system&#xff0c;为影像组学领域提供了先驱性思路&#xff0c;奠定…

PID算法:过程控制中的重要质量指标

PID算法&#xff1a;过程控制中几个重要的概念 PID算法广泛的被应用在很多的控制系统中&#xff0c;最终的目的都是希望通过pid控制器实现被控量能稳定在预期的目标值。 使用pid控制器作用于系统的时候&#xff0c;正常情况下它应该是不断的发生作用的&#xff0c;从而让系统能…

OJ Goldbach‘s Conjecture

1.题目 题目描述 In 1742, Christian Goldbach, a German amateur mathematician, sent a letter to Leonhard Euler in which he made the following conjecture: Every even number greater than 4 can be written as the sum of two odd prime numbers. For exampl…

可调电源LM317 的内部原理 - 特殊的电压跟随器

之前一直没想过这类LDO 内部是怎么整的&#xff0c;它似乎是用一个分压电路采集它输出的电压作为参考&#xff0c;然后却能把输出电压稳定下来&#xff0c;颇有种左脚踩右脚上天的意思。典型的LM317 电路如下&#xff1a; 如果是个普通的电压跟随器&#xff0c;无论是基于三极管…

K8S之istio流量控制管理(十七)

一&#xff0c;istio介绍 1、istio架构 结合上图我们来理解Istio的各组件的功能及相互之间的协作方式。 1. 自动注入&#xff1a;在创建应用程序时自动注入 Sidecar代理Envoy程序。在 Kubernetes中创建 Pod时&#xff0c;Kube-apiserver调用控制面组件的 Sidecar-Injector服…

4年外包上岸,想劝大家:这类公司能不去就不去...

先说一下自己的情况&#xff0c;大专生&#xff0c;18年通过校招进入湖南某软件公司&#xff0c;干了接近4年的功能测试&#xff0c;今年年初&#xff0c;感觉自己不能够在这样下去了&#xff0c;长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了四年的功能测试…

Vector-常用CAN工具 - Network-Based Access常见问题

目录 一、什么是基于网络的访问&#xff1f; 二、为什么是基于网络的访问&#xff1f; 三、Channel-based如何变更为Network-based 四、VN5000系列设备端口分配 五、常见问题及解决办法 如何导出以太网的设备配置&#xff1f;&#xff08;Network-Base&#xff09; 1、导…

Backbone 在神经网络中意味着什么?

动动发财的小手&#xff0c;点个赞吧&#xff01; 1. 简介 神经网络是机器学习算法&#xff0c;我们可以将其用于许多应用&#xff0c;例如图像分类、对象识别、预测复杂模式、处理语言等等。神经网络的主要组成部分是层和节点。 一些神经网络架构有一百多个层和几个解决不同子…

[CubeMX项目]基于STM32的平衡小车(硬件设计)

一直以来我都想在本科毕业前完成一个电机相关的实验&#xff0c;之前看了网上比较火热的自平衡莱洛三角形项目后&#xff0c;决心先做一个类似的小项目。因此&#xff0c;我通过学习大量前辈的项目案例&#xff0c;完成了该项目。 本项目的特点是&#xff1a;在需要通信的部分&…

CMU 15-445 Project #1 - Buffer Pool(Task #3 - Buffer Pool Manager Instance)

Task #3 - Buffer Pool Manager Instance 一、题目链接二、准备工作三、部分实现 一、题目链接 二、准备工作 见 CMU 15-445 Project #0 - C Primer 中的准备工作。 三、部分实现 首先要区分缓冲池中 Page 与 Frame &#xff0c;这个其实和操作系统分页管理中页面和页框的关系…

尚硅谷微信小程序开发 防网易云音乐App 小程序 后端接口服务器搭建

小程序学习 尚硅谷微信小程序开发 项目网易云小程序学习地址&#xff1a; 01-尚硅谷-小程序-课程介绍_哔哩哔哩_bilibili 视频相关的教程文档与笔记分享 链接&#xff1a;https://pan.baidu.com/s/1aq7ks8B3fJ1Wahge17YYUw?pwd7oqm 提取码&#xff1a;7oqm 配套服务器 老师…

C语言总结

C语言 预处理&#xff08;以#开头&#xff09; 宏定义 宏可以理解为替换&#xff0c;替换过程不会进行语法检查&#xff0c;语法检查在编译时进行。只替换只替换只替换 1.不带参数的宏定义&#xff1a; 宏定义又称为宏代换、宏替换&#xff0c;简称“宏”。实质为直接替换&…

java面经03-虚拟机篇-jvm内存结构垃圾回收、内存溢出类加载、引用悲观锁HashTable、引用finalize

文章目录 虚拟机篇1. JVM 内存结构2. JVM 内存参数3. JVM 垃圾回收4. 内存溢出5. 类加载6. 四种引用7. finalize 虚拟机篇 1. JVM 内存结构 要求 掌握 JVM 内存结构划分尤其要知道方法区、永久代、元空间的关系 结合一段 java 代码的执行理解内存划分 执行 javac 命令编译源…

力扣 2719. 统计整数数目

题目地址&#xff1a;https://leetcode.cn/problems/count-of-integers/ 递归核心是枚举统计&#xff0c;结合记忆化搜索节省时间。 以数字 3216 为例&#xff0c;从 [0, 0, 0, 0] 开始枚举&#xff0c;到 [2, 1, 6, X] 时&#xff0c;i 2&#xff0c;sum 2 1 6 9&#x…

Meta语音达LLaMA级里程碑!开源MMS模型可识别1100+语言

【新智元导读】Meta的大规模多语言语音 &#xff08;MMS&#xff09; 项目将彻底改变语音技术&#xff0c;使用wav2vec 2.0的自监督学习&#xff0c;MMS将语音技术扩展到1100到4000种语言。 在语音方面&#xff0c;Meta又达到了另一个LLaMA级的里程碑。 今天&#xff0c;Meta推…

Linux驱动:I2C驱动看这一篇就够了

I2C驱动看这一篇就够了 一、前言二、Linux 的 I2C 体系结构2.1 Linux I2C 核心2.2 Linux I2C 适配器驱动2.3 Linux I2C 设备驱动2.4 Linux I2C驱动总结 三、具体设备驱动分析3.1 Probe函数3.2 读写函数 四、I2C驱动中几个重要的结构体4.1 i2c_adapter 结构体4.2 i2c_client 结构…