自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(414)
  • 问答 (6)
  • 收藏
  • 关注

原创 RabbitMQ——死信队列和延迟队列

延迟队列是一种消息队列中的一种特殊类型,它允许消息在一定的延迟时间后再被消费。死信队列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一种重要特性,用于处理无法被消费的消息,防止消息丢失。生产者发送消息到正常队列,而消费者负责消费正常队列的消息。当消息被消费者拒绝并不再重新投递时,消息会被发送到死信队列。在消息队列中,当消息满足一定条件而无法被正常消费时,这些消息会被发送到死信队列。1、把下载好的插件从服务器拷贝到 RabbitMQ 容器内plugins目录。2、进入容器查看插件。

2024-03-17 12:12:11 1072

原创 RabbitMQ——死信队列

死信队列(Dead Letter Queue,DLQ)是 RabbitMQ 中的一种重要特性,用于处理无法被消费的消息,防止消息丢失。生产者发送消息到正常队列,而消费者负责消费正常队列的消息。当消息被消费者拒绝并不再重新投递时,消息会被发送到死信队列。在消息队列中,当消息满足一定条件而无法被正常消费时,这些消息会被发送到死信队列。

2024-03-10 10:06:49 722

原创 RabbitMQ——发布确认模式

单条发布确认(Single Publisher Confirm)是最基本的确认模式,在发布一条消息后,等待服务器确认该消息是否成功接收。异步确认是一种更灵活的确认方式,通过回调函数处理消息的确认和未确认事件。缺点:当一批消息中有一条消息发送失败时,整个批量确认失败,可能需要重新发送整批消息且不知道是哪条消息失败。批量发布确认模式允许在一次性确认多个消息是否成功被服务器接收,这在大量消息的场景中可以提高效率。RabbitMQ 发布确认模式的三种形式:单条确认、批量确认和异步确认。

2024-03-02 13:36:12 453

原创 RabbitMQ——消息应答和持久化

在这种模式下,消息会按顺序逐个发送给消费者。在自动应答模式下,一旦消息被消费者接收,RabbitMQ 会立即将消息标记为已被消费,而不需要消费者明确地向 RabbitMQ 发送确认。在手动应答模式下,消费者在处理完消息之后,需要向 RabbitMQ 发送明确的确认信号,告诉 RabbitMQ 可以安全地删除这条消息了。这种模式下,消息被认为已经成功处理,即使消费者在处理消息的过程中发生错误,消息也会从队列中删除。适用场景:对消息的可靠性传递有较高要求,需要在消息处理成功后才确认消息,以避免消息丢失。

2024-02-25 21:39:11 1554 2

原创 ElasticSearch——Docker安装ElasticSearch和Kibana

说明:由于是用docker安装,所以要确保已安装docker并docker环境可用。docker安装步骤:https://wanli.blog.csdn.net/article/details/121445768。

2023-05-28 11:23:31 1544

原创 CompletableFuture的使用

并行,并发并发:一个实体上,多个任务有序执行并行:多个实体上,多个任务同时执行用户线程用户线程是系统的工作线程,会完成程序需要完成的业务操作守护线程是一种特殊的线程,为其他线程服务的,在后台默默的完成一些系统性的服务,如GC线程;如果用户线程全部结束,意味着程序需要完成的业务操作已经结束了,守护线程就没有必要继续运行了。所以当系统只剩下守护线程的时候,java虚拟机会自动退出。

2023-02-07 17:50:52 985 1

原创 STL常用算法——算术生成算法和集合算法

fill_n()函数: 则以给定的迭代器为起始位置,将容器中指定数量(小于容器大小)的元素设置为给定的值。set_intersection()函数:求两个容器元素的交集。set_difference()函数:求两个容器元素的差集。set_union返回值是并集中最后一个元素的位置。set_union()函数:求两个容器元素的并集。fill()函数:向整个容器中填充指定的元素。目标容器开辟的空间需要从两个源容器中取小值。求交集的两个容器必须是有序的。求并集的两个容器必须是有序的。两个容器必须是有序的。

2022-11-01 10:29:10 489

原创 STL常用算法——拷贝和替换算法

