掌握微信小程序开发的核心要点:从基础到进阶

news2025/1/30 22:05:04

在这里插入图片描述

文章目录

  • 掌握微信小程序开发的核心要点:从基础到进阶
    • 一、数据绑定和事件处理
      • 1.1 理解小程序的数据绑定机制,实现数据和视图的同步更新
      • 1.2 学习如何处理用户交互事件和触发相应的响应逻辑
    • 二、网络请求和数据交互
      • 2.1 使用小程序的网络请求API与后端服务器进行数据交互
      • 2.2 处理后端数据返回并在小程序中展示
    • 三、用户授权和登录功能
      • 3.1 实现小程序的用户授权登录功能,获取用户信息
      • 3.2 学习如何处理用户的登录状态和权限管理
      • 3.3 理解 OAuth2.0 协议并实现用户信息的获取
    • 四、小程序性能优化和调试技巧
      • 4.1 学习如何优化小程序的性能以提升用户体验
      • 4.2 探索调试工具和技巧,快速定位和解决问题
    • 五、小程序的扩展和进阶功能
      • 5.1 介绍小程序的扩展功能,如微信支付、地图服务
      • 5.2 探索更多高级功能的开发,如自定义组件和模板消息

掌握微信小程序开发的核心要点:从基础到进阶

一、数据绑定和事件处理

1.1 理解小程序的数据绑定机制,实现数据和视图的同步更新

小程序的数据绑定机制是基于MVVM(Model-View-ViewModel)模式实现的,其中Model用于存储数据、View用于展示数据、ViewModel用于将数据和视图进行绑定。

在小程序中,Model通常表示为Page对象的data属性,View表示为wxml文件,而ViewModel则是通过setData方法来实现。

具体实现步骤

  1. 在Page对象的data属性中定义需要绑定的数据。
data: {
  message: 'Hello World!'
}
  1. 在wxml文件中使用双花括号语法将数据绑定到视图中。
<view>{{ message }}</view>
  1. 在事件处理函数中使用setData方法更新数据。
onTap: function() {
  this.setData({
    message: 'Hello Mini Program!'
  })
}
  1. 当setData方法被调用时,小程序会自动更新视图中绑定的数据,从而实现数据和视图的同步更新。

**ps:**为了避免频繁的setData操作导致性能下降,建议在更新数据时尽可能地将多个数据一起更新。

onTap: function() {
  this.setData({
    message: 'Hello Mini Program!',
    count: 1
  })
}

这样可以减少setData方法的调用次数,提高小程序的性能表现。

1.2 学习如何处理用户交互事件和触发相应的响应逻辑

当处理小程序中的用户交互事件时,通常需要编写对应的事件处理函数,并在页面的wxml文件中将事件和处理函数进行绑定。

有一个按钮,用户点击按钮后会触发相应的逻辑处理

  1. 首先,在wxml文件中定义一个按钮,并绑定一个tap事件。
<!-- index.wxml -->
<button bindtap="onButtonClick">Click me!</button>
  1. 在对应的Page对象中编写事件处理函数onButtonClick。
// index.js
Page({
  onButtonClick: function(event) {
    console.log('Button clicked!', event);
    // 在这里编写相应的逻辑处理代码
  }
})

ps:事件处理函数的第一个参数event可以用来获取触发事件的相关信息,比如事件类型、触发事件的组件等。

二、网络请求和数据交互

2.1 使用小程序的网络请求API与后端服务器进行数据交互

当使用小程序与后端服务器进行数据交互时,可以通过小程序提供的wx.request API来发送网络请求。

使用wx.request发送一个GET请求获取后端服务器的数据

  1. 在Page对象中编写发送网络请求的代码。
