Javascript笔试题目(二)

news2024/10/12 1:20:41

1.如何使用ES6语法对函数所有参数进行求和?请写出具体代码

function sumAll(...args) {  
    // args 是一个数组,包含了函数接收到的所有参数  
    return args.reduce((accumulator, currentValue) => accumulator + currentValue, 0);  
}  
  
// 测试函数  
console.log(sumAll(1, 2, 3, 4)); // 输出: 10  
console.log(sumAll(5, 10, 15));  // 输出: 30  
console.log(sumAll(2.5, -1, 3.5)); // 输出: 5

2.如何使用JS 实现交换两个变量的值(不使用临时变量)?写出具体代码

方法一:使用数组解构赋值(ES6)

这是ES6引入的一种非常简洁且易读的方法,利用数组解构的特性来交换变量的值。

let a = 5;  
let b = 10;  
  
// 使用数组解构赋值交换变量值  
[a, b] = [b, a];  
  
console.log(a); // 输出: 10  
console.log(b); // 输出: 5

方法二:通过数学运算(适用于数字)

你可以通过加减运算或异或运算来交换两个数字变量的值。但请注意,异或运算方法在某些情况下可能不太直观,且仅限于整数。

加减运算
let a = 5;  
let b = 10;  
  
a = a + b; // a 现在是 15  
b = a - b; // b 现在是 5 (因为 a 是 15, 15 - 10 = 5)  
a = a - b; // a 现在是 10 (因为 a 是 15, 15 - 5 = 10)  
  
console.log(a); // 输出: 10  
console.log(b); // 输出: 5
异或运算(仅限整数)

定义:异或运算符表示两个值如果不同则为真(1),相同则为假(0)。

let a = 5; // 二进制: 0101  
let b = 10; // 二进制: 1010  
  
a = a ^ b; // a 现在是 15 (二进制: 1111), 相当于两个数不进行进位的相加  
b = a ^ b; // b 现在是 5  (二进制: 0101), 相当于原a的值  
a = a ^ b; // a 现在是 10 (二进制: 1010), 相当于原b的值  
  
console.log(a); // 输出: 10  
console.log(b); // 输出: 5

 3.如何使用JS实现将对象转换为树形结构?请写出具体代码

在JavaScript中,将对象数组转换为树形结构是一个常见的任务,特别是在处理具有层级关系的数据时。假设你有一个对象数组,其中每个对象都有一个唯一的id和一个指向其父节点的parentId(对于根节点,parentId可能是nullundefined),你可以通过以下步骤将其转换为树形结构。

以下是一个具体的代码示例,它展示了如何将这样的对象数组转换为树形结构:

// 示例数据:一个对象数组,每个对象有id和parentId属性  
const data = [  
  { id: 1, parentId: null, name: 'Root 1' },  
  { id: 2, parentId: 1, name: 'Child 1.1' },  
  { id: 3, parentId: 1, name: 'Child 1.2' },  
  { id: 4, parentId: 2, name: 'Grandchild 1.1.1' },  
  { id: 5, parentId: null, name: 'Root 2' },  
  { id: 6, parentId: 5, name: 'Child 2.1' },  
];  
  
// 函数:将对象数组转换为树形结构  
function arrayToTree(items) {  
  // 创建一个空对象来存储树节点,以id为键  
  const idMapping = {};  
  // 创建一个数组来存储根节点(没有parentId的节点)  
  const rootNodes = [];  
  
  // 遍历数据项,构建idMapping和根节点数组  
  items.forEach(item => {  
    // 将当前项添加到idMapping中  
    const { id } = item;  
    idMapping[id] = { ...item, children: [] };  
  
    // 检查是否有parentId,如果有,则将其添加到父节点的children数组中  
    if (item.parentId !== null) {  
      // 确保父节点已经存在于idMapping中(对于根节点,这一步会在后面的迭代中完成)  
      if (!idMapping[item.parentId]) {  
        idMapping[item.parentId] = { children: [] };  
      }  
      // 将当前项添加到父节点的children数组中  
      idMapping[item.parentId].children.push(idMapping[id]);  
    } else {  
      // 如果没有parentId,则这是根节点,添加到根节点数组中  
      rootNodes.push(idMapping[id]);  
    }  
  });  
  
  // 返回根节点数组,即树形结构的根  
  return rootNodes;  
}  
  
