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

智能合约分享

智能合约练习

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

一、solidity初学者经典示例代码:

1.存储和检索数据:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 SimpleStorage 的合约
contract SimpleStorage {// 声明一个公共状态变量 data,用于存储一个 256 位的无符号整数uint256 public data;// 定义一个公共函数 setData,接受一个无符号整数参数 _datafunction setData(uint256 _data) public {// 将传入的参数 _data 存储到状态变量 data 中data = _data;}// 定义一个公共视图函数 getData,返回一个无符号整数function getData() public view returns (uint256) {// 返回当前存储在状态变量 data 中的值return data;}
}

该合约的主要功能是允许用户存储一个无符号整数并检索该整数。通过调用 setData 函数,用户可以更新存储的数据,而通过调用 getData 函数,用户可以查看当前存储的值。这是一个简单的存储合约,常用于学习 Solidity 和以太坊的基本概念

2.条件控制:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 ConditionExample 的合约
contract ConditionExample {// 定义一个公共纯函数 checkEven,接受一个无符号整数参数 _numberfunction checkEven(uint256 _number) public pure returns (bool) {// 使用条件语句检查 _number 是否为偶数if (_number % 2 == 0) {// 如果 _number 是偶数,返回 truereturn true;} else {// 如果 _number 不是偶数,返回 falsereturn false;}}
}

该合约提供了一个简单的功能,用于检查一个数字是否为偶数。通过调用 checkEven 函数,用户可以传入一个无符号整数,合约将返回一个布尔值,指示该数字的偶数性。这是一个基本的示例,展示了如何在 Solidity 中使用条件语句和函数。

3.数组操作:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 ArrayExample 的合约
contract ArrayExample {// 声明一个公共状态变量 numbers,用于存储一个无符号整数数组uint256[] public numbers;// 定义一个公共函数 addNumber,接受一个无符号整数参数 _numberfunction addNumber(uint256 _number) public {// 将 _number 添加到 numbers 数组中numbers.push(_number);}// 定义一个公共视图函数 getNumber,接受一个无符号整数参数 _indexfunction getNumber(uint256 _index) public view returns (uint256) {// 检查索引 _index 是否有效require(_index < numbers.length, "Invalid index.");// 返回 numbers 数组中索引为 _index 的值return numbers[_index];}// 定义一个公共视图函数 getLength,返回一个无符号整数function getLength() public view returns (uint256) {// 返回 numbers 数组的长度return numbers.length;}
}

该合约展示了如何在 Solidity 中使用数组。用户可以通过 addNumber 函数将数字添加到数组中,使用 getNumber 函数根据索引访问数组元素,使用 getLength 函数获取数组的当前长度。这是一个基本的合约,适合学习 Solidity 中数组的操作。

4.循环遍历:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 LoopExample 的合约
contract LoopExample {// 声明一个公共状态变量 numbers,用于存储一个无符号整数数组uint256[] public numbers;// 定义一个公共函数 addNumbers,接受一个无符号整数数组参数 _numbersfunction addNumbers(uint256[] memory _numbers) public {// 使用 for 循环遍历传入的 _numbers 数组for (uint256 i = 0; i < _numbers.length; i++) {// 将 _numbers 中的每个元素添加到 numbers 数组中numbers.push(_numbers[i]);}}// 定义一个公共视图函数 sumNumbers,返回一个无符号整数function sumNumbers() public view returns (uint256) {// 初始化 sum 变量为 0,用于计算总和uint256 sum = 0;// 使用 for 循环遍历 numbers 数组for (uint256 i = 0; i < numbers.length; i++) {// 将 numbers 中的每个元素加到 sum 中sum += numbers[i];}// 返回总和return sum;}
}

该合约通过 addNumbers 函数提供了批量添加数字的功能,通过 sumNumbers 函数提供了计算数组元素总和的功能。合约展示了如何使用数组和循环在 Solidity 中进行简单的数据处理。这些功能适合学习如何在 Solidity 中处理数组操作和循环结构。

