- 博客(319)
- 收藏
- 关注
原创 一文搞懂设计模式值适配器模式
适配器模式(Adapter Pattern)是一种结构性设计模式,它允许将一个类的接口转换成客户端期望的另一个接口。这种模式通常用于使原本由于接口不兼容而不能一起工作的类能够协同工作。上面的类图一共包含5部分server接口:对客户提供统一的服务 service()ConcreteServerA和ConcreteServerB:拥有service()方法的具体类,可以直接对客户提供服务AdaptedServerC:拥有不同的service()方法,不能够直接对客户提供服务。
2023-12-18 11:38:52
276
原创 一文搞懂设计模式之责任链模式
责任链设计模式是一种行为型设计模式,它要求完成一件事情必须按照指定顺序进行,前一个环节完成了才能进行下一个环节,否则就提前终止。每个环节可以理解成一个链表的节点,当这个节点接收到上一个节点传送过来的信息时,开始进行自身的逻辑处理,处理完成后,传递给下一个节点,调用下一个节点的处理方法,直到链表遍历完成为止。本文,我们介绍了什么是责任链模式,为什么需要责任链模式,遍历方式和责任链模式的使用方法,并且对比了遍历方式和责任链模式的优缺点。希望各位读者小伙伴能有些许收获。更多文章敬请关注作者个人公众号晴天码字。
2023-12-03 07:04:39
302
原创 一文搞懂设计模式之代理模式
我们先来看看 GoF 对代理模式的定义:即:代理模式为一个对象提供一种代理以控制对该对象的访问。代理模式属于结构型设计模式,它能够代替客户向服务提供者发起请求,并且可以在请求服务提供者的前后做一些其他方面的处理。为了便于我们的理解,接下来借助一个具体的场景理解代理模式。
2023-11-18 18:29:05
360
原创 一文搞懂设计模式之单例模式
GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。单例模式属于创建型设计模式,单例模式能够保证一个类全局只有唯一一个实例对象。本文介绍了什么是单例模式(一个类全局只能存在一个实例对象,并且对外只提供一个访问点);用途有哪些场景(访问全局资源;初始化操作很耗时;作为模块或者函数入参非常复杂时);按照对象创建时机不同,分为饿汉模式和懒汉模式两种(饿汉模式:程序启动时创建,懒汉模式:需要用到时创建)以及饿汉模式和懒汉模式的各种使用情况以及有哪些问题。
2023-11-12 12:09:32
340
原创 一文搞懂设计模式之工厂模式
我们在进行软件开发的时候,虽然不使用任何设计模式也不耽误搬砖,但是,这样会导致代码可重用性可扩展性可读性可维护性都大打折扣。所以强烈建议使用合适的设计模式进行软件开发。创建型结构型和行为型。本文将先从最基础的创建型模型——工厂模型介绍,工厂模式具体可以划分成简单工厂模式工厂方法模式和抽象工厂模式,我们依次来学习一下。产品等级结构简单工厂模式:让一个工厂类创建所有的产品,不利于扩展和维护,违背了开闭原则。
2023-11-04 20:30:57
159
原创 golang之list
无论是对于初学者还是经验丰富的开发人员来说,理解和熟练运用Golang中的List是至关重要的。在Golang中,没有内置的List类型,但我们可以使用切片(Slice)来模拟List的功能。由于切片可以存储任意类型的元素,当我们从List中获取元素时,需要使用类型断言来将其转换为适当的类型。要访问List中的元素,我们可以使用索引来引用特定位置的元素。Golang中的范围循环是一种便捷的方式来遍历List中的元素。
2023-06-29 09:46:42
2709
原创 golang的interface
在Golang中,interface(接口)是一种类型,用于定义对象的行为规范。接口允许我们将不同的类型视为同一类型,从而实现多态性。通过使用interface,我们可以编写更灵活的代码,实现多态性。不同的类型可以实现相同的接口,从而在不同的上下文中使用相同的代码。通过定义接口,可以明确规定各个部分之间的交互方式,减少沟通成本,提高开发效率。只需实现接口所需的方法,即可在不修改现有代码的情况下引入新的功能。
2023-06-26 13:40:01
316
原创 golang之map介绍
的键值对时,首先会通过哈希函数计算键的哈希值,然后根据哈希值找到对应的桶。的哈希表中,当多个键的哈希值相同时,会发生哈希冲突。中插入一个键值对时,同样会计算键的哈希值,找到对应的桶,并在链表的头部插入新的键值对。由于哈希函数的限制,不同的键可能会产生相同的哈希值,这就是所谓的哈希冲突。中插入新的键值对时,会按照相同的过程计算哈希值,并将键值对插入到对应的桶中。中插入一个键值对时,首先会计算键的哈希值,然后将该键值对存储在对应的桶中。数组存储了每个键值对的哈希值的低8位,用于快速定位桶中的键值对。
2023-06-25 09:59:47
576
原创 Golang中的值传递和引用传递
本文将深入探讨Golang中的值传递和引用传递,并解释它们在编程中的应用和区别。通过值传递,我们可以确保函数或方法对参数的修改不会影响原始值。值传递是指在函数或方法调用时,将实际参数的值复制一份传递给被调用函数或方法的形式参数。引用传递是指在函数或方法调用时,将实际参数的地址传递给被调用函数或方法的形式参数。在理解值传递和引用传递之前,我们需要了解变量在内存中的存储方式。值传递适用于需要在函数或方法中对参数进行修改时不影响原始值的情况。引用传递适用于需要在函数或方法中对参数进行修改时影响原始值的情况。
2023-06-22 20:35:38
2015
原创 什么是消息队列代理
消息队列代理(Message Queue Broker)应运而生,作为一种在分布式系统中处理消息的关键组件,它能够加速数据流转,提升系统的性能和可靠性。消息队列代理具备消息持久化、消息确认和消息重试等机制,保证了消息的可靠传输和处理。通过增加代理服务器的数量,可以扩展系统的消息处理能力,应对高并发和大数据量的情况,保证系统的稳定性和高性能。消息队列代理还可以用作高性能缓存的一部分。通过将热点数据存储在消息队列中,可以加速数据的读写操作,减轻数据库等后端系统的压力,提高系统的响应速度和并发能力。
2023-06-21 11:18:48
397
原创 golang之map
Map是一种无序的数据结构,其中的键(key)是唯一的,而值(value)则可以重复。通过本文的介绍,我们了解了Golang中的Map以及它的使用方法和特性。Map是无序的,这意味着键值对的顺序是不确定的。的Map变量,其中键的类型是字符串,值的类型是整数。如果我们尝试使用相同的键添加多个值,那么后续的值将会覆盖前面的值。在使用Golang中的Map时,我们可以采取一些性能优化措施,以提高程序的执行效率。
2023-06-20 17:01:31
399
原创 form和json格式的区别
在进行网络开发和数据传输时,我们经常会遇到使用表单(Form)或JSON(JavaScript Object Notation)来传递参数的情况。Form表单适用于传递用户输入信息和文件上传,而JSON适用于数据交换和存储,具有更灵活和结构化的特点。:Form表单的数据传输方式采用键值对的形式,因此会产生一定的数据冗余。:Form表单的结构清晰,易于理解和处理。:JSON使用键值对的结构,使得数据具有清晰的层次结构,易于理解和处理。:Form表单是Web开发的标准方式,几乎所有的浏览器都支持表单提交。
2023-06-19 15:39:55
2760
原创 JWT是什么
注册声明是预定义的,包含一些标准字段,如iss(令牌发行者)、exp(过期时间)、sub(主题)等。JWT是一种基于JSON的轻量级令牌,由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。在验证过程中,接收方使用相同的密钥和加密算法对接收到的签名进行解密和验证。首先,我们创建了一个新的令牌,并设置了令牌的声明信息,包括用户名和过期时间。然后,通过判断令牌的有效性和访问声明信息,进行令牌的验证。JWT的头部通常包含两部分信息:令牌的类型和使用的加密算法。
2023-06-18 14:15:22
258
原创 gorm简介
gorm是一个功能强大的Go编程语言中的ORM库,具有简单易用、多数据库支持、自动迁移、事务支持和强大的查询功能等特点。在复杂的业务逻辑中,事务可以确保一系列操作要么全部成功,要么全部回滚,避免了数据不一致的问题。ORM是一种技术,它将数据库表中的数据映射到面向对象的模型中,从而简化了数据库操作。gorm具有强大的自动迁移功能,可以根据定义的模型自动创建、修改数据库表结构。这简化了数据库结构的管理,减少了手动处理数据库迁移的工作量。接下来,你可以定义你的数据模型,并使用gorm提供的API进行数据库操作。
2023-06-17 13:09:15
1442
原创 微服务基础介绍
超时与重试机制也是容错的一种方法,凡是发生RPC调用的地方,比如读取redis,db,mq等,因为网络故障或者是所依赖的服务故障,长时间不能返回结果,就会导致线程增加,加大cpu负载,甚至导致雪崩。根据服务器的不同处理能力,给每个服务器分配不同的权值,使其能够接受相应权值数的服务请求。微服务最主要的功能是根据业务拆分成一个一个的子服务,实现功能的去耦合,每一个微服务提供单个业务功能的服务,各司其职,从技术角度看就是一种灵活独立的单元,能够自行单独启动和关闭,一般每个服务都拥有自己的数据库模块。
2023-06-16 18:45:09
1929
原创 wire是什么
Golang的wire框架是一个强大而灵活的依赖注入工具,它可以帮助开发人员更好地构建可维护和可扩展的应用程序。通过使用wire框架,您可以简化依赖管理过程,减少手动编写依赖注入代码的工作量,并提高应用程序的可测试性。在wire.go文件中,您需要定义您的应用程序的依赖关系。:使用wire框架,您可以使用声明式的方式来定义依赖关系,而不是手动编写大量的依赖注入代码。在您的项目中创建一个名为wire.go的文件,并定义您的应用程序的依赖关系。在您的应用程序的其他部分中使用生成的代码来获取正确的依赖注入。
2023-06-15 19:50:33
747
原创 gomod在项目中的作用
通过使用gomod,我们可以简化依赖管理、进行版本控制,并且获得可视化的依赖关系图。gomod是Go语言中一个非常重要的工具,它在Golang项目的开发过程中扮演着关键的角色。gomod是模块依赖管理工具,可以帮助开发者更好地管理和组织项目的依赖关系,提供了便捷的方式来管理和升级依赖项。gomod会自动处理依赖关系,帮助我们解决版本冲突和兼容性问题,确保项目的稳定性和可靠性。文件,用于记录项目的依赖关系。
2023-06-14 11:34:17
1275
原创 golang中的map
map是一种非常有用的数据结构,可以高效地进行查找,并且具有灵活的键值对。通过了解和合理使用map,你可以更好地利用Golang的功能,优化你的代码。在map中,查找操作的时间复杂度是O(1),即使在非常大的数据集上也能保持高效。map的大小是可变的,你可以根据需要动态地增加、删除和修改键值对。如果你知道map中将要存储的元素数量,可以在创建map时预先为其分配足够的空间,以避免频繁的扩容操作。
2023-06-13 11:26:30
480
原创 channel的底层原理
channel的底层代码涉及到数据结构、锁、条件变量和调度器等关键部分,用于实现channel的功能和并发安全性。该数据结构由一个指向队列的缓冲区的指针、一个表示队列的容量的整数值以及两个表示队列的开始和结束位置的整数值组成。在golang的运行时系统中,channel的发送和接收操作是由调度器负责调度和协调的。channel的发送和接收操作涉及到锁和条件变量的使用,以确保并发安全性和协调操作的顺序。在发送和接收操作中,首先获取channel的互斥锁,然后执行相应的发送或接收操作,最后释放互斥锁。
2023-06-12 10:29:09
4249
原创 golang之channel的使用
golang之channel的使用在当今快速发展的软件开发领域,使用高效且可靠的编程语言变得尤为重要。而golang(又称Go语言)正是一种备受欢迎的编程语言,它的简洁、高效以及并发处理能力使得它在开发者中越来越受欢迎。在本文中,我们将探讨golang中的一个重要特性——channel,并介绍如何利用它来优化您的代码。什么是channel?在golang中,channel是一种用于在不同goroutine之间传递数据的通信机制。它可以类比于现实生活中的管道,通过它可以安全地发送和接收数据。使用chan
2023-06-11 13:44:33
540
原创 golang的错误处理
在Golang中,错误处理是一个值得关注的主题,因为它为开发人员提供了一种优雅且高效的方式来处理错误情况。通过正确地处理错误,并遵循最佳实践,您可以提高应用程序的可靠性和稳定性。我们希望本文为您提供了有关Golang错误处理的详细信息,并为您在开发过程中提供了一些有用的技巧和建议。在Golang中,通常使用函数返回错误的方式来处理错误。日志记录可以帮助开发人员更好地理解错误发生的背景,并提供重要的调试信息,以便快速定位和解决问题。为不同类型的错误定义明确的错误类型,以便更好地理解和处理错误。
2023-06-10 21:06:03
1267
原创 Golang之reflect包
通过使用Reflect包,我们可以在不了解类型的情况下,动态地检查变量的类型、调用函数和方法,以及修改变量的值。Reflect包的使用使得我们能够在不了解类型的情况下,动态地检查变量的类型、调用函数和方法,以及修改变量的值。通过使用Reflect包的强大功能,我们可以在运行时动态地获取结构体的字段信息和调用结构体的方法,从而实现更加灵活和通用的代码。使用Reflect包,我们可以在运行时检查一个变量的类型。方法则用于获取给定变量的值信息,包括值的类型、具体的数值以及进行一些操作,比如修改变量的值。
2023-06-09 10:31:58
519
原创 golang之reflect
Golang的Reflect包是一个强大而灵活的工具,可以帮助我们在运行时处理类型信息、调用函数和方法,以及修改变量的值。Golang的Reflect包(reflect)是一个强大的内置包,它提供了在运行时进行程序反射的功能。通过使用Reflect包,我们可以在不了解类型的情况下,动态地检查变量的类型、调用函数和方法,以及修改变量的值。使用Reflect包,我们可以在运行时检查一个变量的类型。方法获取变量的具体值。
2023-06-08 16:53:42
472
原创 golang中的panic
在Golang中,当程序发生无法处理的错误时,它会引发panic。在本文中,我们将深入探讨Golang中的panic,了解其工作原理,并提供一些优化建议,以帮助您提高代码的质量和性能。当panic发生时,程序会立即停止执行,并开始展开(unwinding)调用栈,查找可以处理该panic的defer函数。在本文中,我们深入探讨了Golang中的panic,了解了它的工作原理,并提供了一些建议来优化panic的处理。通过使用defer函数,您可以将处理panic的代码与常规代码分离开来,提高代码的可读性。
2023-06-07 17:19:43
1337
原创 golang之context
如果不使用Context,那么在一个请求发生超时或取消时,我们很难优雅地终止正在执行的goroutine。此外,没有Context的情况下,无法方便地传递请求特定的值,如请求ID、用户身份验证信息等。Golang中的Context是一个强大的工具,可以帮助我们编写高效、可靠的代码。超时是Context的一个重要特性,可以帮助我们避免潜在的资源泄漏和长时间的阻塞。使用Context可以帮助我们更好地管理并发请求,但在开发过程中,我们还可以采取一些额外的步骤来进一步优化代码的性能。方法设置超时外,还可以使用。
2023-06-06 15:50:51
639
原创 快速排序简介
快速排序是一种常用的排序算法,它能够高效地对一系列数据进行排序。它的核心思想是通过选择一个基准元素,将数据分成小于基准的左子数组和大于基准的右子数组,然后递归地对子数组进行排序,最终实现整个数组的排序。在函数内部,我们使用递归的方式对左右子数组进行排序,并将排序后的结果进行合并,最终得到有序的切片。原地排序:快速排序是一种原地排序算法,不需要额外的空间存储中间结果,只需要通过交换元素位置来进行排序。选择一个基准元素:快速排序从待排序数组中选择一个基准元素,通常选择第一个或最后一个元素作为基准。
2023-06-05 10:03:32
446
原创 Golang源码学习之heap
本文深入探讨了Golang源码中的heap包,解析了堆排序算法的实现原理,并介绍了如何使用Golang的heap包来实现高效的堆排序算法。通过使用自定义堆类型和heap包中的函数,我们可以方便地进行堆操作,并得到有序的元素序列。通过调用heap.Init()初始化堆,然后逐步调用heap.Pop()取出堆顶元素,并将其添加到结果序列中,就可以得到有序的元素序列。在堆构建完成后,我们可以逐步取出堆顶的元素,将其与堆的最后一个元素交换,并重新调整堆,使得剩余的元素仍然满足堆的性质。
2023-06-04 15:34:42
909
原创 什么是SSO
当用户进行第一次登录时,他们的凭据将被验证,并生成一个令牌,该令牌用于标识用户的身份。此外,当有新的应用程序需要接入时,只需进行一次集中的配置和集成,而无需为每个应用程序单独进行配置。换句话说,用户只需一次登录,就可以访问多个不同的应用程序,无需为每个应用程序单独登录。这样,用户无需为每个应用都创建一个新的账户,就可以方便地在不同的社交媒体平台上分享内容。此外,SSO还可以减少密码泄露的风险,因为用户只需记住一个密码。
2023-06-03 16:35:02
967
原创 oss的临时密钥是什么
OSS临时密钥适用于需要临时授权访问和管理OSS资源的场景,特别适用于临时性的操作需求,如临时上传、下载、删除文件等。在权限策略中,可以指定具体的操作、资源和条件,以确保临时密钥只能执行特定的操作并访问特定的资源。OSS临时密钥的有效期可以根据您的需求进行设置。此外,OSS临时密钥还可以实现临时授权,将访问和管理OSS资源的权限限制在特定时间段和特定操作范围内,提高了资源的安全性。使用临时密钥访问OSS资源:获取到临时密钥后,将其作为身份凭证,通过SDK、API或命令行工具进行OSS资源的访问和管理。
2023-06-02 09:45:08
1604
原创 golang之recover
这包括关闭文件、释放资源或执行其他清理操作,以确保程序的状态正确恢复,并且不会留下未处理的副作用。时,最好记录相关信息,并进行适当的报告。函数,我们可以实现程序的优雅恢复和错误处理,从而提高代码的可维护性和稳定性。中恢复,我们可以防止程序因错误而崩溃,而是采取适当的措施处理错误。函数时,需要谨慎使用,并遵循最佳实践,以确保代码的可读性和稳定性。是Go语言中的异常机制,当程序发生不可恢复的错误时,会引发一个。
2023-06-01 10:24:51
6535
原创 新世界的大门——websocket
WebSocket是一种计算机通信协议,它提供了在单个TCP连接上进行全双工通信的能力。大家好,我是晴天,最近一周在工作中总是遇到一些小问题,所以我就想把这些小问题给记录下来。然后,我们在一个无限循环中读取客户端发送的消息,并将消息原样发送回客户端。方法向服务器发送一个握手消息,并在发送之后读取服务器的响应消息。由上图可见,ws链接已经建立,可以使用客户端,向服务器发送消息了。消息体的WebSocket消息,并使用。
2023-05-07 17:21:55
400
原创 MVCC
通俗的讲,数据库中同时存在多个版本的数据,并不是整个数据库的多个版本,而是某一条记录的多个版本同时存在,在某个事务对其进行操作的时候,需要查看这一条记录的隐藏列事务版本id,比对事务id并根据事物隔离级别去判断读取哪个版本的数据。综上所述,在读已提交(RC)隔离级别下,同一个事务里,两个相同的查询,读取同一条记录(id=1),却返回了不同的数据(第一次查出来是孙权,第二次查出来是曹操那条记录),因此RC隔离级别,存在不可重复读并发问题。所以,trx_id=101这个记录,对于当前事务是不可见的。
2023-05-06 14:07:46
530
原创 事务隔离级别
不同的事务隔离级别提供了不同的访问控制和限制程度,未提交读级别允许一个事务读取另一个事务尚未提交的数据,提交读级别要求一个事务只能读取已经提交的数据,可重复读级别要求一个事务只能读取已经提交的数据并且在事务执行期间多次读取同一数据时返回相同的结果,而序列化级别则要求所有事务串行执行,完全隔离,最大程度地保证了数据的一致性和可靠性。但是,如果在事务B查询操作期间,事务A执行了增加操作,那么事务B再次查询账户A的余额时,读取到的值就会变成1100元,因此在事务B中读取同一行数据的结果是不一致的。
2023-04-30 17:31:12
827
原创 收敛域名
如果网络中有多个DNS服务器,并且这些服务器都缓存了该域名的解析结果,那么这些DNS服务器应该返回相同的IP地址(192.0.2.1),而不是各自返回不同的IP地址。如果一个域名在不同网络环境下解析到不同的IP地址,攻击者就可以通过欺骗DNS服务器的方式,将用户导向到一个虚假的网站,从而进行网络钓鱼等攻击。因此,我们需要定期检查DNS服务器的配置,并进行必要的更新,以确保收敛域名的配置始终保持最优状态。我们需要在多个DNS服务器上配置该域名的解析记录,并确保它们的解析结果一致。
2023-04-22 12:38:06
250
1
原创 分布式事务
我们也都进行过网购,当我们在某电商平台下单后,如果系统没有使用事务管理机制,当系统在向订单表中插入订单信息时,由于某种原因插入失败,也就是说我们下单失败了,此时我们可以重新下单,但是对商品库存已经减少,这就会出现明明还有库存,但是却显示缺货的情况,这就会导致商品库存数据不一致。我们都使用过银行的转账功能,那么当我们给亲朋好友进行转账,此时如果银行系统没有使用事务管理机制,就有可能出现我们自己的账户显示扣款成功,但是对方没有收到转账款项的情况,这种情况我们是万万不能接受的。否则进入第三个阶段。
2023-04-21 11:14:29
75
原创 supervisor-男程序员的福音
为了不让女朋友生气,supervisor来了,它能够简单且高效地启动、重启、终止程序的运行,并且它能够检测程序是否正常运行,并且在程序挂掉后自动重启,并且还能把日志(err log,warning log)输出到指定位置,能够捕捉到QA遗漏的问题。就是:你想将程序A托付给supervisor管理,那就按要求的格式,为程序A创建一个A.ini配置文件,在这个文件中定义好,程序A的二进制文件在哪里、执行啥命令启动程序A、日志文件在哪等等。,这样可以使得程序在后台运行,即时关闭当前终端,也不会使程序终止。
2023-02-19 12:23:44
577
原创 什么是chatGPT
它的特点在于可以通过预先训练大量语言数据,获得更好的语言理解能力,然后再通过微调的方式,针对特定任务进行训练,比如智能对话。在NLP技术中,ChatGPT是一种被广泛使用的技术,它可以帮助计算机更好地理解人类语言,实现智能对话。在这些任务中,ChatGPT可以通过微调的方式,针对不同的任务进行训练,从而得到更好的表现。总之,ChatGPT是一种非常有用的自然语言处理技术,它可以帮助计算机更好地理解和生成自然语言,实现智能对话和其他自然语言处理任务。ChatGPT: 使用自然语言处理技术实现智能对话。
2023-02-16 18:17:42
663
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人