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

利用Java爬取1688商品详情API接口:技术与应用指南

引言

1688作为中国领先的B2B电子商务平台,拥有海量的商品信息。对于商家和市场研究人员来说,能够从1688获取商品详情信息,对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序,以合法、高效的方式获取1688商品详情接口的数据。

一、1688商品详情API接口概述

(一)接口功能

1688商品详情API接口(如1688.item_get)主要用于获取1688平台上商品的详细信息,包括商品的标题、价格、库存、图片、详情描述、店铺信息、销量等。这些数据能够帮助开发者或第三方平台全面了解商品情况,为市场分析、库存管理、价格策略制定等提供支持。

(二)接口优势

  • 数据全面:接口提供的数据涵盖了商品的各个方面,能够满足商家对商品信息的全面需求。

  • 高效稳定:通过API接口获取数据,避免了直接爬取网页数据的复杂性和不稳定性,提高了数据获取的效率。

  • 易于集成:1688开放平台提供了详细的API文档,开发者可以快速了解接口的使用方法,并将其集成到自己的应用程序中。

二、获取1688商品详情API接口的步骤

(一)注册开发者账号

首先,需要在1688开放平台上注册一个开发者账号。这是获取API接口使用权限的第一步。注册完成后,账号将用于管理API权限和调用情况。

(二)获取API密钥

注册账号后,需要在1688开放平台创建一个应用,并获取App Key和App Secret。这些密钥是调用1688API接口时的身份认证凭证。

(三)了解API接口文档

1688开放平台提供了详细的API接口文档,包括接口的请求地址、请求方法、请求参数、返回数据格式等信息。开发者需要仔细阅读文档,了解如何正确地调用API接口。

(四)编写请求代码

使用Java编写代码调用1688商品详情API接口,获取商品数据。以下是一个简单的示例代码,使用Java的HttpClient类发送GET请求:

java