二、solidity进阶版经典示例代码

1.智能合约间的通信:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 声明使用的 Solidity 编译器版本// 定义一个名为 MessageContract 的合约
contract MessageContract {// 声明一个公共状态变量 message,用于存储消息string public message;// 定义一个公共函数 setMessage,接受一个字符串参数 _messagefunction setMessage(string memory _message) public {// 将传入的 _message 赋值给状态变量 messagemessage = _message;}
}// 定义一个名为 CallerContract 的合约
contract CallerContract {// 声明一个公共状态变量 messageContract,类型为 MessageContractMessageContract public messageContract;// 构造函数,接受一个 MessageContract 类型的参数 _messageContractconstructor(MessageContract _messageContract) {// 将传入的合约地址赋值给状态变量 messageContractmessageContract = _messageContract;}// 定义一个公共函数 setMessage,接受一个字符串参数 _messagefunction setMessage(string memory _message) public {// 调用 MessageContract 的 setMessage 函数,设置消息messageContract.setMessage(_message);}
}

MessageContract 合约提供了一个简单的功能,用于存储和更新一条消息。CallerContract 合约则充当一个中介,允许外部用户通过它来设置 MessageContract 中的消息。这种设计展示了如何在 Solidity 中进行合约之间的交互

2.继承和接口:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 指定合约使用的 Solidity 版本// 定义一个名为 Token 的接口
interface Token {// 定义转账函数 transfer,接收目标地址和转账金额function transfer(address _to, uint256 _value) external returns (bool);
}// 定义一个名为 MyToken 的合约,继承自 Token 接口
contract MyToken is Token {// 声明一个公共映射 balances,用于存储每个地址的余额mapping(address => uint256) public balances;// 实现 transfer 函数,覆盖接口中的 transfer 函数function transfer(address _to, uint256 _value) public override returns (bool) {// 检查发送者的余额是否足够require(balances[msg.sender] >= _value, "Insufficient balance.");// 扣除发送者的余额balances[msg.sender] -= _value;// 增加接收者的余额balances[_to] += _value;// 返回成功标志return true;}
}

Token 接口定义了一个代币转账的基本功能。MyToken 合约实现了该接口,并提供了代币转账的具体逻辑。此合约的设计体现了 Solidity 中接口和合约之间的关系,以及如何通过状态变量管理每个地址的余额。

3.事件和日志:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 指定合约使用的 Solidity 版本// 定义合约 EventExample
contract EventExample {// 定义事件 LogAddition,带有 sender 地址和两个输入参数及其结果event LogAddition(address indexed _sender, uint256 _a, uint256 _b, uint256 _result);// 定义一个公共函数 addNumbers,接收两个无符号整数作为参数function addNumbers(uint256 _a, uint256 _b) public returns (uint256) {// 计算两个数的和uint256 result = _a + _b;// 触发 LogAddition 事件,记录发送者地址、输入参数和结果emit LogAddition(msg.sender, _a, _b, result);// 返回计算结果return result;}
}

该合约提供了一个简单的加法功能,并通过事件记录了每次加法操作的详细信息,包括发送者的地址和加法的输入输出。事件在以太坊智能合约中用于记录和追踪操作,这些信息在区块链上是不可变的,便于后续查询和审计。

三、solidity高阶版经典示例代码

