当前位置: 首页 > news >正文

探索微信小程序的奇妙世界:从入门到进阶

在这里插入图片描述

文章目录

    • 一、什么是微信小程序
      • 1.1 简要介绍微信小程序的定义和特点
      • 1.2 解释小程序与传统应用程序的区别
    • 二、小程序的基础知识
      • 2.1 微信小程序的架构
      • 2.2 微信小程序生命周期的理解
      • 2.3 探索小程序的目录结构和文件类型
    • 三、小程序框架和组件
      • 3.1 深入了解小程序框架的核心概念和原理
      • 3.2 学习小程序框架提供的常用组件和API
      • 3.3 深入了解小程序事件处理机制
    • 四、界面设计和布局
      • 4.1 介绍小程序的基本界面设计原则
      • 4.2 探索小程序的页面布局方式,包括Flex布局和Grid布局
      • 4.3 学习如何使用 WXML 和 WXSS 进行界面布局和样式设置
    • 五、本地存储和持久化
      • 5.1 使用小程序的本地存储功能来保存用户数据或其他信息
      • 5.2 探索不同的本地存储方案和最佳实践
    • 六、模块化开发和代码复用
      • 6.1 介绍小程序的模块化开发方法
      • 6.2 提高代码的复用性和可维护性

一、什么是微信小程序

1.1 简要介绍微信小程序的定义和特点

微信小程序是一种轻量级应用程序,可以在微信平台上运行,无需下载安装即可使用。

特点

  1. 无需安装:用户无需下载安装,只需在微信中搜索或扫描即可打开使用,降低了用户使用门槛。
  2. 轻量化:相比App,小程序更轻量,加载速度快,节省用户手机存储空间。
  3. 互联网能力:小程序具有访问互联网的能力,可以实现与服务器的实时交互,提供更丰富的功能和内容。
  4. 便捷分享:用户可以通过微信分享小程序给好友或群聊,便于推广和传播。
  5. 多端适配:小程序可以在不同平台下运行,包括iOS、Android等,保证了跨平台的稳定性和一致性。

1.2 解释小程序与传统应用程序的区别

小程序与传统应用程序在多个方面存在区别,其中包括体验、开发成本、分发渠道等。

区别

  1. 体验
    • 传统应用程序通常需要用户下载安装后才能使用,而小程序无需下载即可直接在微信中打开,降低了用户的使用门槛。
    • 传统应用程序常常拥有更丰富的功能和交互方式,而小程序通常以轻量化、快速响应为特点,适合于一些简单的任务和场景。
  2. 开发成本
    • 传统应用程序通常需要针对不同的操作系统(如iOS、Android)进行独立开发,而小程序可以使用统一的开发语言和框架进行开发,减少了开发成本和维护难度。
    • 小程序的开发通常使用前端技术栈,如HTML、CSS、JavaScript,而传统应用程序可能需要专门的移动应用开发技能。
  3. 分发渠道
    • 传统应用程序需要通过应用商店进行分发和推广,而小程序可以通过微信内置的搜索和分享功能进行传播,用户可以直接体验和分享小程序。
    • 小程序的推广更加便捷,用户可以通过扫描二维码或在微信中搜索即可找到并使用小程序。

二、小程序的基础知识

2.1 微信小程序的架构

微信小程序采用的是前端开发技术栈。

  1. app.js:小程序的入口文件,通过App()函数注册小程序实例,可以在这里进行全局变量的定义、生命周期函数的监听等操作。
App({onLaunch: function () {console.log('小程序初始化完成');},globalData: {userInfo: null}
})
  1. page.js:小程序的页面文件,通过Page()函数注册页面,每个页面对应一个page.js文件,用于定义页面的数据、生命周期函数、事件处理等。
Page({data: {message: 'Hello, 小程序!'},onLoad: function () {console.log('页面加载完成');},// 其他自定义函数和事件处理
})
  1. wxml:用于描述小程序的页面结构,类似于HTML,通过标签和属性来构建页面的布局和内容。
<!-- 小程序页面的wxml代码 -->
<view><text>{{ message }}</text>
</view>
  1. wxss:用于描述小程序的页面样式,类似于CSS,通过选择器和样式声明来定义页面的样式。
