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

JavaScript篇:揭秘函数式与命令式编程的思维碰撞

大家好,我是江城开朗的豌豆,一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术,并深入掌握Vue、React、Uniapp、Flutter等主流框架,能够高效解决各类前端开发问题。在我的技术栈中,除了常见的前端开发技术,我还擅长3D开发,熟练使用Three.js进行3D图形绘制,并在虚拟现实与数字孪生技术上积累了丰富的经验,特别是在虚幻引擎开发方面,有着深入的理解和实践。

        我一直认为技术的不断探索和实践是进步的源泉,近年来,我深入研究大数据算法的应用与发展,尤其在数据可视化和交互体验方面,取得了显著的成果。我也注重与团队的合作,能够有效地推动项目的进展和优化开发流程。现在,我担任全栈工程师,拥有CSDN博客专家认证及阿里云专家博主称号,希望通过分享我的技术心得与经验,帮助更多人提升自己的技术水平,成为更优秀的开发者。

目录

一、从泡咖啡看编程思维差异

二、真实项目中的范式对决

三、性能与可读性的博弈

四、新时代的前端范式融合

五、选择范式的三个心法


最近在review团队新人的代码时,我发现一个有趣的现象:同样的需求,有人写出了充满for循环的"步骤说明书",有人却像搭积木一样用函数组合搞定。这让我想起十年前刚入行时,被各种编程范式搞得头晕目眩的自己。今天我们就来聊聊这两种编程思维——函数式与命令式,如何像两种不同的语言塑造着我们的代码世界。

一、从泡咖啡看编程思维差异

假设我要在代码中泡一杯拿铁:

命令式做法

// 准备工具
let coffeeBeans = 20;
let milk = 200;// 我的制作流程
function makeLatte() {// 第一步:磨豆子let groundCoffee = grind(coffeeBeans);// 第二步:萃取浓缩let espresso = brew(groundCoffee);// 第三步:打奶泡let steamedMilk = steamMilk(milk);// 最后组合return combine(espresso, steamedMilk);
}

函数式做法

const compose = (...fns) => x => fns.reduceRight((v, f) => f(v), x);// 我的咖啡管道
const lattePipeline = compose(combineWithSteamedMilk(200),brewEspresso,grindBeans(20)
);// 就像拼装乐高
const myLatte = lattePipeline();

看到区别了吗?前者像在写烹饪步骤,后者像在组装流水线。这正是两种范式的核心差异:命令式关注"怎么做",函数式专注"做什么"。

二、真实项目中的范式对决

去年重构一个数据看板时,我遇到了经典的选择题。需求是过滤出所有未完成的VIP用户订单:

命令式版本