1.多重签名钱包合约:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 指定 Solidity 版本contract MultiSigWallet {address[] public owners; // 钱包所有者数组uint public numConfirmationsRequired; // 执行交易所需的确认数量struct Transaction {address to; // 接收资金的地址uint value; // 发送的金额bool executed; // 交易是否已执行mapping(address => bool) isConfirmed; // 所有者的确认状态映射uint numConfirmations; // 收到的确认数量}Transaction[] public transactions; // 交易数组modifier onlyOwner() {require(isOwner(msg.sender), "Only owners can call this function.");_; // 继续执行}constructor(address[] memory _owners, uint _numConfirmationsRequired) {require(_owners.length > 0, "At least one owner is required.");require(_numConfirmationsRequired > 0 && _numConfirmationsRequired <= _owners.length, "Invalid number of required confirmations.");owners = _owners; // 设置所有者numConfirmationsRequired = _numConfirmationsRequired; // 设置所需确认数量}function isOwner(address _address) public view returns (bool) {for (uint i = 0; i < owners.length; i++) {if (owners[i] == _address) {return true; // 地址是所有者}}return false; // 地址不是所有者}function submitTransaction(address _to, uint _value) public onlyOwner {uint transactionId = transactions.length; // 获取当前交易 IDtransactions.push(Transaction({to: _to,value: _value,executed: false,numConfirmations: 0}));confirmTransaction(transactionId); // 自动确认提交的交易}function confirmTransaction(uint _transactionId) public onlyOwner {require(_transactionId < transactions.length, "Invalid transaction ID.");require(!transactions[_transactionId].executed, "Transaction has already been executed.");require(!transactions[_transactionId].isConfirmed[msg.sender], "Transaction has already been confirmed by this owner.");transactions[_transactionId].isConfirmed[msg.sender] = true; // 标记为发送者已确认transactions[_transactionId].numConfirmations++; // 增加确认计数// 如果满足所需确认数量,则执行交易if (transactions[_transactionId].numConfirmations >= numConfirmationsRequired) {executeTransaction(_transactionId);}}function executeTransaction(uint _transactionId) public onlyOwner {require(_transactionId < transactions.length, "Invalid transaction ID.");require(!transactions[_transactionId].executed, "Transaction has already been executed.");Transaction storage transaction = transactions[_transactionId];transaction.executed = true; // 标记交易为已执行(bool success, ) = transaction.to.call{value: transaction.value}(""); // 执行交易require(success, "Transaction execution failed."); // 确保交易成功}
}

这个多重签名钱包合约提供了一种稳健的资金管理机制,要求多个所有者批准交易才能执行。可以通过增加撤销确认或添加/删除所有者等功能进一步增强安全性和灵活性。

2.众筹合约:

// SPDX-License-Identifier: MIT
pragma solidity ^0.8.0; // 指定使用的 Solidity 版本contract Crowdfunding {struct Project {address owner; // 项目拥有者的地址string name; // 项目名称uint goalAmount; // 项目的筹款目标uint amountRaised; // 已筹集的总金额bool closed; // 指示项目是否关闭接受捐款mapping(address => uint) contributions; // 每个地址的捐款记录}Project[] public projects; // 存储所有项目的数组// 创建新众筹项目的函数function createProject(string memory _name, uint _goalAmount) public {projects.push(Project({owner: msg.sender, // 将调用函数的地址设置为项目拥有者name: _name, // 项目名称goalAmount: _goalAmount, // 筹款目标amountRaised: 0, // 初始筹集金额为零closed: false // 项目默认开放接受捐款}));}// 向项目捐款的函数function contribute(uint _projectId) public payable {require(_projectId < projects.length, "Invalid project ID."); // 确保项目存在require(msg.value > 0, "Contribution amount must be greater than zero."); // 确保捐款金额大于零require(!projects[_projectId].closed, "Project is closed for contributions."); // 确保项目未关闭projects[_projectId].contributions[msg.sender] += msg.value; // 记录捐款projects[_projectId].amountRaised += msg.value; // 更新已筹集的总金额}// 关闭项目的函数function closeProject(uint _projectId) public {require(_projectId < projects.length, "Invalid project ID."); // 确保项目存在require(msg.sender == projects[_projectId].owner, "Only project owner can close the project."); // 只有拥有者才能关闭项目projects[_projectId].closed = true; // 将项目标记为已关闭}// 提取项目资金的函数function withdrawFunds(uint _projectId) public {require(_projectId < projects.length, "Invalid project ID."); // 确保项目存在require(msg.sender == projects[_projectId].owner, "Only project owner can withdraw funds."); // 只有拥有者才能提取资金require(projects[_projectId].amountRaised >= projects[_projectId].goalAmount, "Goal amount has not been reached yet."); // 确保已达成筹款目标uint amountToWithdraw = projects[_projectId].amountRaised; // 要提取的金额projects[_projectId].amountRaised = 0; // 将已筹集金额重置为零payable(msg.sender).transfer(amountToWithdraw); // 将资金转移给拥有者}
}