/* 小程序页面的wxss代码 */
view {font-size: 16px;color: #333;
}
  1. API接口:小程序提供了丰富的API接口,用于实现各种功能,如网络请求、媒体播放、地理位置等,开发者可以通过调用这些API来实现特定的功能。
// 小程序中的API调用示例
wx.request({url: 'https://api.example.com/data',success: function (res) {console.log(res.data);}
});
  1. 事件处理:小程序支持各种事件,如点击事件、滑动事件等,开发者可以在页面中定义事件处理函数,并绑定到相应的元素上,实现用户交互和页面响应。
<!-- 小程序页面的wxml代码 -->
<view bindtap="handleTap"><text>{{ message }}</text>
</view>
// 小程序页面的js代码
Page({data: {message: 'Hello, 小程序!'},handleTap: function () {console.log('点击了文本');}
})

2.2 微信小程序生命周期的理解

微信小程序的生命周期包括全局生命周期和页面生命周期两部分。

全局生命周期

  1. onLaunch():小程序初始化完成时触发,全局只触发一次。
  2. onShow():小程序启动或从后台进入前台显示时触发。
  3. onHide():小程序从前台进入后台时触发。
  4. onError():小程序发生脚本错误或 API 调用失败时触发。
App({onLaunch: function () {console.log('小程序初始化完成');},onShow: function () {console.log('小程序进入前台');},onHide: function () {console.log('小程序进入后台');},onError: function (err) {console.error('发生错误:', err);}
})

页面生命周期

  1. onLoad():页面加载时触发。
  2. onShow():页面显示时触发。
  3. onReady():页面初次渲染完成时触发。
  4. onHide():页面隐藏时触发。
  5. onUnload():页面卸载时触发。
Page({onLoad: function (options) {console.log('页面加载完成');},onShow: function () {console.log('页面显示');},onReady: function () {console.log('页面初次渲染完成');},onHide: function () {console.log('页面隐藏');},onUnload: function () {console.log('页面卸载');}
})

2.3 探索小程序的目录结构和文件类型

当涉及小程序的目录结构和文件类型时,通常是指微信小程序,通过这些文件和目录,可以更好地组织和管理小程序的代码和资源文件,提高开发效率和代码可维护性。

微信小程序的目录结构主要包括以下几个重要文件和目录

  1. app.json: 小程序的各种属性,比如页面路径、窗口表现、网络超时时间、底部 tab 等。
  2. pages 目录: 存放小程序的各个页面,每个页面由一个目录组成,包含对应的 .js、.wxml、.wxss 和 json 文件。
  3. utils 目录: 存放封装各种工具函数的文件,可以在小程序中引用这些工具函数来实现特定功能。
  4. components 目录: 存放小程序的自定义组件,可以将一些通用的 UI 元素封装成组件,在不同页面引用。
  5. images 目录: 存放小程序所需的图片资源。
  6. app.js: 小程序的入口文件,可以在这里监听小程序的生命周期函数、声明全局变量等。
  7. app.wxss: 小程序的全局样式文件,定义整个小程序的基本样式。
  8. project.config.json: 小程序项目的配置文件,包含项目的一些配置信息,比如 appid、项目设置等。

三、小程序框架和组件

3.1 深入了解小程序框架的核心概念和原理

