使用Java和XxlCrawler获取各城市月度天气情况实践

目录

前言

一、历史数据获取

1、关于天气后报

2、信息界面分析 

二、数据的提取开发

1、PageVo的定义

 2、属性定义

3、实际信息抓取

三、信息抓取调试以及可能的问题

1、信息获取成果

2、关于超时的问题

四、总结


前言

        这篇文章主要来源于一个我们家小朋友的一个作业,作业的主要内容是要求小朋友做一个统计,在上半学期学习了统计知识,然后要结合生活实际进行统计应用,因此有了这个作业。具体要求是在一定时间范围内(一个月),要求小朋友制作一个表格,需要记录一个月内每一天的天气情况,比如阴晴雨雪。然后在这个记录之上,要求统计出这个月不同的天气有多少天?比如晴天多少天,雨天多少天,然后根据统计结果,计算这个月最多的天气是什么?最少的是什么。这题目本身不难,只要每天都进行记录的话,基本也就没什么问题。然而,中间因为小朋友身体原因。没有及时记录,中间有一段时间没有及时记录。于是我们想,只能到网上查一下历史天气。

        然而我发现,小朋友中间有好几天都忘了记录,数据都有空缺。于是只能按照遗忘的日期来进行补数据。虽然最后把缺失的数据都补回来了。当时在想,还好只是一个月的数据,如果要三个月,半年,甚至是一年的数据,我还能一天一天的找数据不成。作为技术人,需要用一点技术手段来解决这个问题。

        本文主要讲解使用Java开发语言,使用XxlCrawler框架进行智能的某城市月度天气抓取实践开发。文章首先介绍目标网站的相关页面及目标数据的元素,然后讲解在信息获取过程的一些参数配置以及问题应对,最后结合实际代码实际抓取一个城市(以长沙为例)某月度天气数据。通过本文,您可以更加了解XxlCrawler的具体使用,知道如何解决页面返回慢的情况下如何通过超时参数来控制数据返回的问题,如果您是气象人,需要气象数据,则可以通过本文来获取想研究的地域的历史天气数据。

一、历史数据获取

        由于我们需要历史数据,因此需要找到历史数据源网站。关于天气的数据有很多网站可以提供。比较权威的就是国家的官方网站。这里呢,分享一个天气后报网站天气后报网,这个网站上可以提供城市的天气信息。本节主要介绍这个网站的内容和具体月度天气的页面。为下一步的信息获取做准备。

1、关于天气后报

        在浏览器中,输入它的官方网站:http://www.tianqihoubao.com/。可以看到它的官方界面。

        在上方的导航栏中,点击历史天气,可以切换到历史天气查询列表,默认按照行政区划列表的形式展示。

        根据我们的需要,比如(长沙),点击我们感兴趣的城市,打开城市历史天气列表:

        然后打开对应的月度天气连接,24年4月份。 

http://www.tianqihoubao.com/lishi/changsha/month/202404.html

         这是实际的网页地址,请注意这个地址,这里其实有两个变量,第一个是城市,也就是地址信息中的changsha,另外一个是时间即202404,通过网站静态化之后,这些信息都是有规律的。因此我们可以采用XxlCrawler来自动获取。

2、信息界面分析 

        在找到了信息源之后,我们需要分析一些网页的结构,网页信息很多,我们只关心目标数据。这里只需要把表格中的几个关键信息提取出来即可。比如日期、天气状况、气温信息、风力风向信息。这些关键的信息都是在一个表格中展示出来的。在页面中打开调试窗口,来看一下结构:

        首先来看一下网页结构,其主要的div是绑定在一个id='content'的网页元素下的。同时下面的数据是存在在标准的table中,因此我们只需要将table中的tr中循环提取出来即可。

二、数据的提取开发

        在明确了数据来源的网页结构之后,这一节我们来进行实际的数据提取的开发。通过XxlCrawler组件来获取信息。本小节着重讲解代码的设计与实现。

1、PageVo的定义

        熟悉XxlCrawler的朋友知道,PageVO是解析页面的一个对象。框架在读取到页面的信息后,会自动的将信息按照PageVO的配置,解析到实体类中。因此需要对PageVO进行定义。

