自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长之路

不想成为架构师的程序员不是一个合格的程序员

  • 博客(107)
  • 资源 (5)
  • 收藏
  • 关注

原创 解锁业务灵活性:RuleGo规则引擎的高效解耦与实时响应秘籍

随着项目逐渐发展,业务和代码量越来越多,耦合严重,层次混乱,难以维护和扩展,系统与系统之间公共代码无法复用,也无法进行高效便捷的联动。另外某些业务场景高度定制化或者经常变动,需要频繁修改代码和重启系统,影响开发效率和用户体验。为了解决这个问题,RuleGo​**** 作为一个为解耦逻辑、可实时响应需求的规则引擎应运而生。规则链是 RuleGo 的核心概念,它是由多个规则节点组成的有向无环图,每个规则节点都是一个组件,可以实现不同的业务逻辑,节点与节点通过关系类型(relation type)进行连接。

2024-02-24 13:18:44 179

原创 POP3协议详解

POP3是一种用于从邮件服务器获取电子邮件的协议。它允许邮件客户端连接到邮件服务器,检索服务器上存储的邮件,并将邮件下载到客户端设备上。

2023-12-23 17:04:14 1761 1

原创 ffprobe学习

使用ffprobe非常简单。从输出中可以看到,ffprobe提供了大量关于视频的高级信息。它告诉你你的视频包含多少流,视频和音频流的数量,编解码细节,帧率,持续时间等。记住,这些信息是非常高级的,在以后的部分中,我们将学习如何更深入地使用ffprobe获取框架级别的信息。

2023-05-23 19:58:14 726

原创 Ubuntu编译OBS

【代码】Ubuntu编译OBS。

2023-05-23 19:54:28 331

原创 ffmpeg6.0静态编译之Ubuntu系统

【代码】ffmpeg6.0静态编译之Ubuntu系统。

2023-05-07 23:44:30 478 1

原创 kratos学习(二) kratos配置

微服务或者说云原生应用的配置最佳实践是将配置文件和应用代码分开管理——不将配置文件放入代码仓库,也不打包进容器镜像,而是在服务运行时,把配置文件挂载进去或者直接从配置中心加载。Kratos的config组件就是用来帮助应用从各种配置源加载配置。

2023-05-07 23:39:12 1077

原创 kratos学习(一)

kratos-layout 项目中对 proto 文件进行了版本划分,放在了 v1 子目录下。

2023-05-07 23:36:47 470

原创 Go Fuzzing:发现你未曾发现的漏洞

Go fuzzing正式成为Go的“一等公民”,Go原生支持Fuzzing。我们可以利用fuzzing发现bug和安全问题。

2023-04-24 20:12:30 911 2

原创 Go内置序列化库 - gob

Gob 是Go语言自己以二进制形式序列化和反序列化程序数据的格式,可以在 encoding 包中找到。这种格式的数据简称为 Gob(即 Go binary 的缩写)。类似于 Python 的“pickle”和 Java 的“Serialization”。Gob 和 JSON 的 pack 之类的方法一样,由发送端使用对数据结构进行编码。在接收端收到消息之后,接收端使用将序列化的数据变化成本地变量。Gob典型应用就是在标准库的net/rpc中。​gob。

2023-04-24 20:10:03 561

原创 代码生成利器 - Go Generate

​​ 命令是一个用于自动化生成Go代码的工具。它可以在Go源文件中的特殊注释中指定命令,然后在运行​ 命令时自动执行这些命令。这些命令可以用来生成代码、格式化代码、运行测试等等。在Go 1.4版本中,​ 命令首次发布,它的目的是为了解决Go语言中的一些重复性工作。自从发布以来,它已经成为了一个非常受欢迎的工具,广泛应用于Go语言的开发中。​​ 命令是一个非常有用的工具,它可以帮助我们自动化地生成代码。在本文中,我们介绍了如何在Go源代码中使用​ 命令,并提供了一些示例来说明它的用法。使用。

2023-04-24 20:07:16 3334

原创 Linux性能优化(一)

作为一个完美主义者,一学起原理类的东西,真的不要太容易跑偏😂经常是看着某个重要原理,就想着找找看相关内容,然后就各种跳转搜索,以前最开始学数据结构的定义,都能跑到编译原理上,最后开始计算二进制了。比如,当遇到 I/O 性能问题时,可以参考图片最下方的 I/O 子系统,使用 iostat、iotop、blktrace 等工具分析磁盘 I/O 的瓶颈。第 5 个综合实战模块,还原真实的工作场景,手把手带你在“高级战场”中演练,这样你能把前面学到的所有知识融会贯通,并且看完专栏,马上就能用在工作中。