核心概念和原理

  1. 组件化开发: 小程序采用组件化开发的思想,将页面拆分为多个可复用的组件,每个组件由对应的 .js、.wxml、.wxss 和 json 文件组成。通过组件化开发,可以提高代码的可复用性和可维护性。
  2. 双线程模型: 小程序采用了双线程模型,分为渲染层和逻辑层。渲染层由 WebView 渲染,负责页面的渲染和用户交互;逻辑层由 JavaScript 运行,负责处理业务逻辑和数据交互。两者通过微信客户端进行通信,实现数据传输和事件处理。
  3. 响应式数据绑定: 小程序支持响应式数据绑定,通过数据绑定语法和双向绑定机制,可以实现数据和视图之间的自动更新。当数据发生变化时,相关的视图会自动更新,反之亦然。
  4. 事件机制: 小程序采用事件机制来处理用户交互和页面事件。通过在 .wxml 文件中定义事件绑定,并在对应的 .js 文件中编写事件处理函数,实现对用户操作的响应。
  5. 小程序生命周期: 小程序具有一系列的生命周期函数,包括 onLaunch、onShow、onHide 等。这些生命周期函数在小程序的不同阶段会被触发,开发者可以在这些函数中编写相应的业务逻辑。
  6. 网络请求: 小程序提供了丰富的 API 来进行网络请求,如 wx.request、wx.uploadFile 等。开发者可以通过这些 API 发起 HTTP 请求,与服务器进行数据交互。
  7. 本地存储: 小程序支持本地存储机制,可以通过 wx.setStorage、wx.getStorage 等 API 实现对本地数据的读写操作,方便开发者进行数据的持久化存储。
  8. 模块化开发: 小程序支持模块化开发,开发者可以将功能模块封装成模块,通过 require 和 module.exports 实现模块之间的引用和导出。

3.2 学习小程序框架提供的常用组件和API

常用组件:

  1. view 组件: 用于显示视图元素,类似于 HTML 中的 div 标签。
<view>{{ message }}</view>
  1. text 组件: 用于显示文本内容。
<text>{{ message }}</text>
  1. button 组件: 用于创建交互按钮。
<button bindtap="handleTap">点击按钮</button>
  1. input 组件: 用于接收用户输入。
<input bindinput="handleInput" placeholder="请输入内容" />
  1. image 组件: 用于显示图片。
<image src="{{ imageUrl }}"></image>

常用 API:

  1. wx.showToast: 显示消息提示框。
wx.showToast({title: '操作成功',icon: 'success',duration: 2000
});
  1. wx.request: 发起网络请求。
wx.request({url: 'https://api.example.com/data',method: 'GET',success: function(res) {console.log(res.data);},fail: function(error) {console.error(error);}
});
  1. wx.getStorage: 获取本地缓存数据。
wx.getStorage({key: 'userInfo',success: function(res) {console.log(res.data);},fail: function(error) {console.error(error);}
});
  1. wx.navigateTo: 跳转到新页面。
wx.navigateTo({url: '/pages/detail/detail?id=123'
});
  1. wx.showModal: 显示模态对话框。
wx.showModal({title: '提示',content: '确定删除吗?',success: function(res) {if (res.confirm) {console.log('用户点击确定');} else if (res.cancel) {console.log('用户点击取消');}}
});

3.3 深入了解小程序事件处理机制

小程序的事件处理机制主要通过在组件中定义事件绑定和事件处理函数来实现。

小程序事件处理机制的使用

<!-- 在 .wxml 文件中定义按钮组件,并绑定 click 事件 -->
<button bindtap="handleTap">点击按钮</button>
// 在 .js 文件中编写事件处理函数
// 当用户点击按钮时,handleTap 函数会被触发,并输出相应的日志和事件对象
Page({handleTap: function(event) {console.log('按钮被点击了');console.log(event);}
});

小程序的事件处理机制还支持事件冒泡和事件捕获。默认情况下,事件会从子组件向父组件依次冒泡;而通过在组件上添加 capture-bind:eventName 属性,可以将事件从父组件向子组件依次捕获。

事件冒泡和事件捕获的使用

<!-- 定义一个父组件和一个子组件,并在父组件上添加 catchtap 和 capture-bind:tap 属性 -->
<view catchtap="handleTap"><view capture-bind:tap="handleInnerTap">子组件</view>
</view>
// 在 .js 文件中编写事件处理函数
// 当用户点击子组件时,事件会先从父组件向子组件依次捕获,然后再从子组件向父组件依次冒泡
Page({handleTap: function(event) {console.log('父组件被点击了');console.log(event);},handleInnerTap: function(event) {console.log('子组件被点击了');console.log(event);}
});

四、界面设计和布局

4.1 介绍小程序的基本界面设计原则

小程序的界面设计原则主要包括简洁性、易用性、一致性和美观性。

1. 简洁性: 界面要简洁明了,避免过多的信息和功能堆砌,保持简洁的视觉效果。

<!-- 简洁的按钮设计 -->
<button class="primary-button">提交</button>

2. 易用性: 界面要具有良好的用户体验,操作流畅,用户能够方便地找到需要的信息和功能。