replace_if()函数:将容器区间内所有满足条件的元素替换成指定元素。replace()函数:用新的值来替换容器内和给定值相匹配的元素。copy()函数:将源容器内指定范围的元素拷贝到目的容器中。copy_n():从源容器中复制指定个数的元素到目的容器中。swap()函数:交换两个容器中的元素。交换的容器必须是同种类型。

2022-10-31 17:00:15 437

原创 STL常用算法——排序算法

合并排序,merge() 函数用于将 2 个有序序列合并为 1 个有序容器,前提是这 2 个有序容器的排序规则相同(要么都是升序,要么都是降序)。并且最终借助该函数获得的新有序容器,其排序规则也和这 2 个有序容器要相同。sort() 函数在对自定义的类对象实现排序时,需要在该类的内部提供移动构造函数和移动赋值运算符。sort():对容器或普通数组中范围内的元素进行排序,默认进行升序排序,也可以自定义排序规则。reverse()函数:将容器指定范围内的元素进行反转。函数原型:该函数有以下两种格式。

2022-10-31 15:20:01 1126

原创 STL常用算法——查找算法

find() 函数会返回一个输入迭代器,当 find() 函数查找到目标元素时,其指向查找到的第一个目标元素位置迭代器;adjacent_find()函数会返回一个迭代器,当查找成功时,该迭代器指向的是连续相等元素的第 1 个元素;和find() 函数不同的是,find() 函数需要明确指定要查找的元素的值,而find_if() 允许自定义条件来查找元素。find_if_not() 函数和 find_if() 函数的功能恰好相反,用于查找第一个不符合查找规则的目标元素。函数原型:该函数有以下两种语法格式。

2022-10-31 11:15:10 548

原创 STL常用算法——遍历算法

ransform() 可以将函数应用到容器的元素上,并将这个函数返回的值保存到另一个容器中,它返回的迭代器指向输出容器所保存的最后一个元素的下一个位置。for_each:遍历容器,对容器中的每一个元素调用函数或函数对象。

2022-10-28 16:57:45 423

原创 STL常用容器——map容器的使用

map容器是存储pair 类型键值对( pair 类模板创建的 pair 对象)的关联式容器。pair 键值对(pair):键值对中第一个元素为key(键),起查找作用,第二个元素为value(值)。使用 map 容器存储的各个键值对,键的值既不能重复也不能被修改。在使用 map 容器存储多个键值对时,默认情况下会自动根据各键值对的键的大小,对所有键值对做升序排序。

2022-10-25 16:29:18 2207

原创 STL常用容器——set容器的使用

set容器底层结构是用二叉树实现的。set容器会自动根据键的大小对存储的键值对进行排序,根据 key 排序,也就等价为根据 value 排序。set 容器中每个键都是唯一的,可以插入或删除但不能修改,因为修改很有可能破坏 set 容器中元素的有序性。最正确的修改 set 容器中元素值的做法是:先删除该元素,然后再添加一个修改后的元素。

2022-10-24 17:24:34 2171 1

原创 STL常用容器—— list 容器的使用

list容器简介list 容器:又称双向链表容器,该容器的底层是以双向链表的形式实现的,因此可以高效地进行元素的插入和删除操作。双向链表可以将链表里的元素存储在不同且不相关的内存位置,所以list 容器中的元素可以是分散存储在内存空间里的,而不是必须存储在一整块连续的内存空间中。在双向链表的任何位置插入或删除元素时间复杂度为都为O(1);list 容器移动元素的效率也比其它容器高。list容器底层实现。

2022-10-21 15:58:31 1211

原创 STL常用容器——queue容器的使用

queue容器简介queue是一种先进先出(FIFO)的数据结构,因此queue容器又称队列容器。queue容器有 2 个开口,其中一个开口专门用来输入元素,另一个专门用来输出元素。队列中只有队头和队尾才可以被外界使用,只能在队列容器的末尾添加新元素,只能从头部移除元素。队列中进数据称为 — 入队 push。队列中出数据称为 — 出队 pop。queue容器特点queue容器内的元素进出都必须符合 “先进先出” 的策略。

2022-10-20 16:26:27 1070 4

原创 STL常用容器——stack容器的使用

