微信小程序
一、小程序文件结构
1.目录结构
pages文件夹:存放【页面文件夹】,一个【页面文件夹】就是一个页面,存放着小程序页面文件。即pages
中的每一个文件夹都存放着一个小程序页面的文件(js、wxml、json、wxss)
页面文件夹 一个【页面文件夹】中必须包含以下4个文件,为了方便开发者减少配置项,描述页面的四个文件必须具有相同的路径与文件名。
.json
后缀的 JSON
配置文件
.wxml
后缀的 WXML
模板文件
.wxss
后缀的 WXSS
样式文件
.js
后缀的 JS
脚本逻辑文件
utils文件夹 存放一些工具JS
文件。
app.js 小程序最终打包、创建App实例的入口文件(相当于Vue中main.js),可以在这个文件中写一些全局变量、绑定生命周期回调函数、错误监听和页面不存在监听函数等。
app.json 小程序全局配置。
app.wxss 小程序公共样式表。
2.全局配置(app.json)
小程序根目录**下的 app.json
文件用来对微信小程序进行全局配置
pages 配置页面路径,只要新建一个页面就要在pages中添加页面路径
windows 用于设置小程序状态栏、导航条、标题、窗口背景色。
tab'bar 小程序需要tab栏可以切换页面通过 tabBar 配置项指定 tab 栏的表现,以及 tab 切换时显示的对应页面。
3.页面配置(*.json)
在页面对应的 .json
文件来对本页面的表现进行配置。页面中配置项在当前页面会覆盖 app.json
中相同的配置项
二、组件标签
1.<view>组件
<view>111</view>
是块级元素
2.<text>
是行内元素
<text>222</text>
<text>222</text>
3.<image>
照片 是行内块元素
src是图片路径,mode表示图片缩放方式
<image src="" mode="aspectFill"></image>
三、WXSS样式
1 选择器与属性
选择器和样式属性和css一模一样。
2 尺寸单位
微信小程序主要使用rpx
单位,而非px
单位。rpx
可以根据屏幕宽度进行自适应,规定默认屏幕宽为750rpx
。
建议开发机型选择iPhone6设备选择模拟器,换算公式为1rpx
= 0.5px
= 1物理像素。
四、数据绑定
1.插值绑定
使用【mustache语法】绑定对应 data 数据,数据是响应式的,同时可以做一些简单的表达式,例如三元表达式、判断表达式、简单运算
形式{{变量值}}
<!--wxml-->
<view>{{num}}</view>
// js
Page({/*** 页面的初始数据*/data: {num:"你好",},})
2.属性绑定
小程序中,仅使用【mustache语法】绑定所有需要在wxml
中引用js
中的变量,且在标签属性值中,可以写多个绑定,最终只是个拼接成字符串。
形式:{{变量值}}
/* wxss */
.normal-text{color: #123456;
}
.active{}/* wxml */
<view class="normal-text {{isActive? 'active':''}}">文本</view>/* js */
page({data:{isActive: true}
})
五、循环
1 列表渲染
在组件上使用 wx:for
控制属性绑定一个数组,即可使用数组中各项的数据重复渲染该组件。
格式:wx:for="{{变量}}"
默认数组当前项变量名默认为 item
,数组的当前项的下标变量名默认为 index
,直接使用即可。
如不提供 wx:key
,会报一个 warning
, 如果明确知道该列表是静态,或者不必关注其顺序,可以选择忽略。
花括号和引号之间如果有空格,将最终被解析成为字符串。
当 wx:for
的值为字符串时,会将字符串解析成字符串数组。
<!-- 遍历数组 wxml-->
<view wx:for="{{list}}" wx:key="{{index}}"> {{item}} </view>/*** js*/data: {num:"你好",list:["你好","123"]},
2 属性重命名
wx:for-item
可以指定数组当前元素的变量名。
wx:for-index 可以指定数组当前下标的变量名。
```html
<!-- 使用wx:for-item="num" 可以给循环的元素换一个名称 -->
<view wx:for="{{list}}" wx:key="{{index}}" wx:for-item="num"> {{index}}:{{num}} </view>
```
6.条件渲染
1 条件渲染
使用 wx:if
来判断是否需要渲染该代码块。
形式:wx:if="{{变量}}"
、wx:elif=""
、wx:else
此方式会销毁标签
<view wx:if="{{scroe>90}}">优秀</view>
<view wx:elif="{{scroe>60}}">及格</view>
<view wx:else>不及格</view>
2 显示隐藏
使用hidden
来控制是否需要隐藏该代码块。
形式 hidden="{{变量}}"
传入true
值时表示隐藏。
此方式仅切换显示隐藏,不会销毁标签。
<button hidden="{{isAcitve}}">提交</button>
七、事件绑定
1 绑定事件
使用bind
指令绑定事件,小程序中的事件名都有所变化,建议多查看微信小程序开发者文档
形式:bind事件类型="函数名"
2 参数传递
使用data-
指令,写在绑定事件的组件上,对事件进行传参,最终参数会在函数的事件参数对象中。
形式:data-形参="实参"
注意:
1.数据以 data-
开头,多个单词由连字符 -
连接,即kebab-case命名。
2.勿出现大写字母,会被自动转为小写字母。
3.多个参数需要写多个data-
指令分别传入。
3 参数获取
在绑定的函数中,通过事件对象获取参数。
形式:event.currentTarget.dataset.形参名
参数获取都是通过事件形参event
,但不一定在其currentTarge
属性中,不同事件类型的参数所在区域有所不同,详情查看文档。
<view wx:for="{{productList}}" wx:key="{{item.productId}}"><view>{{item.title}}</view><!-- 绑定点击事件,并且传入参数 --><button bindtap="handleSubmit" data-title="{{item.title}}">提交</button>
</view>
data: {num:"你好",list:["你好","123"],productList:[{productId:0, title:'产品1', cover:"***.png"},{productId:1, title:'产品2', cover:"***.png"},]
},handleSubmit(e){console.log(e.currentTarget.dataset.title)
}
八、数据操作
1 修改数据
使用setData()
函数修改data
中的数据,传入一个对象,包含要修改/添加的数据。
形式:setData(obj)
2 获取数据
通过this.data
访问data
。
形式:this.data.变量
data: {num:"你好",},
fn(){this.setData({num:"123", // 修改值 })console.log(this.data.num)
}
九、页面跳转
9.1 switchTab
跳转
跳转到 tabBar 页面,并关闭其他所有非 tabBar 页面
仅能跳转tabBar页面。
wx.switchTab({url: '/pages/index/index'
});
9.2 <navigator>
跳转
页面链接,只能跳转非tabBar的页面
<navigator url="/pages/detail/detail">详情</navigator>
9.3 navigateTo 跳转
页面链接,只能跳转非tabBar的页面。
wx.navigateTo({url:'/pages/detail/detail'
})
十、表单
微信小程序中的表单相关组件,拥有很多开放能力,用于接入微信小程序的服务
1.数据绑定
微信小程序中使用【mustache语法】绑定表单标签的value,无vue的双向绑定,数据流向仅有变量=》标签,
需要监听输入事件获取输入值,赋值给变量。
形式:
value="{{变量}}"`
通过表单标签的bindinput
事件,实时获取到输入值,在函数中赋值给相对应变量
<form><input value="{{loginForm.username}}" bindinput="handleUsernameInput" placeholder="用户名" type="text" /><input value="{{loginForm.password}}" bindinput="handlePasswordInput" placeholder="密码" type="number" />
</form>
Page({/*** 页面的初始数据*/data: {loginForm:{username:"",password:""},},handleUsernameInput(e) {console.log(e)this.setData({['loginForm.username']: e.detail.value
})
console.log(this.data.loginForm)
},
handlePasswordInput(e) {this.setData({['loginForm.password']:e.currentTarget.dataset,})
},})
2.通用绑定封装
封装一个通用的表单绑定函数,不需要每次单独处理一个输入事件
genralFormInputEvent
target:存储表单所有值的变量名(该变量应为一个Object)。key:此处输入值在target
中的属性名(键名)
<form><input value="{{loginForm.username}}" bindinput="genralFormInputEvent" data-target="loginForm" data-key="username" placeholder="用户名" type="text" /><input value="{{loginForm.password}}" bindinput="genralFormInputEvent" data-target="loginForm" data-key="password" placeholder="密码" type="number" />
</form>Page({data:{loginForm:{}},/*** 通用表单绑定函数* form中的表单项上必须传入两个参数:* tartget - 绑定到data中的对象数据* key - form_name中的属性* @param {*} e 事件参数*/formatInput(e) {const {tartget,key} = e.currentTarget.datasetthis.setData({[`${tartget}.${key}`]: e.detail.value })},
})
十一、网络请求
1.基础使用
微信小程序提供了wx.request
函数,供开发者发送请求,若在开发过程中,请求域名非https
协议,请在 右上角=>详情=>本地设置=>勾选【不校验合法域名...】,否则将无法发送请求。
wx.request({url: ' 请求地址 ',method:' 请求方式(默认为GET) ',data: { /* 提交参数 */ },header: { /* 请求头 */ },success: res=>{/* 响应的回调 */},fail: err=>{/* 失败的回调 */}
})
2.基于Promise封装
wx.request
并不支持以Promise风格调用,会导致每次请求都需要写过多的请求配置,且难以统一管理BASE_URL
、headers
等配置项,也没有【axios】的请求拦截、响应拦截。
因此将其封装成一个Promise风格,有简单的请求拦截与响应拦截的函数。简单封装为如下函数,然后可以同使用axios时一样,单独再次封装每一个接口的配置和传参,最终在逻辑代码中引入并调用。
/* request.js */
export default function (option) {// 设置、获取配置项const BASE_URL = ""let { url = "", method = "GET", data = {}, header = {}, isToken = true/*默认为需要*/ } = option/* 请求拦截区域 */if (isToken) {// 根据接口token需求,对header添加Authorization属性header = {...header, // 扩展运算,保留原header信息Authorization: wx.getStorageSync('token') // 加入token}}return new Promise((resolve, reject) => {wx.request({url: BASE_URL + url,method,data,header,success(res) {/* 响应拦截 */resolve(res.data) // 拆包,返回后端数据},fail(err) {reject(err)}})})
}
十二、自定义组件
1.构造器
在小程序的目录中,对空文件夹,右键=>新建component,会自动创建一份组件代码模板。
// 组件js模板代码
Component({/*** 组件的属性列表*/properties: { },/*** 组件的初始数据*/data: { },/*** 组件的方法列表*/methods: { },/*** 组件的生命周期*/lifetimes: { }
})
使用组件:【页面.json】或【app.json】usingComponents
中,注册组件。
{"usingComponents": {"组件名" : "组件所在文件位置"}
}
2.组件通信与事件
父向子 :使用组件中的properties
属性,配置传参。
//父组件
<son childValue="{{num}}"></son>// 子组件jsproperties: {childValue: String, // String代表接收的参数类型},
子向父
子组件:使用this.triggerEvent('myevent', myEventDetail, myEventOption)
handleTap() {// 定义要传递的数据let value = "孩子的值"// 触发绑定事件, myevent为绑定的事件名this.triggerEvent('myevent', value)},
父级:<component bind:myevent="handlerFn" >
<son bindmyevent="myevent" ></son>
十二、Van Weapp组件库
1.vant weapp下载
在终端输入
npm init
npm install --production
npm i @vant/weapp -S --production
将 app.json 中的 "style": "v2" 去除,小程序的新版基础组件强行加上了许多样式,难以覆盖,不关闭将造成部分组件样式混乱。
修改project.config.json,查询packNpmManually、packNpmRelationList属性后修改
"setting": {..."packNpmManually": true,"packNpmRelationList": [{"packageJsonPath": "./package.json","miniprogramNpmDistDir": "./miniprogram/"}]
}
2.使用
局部引入在x.json中,如需全局引用引入在app.json中
"usingComponents": {"van-button": "@vant/weapp/button/index"
}
相关文章:
微信小程序
一、小程序文件结构 1.目录结构 pages文件夹:存放【页面文件夹】,一个【页面文件夹】就是一个页面,存放着小程序页面文件。即pages中的每一个文件夹都存放着一个小程序页面的文件(js、wxml、json、wxss) 页面文件夹…...
《CPython Internals》阅读笔记:p76-p95
《CPython Internals》学习第 5 天,p76-p95 总结,总计 20 页。 一、技术总结 无。 二、英语总结(生词:1) 1.check vi/vt. to exam sth to ensure it is correct, true, or in good condition.示例: (1)After I’d finished …...
HOW - Form 表单 label 和 wrapper 对齐场景
一、背景 在日常使用 表单 时,我们一般有如下布局: 可以通过 Form 表单提供的配置直接设置: <Formform{form}labelCol{{ span: 4 }}wrapperCol{{ span: 20 }}onFinish{handleSubmit}><Form.Itemlabel"输入框"name"…...
Js的回调函数
一、什么是回调函数(Callback)? 回调函数(Callback Function)是指一个函数被作为参数传递给另一个函数,并在特定事件发生或操作完成时执行。 可以通俗地理解为一种“委托”机制。 在JavaScript中࿰…...
FairGuard游戏安全2024年度报告
导 读:2024年,国内游戏市场实际销售收入3257.83亿元,同比增长7.53%,游戏用户规模6.74亿人,同比增长0.94%,市场收入与用户规模双双实现突破,迎来了历史新高点。但游戏黑灰产规模也在迅速扩大&…...
ant-design-vue 1.X 通过id获取a-input组件失败
1.ant-design-vue 1.X 问题描述 当我在a-form组件中,以v-decorator指令绑定表单组件时,无法根据我设置的verify-code-input获取元素 <a-input type"text" id"verify-code-input" class"paIpt":placeholder"$t(…...
JS爬虫实战演练
在这个小红书私信通里面进行一个js的爬虫 文字发送 async function sendChatMessage(content) {const url https://pro.xiaohongshu.com/api/edith/ads/pro/chat/chatline/msg;const params new URLSearchParams({porch_user_id: 677e116404ee000000000001});const messageD…...
JVM vs JDK vs JRE
JVM是Java虚拟机的缩写, 用于实现Java的一次编译,处处运行。 Java代码写成.class后,由本地的虚拟机运行。 JDK(Java Development Kit)是一个功能齐全的 Java 开发工具包,供开发者使用。 JDK包含了JRE。…...
OpenCV相机标定与3D重建(47)从两幅图像中的一组匹配点恢复相机的姿态(旋转和平移)函数recoverPose()的使用
操作系统:ubuntu22.04 OpenCV版本:OpenCV4.9 IDE:Visual Studio Code 编程语言:C11 算法描述 从两幅不同相机拍摄的图像中对应的点恢复相对相机旋转和平移,使用手性检查。返回通过该检查的内点数量。 cv::recoverPose 是 OpenCV…...
代码随想录算法训练营day27
代码随想录算法训练营 —day27 文章目录 代码随想录算法训练营前言一、贪心算法理论基础二、455.分发饼干三、376. 摆动序列53. 最大子数组和总结 前言 今天是算法营的第27天,希望自己能够坚持下来! 今日任务: ● 贪心算法理论基础 ● 455.…...
基于华为ENSP的OSPF状态机、工作过程、配置保姆级别详解(2)
本篇技术博文摘要 🌟 基于华为enspOSPF状态机、OSPF工作过程、.OSPF基本配置等保姆级别具体详解步骤;精典图示举例说明、注意点及常见报错问题所对应的解决方法 引言 📘 在这个快速发展的技术时代,与时俱进是每个IT人的必修课。我…...
【数据结构】链表
目录 编辑 1.2链表 1.2.1 链表的特性 1.2.2 单向链表 遍历无头单向链表 遍历有头单向链表 链表尾插法练习 1.2.3 单向链表的函数操作 单向链表的特点: 1.2链表 链表又称单链表、链式存储结构,用于存储逻辑关系为“一对一”的数据。 和顺序表…...
RabbitMQ解决消息积压的方法
目录 减少发送mq的消息体内容 增加消费者数量 批量消费消息 临时队列转移 监控和预警机制 分阶段实施 最后还有一个方法就是开启队列的懒加载 这篇文章总结一下自己知道的解决消息积压得方法。 减少发送mq的消息体内容 像我们没有必要知道一个的中间状态,只需…...
机器学习是?
机器学习(Machine Learning)是一门多领域交叉学科,涉及概率论、统计学、逼近论、凸分析、算法复杂度理论等多门学科; 是人工智能(AI)的一个分支,也是AI的核心领域,它专注于开发算法和模型&#…...
jupyter出现“.ipynb appears to have died. It will restart automatically.”解决方法
原因 解决方法:更新jupyter的版本 1.打开anaconda prompt 2、更新jupyter版本 在anaconda prompt输入以下指令 conda update jupyter如图:...
计算机毕业设计PyHive+Hadoop深圳共享单车预测系统 共享单车数据分析可视化大屏 共享单车爬虫 共享单车数据仓库 机器学习 深度学习
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
c++开源协程库libgo介绍及使用,srs协程,boost协程 Boost::fiber
https://www.cnblogs.com/qwsdcv/p/9115364.html Boost - 从Coroutine2 到Fiber - 开学五年级了 - 博客园 协程就是由程序员控制跑在线程里的“微线程”。它可以由程序员调度,切换协程时代价小(切换根据实现不同,消耗的CPU周期从几十到几百不等)&#x…...
微服务实现高并发 秒杀系统,前后端实现
一、前端实现 前端项目初始化 首先,我们需要创建一个新的 Vue 3 项目。你可以使用 Vue CLI 来快速搭建项目。 安装 Vue CLI(如果尚未安装) bash npm install -g vue/cli 创建 Vue 项目 bash vue create seckill-frontend cd seckill-f…...
Eureka缓存机制
一、Eureka的CAP特性 Eureka是一个AP系统,它优先保证可用性(A)和分区容错性(P),而不保证强一致性(C)。这种设计使得Eureka在分布式系统中能够应对各种故障和分区情况,保…...
PHP语言的学习路线
PHP语言的学习路线 PHP(Hypertext Preprocessor)是一种广泛使用的开源服务器端脚本语言,尤其适用于Web开发。由于其易学易用、功能强大,PHP成为了许多动态网站和Web应用程序开发的首选语言。随着Web3.0和云计算的兴起,…...
python学opencv|读取图像(二十八)使用cv2.warpAffine()函数平移图像
【1】引言 前序已经对图像操作进行了广泛的学习,包括读取、放大缩小,改变BGR通道值等,相关链接包括且不限于: python学opencv|读取图像-CSDN博客 python学opencv|读取图像(三)放大和缩小图像_python(1)使…...
[Linux]Mysql9.0.1服务端脱机安装配置教程(redhat)
前言 本教程适用于在yum源不可用的LInux主机上安装Mysql的场景。 以redhat系主机做操作示例,debian系主机可参照步骤,将对应的rpm -ivh命令换成dpkg -i。 1. 官网下载安装包 https://dev.mysql.com/downloads/mysql/ 1.1 版本分类 MySQL Enterprise…...
个人 ALL IN ONE 方案搭建方案分享(从硬件到软件)及内网穿透方案
这里只做大概方案分享,每个虚拟机的部署细节滤过。 个人 ALL IN ONE 方案搭建方案分享 本指南将详细介绍如何基于现有硬件搭建一体化家庭/个人服务器解决方案,涵盖从软硬件配置、系统安装到功能实现以及性能优化的全过程。实现集 软路由、旁路由、NAS 网…...
TrustRAG:增强RAG系统鲁棒性与可信度的创新框架
在人工智能飞速发展的今天,大语言模型(LLMs)凭借其强大的语言处理能力在诸多领域大放异彩。检索增强生成(RAG)系统(面向企业RAG(Retrieval Augmented Generation)系统的多维检索框架…...
使用证件照制作软件的常见问题及解决方案
在数字化时代,证件照的制作变得越来越简单。借助各种证件照制作软件,我们可以轻松在家中制作出符合要求的证件照。然而,用户在使用这些软件时,可能会遇到一些常见问题。为了帮助您顺利制作出满意的证件照,我们整理了一…...
通过gradle发布aar或jar携带sources-jar到maven nexus
找了很久,没有找到满意的。终于找到一个好的办法。 gradle7.x适用。比以前的写法简洁。 发布传统的jar工程 比如okhttp,fastjson等项目,纯java工程。 直接创建新文件publish.gradle: apply plugin: maven-publishProperties properties …...
SAP推出云端ERP解决方案,加速零售行业数字化转型
2025年1月9日,SAP发布了一款专为零售行业设计的云端ERP行业解决方案——S/4HANA Cloud Public Edition,进一步推动企业向云端迁移。这款解决方案旨在集中运营数据,整合财务、采购和商品管理流程,以帮助零售企业优化运营效率。 核…...
RK3568 Android 13 内置搜狗输入法小计
问:为什么写? 答:网上搜出来的都试过了,不行!下面直接上代码和注意事项! 首先到这个目录(/RK3568/Rockchip_Android13_SDK_Release/device/rockchip/rk356x/tl3568_evm/preinstall)…...
微服务-Nacos(注册中心)
Nacos Nacos可以看作注册中心配置中心,比Eureka更加强大。 注册中心 在父工程中引入SpringCloudAlibaba的版本依赖 <dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-alibaba-dependencies</artifactId&g…...
【数据结构:前缀树Trie】
目录 前言前缀树介绍和应用一、前缀树的定义前缀树的问题和思考前缀树的映射思想前缀树三大性质 二.前缀树节点结构三. 前缀树接口介绍和实现四个接口API1. insert(String word)2. search(String word)3. startsWith(String pre)4. delete(String word) API实现1. 查询操作sear…...
如何让QPS提升20倍
一、什么是QPS QPS,全称Queries Per Second,即每秒查询率,是用于衡量信息检索系统(例如搜索引擎或数据库)或请求-响应系统(如Web服务器)每秒能够处理的请求数或查询次数的一个性能指标。以下是…...
时间复杂度简介
定义 时间复杂度是用来衡量算法运行时间随着输入规模增长而增长的量级。简单来说,它描述了算法执行时间与数据规模之间的关系。我们通常用大O符号( O O O)来表示时间复杂度。例如,对于一个简单的加法运算,它的执行时间…...
记一次sealos部署k8s集群之delete了第一台master如何恢复
记一次sealos部署k8s集群之delete了第一台master如何恢复 一、背景描述 使用sealos部署了一套K8S集群 master信息:172.27.100.1、172.27.100.2、172.27.100.3 node信息:172.27.100.4、172.27.100.5 sealos安装在172.27.100.1节点,根目录下/root/.sealos/文件还在! [root…...
【json】
JSON JSON是一种轻量级的,按照指定的格式去组织和封装数据的数据交互格式。 本质上是一个带有特定格式的字符串(py打印json时认定为str类型) 在各个编程语言中流通的数据格式,负责不同编程语言中的数据传递和交互,类似于计算机普通话 python与json关系及相互转换…...
TypeScript语言的并发编程
TypeScript语言的并发编程 引言 随着现代应用程序的复杂性不断增加,性能和用户体验的重要性显得尤为突出。在这种背景下,并发编程应运而生,成为提升应用程序效率的重要手段。在JavaScript及其超集TypeScript中,尽管语言本身是单…...
左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解
左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解 文章目录 左值引用(Lvalue Reference)和右值引用(Rvalue Reference)详解1. 什么是左值和右值?左值&#x…...
音视频入门基础:RTP专题(1)——RTP官方文档下载
一、引言 实时传输协议(Real-time Transport Protocol,简写RTP)是一个网络传输协议,由IETF的多媒体传输工作小组1996年在《RFC 1889》中公布的。 RTP作为因特网标准在《RFC 3550》有详细说明。而《RFC 3551》详细描述了使用最小…...
【Flutter】使用ScrollController配合EasyRefresh实现列表预加载:在还未滑动到底部时加载下一页数据
需求/背景 在我们的业务场景中,列表的加载使用easy_refresh组件: https://pub.dev/packages/easy_refresh 大概效果是往上滑动到一定的offset会触发一个上滑加载,可以触发一些网络请求拉取列表后面的数据来展示。 这种模式一般在一页翻完…...
js实现md5加密
要在JavaScript中实现MD5加密并截取特定位置的字符,你可以使用像crypto-js这样的库。首先,你需要确保你的项目中包含了crypto-js库。如果你是在浏览器环境中,可以通过CDN引入;如果是在Node.js环境中,可以通过npm安装。…...
[java基础-集合篇]LinkedList源码粗析
LinkedList 的数据结构 实现List、Deque 接口,基于 双向链表实现的列表。与基于数组的 ArrayList 不同,基于链表的LinkedList 允许在列表的任何位置快速地插入和删除元素。 Java中LinkedList实现了Deque,它提供了 add, offer, remove, poll, …...
【Rust自学】11.1. 编写和运行测试
喜欢的话别忘了点赞、收藏加关注哦,对接下来的教程有兴趣的可以关注专栏。谢谢喵!(・ω・) 11.1.1. 什么是测试 在Rust里一个测试就是一个函数,它被用于验证非测试代码的功能是否和预期一致。 在一个测试的函数体里通…...
移动端屏幕分辨率rem,less
谷歌模拟器:能直接看到移动端效果 屏幕分辨率 右键电脑桌面 ,点击显示设置 PC端是逻辑分辨率,移动端代码也是参考逻辑分辨率 网页端宽度和逻辑分辨率尺寸相同 手机屏幕尺寸不同,网页宽度均为 100% 所以就需要添加视口标签&#x…...
rk3568 , buildroot , qt ,使用sqlite, 动态库, 静态库
问题说明: 客户反馈 ,buildroot 系统 ,使用qt 使用sqlite ,有报错,无法使用sqlite. 测试情况说明: 我自己测试,发现, buildroot 自己默认就是 使能了 sqlite 的。 是否解决说明&…...
web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理
web-app uniapp监测屏幕大小的变化对数组一行展示数据作相应处理 1.uni.getSystemInfoSync().screenWidth; 获取屏幕宽度 2.uni.onWindowResize() 实时监测屏幕宽度变化 3.根据宽度的大小拿到每行要展示的数量itemsPerRow 4.为了确保样式能够根据 items…...
Airflow:TimeSensor感知时间条件
在数据管道工作流中,任务可能需要在特定的时间执行,或者在继续之前等待一定的时间。为了满足这些需求,Apache Airflow提供了TimeSensor,这是一种内置Sensor,可以监控当前时间,并在达到指定时间时触发后续任…...
使用Python和Neo4j驱动程序来实现小规模数据的CSV导入
要将CSV数据导入到Neo4j数据库中,你可以使用Neo4j提供的工具,比如neo4j-admin import命令(适用于大规模数据导入),或者使用Python的Neo4j驱动程序通过Cypher查询逐行插入数据(适用于小规模数据导入…...
网络安全测评技术与标准
网络安全测评概况 网络安全测评是网络信息系统和IT技术产品的安全质量保障。本节主要阐述网络安全测评的概念,给出网络安全测评的发展状况。 18.1.1 网络安全测评概念 网络安全测评是指参照一定的标准规范要求,通过一系列的技术和管理方法,获…...
某漫画网站JS逆向反混淆流程分析
文章目录 1. 写在前面1. 接口分析2. 反混淆分析 【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并致力于Pyth…...
如何获取文件的MIME类型
文章目录 1. 概念介绍2. 方法与类型2.1 使用方法2.2 常见类型3. 示例代码4. 内容总结我们在上一章回中介绍了"如何加载本地图片"相关的内容,本章回中将介绍如何获取文件类型.闲话休提,让我们一起Talk Flutter吧。 1. 概念介绍 我们在本章回中提到的文件类型是指MI…...
Three.js 基础概念:构建3D世界的核心要素
文章目录 前言一、场景(Scene)二、相机(Camera)三、渲染器(Renderer)四、物体(Object)五、材质(Material)六、几何体(Geometry)七、光…...