// 调用函数并打印结果  
const tree = arrayToTree(data);  
console.log(JSON.stringify(tree, null, 2));

在这个示例中,arrayToTree函数接收一个对象数组items作为参数,并返回一个树形结构的数组。树形结构中的每个节点都有一个children数组,用于存储其子节点。函数首先创建一个空对象idMapping来存储每个节点,并以节点的id作为键。然后,它遍历输入数组,将每个节点添加到idMapping中,并根据parentId将其添加到父节点的children数组中。最后,函数返回根节点数组,即没有parentId的节点。

4.如何使用JS解析URL参数为对象?请写出具体代码

方法一:使用正则表达式和split方法

这种方法通过正则表达式匹配URL中的查询字符串部分,并使用split方法将其拆分为键值对,然后进一步处理以生成对象。

// 示例URL,包含查询参数  
const url = 'https://example.com/page?name=JohnDoe&age=30&city=NewYork';  
  
// 提取查询字符串部分(?后面的部分)  
const queryString = url.split('?')[1];  
  
// 创建一个空对象来存储参数  
const paramsObject = {};  
  
// 如果没有查询字符串,则直接返回空对象  
if (!queryString) {  
  return paramsObject;  
}  
  
// 使用正则表达式和split方法将查询字符串拆分为键值对数组  
const pairs = queryString.split('&').map(pair => pair.split('='));  
  
// 遍历键值对数组,并将它们添加到对象中  
pairs.forEach(([key, value]) => {  
  // 对键和值进行解码(如果需要)  
  const decodedKey = decodeURIComponent(key);  
  const decodedValue = decodeURIComponent(value || ''); // 处理没有值的情况,例如 ?key&anotherKey  
  paramsObject[decodedKey] = decodedValue;  
});  
  
// 输出结果对象  
console.log(paramsObject);

 方法二:利用内置URLSearchParms

// 示例URL,包含查询参数  
const url = 'https://example.com/page?name=JohnDoe&age=30&city=NewYork';  
  
// 创建一个URL对象(注意:这里只使用了URL的构造函数来解析字符串,并没有实际发起网络请求)  
const parsedUrl = new URL(url);  
  
// 使用URLSearchParams对象来解析查询字符串  
const params = new URLSearchParams(parsedUrl.search);  
  
// 将URLSearchParams对象转换为一个普通的JavaScript对象  
const paramsObject = {};  
for (const [key, value] of params.entries()) {  
  paramsObject[key] = value;  
}  
  
// 输出结果对象  
console.log(paramsObject);

 5.如何使用JS实现每隔一秒打印1,2,3,4?请写出具体代码

方法一:setInterval(fun,interval)

在JavaScript中,你可以使用setInterval函数来每隔一段时间执行一次指定的代码。以下是一个具体的代码示例,展示了如何每隔一秒打印数字1, 2, 3, 4:

// 定义一个计数器变量  
let counter = 1;  
  
// 定义一个函数来打印当前计数器的值  
function printNumber() {  
  console.log(counter);  
  
  // 检查是否已经打印完所有数字  
  if (counter === 4) {  
    // 清除定时器,停止进一步执行  
    clearInterval(intervalId);  
  } else {  
    // 递增计数器  
    counter++;  
  }  
}  
  
// 使用setInterval设置定时器,每隔1000毫秒(1秒)执行一次printNumber函数  
const intervalId = setInterval(printNumber, 1000);

方法二:使用setTimeout递归调用

你可以使用setTimeout函数来设置一个延时,然后在延时结束后执行一个函数。在这个函数内部,你可以打印当前的数字,并再次设置setTimeout来延时执行下一个数字的打印。这种方法通过递归调用自身来实现循环。

let counter = 1;  
  
function printNumber() {  
  console.log(counter);  
  counter++;  
    
  if (counter <= 4) {  
    // 使用setTimeout设置1000毫秒(1秒)后的延时调用  
    setTimeout(printNumber, 1000);  
  }  
}  
  
// 初次调用printNumber函数  
printNumber();

方法三:使用requestAnimationFrame与自定义计时(不推荐)

let counter = 1;  
let startTime = performance.now(); // 获取高精度当前时间  
let interval = 1000; // 所需的时间间隔,以毫秒为单位  
  