stack容器简介stack容器是堆栈容器,该容器具有先进后出的特性;使用stack容器需要引入头文件;stack容器只允许在容器的栈顶进行插入或删除操作;stack容器不允许有遍历行为,也不提供迭代器;有元素入栈的操作称为:push;将元素出栈的操作称为:pop栈的相关概念栈顶(Top):栈允许进行插入和删除操作的一端;栈底(Bottom):栈固定并且不允许进行插入和删除操作的一端;空栈:不含有任何元素的空栈。

2022-10-19 17:49:54 678 1

原创 STL常用容器——deque容器的使用

deque容器介绍deque(double-ended queue):双端队列容器。deque 容器适用于在序列头部和尾部添加或删除元素(时间复杂度为O(1)),而不适用于在序列中间添加或删除元素,当需要向序列两端频繁的添加或删除元素时,使用 deque 容器效率高。deque 容器也可以根据需要修改自身的容量和大小。deque 容器中存储元素并不能保证所有元素都存储到连续的内存空间中。deque容器和vector容器的区别。

2022-10-19 16:26:12 556

原创 STL常用容器——vector容器的使用

重新指定容器的长度为num,若容器长度变长,则以elem值填充新位置;如果容器长度变短,则超出容器长度的末尾元素要被删除。vector 实现的是一个动态数组,可以动态扩展,即可以进行元素的插入和删除,在此过程中,vector 会动态调整所占用的内存空间。将v[begin(),end())区间中的元素拷贝给本身。

2022-10-07 16:12:58 773 1

原创 STL常用容器——String容器的使用

替换从pos开始的n个字符为字符串s。

2022-09-30 10:40:35 423

原创 STL技术——STL概述和入门

STL介绍STL( standard template library),译为标准模板库或者泛型库,是 C++ 提供的一个基础模板的集合。STL 已完全被内置到支持 C++ 的编译器中,不用另外安装。STL广义上可以分为:容器container(本质上就是封装有数据结构的模板类)、算法algorithm、迭代器iterator;容器和算法之间通过迭代器无缝连接。

2022-09-29 11:24:42 4178 2

原创 C++核心编程

c++程序执行时将内存大致分为4个区域c++内存模型图如下:​代码区特点共享的:对于频繁执行的程序,在内存中只要有一份代码即可只读的:防止系统意外修改它的指令全局区特点该区域的数据,在程序结束后由操作系统释放栈区特点由编译器自动编译释放,存放函数的参数值,局部变量等注意事项:栈区编译的数据执行完后由编译器自动释放,不要返回局部变量的地址堆区特点由程序员分配释放,若程序员不释放,程序结束时由操作系统回收在c++中主要通过new关键字在堆区开辟内存new 和delete关键字。

2022-09-23 14:44:15 2037

原创 解决CLion的 CMake executable not found:XXX

连接成功后点击ok后Clion就能连接上远程服务器,然后等Clion重新编译完就可以进行debug了。原因是 clion 没有连接上远程服务器上的cmake,先检查cmake的连接情况:发现连接失败。输入后点击Test Connection:连接成功。

2022-09-06 14:15:59 2362

原创 C++基础入门

变量和常量,关键字,数据类型,流程控制,数组,函数,指针,结构体

2022-09-01 11:46:17 465 1

原创 Python爬虫——Scrapy框架使用实例及执行过程

Selector(选择器):Scrapy 提供的数据提取方法,Selector 基于 lxml ,支持 XPath 选择器、CSS 选择器以及正则表达式,功能全面,解析速度和准确度非常高。要访问的域名:https://gz.58.com/sou/?extract_first():提取selector列表中的第1个文本内容。scrapy项目名:scrapy_02_tc。...

2022-08-26 17:42:40 1552

原创 Python爬虫——Scrapy 的基本使用

parse():解析的方法,解析返回的响应、提取数据或者进一步生成要处理的请求;创建成功,项目文件如下:Scrapy 框架将整个爬虫项目分成了不同的模块,其中每个模块负责处理不同的工作,而且模块之间紧密联系。allowed_domains:允许访问的域名,如果后续请求中的域名不是这个域名或不是这个域名的子级域名,则请求会被过滤掉。name:爬虫文件的名字,必须是唯一的,用于运行爬虫和区分不同的爬虫。start_urls,初始的url地址,爬虫在启动时访问的域名。第一个参数是 python爬虫文件的名称。

2022-08-25 14:41:42 4404 1

原创 Python爬虫——Scrapy 简介和安装