// index.js
Page({
  onLoad: function() {
    // 发送网络请求
    wx.request({
      url: 'https://api.example.com/data', // 后端服务器接口地址
      method: 'GET',
      success: function(res) {
        console.log('Request success', res.data);
        // 在这里处理从后端服务器返回的数据
      },
      fail: function(error) {
        console.error('Request failed', error);
      }
    })
  }
})
  1. 在上述代码中,我们在Page对象的onLoad生命周期函数中发送了一个GET请求到指定的后端服务器接口地址(https://api.example.com/data),并在请求成功和失败时分别执行对应的回调函数。

  2. 后端服务器在接收到请求后,可以根据请求的方式、参数等返回相应的数据。在示例中的success回调中,我们可以处理从后端服务器返回的数据,例如更新页面数据、展示在页面上等操作。

ps:除了GET请求外,还可以发送POST、PUT、DELETE等类型的请求,具体请求方法可以在wx.request的options参数中指定。另外,还可以设置请求头、请求参数等相关配置。

2.2 处理后端数据返回并在小程序中展示

当从后端服务器获取数据后,我们可以在小程序中展示这些数据。通常,我们可以将数据绑定到页面的数据上,然后在wxml文件中使用数据进行展示。

处理后端数据返回并在小程序中展示

假设我们从后端服务器获取到一个包含商品信息的数组,我们希望在小程序页面中展示这些商品信息。

  1. 在Page对象中处理后端数据返回。
// index.js
Page({
  data: {
    products: [] // 初始化商品信息为空数组
  },
  onLoad: function() {
    var that = this;  // 保存this引用
    // 发送网络请求
    wx.request({
      url: 'https://api.example.com/products', // 后端服务器接口地址
      method: 'GET',
      success: function(res) {
        console.log('Request success', res.data);
        // 更新页面数据,将后端返回的商品信息赋值给data中的products
        that.setData({
          products: res.data
        });
      },
      fail: function(error) {
        console.error('Request failed', error);
      }
    })
  }
})
  1. 在对应的wxml文件中使用数据进行展示。
<!-- index.wxml -->
<view>
  <block wx:for="{{products}}" wx:for-item="product">
    <view>{{product.name}} - {{product.price}}</view>
  </block>
</view>

三、用户授权和登录功能

3.1 实现小程序的用户授权登录功能,获取用户信息

实现小程序的用户授权登录功能,获取用户信息:

  1. 在小程序中设置按钮触发用户授权登录;
  2. 监听用户授权登录的回调函数,并获取用户信息;
  3. 将用户信息发送到后端服务器保存或进行其他操作。

如何在小程序中实现用户授权登录功能并获取用户信息

  1. 在wxml文件中添加一个按钮,用来触发用户授权登录。
<!-- index.wxml -->
<button open-type="getUserInfo" bindgetuserinfo="onGetUserInfo">授权登录</button>
  1. 在对应的js文件中编写事件处理函数,监听用户授权登录动作,并获取用户信息。
// index.js
Page({
  onGetUserInfo: function(e) {
    if (e.detail.userInfo) {
      // 用户已授权登录
      console.log('用户信息:', e.detail.userInfo);

      // 可以将用户信息发送到后端服务器保存或进行其他操作
      // 例如发送网络请求
      wx.request({
        url: 'https://api.example.com/userinfo',
        method: 'POST',
        data: {
          userInfo: e.detail.userInfo
        },
        success: function(res) {
          console.log('用户信息已发送到后端服务器');
        },
        fail: function(error) {
          console.error('发送用户信息失败', error);
        }
      });
    } else {
      // 用户拒绝授权登录
      console.log('用户拒绝授权登录');
    }
  }
})

3.2 学习如何处理用户的登录状态和权限管理

处理用户的登录状态和权限管理是小程序开发中非常重要的一部分,通常包括用户登录、登录态维护、权限验证等功能。

如何在小程序中处理用户的登录状态和权限管理

  1. 在app.js中设置全局登录状态和权限管理。
// app.js
const DEFAULT_USER_INFO = {
  // 默认用户信息
};

App({
  globalData: {
    userInfo: null, // 用户信息
    hasLogin: false, // 登录状态
  },
  onLaunch: function() {
    // 小程序初始化时检查用户登录状态
    const userInfo = wx.getStorageSync('userInfo');
    if (userInfo) {
      this.globalData.userInfo = userInfo;
      this.globalData.hasLogin = true;
    }
  },
  checkLogin: function() {
    // 检查登录状态
    if (!this.globalData.hasLogin) {
      // 未登录,跳转到登录页面
      wx.navigateTo({
        url: '/pages/login/login',
      });
      return false;
    }
    return true;
  },
  // ...其他权限管理相关方法
});
  1. 在需要权限验证的页面中调用权限管理函数。
// index.js
const app = getApp();

Page({
  onLoad: function() {
    // 在页面加载时检查登录状态
    app.checkLogin();
  },
  // ...其他页面逻辑
});

3.3 理解 OAuth2.0 协议并实现用户信息的获取

OAuth 2.0 是一种用于授权的开放标准,它允许用户授权第三方应用访问他们存储在另一个服务提供者上的信息,而不需要将用户名和密码提供给第三方应用。在小程序中,通常会使用 OAuth 2.0 协议来实现用户授权并获取用户信息。

如何结合 OAuth 2.0 协议在小程序中实现用户信息的获取

  1. 在小程序中使用微信提供的登录接口获取用户授权。
// index.js
Page({
  onLogin: function() {
    wx.login({
      success: (res) => {
        if (res.code) {
          // 获取到登录凭证 code 后,可以向后端发送请求换取用户信息
          wx.request({
            url: 'https://api.example.com/oauth/token',
            method: 'POST',
            data: {
              code: res.code
              // 其他必要的参数
            },
            success: (res) => {
              const accessToken = res.data.access_token;
              // 将获取到的 access token 存储起来,在后续的请求中使用
              wx.setStorageSync('accessToken', accessToken);
            }
          });
        } else {
          console.log('登录失败!' + res.errMsg);
        }
      }
    });
  }
})
  1. 使用 access token 向后端发送请求获取用户信息。
// index.js
Page({
  onGetUserInfo: function() {
    const accessToken = wx.getStorageSync('accessToken');
    if (accessToken) {
      // 已获取到 access token,可以向后端发送请求获取用户信息
      wx.request({
        url: 'https://api.example.com/userinfo',
        method: 'GET',
        header: {
          'Authorization': 'Bearer ' + accessToken // 在请求头中携带 access token
        },
        success: (res) => {
          const userInfo = res.data;
          console.log('用户信息:', userInfo);
          // 可以在前端页面中展示用户信息
        }
      });
    } else {
      console.log('未获取到 access token,请先进行登录!');
    }
  }
})

四、小程序性能优化和调试技巧

4.1 学习如何优化小程序的性能以提升用户体验

小程序性能优化是开发过程中非常重要的一环,可以有效地提升用户体验和应用的整体性能。

常见的小程序性能优化技巧

  1. 减少 HTTP 请求次数。HTTP 请求是小程序加载速度较慢的主要原因之一,因此减少 HTTP 请求次数是优化性能的关键之一。

通过以下方法减少 HTTP 请求次数

  • 合并多个 CSS 和 JavaScript 文件,减少文件数量和大小。
  • 使用图片精灵将多个图像合并为一个图像。
  • 使用 CDN 加载常用库和框架,避免重复下载。
  1. 减少渲染层级。小程序的渲染层级越深,渲染性能就越低。因此,减少渲染层级是提升性能的关键之一。

通过以下方法减少渲染层级

  • 尽可能使用原生组件而不是自定义组件。
  • 避免使用大量嵌套的布局和元素。
  • 将多个元素合并为一个元素,减少 DOM 元素数量。
  1. 延迟加载和懒加载。延迟加载和懒加载是优化性能的重要策略之一,可以避免在页面加载时同时加载所有内容,从而加快页面加载速度。

通过以下方法实现延迟加载和懒加载

  • 对于大型图片和视频等资源,使用懒加载或延迟加载,只在需要时才进行加载。
  • 对于一些不重要的元素,可以使用延迟加载,等到页面完成后再进行加载。
  1. 减少内存占用。小程序的内存占用较小,但如果应用中存在大量数据和操作,仍然会导致内存占用过高,从而影响性能。

通过以下方法减少内存占用

  • 及时释放不需要的资源和变量。
  • 对于大量数据的操作,可以使用分页或滚动加载等方式,避免一次性加载过多数据。
  1. 使用 WXS 实现逻辑和计算。WXS 是一种类似 JavaScript 的语言,可以在小程序中用于处理逻辑和计算,从而减少在页面渲染过程中的计算量。

通过以下方法使用 WXS 实现逻辑和计算

  • 将一些常用的计算逻辑封装成 WXS 函数,减少页面渲染时的计算量。
  • 尽可能减少在页面渲染时的逻辑处理,将逻辑处理放在 WXS 函数中。

4.2 探索调试工具和技巧,快速定位和解决问题

当开发小程序时,调试工具和技巧可以帮助我们快速定位和解决问题。

常用的调试工具和技巧

  1. 开发者工具。小程序开发者工具是官方提供的一款调试工具,它提供了丰富的功能来帮助我们调试和优化小程序。

常用的功能

  • 实时预览和调试:可以在开发者工具中实时查看小程序的效果,并进行调试和修改。
  • 页面检查器:可以查看页面的 DOM 树结构、样式、事件等信息,并进行修改和调试。
  • 控制台:可以输出日志信息、错误提示和警告信息,方便我们查看程序运行过程中的问题。
  • 性能分析器:可以帮助我们分析小程序的性能瓶颈,找到性能优化的方向。
  1. 日志输出。在小程序中,通过在代码中使用 console.log() 可以输出日志信息。

使用日志输出

  • 在关键位置插入 console.log() 输出相关变量值和状态,以便查看程序执行过程中的问题。
  • 使用不同的日志级别,如 console.error() 和 console.warn(),以区分不同类型的日志信息。
  1. 调试工具。在小程序中,我们可以使用调试工具来帮助我们定位和解决问题。

常用的调试工具

  • Chrome 开发者工具:可以通过 Chrome 浏览器的开发者工具来调试小程序,包括网络请求、DOM 结构、样式等。
  • 微信小程序调试工具:可以在开发者工具中启动小程序的远程调试模式,将开发者工具和小程序实时连接起来,方便在真机上调试和查看问题。
  1. 断点调试。在开发者工具中,我们可以使用断点调试来逐步执行代码并查看变量值和状态,以定位问题。可

使用断点调试

  • 在关键位置设置断点,例如在某个函数调用之前或之后,以便查看函数执行时的变量值和状态。
  • 使用条件断点,只在满足特定条件时触发断点,以便定位特定情况下的问题。
  1. 监听事件和错误处理。在小程序中,我们可以监听各种事件和错误,以便及时捕获和处理问题。

监听事件和处理错误

  • 使用小程序提供的事件监听函数,如 onPageLoad()、onPageShow() 等,来监听页面生命周期事件。
  • 使用 try-catch 块来捕获代码中的异常错误,并进行相应的处理。

五、小程序的扩展和进阶功能

5.1 介绍小程序的扩展功能,如微信支付、地图服务

小程序提供了许多扩展功能,使得开发者可以为用户提供更加丰富和便捷的服务。

  1. 微信支付。小程序提供了微信支付功能,可以方便地实现在线支付和购物功能。

使用微信支付的示例

// 调用微信支付 API
wx.requestPayment({
  timeStamp: '',
  nonceStr: '',
  package: '',
  signType: 'MD5',
  paySign: '',
  success(res) {
    // 支付成功后的处理
  },
  fail(res) {
    // 支付失败后的处理
  }
});
  1. 地图服务。小程序提供了地图服务功能,可以方便地实现地图定位、搜索和导航等功能。

使用地图服务的示例

// 获取当前位置信息
wx.getLocation({
  type: 'wgs84',
  success(res) {
    const latitude = res.latitude
    const longitude = res.longitude
    const speed = res.speed
    const accuracy = res.accuracy
    // 获取位置信息成功后的处理
  }
})

// 在地图上显示标记点
wx.createMapContext('map').addMarkers({
  markers: [{
    id: 1,
    latitude: 23.099994,
    longitude: 113.324520,
    title: 'T.I.T 创意园'
  }],
  success(res) {
    // 添加标记点成功后的处理
  }
})

// 发起地图搜索
wx.searchMap({
  keyword: 'keyword',
  success(res) {
    // 搜索成功后的处理
  }
})
  1. 分享功能。小程序提供了分享功能,可以方便地将小程序分享给其他用户。

使用分享功能的示例

// 自定义分享标题和描述
Page({
  onShareAppMessage() {
    return {
      title: '自定义分享标题',
      desc: '自定义分享描述',
      path: '/pages/index/index'
    }
  }
})

// 分享到指定群组
wx.showShareMenu({
  withShareTicket: true,
  success(res) {
    wx.getShareInfo({
      shareTicket: res.shareTickets[0],
      success(res) {
        // 分享成功后的处理
      }
    })
  }
})

5.2 探索更多高级功能的开发,如自定义组件和模板消息

当涉及到更高级的功能时,小程序提供了自定义组件和模板消息两个强大的开发选项。

  1. 自定义组件。自定义组件允许开发者封装可重用的 UI 组件,以便在小程序中多次使用。通过自定义组件,可以提高代码复用性和开发效率。

简单的自定义组件的示例

// 在 components 目录下创建一个自定义组件
Component({
  properties: {
    // 定义组件的属性
    text: {
      type: String,
      value: '默认文本'
    }
  },
  data: {
    // 组件内部的数据
    count: 0
  },
  methods: {
    // 组件的方法
    increment() {
      this.setData({
        count: this.data.count + 1
      })
    }
  }
})

在页面中引入自定义组件

<!-- 在页面的 wxml 文件中引入自定义组件 -->
<view>
  <custom-component text="Hello"></custom-component>
</view>
  1. 模板消息。模板消息允许开发者向用户发送预设好的消息模板,包括通知、提醒、活动等。通过模板消息,可以实现与用户的互动和消息推送。

发送模板消息的示例

// 调用模板消息 API
wx.requestSubscribeMessage({
  tmplIds: ['templateId1', 'templateId2'],
  success(res) {
    if (res['templateId1'] === 'accept' && res['templateId2'] === 'accept') {
      // 用户同意订阅模板消息后的处理
      wx.cloud.callFunction({
        name: 'sendTemplateMessage',
        data: {
          templateId: 'templateId1',
          page: '/pages/index/index',
          data: {
            keyword1: {
              value: 'value1'
            },
            keyword2: {
              value: 'value2'
            }
          },
          touser: 'openid'
        },
        success(res) {
          // 发送模板消息成功后的处理
        },
        fail(err) {
          // 发送模板消息失败后的处理
        }
      })
    }
  },
  fail(err) {
    // 用户拒绝订阅模板消息后的处理
  }
});

通过使用自定义组件和模板消息,开发者可以更加灵活地构建复杂的小程序功能,并为用户提供更好的体验和服务。

彗星般的人生可以短暂,但绝不黯淡或沉沦

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

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

相关文章

【Python笔记-设计模式】迭代器模式

一、说明 迭代器模式是一种行为设计模式&#xff0c;让你能在不暴露集合底层表现形式&#xff08;列表、栈和树等&#xff09;的情况下遍历集合中所有的元素。 (一) 解决问题 遍历聚合对象中的元素&#xff0c;而不需要暴露该对象的内部表示 (二) 使用场景 需要对聚合对象…

ConvNeXt V2:用MAE训练CNN

论文名称&#xff1a;ConvNeXt V2: Co-designing and Scaling ConvNets with Masked Autoencoders 发表时间&#xff1a;CVPR2023 code链接&#xff1a;代码 作者及组织: Sanghyun Woo&#xff0c;Shoubhik Debnath来自KAIST和Meta AI。 前言 ConvNextV2是借助MAE的思想来训练…

信息安全计划

任何管理人员或人力资源专业人士都知道&#xff0c;除非彻底记录标准和实践&#xff0c;否则永远无法真正实施和执行标准和实践。正如您可能想象的那样&#xff0c;在保护您的网络、技术和数据系统免受网络威胁以及在发生这些事件时规划最及时、高效和有效的响应时&#xff0c;…

关于 REST API 六大指导原则,你了解多少?

背景 在前一篇文章中 关于 REST API&#xff0c;你了解多少&#xff1f; &#xff0c;我们聊到了 REST 六大指导原则&#xff0c;有些原则不太容易理解&#xff0c;这次我们详细说明一下。 1. 统一接口&#xff08;Uniform Interface&#xff09;&#xff1a;定义了一组通用的…

Error relaunching VirtualBox VM process:5

打靶场用virtualBox开靶机的时候会出现这种问题 并且报错代码是0x0 我出现这个问题与我的另一个软件有关 卸载之后靶机就可以正常启动了 但是又有问题了&#xff0c;我怎么打cs呢&#xff0c;求助大佬帮助

LeetCode--134

134. 加油站 在一条环路上有 n 个加油站&#xff0c;其中第 i 个加油站有汽油 gas[i] 升。 你有一辆油箱容量无限的的汽车&#xff0c;从第 i 个加油站开往第 i1 个加油站需要消耗汽油 cost[i] 升。你从其中的一个加油站出发&#xff0c;开始时油箱为空。 给定两个整数数组 …

关于纯前端想要变成全栈编写接口的学习推荐

推荐学习uniappuniclouduniadmin 学习成本低,不到一个月就能开发出自己的接口,上传到服务空间,并且能够实现后端的功能,能够调用接口 当然这里使用的不是mysql数据库,而是unicloud推荐的存储方式 操作起来也很方便

在TMP中计算书名号《》高度的问题

1&#xff09;在TMP中计算书名号《》高度的问题 2&#xff09;FMOD设置中关于Virtual Channel Count&Real Channel Count的参数疑问 3&#xff09;Unity 2021.3.18f1 ParticleSystemTrailGeometryJob粒子拖尾系统崩溃 4&#xff09;XLua打包Lua文件粒度问题 这是第375篇UWA…

2023 re:Invent 用 Amazon Q 打造你的知识库

前言 随着 ChatGPT 的问世&#xff0c;我们迎来了许多创新和变革的机会。一年一度的亚马逊云科技大会 re:Invent 也带来了许多前言的技术&#xff0c;其中 Amazon CEO Adam Selipsky 在 2023 re:Invent 大会中介绍 Amazon Q 让我印象深刻&#xff0c;这预示着生成式 AI 的又一…

Kafka 面试八股题整理

前言&#xff1a;本文是博主自行收集的Kafka相关的八股文问题&#xff0c;博主还在准备暑期实习中&#xff0c;应该会持续更新.... 参考&#xff1a; 32 道常见的 Kafka 面试题你都会吗&#xff1f;附答案 【Kafka】10道不得不会的 Kafka 面试题 掌握这10个常见的Kafka经典面试…

热闹元宵进行中,如何利用VR全景展示民宿品牌形象?

错峰出游闹元宵&#xff0c;元宵节恰逢周末&#xff0c;而且还是春节假期返工之后的首个休息日&#xff0c;不少人都想通过短途度假来缓解“节后综合征”。两位数的特价机票、打折的各种酒店让你实现“旅行自由”&#xff0c;那么如何知道特价酒店服务好不好呢&#xff1f;先别…

UI自动化测试:playwright工具(一):python环境下安装、UI录制使用(需要些代码能力)

一、python环境下安装playwright工具 1. 安装playwright库 pip install playwright -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com#至于镜像源,可以选,也可不选:#阿里云 http://mirrors.aliyun.com/pypi/simple/ #中国科技大学 https://py…

阿里云服务器最新收费标准及优惠价格参考(2024更新)

2024阿里云服务器优惠活动政策整理&#xff0c;轻量2核2G3M服务器61元一年、2核4G4M带宽165元1年&#xff0c;云服务器4核16G10M带宽26元1个月、149元半年&#xff0c;阿里云ECS云服务器2核2G3M新老用户均可99元一年续费不涨价&#xff0c;企业用户2核4G5M带宽199元一年&#x…

高性能 Kafka 及常见面试题

Kafka 是一种分布式的&#xff0c;基于发布/订阅的消息系统&#xff0c;原本开发自 LinkedIn&#xff0c;用作 LinkedIn 的事件流&#xff08;Event Stream&#xff09;和运营数据处理管道&#xff08;Pipeline&#xff09;的基础。 基础原理详解可见 Kafka 基本架构及原理 基础…

Redis 16种妙用

1、缓存 2、数据共享分布式 3、分布式锁 4、全局ID 5、计数器 6、限流 7、位统计 8、购物车 9、用户消息时间线timeline 10、消息队列 11、抽奖 12、点赞、签到、打卡 13、商品标签 14、商品筛选 15、用户关注、推荐模型 16、排行榜 1、缓存 String类型 例如&#xff1a;热点…

算法【线性表的查找-顺序查找】

线性表的查找-顺序查找 顺序查找基本思想应用范围顺序表的表示数据元素类型定义查找算法示例分析 时间效率分析顺序查找的特点如何提高查找效率 顺序查找 基本思想 在表的多种结构定义方式中&#xff0c;线性表是最简单的一种。而顺序查找是线性表查找中最简单的一种。 顺序查…

Netty NIO 非阻塞模式

1.概要 1.1 说明 使用非阻塞的模式&#xff0c;就可以用一个现场&#xff0c;处理多个客户端的请求了 1.2 要点 ssc.configureBlocking(false);if(sc!null){ sc.configureBlocking(false); channels.add(sc); }if(len>0){ byteBuffer.flip(); 2.代码 2.1 服务端代码 …

YOLOv8改进 | Conv篇 | 利用YOLOv9的GELAN模块替换C2f结构(附轻量化版本 + 高效涨点版本 + 结构图)

一、本文介绍 本文给大家带来的改进机制是利用2024/02/21号最新发布的YOLOv9其中提出的GELAN模块来改进YOLOv8中的C2f,GELAN融合了CSPNet和ELAN机制同时其中利用到了RepConv在获取更多有效特征的同时在推理时专用单分支结构从而不影响推理速度,同时本文的内容提供了两种版本…

提高工作效率,《Linux常用命令文件配置》

在IC设计领域&#xff0c;所有的开发任务几乎都是在Linux操作系统上完成&#xff0c;因此需要掌握Linux操作系统的使用;Linux可以为工程师提供更好的开发环境和调试工具。还支持多种开发语言和编程环境&#xff0c;可以为数字IC芯片工程师提供更多的选择和灵活性。 作为IC工程…

c++ 继承虚基类

virtual加在b1b2&#xff0c;这样d类仅会有一个a类