@PageSelect(cssQuery = "#content >table >tbody >tr")
@AllArgsConstructor
@NoArgsConstructor
public static class PageVo {
		
	@PageFieldSelect(cssQuery=" >td:eq(0)")
	@Excel(name = "日期")
	private String day;
		
	@PageFieldSelect(cssQuery = ">td:eq(1)")
	@Excel(name = "天气状况")
	private String weatherInfo;
		
	@PageFieldSelect(cssQuery = ">td:eq(2)")
	@Excel(name = "最低气温/最高气温")
	private String weatherTemp;
		
	@PageFieldSelect(cssQuery = ">td:eq(3)")
	@Excel(name = "风力风向(夜间/白天)")
	private String weatherWind;
}

        在PageVO的定义过程中,我们使用了三个注解,第一个是@PageSelect(cssQuery = "#content >table >tbody >tr"),这个注解是用来进行页面抓取绑定的。第二个是@PageFieldSelect(cssQuery=" >td:eq(0)"),这个主要是用来进行具体的属性信息绑定,即解析哪个信息,设置到哪个属性当中去,在循环中特别好用。不用向之前那样,自己去解析。第三个是@Excel(name = "日期"),这个跟信息获取关系不大,只是用来最后将获取的信息写入到Excel表格中。当然,结合实际的需求,您可以把数据写入到数据库中,这样子可以在后期在需要的时候进行查询进行分析。

 2、属性定义

        按照JavaOOP的设计思想,这里我们将一些信息封装起来,比如User-Agent还有公共的请求地地址等统一定义,在进行信息抓取时可以直接使用。关键代码如下:

private static final String USER_AGENT = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/102.0.0.0 Safari/537.36";

private List<PageVo> weatherList = new ArrayList<PageVo>();
	
private static final String COMMON_URL  = "http://www.tianqihoubao.com/lishi/changsha/month/";

weatherList就是用来保存所有的天数数据的,在程序的最后可以用来保存数据或者持久化的作用。

3、实际信息抓取

        这里来定义实际信息抓取对象的配置,以及实际启动逻辑。

@Test
public void fetchWeaterInfo() {
	int year = 2023;
    int month = 9; // 月份从 0 开始,3 表示4月份
    String monthStr = "";
    monthStr +=  month < 10 ? "0" + month : month;
    String targetUrl = COMMON_URL + year + monthStr + ".html";
    System.out.println(targetUrl);
	// 构造爬虫
	XxlCrawler crawler = new XxlCrawler.Builder()
		.setUrls(targetUrl)
		.setAllowSpread(false)// 不允许扩散爬取
		.setThreadCount(3)
		.setPauseMillis(3000)
		.setUserAgent(USER_AGENT)//设置user_agent
		.setIfPost(false)
		.setFailRetryCount(3)// 重试三次
		.setTimeoutMillis(1000 * 12)//超时时间,有些网站加载慢,一定要加这个时间
		.setPageParser(new PageParser<PageVo>() {
					
			@Override
			public void parse(Document html, Element pageVoElement, PageVo pageVo) {
				//System.out.println(pageVoElement);
				weatherList.add(pageVo);
			}
	}).build();
    crawler.start(true);// 启动
	// excel工具包
	weatherList.remove(0);//把第一行表头移除掉
	ExcelUtil<PageVo> util = new ExcelUtil<PageVo>(PageVo.class);
	util.exportExcel(weatherList, year + "年" + month + "月天气情况表");
	System.out.println("finished...");
}

        这里需要注意的是,信息抓取器,每次得到的一个tbody中的一行,即tr的数据。我们需要将所有的数据解析完成之后,统一存放到一个List当中。实现月度的数据搜集,同时第一行是表头数据。需要剔除。因此,在写入到Excel之前,要将第一行删除,

weatherList.remove(0);//把第一行表头移除掉

三、信息抓取调试以及可能的问题

        这里分享实际的信息获取结果,对抓取的信息进行综合展示。同时这里简单分享在信息获取过程中可能遇到的问题和解决方案。

1、信息获取成果

        将上述代码运行后,可以在控制中看到以下输出信息:

http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:29.027 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:29.035 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ...
09:42:29.038 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202309.html
09:42:33.634 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler is finished.
09:42:33.635 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
09:42:33.635 [pool-1-thread-3] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
09:42:33.635 [pool-1-thread-1] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler stop.
09:42:33.636 [pool-1-thread-1] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler thread LocalRunData.getUrl interrupted.
finished...

        这里提示,信息抓取完成,同时我们将数据写入到了Excel当中,找到目标文件夹,来看一下实际的效果。

日期天气状况最低气温/最高气温风力风向(夜间/白天)
2024年04月01日小雨 /大雨20℃ / 26℃东南风 1-3级 /南风 1-3级
2024年04月02日大雨 /小雨16℃ / 26℃西风 1-3级 /北风 1-3级
2024年04月03日中雨 /小雨15℃ / 18℃北风 1-3级 /北风 1-3级
2024年04月04日中雨 /小雨13℃ / 15℃西北风 1-3级 /北风 1-3级
2024年04月05日小雨 /小雨13℃ / 16℃西北风 1-3级 /北风 1-3级
2024年04月06日小雨 /小雨14℃ / 16℃北风 1-3级 /北风 1-3级
2024年04月07日小雨 /小雨14℃ / 19℃北风 1-3级 /西北风 1-3级
2024年04月08日多云 /多云15℃ / 24℃北风 1-3级 /北风 1-3级
2024年04月09日多云 /小雨15℃ / 23℃东北风 1-3级 /东风 1-3级
2024年04月10日多云 /小雨17℃ / 22℃东风 1-3级 /东北风 1-3级
2024年04月11日小雨 /小雨18℃ / 21℃北风 1-3级 /北风 1-3级
2024年04月12日阴 /小雨18℃ / 25℃东南风 1-3级 /东南风 1-3级
2024年04月13日中雨 /小雨20℃ / 26℃东南风 1-3级 /南风 1-3级
2024年04月14日小雨 /多云20℃ / 28℃东北风 1-3级 /东南风 1-3级
2024年04月15日小雨 /中雨21℃ / 31℃南风 1-3级 /东南风 1-3级
2024年04月16日暴雨 /中雨20℃ / 26℃西风 1-3级 /西风 1-3级
2024年04月17日小雨 /阴19℃ / 23℃西北风 1-3级 /北风 1-3级
2024年04月18日多云 /小雨19℃ / 27℃东南风 1-3级 /东南风 1-3级
2024年04月19日中雨 /阴18℃ / 24℃东南风 1-3级 /北风 1-3级
2024年04月20日小雨 /小雨19℃ / 24℃北风 1-3级 /西北风 1-3级
2024年04月21日阴 /多云17℃ / 24℃东风 1-3级 /北风 1-3级
2024年04月22日小雨 /阴19℃ / 24℃西北风 1-3级 /西北风 1-3级
2024年04月23日多云 /多云18℃ / 27℃北风 1-3级 /北风 1-3级
2024年04月24日多云 /小雨19℃ / 27℃东北风 1-3级 /东风 1-3级
2024年04月25日中雨 /多云19℃ / 25℃东风 1-3级 /东风 1-3级
2024年04月26日多云 /多云19℃ / 30℃西北风 1-3级 /东南风 1-3级
2024年04月27日中雨 /小雨20℃ / 28℃东北风 1-3级 /西南风 1-3级
2024年04月28日多云 /小雨20℃ / 29℃北风 1-3级 /东北风 1-3级
2024年04月29日中雨 /大雨18℃ / 25℃西风 1-3级 /西北风 1-3级
2024年04月30日小雨 /多云14℃ / 18℃北风 1-3级 /北风 1-3级

        大家可以对比原来的网页地址,可以看到表格获取的信息与网页一致。这里的实例仅提供一个例子,抛砖引玉,大家可以结合自己的实际工作。获取更多的天气信息。

2、关于超时的问题

        XxlCrawler的默认超时时间是5秒(5000ms),即5秒钟内数据没有返回则超时。其定义如下:

private volatile int timeoutMillis = XxlCrawlerConf.TIMEOUT_MILLIS_DEFAULT;     // 超时时间,毫秒

 // timeout default, ms