function printNumberAndRequestNextFrame() {  
  const currentTime = performance.now();  
    
  if (currentTime - startTime >= interval) {  
    console.log(counter);  
    counter++;  
      
    if (counter <= 4) {  
      startTime = currentTime; // 重置开始时间以计算下一个间隔  
      requestAnimationFrame(printNumberAndRequestNextFrame);  
    }  
  } else {  
    // 如果没有达到间隔,则再次请求下一帧  
    requestAnimationFrame(printNumberAndRequestNextFrame);  
  }  
}  
  
// 初次调用函数  
requestAnimationFrame(printNumberAndRequestNextFrame);

然而,需要注意的是,这种方法可能会因为屏幕刷新率的差异而引入一些不准确性。因此,对于需要精确时间间隔的任务,通常建议使用setIntervalsetTimeout

 6.如何使用JS实现双向数据绑定?请写出具体代码

方法一:使用 Object.defineProperty 实现数据双向绑定

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>Object.defineProperty 双向绑定</title>  
</head>  
<body>  
    <div>  
        <input type="text" id="inputBox">  
        <p>你输入的内容是: <span id="displayBox"></span></p>  
    </div>  
  
    <script>  
        // 创建一个数据对象  
        const data = {};  
  
        // 使用 Object.defineProperty 来定义数据属性及其 getter 和 setter  
        Object.defineProperty(data, 'text', {  
            get() {  
                return this._text;  
            },  
            set(value) {  
                this._text = value;  
                // 更新 DOM ,通知依赖项修改 
                document.getElementById('displayBox').textContent = value;  
            },  
            configurable: true,  
            enumerable: true  
        });  
  
        // 初始化私有属性 _text  
        data._text = '';  
  
        // 获取输入框和显示框的 DOM 元素  
        const inputBox = document.getElementById('inputBox');  
        const displayBox = document.getElementById('displayBox');  
  
        // 监听输入框的 input 事件  
        inputBox.addEventListener('input', function() {  
            // 更新数据对象的 text 属性,这会触发 setter 并更新 DOM  
            data.text = inputBox.value;  
        });  
  
        // 初始化显示框的内容  
        displayBox.textContent = data.text;  
    </script>  
</body>  
</html>

方法二:使用 Proxy 实现数据双向绑定

Proxy:

let target = {  
  foo: 'bar'  
};  
  
let handler = {  
  get(target, property) {  
    console.log(`Getting ${property}`);  
    return target[property];  
  },  
  set(target, property, value) {  
    console.log(`Setting ${property} to ${value}`);  
    target[property] = value;  
    return true; // 表示设置成功  
  }  
};  
  
let proxy = new Proxy(target, handler);  
  
console.log(proxy.foo); // 输出: Getting foo,然后输出: bar  
proxy.foo = 'baz';      // 输出: Setting foo to baz  
console.log(proxy.foo); // 输出: Getting foo,然后输出: baz

      要使用Proxy实现数据双向绑定,我们需要创建一个代理对象来监听对原始数据对象属性的读写操作。当这些属性被读取或修改时,我们可以执行一些自定义的逻辑,比如更新DOM元素以反映数据的变化。

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>Proxy 双向绑定示例</title>  
</head>  
<body>  
    <div>  
        <input type="text" id="inputField">  
        <p>你输入的内容是: <span id="displayField"></span></p>  
    </div>  
  
    <script>  
        // 原始数据对象  
        const data = { text: '' };  
  
        // Proxy handler,用于拦截对原始对象的操作  
        const handler = {  
            get(target, property, receiver) {  
                // 读取属性时,直接返回原始值  
                return Reflect.get(target, property, receiver);  
            },  
            set(target, property, value, receiver) {  
                // 设置属性时,更新原始值并触发DOM更新  
                Reflect.set(target, property, value, receiver);  
                updateDOM(property, value);  
                return true; // 表示设置成功  
            }  
        };  
  
        // 创建代理对象  
        const proxyData = new Proxy(data, handler);  
  
        // 更新DOM的函数  
        function updateDOM(property, value) {  
            if (property === 'text') {  
                document.getElementById('displayField').textContent = value;  
            }  
        }  
  
        // 获取DOM元素并设置初始值  
        const inputField = document.getElementById('inputField');  
        const displayField = document.getElementById('displayField');  
        displayField.textContent = proxyData.text; // 初始化显示  
  
        // 监听输入框的input事件  
        inputField.addEventListener('input', function() {  
            // 更新代理对象的text属性,这会触发Proxy的set方法并更新DOM  
            proxyData.text = inputField.value;  
        });  
    </script>  
</body>  
</html>