<!-- 添加搜索栏提高易用性 -->
<view class="search-bar"><input placeholder="请输入关键词" /><button bindtap="handleSearch">搜索</button>
</view>

3. 一致性: 界面的布局、风格和交互要保持一致,让用户在不同页面间能够快速适应。

<!-- 使用相同的样式和布局 -->
<view class="item"><image src="{{ item.imageUrl }}"></image><text>{{ item.title }}</text>
</view>

4. 美观性: 界面要具有良好的视觉效果,颜色搭配、排版等要符合美学原则,给人舒适的感觉。

<!-- 美观的卡片式布局 -->
<view class="card"><image src="{{ card.imageUrl }}"></image><text>{{ card.title }}</text><text>{{ card.description }}</text>
</view>

4.2 探索小程序的页面布局方式,包括Flex布局和Grid布局

小程序支持多种页面布局方式,其中包括 Flex 布局和 Grid 布局。

1. Flex 布局: Flex 布局是一种基于弹性盒子模型的布局方式,能够实现灵活的自适应布局。在小程序中,可以通过设置容器的 display: flex 属性来启用 Flex 布局。

<!-- 使用 Flex 布局 -->
<view class="container"><view class="item">Item 1</view><view class="item">Item 2</view><view class="item">Item 3</view>
</view>
/* 在样式文件中定义 Flex 布局 */
.container {display: flex;justify-content: space-between;
}/* 设置子项的 flex: 1 属性,子项将自动根据剩余空间进行均匀分配,并实现了水平方向上的等宽布局效果 */
.item {flex: 1;background-color: #f0f0f0;padding: 10px;
}

2. Grid 布局: Grid 布局是一种二维网格布局方式,能够实现复杂的布局结构。在小程序中,可以通过使用 <grid> 组件来实现 Grid 布局。

<!-- 使用 Grid 布局 -->
<!-- 实现了一个包含三列的网格布局,列与列之间的间距为 10 像素 -->
<grid columns="3" gap="10rpx"><view class="item">Item 1</view><view class="item">Item 2</view><view class="item">Item 3</view>
</grid>
/* 在样式文件中定义 Grid 布局 */
.item {background-color: #f0f0f0;padding: 10px;
}

4.3 学习如何使用 WXML 和 WXSS 进行界面布局和样式设置

WXML 和 WXSS 是小程序中常用的界面布局和样式设置语言。

1. WXML: WXML 是小程序中的标记语言,类似于 HTML,用于描述页面结构。在 WXML 中,可以使用一些基本的标签和属性来定义页面元素。

<!-- 使用 WXML 进行页面布局 -->
<view class="container"><text class="title">Hello, world!</text><image class="avatar" src="https://example.com/avatar.png"></image><button class="btn">Click me!</button>
</view>

2. WXSS: WXSS 是小程序中的样式语言,类似于 CSS,用于描述页面样式。在 WXSS 中,可以使用一些基本的样式规则来设置页面元素的样式。

/* 在样式文件中定义页面样式 */
.container {display: flex;flex-direction: column;align-items: center;justify-content: center;height: 100%;
}.title {font-size: 24px;color: #333;margin-bottom: 20px;
}.avatar {width: 120px;height: 120px;border-radius: 50%;margin-bottom: 20px;
}.btn {padding: 10px 20px;background-color: #007aff;color: #fff;border-radius: 5px;
}

五、本地存储和持久化

5.1 使用小程序的本地存储功能来保存用户数据或其他信息

小程序提供了本地存储功能,可以让开发者方便地保存和读取用户数据或其他信息。

1. 保存数据: 在小程序中,可以通过 wx.setStorageSync() 方法来保存数据到本地存储中,例如用户的登录状态、个人信息等。

// 保存用户登录状态到本地存储中
wx.setStorageSync('isLoggedIn', true);

2. 读取数据: 在小程序中,可以通过 wx.getStorageSync() 方法来读取本地存储中保存的数据,例如读取用户的登录状态、个人信息等。

// 读取用户登录状态
const isLoggedIn = wx.getStorageSync('isLoggedIn');
if (isLoggedIn) {console.log('用户已登录');
} else {console.log('用户未登录');
}