所提供的众筹合约作为一个基本框架,用于在以太坊区块链上管理众筹项目。通过上述改进和考虑,可以增强合约的安全性、可用性和功能性

希望该篇文章可以帮助到正在学习solidity的朋友哦。

相关文章:

智能合约分享

智能合约练习 一、solidity初学者经典示例代码&#xff1a; 1.存储和检索数据&#xff1a; // SPDX-License-Identifier: MIT pragma solidity ^0.8.0; // 声明 Solidity 编译器版本// 定义一个名为 SimpleStorage 的合约 contract SimpleStorage {// 声明一个公共状态变量 d…...

【MR开发】在Pico设备上接入MRTK3(二)——在Unity中配置Pico SDK

上一篇文档介绍了 【MR开发】在Pico设备上接入MRTK3&#xff08;一&#xff09;在Unity中导入MRTK3依赖 下面将介绍在Unity中导入Pcio SDK的具体步骤 在Unity中导入Pico SDK 当前Pico SDK版本 Unity交互SDK git仓库&#xff1a; https://github.com/Pico-Developer/PICO-Un…...

【Java】探秘正则表达式:深度解析与精妙运用

目录 引言 一、基本概念 1.1 元字符 1.2 预定义字符类 1.3 边界匹配符 1.4 数量标识符 1.5 捕获与非捕获分组 二、Java中的正则表达式支持 三、正则表达式的使用示例 3.1 匹配字符串 3.2 替换字符串 3.3 分割字符串 3.4 使用Pattern和Matcher 3.5 捕获组和后向…...

2.6.ReactOS系统中从内核中发起系统调用

2.6.ReactOS系统中从内核中发起系统调用 2.6.ReactOS系统中从内核中发起系统调用 文章目录 2.6.ReactOS系统中从内核中发起系统调用前言 前言 上面我们已经可以看到用户空间&#xff08;R3&#xff09;进行系统调用的全过程即两种方法的具体实现。 系统调用一般时从R3发起的…...

chat_gpt回答:python获取当前utc时间,将xml里时间tag里的值修改为当前时间

你可以使用 lxml 库来读取、修改 XML 文件中的某个标签的值&#xff0c;并将其保存为新的 XML 文件。以下是一个示例代码&#xff0c;展示如何获取当前的 UTC 时间&#xff0c;并将 XML 文件中的某个时间标签修改为当前时间。 示例代码&#xff1a; from lxml import etree f…...

机器学习-语言分析

机器学习 1.1人工智能概述 1.2.1 机器学习与人工智能&#xff0c;深度学习 深度学习->机器学习->人工智能&#xff1b; 人工智能&#xff1a;1950&#xff0c;实现自动下棋&#xff0c;人机对弈&#xff0c;达特茅斯会议->人工智能的起点&#xff0c;1956年8月。克劳…...

Oracle 常见索引扫描方式概述,哪种索引扫描最快!

一.常见的索引扫描方式 INDEX RANGE SCANINDEX FAST FULL SCANINDEX FULL SCAN(MIN/MAX)INDEX FULL SCAN 二.分别模拟使用这些索引的场景 1.INDEX RANGE SCAN create table t1 as select rownum as id, rownum/2 as id2 from dual connect by level<500000; create inde…...