2023-04-18 21:50:53 459

原创 Go分布式爬虫(二十五)

轮到我们就餐时,我们占据了一个座位,也就是占据了一个令牌,这时我们就可以开吃了。令牌桶算法的原理很简单,我们可以想象这样一个场景,你去海底捞吃饭,里面只有 10 个座位,我们可以将这 10 个座位看作是桶的容量。现在,由于座位已经满了,服务员就帮我们叫了个号,我们随即进入到了等待的状态。有时候我们还会有一些更复杂的需求,例如有多层限速器的需求(细粒度限速器限制每秒的请求,粗粒度限速器限制每分钟、每小时或每天的请求)。到这里,我们就不再需要在爬取数据时固定休眠了,只要使用限速器来控制速度的就可以了。

2023-04-17 21:33:38 732

原创 Go分布式爬虫(二十四)

不过我们还需要完成一轮抽象,因为后端引擎会处理的事务比较繁琐,它不仅仅包含了存储,还包含了缓存、对表头的拼接、数据的处理等。所以,我们要创建一个更加底层的模块,只进行数据的存储。爬虫项目的一个重要的环节就是把最终的数据持久化存储起来,数据可能会被存储到 MySQL、MongoDB、Kafka、Excel 等多种数据库、中间件或者是文件中。创建了一个接口 Storage 作为数据存储的接口,Storage 中包含了 Save 方法,任何实现了 Save 方法的后端引擎都可以存储数据。

2023-04-16 22:39:44 1594

原创 Go分布式爬虫笔记(二十三)

我们在 Task 中加入了 Name 字段,将其作为一个任务唯一的标识。Task 里除了之前具有的最大深度、等待时间等属性,我们还加入了Rule, 规则条件中 Root 生成了初始化的爬虫任务。Trunk 为爬虫任务中的所有规则。// 一个任务实例, type Task struct {Name string // 用户界面显示的名称(应保证唯一性) Url string Cookie string WaitTime time . Duration。

2023-04-15 11:06:48 755

原创 Go分布式爬虫笔记(二十二)

以我们之前写好的 ParseURL 函数为例,在添加下一层的 URL 时,我们将 Depth 加 1,这样就标识了下一层的深度。我们之前的 Request 结构体会在每一次请求时发生变化,但是我们希望有一个字段能够表示一整个网站的爬取任务,因此我们需要抽离出一个新的结构。随机生成 User-Agent 的逻辑位于 extensions/randomua.go 中,里面枚举了不同型号的浏览器和不同型号的版本,并且通过排列组合产生了不同的 User-Agent。最后一步,我们在爬取新的网页之前,判断最大深度。

2023-04-14 08:29:57 1023

原创 Go分布式爬虫笔记(二十一)

Go 语言中的负载因子为 6.5,当哈希表负载因子的大小超过 6.5 时,Map 就会扩容,变为旧表的两倍。当进行 Map 的 delete 函数时,delete 函数会根据 Key 找到指定的桶,如果存在指定的 Key,那么就释放掉 Key 与 Value 引用的内存。试想一下,如果桶的数量只有 1 个,这个时候负载因子到达最大,搜索就和遍历数组一样了,它的复杂度为 o(n)。我们看下面的例子,bar 执行了 append 函数之后,最终也修改了 foo 的最后一个元素,这是一个在实践中非常常见的陷阱。

2023-04-13 19:24:05 875

原创 Go分布式爬虫笔记(二十)

如果之后有协程读取数据,那么读取协程会立即读取 sendq 队列中第一个等待的协程,并将该协程对应的元素拷贝到读取协程中,同时调用 goready 唤醒写入协程,将写入协程放入到可运行队列中等待被调度器调度。如果 select 找不到准备就绪的通道,这时和单个协程的堵塞一样,它会将当前协程放入到所有通道的等待队列中,并陷入到休眠状态。而对于带缓冲区的通道来说,假设缓存队列的数量为 N,那么如果写入的数据量不大于 N,写入协程就不会陷入到休眠状态,所有数据都会存储在缓冲队列中。第三部分涉及到协程的唤醒。

2023-04-12 20:35:32 1696 4

原创 Go分布式爬虫笔记(十九) 4月Day3