Scrapy 简介Scrapy 是一个基于 Twisted实现的专业的、高效的异步处理爬虫框架,Scrapy 框架用纯Python实现。Twisted:一个采用 Python 实现的基于事件驱动的网络引擎框架,用 Twisted 来处理网络通讯可以加快我们的下载速度,不用自己去实现异步框架。Scrapy 框架用途非常广泛,可以提取网站数据、网络监测以及自动化测试等,Scrapy 也可以根据自己需求所需要的数据进行定制。

2022-08-22 17:25:19 1076

原创 Python爬虫——使用requests请求登录

使用代理 IP 时会隐藏了本地网络的真实 IP,让第三方 IP 代替自己去访问网站,避免真实IP被网站封杀,代理 IP 可以通过端口探测技术被识别出来。通过构建代理 IP 池,从 IP 池中随机选择一个 IP 去访问网站,而不使用固定的真实 IP,让爬虫程序更加稳定。注意:通过使用session让请求之间保持状态,而保证了下载的验证码和登录时的验证码是同一个验证码。快代理 https://free.kuaidaili.com/free/齐云代理 https://proxy.ip3366.net/free/

2022-08-22 15:23:36 1149

原创 Python爬虫——Requests 的Get和Post请求

方法:requests.post(),通过POST请求访问一个页面,对应于 HTTP 的 POST方法。方法:requests.get(),通过GET请求访问一个页面,对应于 HTTP 的 GET 方法。执行结果:返回json数据。

2022-08-19 14:27:45 3023

原创 Python爬虫——Requests 库基本使用

Requests 库简介Requests 库是在 urllib 模块的基础上开发而来,继承了urllib.request的所有特性。Requests 采用了 Apache2 Licensed(一种开源协议)的 HTTP 库,支持HTTP连接保持和连接池,支持使用cookie保持会话,支持文件上传,支持自动确定响应内容的编码,支持国际化的URL和POST数据自动编码。与urllib.request 相比,Requests 在使用时更加简洁方便、快捷,所以 Requests 库在编写爬虫程序时使用较多。....

2022-08-19 09:53:21 1679 1

原创 Python爬虫——PhantomJS的使用和handless

Chrome handless 模式:由于新版本的 selenium 已经弃用 PhantomJs,PhantomJs也停止了更新和维护,所以推荐使用谷歌的Chrome handless模式(无头模式),这是一款无界面的谷歌浏览器,可以让使用者在不打开UI界面的情况下使用Chrome浏览器,并且运行效果与真实的Chrome浏览器一样,但是性能更高。PhantomJS 的使用。handless 使用实例。PhantomJS 简介。PhantomJS 下载。......

2022-08-17 10:55:56 1466

原创 Python爬虫——Selenium 浏览器交互与异常处理

在使用Selenium的时候,可能会遇到一些异常,例如超时(TimeoutException)、节点未找到(NoSuchElementException)等。为了让程序不停止运行我们可以使用 try except 语句来捕获各种异常,对异常进行处理。click() 方法是Selenium WebDriver提供的操作鼠标的方法,其作用是单击已经定位到的节点。Selenium 可以控制浏览器执行想要的动作,如前进、后退、点击、刷新、输入文本等。double_click(),其作用是双击已经定位到的节点。...

2022-08-15 17:49:42 632

原创 Python爬虫——Selenium 定位节点及获取节点信息

当我们想要操作一个节点时,必须先找到这个节点,通过 Selenium 提供的定位节点的方法可以获取到想要的节点,获取节点后可以选择是执行下一步动作(如填充表单、模拟点击等)还是提取数据。Selenium 4 之前使用 find_element_by_*() 方法定位节点,Selenium 4之后使用 find_element()方法。如果要查找所有符合条件的标签,需要用 find_elements,find_elements 的返回值是列表类型,可以用for循环遍历里面的节点。......

2022-08-12 10:46:13 4804 1

原创 Python爬虫——Selenium 简介和下载

Selenium 是一个用于测试 Web 应用程序的自动化测试工具,最初是为网站自动化测试而开发的。它支持多种平台:Windows、Linux、Mac,支持多种语言:Python、Perl、PHP、C# 等。Selenium 实现了很多自动化功能,比如检测软件与浏览器兼容性,软件自动化测试,生成不同语言的测试脚本,自动录制、以及自动化爬虫等。Selenium 直接运行在浏览器中,就像真正的用户在操作一样。...