字符串(3)_二进制求和_高精度加法

个人主页&#xff1a;C忠实粉丝 欢迎 点赞&#x1f44d; 收藏✨ 留言✉ 加关注&#x1f493;本文由 C忠实粉丝 原创 字符串(3)_二进制求和_高精度加法 收录于专栏【经典算法练习】 本专栏旨在分享学习算法的一点学习笔记&#xff0c;欢迎大家在评论区交流讨论&#x1f48c; 目…...

《神经网络:智能时代的核心技术》

《神经网络&#xff1a;智能时代的核心技术》 一、神经网络的诞生与发展二、神经网络的结构与工作原理&#xff08;一&#xff09;神经元模型&#xff08;二&#xff09;神经网络训练过程 三、神经网络的应用领域&#xff08;一&#xff09;信息领域&#xff08;二&#xff09;…...

pdf内容三张以上转图片,使用spire.pdf.free

一、依赖 <spire.pdf.free.version>9.13.0</spire.pdf.free.version><itextpdf.version>5.5.13</itextpdf.version><dependency><groupId>e-iceblue</groupId><artifactId>spire.pdf.free</artifactId><version>$…...

游戏、软件、开源项目和资讯

游戏 标题链接【白嫖正版游戏】IT之家喜加一website 软件 标题链接【白嫖正版软件】反斗限免website 开源项目 标题链接【Luxirty Search】基于Google搜索结果&#xff0c;屏蔽内容农场Github【Video2X】图片/视频超分工具Github 新闻资讯 标题链接分享10个 Claude 3.5 …...

Acrel-1000变电站综合自动化系统及微机在化工企业中的应用方案

文&#xff1a;安科瑞郑桐 摘要&#xff1a;大型化工企业供配电具有的集约型特点&#xff0c;化工企业内35kV变电站和10kV变电所数量大、分布广&#xff0c;对于老的大多大型及中型化工企业而言&#xff0c;其变电站或变电所内高压电气设备为旧式继电保护装置&#xff0c;可靠…...

[Linux] CentOS7替换yum源为阿里云并安装gcc详细过程(附下载链接)

前言 CentOS7替换yum源为阿里云 yum是CentOS中的一种软件管理器&#xff0c;通过yum安装软件&#xff0c;可以自动解决包依赖的问题&#xff0c;免去手工安装依赖包的麻烦。 yum使用了一个中心仓库来记录和管理软件的依赖关系&#xff0c;默认为mirrorlist.centos.org&#xf…...

在Java中创建多线程的三种方式

多线程的创建和启动方式 在Java中&#xff0c;创建多线程主要有以下三种方式&#xff1a; 继承Thread类实现Runnable接口使用Callable接口与Future 下面是这三种方式的简单示例&#xff0c;以及如何在主类中启动它们。 1. 继承Thread类 class MyThread extends Thread {Ov…...

洛谷 AT_abc374_c [ABC374C] Separated Lunch 题解

题目大意 KEYENCE 总部有 N N N 个部门&#xff0c;第 i i i 个部门有 K i K_i Ki​ 个人。 现在要把所有部门分为 AB 两组&#xff0c;求这两组中人数多的那一组的人数最少为多少。 题目分析 设这些部门共有 x x x 个人&#xff0c;则较多的组的人数肯定大于等于 ⌈ …...

力扣2528.最大化城市的最小电量

力扣2528.最大化城市的最小电量 题目解析及思路 题目要求找到所有城市电量最小值的最大 电量为给城市供电的发电站数量 因此每座城市的电量可以用一段区间和表示&#xff0c;即前缀和 二分最低电量时 如果当前城市电量不够,贪心的想发电站建立的位置&#xff0c;应该是在mi…...

【zookeeper】集群配置

