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

在这里插入图片描述

文章目录

  • 掌握微信小程序开发的核心要点:从基础到进阶
    • 一、数据绑定和事件处理
      • 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) {
    // 用户拒绝订阅模板消息后的处理
  }
});

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

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

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

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

相关文章

unity发布webGL压缩方式的gzip,使用nginx作为web服务器时的配置文件

unity发布webGL压缩方式的gzip&#xff0c;使用nginx作为web服务器时的配置文件 Unity版本是&#xff1a;2021.3 nginx的版本是&#xff1a;nginx-1.25.4 Unity发布webgl时的测试 设置压缩方式是gzip nginx配置文件 worker_processes 1;events {worker_connections 102…

vue项目打包获取git commit信息并输出到打包后的指定文件夹中

需求背景&#xff1a; 前端项目经常打包&#xff0c;发包部署&#xff0c;为了方便测试及运维发现问题时与正确commit信息对比 实现方式&#xff1a; 使用Node.js的child_process模块来执行git命令 实现步骤&#xff1a; 1.在package.json的同级目录下新建一个version.js文件。…

PyQt6的开发流程(密码生成小程序为例)

PyQt6的开发流程&#xff08;密码生成小程序为例&#xff09; 文章目录 PyQt6的开发流程&#xff08;密码生成小程序为例&#xff09;一、流程介绍与概览1. 界面与逻辑分离的开发流程2. PyQt6的开发流程 二、打开 designer.exe 创建文件三、用QT设计师绘制界面保存成ui1. QT常用…

springboot+vue网站开发-后端管理框架-vue-admin-template

为了方便国内用户下载&#xff0c;我把自己的百度网盘分享给大家一份地址&#xff0c;可以去下载。 如果你有上网盒子软件&#xff0c;那就自己去下载&#xff0c;很小。不到1MB. 链接&#xff1a;https://pan.baidu.com/s/15LJ2MoSWToFGFp28VaxBeQ?pwdbaby 提取码&#xff…

微服务-微服务链路追踪组件Skywalking实战

自动化监控系统Prometheus&Grafana实战&#xff1a; 4 trem APM-性能监控项目班&#xff1a; https://vip.tulingxueyuan.cn/detail/p_602e574ae4b035d3cdb8f8fe/6 1. skywalking是什么 1.1 Skywalking主要功能特性 1.2 Skywalking整体架构 1.3 SkyWalking 环境搭建部…

【数据处理】Python解析nii.gz文件

最近又接触了一种影像数据格式&#xff1a;nii.gz文件&#xff0c;记录一下python读取方式。 数据处理系列篇&#xff1a;   【数据处理】Python读取.mat文件的方法   【数据处理】Python读取.dcm文件的方法   【数据处理】Python解析json文件   【数据处理】Python解析…

日更【系统架构设计师知识总结3】存储系统

【原创精华总结】自己一点点手打、总结的脑图&#xff0c;把散落在课本以及老师讲授的知识点合并汇总&#xff0c;反复提炼语言&#xff0c;形成知识框架。希望能给同样在学习的伙伴一点帮助&#xff01;

HTTP与HTTPS-HTTPS 的应用数据是如何保证完整性的?

资料来源 : 小林coding 小林官方网站 : 小林coding (xiaolincoding.com) HTTPS 的应用数据是如何保证完整性的? TLS 在实现上分为握手协议和记录协议两层 TLS 握手协议就是我们前面说的 TLS 四次握手的过程&#xff0c;负责协商加密算法和生成对称密钥&#xff0c;后续用此密…

信息安全计划

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

iview碰到的一些问题总结

iview tabs嵌套使用问题 tabs嵌套使用的时候不是直接套用行了&#xff0c;直接套用会出现内层tab都集成到一级tab去&#xff0c;需要设置该属性指向对应 Tabs 的 name 字段(需要版本大于3.3.1) <Tabs name"tab1" ><TabPane label"标签1" tab&qu…

荣耀手机如何开启地震预警功能