3. 删除数据: 在小程序中,可以通过 wx.removeStorageSync() 方法来删除本地存储中保存的数据,例如删除用户的登录状态、个人信息等。

// 删除用户登录状态
wx.removeStorageSync('isLoggedIn');

5.2 探索不同的本地存储方案和最佳实践

当涉及到本地存储方案和最佳实践时,小程序提供了多种选项,包括异步 API、同步 API 和异步回调等。

1. 异步 API: 小程序提供了异步 API 来进行本地存储,使用起来更加灵活和高效。例如,wx.setStorage()wx.getStorage() 方法是异步存储和读取数据的常用方式。

// 异步保存数据
wx.setStorage({key: 'username',data: 'John',success: function() {console.log('数据保存成功');}
});// 异步读取数据
wx.getStorage({key: 'username',success: function(res) {console.log('用户名:', res.data);}
});

异步 API 允许在数据处理完成后执行回调函数,以确保数据操作的准确性和完整性。

2. 同步 API: 小程序也提供了同步 API 来进行本地存储,但使用同步 API 需要注意阻塞主线程的问题。同步 API 的使用方法与异步 API 类似,只是没有回调函数。

// 同步保存数据
wx.setStorageSync('username', 'John');
console.log('数据保存成功');// 同步读取数据
const username = wx.getStorageSync('username');
console.log('用户名:', username);

同步 API 在数据操作完成前会阻塞主线程,因此在处理大量数据时要谨慎使用。

3. 最佳实践:

  • 避免频繁的本地存储操作:频繁的存储操作可能会影响性能,建议合并多个数据项一次性保存,以减少存储次数。
  • 数据格式选择:对于复杂的数据结构,可以使用 JSON.stringify()JSON.parse() 方法将数据转换为字符串进行存储和读取。
  • 限制本地存储容量:小程序本地存储有一定的容量限制,建议不要存储过大的数据。可以使用 wx.getStorageInfoSync() 方法获取存储信息,根据剩余空间进行存储决策。
  • 错误处理:在进行本地存储操作时,需要注意错误处理,例如检查存储是否成功、读取是否存在等,并及时给予用户反馈。
  • 清理过期数据:对于一些过期或不再需要的数据,及时进行清理,以释放存储空间。

六、模块化开发和代码复用

6.1 介绍小程序的模块化开发方法

小程序提供了模块化开发的方法,可以将功能和代码按照模块进行组织和管理,提高代码的可维护性和复用性。

1. 创建模块: 在小程序中,可以创建一个独立的模块文件,文件后缀通常为 .js。在模块文件中,可以定义需要导出的函数、变量或对象。

创建一个名为 utils.js 的模块文件,其中定义了一个计算两个数之和的函数:

// utils.js
function add(a, b) {return a + b;
}// 使用 module.exports 将 add 函数导出为模块的一个属性
module.exports = {add: add
};

2. 引入模块: 在其他需要使用该模块的文件中,可以使用 require 来引入模块,并使用导出的函数、变量或对象。

创建一个名为 main.js 的文件,引入了 utils.js 模块,并使用其中的 add 函数:

// main.js
// 使用 require 引入了 utils.js 模块,并将导出的内容赋值给 utils 变量
const utils = require('./utils.js');// 通过 utils.add() 调用 add 函数来进行计算
const sum = utils.add(2, 3);
console.log('计算结果:', sum);

6.2 提高代码的复用性和可维护性

提高代码的复用性和可维护性是开发过程中非常重要的目标。

1. 封装可复用的函数和组件: 将常用的功能封装成函数或组件,以便在不同的场景中重复使用。通过将功能模块化,可以减少重复编写相似代码的工作量,并提高代码的复用性。

创建一个名为 utils.js 的工具模块,其中定义了一个计算两个数之和的函数:

// utils.js
function add(a, b) {return a + b;
}module.exports = {add: add
};

在其他文件中引入 utils.js 模块并使用其中的函数:

// main.js
const utils = require('./utils.js');const sum = utils.add(2, 3);
console.log('计算结果:', sum);

通过封装可复用的函数和组件,我们可以在不同的地方重复使用它们,减少代码冗余,提高代码的复用性和可维护性。