function filterOrders(orders) {let results = [];for (let i = 0; i < orders.length; i++) {if (orders[i].status !== 'completed' && orders[i].user.vipLevel > 2) {// 我的过滤条件results.push({...orders[i],flag: '优先处理'});}}return results;
}

函数式版本

const isHighPriority = order => order.status !== 'completed' && order.user.vipLevel > 2;const addFlag = order => ({...order, flag: '优先处理'
});// 我的数据处理管道
const processOrders = orders => orders.filter(isHighPriority).map(addFlag);

三个月后需求变更,要增加金额过滤。函数式版本只需要在管道中插入新函数,而命令式版本需要修改循环体内的条件判断——这就是声明式编程的扩展优势。

三、性能与可读性的博弈

但函数式不是银弹。去年双十一大促,我们发现在处理10万级订单数据时,链式调用会产生大量中间数组。这时候不得不回归命令式:

function optimizeFilter(orders) {return orders.reduce((acc, order) => {if (order.total > 1000 && order.createTime > startDate) {acc.push({...order,tag: '大额订单'});}return acc;}, []);
}

这个教训告诉我:在需要极致性能的场景,适当的命令式代码反而更高效。就像开车时自动挡和手动挡的选择,关键要看路况。

四、新时代的前端范式融合

现代框架正在巧妙融合两种范式。以React为例:

// 声明式UI
function TodoList() {// 状态管理const [todos, setTodos] = useState([]);// 我的业务逻辑const completedTodos = useMemo(() => todos.filter(t => t.completed),[todos]);// 事件处理const handleAdd = () => {setTodos(prev => [...prev,{ text: '新任务', completed: false }]);};return (<><button onClick={handleAdd}>添加</button><ul>{completedTodos.map(item => (<li key={item.id}>{item.text}</li>))}</ul></>);
}

这里既有声明式的UI描述,又有命令式的状态更新,完美诠释了现代前端开发的范式融合哲学。

五、选择范式的三个心法

  1. 看团队基因:如果成员多来自Java背景,突然全面转向函数式可能适得其反

  2. 看业务场景:数据处理用函数式,性能关键模块用命令式

  3. 看演进方向:长期维护的项目适合函数式,快速迭代的MVP可用命令式

就像我常跟团队说的:"不要为了函数式而函数式,就像不要因为流行就强迫所有菜都用筷子吃。"


后记:
上周看到实习生尝试用递归实现深拷贝,结果遇到循环引用栈溢出。我拍拍他肩膀:"下次试试先用命令式实现基础版本,再用函数式优化可读性?" 他恍然大悟的表情,让我想起编程范式就像武术流派——没有绝对强弱,关键在于运用之妙。

相关文章:

JavaScript篇:揭秘函数式与命令式编程的思维碰撞

大家好&#xff0c;我是江城开朗的豌豆&#xff0c;一名拥有6年以上前端开发经验的工程师。我精通HTML、CSS、JavaScript等基础前端技术&#xff0c;并深入掌握Vue、React、Uniapp、Flutter等主流框架&#xff0c;能够高效解决各类前端开发问题。在我的技术栈中&#xff0c;除了…...

ubuntu24.04上安装NVIDIA driver+CUDA+cuDNN+Anaconda+Pytorch

一、NVIDIA driver 使用Ubuntu系统的&#xff1a;软件和更新——>附加驱动&#xff0c;安装NVIDIA驱动。 二、CUDA 安装命令&#xff1a;sudo apt install nvidia-cuda-toolkit 三、cuDNN cuDNN 9.10.0 Downloads | NVIDIA Developer 四、Anaconda Download Anaconda Di…...

vue3基础学习(上) [简单标签] (vscode)

目录 1. Vue简介 2. 创建Vue应用 2.1 下载JS文件 2.2 引用JS文件 2.3 调用Vue方法​编辑 2.4 运行一下试试: 2.5 代码如下 3.模块化开发模式 3.1 Live Server插件 3.2 运行 4. 常用的标签 4.1 reactive 4.1.1 运行结果 4.1.2 代码: 4.2 ref 4.2.1 运行结果 4.2.2…...

.Net HttpClient 使用代理功能

HttpClient 使用代理功能 实际开发中&#xff0c;HttpClient 通过代理访问目标服务器是常见的需求。 本文将全面介绍如何在 .NET 中配置 HttpClient 使用代理&#xff08;Proxy&#xff09;功能&#xff0c;包括基础使用方式、代码示例、以及与依赖注入结合的最佳实践。 注意…...

深入理解Java适配器模式:从接口兼容到设计哲学

引言&#xff1a;接口不兼容的困局 在软件开发中&#xff0c;我们经常遇到这样的场景&#xff1a; 旧系统有一个「RS232串口设备」&#xff08;仅支持sendByRS232(String data)方法&#xff09;&#xff0c;新系统需要通过「USB接口」&#xff08;要求sendByUSB(String data)…...

非异步信号安全函数

这个程序演示了如何使用sigaction来捕获和处理信号&#xff08;特别是SIGINT&#xff0c;即CtrlC&#xff09;。以下是关键点和潜在问题的分析&#xff1a; 程序功能 信号捕获&#xff1a;注册自定义处理函数handler来捕获信号2&#xff08;SIGINT&#xff0c;通常由CtrlC触发…...

PHP黑白胶卷底片图转彩图功能 V2025.05.15

关于底片转彩图 传统照片底片是摄影过程中生成的反色图像&#xff0c;为了欣赏照片&#xff0c;需要通过冲印过程将底片转化为正像。而随着数字技术的发展&#xff0c;我们现在可以使用数字工具不仅将底片转为正像&#xff0c;还可以添加色彩&#xff0c;重现照片原本的色彩效…...

【C++ / STL】封装红黑树实现map和set

文章目录 一. 源码及框架分析1.决定搜索类型的传参思考&#xff1a;为什么要传第一个参数 2.KeyOfValue的作用 二. 模拟实现map和set1. 实现出复用红黑树框架,并支持insert2. 支持iterator的实现iterator实现思路分析【iterator操作实现详解】 3.支持map的[ ]操作4.map和set代码…...

记录: Windows下远程Liunx 系统xrdp 用到的一些小问题(免费踩坑 记录)

采用liunx Ubuntu22.04版本以下&#xff0c;需要安装 xrdp 或者VNC 具体过程就是下载 在linux命令行里 首先更新软件包&#xff1a;sudo apt update 安装xrdp服务&#xff1a;sudo apt install xrdp 启动XRDP&#xff1a;sudo systemctl start xrdp&#xff08;如果在启动的…...

WordPress 文章和页面:它们的区别是什么?

很多刚接触WordPress的用户&#xff0c;在创建网站内容时往往会遇到这样一个问题&#xff1a;“我应该用‘文章’还是‘页面’&#xff1f;”虽然两者都能发布内容&#xff0c;但它们之间到底有什么区别呢&#xff1f;这篇文章将从易于理解的角度&#xff0c;帮助大家厘清WordP…...

【工具变量】各省市场化指数-杨兴权版共三个方法(1997-2023年)

市场化指数是衡量中国各地区市场化改革进程的重要指标。本次数据基于杨兴全、马连福和夏立军三位学者的研究成果&#xff0c;系统整理并更新了我国1997-2023年间31个省、自治区、直辖市的市场化指数&#xff0c;便于研究者进行横向和纵向比较分析。 一、数据介绍 数据名称&…...

Android App View——团结引擎车机版实现安卓应用原生嵌入 3D 开发场景

团结引擎 1.5.0 版本已于 4 月 14 日正式发布&#xff0c;从 1.5.0 版本开始&#xff0c;团结引擎车机版带来了一个激动人心的新能力 —— Android App View。现在&#xff0c;开发者可以将任意第三方安卓应用以 2D 组件或 3D 组件的形式&#xff0c;原生嵌入到 Tuanjie 开发的…...

完整的 CentOS 6.10 虚拟机安装启动脚本

好的&#xff01;下面是一个 完整的 CentOS 6.10 虚拟机安装启动脚本&#xff0c;专为你在 macOS&#xff08;M 系芯片&#xff09; QEMU&#xff08;x86_64 软件模拟&#xff09; 环境设计&#xff0c;确保你能顺利启动并安装一个接近 Red Hat 6.4 的开发环境。 ⸻ ✅ 前提准…...

如何远程执行脚本不留痕迹

通常我们在做远程维护的时候&#xff0c;会有这么一个需求&#xff0c;就是我想在远程主机执行一个脚本&#xff0c;但是这个脚本我又不想保留在远程主机上&#xff0c;那么有人就说了&#xff0c;那就复制过去再登录远程执行不就行了吗&#xff1f;嗯嗯&#xff0c;但是这还不…...

观测云:从云时代走向AI时代

过去十年&#xff0c;云计算让企业的数据处理能力实现了指数级增长&#xff0c;而观测云作为全栈监控观测平台&#xff0c;见证并参与了这一进程。通过强大的数据采集、处理与展示能力&#xff0c;观测云帮助数百家企业实现了对 IT 基础设施、应用服务、业务链路的全面掌控。 …...

解密企业级大模型智能体Agentic AI 关键技术:MCP、A2A、Reasoning LLMs- consistency is the key

解密企业级大模型智能体Agentic AI 关键技术&#xff1a;MCP、A2A、Reasoning LLMs- consistency is the key DeepSeek v3的时候&#xff0c;它模型已经足够强大到能带来consistency稳定性。所以当这个DeepSeek R1 Zero或者DeepSeek R1使用GRPO进行训练的时候&#xff0c;它能够…...

鸿蒙OSUniApp 实现图片上传与压缩功能#三方框架 #Uniapp

UniApp 实现图片上传与压缩功能 前言 在移动应用开发中&#xff0c;图片上传是一个非常常见的需求。无论是用户头像、朋友圈图片还是商品图片&#xff0c;都需要上传到服务器。但移动设备拍摄的图片往往尺寸较大&#xff0c;直接上传会导致流量消耗过大、上传时间过长&#x…...

SymPy | 如何提取指定项的系数

SymPy 是 Python 中一个强大的符号计算库&#xff0c;广泛应用于数学、物理和工程领域的符号运算。在代数表达式的处理中&#xff0c;提取特定项的系数是一项常见且重要的操作。本文将详细介绍 SymPy 中提取指定项系数的多种方法&#xff0c;并通过丰富的示例帮助读者掌握这些技…...

MUSE Pi Pro 更换kernel内核及module模块

视频讲解&#xff1a; MUSE Pi Pro 更换kernel内核及module模块 脚本仓库&#xff1a; https://github.com/LitchiCheng/MUSE-Pi-Pro-Learning 结合上期编译内核&#xff0c;编译成功后的输出如下&#xff1a; 输入 uname -a 可以看到如下信息&#xff0c;未修改的内核时间在 …...

java每日精进 5.14【参数校验】

参数校验 1.1概述 本文使用 Hibernate Validator 框架对 RESTful API 接口的参数进行校验&#xff0c;确保数据入库的正确性。 例如&#xff0c;在用户注册时&#xff0c;校验手机号格式、密码强度等。如果校验失败&#xff0c;抛出 ConstraintViolationException 或相关异…...

CPS联盟+小程序聚合平台分销返利系统开发|小红书番茄网盘CPA拉新推广全解析

导语&#xff1a; 在私域流量与社交电商爆发的时代&#xff0c;CPS联盟分销返利系统与小红书CPA拉新推广成为企业增长的核心引擎。本文深度解析如何通过小程序聚合平台开发、多层级返利机制搭建及精准CPA推广策略&#xff0c;快速占领市场&#xff0c;实现用户裂变与收益倍增。…...

基于EFISH-SCB-RK3576/SAIL-RK3576的光伏逆变器控制器技术方案

&#xff08;国产化替代J1900的能源物联网解决方案&#xff09; 一、硬件架构设计‌ ‌电力转换与控制模块‌ ‌高精度功率控制‌&#xff1a; Cortex-M0硬实时核驱动多相PWM&#xff08;频率>200kHz&#xff09;&#xff0c;动态调节DC-AC转换误差<0.5%FPGA实现MPPT算法…...

HarmonyOS NEXT 适配高德地图FlutterSDK实现地图展示,添加覆盖物和移动Camera

HarmonyOS NEXT 适配高德地图 Flutter SDK 实现地图展示&#xff0c;添加覆盖物和移动 Camera 在现代移动应用开发中&#xff0c;地图功能是许多应用的核心组成部分之一。HarmonyOS NEXT 提供了强大的跨平台开发能力&#xff0c;而高德地图 Flutter SDK 则为开发者提供了丰富的…...

计算机网络:手机和基站之间是通过什么传递信息的?怎么保证的防衰减,抗干扰和私密安全的?

手机与基站之间的通信依赖无线电磁波信号,其传输介质、频率选择、抗衰减/抗干扰技术及隐私保护机制共同构成了现代移动通信的核心。以下从技术原理到实际应用逐一解析: 一、信号本质与传输介质 1. 信号类型 电磁波:手机与基站通过射频(RF)电磁波传递信息,采用数字调制技…...

C#调用C++dll 过程记录

C#调用Cdll 过程记录 问题&#xff1a;1、设置修改记录2 修改对应问题3 继续出问题4 许久之后的转机5 最后的成功 如题&#xff0c;过程记录 问题&#xff1a; 提示&#xff1a;main 已经在 dllmain.obj 中定义&#xff0c;针对该问题作进一步的处理 1、设置修改记录 &…...

Vue百日学习计划Day4-8——Gemini版

番茄时钟&#xff1a; 每个番茄钟为25分钟学习&#xff0c;之后休息5分钟。每完成4个番茄钟&#xff0c;进行一次15-30分钟的长休息。灵活性&#xff1a; 这仍然是一个建议性计划。某些主题&#xff08;尤其是 Flexbox 和 Grid&#xff09;可能需要比预期更多的时间来练习和理解…...

DHCP协议

DHCP协议 1、掌握DHCP的工作原理 2、会在Windows server上去部署DHCP服务 3、抓流量 正常收到攻击后 一、DHCP 1、DHCP基本概念 dhcp(动态主机配置协议)&#xff1a;主要就是给客户机提供TCP/IP参数(IP地址、子网掩码、网关、DNS等&#xff09; 2、好处 减少管理员工作…...

级联与端到端对话系统架构解析:以Moshi为例

一、对话系统架构对比 1.1 级联对话系统&#xff08;Cascaded Dialogue Systems&#xff09; 传统级联系统采用多阶段处理流程&#xff1a; 语音识别&#xff08;ASR&#xff09;&#xff1a;将24kHz音频信号通过卷积神经网络&#xff08;CNN&#xff09;和Transformer转换为…...

3、ubantu系统docker常用命令

1、自助查看docker命令 1.1、查看所有命令 docker 客户端非常简单&#xff0c;可以直接输入 docker 命令来查看到 Docker 客户端的所有命令选项。 angqiangwangqiang:~$ dockerUsage: docker [OPTIONS] COMMANDA self-sufficient runtime for containersCommon Commands:ru…...

【leetcode】349. 两个数组的交集

文章目录 代码1.set&#xff08;&#xff09;2. 哈希表3. 数组 给定两个数组 nums1 和 nums2 &#xff0c;返回 它们的 交集 。输出结果中的每个元素一定是 唯一 的。我们可以 不考虑输出结果的顺序 。 示例 1&#xff1a; 输入&#xff1a;nums1 [1,2,2,1], nums2 [2,2] 输…...

BGP联邦和发射试验

一、要求 二、需求分析 1. **拓扑与地址规划** - **AS1**&#xff1a;环回16.1.1.0/24需宣告&#xff0c;192.168.1.0/24不宣告。 - **AS3**&#xff1a;环回11.1.1.0/24需宣告&#xff0c;192.168.2.0/24不宣告。 - **AS2**&#xff1a;使用172.16.0.0/16划分子…...

LeetCode Hot100 (1/100)

目录 一、有关数组和动态数组的排序&#xff08;sort函数&#xff09; 1.普通数组的排序 基本用法 降序排序 2.vector的排序 基本用法 降序排序 二、数组长度和一些vector的基本语法 1. 静态数组长度计算​ 2. 安全获取数组长度&#xff08;C17 起&#xff09;​ 3.vecto…...

LeetCode热题100--234.回文链表--简单

1. 题目 给你一个单链表的头节点 head &#xff0c;请你判断该链表是否为回文链表。如果是&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 示例 1&#xff1a; 输入&#xff1a;head [1,2,2,1] 输出&#xff1a;true 示例 2&#xff1a; 输入&#xf…...

Java—接口和抽象类

一、接口 Java 接口&#xff08;Interface&#xff09; 是面向对象编程中用于定义行为规范的核心机制。接口通过抽象方法约定“能做什么”&#xff0c;而不关心“如何做”&#xff0c;从而实现多态和代码解耦。 1.1 接口的特点 接口用interface定义接口中全为抽象方法默认用p…...

CycleISP: Real Image Restoration via Improved Data Synthesis通过改进数据合成实现真实图像恢复

摘要 大规模数据集的可用性极大释放了深度卷积神经网络&#xff08;CNN&#xff09;的潜力。然而&#xff0c;针对单图像去噪问题&#xff0c;获取真实数据集成本高昂且流程繁琐。因此&#xff0c;图像去噪算法主要基于合成数据开发与评估&#xff0c;这些数据通常通过广泛假设…...

算法题(146):最大子段和

、 审题&#xff1a; 本题需要我们找到给定数组中子段之和和最大的sum值 思路&#xff1a; 方法一&#xff1a;暴力解法 我们可以使用双层for循环&#xff0c;第一层循环负责遍历每一个数组元素&#xff0c;然后分别以他们为子段起点&#xff0c;第二层循环从第一层循环的索引开…...

centos6.10在Macbook m芯片上使用

非常好&#xff01;用 CentOS 6.10 替代 6.4 是一个明智的选择 ✅&#xff0c;原因如下&#xff1a; ⸻ ✅ 为什么选 CentOS 6.10 更好 对比项 CentOS 6.4 CentOS 6.10 发布年份 2013 年 2018 年&#xff08;CentOS 6 系列最终版&#xff09; 内核版本 2.6.32-358 2.6.32-75…...

OA 系统办公自动化包含哪些内容,关键功能模块与操作要点说明

在企业数字化转型浪潮中&#xff0c;OA 系统常被片面认知为请假审批、文件收发的工具&#xff0c;未能发挥其核心价值。部分企业引入 OA 后&#xff0c;出现员工抵触、流程卡顿、系统闲置等问题&#xff0c;根源在于对其功能定位模糊、应用模式僵化&#xff0c;导致无法实现预期…...

AI智能体的现状和应用前景

AI智能体的现状 AI智能体(AI Agents)是指能够感知环境、做出决策并执行任务的智能系统。它们通常结合了机器学习、自然语言处理、计算机视觉等技术,能够在复杂环境中自主运行。目前,AI智能体已经在多个领域取得了显著进展。 在工业领域,AI智能体被用于自动化生产线、质量…...

操作系统实验 实验3 存储器分配与回收

1.实验目的 了解动态分区分配方式中使用的数据结构和分配算法&#xff0c;并进一步加深动态分区存储管理方式及其实现过程的理解。 2.实验要求 用C语言实现首次适应算法的动态分区分配过程alloc()和回收过程free()。 一、实验内容&#xff1a; 1&#xff0e;实验内容 用C语言实…...

408考研逐题详解:2009年第13题

2009年第13题 浮点数加、减运算过程一般包括对阶、尾数运算、规格化、舍入和判溢出等步骤。设浮点数的阶码和尾数均采用补码表示&#xff0c;且位数分别为 5 位和 7 位&#xff08;均含 2 位符号位)。若有两个数 X 2 7 29 / 32 X2^7\times29/32 X2729/32&#xff0c; Y 2 …...

什么是虚拟同步发电机

虚拟同步发电机&#xff08;Virtual Synchronous Generator, VSG&#xff09; 是一种基于电力电子技术的先进控制策略&#xff0c;通过模拟传统同步发电机的机电特性和动态行为&#xff0c;使逆变器或储能系统能够像传统发电机一样为电网提供惯性支撑、频率调节和电压稳定性支持…...

性能比拼: Linkerd vs. Istio

本内容是对知名性能评测博主 Anton Putra Linkerd vs. Istio (Rust vs. C) performance benchmark 内容的翻译与整理, 有适当删减, 相关指标和结论以原作为准 在本内容中&#xff0c;我们将对比 Kubernetes 服务网格中的 Istio 和 Linkerd。 相关代码详见 github 我们将运行…...

FPGA: Xilinx Kintex 7实现PCIe接口

在Xilinx Kintex-7系列FPGA上实现PCIe&#xff08;Peripheral Component Interconnect Express&#xff09;接口&#xff0c;通常使用Xilinx提供的7 Series Integrated Block for PCIe IP核&#xff0c;结合Vivado设计流程。以下是实现PCIe接口的详细步骤和关键点&#xff0c;适…...

《Effective Python》第2章 字符串和切片操作——Python 字符串格式化的现代选择f-strings

引言 本篇博客基于学习《Effective Python》第三版 Chapter 2: Strings and Slicing 的 Item 11 “Prefer Interpolated F-Strings Over C-style Format Strings and str.format” 的总结与延伸。 字符串格式化是 Python 编程中的常见操作&#xff0c;用于动态生成可读性高的…...

vue 去掉右边table的下拉条与下面的白色边框并补充满

::v-deep table {width: 100% !important; } ::v-deep .el-table::after, .el-table::before {display: none !important; }/* 隐藏滚动条但保留滚动功能 */ ::v-deep .el-table__body-wrapper::-webkit-scrollbar {width: 0 !important;height: 0 !important; }::v-deep .el-t…...

RabbitMq消息阻塞,立即解决方案

如果目前你的 RabbitMQ 消费者 被卡住不再消费消息&#xff0c;且消息已经到达消费者绑定队列&#xff0c;但Spring Cloud Stream 没有继续触发 StreamListener 的方法执行。这类问题一般是因为消费者线程阻塞或消息被 RabbitMQ 拒绝投递。我们可以按照下面的步骤紧急处理&…...

单片机-STM32部分:14、SPI

飞书文档https://x509p6c8to.feishu.cn/wiki/VYYnwOc9Zi6ibFk36lYcPQdRnlf 什么是SPI SPI 是英语Serial Peripheral interface的缩写&#xff0c;顾名思义就是串行外围设备接口。是Motorola(摩托罗拉)首先在其MC68HCXX系列处理器上定义的。 SPI&#xff0c;是一种高速的&…...

Selenium-Java版(操作元素)

选择和操控元素的基本方法 前言 选择元素 选择元素的方法 根据 id属性选择元素 根据class属性选择元素 根据tag名选择元素 通过WebElement对象选择元素 示例 等待界面元素出现 原因 解决 操控元素 点击元素 输入框 获取元素信息 获取元素文本内容 获取…...

20052012世界银行中国企业调查数据-社科数据

2005&2012世界银行中国企业调查数据-社科数据https://download.csdn.net/download/paofuluolijiang/90623828https://download.csdn.net/download/paofuluolijiang/90623828 世界银行中国企业调查数据&#xff08;World Bank Enterprise Surveys Data&#xff09;是国际金…...