在这个示例中,我们做了以下几件事:

  1. 创建了一个原始数据对象data,它有一个text属性。
  2. 定义了一个handler对象,它有两个方法:getsetget方法用于拦截对属性的读取操作,set方法用于拦截对属性的设置操作。
  3. 使用Proxy构造函数创建了一个代理对象proxyData,它代理了原始数据对象data,并使用了我们定义的handler
  4. 定义了一个updateDOM函数,用于在属性被设置时更新DOM元素。
  5. 获取了输入框和显示框的DOM元素,并设置了显示框的初始值。
  6. 为输入框添加了input事件监听器,当用户输入时,更新代理对象的text属性。由于代理对象的set方法被拦截,这会触发updateDOM函数来更新显示框的内容。

这样,当用户在输入框中输入文本时,显示框的内容会实时更新,实现了数据的双向绑定。

7.如何使用JS实现一个简单的路由功能?请写出具体代码

在JavaScript中实现一个简单的路由功能,可以使用前端路由技术,这通常用于单页面应用(SPA)。前端路由通过在浏览器历史记录中添加和监听不同的路径来实现页面的无刷新切换。以下是一个使用纯JavaScript实现简单路由功能的示例:

HTML

首先,我们需要一些基本的HTML结构来容纳我们的视图(页面):

<!DOCTYPE html>  
<html lang="en">  
<head>  
    <meta charset="UTF-8">  
    <meta name="viewport" content="width=device-width, initial-scale=1.0">  
    <title>Simple Routing</title>  
</head>  
<body>  
    <nav>  
        <a href="/home" class="router-link">Home</a>  
        <a href="/about" class="router-link">About</a>  
        <a href="/contact" class="router-link">Contact</a>  
    </nav>  
    <div id="app"></div>  
  
    <script src="router.js"></script>  
</body>  
</html>

JavaScript (router.js)

接下来,我们在router.js文件中实现路由功能:

// 创建一个简单的路由类  
class Router {  
    constructor() {  
        this.routes = {};  
        this.currentRoute = null;  
        this.appElement = document.getElementById('app');  
  
        // 监听点击事件,阻止默认行为并处理路由  
        document.querySelectorAll('.router-link').forEach(link => {  
            link.addEventListener('click', (e) => {  
                e.preventDefault();  
                this.navigateTo(e.target.getAttribute('href'));  
            });  
        });  
  
        // 监听 popstate 事件以处理浏览器前进/后退按钮  
        window.addEventListener('popstate', (e) => {  
            this.navigateTo(document.location.pathname);  
        });  
  
        // 初始化路由,处理页面加载时的路由  
        this.init();  
    }  
  
    init() {  
        this.navigateTo(document.location.pathname);  
    }  
  
    defineRoute(path, component) {  
        this.routes[path] = component;  
    }  
  
    navigateTo(path) {  
        // 规范化路径,确保路径以 '/' 开头  
        if (!path.startsWith('/')) {  
            path = '/' + path;  
        }  
  
        // 更新浏览器历史记录  
        history.pushState({}, '', path);  
  
        // 渲染相应的组件  
        if (this.routes[path]) {  
            this.currentRoute = path;  
            this.appElement.innerHTML = ''; // 清空之前的视图  
            this.appElement.appendChild(this.routes[path]());  
        } else {  
            // 处理 404 页面  
            this.appElement.innerHTML = '<h1>404 - Page Not Found</h1>';  
        }  
    }  
}  
  
// 定义一些简单的组件  
function HomeComponent() {  
    const div = document.createElement('div');  
    div.innerHTML = '<h1>Home Page</h1><p>Welcome to the home page!</p>';  
    return div;  
}  
  
function AboutComponent() {  
    const div = document.createElement('div');  
    div.innerHTML = '<h1>About Page</h1><p>This is the about page.</p>';  
    return div;  
}  
  
function ContactComponent() {  
    const div = document.createElement('div');  
    div.innerHTML = '<h1>Contact Page</h1><p>Contact us at example@example.com.</p>';  
    return div;  
}  
  