2. 使用合适的命名和注释: 给变量、函数和组件起一个有意义的名称,并添加适当的注释,可以提高代码的可读性和可维护性。清晰的命名和注释可以帮助他人更好地理解代码的意图和作用,减少后续维护时的困扰。

// main.js
const utils = require('./utils.js');const sum = utils.add(2, 3); // 计算两个数之和
console.log('计算结果:', sum);

3. 使用模块化开发: 将代码按照模块进行组织和管理,使用模块化开发的方式可以提高代码的复用性和可维护性。通过将功能模块化,可以降低耦合性,减少代码之间的依赖关系,使得代码更易于维护和测试。

例如,可以将一个小程序页面拆分成多个组件,每个组件负责不同的功能,然后在页面中引入这些组件,实现功能的复用和维护的独立性。

眼里有不朽的光芒,心里有永恒的希望

相关文章:

探索微信小程序的奇妙世界:从入门到进阶

文章目录 一、什么是微信小程序1.1 简要介绍微信小程序的定义和特点1.2 解释小程序与传统应用程序的区别 二、小程序的基础知识2.1 微信小程序的架构2.2 微信小程序生命周期的理解2.3 探索小程序的目录结构和文件类型 三、小程序框架和组件3.1 深入了解小程序框架的核心概念和原…...

容器库(4)-std::forward_list

std::forward_list是可以从任何位置快速插入和移除元素的容器&#xff0c;不支持快速随机访问&#xff0c;只支持正向迭代。 本文章的代码库&#xff1a; https://gitee.com/gamestorm577/CppStd 成员函数 构造、析构和赋值 构造函数 可以用元素、元素列表、迭代器或者另…...

Netty Review - 服务端channel注册流程源码解析

文章目录 PreNetty主从Reactor线程模型服务端channel注册流程源码解读入口 serverBootstrap.bind(port) 源码流程图 Pre Netty Review - ServerBootstrap源码解析 Netty Review - NioServerSocketChannel源码分析 Netty主从Reactor线程模型 Netty 使用主从 Reactor 线程模型…...

冒泡排序平均需要跑多少趟:拉马努金Q函数初探

摘要: 拉马努金Q函数在算法分析中的应用&#xff0c;初步体验 【对算法&#xff0c;数学&#xff0c;计算机感兴趣的同学&#xff0c;欢迎关注我哈&#xff0c;阅读更多原创文章】 我的网站&#xff1a;潮汐朝夕的生活实验室 我的公众号&#xff1a;算法题刷刷 我的知乎&#x…...

Shell 学习笔记(三)-shell变量

Shell 语言是一种动态类型和弱类型语言, 因此,在Shell中无需显示地声明变量, 且变量的类型会根据不同的操作符而发生变化. 静态类型语言: 在程序编译期间就确定变量类型的语言, 如java, C等 动态类型语言: 在程序运行期间才确定变量类型的语言, 如PHP, Python等. 一 shell变量…...

新冠:2022和2024两次新冠感染的对比

第一次 2022年底第一次放开管控&#xff0c;95%以上的人都感染了一次奥密克戎 症状 第一天&#xff1a;流涕&#xff0c;咽痛。 第二天&#xff1a;高烧40度&#xff0c;全身疼痛&#xff0c;动不了。没有胃口&#xff0c;头晕想吐。 吃了白加黑退烧药&#xff0c;清开灵颗粒…...

笔记:《NCT全国青少年编程能力等级测试教程Python语言编程二级》

NCT全国青少年编程能力等级测试教程Python语言编程二级 ISBN:9787302565857 绪论 专题1 模块化编程 考查方向 考点清单 考点 模块化编程 (一)模块化编程思想:结构清晰、降低复杂度;提高代码复用率;易于扩展、维护,方便阅读、优化。 …...

顶级思维方式——认知篇五(思想的觉醒)

目录 1、 女性的地位觉醒 2、电视剧《天道》之高人思维&#xff1a;丁元英为什么讲“人间黑白颠倒”&#xff1f; 3、 创业公司, 更应该大胆的创新. 4、 做到一定职务的时候&#xff0c; 你一定想到在你这个地位上你要做什么 1、 女性的地位觉醒 过去引以为鉴的例子&…...