1、打开荣耀手机&#xff0c;进入“设置”&#xff0c;在搜素栏输入“地震”。 2、进入“安全-应急预警通知”功能栏。 3、开启“地震预警”。 4、查看“预警演示教程”。 ![在这里插入图片描述](https://img-blog.csdnimg.cn/direct/e207e356bb634c11adf926c6a53e48cc.png…

Git 突破 文件尺寸限制

前言 当Git本地存储里右超过50MB&#xff0c;却又确实需要上传的时候&#xff0c;就需要用到了不是 解决 本代码就是把大文件进行拆解成小文件&#xff0c;然后上传。 等到拉取下来的时候&#xff0c;可以直接再进行合并&#xff0c;合并成原文件 代码如下&#xff0c;仅供…

深度学习基础(一)神经网络基本原理

之前的章节我们初步介绍了机器学习相关基础知识&#xff0c;目录如下&#xff1a; 机器学习基础&#xff08;一&#xff09;理解机器学习的本质-CSDN博客 机器学习基础&#xff08;二&#xff09;监督与非监督学习-CSDN博客 机器学习基础&#xff08;四&#xff09;非监督学…

python Matplotlib Tkinter-->tab切换2

环境 python:python-3.12.0-amd64 包: matplotlib 3.8.2 pillow 10.1.0 import matplotlib.pyplot as plt from matplotlib.backends.backend_tkagg import FigureCanvasTkAgg, NavigationToolbar2Tk import tkinter as tk import tkinter.ttk as ttk# 创建自定义工具栏类 c…

mapbox高德地图与相机

mapbox高德地图与相机 演示效果引入 CDN 链接地图显示 创建地图实例定义地图数据源配置地图图层 设置地图样式实现代码 1. 演示效果 本案例使用Mapbox GL JavaScript库创建高德地图。 2. 引入 CDN 链接 <script src"https://api.mapbox.com/mapbox-gl-js/v2.12.0/mapbo…

uniapp 使用安卓模拟器运行调试

uniapp 启动方式有很多种,这里介绍使用模拟器启动uniapp 要使用模拟器启动uniapp肯定少不了安装模拟器(废话) 这里选着浏览器推荐的第一个模拟器mumu模拟器 下载好了mumu安装包后就是安装了,这个过于小白,就不介绍了 2. 查看模拟器的adb端口号, mumu的adb查看端口号与众不同…

设计模式浅析(九) ·模板方法模式

设计模式浅析(九) 模板方法模式 日常叨逼叨 java设计模式浅析&#xff0c;如果觉得对你有帮助&#xff0c;记得一键三连&#xff0c;谢谢各位观众老爷&#x1f601;&#x1f601; 模板方法模式 概念 模板方法模式&#xff08;Template Method Pattern&#xff09;在Java中是…

探针台有哪些优势

探针台广泛应用于半导体、光电以及集成电路等行业&#xff0c;用于测试、调试和维修电子设备、电路板和芯片。 探针台具有以下优势&#xff1a; 1.能够确保相关产品研发的质量。 2.能够有效缩短研发时间和资金成本。 3.可以缩减器件的制作工艺成本。 4.具有更加可靠和省时…

开源大数据集群部署(十二)Ranger 集成 hive

作者&#xff1a;櫰木 1、解压安装 在hd1.dtstack.com主机上执行&#xff08;一般选择hiveserver2节点&#xff09; 解压ranger-2.3.0-hive-plugin.tar.gz [roothd1.dtstack.com software]#tar -zxvf ranger-2.3.0-hive-plugin.tar.gz修改install.properties配置 [roothd1…

代码随想录Leetcode474. 一和零

题目&#xff1a; 代码(首刷看解析 2024年2月26日&#xff09; class Solution { public:// 二维 0 1背包int findMaxForm(vector<string>& strs, int m, int n) {// 1 二维 [i]表示 0 的个数&#xff0c;上限m; [j]表示 1 的个数&#xff0c;上限nvector<vector…