// 初始化路由并定义路由规则  
const router = new Router();  
router.defineRoute('/home', HomeComponent);  
router.defineRoute('/about', AboutComponent);  
router.defineRoute('/contact', ContactComponent);
    • 一个导航栏,每个链接都带有router-link类,这些链接用于触发路由。
    • #app元素是我们放置不同页面组件的地方。
  1. JavaScript路由
    • Router类:管理路由定义、导航和视图渲染。
    • constructor:初始化路由,监听链接点击和浏览器前进/后退按钮。
    • init方法:在页面加载时初始化路由。
    • defineRoute方法:定义路径和对应的组件。
    • navigateTo方法:处理路径导航,更新浏览器历史记录,并渲染相应的组件。
    • HomeComponentAboutComponentContactComponent:简单的组件函数,返回包含HTML内容的div元素。

通过这种方式,你可以实现一个简单的前端路由系统,用于单页面应用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2206479.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

查找企业联系电话的几种方法

在商业合作和销售拓展的过程中&#xff0c;找到企业的联系电话是至关重要的一步。无论是精准营销还是客户开发&#xff0c;拥有有效的联系方式可以大大提高成功率。那么&#xff0c;如何快速有效地查找企业联系电话呢&#xff1f;下面介绍几种常见的方法&#xff0c;以及如何借…

摩托车一键启动智能钥匙提高了便捷性和安全性

摩托车一键启动无钥匙进入功能是一种便捷的智能配置 通过PKE智能感应技术实现无钥匙启动&#xff1a; 技术原理与操作 摩托车一键启动无钥匙进入系统采用了RFID无线射频技术和车辆身份编码识别系统&#xff0c;实现了双重射频系统、双重防盗保护。操作简便&#xff0c;只需携…

最后倒计时,SIGMOD 2025全球数据库盛会,你准备好了吗?

一、会议资讯&#xff1a; ACM SIGMOD/PODS International Conference on Management of Data是计算机科学领域中一个顶级的国际学术会议&#xff0c;专注于数据库管理和数据系统的前沿研究。 SIGMOD Conference 每年由 ACM 主办&#xff0c;汇集了全球顶尖的学者、研究人员和…

【使用Java循环输出菱形,空心金字塔】

使用Java循环输出图形的探索之旅 在这篇博客中&#xff0c;我们将探讨如何使用Java中的循环结构来输出各种几何图形&#xff0c;特别是金字塔和菱形。通过这一过程&#xff0c;不仅能够加深对循环的理解&#xff0c;还能提升编程能力。 1. 打印矩形 首先&#xff0c;我们从最…

初级学习:Python实现AI并搭建

随着人工智能(AI)的迅猛发展,越来越多的人希望能够学习如何通过编程实现AI应用。Python,因为其简洁易用,被广泛认为是AI开发的理想编程语言。本文将介绍Python在AI开发中的基础应用,帮助初学者入门并构建自己的AI项目。 为什么选择Python 在了解如何用Python实现AI之前,…

探索 Python 装饰器的终极利器:wrapt 库

文章目录 探索 Python 装饰器的终极利器&#xff1a;wrapt 库背景&#xff1a;装饰器的进化之旅初识 wrapt&#xff1a;它究竟是什么&#xff1f;安装 wrapt&#xff1a;简单几步&#xff0c;轻松上手函数的魔法&#xff1a;wrapt 的简单使用创建简单装饰器装饰器的高级用法&am…

浅谈导热油蒸汽发生器在电子及半导体行业中应用

导热油蒸汽发生器在电子或半导体行业制造过程中有着广泛的应用。为促进温控行业交流发展上海中壹展览等于十二月在上海举办主办首届“TCU China温控展”。以下是一些具体的应用场景和优势&#xff1a; 应用场景 1.清洗与洁净室控制: 半导体生产过程中&#xff0c;生产设备和工…

TikTok代理IP全面使用指南

对于那些希望通过社交媒体打造个人品牌的人来说&#xff0c;TikTok是现在热门的平台&#xff0c;他的流量与曝光不可小觑&#xff0c;相信很多跨境营销会选择他进行多账号营销。问题是&#xff0c;TikTok多账号很容易遇到封禁问题&#xff0c;那么如何解决&#xff1f; 一、什么…

第十三章 RabbitMQ之消息幂等性

目录 一、引言 二、消息幂等解决方案 2.1. 方案一 2.2. 方案二 一、引言 幂等是一个数学概念&#xff0c;用函数表达式来描述是这样的&#xff1a;f(x) f(f(x)) 。在程序开发中&#xff0c;则是指同一个业务&#xff0c;执行一次或多次对业务状态的影响是一致的。有些业务…

3款逆天级Word插件,一键解决文档排版烦恼