面试技术栈 —— 2024网易雷火暑期实习真题

面试技术栈 —— 2024网易雷火暑期实习真题 1. 最长递增子序列。2. 集中限流和单机限流你觉得哪个好&#xff1f;3. redis部署服务器配置&#xff0c;为什么不用哨兵&#xff1f;4. 讲讲分布式session的原理。5. 数据库&#xff1a;表数据量大了&#xff0c;如何分表&#xff1…...

【小赛1】蓝桥杯双周赛第5场(小白)思路回顾

我的成绩&#xff1a;小白(5/6) 完稿时间&#xff1a;2024-2-13 比赛地址&#xff1a;https://www.lanqiao.cn/oj-contest/newbie-5/ 相关资料&#xff1a; 1、出题人题解&#xff1a;“蓝桥杯双周赛第5次强者挑战赛/小白入门赛”出题人题解 - 知乎 (zhihu.com) 2、矩阵快速幂&…...

docker (二)-yum二进制部署

yum安装docker&#xff08;Linux&#xff09; 安装环境&#xff1a;CentOS 7.9 一 如果之前安装了旧版docker&#xff0c;请先删除 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotat…...

【深度学习】S2 数学基础 P2 线性代数(下)

目录 范数的意义范数的数学意义范数之于深度学习的意义 L1 范数与 L2 范数L1 范数L2 范数 小结 本节博文是线性代数第二部分&#xff0c;主要内容为 L 1 L1 L1 范数与 L 2 L2 L2 范数&#xff1b;有关线性代数基础知识&#xff0c;请访问&#xff1a;【深度学习】S2 数学基础…...

【软考高级信息系统项目管理师--考试内容大纲篇】

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;软考高级–信息系统项目管理师 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 软考高级信息系统项目管理师--考试内容大纲篇 1.信息化发展2.信息技术发展3.信息系…...

C语言——枚举类型

&#x1f4dd;前言&#xff1a; 在之前的文章中我们已经讲解了自定义类型中的结构体类型和联合体类型&#xff0c;现在我们再充分学习一下C语言中的枚举类型&#xff1a; 1&#xff0c;什么是枚举类型 2&#xff0c;枚举类型的定义和变量的声明 3&#xff0c;对变量进行赋值 &a…...

linux---内存管理

一 虚拟内存 即使是现代操作系统中&#xff0c;内存依然是计算机中很宝贵的资源&#xff0c;看看你电脑几个T固态硬盘&#xff0c;再看看内存大小就知道了。 为了充分利用和管理系统内存资源&#xff0c;Linux采用虚拟内存管理技术&#xff0c;利用虚拟内存技术让每个进程都有…...

v-model原理

v-model原理 v-model原理表单类组件封装v-model简化代码 v-model原理 1.原理&#xff1a; v-model本质上是一个语法糖。例如应用在输入框上&#xff0c;就是value属性 和 input 事件的合写 <template><div id"app" ><input v-model"msg"…...

波奇学Linux:文件系统

磁盘认识 磁盘被访问的基本单元是扇区-512字节。 磁盘可以看成多个同心圆&#xff0c;每个同心圆叫做磁道&#xff0c;多个扇区组成同心圆。 我们可以把磁盘看做由无数个扇区构成的存储介质。 要把数据存到磁盘&#xff0c;先定位扇区&#xff0c;用哪一个磁头&#xff0c;…...

项目访问量激增该如何应对

✨✨ 欢迎大家来到喔的嘛呀的博客✨✨ &#x1f388;&#x1f388;希望这篇博客对大家能有帮助&#x1f388;&#x1f388; 目录 引言 一. 优化数据库 1.1 索引优化 1.2 查询优化 1.3 数据库设计优化 1.4 事务优化 1.5 硬件优化 1.6 数据库配置优化 二. 增加服务器资源…...

【Linux环境基础开发工具的使用(yum、vim、gcc、g++、gdb、make/Makefile)】

Linux环境基础开发工具的使用yum、vim、gcc、g、gdb、make/Makefile Linux软件包管理器- yumLinux下安装软件的方式认识yum查找软件包安装软件如何实现本地机器和云服务器之间的文件互传卸载软件 Linux编辑器 - vimvim的基本概念vim下各模式的切换vim命令模式各命令汇总vim底行…...