import org.apache.http.client.methods.HttpGet;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;
import org.json.JSONObject;public class AlibabaItemCrawler {public static void main(String[] args) {String apiUrl = "https://api.1688.com/item_get";String appKey = "YOUR_APP_KEY";String appSecret = "YOUR_APP_SECRET";String numIid = "610947572360"; // 商品IDtry (CloseableHttpClient client = HttpClients.createDefault()) {HttpGet request = new HttpGet(apiUrl);request.setHeader("User-Agent", "Mozilla/5.0");// 构造请求参数String params = "?app_key=" + appKey +"&timestamp=" + System.currentTimeMillis() +"&format=json&v=2.0&sign_method=md5&num_iid=" + numIid;request.setURI(new URI(apiUrl + params));String response = EntityUtils.toString(client.execute(request).getEntity());JSONObject data = new JSONObject(response);System.out.println(data.toString());} catch (Exception e) {e.printStackTrace();}}
}

在编写请求代码时,需要注意以下几点:

  • 请求参数:根据API接口文档的要求,设置正确的请求参数,如App Key、时间戳、数据格式、API版本、签名方法等。对于特定的接口,还需要设置相应的业务参数,如商品ID等.

  • 签名机制:1688API接口采用了签名机制来保证请求的安全性。需要根据1688开放平台提供的签名算法,对请求参数进行签名,并将签名结果作为请求参数之一。签名算法通常涉及对请求参数进行排序、拼接、加密等操作.

  • 请求头:设置合适的请求头,如User-Agent等,以模拟浏览器访问。

(五)解析响应数据

获取到API接口的响应数据后,根据返回的数据格式进行解析。通常,1688API接口返回的数据格式为JSON。可以使用JSON解析库(如org.json)来解析响应数据,提取所需的商品信息。例如,从响应数据中提取商品的标题、价格、库存等信息:

java

JSONObject item = data.getJSONObject("item");
String title = item.getString("title");
double price = item.getDouble("price");
int stock = item.getInt("num");
System.out.println("商品标题:" + title);
System.out.println("商品价格:" + price);
System.out.println("商品库存:" + stock);

在解析响应数据时,需要注意JSON数据的嵌套结构和字段名称,确保正确地提取所需的信息。

(六)错误处理和日志记录

在代码中添加错误处理逻辑,对API请求和响应中可能出现的错误进行处理。例如,当API请求失败或返回错误时,可以记录错误日志并提示用户。同时,记录关键的日志信息,包括API请求的时间、参数、响应状态码和内容等,以便于后续的问题排查和跟踪:

java

try {// 发送API请求
} catch (Exception e) {// 记录错误日志System.err.println("请求失败:" + e.getMessage());// 可以将错误信息写入日志文件// log.error("请求失败:" + e.getMessage());
}

通过合理的错误处理和日志记录,可以提高爬虫程序的稳定性和可维护性。

三、数据分析与应用

获取到1688商品详情数据后,可以利用Java的数据分析库,如Apache Commons Math、Weka等,对数据进行处理和分析,从而发现数据中的模式、趋势和价值。

(一)数据清洗

在分析之前,通常需要对数据进行清洗,去除无用或错误的数据。例如,删除缺失值、重复数据、异常值等。可以使用Java集合框架中的数据结构和算法来实现数据清洗:

java

List<Item> items = new ArrayList<>();
// 假设items是从API接口获取到的商品详情数据列表
items.removeIf(item -> item.getPrice() == null || item.getStock() < 0); // 删除价格为空或库存为负数的商品

(二)数据分析

使用数据分析库进行数据分析,可以计算数据的统计信息、执行数据分组、排序等操作。例如,计算商品的平均价格、最高价格、最低价格等:

java

double totalPrice = items.stream().mapToDouble(Item::getPrice).sum();
double averagePrice = totalPrice / items.size();
double maxPrice = items.stream().mapToDouble(Item::getPrice).max().orElse(0);
double minPrice = items.stream().mapToDouble(Item::getPrice).min().orElse(0);
System.out.println("商品平均价格:" + averagePrice);
System.out.println("商品最高价格:" + maxPrice);
System.out.println("商品最低价格:" + minPrice);

还可以根据商品的类别、品牌等属性进行分组分析,了解不同类别的商品价格分布、销售情况等。

(三)数据可视化

数据可视化是数据分析的重要手段,可以帮助我们更直观地理解数据。可以使用Java的数据可视化库,如JFreeChart、JavaFX等,绘制各种图表,如折线图、柱状图、散点图等。例如,绘制商品价格的柱状图:

java

import org.jfree.chart.ChartFactory;
import org.jfree.chart.ChartFrame;
import org.jfree.chart.JFreeChart;
import org.jfree.data.category.DefaultCategoryDataset;public class DataVisualization {public static void main(String[] args) {DefaultCategoryDataset dataset = new DefaultCategoryDataset();for (Item item : items) {dataset.addValue(item.getPrice(), "商品", item.getTitle());}JFreeChart chart = ChartFactory.createBarChart("商品价格", // 图表标题"商品", // X轴标签"价格", // Y轴标签dataset // 数据集);ChartFrame frame = new ChartFrame("商品价格柱状图", chart);frame.pack();frame.setVisible(true);}
}

通过数据可视化,我们可以清晰地展示商品价格的分布情况,为决策提供有力的支持。

四、1688商品详情API爬虫的实战案例

(一)市场分析

通过爬取1688商品详情数据,可以进行市场分析,了解不同商品的市场占有率、用户喜好、竞争对手情况等。例如,爬取某一类商品的数据,分析不同品牌、型号的销量、价格、用户评价等,为市场调研提供依据:

java

List<Item> categoryItems = new ArrayList<>();
// 爬取某一类商品详情数据
// 假设categoryItems是从API接口获取到的该类商品详情数据列表
Map<String, Integer> brandSales = new HashMap<>();
for (Item item : categoryItems) {String brand = item.getBrand();int sales = item.getSales();brandSales.put(brand, brandSales.getOrDefault(brand, 0) + sales);
}

通过分析不同品牌的销量,可以了解市场上的主要竞争品牌及其市场份额。

(二)竞争对手研究

获取竞争对手的商品详情数据,可以了解其产品策略、定价策略、营销策略等。例如,爬取竞争对手的商品数据,比较其与自身产品的价格、功能、用户评价等,从而制定相应的竞争策略:

java

List<Item> competitorItems = new ArrayList<>();
// 爬取竞争对手的商品详情数据
// 假设competitorItems是从API接口获取到的竞争对手商品详情数据列表
Map<String, Double> competitorPrices = new HashMap<>();
for (Item item : competitorItems) {String model = item.getModel();double price = item.getPrice();competitorPrices.put(model, price);
}

通过比较竞争对手的商品价格和自身产品的价格,可以调整自身的定价策略,以提高竞争力。

(三)个性化推荐

根据用户的历史购买记录和浏览行为,结合1688商品详情数据,可以为用户提供个性化的商品推荐。例如,根据用户之前购买的商品类型和价格区间,推荐相似的商品:

java

List<Item> recommendedItems = new ArrayList<>();
// 根据用户的历史购买记录和浏览行为,筛选出推荐商品
for (Item item : allItems) {if (item.getType().equals(userPreferredType) && item.getPrice() <= userPreferredPrice) {recommendedItems.add(item);}
}

通过个性化推荐,可以提高用户的购买转化率和平台的用户粘性。

五、注意事项与建议

(一)遵守法律法规和平台协议

在使用Java爬虫获取1688商品详情API接口数据时,必须严格遵守相关法律法规和1688开放平台的使用协议。不要爬取涉及国家安全、商业机密、个人隐私等敏感数据,不要对1688平台造成过大的访问压力,避免对平台的正常运行产生影响。

(二)处理异常情况

在爬虫运行过程中,可能会遇到各种异常情况,如网络请求失败、数据解析错误等。我们需要在代码中添加异常处理机制,确保爬虫的稳定性和可靠性。例如:

java

try {// 发送API请求
} catch (Exception e) {// 记录错误日志System.err.println("请求失败:" + e.getMessage());
}

(三)维护良好的用户体验

对于一些需要用户授权的API接口,要确保在获取用户数据时,用户能够清楚地了解数据的用途和使用方式,并获得用户的同意。同时,要保护用户的隐私和数据安全,避免数据泄露和滥用。

结论

Java爬虫在获取1688商品详情API接口数据方面具有显著的优势,能够高效、准确地获取丰富的商品数据。通过对获取到的数据进行分析和应用,我们可以发现数据中的价值,为市场分析、竞争对手研究、个性化推荐等提供有力的支持。然而,在使用爬虫时,我们也要注意遵守法律法规、处理异常情况和维护良好的用户体验,确保数据获取和使用的合法性和安全性。随着技术的不断发展,Java爬虫在电商数据获取领域的应用将更加广泛和深入,为电商运营和发展提供强大的数据支持。

如遇任何疑问或有进一步的需求,请随时与我私信或者评论联系。

相关文章:

利用Java爬取1688商品详情API接口:技术与应用指南

引言 1688作为中国领先的B2B电子商务平台&#xff0c;拥有海量的商品信息。对于商家和市场研究人员来说&#xff0c;能够从1688获取商品详情信息&#xff0c;对于市场分析、竞品研究等具有重要价值。本文将详细介绍如何使用Java编写爬虫程序&#xff0c;以合法、高效的方式获取…...

安装vue脚手架出现的一系列问题

安装vue脚手架出现的一系列问题 前言使用 npm 安装 vue/cli2.权限问题及解决方法一&#xff1a;可以使用管理员权限进行安装。方法二&#xff1a;更改npm全局安装路径 前言 由于已有较长时间未进行 vue 项目开发&#xff0c;今日着手准备开发一个新的 vue 项目时&#xff0c;在…...

git命令收集

强制丢弃所有修改&#xff0c;和仓库代码一致 git reset --hard 更新子模块 git submodule update每个子模块 重置到最新节点 git submodule foreach --recursive git reset --hard清除每个子模块未跟踪的文件 git submodule foreach --recursive git clean -fd清理未跟踪的…...

IDEA中Maven依赖包导入失败报红的潜在原因

在上网试了别人的八个问题总结之后依然没有解决&#xff1a; IDEA中Maven依赖包导入失败报红问题总结最有效8种解决方案_idea导入依赖还是报红-CSDN博客https://blog.csdn.net/qq_43705131/article/details/106165960 江郎才尽之后突然想到一个原因&#xff1a;<dep…...

c/c++ 里的进程间通信 , 管道 pipe 编程举例

&#xff08;1&#xff09;以下是一个网上的使用 pipe 编程的范例&#xff1a; #include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/types.h> #include <sys/wait.h>int main() {int pipefd…...

【Java】JVM内存相关笔记

Java虚拟机在执行Java程序的过程中会把它所管理的内存划分为若干个不同的数据区域。这些区域有各自的用途&#xff0c;以及创建和销毁的时间&#xff0c;有的区域随着虚拟机进程的启动而一直存在&#xff0c;有些区域则是依赖用户线程的启动和结束而建立和销毁。 程序计数器&am…...

[项目实战2]贪吃蛇游戏

目录 贪吃蛇游戏&#xff1a;&#xff1a; 一、游戏效果及功能实现&#xff1a; 1.规则 ​​​​​​​ ​​​​​​​ ​​​​​​​ 2.基本功能实现 ​​​​​​​ ​​​​​​​ ​​​​​​​ 3.技术要点 ​​​​​​​…...

PySide6的样式表

PySide6 提供了对 Qt 样式表&#xff08;Qt Style Sheets&#xff0c;简称 QSS&#xff09;的支持&#xff0c;这是一种类似于 CSS 的样式表语言&#xff0c;用于自定义 Qt 应用程序的外观。 1. 什么是 Qt 样式表&#xff08;QSS&#xff09; Qt 样式表是一种声明性的样式表语…...

计算机网络之---局域网

什么叫局域网 局域网&#xff08;LAN&#xff0c;Local Area Network&#xff09; 是指在一个相对较小的区域内&#xff0c;如家庭、办公室、学校、企业等&#xff0c;连接多个计算机和设备的网络。局域网的特点是覆盖范围小、传输速度快、构建成本较低。 局域网的主要特点&…...

使用 uniapp 开发微信小程序遇到的坑

0. 每次修改代码时&#xff0c;都会触发微信开发工具重新编译 终极大坑&#xff0c;暂未找到解决方案 1. input 无法聚焦问题 问题&#xff1a;在小程序开发工具中&#xff0c;input 会突然无法聚焦&#xff0c;重启也不行。但是真机调试可以正常聚焦。 解决办法&#xff1a…...

基于 GEE Sentinel-1 数据集提取水体

目录 1 水体提取原理 2 完整代码 3 运行结果 1 水体提取原理 水体提取是地理信息和遥感技术的关键应用之一&#xff0c;对于多个领域都具有重要的应用价值。它有助于更好地管理水资源&#xff0c;保护环境&#xff0c;减少灾害风险&#xff0c;促进可持续发展&#xff0c;以…...

2025-01-07 Unity 使用 Tip3 —— 游戏保存数据到 Application.persistentDataPath 不生效解决方案更新

文章目录 1 问题描述2 老版解决方案&#xff08;测试可行&#xff09;2.1 创建 js 脚本2.2 添加 js 引用 3 新版解决方案&#xff08;测试不可行&#xff09;4 实际问题 ​ WebGL 平台限制了文件访问系统&#xff0c;在 Unity 以前版本中&#xff0c;开发者想要在 WebGL 上保存…...

关于重构一点简单想法

关于重构一点简单想法 当前工作的组内&#xff0c;由于业务开启的时间正好处于集团php-》go技术栈全面迁移的时间点&#xff0c;组内语言技术栈存在&#xff1a;php、go两套。 因此需求开发过程中通常要考虑两套技术栈的逻辑&#xff0c;一些基础的逻辑也没有办法复用。 在这…...

使用 `llama_index` 构建智能问答系统:多种文档切片方法的评估

使用 llama_index 构建智能问答系统&#xff1a;多种文档切片方法的评估 代码优化与解析1. **代码结构优化**2. **日志管理**3. **环境变量管理**4. **模型初始化**5. **提示模板更新**6. **问答函数优化**7. **索引构建与查询引擎**8. **节点解析器测试** 总结 在现代自然语言…...

Vue3 内置组件之KeepAlive

文章目录 Vue3 内置组件之KeepAlive概述用法简单使用include & excludemax Vue3 内置组件之KeepAlive 概述 <KeepAlive> 是一个内置组件&#xff0c;它的功能是在多个组件间动态切换时缓存被移除的组件实例。 组件在加载时会经历初始、挂载、更新、销毁生命周期&a…...

生物医学信号处理--绪论

前言 参考书籍&#xff1a;刘海龙&#xff0c;生物医学信号处理&#xff0c;化学工业出版社 生物医学信号分类 1、由生理过程自发或者诱发产生的电生理信号和非电生理信号 • 电生理信号&#xff1a;ECG/心电、EEG/脑电、EMG/肌电、 EGG/胃电、 EOG/眼电 • 非电生理信号&am…...

30天开发操作系统 第 12 天 -- 定时器

前言 定时器(Timer)对于操作系统非常重要。它在原理上却很简单&#xff0c;只是每隔一段时间(比如0.01秒)就发送一个中断信号给CPU。幸亏有了定时器&#xff0c;CPU才不用辛苦地去计量时间。……如果没有定时器会怎么样呢?让我们想象一下吧。 假如CPU看不到定时器而仍想计量时…...

android 启动页倒计时页面编写

一、需求和技术 1、实现5,4,3,2,1启动页倒计时 2、倒计时实现使用CountDownTimer 二、activity代码 public class OpenActivity extends AppCompatActivity {private Button in;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanc…...

Win10和11 git/Android Studio遇到filename too long问题的解决

1、打开windows长文件、长路径支持&#xff1a; 可以参考这篇文章&#xff1a; 修改注册表方法&#xff1a; 使用Admin登陆machine&#xff0c;在run中输入regedit并回车&#xff1b; 找到路径 ’Computer -> HKEY_LOCAL_MACHINE -> SYSTEM -> CurrentControlSet -&g…...

OpenCV相机标定与3D重建(43)用于计算矫正和重映射的变换函数initUndistortRectifyMap()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算畸变矫正和校正变换映射。 该函数计算联合的畸变矫正和校正变换&#xff0c;并以 remap 所需的地图形式表示结果。矫正后的图像看起来像是原…...

运行npm install 时,卡在sill idealTree buildDeps没有反应

运行npm install 时&#xff0c;卡在sill idealTree buildDeps没有反应 原因&#xff1a; 淘宝镜像源的域名早已经过期&#xff0c;所以我们需要绑定新的镜像源。 2021 年&#xff0c;淘宝就发布了消息称&#xff0c;npm 淘宝镜像已经从 registry.npm.taobao.org 切换到了 re…...

与 Oracle Dataguard 相关的进程及作用分析

与 Oracle Dataguard 相关的进程及作用分析 目录 与 Oracle Dataguard 相关的进程及作用分析与 Oracle Dataguard 相关的进程及作用分析一、主库的进程1、LGWR 进程2、ARCH进程3、LNS 进程 二、备库的进程1、RFS 进程2、ARCH3、MRP&#xff08;Managed Recovery Process&#x…...

如何在Windows上编译OpenCV4.7.0

前言 ​ 参考&#xff1a;Win10 下编译 OpenCV 4.7.0详细全过程&#xff0c;包含xfeatures2d 这里在其基础上还出现了一些问题&#xff0c;仅供参考。 正文 一、环境 1、win10 2、cmake-gui 3、opencv4.7.0 4、VS2019 二、编译过程 1、下载需要的文件&#xff1a; 通…...

get和post有什么区别

GET和POST是HTTP协议中两种常用的请求方法&#xff0c;它们在用途、参数传递方式、缓存处理、安全性等方面存在显著差异。 以下是对GET和POST区别的详细讲解&#xff0c;并给出示例演示。 一、GET和POST的区别 用途 GET&#xff1a;主要用于获取信息&#xff0c;即进行查询操…...

STM32之CAN通讯(十一)

STM32F407 系列文章 - CAN通讯&#xff08;十一&#xff09; 目录 前言 一、CAN 二、CAN驱动电路 三、CAN软件设计 1.CAN状态初始化 2.头文件相关定义 3.接收中断服务函数 4.用户层使用 1.用户层相关定义 2.发送数据 3.接收数据 1.查询方式处理 2.中断方式处理 3…...

23.行号没有了怎么办 滚动条没有了怎么办 C#例子

新建了一个C#项目&#xff0c;发现行号没有了。 想把行号调出来&#xff0c;打开项目&#xff0c;选择工具>选项> 如下图&#xff0c;在文本编辑器的C#里有一个行号&#xff0c;打开就可以了 滚动条在这里&#xff1a;...

QT 下拉菜单设置参数 起始端口/结束端口/线程数量 端口扫描4

上篇文章QT实现 端口扫描暂停和继续功能 3-CSDN博客 双击 添加对话框类 界面设计 由于主体代码已经写完&#xff0c;只需要更改参数的获取即可 获取起始端口结束端口的输入 槽函数 给主界面类添加调用对话框类的功能 实现功能&#xff1a;点击菜单项可以弹出对话框窗体 增加槽…...

spark——RDD算子集合

目录 算子转换算子示例mapflatMapReduceByKeyfilterdistinctglomgroupBygroupByKeySortBysortByKeyunion交集intersection和差集subtractjoinpartitionBymapPartitionsample 行动算子示例ForeachPartitionForeachSaveAsTextFileCountByKeyReducefoldfirst、take、counttop、tak…...

【ArcGIS Pro二次开发实例教程】(1):图层的前置、后置

一、简介 此工具要实现的功能是&#xff1a;将内容框中当前选定的图层移到最顶层或最底层。 主要技术要点包括&#xff1a; 1、Config.daml文件设置&#xff08;UI设置&#xff09; 2、按钮的图片和位置设置 3、当前选定图层的获取 4、图层在内容列表中位置的获取和移动 …...

idea 运行 docker-compose 文件问题

我idea 连接远程docker 然后本地运行compose 文件出了问题 C:\Program Files\Docker\Docker\resources\bin\docker.exe compose -f D:\aproject\group-buy-market\suger_group_buy\docs\dev-ops\docker-compose-environment.yml -p dev-ops up -d正在准备 Docker SSH 环境…ti…...

深度学习中的正则化方法

最近看到了正则化的内容&#xff0c;发现自己对正则化的理解已经忘得差不多了&#xff0c;这里在整理一下&#xff0c;方便以后查阅。 深度学习中的正则化方法 1. L2 正则化&#xff08;L2 Regularization&#xff09;2. L1 正则化&#xff08;L1 Regularization&#xff09;3.…...

LInux单机安装Redis

1. 安装gee工具包 由于Redis是基于c语言编写的所以安装的时候需要先安装gee以及gcc的依赖,yum云用不了可以看一下这个 linux 替换yum源镜像_更换yum镜像源-CSDN博客 yum install -y gcc tcl 2. 添加redis的压缩包 3. 上传到Linux 上传到 /usr/local/src 目录、这个目录一般用于…...

kafka使用以及基于zookeeper集群搭建集群环境

一、环境介绍 zookeeper下载地址&#xff1a;https://zookeeper.apache.org/releases.html kafka下载地址&#xff1a;https://kafka.apache.org/downloads 192.168.142.129 apache-zookeeper-3.8.4-bin.tar.gz kafka_2.13-3.6.0.tgz 192.168.142.130 apache-zookee…...

深入理解 pytest_runtest_makereport:如何在 pytest 中自定义测试报告

pytest_runtest_makereport 是 pytest 系统中的一个钩子函数&#xff0c;它允许我们在测试执行时获取测试的报告信息。通过这个钩子&#xff0c;我们可以在测试运行时&#xff08;无论是成功、失败还是跳过&#xff09;对测试结果进一步处理&#xff0c;比如记录日志、添加自定…...

嵌入式技术之Linux(Ubuntu) 一

一、Linux入门 1.硬件和操作系统以及用户的关系 一个传感器&#xff0c;获得数据后&#xff0c;需要向服务器发送数据。传感器传数据给上位机。 上位机需要一个程序来接收数据&#xff0c;那么这个上位机是什么机器&#xff1f; 我们的笔记本电脑就可以当成上位机。 两个手…...

VB.NET CRC32 校验

在 VB.NET 中实现 CRC32 校验并在校验失败时退出程序&#xff0c;你可以按照以下步骤进行&#xff1a; ‌实现 CRC32 计算函数‌&#xff1a;首先&#xff0c;你需要一个函数来计算给定数据的 CRC32 值。 ‌比较计算的 CRC32 值‌&#xff1a;然后&#xff0c;你需要将计算出的…...

iOS - 弱引用表(Weak Reference Table)

1. 基本数据结构 // 弱引用表的基本结构 struct weak_table_t {weak_entry_t *weak_entries; // 保存所有的弱引用对象size_t num_entries; // 当前存储的弱引用数量uintptr_t mask; // 哈希表大小掩码uintptr_t max_hash_displacement; /…...

Taro地图组件和小程序定位

在 Taro 中使用腾讯地图 1.首先在项目配置文件 project.config.json 中添加权限&#xff1a; {"permission": {"scope.userLocation": {"desc": "你的位置信息将用于小程序位置接口的效果展示"}} }2.在 app.config.ts 中配置&#x…...

汇编实现函数调用

x86_64 通过将函数参数存放在栈中的方式来实现参数传递。 # PURPOSE: Program to illustrate how functions work # This program will compute the value of # 2^3 5^2 ## Everything in the main program is stored in registers, # so the data section…...

C#—Task异步的常用方法及TaskFactory工厂类详解

Task异步的常用方法 C# 中的 Task 类是 System.Threading.Tasks 命名空间的一部分&#xff0c;用于表示异步操作。 以下是一些常用的 Task 类方法&#xff1a; 一、Task.Run(Action action): 此静态方法用于在后台运行一个新任务&#xff0c;并返回与该任务关联的 Task 实例…...

JAVA | 通过自定义注解与AOP防止接口重复提交

关注&#xff1a;CodingTechWork 引言 在Web应用开发中&#xff0c;特别是在处理表单提交或API调用时&#xff0c;可能会遇到用户因网络延迟、按钮多次点击等原因导致的重复提交问题。为了解决这一问题&#xff0c;通常的做法是在前端禁用提交按钮&#xff0c;或者在后端使用唯…...

从零手写实现redis(四)添加监听器

1、删除监听器 /*** 删除监听器接口** author binbin.hou* since 0.0.6* param <K> key* param <V> value*/ public interface ICacheRemoveListener<K,V> {/*** 监听* param context 上下文* since 0.0.6*/void listen(final ICacheRemoveListenerContext&…...

Spring Boot项目中使用单一动态SQL方法可能带来的问题

1. 查询计划缓存的影响 深入分析 数据库系统通常会对常量SQL语句进行编译并缓存其执行计划以提高性能。对于动态生成的SQL语句&#xff0c;由于每次构建的SQL字符串可能不同&#xff0c;这会导致查询计划无法被有效利用&#xff0c;从而需要重新解析、优化和编译&#xff0c;…...

51单片机——中断(重点)

学习51单片机的重点及难点主要有中断、定时器、串口等内容&#xff0c;这部分内容一定要认真掌握&#xff0c;这部分没有学好就不能说学会了51单片机 1、中断系统 1.1 概念 中断是为使单片机具有对外部或内部随机发生的事件实时处理而设置的&#xff0c;中断功能的存在&#…...

MySQL insert or update方式性能比较

MySQL中&#xff0c;有如下两种方式&#xff0c;哪种方式比较好&#xff1f; 1、先使用enterprise_id字段查询数据表&#xff0c;如果表中存在记录&#xff0c;则更新记录&#xff1b;如果不存在&#xff0c;则插入记录&#xff1b; 2、使用“INSERT INTO XXX ON DUPLICATE K…...

Linux下常用命令

本文以笔记的形式记录Linux下常用命令。 注1&#xff1a;限于研究水平&#xff0c;阐述难免不当&#xff0c;欢迎批评指正。 注2&#xff1a;文章内容会不定期更新。 一、Ubuntu 添加账号 useradd -m -s /bin/bash -d /home/newuser newuser:newuser passwd newuser 二、 Ce…...

计算机网络、嵌入式等常见问题简答

1.嵌入式系统中经常要用到无限循环&#xff0c;如何用C编写死循环 答&#xff1a;while(1){}或者for(;;) 2.程序的局部变量存在于哪里&#xff0c;全局变量存在于哪里&#xff0c;动态申请数据存在于哪里。 答&#xff1a;程序的局部变量存在于栈区&#xff1b;全局变量存在…...

嵌入式中QT实现文本与线程控制方法

第一:利用QT进行文件读写实现 利用QT进行读写文本的时候进行读写,读取MP3歌词的文本,对这个文件进行读写操作。 实例代码,利用Qfile,对文件进行读写。 //读取对应文件文件,头文件的实现。 #ifndef MAINWINDOW_H #define MAINWINDOW_H#include <QMainWindow> #incl…...

141.环形链表 142.环形链表II

141.环形链表 & 142.环形链表II 141.环形链表 思路&#xff1a;快慢指针 or 哈希表 快慢指针代码&#xff1a; class Solution { public:bool hasCycle(ListNode *head) {if(headnullptr||head->nextnullptr)return false;ListNode *fasthead->next; //不能设置成…...

计算机网络掩码、最小地址、最大地址计算、IP地址个数

一、必备知识 1.无分类地址IPV4地址网络前缀主机号 2.每个IPV4地址由32位二进制数组成 3. /15这个地址表示网络前缀有15位&#xff0c;那么主机号32-1517位。 4.IP地址的个数&#xff1a;2**n (n表示主机号的位数) 5.可用&#xff08;可分配&#xff09;IP地址个数&#x…...