2022-08-10 17:53:08 4041

原创 Python爬虫——BautifulSoup 节点信息

用get_text()获取span标签的文本内容,因为span标签没有子孙节点,所以只返回span标签的文本内容;待解析的html文本文件如下:id为al的p标签有子孙节点,id为bl的span标签没有子孙节点。string获取span标签的文本内容,因为span标签没有子孙节点,所以可以返回文本内容;用string获取p标签的文本内容,因为p标签有子孙节点,所以返回None;get_text()获取p标签的文本内容,返回p标签及子孙节点中的文本内容;使用实例2:对span标签进行解析,打印里面的内容。..

2022-08-08 15:38:30 1570

原创 Python爬虫——BautifulSoup 常用函数的使用

向BeautifulSoup 的select() 函数中传入CSS 选择器作为参数,就可以在 HTML 文档中检索到与之对应的内容,返回类型为列表类型。find_all() 函数(常用):搜索当前标签的所有子节点,并判断这些节点是否符合过滤条件,将所有符合条件的结果以列表形式返回。find_all() 函数的返回结果类型是列表类型,find() 函数返回的结果是找到的第一个节点。find() 函数:搜索当前标签的所有子节点,返回一个符合过滤条件的结果。text:标签的文本内容去匹配,而不是标签的属性。...

2022-08-05 16:09:54 2259

原创 Python爬虫——BS4解析方式简介

BautifulSoup简介BeautifulSoup简称BS4(其中4表示版本号4.x,之前的版本已经停止开发),是一个可以快速从HTML或XML文件中提取数据的第三方Python库。BeautifulSoup能够将HTML或XML转化为可定位的树形结构,并且提供一些简单的、python式的函数用来处理导航、查找、修改功能,缺点解析器解析器使用方法优点缺点Python标准库BeautifulSoup(html文件,“html.parser”)...

2022-08-01 11:51:28 540

原创 Python爬虫——JsonPath解析方式

并且JSONPath提供多种语言实现版本,包括JavaScript、Python、PHP和Java。JSONPath表达式始终引用JSON结构,就像XPath表达式与XML/HTML文档结合使用一样。

2022-07-29 15:29:11 1411

原创 Python爬虫——XPath的使用

可以用xpath插件来动态的获取xpath路径(将鼠标悬停在需要选取的文本数据上,然后按下shift按键就会自动出现定位该文本的Xpath表达式,然后再根据需求对表达式修改。先发送请求访问网站,得到网站源码,然后解析网站源码,从网站源码中使用xpath表达式定位到需要下载的图片地址,然后用urllib.request.urlretrieve()方法下载。4、调用xpath路径,提取数据,xpath的返回数据是列表类型。2、发送请求访问网站,得到服务器响应的页面源码。使用实例二从网站上下载图片。.......

2022-07-29 09:50:49 8174 1

原创 Python爬虫——XPath解析本地html文件

XPathXML路径语言(XMLPathLanguage),XPath作用是确定XML文档中某部分的位置,同时它也可以用于检索HTML文件。在使用爬虫过程中可以用XPath来爬取网页中想要的数据。Xpath使用简洁的路径表达式来匹配XML/HTML文档中的节点或者节点集,通过定位网页中的节点,从而找到我们需要的数据。Xpath提供了100多个内建函数,包括了处理字符串、数值、日期以及时间的函数。因此Xpath路径表达式几乎可以匹配所有的元素节点。......

2022-07-26 10:41:49 6204 1

原创 Python爬虫——代理和代理池

因此,我们一般都会建立一个代理,定期更换一个代理,即使这个IP被封了,也可以换另一个IP。使用User-Agent(用户代理)池,能够避免总是使用一个User-Agent来访问网站,因为短时间内总使用同一个User-Agent高频率访问的网站,可能会引起网站的警觉,从而屏蔽掉IP。代理池就是自己去收集网上的可用免费代理ip,自建自己的ip代理池。补充User-Agent(用户代理)池,类似IP代理池,就是把多个浏览器的User-Agent数据放入列表中,然后再从中随机选择一个来使用。.........

2022-07-15 10:10:17 10360 1

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除