在当今快节奏的工作环境中&#xff0c;高效的文档处理能力至关重要&#xff0c;今天电脑天空将为大家介绍三款卓越的Word插件&#xff0c;它们能显著提升你的写作效率&#xff0c;让您的工作成果更加出色。 1. 文档排版利器&#xff1a;小恐龙公文排版助手 小恐龙公文排版助手…

Chromium 如何查找已经定义的mojom函数实现c++

进程通信定义通常都是用.mojom文件或者idl文件格式 以content\common\frame.mojom里面的BeginNavigation函数为例。 一、如何查找BeginNavigation函数定义&#xff0c;在vscode里面直接搜索BeginNavigation&#xff0c;过滤条件 *.idl,*.mojom,*.cc 效果&#xff1a; 这样…

HECTOR:一种新型多模态深度学习模型用于预测子宫内膜癌复发风险|顶刊精析·24-10-12

小罗碎碎念 这篇文章是关于一项名为HECTOR&#xff08;histopathology-based endometrial cancer tailored outcome risk&#xff09;的研究&#xff0c;它是一个基于多模态深度学习的预测模型&#xff0c;用于预测子宫内膜癌&#xff08;EC&#xff09;的复发风险。 作者角色作…

threejs-加载gltf模型

一、介绍 1.概念 glTF&#xff08;gl传输格式&#xff09;是一种开放格式的规范 &#xff08;open format specification&#xff09;&#xff0c; 用于更高效地传输、加载3D内容。该类文件以JSON&#xff08;.gltf&#xff09;格式或二进制&#xff08;.glb&#xff09;格式提…

常用的web服务器简述

一.Web服务器介绍 ‌Web服务器是一种运行于互联网上的计算机硬件或软件&#xff0c;用于存储、处理和传输网页和其他网站内容。‌ 它通常运行在服务器上&#xff0c;绑定服务器的IP地址并监听某一个TCP端口&#xff0c;接收来自客户端的请求&#xff0c;然后向客户端发送所请求…

中国地级市生态韧性数据及城市生态韧性数据(2000-2022年)

一测算方式&#xff1a; 参考C刊《管理学刊》楚尔鸣&#xff08;2023&#xff09;老师的做法&#xff0c;城市生态韧性主要衡量一个城市在面临生态环境系统压力或突发冲击时&#xff0c;约束污染排放、维护生态环境状态和治理能力提升的综合水平。 参考郭海红和刘新民的研究&a…

JavaScript操作DOM对象

DOM 是 JavaScript 操作网页的接口&#xff0c;全称为“文档对象模型” &#xff08;Document Object Model&#xff09;。它的作用是将网页转为一个 JavaScript 对象&#xff0c;从而可以用脚本进行各种操作&#xff08;比如对元素增删 内容&#xff09; 节点的类型有七…

基于STM32的智能家居--硬件接线

分配GPIO 1.首先分配串口通讯引脚&#xff0c;该开发板中有三组串口引脚分别分配如图所示。 2.分配SPI。 3.其他为普通GPIO口&#xff0c;B8,B9模拟IIC协议与OLED屏幕进行通讯。

GEE数据集:美国玉米、大豆和冬小麦 QDANN 30m 产量图/数据集

目录 QDANN 30m Yield Map for Corn, Soy, and Winter Wheat in the U.S美国玉米、大豆和冬小麦 QDANN 30m 产量图 简介 数据集预处理 代码 引用 许可 QDANN 30m Yield Map for Corn, Soy, and Winter Wheat in the U.S美国玉米、大豆和冬小麦 QDANN 30m 产量图 简介 …

指针——数组(指针)传参

&#xff08;一&#xff09;前文问题答案解析 1、代码 int(*pa[10])[5] 的解析 某人&#xff1a;嗯&#xff0c;有*pa&#xff0c;这不很明显是个指针嘛&#xff0c;然后 [5] 说明是个数组指针&#xff0c;int类型&#xff0c;[10]。。。。 这这这&#xff0c;很明显不是指针。…

【笔记】Day2.3.3自定义异常+2.3.4resource注入

此项目一共写了两个自定义异常 因为&#xff1a; 1.前后端交互的响应码&#xff08;如200&#xff0c;401&#xff09;大差不差 区别几乎只在于响应结果中的msg和code表达是否成功 2.而微服务的接口之间调用采用restful方式 状态码要使用标准的http状态码 如&#xff1a;200…