UniApp 组件的深度运用
一、引言
在当今的移动应用开发领域,跨平台开发已成为主流趋势,而 UniApp 作为其中的佼佼者,备受开发者青睐。UniApp 的强大之处很大程度上源于其丰富且功能多样的组件体系,这些组件宛如精巧的积木,能够帮助开发者快速搭建出高性能、美观且功能完备的应用程序,无缝运行于多个平台,无论是 iOS、Android 还是 H5 等。然而,仅仅停留在基础组件的使用层面,远远无法发挥 UniApp 的真正潜力。本篇文章将深入探讨 UniApp 组件的深度运用,带你挖掘那些隐藏在常规用法背后的技巧、优化策略以及创新实践,助你在跨平台开发之路上披荆斩棘,打造出令人惊艳的应用作品,无论你是初涉 UniApp 的新手,还是经验丰富的开发者,相信都能从中收获满满干货。
二、UniApp 组件库全景洞察
2.1 组件库概览
UniApp 组件库是基于 Vue.js 框架进行开发的,它就像是一个琳琅满目的百宝箱,涵盖了各式各样的界面元素,从最为基础的文本显示、按钮交互,到复杂的导航栏、表单填写,再到绚丽的图片展示、视频播放等多媒体组件,应有尽有。这些组件遵循简洁易用的设计原则,开发者无需耗费大量精力去从头编写底层代码,只需按照组件的规则进行配置与组合,就能迅速搭建起应用的雏形。例如,一个简单的电商应用,利用组件库中的列表组件展示商品列表、图片组件呈现商品图片、按钮组件实现加入购物车等操作,短短几个组件的搭配,就能让核心购物流程初步跑通,极大地提升了开发效率,让创意能够快速落地为可运行的应用。
2.2 组件类型剖析
- 基础组件:这是构建页面的基石,像<text>组件用于文本展示,通过设置属性可以灵活调整字体大小、颜色、粗细等样式,让信息以最恰当的形式呈现给用户;<view>组件则充当容器角色,类似 HTML 中的<div>,用于布局划分,把页面划分为不同的逻辑区域,方便后续组件的有序排列。在搭建一个资讯类应用的文章详情页时,<view>组件构建页面框架,<text>组件填充标题、正文内容,二者配合,撑起页面的基本结构。
- 导航组件:负责管理应用内的页面跳转逻辑,<navigator>组件堪称核心。它支持多种跳转方式,如普通跳转、跳转到 tabBar 页面、返回上一页面等,并且可以携带参数,实现页面间的数据传递。以社交应用为例,从好友列表点击某个好友头像,利用<navigator>携带好友 ID 跳转到好友详情页,详情页接收参数后精准展示对应好友信息,保障用户流畅的交互体验,无缝穿梭于不同页面层级。
- 表单组件:在需要用户输入信息的场景大放异彩,<input>组件用于接收文本输入,无论是简单的用户名、密码填写,还是复杂的评论内容输入,都能轻松应对,配合<textarea>组件处理多行文本,以及<checkbox>、<radio>组件实现多选、单选操作,满足多样化的表单需求。在注册登录页面,<input>收集账号密码,<checkbox>勾选协议,一系列表单组件协同,确保用户信息准确录入。
- 媒体组件:为应用增添视觉听觉魅力,<image>组件高效加载并展示图片,支持本地图片资源与网络图片链接,配合懒加载等优化策略,避免图片加载卡顿;<video>组件让视频播放变得简单,可控制播放暂停、进度调节、全屏切换等功能,适用于在线教育类应用播放课程视频、短视频应用展示趣味视频等场景,丰富用户感知。
三、组件深度运用之核心秘籍
3.1 API 精通之道
深入理解并熟练运用组件的 API(应用程序编程接口)是挖掘组件最大潜力的关键。UniApp 组件的 API 文档详细记录了每个组件所拥有的属性、方法以及事件,这是开发者开启深度运用大门的 “密码本”。以常见的按钮组件<button>为例,它具有诸如 size(控制按钮大小)、type(设定按钮样式类型,像默认、危险、警告等风格)、disabled(是否禁用按钮)等属性。通过精准设置这些属性,开发者可以轻松打造出符合应用整体风格且交互友好的按钮。比如在一个任务管理应用中,对于已完成的任务,将对应操作按钮的 disabled 属性设为 true,使其变灰且不可点击,避免用户重复操作;同时,利用按钮的 @click 事件绑定相应的处理函数,当用户点击按钮时,触发函数执行诸如更新任务状态、发送网络请求等逻辑,实现无缝的人机交互,代码示例如下:
<button size="mini" type="primary" @click="handleSubmit">提交任务</button>
在上述代码中,按钮设置为小尺寸(size="mini")、主要风格(type="primary"),点击时触发 handleSubmit 函数,该函数在 Vue 实例的 methods 选项中定义,用于处理提交任务的相关业务逻辑。
3.2 组件的巧妙组合
依据应用的功能需求以及设计美学,巧妙地将不同组件组合使用,能够创造出远超单个组件功能之和的效果。当开发一个资讯类应用时,列表组件<list>结合图片组件<image>、文本组件<text>,便能构建出富有吸引力的资讯列表页面。<list>负责整体布局排列,<image>展示资讯配图,吸引用户目光,<text>呈现标题、简介等文本信息,为用户提供关键内容预览。示例代码如下:
<list>
<list-item v-for="(item, index) in newsList" :key="index">
<image :src="item.imageUrl" mode="aspectFill"></image>
<text class="news-title">{{ item.title }}</text>
<text class="news-desc">{{ item.desc }}</text>
</list-item>
</list>
这里,通过 v-for 指令遍历 newsList 数据数组,为每个资讯项动态生成包含图片、标题、简介的列表项,其中图片设置了填充模式(mode="aspectFill")以保证展示效果美观,不同组件各司其职又紧密配合,让资讯列表一目了然,提升用户浏览效率。
3.3 样式的个性定制
虽然组件自带默认样式,但为了契合应用独特的品牌形象与用户体验目标,个性化的样式定制不可或缺。UniApp 允许开发者利用内联样式以及外部样式表,借助组件提供的样式属性对其外观进行深度调整。例如对于列表组件<list>,可通过设置 padding 属性调整列表项间距,创造出疏密得当的视觉感受;又如,在一些场景下,利用插槽(slot)技术,能够在组件内部嵌入自定义内容,像在按钮组件旁插入一个信息图标,增强表意性。代码如下:
<button class="custom-btn">
<text>操作按钮</text>
<slot name="icon"></slot>
</button>
<style>
.custom-btn {
display: flex;
align-items: center;
}
</style>
在 Vue 实例中使用时:
<custom-btn>
<image slot="icon" src="info-icon.png" class="icon"></image>
</custom-btn>
通过这种方式,既保持了按钮的基本功能,又通过嵌入图标丰富了其信息提示,同时外部样式表调整按钮布局为弹性盒子(display: flex),让图标与文字完美排列,彰显个性化设计巧思。
3.4 Vue.js 生态融合
UniApp 与 Vue.js 生态紧密融合,借助 Vue Router、Vuex 等周边技术,能够进一步拓展组件的功能边界。Vue Router 可实现前端路由管理,让组件驱动的页面间导航更加顺滑。例如在一个多页面的电商应用中,通过配置 Vue Router,将商品列表组件所在页面与商品详情组件所在页面建立路由连接,当用户点击列表中的商品时,利用编程式导航(this.$router.push)携带商品 ID 跳转到详情页,精准加载对应商品信息,示例配置如下:
// 在路由模块
const routes = [
{
path: '/productList',
name: 'ProductList',
component: () => import('@/pages/ProductList.vue')
},
{
path: '/productDetail/:id',
name: 'ProductDetail',
component: () => import('@/pages/ProductDetail.vue')
}
]
const router = new VueRouter({
routes
})
// 在组件中使用
methods: {
goToDetail(productId) {
this.$router.push({ name: 'ProductDetail', params: { id: productId } })
}
}
而 Vuex 作为状态管理库,能让多个组件共享应用状态,如购物车组件、商品列表组件、结算组件等共享购物车商品数量、总价等状态,一处修改,多处响应,避免数据混乱,保障复杂交互场景下组件协同的一致性与高效性。
四、实战案例:组件铸就精彩应用
4.1 案例项目总览
为了让大家更直观地感受 UniApp 组件深度运用的魅力,我们选取一个仿知乎日报的项目作为实战案例。在这个项目中,需要实现资讯的分类展示、分页加载、文章详情跳转以及用户交互等一系列复杂功能,而 UniApp 组件将在其中扮演关键角色,助力我们打造出媲美原生应用的流畅体验。通过合理选用列表组件、导航组件、富文本组件等,构建起从资讯概览到深度阅读的一站式平台,涵盖首页信息流、文章详情页、导航栏切换、评论输入等多个核心场景,充分展现组件组合运用的强大力量。
4.2 关键组件实战运用
4.2.1 列表组件的极致发挥
在仿知乎日报的首页,新闻列表是吸引用户的关键区域,此时 uni-list 组件大显身手。它能够有序排列一条条新闻资讯,为提升视觉吸引力,为每个列表项配置缩略图,让用户一眼捕捉关键信息。利用组件的插槽机制,在标题旁嵌入新闻来源图标,增强信息可信度。代码实现如下:
<uni-list>
<uni-list-item v-for="(item, index) in newsData" :key="index">
<image :src="item.thumbnail" class="news-thumbnail"></image>
<view class="news-content">
<text class="news-title">{{ item.title }}</text>
<view class="news-source">
<image :src="item.sourceIcon" class="source-icon"></image>
<text class="source-text">{{ item.source }}</text>
</view>
</view>
</uni-list-item>
</uni-list>
在上述代码中,v-for 遍历 newsData 数组生成列表项,通过合理布局图片与文本组件,呈现美观且信息丰富的新闻列表。同时,为列表项绑定点击事件,实现跳转到对应文章详情页:
<uni-list-item v-for="(item, index) in newsData" :key="index" @click="goToDetail(item.id)">
<!-- 内部结构同上 -->
</uni-list-item>
<script>
export default {
methods: {
goToDetail(id) {
uni.navigateTo({
url: `/pages/detail/detail?id=${id}`
});
}
}
}
</script>
当用户点击列表项时,触发 goToDetail 方法,利用 uni.navigateTo API 携带新闻 ID 跳转到详情页,实现流畅交互。
4.2.2 导航栏组件的深度定制
导航栏作为应用的 “门头”,在仿知乎日报项目中同样有深度定制需求。借助 UniApp 的导航栏组件,不仅能设置常规的标题,还能按需添加左右按钮。例如,在首页导航栏右侧添加搜索按钮,方便用户查找特定资讯;当用户登录后,根据登录状态动态更新导航栏左侧显示用户头像或登录按钮,增强用户归属感与操作便捷性。代码逻辑如下:
<template>
<view>
<uni-nav-bar :title="pageTitle" left-text="返回" right-text="搜索" @leftclick="goBack" @rightclick="goSearch">
<view v-if="isLoggedIn" slot="left">
<image :src="userAvatar" class="avatar"></image>
</view>
<view v-else slot="left">
<text @click="goLogin">登录</text>
</view>
</uni-nav-bar>
<!-- 页面主体内容 -->
</view>
</template>
<script>
export default {
data() {
return {
pageTitle: '知乎日报',
isLoggedIn: false,
userAvatar: ''
};
},
methods: {
goBack() {
uni.navigateBack();
},
goSearch() {
// 跳转到搜索页面逻辑
},
goLogin() {
// 跳转到登录页面逻辑
}
}
};
</script>
<style>
.avatar {
width: 30px;
height: 30px;
border-radius: 50%;
margin-left: 10px;
}
</style>
在上述代码中,通过 Vue 的条件渲染(v-if、v-else)结合插槽,依据用户登录状态灵活展示导航栏左侧内容,点击事件绑定相应操作函数,无论是返回、搜索还是登录跳转,都精准满足用户在不同场景下的需求,提升应用易用性。后续我们还将在这个项目中继续深挖更多组件的深度用法,逐步完善整个应用的功能与体验,见证 UniApp 组件如何从零搭建起一个功能完备、交互友好的资讯平台。
五、性能优化与兼容性攻坚
5.1 性能优化策略
随着应用功能的丰富与数据量的增长,性能优化成为 UniApp 开发中不可忽视的环节。在组件运用层面,首先要尽量减少组件的嵌套层级。过多过深的组件嵌套会增加浏览器渲染负担,拖慢页面加载速度。例如在构建一个复杂的表单页面时,原本层层嵌套的<view>组件用于布局不同表单区域,优化后可依据实际样式需求,合理合并一些<view>,减少不必要的层级,让 DOM 结构更加扁平,代码如下:
<!-- 优化前 -->
<view class="form-container">
<view class="section">
<view class="item-label">用户名:</view>
<input class="input-field" placeholder="请输入用户名">
</view>
<view class="section">
<view class="item-label">密码:</view>
<input class="input-field" placeholder="请输入密码" type="password">
</view>
</view>
<!-- 优化后 -->
<view class="form-container">
<view class="section">
<text class="item-label">用户名:</text>
<input class="input-field" placeholder="请输入用户名">
</view>
<text class="item-label">密码:</text>
<input class="input-field" placeholder="请输入密码" type="password">
</view>
其次,合理运用懒加载技术,对于图片组件<image>、长列表组件<uni-list>等,采用懒加载能极大提升初始加载性能。如电商应用中的商品图片列表,当页面滚动到对应位置时,图片才开始加载,避免一次性加载大量图片导致卡顿,代码如下:
<image v-lazy="imageUrl" alt="商品图片"></image>
同时,优化数据更新机制也至关重要。在 UniApp 中,数据变化会触发视图更新,若频繁更新大量数据,会造成性能损耗。比如在实时更新商品库存数量的场景,避免直接在循环中频繁修改数据,而是通过精准定位修改对应数据项,并利用 Vue 的异步更新队列机制(如 this.$nextTick)确保更新高效进行,示例如下:
// 错误示例:频繁更新导致性能问题
methods: {
updateStock(productId, newStock) {
this.products.forEach(product => {
if (product.id === productId) {
product.stock = newStock; // 直接修改,引发多次不必要渲染
}
});
}
}
// 正确示例:精准高效更新
methods: {
updateStock(productId, newStock) {
const productIndex = this.products.findIndex(product => product.id === productId);
if (productIndex!== -1) {
// 使用 Vue.set 确保响应式更新
this.$set(this.products, productIndex, {...this.products[productIndex], stock: newStock });
this.$nextTick(() => {
// 数据更新后的操作,如更新相关统计信息等
});
}
}
}
5.2 跨平台兼容性适配
UniApp 虽主打一套代码多端运行,但不同平台(iOS、Android、H5 等)仍存在细微差异,组件的兼容性适配不可或缺。利用条件编译指令,开发者能针对特定平台编写差异化代码。在样式方面,如导航栏样式,iOS 倾向简洁透明风格,安卓则多为纯色带阴影风格,通过条件编译设置不同样式类:
<!-- #ifdef APP-PLUS-IOS -->
<uni-nav-bar class="ios-nav-bar" :title="pageTitle"></uni-nav-bar>
<!-- #endif -->
<!-- #ifdef APP-PLUS-ANDROID -->
<uni-nav-bar class="android-nav-bar" :title="pageTitle"></uni-nav-bar>
<!-- #endif -->
在组件使用上,某些平台特有的交互组件,如 iOS 的原生分享组件,安卓的系统弹窗组件,也可借助条件编译在对应平台引入并使用,确保功能与原生体验接轨:
<!-- #ifdef APP-PLUS-IOS -->
<view @click="openIOSShare">分享(iOS 专用)</view>
<template>
<div>
<!-- 引入 iOS 分享组件 -->
<ios-share ref="iosShare"></ios-share>
</div>
</template>
<script>
import iosShare from '@/components/ios-share.vue';
export default {
components: {
iosShare
},
methods: {
openIOSShare() {
this.$refs.iosShare.show(); // 调用 iOS 分享组件方法
}
}
};
</script>
<!-- #endif -->
<!-- #ifdef APP-PLUS-ANDROID -->
<view @click="openAndroidDialog">提示(安卓专用)</view>
<template>
<div>
<!-- 引入安卓系统弹窗组件 -->
<android-dialog ref="androidDialog"></android-dialog>
</div>
</template>
<script>
import androidDialog from '@/components/android-dialog.vue';
export default {
components: {
androidDialog
},
methods: {
openAndroidDialog() {
this.$refs.androidDialog.show(); // 调用安卓弹窗组件方法
}
}
};
</script>
<!-- #endif -->
此外,对于一些 CSS 特性的兼容性问题,如 flex 布局在不同平台的细微差异、单位换算(px、rpx、rem 等),都需要在样式编写时谨慎处理,借助预处理器(如 Less、Sass)的函数与变量,灵活适配不同平台的显示要求,保障组件在各平台都呈现完美效果。
六、总结与展望
通过本文对 UniApp 组件深度运用的全面剖析,我们清晰地认识到组件在跨平台应用开发中的核心地位。从了解组件库的全貌,到掌握组件运用的核心秘籍,再到实战项目中见证组件铸就精彩,以及攻克性能与兼容性难题,每一个环节都为打造优质应用奠定基石。UniApp 组件深度运用不仅是技术的堆叠,更是创意与工程实践的精妙融合,它让开发者能以高效的方式将构想落地,跨越不同平台界限,触达广泛用户群体。然而,技术发展永不止步,随着移动开发领域持续演进,新的交互模式、设计理念不断涌现,UniApp 组件也必然随之进化。开发者需保持敏锐学习触角,持续探索组件新特性、新组合,勇于在项目中创新实践,方能紧跟潮流,利用 UniApp 组件开发出更具竞争力、更贴合用户需求的卓越应用,在跨平台开发的广阔天地中持续领航,开启无限可能的应用开发新征程。
相关文章:
UniApp 组件的深度运用
一、引言 在当今的移动应用开发领域,跨平台开发已成为主流趋势,而 UniApp 作为其中的佼佼者,备受开发者青睐。UniApp 的强大之处很大程度上源于其丰富且功能多样的组件体系,这些组件宛如精巧的积木,能够帮助开发者快速…...