幻兽帕鲁官方更新了,服务器端怎么更新?

幻兽帕鲁官方客户端更新了&#xff0c;那么它的服务器端版本也是需要更新的&#xff0c;不然版本不一致的话&#xff0c;就不能进入游戏了。 具体的更新方法有两种&#xff0c;一是手动输入命令进行更新。第二种是在面板一键更新。 无论你是在阿里云或者腾讯云购买的一键部署…...

Xshell远程连接Kali(默认 | 私钥)Note版

前言:xshell远程连接&#xff0c;私钥连接和常规默认连接 任务一 开启ssh服务 service ssh status //查看ssh服务状态 service ssh start //开启ssh服务 update-rc.d ssh enable //开启自启动ssh服务 任务二 修改配置文件 vi /etc/ssh/ssh_config //第一…...

DockerHub与私有镜像仓库在容器化中的应用与管理

哈喽&#xff0c;大家好&#xff0c;我是左手python&#xff01; Docker Hub的应用与管理 Docker Hub的基本概念与使用方法 Docker Hub是Docker官方提供的一个公共镜像仓库&#xff0c;用户可以在其中找到各种操作系统、软件和应用的镜像。开发者可以通过Docker Hub轻松获取所…...

Redis相关知识总结(缓存雪崩,缓存穿透,缓存击穿,Redis实现分布式锁,如何保持数据库和缓存一致)

文章目录 1.什么是Redis&#xff1f;2.为什么要使用redis作为mysql的缓存&#xff1f;3.什么是缓存雪崩、缓存穿透、缓存击穿&#xff1f;3.1缓存雪崩3.1.1 大量缓存同时过期3.1.2 Redis宕机 3.2 缓存击穿3.3 缓存穿透3.4 总结 4. 数据库和缓存如何保持一致性5. Redis实现分布式…...

DIY|Mac 搭建 ESP-IDF 开发环境及编译小智 AI

前一阵子在百度 AI 开发者大会上&#xff0c;看到基于小智 AI DIY 玩具的演示&#xff0c;感觉有点意思&#xff0c;想着自己也来试试。 如果只是想烧录现成的固件&#xff0c;乐鑫官方除了提供了 Windows 版本的 Flash 下载工具 之外&#xff0c;还提供了基于网页版的 ESP LA…...

【JavaSE】多线程基础学习笔记

多线程基础 -线程相关概念 程序&#xff08;Program&#xff09; 是为完成特定任务、用某种语言编写的一组指令的集合简单的说:就是我们写的代码 进程 进程是指运行中的程序&#xff0c;比如我们使用QQ&#xff0c;就启动了一个进程&#xff0c;操作系统就会为该进程分配内存…...

pycharm 设置环境出错

pycharm 设置环境出错 pycharm 新建项目&#xff0c;设置虚拟环境&#xff0c;出错 pycharm 出错 Cannot open Local Failed to start [powershell.exe, -NoExit, -ExecutionPolicy, Bypass, -File, C:\Program Files\JetBrains\PyCharm 2024.1.3\plugins\terminal\shell-int…...

【WebSocket】SpringBoot项目中使用WebSocket

1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖&#xff0c;添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...

【Linux】Linux安装并配置RabbitMQ

目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的&#xff0c;需要先安…...

Qt的学习(一)

1.什么是Qt Qt特指用来进行桌面应用开发&#xff08;电脑上写的程序&#xff09;涉及到的一套技术Qt无法开发网页前端&#xff0c;也不能开发移动应用。 客户端开发的重要任务&#xff1a;编写和用户交互的界面。一般来说和用户交互的界面&#xff0c;有两种典型风格&…...

麒麟系统使用-进行.NET开发

文章目录 前言一、搭建dotnet环境1.获取相关资源2.配置dotnet 二、使用dotnet三、其他说明总结 前言 麒麟系统的内核是基于linux的&#xff0c;如果需要进行.NET开发&#xff0c;则需要安装特定的应用。由于NET Framework 是仅适用于 Windows 版本的 .NET&#xff0c;所以要进…...