zookeeper 数据结构 zookeeper数据模型结构&#xff0c;就和Linux的文件系统类型&#xff0c;看起来是一颗树&#xff0c;每个节点称为一个znode.每一个Znode默认的存储1MB的数据&#xff0c;每个Znode都有唯一标识&#xff0c;可以通过命令显示节点的信息每当节点有数据变化…...

YOLO11 目标检测 | 导出ONNX模型 | ONNX模型推理

本文分享YOLO11中&#xff0c;从xxx.pt权重文件转为.onnx文件&#xff0c;然后使用.onnx文件&#xff0c;进行目标检测任务的模型推理。 用ONNX模型推理&#xff0c;便于算法到开发板或芯片的部署。 备注&#xff1a;本文是使用Python&#xff0c;编写ONNX模型推理代码的 目…...

PostgreSQL DBA月度检查列表

为了确保数据库系统能够稳定高效运行&#xff0c;DBA 需要定期对数据库进行检查和维护&#xff0c;这是一项非常具有挑战性的工作。 本文给大家推荐一个 PostgreSQL DBA 月度性能检查列表&#xff0c;遵循以下指导原则可以帮助我们实现一个高可用、高性能、低成本、可扩展的数…...

驱动开发系列12 - Linux 编译内核模块的Makefile解释

一:内核模块Makefile #这一行定义了要编译的内核模块目标文件。obj-m表示目标模块对象文件(.o文件), #并指定了两个模块源文件:helloworld-params.c 和 helloworld.c。最终会生成这 #这两个.c文件的.o对象文件。 obj-m := helloworld-params.o helloworld.o#这行定义了内核…...

用js+css实现圆环型的进度条——js+css基础积累

如果用jscss实现圆环型的进度条&#xff1a; 直接上代码&#xff1a; <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><met…...

TDengine 与北微传感达成合作,解决传统数据库性能瓶颈

在当今物联网&#xff08;IoT&#xff09;快速发展的背景下&#xff0c;传感器技术已成为各个行业数字化转型的关键组成部分。随着设备数量的激增和数据生成速度的加快&#xff0c;如何高效地管理和分析这些数据&#xff0c;成为企业实现智能化运营的重要挑战。尤其是在惯性传感…...

通过Python爬虫获取商品销量数据,轻松掌握市场动态

为什么选择Python爬虫&#xff1f; 简洁易用&#xff1a;Python语言具有简洁的语法和丰富的库&#xff0c;使得编写爬虫变得简单高效。强大的库支持&#xff1a;Python拥有强大的爬虫框架&#xff08;如Scrapy、BeautifulSoup、Requests等&#xff09;&#xff0c;可以快速实现…...

学习虚幻C++开发日志——TSet

TSet 官方文档&#xff1a;虚幻引擎中的Set容器 | 虚幻引擎 5.5 文档 | Epic Developer Community (epicgames.com) TSet 是通过对元素求值的可覆盖函数&#xff0c;使用数据值本身作为键&#xff0c;而不是将数据值与独立的键相关联。 默认情况下&#xff0c;TSet 不支持重…...

面向对象进阶(下)(JAVA笔记第二十二期)

p.s.这是萌新自己自学总结的笔记&#xff0c;如果想学习得更透彻的话还是请去看大佬的讲解 目录 抽象方法和抽象类抽象方法定义格式抽象类定义格式抽象方法和抽象类注意事项 接口接口的定义接口中成员变量的特点接口中没有构造方法接口中成员方法的特点在接口中定义具有方法体…...

通信协议——UART

目录 基础概念串行&并行串行的优缺点 单工&双工 UART基本概念时序图思考&#xff1a;接收方如何确定01和0011 基础概念 串行&并行 串行为8车道&#xff0c;并行为1车道 串行的优缺点 通行速度快浪费资源布线复杂线与线之间存在干扰 单工&双工 单工&#xf…...

最优阵列处理技术(七)-谱加权

