自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(42)
  • 收藏
  • 关注

原创 使用goquery和chromedp写爬虫

在本文中,我们将探索如何利用两个强大的Go语言包——goquery和chromedp——来爬取网页文章。goquery是一个轻量级且易于使用的库,它提供了基本的HTTP请求功能,允许我们直接向目标URL发起请求并获取页面内容。相比之下,chromedp则提供了更为高级的功能,它能够模拟一个完整的Chrome浏览器实例,支持后台运行,并能够执行复杂的用户交互操作,如鼠标点击和页面滚动。通过结合使用这两个包,我们不仅能够高效地获取网页数据,还能够模拟用户行为,深入挖掘那些仅通过静态请求无法触及的网页内容。

2024-12-14 12:17:49 2269

原创 VPN的作用、场景、原理一文明了

VPN,即虚拟私人网络(Virtual Private Network),是一种通过公共网络(如互联网)创建安全连接的技术。它允许用户在不安全的网络环境中安全地传输数据,从而保护用户的隐私和数据安全。(就是说你直接使用互联网可能会被黑客监听数据,甚至修改数据,但是有了vpn就不用担心这些。

2024-12-07 20:07:36 6624 1

原创 go的依赖注入究竟是毒药还是解药

go的依赖注入究竟是毒药还是解药?有人说go使用依赖注入属于是被JAVA洗脑无法自拔。它和java的Spring注解机制非常相像。依赖注入是一种设计模式,它允许将一个对象的依赖项(例如服务或组件)从外部注入,而不是在对象内部创建。这可以通过构造函数、方法或属性进行。

2024-11-22 10:34:08 946

原创 什么是面向对象编程?什么是面向过程编程?

不同的编程范式适用于不同的场景,选择合适的范式可以提高代码的可维护性、可读性和效率。Java 和 Go 的选择反映了不同的设计哲学,Java 更加注重封装和对象的使用,而 Go 更加简洁,强调过程和函数的使用。

2024-11-15 13:19:51 1090

原创 GO语言的SOLID解析(超详细)

通过这个简洁的实现,我们仍然展示了如何在 Go 中实现类的继承和依赖,同时强调了里氏替换原则的重要性。通过将大接口拆分成多个小接口,我们遵循了接口隔离原则,使每个类只实现它们需要的功能。这种设计提高了代码的灵活性和可维护性,避免了不必要的方法实现,从而使代码更加简洁和易于理解。通过依赖倒置原则,我们可以实现高层模块与低层模块之间的松耦合,提高代码的可维护性和可扩展性。使用接口作为抽象,可以灵活替换具体实现,适应变化和需求。详细分析了SOLID的五大原则,以及为什么,并举出反例子。

2024-11-06 16:02:56 952

原创 一篇文章学会es基本使用

文档操作有哪些?创建文档:POST /{索引库名}/_doc/文档id { json文档 }查询文档:GET /{索引库名}/_doc/文档id删除文档:DELETE /{索引库名}/_doc/文档id修改文档:全量修改:PUT /{索引库名}/_doc/文档id { json文档 }增量修改:POST /{索引库名}/_update/文档id { “doc”: {字段}}

2024-10-18 13:45:48 945 2

原创 ELK中L的filebeat配置及使用(超详细)

​ Filebeat是一种轻量型日志采集器,内置有多种模块(auditd、Apache、NGINX、System、MySQL 等等),可针对常见格式的日志大大简化收集、解析和可视化过程,只需一条命令即可。根据采集的数据形式不同,形成了由多个模块组成的Beats。Beats是开源数据传输程序集,可以将其作为代理安装在服务器上,将操作数据发送给Elasticsearch,或者通过Logstash,在Kibana中可视化数据之前,在Logstash中进一步处理和增强数据。

2024-10-08 13:24:01 2604

原创 MySql在更新操作时引入“两阶段提交”的必要性

redo log就像一个缓冲区,可以让当更新操作的时候先放redo log中,等系统不忙的时候或redo log 满了的时候再写到磁盘中,redo log的大小是固定的。我们可以查看binlog是否完整,却还是把redo log分为两阶段是因为redo log是在事务中的内容,如果不分两个阶段的话,完成redo log 事务就不能再回滚了,这个·时候binlog写入是啊比,InnoDB又回滚不了,数据和binlog日志就又不一致了。redo log存储的是数据页的更新细节,binlog是更新内容。

2024-09-27 18:52:22 488 1

原创 操作系统中锁的底层原理

在多线程中,为了保证数据操作的一致性,操作系统引入了锁机制,。通过锁机制,能够保证在多核多线程环境中,在某一个时间点上,只能有一个线程进入临界区代码,从而保证临界区中操作系统的一致性,和。

2024-09-19 15:05:56 915

原创 ELK在Linux服务器下使用docker快速部署(超详细)

ELK在Linux服务器下使用docker快速部署,

2024-09-13 18:32:02 2124 4

原创 Zap熟练使用一篇学会

go语言如果使用Zap写日志系统

2024-09-06 15:15:36 1674

原创 GIN框架的三种运行模式两种引擎注册怎么选择?

GIN框架的三种运行模式两种引擎注册怎么选择?

2024-08-28 15:17:52 1205

原创 Viper快速使用(超简单)

go语言快速使用Viper

2024-08-23 17:10:53 562

原创 算法复习(上)

算法、数组、双指针、滑动窗口、哈希、二叉树、前缀和、差分

2024-08-13 15:50:10 439

原创 map在高并发场景下如何安全使用

concurrent map writes错误、map、lock、unlock、goroutine

2024-08-12 14:50:43 511

原创 Java转go算法之Scanner使用一篇看懂

go语言中使用scanner去标准输入中扫描数据的过程以及原理

2024-08-10 15:59:03 818 2

原创 docker配置redis分布式集群三主三从

上篇文章写了篇redis主从复制,它解决了单台服务的数据丢失等问题,以及其中一台机器出了,问题,另一台可以及时顶替,但是如果网络不稳定,导致主服务器向从服务器传递数据发生了延迟,或者说主服务器坏了,从服务器只有读的功能,不能及时更新最新数据等,这都会导致客户端读到的数据有问题,而且性能上分布式集群也要比主从复制更高。: Redis Cluster通过数据分片(Sharding)技术,将数据分布在多个节点上,每个节点只存储部分数据。

2024-07-22 14:45:00 757 1

原创 docker配置Redis主从复制原理及操作

要配置Redis主从复制,我默认是了解过Redis的持久化功能的,也就是RDB和AOF,只需要简单了解过即可。持久化的一个作用就是可以定期将内存中的数据备份到硬盘,在系统发生故障的时候,也可以通过持久化文件回复数据,主从复制是一种分布式系统数据同步技术,其中主服务器负责处理所有写操作并将变更同步到一个或多个从服务器。从服务器接收这些变更并复制主服务器的数据,通常用于读取操作,实现了读写分离,增加了服务器的并发量还能在主服务器故障还能故障转移。

2024-07-19 14:16:32 1137

原创 Go语言中GC(垃圾回收回收机制)三色标记与混合写屏障

GoV1.3- 普通标记清除法,整体过程需要启动STW,效率极低。GoV1.5- 三色标记法, 堆空间启动写屏障,栈空间不启动,全部扫描之后,需要重新扫描一次栈(需要STW),效率普通GoV1.8-三色标记法,混合写屏障机制, 栈空间不启动,堆空间启动。整个过程几乎不需要STW,效率较高。

2024-07-16 21:03:34 880

原创 WebSocket详解

答:ws和http一样,在从客户端发出去的时候也是要经过多层协议封装的WebSocket 数据帧:WebSocket 协议定义了一系列的数据帧格式,用于封装应用层的实际数据。这些数据帧包含了诸如消息类型、长度、负载数据等信息。TCP 报文段:WebSocket 数据帧会被进一步封装到 TCP 报文段中进行传输。TCP 报文段包含了源端口、目标端口、序号、确认号等信息。IP 数据报:TCP 报文段会被再次封装到 IP 数据报中,加入源 IP 地址和目标 IP 地址等信息。

2024-06-02 20:46:18 1163

原创 mysql误删后使用binlog恢复数据

(这里我们是要测试binlog恢复数据的使用,所以就日志文件都放到一个全新binlog文件中方便查询使用,如果是实际恢复数据的话,就要一个一个的在这些binlog文件中找自己要的那部分文件了。数据恢复:通过恢复误删操作之后的操作记录,可以将误删的数据重新插入到数据库中,还原到误删之前的状态。这将重新执行误删操作之后的操作,从而还原到误删前的数据状态。假设我们的数据库是7天一备份,然后binlog的过期时间是大于7天的,那么通过备份的数据库+binlog文件就能够恢复数据库到达7天内的任意一个时间点的状态。

2024-05-22 15:56:29 2395 1

原创 mysql数据库主从复制,搭建从库

mysql在服务器上进行主从复制,配置从库搭建的原理以及过程操作

2024-05-22 14:11:23 824

原创 用websocket实现一个简单的im聊天功能

websocket,协程

2024-05-11 22:28:52 780 1

原创 WebSocket前后端建立以及使用

是一种在 Web 应用程序中实现。它提供了一种允许服务器主动向客户端推送数据,同时也允许客户端向服务器发送数据,实现了实时的双向通信。这部分直接说你可能听不懂;我举个例子说他的功能(下面先说一下为什么会出现WebSocket?

2024-05-11 20:03:22 2845 3

原创 进程间的通信方式——管道

如果一个管道的写端一直在写,而读端的引⽤计数是否⼤于0决定管道是否会堵塞,引用计数大于0,只写不读再次调用write会导致管道堵塞;如果一个管道的读端一直在读,而写端的引⽤计数是否⼤于0决定管道是否会堵塞,引用计数大于0,只读不写再次调用read会导致管道堵塞;而当他们的引用计数等于0时,只写不读会导致写端的进程收到一个SIGPIPE信号,导致进程终止,只写不读会导致read返回0,就像读到⽂件末尾⼀样。

2024-04-26 15:36:17 432 1

原创 Go语言调试连接钉钉机器人

这个只是我创建机器人时候出现的值,等到你去创建机器人的时候要用你的变量值将这替代了,不要直接用我的机器人的token值。1. 首先在那个包中有两个初始化的方式,如果在第五步中没有选择加密,那么就是直接用InitDingTalk方法就能初始化对象,第一步,我们需要去创建一个钉钉机器人跟着下面的步骤就可以去一个钉钉群里创建一个机器人了。差不多就是这六步了,就可以实现创建一个钉钉机器人,然后需要注意的就是第五步中的。之后就可以来看代码了,然后可以。等方法来让钉钉机器人在钉钉群中。了,后面会贴上代码。

2024-04-19 21:11:33 706 2

原创 Mysql中的Redo log日志和binlog日志的详情工作

主要是讲解Redo log 和 binlog实现更新日志的时候。

2024-04-19 20:43:20 994

原创 星际旅行,第15届蓝桥杯javaB组试题F题解

这道题首先要看懂题。就是看第一个盲盒,2,1初始在2号星球他只有一个传送门的机会,但后面题解说的他能旅行三个星球一共,其实意思是题目中说的。也就是从2传送到1是花费一次,他也有可能从2传送到3也是花费一次,所以说他有可能到达1和3,加上初始的2,所以就是有可能旅行的星球是3个。他说的是可能性一共有多少个可以实现旅行,所以这里就可以用到dfs的思路,也就是。接下来就把代码放上,不一定对,是个人的一点见解,有问题多谢大家指出来。

2024-04-14 14:28:14 855 3

原创 数据库基本概念:数据库的定义、特点、分类、组成、作用

数据库(database)是用来组织、存储和管理数据的仓库。当今世界是一个充满着数据的互联网世界,充斥着大量的数据。数据的来源有很多,比如出行记录、消费记录、浏览的网页、发送的消息等等。除了文本类型的数据,图像、音乐、声音都是数据。为了方便管理互联网世界中的数据,就有了数据库管理系统的概念(简称:数据库)。用户可以对数据库中的数据进行新增、查询、更新、删除等操作。我们可以看到在MyISAM中数据和索引是分开。而在InnoDB中的数据和索引是在一个文件中的,

2024-04-07 19:52:05 32075

原创 mysql的底层数据结构组成

定义:本身就是一种特殊的二叉树,每个节点上都有存储位表示节点的颜色,可以是red或black 约束:每个节点是黑色或者红色,根节点为黑色,叶子节点(特指空节点)是黑色,每个红色节点的子节点都是黑色的,任何一个节点到其每一个叶子节点的所有路径上黑色节点数相同 特点:速度特别快,趋近平衡树,查找叶子元素最少和最多次数不多余二倍。B树(B-tree)每个节点都存放了真实的数据,mysql一个根节点数据存储为16KB,会导致每一个节点存储的数据量变小,所以B树的高度会变高,维护的代价大,查询修改性能会越来越低。

2024-03-26 14:20:04 1125 1

原创 DNS域名是什么,和IP的关系

DNS域名是什么?DNS和IP的关系

2024-03-23 16:20:34 707 2

原创 前端vue后端go如何进行跨域设置?一篇就通透理解

前端使用vue怎么设置跨域,后端使用go怎么设置跨域

2024-03-17 13:54:44 1959 2

原创 go写图片验证码功能

我们在注册或者登录页面等需要实现验证码功能,以此来验证不是机器人在操作验证码的图片是由一个Base64 编码格式的字段,此字段返回给前端,前端可以根据网站得到图片话不多说,现在就开始说怎么能够创建处二维码。

2024-03-07 20:01:47 569 1

原创 什么是内网穿透+配置内网穿透

内网穿透理解、内网穿透配置、公网访问私有ip地址所在网络

2024-03-02 21:50:21 1235

原创 Gin的请求处理和响应

通过使用 Gin 的强大功能,我们可以轻松地处理各种类型的请求,并返回适当的响应。

2024-02-17 19:53:05 440 1

原创 贪心+dfs

即一个数组,然后在数轴中选择一个点,然后来回走,直到经过了所有的点,问走的最短路程是多少,用的是右上角的哪一个不等式来解决的,之后就把数轴上的点两两相结合 ,然后a1和an结合,一直到最小的中间,如果是奇数个,最后刚好·1剩下一个点,n/2,如果是偶数的话,中间两个点,任选一个就好。2 从前往后处理每个区间 判断能否将其放到某个现有的组中(看某一组的最后一个右端点是否大于新区间的左端点,如果大于,则不能放置,如果小于,则新区间就可以放置到该组中,同时这个组的最后一个右端点进行更新。来让编译器分的清除,,

2024-01-25 11:25:26 821 1

原创 模拟堆 优先堆 java写一个堆

其次,如果把这个完全二叉树,从上到下,从左到右的排序的,它可以存放在一个一维数组中,而如果一个节点的index是x的话,那么它的左子树就刚好是2x,右子树是2x+1所以因为有这层关系,也就奠定了可以用一维数组来存贮的,每次找左子树的时候就把当先节点的下标*2就可以在数组中找到左子树的值了。他会根据up方法中的递归,自动给的上升到它应该在的位置。这五个点中都有一个共同的要求就是:动把堆中的数组动态的重组,让堆中最小的值存储在堆顶部,那么怎么做才能够让数组会是以堆的样子排序,让最小的值存储在最顶端呢?

2023-11-19 15:02:53 86

原创 Go语言协程的原理,协程与线程的关系!(很重要)

了解关于Go语言中协程的底层原理,以及协程与线程的区别、联系。协程与线程使怎么搭配使用的。Go语言中的协程是怎么实行起来的。GPM调度。

2023-11-12 08:00:00 658 5

原创 复习go语言的发现一些容易忽视的知识点

i -- 等类似的情况,一定要用有符号的数来定义i 这样当i == 0 的时候,再--才会编程-1 如果i是一个无符号的数时候,由于无符号的特征,当i为0的时候,减一会导致i变为最大的无符号数,而不是-1 这样子循环就无法终止。在go语言中,在函数中的局部变量在外部是不能用的,但是如果我在函数内部的局部变量的地址给返回到函数外用变量接收,那么就可以在函数外获取这个局部变量的值,因为指针p仍然引用着这个变量。如果原始的数值是有符号类型,而且最左边的bit位是1的话,那么最终结果可能是负的。

2023-11-05 16:54:23 81

原创 Go语言写小游戏的步骤

就是比如在工具中的,这个文件中仅仅放置了方法,方法内部传的参数也是其他结构体的内容,用来改变其他结构体的参数。然后之后就是用自己的算法来让这个游戏的功能更加丰富,比如说我的跑酷游戏就是想要让后面的场景实现无线循环,直接找到一个无限长度的背景图片过于困难,我就找了一张首尾呢个够无缝衔接的图片,然后让这两张图片给渲染连接起来,然后因为同一时间,窗口只能显示一张图片,所以就让当图片改出现第三张的时候,就让两张连接起来的图片给整体右移一个图片大小的宽度,这样就是第一张变成第二张,第二张变成第三张了。

2023-10-22 15:30:00 625 1

空空如也

空空如也

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

TA关注的人

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