以下图中的拓扑结构为例,节点 A 标识的是爬取的初始网站,在网站 A 中,有 B、C 两个链接需要爬取,以此类推。查找完之后,再是 C、F,最后是 G。如果我们现在只知道每门课程的前序课程,不清楚完整的学习路径,我们要怎么设计这一系列课程学习的顺序,确保我们在学习任意一门课程的时候,都已经学完了它的前序课程呢?查看 HTML 文本的规则会发现,正本包含在xxxx当中,所以我们可以用正则表达式这样书写规则函数,意思是当发现正文中有对应的文字,就将当前帖子的 URL 写入到 Items 当中。

2023-04-05 23:01:47 946 1

原创 Go分布式爬虫笔记(十八) 4月Day2

条件: 当两个以上协程同时访问相同的内存空间,并且至少有一个写操作时问题解决方法AddInt64函数将变量增加了 1CompareAndSwap: 它能够对比并替换元素值下面这个例子中,atomic.CompareAndSwapInt64 会判断 flag 变量的值是否为 0,如果是,则将 flag 的值设置为 1。这一系列操作都是原子性的,不会发生数据争用,也不会出现内存操作乱序问题。通过 sync/atomic 包中的原子操作,我们能构建起一种自旋锁,只有获取该锁,才能执行区域中的代码。下面这段

2023-04-03 20:06:59 397

原创 Go分布式爬虫笔记(十七) 4月Day1

我们知道,Go 语言比较容易开发高并发的程序,这得益于 Go 语言在线程之上创建了更轻量级的协程 G。相比于线程,协程在时间和空间上都有明显的优势。同时,Go 运行时抽象出了逻辑处理器 P 和代表线程的 M,P 与 M 一一绑定。借助 M 中特殊的协程 g0,Go 运行时能够完成对于协程公平并且高效的调度。协程一般是被动调度的,当它陷入堵塞后,会主动让渡自己的执行权利,这和操作系统通常强制执行线程的上下文有所不同。

2023-04-01 23:52:44 602

原创 Go分布式爬虫学习笔记(十六)

