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

鸿蒙OSUniApp制作动态筛选功能的列表组件(鸿蒙系统适配版)#三方框架 #Uniapp

使用UniApp制作动态筛选功能的列表组件(鸿蒙系统适配版)

前言

随着移动应用的普及,用户对应用内容检索和筛选的需求也越来越高。在开发跨平台应用时,动态筛选功能已成为提升用户体验的重要组成部分。本文将详细介绍如何使用UniApp开发一个功能完善的动态筛选列表组件,并重点关注如何适配鸿蒙系统,确保在华为设备上获得良好的用户体验。

需求分析

在日常应用场景中,常见的动态筛选功能包括:

  1. 多条件组合筛选(如价格、分类、评分等)
  2. 筛选条件的动态加载
  3. 筛选结果的实时更新
  4. 筛选历史记录保存
  5. 鸿蒙系统上的特殊适配

一个优秀的筛选组件应该具备以下特点:易用性强、响应速度快、视觉反馈清晰、适配多平台(特别是鸿蒙系统)。

技术选型

我们将使用以下技术栈:

  • UniApp作为跨平台开发框架
  • Vue3 + TypeScript提供响应式编程体验
  • uView UI组件库辅助界面开发
  • Vuex管理筛选状态
  • 针对鸿蒙系统的特殊API调用

组件设计与实现

1. 基础结构设计

首先,我们设计组件的基础结构:

<template><view class="filter-container"><!-- 筛选条件区域 --><view class="filter-header"><view v-for="(item, index) in filterOptions" :key="index"class="filter-tab":class="{'active': currentTab === index}"@click="switchTab(index)"><text>{{ item.name }}</text><text class="icon" :class="{'icon-up': item.isOpen, 'icon-down': !item.isOpen}"></text></view></view><!-- 筛选面板 --><view class="filter-panel" v-if="showPanel"><component :is="activeComponent" :options="activeOptions"@confirm="confirmFilter"@reset="resetFilter"></component></view><!-- 列表区域 --><view class="list-container"><view v-for="(item, index) in filteredList" :key="index"class="list-item harmony-list-item"><text class="item-title">{{ item.title }}</text><text class="item-desc">{{ item.description }}</text></view><!-- 空数据提示 --><view class="empty-tip" v-if="filteredList.length === 0"><text>暂无符合条件的数据</text></view></view></view>
</template><script lang="ts">
import { defineComponent, ref, reactive, computed, onMounted } from 'vue';
import CategoryFilter from './filter-components/CategoryFilter.vue';
import PriceFilter from './filter-components/PriceFilter.vue';
import SortFilter from './filter-components/SortFilter.vue';
import { isHarmonyOS, adaptToHarmonyOS } from '@/utils/platform';export default defineComponent({components: {CategoryFilter,PriceFilter,SortFilter},setup() {// 是否为鸿蒙系统const isHarmony = ref(false);// 筛选选项定义const filterOptions = reactive([{ name: '分类', type: 'category', isOpen: false },{ name: '价格', type: 'price', isOpen: false },{ name: '排序', type: 'sort', isOpen: false },]);// 当前选中的标签const currentTab = ref(-1);// 是否显示筛选面板const showPanel = computed(() => currentTab.value >= 0);// 筛选条件const filterConditions = reactive({category: [],price: { min: 0, max: 9999 },sort: 'default'});// 原始数据列表const originalList = ref([]);// 获取筛选后的列表const filteredList = computed(() => {return originalList.value.filter((item: any) => {// 分类筛选if (filterConditions.category.length > 0 && !filterConditions.category.includes(item.category)) {return false;}// 价格筛选if (item.price < filterConditions.price.min || item.price > filterConditions.price.max) {return false;}return true;}).sort((a: any, b: any) => {// 排序逻辑if (filterConditions.sort === 'price-asc') {return a.price - b.price;} else if (filterConditions.sort === 'price-desc') {return b.price - a.price;}return 0;});});// 当前激活的筛选组件const activeComponent = computed(() => {if (currentTab.value < 0) return null;const type = filterOptions[currentTab.value].type;return type.charAt(0).toUpperCase() + type.slice(1) + 'Filter';});// 当前筛选组件的选项const activeOptions = computed(() => {if (currentTab.value < 0) return {};const type = filterOptions[currentTab.value].type;return filterConditions[type];});// 切换筛选标签const switchTab = (index: number) => {if (currentTab.value === index) {currentTab.value = -1;filterOptions[index].isOpen = false;} else {// 关闭之前打开的标签if (currentTab.value >= 0) {filterOptions[currentTab.value].isOpen = false;}currentTab.value = index;filterOptions[index].isOpen = true;}};// 确认筛选const confirmFilter = (data: any) => {const type = filterOptions[currentTab.value].type;filterConditions[type] = data;currentTab.value = -1;filterOptions[currentTab.value].isOpen = false;// 保存筛选历史saveFilterHistory();};// 重置筛选const resetFilter = () => {const type = filterOptions[currentTab.value].type;if (type === 'category') {filterConditions.category = [];} else if (type === 'price') {filterConditions.price = { min: 0, max: 9999 };} else if (type === 'sort') {filterConditions.sort = 'default';}};// 保存筛选历史const saveFilterHistory = () => {uni.setStorageSync('filter_history', JSON.stringify(filterConditions));};// 获取筛选历史const getFilterHistory = () => {try {const history = uni.getStorageSync('filter_history');if (history) {const parsedHistory = JSON.parse(history);Object.assign(filterConditions, parsedHistory);}} catch (e) {console.error('获取筛选历史失败', e);}};// 获取列表数据const fetchListData = () => {// 这里模拟数据请求setTimeout(() => {originalList.value = [{ id: 1, title: '商品1', description: '这是商品1的描述', category: 'food', price: 129 },{ id: 2, title: '商品2', description: '这是商品2的描述', category: 'food', price: 59 },{ id: 3, title: '商品3', description: '这是商品3的描述', category: 'cloth', price: 199 },{ id: 4, title: '商品4', description: '这是商品4的描述', category: 'electronic', price: 1299 },{ id: 5, title: '商品5', description: '这是商品5的描述', category: 'electronic', price: 899 },];}, 500);};onMounted(() => {// 检测是否为鸿蒙系统isHarmony.value = isHarmonyOS();// 鸿蒙系统适配if (isHarmony.value) {adaptToHarmonyOS();}// 获取数据fetchListData();// 获取历史筛选条件getFilterHistory();});return {filterOptions,currentTab,showPanel,filteredList,activeComponent,activeOptions,switchTab,confirmFilter,resetFilter,isHarmony};}
});
</script><style>
.filter-container {display: flex;flex-direction: column;width: 100%;
}.filter-header {display: flex;height: 88rpx;border-bottom: 1rpx solid #eee;background-color: #fff;
}.filter-tab {flex: 1;display: flex;justify-content: center;align-items: center;font-size: 28rpx;color: #333;
}.filter-tab.active {color: #007aff;
}.icon {margin-left: 10rpx;font-size: 24rpx;
}.filter-panel {border-bottom: 1rpx solid #eee;background-color: #fff;
}.list-container {padding: 20rpx;
}.list-item {margin-bottom: 20rpx;padding: 20rpx;background-color: #fff;border-radius: 8rpx;box-shadow: 0 2rpx 10rpx rgba(0, 0, 0, 0.05);
}.harmony-list-item {/* 鸿蒙系统特有样式 */border-radius: 16rpx;background: linear-gradient(to right, #f8f8f8, #fff);
}.item-title {font-size: 32rpx;font-weight: bold;margin-bottom: 10rpx;
}.item-desc {font-size: 28rpx;color: #666;
}.empty-tip {display: flex;justify-content: center;padding: 100rpx 0;color: #999;
}
</style>

2. 分类筛选子组件

<template><view class="category-filter"><view class="filter-options"><view v-for="(item, index) in categories" :key="index"class="category-item":class="{'selected': selected.includes(item.value)}"@click="toggleSelect(item.value)"><text>{{ item.label }}</text></view></view><view class="filter-actions"><button class="btn-reset" @click="reset">重置</button><button class="btn-confirm" @click="confirm">确定</button></view></view>
</template><script lang="ts">
import { defineComponent, ref } from 'vue';export default defineComponent({props: {options: {type: Array,default: () => []}},emits: ['confirm', 'reset'],setup(props, { emit }) {// 分类选项const categories = [{ label: '食品', value: 'food' },{ label: '服装', value: 'cloth' },{ label: '电子产品', value: 'electronic' },{ label: '家居', value: 'household' },{ label: '美妆', value: 'beauty' }];// 已选择的分类const selected = ref(props.options || []);// 切换选择const toggleSelect = (value: string) => {const index = selected.value.indexOf(value);if (index > -1) {selected.value.splice(index, 1);} else {selected.value.push(value);}};// 确认选择const confirm = () => {emit('confirm', [...selected.value]);};// 重置选择const reset = () => {selected.value = [];emit('reset');};return {categories,selected,toggleSelect,confirm,reset};}
});
</script><style>
.category-filter {padding: 20rpx;
}.filter-options {display: flex;flex-wrap: wrap;margin-bottom: 30rpx;
}.category-item {width: 30%;height: 80rpx;margin: 10rpx 1.66%;display: flex;justify-content: center;align-items: center;border: 1rpx solid #eee;border-radius: 8rpx;font-size: 28rpx;
}.category-item.selected {background-color: #e1f0ff;border-color: #007aff;color: #007aff;
}.filter-actions {display: flex;justify-content: space-between;padding: 20rpx 0;
}.btn-reset, .btn-confirm {width: 45%;height: 80rpx;line-height: 80rpx;text-align: center;border-radius: 8rpx;font-size: 28rpx;
}.btn-reset {background-color: #f5f5f5;color: #666;
}.btn-confirm {background-color: #007aff;color: #fff;
}
</style>

3. 鸿蒙系统适配工具函数

// utils/platform.ts/*** 检测当前环境是否为鸿蒙系统*/
export function isHarmonyOS(): boolean {// #ifdef APP-PLUSconst systemInfo = uni.getSystemInfoSync();const systemName = systemInfo.osName || '';const systemVersion = systemInfo.osVersion || '';// 鸿蒙系统识别return systemName.toLowerCase().includes('harmony') || (systemName === 'android' && systemVersion.includes('harmony'));// #endifreturn false;
}/*** 鸿蒙系统适配操作*/
export function adaptToHarmonyOS(): void {// #ifdef APP-PLUStry {// 调整状态栏plus.navigator.setStatusBarStyle('dark');// 适配鸿蒙特有APIif (plus.os.name === 'Android' && plus.device.vendor === 'HUAWEI') {// 这里可以添加针对华为设备的特殊处理console.log('正在运行于华为设备,进行鸿蒙系统适配');// 示例:自定义字体适配// 鸿蒙系统使用HarmonyOS Sans字体const fontFamily = plus.os.version.includes('harmony') ? 'HarmonyOS_Sans' : 'sans-serif';// 可以通过CSS变量设置全局字体document.documentElement.style.setProperty('--app-font-family', fontFamily);}} catch (e) {console.error('鸿蒙系统适配失败', e);}// #endif
}/*** 针对鸿蒙系统优化动画效果* @param element DOM元素*/
export function optimizeAnimationForHarmony(element: any): void {if (!isHarmonyOS()) return;// #ifdef APP-PLUStry {// 在鸿蒙系统上优化动画性能if (element && element.style) {element.style.setProperty('transform', 'translateZ(0)');element.style.setProperty('backface-visibility', 'hidden');element.style.setProperty('perspective', '1000px');}} catch (e) {console.error('动画优化失败', e);}// #endif
}

功能详解

1. 动态筛选核心逻辑

组件的核心是通过计算属性filteredList实现动态筛选。每当筛选条件变化时,该计算属性会重新计算,过滤出符合条件的数据项:

const filteredList = computed(() => {return originalList.value.filter((item: any) => {// 分类筛选if (filterConditions.category.length > 0 && !filterConditions.category.includes(item.category)) {return false;}// 价格筛选if (item.price < filterConditions.price.min || item.price > filterConditions.price.max) {return false;}return true;}).sort((a: any, b: any) => {// 排序逻辑if (filterConditions.sort === 'price-asc') {return a.price - b.price;} else if (filterConditions.sort === 'price-desc') {return b.price - a.price;}return 0;});
});

2. 鸿蒙系统适配要点

在开发过程中,我们需要特别关注鸿蒙系统的适配问题:

  1. 系统检测:通过isHarmonyOS()函数检测当前运行环境是否为鸿蒙系统
  2. UI适配:针对鸿蒙系统的UI特点(如圆角大小、渐变风格等)进行样式调整
  3. 字体适配:鸿蒙系统推荐使用HarmonyOS Sans字体
  4. 动画优化:针对鸿蒙系统的渲染引擎特点进行动画性能优化

示例中的.harmony-list-item样式类展示了如何为鸿蒙系统添加特定样式:

.harmony-list-item {/* 鸿蒙系统特有样式 */border-radius: 16rpx;background: linear-gradient(to right, #f8f8f8, #fff);
}

3. 性能优化

为了确保组件在各平台(尤其是鸿蒙系统)上的流畅运行,我们采取了以下优化措施:

  1. 虚拟列表:当数据量大时,可以使用虚拟列表技术,只渲染可视区域的内容
  2. 懒加载:筛选条件组件采用懒加载方式,按需渲染
  3. 数据缓存:对筛选结果进行缓存,避免重复计算
  4. 防抖处理:对筛选操作添加防抖处理,避免频繁触发

实际应用案例

电商商品列表筛选

在电商应用中,可以使用该组件实现商品的多维度筛选,如根据分类、价格、销量等条件筛选商品。

资讯内容筛选

在新闻资讯类应用中,可以使用该组件实现内容的分类筛选,如按照时间、类别、关键词等条件筛选文章。

鸿蒙生态应用

特别是在针对华为鸿蒙生态开发的应用中,该组件可以很好地适配鸿蒙系统的UI风格,提供流畅的用户体验。

总结

本文详细介绍了如何使用UniApp开发一个功能完善的动态筛选列表组件,并重点关注了鸿蒙系统的适配问题。通过合理的组件设计和性能优化,我们可以开发出用户体验良好的筛选功能,满足各种业务场景的需求。

在实际开发中,还可以根据具体业务需求对组件进行扩展和定制,比如添加更多的筛选维度、优化筛选条件的展示方式、增强数据加载性能等。希望本文对你在UniApp开发中实现动态筛选功能有所帮助。

参考资源

  1. UniApp官方文档
  2. 鸿蒙系统设计规范
  3. Vue3官方文档
  4. TypeScript官方文档

相关文章:

鸿蒙OSUniApp制作动态筛选功能的列表组件(鸿蒙系统适配版)#三方框架 #Uniapp

使用UniApp制作动态筛选功能的列表组件&#xff08;鸿蒙系统适配版&#xff09; 前言 随着移动应用的普及&#xff0c;用户对应用内容检索和筛选的需求也越来越高。在开发跨平台应用时&#xff0c;动态筛选功能已成为提升用户体验的重要组成部分。本文将详细介绍如何使用UniA…...

Qt中控件的Viewport作用

在Qt中&#xff0c;viewport是控件中用于显示内容的一个概念区域&#xff0c;它在可滚动控件中尤为重要。以下是viewport的主要作用和特点&#xff1a; 主要作用 内容显示区域&#xff1a;viewport定义了控件中实际可见的部分&#xff0c;所有内容都在这个区域内显示。 滚动机…...

论文学习_Precise and Accurate Patch Presence Test for Binaries

摘要&#xff1a;打补丁是应对软件漏洞的主要手段&#xff0c;及时将补丁应用到所有受影响的软件上至关重要&#xff0c;然而这一点在实际中常常难以做到&#xff0c;研究背景。因此&#xff0c;准确检测安全补丁是否已被集成进软件发行版本的能力&#xff0c;对于防御者和攻击…...

ubuntu服务器版启动卡在start job is running for wait for...to be Configured

目录 前言 一、原因分析 二、解决方法 总结 前言 当 Ubuntu 服务器启动时&#xff0c;系统会显示类似 “start job is running for wait for Network to be Configured” 或 “start job is running for wait for Plymouth Boot Screen Service” 等提示信息&#xff0c;并且…...

国产数据库工具突围:SQLynx如何解决Navicat的三大痛点?深度体验报告

引言&#xff1a;Navicat的"中国困境" 当开发者面对达梦数据库的存储过程调试&#xff0c;或是在人大金仓中处理复杂查询时&#xff0c;Navicat突然变得力不从心——这不是个例。 真实痛点&#xff1a;某政务系统迁移至OceanBase后&#xff0c;开发团队发现Navicat无…...

牛客网NC21994:分钟计算

牛客网NC21994&#xff1a;分钟计算 &#x1f4dd; 题目描述 输入格式 输入两行&#xff0c;每行包含两个整数&#xff0c;分别表示小时和分钟第一行表示起始时间&#xff0c;第二行表示结束时间 输出格式 输出一个整数&#xff0c;表示两个时间点之间的分钟数 示例 输入…...

全球宠物经济新周期下的亚马逊跨境采购策略革新——宠物用品赛道成本优化三维路径

在全球"孤独经济"与"银发经济"双轮驱动下&#xff0c;宠物用品市场正经历结构性增长。Euromonitor数据显示&#xff0c;2023年全球市场规模突破1520亿美元&#xff0c;其中中国供应链贡献度达38%&#xff0c;跨境电商出口增速连续三年超25%。在亚马逊流量红…...

Tomcat多应用部署与静态资源路径问题全解指南

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家、CSDN平台优质创作者&#xff0c;高级开发工程师&#xff0c;数学专业&#xff0c;10年以上C/C, C#, Java等多种编程语言开发经验&#xff0c;拥有高级工程师证书&#xff1b;擅长C/C、C#等开发语言&#xff0c;熟悉Java常用开…...

128.在 Vue 3 中使用 OpenLayers 实现绘制矩形截图并保存地图区域

&#x1f4cc; 本文将介绍如何在 Vue 3 中使用 OpenLayers 实现&#xff1a; 1&#xff09;用户可在地图上绘制矩形&#xff1b; 2&#xff09;自动截取该区域地图为图片&#xff1b; 3&#xff09;一键保存为本地 PNG 图片。 ✨效果如下图所示 &#x1f9e0;一、前言 在地图类…...

使用 163 邮箱实现 Spring Boot 邮箱验证码登录

使用 163 邮箱实现 Spring Boot 邮箱验证码登录 本文将详细介绍如何使用网易 163 邮箱作为 SMTP 邮件服务器&#xff0c;实现 Spring Boot 项目中的邮件验证码发送功能&#xff0c;并解决常见配置报错问题。 一、为什么需要邮箱授权码&#xff1f; 出于安全考虑&#xff0c;大…...

python处理异常,JSON

异常处理 #异常处理 # 在连接MySQL数据库的过程中&#xff0c;如果不能有效地处理异常&#xff0c;则异常信息过于复杂&#xff0c;对用户不友好&#xff0c;暴露过多的敏感信息 # 所以&#xff0c;在真实的生产环境中&#xff0c; 程序必须有效地处理和控制异常&#xff0c;按…...

原生微信小程序 textarea组件placeholder无法换行的问题解决办法

【问题描述】 微信小程序原生代码&#xff0c;使用文本域&#xff0c;placeholder使用\n 没有效果&#xff0c;网上找了一堆方案说使用 也没有效果 最后在一个前端大佬博客&#xff0c;找到解决办法&#xff0c;CSS设置word-wrap: break-word; white-space: pre-line; 【解决办…...

毕设设计 | 管理系统图例

文章目录 环素1. 登录、注册2. 菜单管理 环素 1. 登录、注册 2. 菜单管理 公告通知 订单管理 会员管理 奖品管理 新增、编辑模块...

激光雷达视觉定位是3D视觉定位吗?

激光雷达视觉定位通常被归类为3D视觉定位&#xff0c;但具体来说&#xff0c;它是融合了激光雷达&#xff08;LiDAR&#xff09;数据和视觉&#xff08;图像&#xff09;数据的多模态3D定位方法。我们可以从几个角度来理解这点&#xff1a; 为什么说它属于3D视觉定位&#xff…...

每周靶点:NY-ESO-1、GPC3、IL27分享

本期精选了《自身免疫性癌抗原NY-ESO-1》《肝细胞癌标记物GPC3》《白细胞介素IL27》三篇文章。以下为各研究内容的概述&#xff1a; 自身免疫性癌抗原NY-ESO-1 NY-ESO-1是一种自身免疫性癌抗原&#xff0c;也称为CTA1B&#xff08;CTAG1B&#xff09;&#xff0c;由主要组织相…...

Maven 插件参数注入与Mojo开发详解

&#x1f9d1; 博主简介&#xff1a;CSDN博客专家&#xff0c;历代文学网&#xff08;PC端可以访问&#xff1a;https://literature.sinhy.com/#/?__c1000&#xff0c;移动端可微信小程序搜索“历代文学”&#xff09;总架构师&#xff0c;15年工作经验&#xff0c;精通Java编…...

Java详解RabbitMQ工作模式之发布订阅模式

目录 一、发布订阅模式简介二、发布订阅模式的工作原理2.1 核心组件2.2 工作流程 三、代码示例3.1 生产者代码3.2 消费者代码 四、实际应用场景五、注意事项六、总结 在分布式系统中&#xff0c;消息队列作为异步通信的桥梁&#xff0c;扮演着至关重要的角色。而 RabbitMQ&…...

UR5e机器人Matlab仿真

在 MATLAB 中使用 UR5e 机器人模型进行仿真和控制&#xff0c;通常需要结合机器人系统工具箱&#xff08;Robotics System Toolbox&#xff09; UR5e loadrobot("universalUR5e","DataFormat","column"); UR5e.Gravity [0 0 -9.81]; % 保存机器…...

[ctfshow web入门] web75

信息收集 scandir被禁用了 解题 cforeach(new DirectoryIterator("glob:///*") as $a){echo($a->__toString(). ); } ob_flush();cif ( $a opendir("glob:///*") ) {while ( ($file readdir($a)) ! false ) {echo $file."<br>";}c…...

论文中表格跨页该怎么整(如何给跨页表格添加标题和表头)

标题&#xff1a;光标移动到第一行表格&#xff0c;然后快捷键;ctrl shirft enter&#xff0c;就会发现第二页多了一行&#xff0c;再把标题复制张贴过来即可 表头&#xff1a; 光标移动到第一行表格&#xff0c;鼠标右键 选择插入 再选择在上方插入行&#xff0c;然后手动添加…...

day26 Python 自定义函数

目录 一、函数的基本定义 示例 1&#xff1a;不带参数的函数 示例 2&#xff1a;查看文档字符串 二、带参数的函数 示例 3&#xff1a;带一个参数的函数 示例 4&#xff1a;带多个参数的函数 三、带返回值的函数 示例 5&#xff1a;计算两个数的和并返回结果 示例 6&am…...

洛谷P4907题解

题目传送门 题意&#xff1a; 扑克牌的部分牌被移除&#xff0c;需从剩牌中选 4 个区间&#xff0c;每个区间的牌都是同一花色且点数连续。如果不可选&#xff0c;输出最少需添加几张牌才能满足要求。 思路&#xff1a; 暴力和剪枝。 暴力&#xff1a;按照题意模拟&#xff…...

【MyBatis插件】PageHelper 分页

前言 在开发 Web 应用时&#xff0c;我们经常需要处理海量数据的展示问题。例如&#xff0c;在一个电商平台上&#xff0c;商品列表可能有成千上万条数据。如果我们一次性将所有数据返回给前端&#xff0c;不仅会导致页面加载缓慢&#xff0c;还会对数据库造成巨大压力。为了解…...

AI数字人融合VR全景:从技术突破到可信场景落地

摘要 本文深度解析AI数字人与VR全景技术融合的技术架构&#xff0c;结合故宫博物院、西门子、强生等真实行业案例&#xff0c;揭示技术落地的关键路径与量化价值。通过具体技术参数、实施细节及权威机构数据&#xff0c;构建可信的技术应用图景&#xff0c;为开发者提供可复用…...

机器学习——朴素贝叶斯练习题

一、 使用鸢尾花数据训练多项式朴素贝叶斯模型&#xff0c;并评估模型 代码展示&#xff1a; from sklearn.datasets import load_iris from sklearn.metrics import accuracy_score from sklearn.model_selection import train_test_split from sklearn.naive_bayes impor…...

【爬虫】DrissionPage-3

安装&#xff1a;4.1最新版本 pip install drissionpage --upgrade 官方文档&#xff1a;&#x1f6f0;️ 连接浏览器 | DrissionPage官网 1 Chromium对象 Chromium对象用于连接和管理浏览器。标签页的开关和获取、整体运行参数配置、浏览器信息获取等都由它进行。 1.1 默认…...

网络爬虫学习之httpx的使用

开篇 本文整理自《Python3 网络爬虫实战》&#xff0c;主要是httpx的使用。 笔记整理 使用urllib库requests库的使用&#xff0c;已经可以爬取绝大多数网站的数据&#xff0c;但对于某些网站依然无能为力。 这是因为这些网站强制使用HTTP/2.0协议访问&#xff0c;这时urllib和r…...

TASK02【Datawhale 组队学习】使用 LLM API 开发应用

文章目录 system prompt 和 user prompt高效prompt&#xff1a;用清晰、详尽的语言表达 Prompt原则一&#xff1a;清晰&#xff0c;具体的指令分隔符寻求结构化的输出要求模型检查是否满足条件提供少量示例 "Few-shot" prompting 原则二&#xff0c;给模型时间去思考…...

黑马k8s(七)

1.Pod介绍 查看版本&#xff1a; 查看类型,这里加s跟不加s没啥区别&#xff0c;可加可不加 2.Pod基本配置 3.镜像拉去策略 本地没有这个镜像&#xff0c;策略是Never&#xff0c;启动失败 查看拉去策略&#xff1a; 更改拉去策略&#xff1a; 4.启动命令 运行的是nginx、busv…...

【FMC216】基于 VITA57.1 的 2 路 TLK2711 发送、2 路 TLK2711 接收 FMC 子卡模块

产品概述 FMC216 是一款基于 VITA57.1 标准规范的 2 路 TLK2711 接收、2 路 TLK2711 发送 FMC 子卡模块。该板卡支持 2 路 TLK2711 数据的收发&#xff0c;支持线速率 1.6Gbps&#xff0c;经过 TLK2711 高速串行收发器&#xff0c;可以将 1.6Gbps 的高速串行数据解串为 16 位并…...

如何在Edge浏览器里-安装梦精灵AI提示词管理工具

方案一&#xff08;应用中心安装-推荐&#xff09;&#xff1a; 梦精灵 跨平台AI提示词管理工具 - Microsoft Edge AddonsMake Microsoft Edge your own with extensions that help you personalize the browser and be more productive.https://microsoftedge.microsoft.com…...

Ubuntu shell指定conda的python环境启动脚本

Ubuntu shell指定conda的python环境启动脚本。 通过指令&#xff0c;获取目前系统的conda虚拟python环境 conda info -e 如下图所示&#xff0c;为我自己电脑的python环境 # conda environments: # base * /home/ubuntu/miniconda3 kitti …...

深入理解无监督学习与K-means聚类算法:原理与实践

一、无监督学习概述 无监督学习(Unsupervised Learning)是机器学习的重要分支之一&#xff0c;与有监督学习不同&#xff0c;它不需要预先标记的训练数据。在无监督学习中&#xff0c;计算机仅根据样本的特征或样本间的相关性&#xff0c;从数据中自动发现隐藏的模式或结构。 …...

单片机-STM32部分:16、Git工具使用

Docshttps://x509p6c8to.feishu.cn/wiki/Pftrw3Z6niRlewkurnyctyw1nQx 使用Git管理本地仓库的好处是&#xff0c;可以知道自己每次修改了哪些内容&#xff0c;随时进行版本切换。 待完善。...

扬州卓韵酒店用品:优质洗浴用品,提升酒店满意度与品牌形象

在酒店提供的服务里&#xff0c;沐浴用品占据了非常重要的地位&#xff0c;其质量与种类直接关系到客人洗澡时的感受。好的沐浴用品能让客人洗澡时感到舒心和快乐&#xff0c;反之&#xff0c;质量不好的用品可能会影响客人整个住宿期间的愉悦心情。挑选恰当的洗浴用品不仅能够…...

Coze 实战教程 | 10 分钟打造你的AI 助手

> 文章中的 xxx 自行替换&#xff0c;文章被屏蔽了。 &#x1f4f1; 想让你的xxx具备 AI 对话能力&#xff1f;本篇将手把手教你&#xff0c;如何用 Coze 平台快速构建一个能与用户自然交流、自动回复提问的 xxx助手&#xff0c;零代码、超高效&#xff01; &#x1f4cc;…...

使用 frp 实现内网穿透:从基础到进阶

在日常开发中&#xff0c;我们经常会遇到需要将本地服务暴露给外部用户的情况&#xff0c;比如测试同学需要临时测试一个本地开发的 Web 服务&#xff0c;或者希望在出差时远程访问家里的 NAS。这些需求的核心问题都是如何实现内网穿透。 一、为什么选择 frp&#xff1f; 经过…...

redis中key的过期和淘汰

一、过期&#xff08;redis主动删除&#xff09; 设置了ttl过期时间的key&#xff0c;在ttl时间到的时候redis会删除过期的key。但是redis是惰性过期。惰性过期&#xff1a;redis并不会立即删除过期的key&#xff0c;而是会在获取key的时候判断key是否过期&#xff0c;如果发现…...

鸿蒙OSUniApp制作多选框与单选框组件#三方框架 #Uniapp

使用UniApp制作多选框与单选框组件 前言 在移动端应用开发中&#xff0c;表单元素是用户交互的重要组成部分。尤其是多选框&#xff08;Checkbox&#xff09;和单选框&#xff08;Radio&#xff09;&#xff0c;它们几乎存在于每一个需要用户做出选择的场景中。虽然UniApp提供…...

和为target问题汇总

文章目录 习题题型1377.组合总和 IV 题型2494.目标和 和为target的问题&#xff0c;可以有很多种问题的形式的考察&#xff0c;当然&#xff0c;及时的总结与回顾有利于我们熟练掌握这些知识&#xff01; 题型1 爬楼梯问题&#xff0c;是对于转移步伐有规定&#xff0c;在不同…...

Ubuntu使用Docker搭建SonarQube企业版(含破解方法)

目录 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff09;SonarQube介绍安装Docker安装PostgreSQL容器Docker安装SonarQube容器SonarQube汉化插件安装 破解生成license配置agent 使用 Ubuntu使用Docker搭建SonarQube企业版&#xff08;含破解方法&#xff…...

牛客网 NC22167: 多组数据a+b

牛客网 NC22167: 多组数据ab 题目分析 这道题目来自牛客网&#xff08;题号&#xff1a;NC22167&#xff09;&#xff0c;要求我们计算两个整数a和b的和。乍看简单&#xff0c;但有以下特殊点需要注意&#xff1a; 输入包含多组测试数据每组输入两个整数当两个整数都为0时表示…...

EdgeShard:通过协作边缘计算实现高效的 LLM 推理

(2024-05-23) EdgeShard: Efficient LLM Inference via Collaborative Edge Computing (EdgeShard:通过协作边缘计算实现高效的 LLM 推理) 作者: Mingjin Zhang; Jiannong Cao; Xiaoming Shen; Zeyang Cui;期刊: (发表日期: 2024-05-23)期刊分区:本地链接: Zhang 等 - 2024 …...

π0: A Vision-Language-Action Flow Model for General Robot Control

TL;DR 2024 年 Physical Intelligence 发布的 VLA 模型 π0&#xff0c;基于 transformer 流匹配&#xff08;flow matching&#xff09;架构&#xff0c;当前开源领域最强的 VLA 模型之一。 Paper name π0: A Vision-Language-Action Flow Model for General Robot Contr…...

RabbitMQ高级篇-MQ的可靠性

目录 MQ的可靠性 1.如何设置数据持久化 1.1.交换机持久化 1.2.队列持久化 1.3.消息持久化 2.消息持久化 队列持久化&#xff1a; 消息持久化&#xff1a; 3.非消息持久化 非持久化队列&#xff1a; 非持久化消息&#xff1a; 4.消息的存储机制 4.1持久化消息&…...

4、前后端联调文生文、文生图事件

4、前后端联调文生文、文生图事件 原文地址 1、底部【发送按钮】事件触发调用后端AI程序逻辑 <!-- 前端模板如下: --> <!DOCTYPE html> <html><head><meta charset"utf-8"><title>小薛博客LLM大模型实战</title><me…...

深度学习中的提示词优化:梯度下降全解析

深度学习中的提示词优化:梯度下降全解析 在您的代码中,提示词的更新方向是通过梯度下降算法确定的,这是深度学习中最基本的优化方法。 一、梯度下降与更新方向 1. 核心公式 对于可训练参数 θ \theta θ(这里是提示词嵌入向量),梯度下降的更新公式为:...

Midjourney 最佳创作思路与实战技巧深度解析【附提示词与学习资料包下载】

引言 在人工智能图像生成领域&#xff0c;Midjourney 凭借其强大的艺术表现力和灵活的创作模式&#xff0c;已成为设计师、艺术家和创意工作者的核心工具。作为 CSDN 博主 “小正太浩二”&#xff0c;我将结合多年实战经验&#xff0c;系统分享 Midjourney 的创作方法论&#x…...

【数字图像处理】半开卷复习提纲

1&#xff1a;要求 2张A4纸以内&#xff0c;正反面均可写 &#xff08;不过博主由于墨水浸到背面了&#xff0c;采用了把2张单面通过双面胶粘起来的方法&#xff0c;结果考前半个小时都在用这个难用的双面胶。。。&#xff09; 2&#xff1a;提纲内容 3&#xff1a;提示 考的…...

交通运输与能源融合发展——光储充在交通上的应用完整解决方案

在全球积极应对气候变化、推动可持续发展的大背景下&#xff0c;交通运输与能源领域的融合发展成为关键趋势。近日&#xff0c;交通运输部等十部门联合发布的《关于推动交通运输与能源融合发展的指导意见》&#xff0c;为这两个重要行业的协同前行指明了清晰的方向&#xff0c;…...