public static final int TIMEOUT_MILLIS_DEFAULT = 5*1000;

        在默认的情况下,页面经常超时,请求时会报以下的错误:

http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:27.685 [main] INFO com.xuxueli.crawler.rundata.strategy.LocalRunData - >>>>>>>>>>> xxl-crawler addUrl success, link: http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:27.693 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler start ...
11:03:27.695 [pool-1-thread-2] INFO com.xuxueli.crawler.thread.CrawlerThread - >>>>>>>>>>> xxl crawler, process link : http://www.tianqihoubao.com/lishi/changsha/month/202404.html
11:03:32.697 [main] INFO com.xuxueli.crawler.XxlCrawler - >>>>>>>>>>> xxl crawler still running ...
11:03:33.456 [pool-1-thread-2] ERROR com.xuxueli.crawler.util.JsoupUtil - Read timeout
java.net.SocketTimeoutException: Read timeout
	at org.jsoup.internal.ConstrainableInputStream.read(ConstrainableInputStream.java:58)
	at sun.nio.cs.StreamDecoder.readBytes(Unknown Source)
	at sun.nio.cs.StreamDecoder.implRead(Unknown Source)
	at sun.nio.cs.StreamDecoder.read(Unknown Source)
	at java.io.InputStreamReader.read(Unknown Source)
	at java.io.BufferedReader.fill(Unknown Source)
	at java.io.BufferedReader.read1(Unknown Source)
	at java.io.BufferedReader.read(Unknown Source)
	at org.jsoup.parser.CharacterReader.bufferUp(CharacterReader.java:87)
	at org.jsoup.parser.CharacterReader.current(CharacterReader.java:246)
	at org.jsoup.parser.TokeniserState$1.read(TokeniserState.java:12)
	at org.jsoup.parser.Tokeniser.read(Tokeniser.java:62)
	at org.jsoup.parser.TreeBuilder.runParser(TreeBuilder.java:86)
	at org.jsoup.parser.TreeBuilder.parse(TreeBuilder.java:61)
	at org.jsoup.parser.Parser.parseInput(Parser.java:51)
	at org.jsoup.helper.DataUtil.parseInputStream(DataUtil.java:218)
	at org.jsoup.helper.HttpConnection$Response.parse(HttpConnection.java:962)
	at org.jsoup.helper.HttpConnection.get(HttpConnection.java:355)
	at com.xuxueli.crawler.util.JsoupUtil.load(JsoupUtil.java:77)
	at com.xuxueli.crawler.loader.strategy.JsoupPageLoader.load(JsoupPageLoader.java:17)
	at com.xuxueli.crawler.thread.CrawlerThread.processPage(CrawlerThread.java:167)
	at com.xuxueli.crawler.thread.CrawlerThread.run(CrawlerThread.java:84)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
	at java.lang.Thread.run(Unknown Source)

        在网页中验证以下请求时间,请注意打开F12进行页面请求的时间跟踪:

        可以看到页面 ,页面加载大约花了11.93秒,接近12秒。因此其默认的5秒超时设置是不够的。具体的响应时间,请按照大家的实际情况合理设置。把超时时间延长后,就不会出现这个错误了。

四、总结

        以上就是本文的主要内容,本文主要讲解使用Java开发语言,使用XxlCrawler框架进行智能的某城市月度天气抓取实践开发。文章首先介绍目标网站的相关页面及目标数据的元素,然后讲解在信息获取过程的一些参数配置以及问题应对,最后结合实际代码实际抓取一个城市(以长沙为例)某月度天气数据。通过本文,您可以更加了解XxlCrawler的具体使用,知道如何解决页面返回慢的情况下如何通过超时参数来控制数据返回的问题,如果您是气象人,需要气象数据,则可以通过本文来获取想研究的地域的历史天气数据。行文仓促,定有不足之处,欢迎各位专家朋友在评论区中批评指正,万分荣幸。技术人通过自己的技术来解决一点生活问题,技术让生活更美好。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

数据库管理-第194期 网络加速RDMA初探(20240526)