我们来定义一个新Handler:ChanHandler,该Handler实现将日志写入channel的行为(用来模拟日志写入kafka),我们来建立该ChanHandler:我们看到ChanHandler内嵌了slog.JSONHandler,对slog.Handler接口的实现多半由内嵌的JSONHandler去完成,唯一不同的是Handle方法,这里要把JSONHandler处理完的日志copy出来并发送到channel中。= nil {// 模拟channel的消费者,用来消费日志 for {

2023-03-31 09:43:30 399

原创 Go分布式爬虫学习笔记(十五)

代理是指在客户端和服务器之间路由流量的服务,用于实现系统安全、负载均衡等功能。在爬虫项目中,代理服务器常常扮演着重要的角色,它能帮助我们突破服务器带来的限制和封锁,达到正常抓取数据的目的。

2023-03-30 08:32:30 928 3

原创 Go分布式爬虫学习笔记(十四)

当定时器到期时,会调用 cancel 方法关闭通道,级联关闭当前 Context 派生的子 Context,并取消与父 Context 的绑定关系。每个派生出的子 Context 都会创建一个新的退出通道,这样,只要组织好 Context 之间的关系,就可以实现继承链上退出信号的传递。我们需要借助通道的 close 机制,这个机制会唤醒所有监听该通道的协程,并触发相应的退出逻辑。如下图所示,服务器处理 HTTP 请求一般会单独开辟一个协程,假设该处理协程调用了函数 A,函数 A 中也可能创建一个新的协程。

2023-03-27 21:38:41 1047

原创 Go分布式爬虫学习笔记(十三)

可以看到直接函数调用的速度最快,为 1.95 ns/op, 方法接收者为指针的接口调用和函数调用的速度类似,为 2.37 ns/op, 方法接收者为非指针的接口调用却慢了数倍,为 14.6 ns/op。由于 Selenium 整合了不同的浏览器驱动,因此它对于不同的浏览器都具有良好的兼容性。Selenium 为每一种语言(例如 Java、Python、Ruby 等)都准备了一个对应的 clinet 库,它整合了不同浏览器的驱动(这些驱动由浏览器厂商提供,例如谷歌浏览器的驱动和火狐浏览器的驱动)。

2023-03-26 23:11:48 828

原创 Go分布式爬虫学习笔记(十二)

例如,微软办公软件 Words 在 2007 之后的版本的底层数据就是通过 XML 文件描述的。我们前面在 XPath 例子的中使用的 div[@class=“news_li”],在 CSS 选择器中可以简单地表示为 div.news_li。这是一种更加简单的表示方法。在 CSS 文件中,我们可以定义一个或多个 HTML 中的标签的路径,并指定这些标签的样式。在类似如下的日志文件中,包含了很多订单号的信息,即 order_id 后面的一串数字。在 Go 语言中,字符串是默认通过 UTF-8 的形式编码的。

2023-03-25 23:44:22 810

原创 Go分布式爬虫学习笔记(十一)

项目的所有第三方依赖都可以存放在当前项目的 Vendor 目录下,再也不用为了应用不同版本的依赖对 GOPATH 环境变量“偷梁换柱”了,Go 编译器优先感知和使用 Vendor 目录下缓存的第三方包。2019 年 9 月,Go1.13 发布,只要目录下有 go.mod 文件,Go 编译器都会默认使用 Modules 来管理依赖。为了加快构建程序的速度,快速切换、获取项目中依赖项的更新,Go 维护了下载到本地计算机上的所有模块的缓存,缓存目前默认位于 $GOPATH/pkg/mod 目录下。

2023-03-24 23:57:29 311 2

原创 Go分布式爬虫学习笔记(十)

HTTP服务器HTTP请求OSI 7层模型OSI 4层模型应用层传输层TLS网络层网络接入层数据传输路由协议交换机 二层路由器 三层自治系统内部路由协议外部路由协议R Introduction to Computer Networks and Cybersecurity 计算机网络与网络安全导论 12-13章 路由协议R Computer Networking A Top-Down Approach 6th 计算机网络:自顶向下方法 路由器内部处理方式数据包解析。

2023-03-21 22:10:40 795 2

原创 Go分布式爬虫笔记(九)

[建议] 当某个部分等待完成时,可用。

2023-03-20 14:11:29 1428 3

原创 Go分布式爬虫笔记(八)

业务需求爬虫引擎为基础的推送系统提供用户需求功能需求产品需求前端页面设计用户交互设计数据分析设计数据推送设计。

2023-03-19 21:38:58 514

原创 Go分布式爬虫学习(七)

此文章为3月Day6学习笔记,内容来源于极客时间《Go分布式爬虫实战》,强烈推荐该课程!服务发现、服务注册、负载均衡。数据一致性的诞生背景。

2023-03-18 23:20:33 180

原创 Go分布式爬虫笔记(六)

​​。

2023-03-17 13:22:34 660

原创 Go分布式爬虫笔记(五)

​​。

2023-03-15 22:25:20 657

原创 Go爬虫学习笔记(四)

Go 是以同步的方式来处理网络 I/O 的,它会等待网络 I/O 就绪后,才继续下面的流程,这是符合开发者直觉的处理方式。Go 语言高效,是因为在同步处理的表象下,Go 运行时封装 I/O 多路复用,灵巧调度协程,实现了异步的处理,也实现了对 CPU 等资源的充分利用。‍阻塞与非阻塞IO密集型:如果程序的大多数时间花费在等待 I/O 上,这种程序就是 I/O 密集型(I/O bound)的。

2023-03-14 22:23:33 468

原创 Go爬虫学习笔记(三)

Scrum 框架的缺点:感觉 Scrum 框架更讲究迅速,看起来更适合小型、要求先快速交付一版的新项目,很多环节由文档转变为面对面沟通,对于长期迭代的项目来说,可能会导致一些重要材料的丢失,如果项目人员流动大,可能会对后续的长期维护埋坑。不知道是否理解正确。数据发布者已决定将数据公开,例如暴露了 API;用户无需创建帐户或登录即可访问的数据;该网站的 robots.txt 文件允许访问的数据。

2023-03-13 22:26:14 1224

原创 Go爬虫学习笔记(二)

时间与复利思维思维模型垃圾回收​​Go进阶GMP模型在 GMP 模型中,G 代表的是 Go 语言中的协程(Goroutine),M 代表的是实际的线程,而 P 代表的是 Go 逻辑处理器(Process)。Go 语言为了方便协程调度与缓存,抽象出了逻辑处理器的概念。在任一时刻,一个 P 可能在本地包含多个 G,同时,一个 P 在任一时刻只能绑定一个 M。​​‍随着我们对协程、运行时协程调度的理解越来越深入,我们的知识组块、知识体系都可能会有所更新。

2023-03-10 21:09:52 1311

原创 Go爬虫学习笔记

etcd 这个名字是 etc distributed 的缩写。我们知道,在 Linux 中 etc 目录存储了系统的配置文件,所以 etcd 代表了分布式的配置中心系统。然而,它能够实现的功能远不是同步配置文件这么简单。etcd 可以作为分布式协调的组件帮助我们实现分布式系统。etcd 完整的读写流程。在整个复杂的流程中,核心模块无外乎是 GRPC 请求、权限和参数的检查、WAL 日志的存储、Raft 节点的网络协调以及执行操作更新状态机的状态等。

2023-03-09 21:28:05 1824

原创 webrtc nack

‍。

2022-11-06 23:11:25 157

原创 packetbeat配置分析

要从中捕获流量的网络设备。指定的设备会自动设置为混杂模式,这意味着 Packetbeat 可以捕获来自同一 LAN 上其他主机的流量。当接口为any时,不会为混杂模式。支持设备编号,可以通过列出所有设备来选择相应的编号。也可以通过配置这会将捕获设备设置为与 Packetbeat 启动时识别的第一个默认路由相关联的设备。default_route将从 IPv4 或 IPv6 中选择第一个默认路由,并优先选择 IPv4 路由,而只会从指定的设备中进行选择。选择的接口在选择后不会改变。‍。

2022-11-06 23:09:58 397

原创 packetbeat包流转流程

【代码】packetbeat包流转流程。

2022-11-06 23:07:33 269

原创 ffmpeg学习——音频源

缓冲音频帧,作为滤镜链图中有效的组成(起点)它主要编程使用,特别是通过中的接口进行调用。

2022-10-09 14:17:52 1573

ubuntu20.04 libm.so.6

ubuntu20.04 /lib/x86_64-linux-gnu /libm.so.6

2021-08-09

docs-pdf.rar

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。本文档是基于3.8.2的离线PDF文档

2020-04-22

python-3.8.2-docs-html.rar

Python是一种跨平台的计算机程序设计语言。 是一个高层次的结合了解释性、编译性、互动性和面向对象的脚本语言。最初被设计用于编写自动化脚本(shell),随着版本的不断更新和语言新功能的添加,越多被用于独立的、大型项目的开发。本文档是Python3.8.2官方离线文档HTML版本。

2020-04-22

Linux环境下Qt4图形界面与MySQL编程

经过近20年的发展与壮大,Linux操作系统作为源代码开放的自由软件,越来越受到IT界的认可,在信息技术领域发挥着重要作用。图形界面是Linux走向成熟的重要支撑技术,备受众多开发者的重视。在每个工程项目中,几乎都离不开数据库技术。因此,稳定的操作系统、友好的图形界面和完善的数据库技术构成了一个完整的工程项目。, 面对Linux操作系统图形界面与数据库编程,很多初学者不知道如何下手。本书正是在这种背景下编写的,紧紧围着本书的主线“图形界面编程控件与数据库编程基础→简单易学的实例→实际工程项目开发与场景分析”,以当前最新的Qt4.7为依据,采用“深入分析控件+实例解析”的方式,针对Linux操作系统下的Qt4.7与MySQL编程技术,并配合经典的实际项目,进行了全面细致的讲解。, 本书主要内容:, Linux图形界面编程基础。介绍了Qt4.7的全部控件,并针对每个控件设计了一个简单易学的实例,加深读者对Qt4.7控件的认识和理解。, 基于Linux操作系统的MySQL数据库设计基础。介绍了MySQL基本操作,并针对每个操作设计了一个简单易学的实例,加深读者对MySQL操作的认识和理解。, 基于Qt4.7与MySQL的经典实际项目案例开发。本书中设计了列车时刻表查询系统、酒店客房管理系统、房屋租赁系统、书店管理系统、学生上机考试系统、校园点菜系统、餐饮信息服务系统、视频音频播放器、桌面常用软件小助手、俄罗斯方块游戏和局域网聊天系统。这些案例给读者提供了实际项目开发参考。, 本书特点:, · 以最新的Qt4.7版本为依据,设计典型实例,并对开发场景进行详细讲解。, · 以Qt4+MySQL为基础,精心策划和组织Qt4+MySQL相关知识。, ·以“Qt4+MySQL编程基础→简单实例开发→实际工程项目开发与场景分析”入门到精通的方式对Qt4+MySQL知识进行系统化学习。, · 立足于基础知识,实例经典,深入工程实践。, · 读者能够从零开始、快速入门,为Qt4与MySQL应用与开发打下坚实的基础。

2017-12-13

fastboot驱动

fastboot驱动,手动安装版本fastboot驱动是不需要安装的,下载fastboot程序即可 fastboot,英语翻译意思是快速启动。在安卓手机中fastboot是一种比recovery更底层的刷机模式。就是使用USB数据线连接手机的一种刷机模式。相对于某些系统(如ios)卡刷来说,线刷更可靠,安全。fastboot相当于电脑的BIOS是已经内刷在手机内的,而电脑端只需用程序连接即可,电脑端的程序是fastboot.exe

2017-11-19

空空如也

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

TA关注的人

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