阵列的加权技术等价于时间序列谱分析中的加窗或锐化技术。在加权过程中,需要考虑的是如何降低旁瓣并使主波束宽度的增长最小。 首先需要明确的是,在 u u u空间下的波束方向图为 B u ( u ) =...

Java | Leetcode Java题解之第486题预测赢家

题目&#xff1a; 题解&#xff1a; class Solution {public boolean PredictTheWinner(int[] nums) {int length nums.length;int[] dp new int[length];for (int i 0; i < length; i) {dp[i] nums[i];}for (int i length - 2; i > 0; i--) {for (int j i 1; j …...

leetcode动态规划(十五)-完全背包

题目 leetcode上没有纯完全背包题目&#xff0c;可以看卡码网上的题目 完全背包 思路 有N件物品和一个最多能背重量为W的背包。第i件物品的重量是weight[i]&#xff0c;得到的价值是value[i] 。每件物品都有无限个&#xff08;也就是可以放入背包多次&#xff09;&#xff…...

AI视听新体验!浙大阿里提出视频到音乐生成模型MuVi:可解决语义对齐和节奏同步问题

MuVi旨在解决视频到音乐生成(V2M)中的语义对齐和节奏同步问题。 MuVi通过专门设计的视觉适配器分析视频内容,以提取上下文 和时间相关的特征,这些特征用于生成与视频的情感、主题及其节奏和节拍相匹配的音乐。MuVi在音频质量和时间同步方面表现优于现有基线方法,并展示了其在风…...

建设电子商务网站的目的和意义/seo和竞价排名的区别

本节演示如何给幻灯片添加交互效果,也就是当点击了幻灯片中的某个对象之后,才会播放指定的动画效果。 在选择需要添加动画效果的对象之后,点击此处的下拉箭头,查看更多的动画效果。 点击底部的更多进入效果命令,打开更多进入效果窗口。 在基本进入效果列表中,选择阶梯…...

python线上课程哪个好/aso搜索优化

2019独角兽企业重金招聘Python工程师标准>>> 可见性 在一个单线程程序中&#xff0c;如果向一个变量先写入值&#xff0c;然后在没有写干涉的情况下读取这个变量&#xff0c;会得到相同的返回值。但是当读和写发生在不同的线程中时&#xff0c;就不能保证读线程及时…...

临清网站建设价格/精准推广

阅读目录 红黑树的平均高度大约为logn。查找是在大量的信息中寻找一个特定的信息元素&#xff0c;在计算机应用中&#xff0c;查找是常用的基本运算&#xff0c;例如编译程序中符号表的查找。本文简单概括性的介绍了常见的七种查找算法&#xff0c;说是七种&#xff0c;其实二分…...

网站建设和微信小程序/什么是seo搜索优化

文章目录1 Jedis 介绍2 实战练习 学习2.1 配置远程 Redis2.2 新建项目模块2.3 添加依赖2.4 测试连接2.5 Jedis 中的常用 API2.6 Jedis 中的事务操作1 Jedis 介绍 Jedis是Redis官方推荐的Java连接开发工具。要在Java开发中使用好Redis中间件&#xff0c;必须对Jedis熟悉才能写…...

武汉品牌网站建设公司哪家好/seo全网优化指南

let arr [{a:1},{a:2},{a:3},{a:4},{a:5}];// 1.while循环 let sum 0; let num 1; while(num < 1){ if (num 5) { num; continue // containue必须写在后面,否则会进入死循环,因为在while中continue之后,是执行条件判断 // break // 支持break …...

深圳网站建设 网站制作 网站设计【迅美】旧版/交换链接是什么

在 JavaScript 中类型分为七种&#xff0c;分别是:null, undefined, boolean, string, number, object 和 ES6 新增的 symbol&#xff0c;下面就来介绍前面五种&#xff0c;剩下的会在后面展开。 null, undefined null 和 undefined 的类型很简单&#xff0c;在 JavaScript 中u…...