数据库管理194期 2024-05-26 数据库管理-第194期 网络加速RDMA初探&#xff08;20240526&#xff09;1 概念2 发展3 使用总结 数据库管理-第194期 网络加速RDMA初探&#xff08;20240526&#xff09; 作者&#xff1a;胖头鱼的鱼缸&#xff08;尹海文&#xff09; Oracle ACE A…

GCANet去雾算法

目录 1. 引言 2. 门控上下文注意机制&#xff08;GCA&#xff09; 3. 去雾流程 4. 模型代码 5. GCANet的优势 6. 去雾效果 1. 引言 GCANet(Gate-Controlled Attention Network)是一种用于图像去雾的深度学习算法&#xff0c;通过引入注意力机制来改进传统的去雾方法&…

使OpenCV可以读取中文路径图片的方法

一&#xff0e;问题复现 1.代码 #! /usr/bin/env python # -*- coding: utf-8 -*-# File: show_img.pyimport cv2# 读取图片 img cv2.imread("车牌素材/冀A.png")# 显示图片 cv2.imshow("img", img) cv2.waitKey(0)2.报错截图 3.报错内容 [ WARN:00.05…

简单好用的文本识别方法--付费的好用,免费的更有性价比

文章目录 先说付费的进入真题&#xff0c;免费的来喏&#xff01;PixPin微信 先说付费的 直达网址!!! 进入真题&#xff0c;免费的来喏&#xff01; PixPin 商店里就有 使用示例&#xff1a; 可以看到&#xff1a;贴在桌面上的图片可以复制图片中的文字&#xff0c;真的很…

第一篇【传奇开心果系列】Python的跨平台开发工具beeware技术点案例示例:使用beeware实现跨平台开发,从hello world开始

传奇开心果博文系列 系列博文目录Python的跨平台开发工具beeware技术点案例示例系列 博文目录前言一、BeeWare套件主要功能介绍二、Toga相对于其他Python UI库具有的优势介绍三、使用toga开发安卓手机应用hello world步骤和示例代码四、使用toga写一个iOS 苹果手机应用hello wo…

红蓝对抗-HW红蓝队基本知识(网络安全学习路线笔记)

第一, 什么是蓝队 蓝队&#xff0c;一般是指网络实战攻防演习中的攻击一方。 蓝队一般会采用针对目标单位的从业人员&#xff0c;以及目标系统所在网络内的软件、硬件设备同时执行多角度、全方位、对抗性的混合式模拟攻击手段&#xff1b;通过技术手段实现系统提权、控制业务、…

高速数据采集与传输(一):ADC08D500调研

前言&#xff1a;高速ADC数据采集的应用和开发&#xff0c;涉及的技术面非常的广泛&#xff0c;后续阶段博主将尝试以纯项目开发的形式做一次专题技术分享&#xff0c;将基于高速数据采集的相关内容进行一系列的技术文档更新。博主全凭兴趣在更新和总结&#xff0c;很难做到一直…

unity开发Hololens 制作滑动框

一定要做到最后一步&#xff0c;才会有效果 1、创建空物体 ,并添加组件 创建空物体 命名ScrollingObjectCollection&#xff0c; 添加组件如下图 下面是各个组件展开的内容 2、在ScrollingObjectCollection 下面创建两个空物体&#xff0c;分别命名Container、Clipping…

[AI Google] 介绍 VideoFX,以及 ImageFX 和 MusicFX 的新功能

VideoFX 是来自 labs.google 的最新实验&#xff0c;您可以查看音乐效果和图像效果的新更新&#xff0c;现在在 110 多个国家可用。 生成式媒体正在改变人们构思创意并增强我们的创造力能力的方式。我们致力于与创作者和艺术家合作构建人工智能&#xff0c;以更好地理解这些生成…

C++第三方库 【HTTP/HTTPS】— httplib库

目录 认识httplib库 安装httplib库 httplib的使用 httplib请求类 httplib响应类 Server类 Client类 httplib库搭建简单服务器&客户端 认识httplib库 httplib库&#xff0c;是一个C11单头文件的&#xff0c;轻量级的跨平台HTTP/HTTPS库&#xff0c;可以用来创建简单的…

软件设计师干货资料分享