k8s部署nginx+sshd实现文件上传下载
要通过 nginx 和 sshd 实现文件的上传和下载,通常的做法是结合 SSH 协议和 HTTP 协议,使用 nginx 提供 Web 服务器功能,同时使用 sshd(即 SSH 服务)来处理通过 SSH 协议进行的文件传输。 SSH 实现文件的上传和下载&…...

Spring-Mybatis 2.0
前言: 第一点:过于依赖代码生成器或AI,导致基于mybaits的CRUD通通忘了,所以为了找回遗忘的记忆,有了该系列内容。 第二点:通过实践而发现真理,又通过实践而证实真理和发展真理。从感性认识而能…...

Linux 的历史与发展:从诞生到未来
Linux 的历史与发展:从诞生到未来 1. 起源之前:操作系统的历史背景 在 Linux 问世之前,操作系统的发展经历了多个重要阶段,这些阶段为 Linux 的诞生奠定了基础: 1940-1950 年代:计算机初期 早期计算机如 [[…...
SQL Server实现将分组的其他字段数据拼接成一条数据
在 SQL Server 中,可以使用 STRING_AGG 函数(SQL Server 2017 及更高版本支持)将分组的其他字段数据拼接成一条数据。以下是示例代码: 假设有一个表 Orders,结构如下: OrderIDCustomerIDProduct1C001Appl…...
学习笔记 --C#基础其他知识点(同步和异步)
C#中的同步和异步《一》 以下理解借鉴博客:借鉴博客地址1 异步编程(Asynchronous) 允许任务在后台执行,而不会阻塞调用线程。C#使用async和await关键字 async Task AsynchronousMethod() {// 等待异步操作完成await Task.Dela…...

一维、线性卡尔曼滤波的例程(MATLAB)
这段 MATLAB 代码实现了一维线性卡尔曼滤波器的基本功能,用于估计在存在噪声的情况下目标状态的真实值 文章目录 一维线性卡尔曼滤波代码运行代码介绍1. **初始化部分**2. **数据生成**3. **卡尔曼滤波器实现**4. **结果可视化**5. **统计输出**源代码总结一维线性卡尔曼滤波 …...

极品飞车6的游戏手柄设置
极品飞车,既可以用键盘来控制车辆的前进、后退、左转、右转、加速与减速,也可以使用游戏手柄来操作车辆的运行。需要注意的是,极品飞车虽然支持手柄,但是仅支持常见的北通、罗技还有部分Xbox系列的手柄,至于其他的PS4手…...
FreeRTOS Lwip Socket APi TCP Server 1对多
源文件 /********************************************************************************* file lwip_tcp_driver.cpp* brief TCP Server implementation using LwIP******************************************************************************* at…...

逆袭之路(11)——python网络爬虫:原理、应用、风险与应对策略
困厄铸剑心,逆袭展锋芒。 寒苦凝壮志,腾跃绘华章。 我要逆袭。 目录 一、引言 二、网络爬虫的基本原理 (一)网络请求与响应 (二)网页解析 (三)爬行策略 三、网络爬虫的应用领…...

KOI技术-事件驱动编程(Sping后端)
1 “你日渐平庸,甘于平庸,将继续平庸。”——《以自己喜欢的方式过一生》 2. “总是有人要赢的,那为什么不能是我呢?”——科比布莱恩特 3. “你那么憎恨那些人,和他们斗了那么久,最终却要变得和他们一样,…...

LVS 负载均衡原理 | 配置示例
注:本文为 “ LVS 负载均衡原理 | 配置” 相关文章合辑。 部分内容已过时,可以看看原理实现。 未整理去重。 使用 LVS 实现负载均衡原理及安装配置详解 posted on 2017-02-12 14:35 肖邦 linux 负载均衡集群是 load balance 集群的简写,翻…...
Hive分区再分桶表
在Hive中,数据通常是根据分区(partition)来组织的,但是对于大数据集,单层分区可能不够用,因此可以进一步细分为桶(bucket)。桶可以用于提供额外的并行处理和优化查询性能。在这种情况…...

从 Coding (Jenkinsfile) 到 Docker:全流程自动化部署 Spring Boot 实战指南(简化篇)
前言 本文记录使用 Coding (以 Jenkinsfile 为核心) 和 Docker 部署 Springboot 项目的过程,分享设置细节和一些注意问题。 1. 配置服务器环境 在实施此过程前,确保服务器已配置好 Docker、MySQL 和 Redis,可参考下列链接进行操作࿱…...
Linux官文转载-- Linux 内核代码风格
Warning 此文件的目的是为让中文读者更容易阅读和理解,而不是作为一个分支。 因此, 如果您对此文件有任何意见或更新,请先尝试更新原始英文文件。 这是一个简短的文档,描述了 linux 内核的首选代码风格。代码风格是因人而异的&a…...

Qt监控系统放大招/历经十几年迭代完善/多屏幕辅屏预览/多层级设备树/网络登录和回放
一、前言说明 近期对视频监控系统做了比较大的更新升级,主要就是三点,第一点就是增加了辅屏预览,这个也是好多个客户需要的功能,海康的iVMS-4200客户端就有这个功能,方便在多个屏幕打开不同的视频进行查看,…...

【贪心算法】贪心算法七
贪心算法七 1.整数替换2.俄罗斯套娃信封问题3.可被三整除的最大和4.距离相等的条形码5.重构字符串 点赞👍👍收藏🌟🌟关注💖💖 你的支持是对我最大的鼓励,我们一起努力吧!😃…...
LangChain教程 - 表达式语言 (LCEL) -构建智能链
系列文章索引 LangChain教程 - 系列文章 LangChain提供了一种灵活且强大的表达式语言 (LangChain Expression Language, LCEL),用于创建复杂的逻辑链。通过将不同的可运行对象组合起来,LCEL可以实现顺序链、嵌套链、并行链、路由以及动态构建等高级功能…...

使用Locust对Redis进行负载测试
1.安装环境 安装redis brew install redis 开启redis服务 brew services start redis 停止redis服务 brew services stop redis 安装Python库 pip install locust redis 2.编写脚本 loadTest.py # codingutf-8 import json import random import time import redis …...
HIVE数据仓库分层
1:为什么要分层 大多数情况下,我们完成的数据体系却是依赖复杂、层级混乱的。在不知不觉的情况下,我们可能会做出一套表依赖结构混乱,甚至出现循环依赖的数据体系。 我们需要一套行之有效的数据组织和管理方法来让我们的数据体系…...
RestClient
什么是RestClient RestClient 是 Elasticsearch 官方提供的 Java 低级 REST 客户端,它允许HTTP与Elasticsearch 集群通信,而无需处理 JSON 序列化/反序列化等底层细节。它是 Elasticsearch Java API 客户端的基础。 RestClient 主要特点 轻量级ÿ…...

基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...

DAY 47
三、通道注意力 3.1 通道注意力的定义 # 新增:通道注意力模块(SE模块) class ChannelAttention(nn.Module):"""通道注意力模块(Squeeze-and-Excitation)"""def __init__(self, in_channels, reduction_rat…...

渗透实战PortSwigger靶场-XSS Lab 14:大多数标签和属性被阻止
<script>标签被拦截 我们需要把全部可用的 tag 和 event 进行暴力破解 XSS cheat sheet: https://portswigger.net/web-security/cross-site-scripting/cheat-sheet 通过爆破发现body可以用 再把全部 events 放进去爆破 这些 event 全部可用 <body onres…...

Module Federation 和 Native Federation 的比较
前言 Module Federation 是 Webpack 5 引入的微前端架构方案,允许不同独立构建的应用在运行时动态共享模块。 Native Federation 是 Angular 官方基于 Module Federation 理念实现的专为 Angular 优化的微前端方案。 概念解析 Module Federation (模块联邦) Modul…...

深度学习习题2
1.如果增加神经网络的宽度,精确度会增加到一个特定阈值后,便开始降低。造成这一现象的可能原因是什么? A、即使增加卷积核的数量,只有少部分的核会被用作预测 B、当卷积核数量增加时,神经网络的预测能力会降低 C、当卷…...
《C++ 模板》
目录 函数模板 类模板 非类型模板参数 模板特化 函数模板特化 类模板的特化 模板,就像一个模具,里面可以将不同类型的材料做成一个形状,其分为函数模板和类模板。 函数模板 函数模板可以简化函数重载的代码。格式:templa…...

力扣热题100 k个一组反转链表题解
题目: 代码: func reverseKGroup(head *ListNode, k int) *ListNode {cur : headfor i : 0; i < k; i {if cur nil {return head}cur cur.Next}newHead : reverse(head, cur)head.Next reverseKGroup(cur, k)return newHead }func reverse(start, end *ListNode) *ListN…...

GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
小木的算法日记-多叉树的递归/层序遍历
🌲 从二叉树到森林:一文彻底搞懂多叉树遍历的艺术 🚀 引言 你好,未来的算法大神! 在数据结构的世界里,“树”无疑是最核心、最迷人的概念之一。我们中的大多数人都是从 二叉树 开始入门的,它…...