自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

成长之路

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

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

原创 全球首个 AI 超级工程师:拥有全栈技能,一个指令就能完成整个开发过程

全球首位AI软件工程师Devin是由初创公司Cognition推出的,它被认为是世界上第一个完全自主的AI软件工程师[2][15]。Devin具备强大的编程和软件开发能力,能够在多个方面协助或完全独立地完成软件开发任务[15]。它的核心能力包括自学新语言、开发迭代App、自动Debug等[8][10],并且在SWE-bench编码基准测试中取得了突破性的成功,展示了其执行复杂任务的能力,甚至超越了顶尖的人类工程师[2][13]。

2024-03-13 18:12:33 1181 1

原创 LeetCode第七题: 整数反转

 给你一个 32 位的有符号整数 `x`​ ,返回将 `x`​ 中的数字部分反转后的结果。  如果反转后整数超过 32 位的有符号整数的范围 `[−2^31, 2^31 − 1]`​ ,就返回 0。

2024-02-26 22:51:13 425

原创 从入门到精通:Go 实现基于 Token 的登录流程深度指南

在现代 Web 应用开发中,安全性始终是一个不可忽视的重要议题。随着分布式系统和微服务架构的兴起,传统的基于 Session 的登录机制面临着诸多挑战。本文将带你深入探索基于 Token 的登录流程,这是一种更为灵活且适用于现代应用架构的认证方式。

2024-02-26 22:21:14 1529

原创 LeetCode 第三题: 无重复字符的最长子串

给出两个**非空**的链表用来表示两个非负的整数。其中,它们各自的位数是按照**逆序**的方式存储的,并且它们的每个节点只能存储**一位**数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2024-02-25 17:28:24 499

原创 LeetCode第二题: 两数相加

给出两个**非空**的链表用来表示两个非负的整数。其中,它们各自的位数是按照**逆序**的方式存储的,并且它们的每个节点只能存储**一位**数字。 如果,我们将这两个数相加起来,则会返回一个新的链表来表示它们的和。 您可以假设除了数字 0 之外,这两个数都不会以 0 开头。

2024-02-25 17:06:12 1486

原创 LeetCode 第一题: 两数之和

给定一个整数数组 `nums`​ 和一个目标值 `target`​,请你在该数组中找出和为目标值的那两个整数,并返回他们的数组索引。 你可以假设每种输入只会对应一个答案。但是,你不能重复利用这个数组中同样的元素。

2024-02-25 15:01:38 958

原创 Go 项目必备:Wire 依赖注入工具的深度解析与实战应用

在现代软件开发中,依赖注入(Dependency Injection,简称 DI)已经成为一种广泛采用的设计模式。它的核心思想是通过外部定义的方式,将组件之间的依赖关系解耦,从而提高代码的可维护性、可扩展性和可测试性。然而,随着项目规模的增长,手动管理复杂的依赖关系变得日益困难。这时,依赖注入代码生成工具就显得尤为重要。在众多工具中,Wire 以其简洁、强大和易用性脱颖而出,成为 Go 语言项目中的宠儿。本文将带你深入了解 Wire 的安装、基本使用、核心概念以及高级用法,并通过一个实际的 web 博客项目

2024-02-24 21:29:42 958

原创 Golang性能分析神器:pprof与火焰图实战揭秘

在软件开发的世界里,性能分析如同一把锋利的剑,它能帮助开发者洞悉程序的运行状态,发现并解决那些隐藏在代码深处的性能瓶颈。而在Go语言的生态系统中,pprof无疑是这把剑中的佼佼者。本文将带你深入了解pprof的使用方法,并通过火焰图这一直观的工具,让你对性能分析有一个全新的认识。

2024-02-24 21:15:18 1193

原创 Golang 乐观锁实战

在现代软件开发中,数据一致性是一个永恒的话题。随着系统规模的扩大和并发操作的增加,如何有效地处理并发冲突,确保数据的完整性,成为了开发者必须面对的挑战。本文将带你深入了解 Golang 中 Gorm ORM 库的乐观锁机制,并通过实际示例,展示如何在项目中优雅地使用乐观锁。

2024-02-24 21:01:33 1224

原创 Go Slice的底层实现原理深度解析

在Go语言的世界里,切片(Slice)是一种极其重要的数据结构,它以其灵活性和高效性在众多编程场景中扮演着核心角色。本文将深入探讨Go切片的底层实现原理,通过实例和源码分析,带你领略Go语言设计之美。

2024-02-24 20:41:26 1174

原创 Go开发者必读:Gin框架的实战技巧与最佳实践

在当今快速发展的互联网时代,Web开发的需求日益增长。Go语言以其简洁、高效、并发性强的特点,成为了开发者们的首选。而在Go语言的众多Web框架中,Gin无疑是其中的佼佼者。本文将深入探讨Gin框架的特性、优势以及如何利用Gin构建高性能的Web应用。

2024-02-24 15:01:18 932

原创 GORM入门到精通:构建高效Go应用的终极指南

在Go语言的世界里,数据持久化是一个不可或缺的话题。随着应用的复杂性增加,传统的数据库操作方式已经无法满足开发者对效率和便捷性的需求。这时,ORM(对象关系映射)框架应运而生,它将数据库表与对象模型之间建立映射,极大地简化了数据库操作。而在众多ORM框架中,GORM以其简洁、高效和功能丰富脱颖而出,成为了Go开发者的新宠。

2024-02-24 14:43:33 843

原创 AC自动机:文本搜索的加速器

在数字化时代,文本数据的海洋浩瀚无垠。我们经常需要在这些数据中迅速找到特定的信息,比如在日志文件中查找异常、在海量文本中检索关键词,或是在编译代码时识别语法结构。这时候,AC自动机(Aho-Corasick自动机)就成为了我们的得力助手。

2024-02-24 14:24:31 372

原创 Go语言面试宝典:50道必会题目与精解

本文提供了50道覆盖Go语言核心概念、并发编程、内存管理、包管理、错误处理和测试等方面的面试题及其详细答案,旨在帮助开发者全面准备Go语言技术面试。

2024-02-24 14:04:26 1362

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

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

2024-02-24 13:18:44 1052

原创 POP3协议详解

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

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

原创 ffprobe学习

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

2023-05-23 19:58:14 752

原创 Ubuntu编译OBS

【代码】Ubuntu编译OBS。

2023-05-23 19:54:28 435

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

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

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

原创 kratos学习(二) kratos配置

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

2023-05-07 23:39:12 1240

原创 kratos学习(一)

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

2023-05-07 23:36:47 529

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

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

2023-04-24 20:12:30 958 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 610

原创 代码生成利器 - Go Generate

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

2023-04-24 20:07:16 3747

原创 Linux性能优化(一)

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

2023-04-18 21:50:53 473

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

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

2023-04-17 21:33:38 753

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

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

2023-04-16 22:39:44 1627

原创 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 770

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

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

2023-04-14 08:29:57 1043

原创 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 882

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

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

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

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

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

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

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

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

2023-04-03 20:06:59 403

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

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

2023-04-01 23:52:44 624

原创 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 426

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

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

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

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

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

2023-03-27 21:38:41 1058

原创 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 847

原创 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 823

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

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

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

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关注的人

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