从2月份备考&#xff0c;到5月份结束&#xff0c;满打满算四个月准备时间。在此我想提醒一句&#xff0c;世界上没有什么不劳而获的事情&#xff0c;never&#xff0c;只要你是一个普通人&#xff0c;但凡你想索取一些什么&#xff0c;无一例外你都需要付出&#xff0c;而且是踏…

【每日力扣】84. 柱状图中最大的矩形 与 295. 数据流的中位数

&#x1f525; 个人主页: 黑洞晓威 &#x1f600;你不必等到非常厉害&#xff0c;才敢开始&#xff0c;你需要开始&#xff0c;才会变的非常厉害 84. 柱状图中最大的矩形 给定 n 个非负整数&#xff0c;用来表示柱状图中各个柱子的高度。每个柱子彼此相邻&#xff0c;且宽度为…

Linux操作指令大全

目录 &#x1f349;引言 &#x1f349; 基础命令 &#x1f348;pwd &#x1f348;cd &#x1f348;ls &#x1f348;mkdir &#x1f348;rmdir &#x1f348;cp &#x1f348;mv &#x1f348;rm &#x1f349; 文件操作命令 &#x1f348;cat &#x1f348;tac …

CentOS 7.9安装NVIDIA P40显卡驱动、CUDA和cuDNN

文章目录 1、安装P40显卡驱动1.1 查看机器上有哪些显卡1.2 禁用nouveau1.3 安装依赖1.4 安装驱动 2、安装CUDA2.1 安装2.2 测试是否安装成功 3、安装cuDNN3.1 安装3.2 测试是否安装成功 4、总结 1、安装P40显卡驱动 1.1 查看机器上有哪些显卡 lspci | grep -i vga lspci | gr…

《欢乐钓鱼大师》辅助:新手钓鱼全新攻略大全!

《欢乐钓鱼大师》是一款充满趣味和挑战的钓鱼游戏。在游戏中&#xff0c;玩家不仅可以体验钓鱼的乐趣&#xff0c;还可以通过不同的钓鱼竿和鱼卡来提升自己的钓鱼技能。为了帮助新手和老玩家更好地体验游戏&#xff0c;本文将为您提供详细的游戏攻略。 1. 游戏目标 在《欢乐钓…

2024年蓝桥杯Web开发【大赛大纲】15届

一、 组别 Web应用开发分为&#xff1a;大学组和职业院校组。 每位选手只能申请参加其中一个组别的竞赛。各个组别单独评奖。 研究生和本科生只能报大学组。 其它高职高专院校可自行选择报任意组别。 二. 竞赛赛程 省赛时长&#xff1a;4小时。 决赛时长&#xff1a;4小…

c语言——宏offsetof

1.介绍 &#xff01;&#xff01;&#xff01; offsetof 是一个宏 2.使用举例 结构体章节的计算结构体占多少字节需要先掌握&#xff08;本人博客结构体篇章中已经讲解过&#xff09; 计算结构体中某变量相对于首地址的偏移&#xff0c;并给出说明 首先&#xff0c;结构体首个…

SpringBoot项目中redis序列化和反序列化LocalDateTime失败

实体类中包含了LocalDateTime 类型的属性&#xff0c;把实体类数据存入Redis后变成这样&#xff1a; 此时&#xff0c;存入redis不会报错&#xff0c;但是从redis获取的时候&#xff0c;会报错&#xff1a; com.fasterxml.jackson.databind.exc.InvalidDefinitionException: Ca…

[7] CUDA之常量内存与纹理内存

CUDA之常量内存与纹理内存 1. 常量内存 NVIDIA GPU卡从逻辑上对用户提供了 64KB 的常量内存空间&#xff0c;可以用来存储内核执行期间所需要的恒定数据常量内存对一些特定情况下的小数据量的访问具有相比全局内存的额外优势&#xff0c;使用常量内存也一定程序上减少了对全局…

项目日记(1): boost搜索引擎

目录 1. 项目相关背景 2. 搜索引擎的相关宏原理 3. 搜索引擎的技术栈和项目环境 4. 正排索引, 倒排索引, 搜索引擎具体原理 5. 编写数据去标签化和数据清洗的模块parser(解析器). 1.项目相关背景 百度, 搜狗, 360等都有搜索引擎, 但是都是全网的搜索; boost是进行站内搜索…