- 博客(96)
- 收藏
- 关注
翻译 RWMutex 注意事项
被阻塞的 Goroutine,其中等待时间最长的一个 Goroutine 会被唤醒。⚫ 读锁占用的情况下会阻止写,不会阻止读,多个 Goroutine 可以同时获取。⚫ 写锁被解锁后,所有因操作锁定读锁而被阻塞的 goroutine 会被唤醒,并。⚫ RWMutex 的一个写锁去锁定临界区的共享资源,如果临界区的共享资源已。被(读锁或写锁)锁定,这个写锁操作的 goroutine 将被阻塞直到解锁。⚫ 读锁被解锁后,在没有被其他读锁锁定的前提下,所有因操作锁定写锁而。⚫ 适用于读多写少的场景。
2025-07-24 20:33:09
1
原创 如何使用人工智能算法解决实际业务问题?
总体来说,使用人工智能算法解决实际业务问题需要深入理解业务问题和数据特征,并选择适合的算法和方法进行建模和训练。在模型训练和优化过程中,需要不断地尝试和调整,以便得到最优的模型效果。最后,需要将模型部署到实际业务场景中,并不断优化和迭代。当然,我们使用人工智能算法解决实际业务问题时,在模型训练和应用过程中,需要考虑模型的可解释性和可视化,以便帮助 理解模型的运作原理和结果解释。需要采用适当的可视化技术,如散点图、热力图、线图等。在模型部署和应用过程中,需要考虑模型的更新和维护。
2025-07-24 20:32:33
301
原创 gRPC-Go基础(4)metadata和超时设置
Go在多个go routine之间传递数据使用的是Go SDK提供的context包,而context的作用范围在进程内,而gRPC使用的是跨进程的网络传输,那如何实现跨进程的元数据传输呢?
2025-07-24 20:32:00
567
翻译 RWMutex 注意事项
被阻塞的 Goroutine,其中等待时间最长的一个 Goroutine 会被唤醒。⚫ 读锁占用的情况下会阻止写,不会阻止读,多个 Goroutine 可以同时获取。⚫ 写锁被解锁后,所有因操作锁定读锁而被阻塞的 goroutine 会被唤醒,并。⚫ RWMutex 的一个写锁去锁定临界区的共享资源,如果临界区的共享资源已。被(读锁或写锁)锁定,这个写锁操作的 goroutine 将被阻塞直到解锁。⚫ 读锁被解锁后,在没有被其他读锁锁定的前提下,所有因操作锁定写锁而。⚫ 适用于读多写少的场景。
2025-07-22 22:12:15
7
原创 gRPC-Go基础(3)基础gRPC服务
前面说过,proto中定义消息结构体的关键字是message,同样,定义服务的关键字是service。// ... }
2025-07-22 22:07:23
695
原创 gRPC-Go基础(2)protobuf基础
前面讲过protobuf工具protoc的使用,本章我们将简单介绍一下protobuf的语法和相关细节。
2025-07-22 22:04:45
602
翻译 RWMutex 注意事项
被阻塞的 Goroutine,其中等待时间最长的一个 Goroutine 会被唤醒。⚫ 读锁占用的情况下会阻止写,不会阻止读,多个 Goroutine 可以同时获取。⚫ 写锁被解锁后,所有因操作锁定读锁而被阻塞的 goroutine 会被唤醒,并。⚫ RWMutex 的一个写锁去锁定临界区的共享资源,如果临界区的共享资源已。被(读锁或写锁)锁定,这个写锁操作的 goroutine 将被阻塞直到解锁。⚫ 读锁被解锁后,在没有被其他读锁锁定的前提下,所有因操作锁定写锁而。⚫ 适用于读多写少的场景。
2025-07-21 21:59:07
5
原创 gRPC-Go基础(1)protoc的使用
前面说过,grpc使用Protocol Buffer(简称protobuf)作为接口描述语言,protobuf的重点之一即是protoc工具的使用,这篇文章将介绍protoc工具的使用,特别是和go相关插件的组合使用。
2025-07-21 21:58:02
548
原创 gRPC-Go基础(1)基础知识
gRPCgRPC是Google发起的、开源的、高性能远程过程调用(RPC)框架系统,该系统基于HTTP/2协议传输,使用Protocol Buffer作为接口描述语言。在gRPC中,客户端程序可以像调用函数一样地调用不同机器上的应用程序,其客户端和服务端可以在各种gRPC支持的语言的环境之间互相通信Protocol Buffers是谷歌发起的开源的, 语言无关、平台无关、可扩展的序列化结构化数据的协议。
2025-07-21 21:57:22
244
原创 Goland配置leetcode
首先在goland的setting界面上找到Plugins,然后搜索关键字leetcode,找到LeetCode Editor,安装它。在安装后,第一次需要对其进行配置,在Tools中找到LeetCode Plugins,如下图所示进行配置。首先国内的leetcode需要配置leetcode.cn,然后语言选择Go,再选择账户和密码以及最终生成的临时文件的位置。
2025-07-20 23:07:03
383
原创 分布式信号量(Redis)
信号量,由并发编程领域的先锋人物Edsger Wybe Dijkstra提出的一种解决同步不同执行线程的方法。信号量(英语:semaphore)又称为信号标,是一个同步对象,用于保持在0至指定最大值之间的一个计数值。当线程完成一次对该semaphore对象的等待(wait)时,该计数值减一;当线程完成一次对semaphore对象的释放(release)时,计数值加一。当计数值为0,则线程等待该semaphore对象不再能成功直至该semaphore对象变成signaled状态。
2025-07-20 23:06:17
941
翻译 模拟生物自然进化的基因遗传算法
基因遗传的机制是通过基因重组和基因突变实现的。与其他优化算法相比,基因遗传算法具有以下优点:可以处理复杂的优化问题,具有并行化的能力,可以在不知道优化函数的具体形式时进行优化,适合处理具有多个局部最优解的问题等。种群大小:10 个体1:x=2 个体2:x=-5 个体3:x=8 个体4:x=-3 个体5:x=1 个体6:x=-7 个体7:x=6 个体8:x=0 个体9:x=-2 个体10:x=10。这些算法的选择取决于具体问题的特性,例如目标函数的形式、约束条件的数量和复杂度、计算资源的可用性等。
2025-07-19 23:11:07
5
原创 生物神经网络衍生出的算法
这个神经网络接收来自眼睛的图像信号,并进行处理和分析,使我们能够看到周围的世界。在这个过程中,每个神经元都接收来自其他神经元的信号,并将它们传递给下一层神经元,最终产生一个完整的视觉体验。从上表可以看出,深度学习算法是在生物神经网络的基础上发展而来的,深度学习算法中的神经网络和生物神经网络有很多相似之处,例如神经元、突触等。深度学习算法能够更好地模拟和实现生物神经网络的功能,同时也能够在许多应用领域发挥作用,例如图像识别、语音识别、自然语言处理等。
2025-07-19 23:10:26
835
原创 PyTorch之线性回归
最小二乘法是线性回归的一种,最小二乘法的基本原则是:最优拟合直线应该是使各点到回归直线的距离和最小的直线,即平方和最小。换言之,它是基于距离的,而这个距离就是我们用的最多的欧几里得距离。forward()方法,用于定义该Module进行forward时的运算,forward()方法接受一个输入,然后通过其他modules或者其他Function运算,来进行forward,返回一个输出结果。Y−f(x)表示的是残差,整个式子表示的是残差的平方和的均值,而我们的目的就是最小化这个目标函数值,以求得最优的解。
2025-07-19 23:08:40
304
翻译 一文带你了解机器学习算法
常用的距离度量是欧氏距离及更一般的pL距离。与数据集的随机选取类似,随机森林中的子树的每一个分裂过程并未用到所有的待选特征,而是从所有的待选特征中随机选取一定的特征,之后再在随机选取的特征中选取最优的特征。该算法在分类时有个主要的不足是,当样本不平衡时,如一个类的样本容量很大,而其他类样本容量很小时,有可能导致当输入一个新样本时,该样本的K个邻居中大容量类的样本占多数。简单的说,机器学习就是让机器从数据中学习,进而得到一个更加符合现实规律的模型,通过对模型的使用使得机器比以往表现的更好,这就是机器学习。
2025-07-18 22:01:19
11
原创 完整的 Meteor NPM 集成
初始化 npm 支持后,你的应用内将有一个称为文件名的文件名。在该文件中定义包,如下所示。您必须为 npm 模块定义一个绝对版本号以上内容可以使用 github 版本生成。你要用的是版本,而不是。
2025-07-18 22:00:37
855
原创 机器学习之——认识机器学习
其实很简单,只要看,你的训练集是有输入有输出,那么通过这样的训练集获取到的算法,就是监督学习算法;强化学习,通过其他学习后得到的算法,在你的另外一组数据的刺激下得到的更为精准的算法,这样的方式就是强化学习。通俗点儿讲,当你手上有一堆带有指标的数据,比如一个班级学生的身高(height)、体重(weight)、性别(gender)、成绩排名(rank),看上去这些数据是没有什么必要联系的,但是你想模拟出一个公式来计算或预测一个学生的成绩是和身高、体重、性别有某些必然联系,假设。
2025-07-18 22:00:06
352
原创 go的Ticker,Timer,Tick的区别和用法、break 和 continue
但是有一个问题,由于Tick()函数没有返回Ticker,我们无法关闭它,所以这个t1对应的Ticker用于无法关闭,会造成内存泄露。Ticker是周期性定时器,即周期性的触发一个事件,它会以一个间隔(interval)往channel发送一个事件(当前时间),而channel的接收者可以以固定的时间间隔从channel中读取事件。在go面试的时候,面试官经常会问time包的Ticker,Timer以及Tick的区别,一般在超时控制的时候用的比较多。Ticker主要用于定期循环执行某一个操作。
2025-07-17 22:43:16
239
原创 Go 重构:尽量避免使用 else、break 和 continue
但我们的主要任务是确保业务逻辑单元在任何输入情况下都能正常工作。因此,让我们使用提前返回来实现这一点。这对性能有好处,因为我们丢弃了不必要的迭代,但对代码支持和可读性不利。同样的逻辑,但是拆分成更细粒度的方法,也有精确的返回语句,可以很容易地通过测试来实现。为了正确阅读代码,您应该牢记它对操作顺序的具体影响。例如,我们有一个简单的搜索任务。对我来说,Break 和 Continue 语句总是可以分解的信号。在某些情况下,带有子任务的简单功能可能会破坏这段代码。逻辑是一样的,但是下面的做法可读性会更强。
2025-07-17 22:42:46
213
翻译 深入剖析Golang中单例模式
而Do就是让里面的代码能被只执行一次的核心代码块,代码很清晰易懂,我就不过多赘述,主要通过atomic进行原子性的对done这个状态量去变更,以及核查值是否变更过来判断该f函数是否被执行过。而这个问题对熟悉Golang的小伙伴并不是什么难事,因为Golang其实有提供sync.once这样一个接口来让某个逻辑只在这个程序中执行一次。2.该类的实例化对象对外是不可见的,且必须自行提供一个公共的访问点供客户端去使用。2.该类的实例化对象对外是不可见的,且必须自行提供一个公共的访问点供客户端去使用。
2025-07-17 22:42:20
9
原创 3个重构技巧,改进你的代码
写硬编码的数字会引起其他人的困惑,因为它们的目的没有定义。对于任何想要提高代码质量、性能和可维护性的开发人员来说,重构都是必不可少的实践。通过花时间分析和优化代码,您可以消除冗余,降低复杂性,并创建一个更高效、可扩展的应用程序。它是通过将长而复杂的代码块提取成更小、更易于管理的方法来实现的。在重构代码时,您必须注意重复的代码。当找到这样的代码时,一种处理方法是将这样的代码转换为单个可重用的函数/方法。你看,我们把循环中计算商品总价格的代码提出成了一个单独的函数,第一个函数是不是变得简单而且易读了呢。
2025-07-16 22:39:04
292
原创 GORM GEN 生成代码如何自定义方法和表名
相信你在日常使用gorm gen开发的过程中也有这种场景:通过gen的g.GenerateModel(“users”)等方式,从数据库或者sql文件生成了对应的gorm model,已经满足了基本的使用;某些时候希望model上能有一些通用的方法,比如IsEmpty(),判断model是否为空;如果生成之后在修改model,添加自定义方法,下次生成的时候会被覆盖,因此gen提供了WithMethodOption,允许你在生成代码的时候就添加自定义方法,具体使用如下:写一个通用方法的模版。
2025-07-16 22:38:31
661
翻译 学习gorm:彻底弄懂Find、Take、First和Last函数的区别
本文主要讲解了First、Last、Take和Find查询函数的不同之处。希望在使用过程中大家根据自己的应用场景选择合适的函数。
2025-07-16 22:37:46
5
翻译 Go语言中的定时器和打点器
本文深入介绍了在 Go 语言中使用 time.Timer 和周期性定时器(time.Ticker)来实现定时任务和事件触发的方法。定时器是在许多应用场景中都非常有用的工具,它们可以帮助我们在指定的时间点执行特定的操作,或者在一定时间间隔内定期执行任务。
2025-07-15 22:19:11
14
原创 在Go中处理时间数据
这可能是软件包中最常用的方法。我们如何知道当前的时间呢?这就是当前的时间。这是很麻烦的,所以我将把它分解成几个部分。我们将在本文后面介绍单调时钟。我们现在可以继续前进。有没有更好的方法来格式化这个?你打赌。以下是如何提取时间的每个元素。很简单,对吧?我们如何以更漂亮的格式打印它?2023 4 17您可以看到我们如何使用 fmt.Printf 函数来根据自己的喜好格式化时间。但是如果我们想用名字显示月份,比如二月而不是 2 怎么办?
2025-07-15 22:18:40
379
原创 你会处理 go 中的 nil 吗
从上面的代码我们看到,SomeThing 函数中定义的 myError 是 *MyError 类型,虽然返回了 nil,但是 err 的类型不是 nil,所以 err!如果我们在函数中用 interface{} 作为参数的类型,表示并不代表参数就是 interface{} 类型,而是任意类型,调用时传入啥类型就是啥类型,如下代码。所以只有当我们传入的参数类型是 interface{},且 value 为 nil 时,i == nil 才会生效。居然发现 IsNil 中的 i == nil 不生效了。
2025-07-15 22:17:48
326
翻译 Nginx部署Gin Web服务
Go是一门开放源代码的编程语言,它与其他语言相比有着更好的性能和更高的并发性。Gin是一个用于构建Web应用程序的轻量级框架,它提供了简单而强大的API来实现Web应用程序和微服务的开发。在本文中,我们将介绍如何使用Nginx部署Go Gin开发的Web服务,并提供centos7系统上的Nginx安装步骤。在浏览器中输入服务器的IP地址或域名,如果能看到“Welcome to nginx!在浏览器中输入您的服务器的IP地址或域名。恭喜,您已经成功地使用Nginx部署了Go Gin开发的Web服务!
2025-07-14 19:47:41
28
原创 Go 小知识之 Go 中如何使用 set
index 可以通过整除获取,比如我们想知道表示 65 的 bit 在切片的哪个 index,通过 65 / 64 即可获得,如果为了高效,也可以用位运算实现,即用移位替换除法,比如 65 >> 6,6 表示移位偏移,即 2^n = 64 的 n。postion 是除法的余数,我们可以通过模运算获得,比如 65 % 64 = 1,同样为了效率,也有相应的位运算实现,比如 65 & 0b00111111,即 65 & 63。我觉得,通过这篇文章,Go 中 set 的使用,基本都可以搞定了。
2025-07-14 19:47:02
408
原创 Go环境变量设置全攻略
在进行Go开发的时候,设置Go的环境变量信息是必须的。下面介绍windows和Linux,以及Go自身提供的命令进行设置的形式。go.sh文件,把上面两句抄上就行。当然,你也可以只给自己当前的登录用户使用,那就设置自己的profile的加载.当你安装的GO的语言版本大于1.13的时候,那么就不用这么麻烦了,直接使用go env -w命令就行了。Go version >= 1.13 当你的GO的版本大于1.13的时候。这个我试过,即使你关闭了终端,新打开,还是可以的,这个命令比较的无伤害.
2025-07-14 19:46:18
345
翻译 如何使用Java编写一个简单的小游戏
本文向您介绍了如何使用Java编写一个简单的小游戏。我们逐步介绍了项目设置和准备工作、创建游戏窗口、添加游戏元素以及绘制游戏元素的基本步骤。希望这对您入门游戏开发有所帮助,并激发您探索更多有趣的游戏开发技术。
2025-07-13 16:29:15
11
原创 用go封装一下封禁功能
封禁业务也是在一般项目中比较常见的业务。我们也将它封装在库中作为功能之一。我们同样使用adapter作为底层的存储结构,将封禁标示作为k-v结构存储。把id和服务名称service作为key,把封禁的级别level作为value,以此我们能实现一些比较常见的封禁业务。
2025-07-13 16:28:40
319
原创 Go实现MapReduce
MapReduce是一种分布式计算编程模型,用于处理大规模数据集。它主要包含两个核心操作:映射(Map)和归约(Reduce)。映射(Map) :在这一阶段,数据集被分解成小块,每个小块通过一个映射函数进行处理。这个函数将数据元素转化为一组键值对,其中键用于标识数据元素,而值包含有关数据元素的信息。归约(Reduce) :在这一阶段,所有的键值对被分组并合并在一起,然后通过归约函数进行处理。归约函数将相同键的值组合在一起,以产生一个最终的结果。
2025-07-13 16:28:04
271
翻译 完美的错误处理:Go 语言最佳实践分享
在本文中,我们将深入探讨 Go 语言中的错误处理机制,包括错误的基本概念、错误处理的基本方法、错误封装和自定义错误类型等方面,帮助读者更好地理解和掌握 Go 语言的错误处理技巧。它接受两个参数,第一个参数是要检查的错误,第二个参数是一个指针,指向一个变量,这个变量的类型就是我们要获取的错误的类型。在之前的版本中,要比较一个 error 是否和一个特定的错误相同,需要使用字符串进行判断,但这种方式并不可靠,因为有可能在不同的地方,同一个错误信息被表示为不同的字符串,这样的话使用字符串进行判断就会失效。
2025-07-12 21:46:51
24
1
原创 Go并发:使用sync.Pool来性能优化
它的主要用途是存储那些可以被复用的临时对象,以便在需要时快速获取,而不是每次都进行新的对象分配。可见,在多个goroutine的并发情况下,是安全,另外可以观察到,sync.Pool没有一直【Creating a new object】去New很多棋牌室。在之前的文章中有提到的享元模式设计模式:flyweight(享元)的在棋牌游戏的应用的案例。本文简述了sync.Pool的基础使用,以及了如何使用其对实践棋牌室游戏的案例进行优化过程。接着,通过一个简单的例子,来看看是如何使用的。
2025-07-12 21:45:52
238
原创 Golang 中 Error 的设计及最佳实践
Go 中的 error 就是一个普通的值对象,而其他语言如 Java 中的 Exception 将会造成程序控制流的终止和其他行为,Exception 与普通的值不同。即:因为异常会将错误的描述和处理错误的控制流纠缠在一起,通常会导致程序错误以一种难以理解的栈追踪的方式被报告给终端用户,这种方式充满了程序结构的信息,但是缺少关于哪里出错的易于理解的上下文信息。Tips: 建议在底层只需要返回清晰地错误信息,每一层包裹一些重要并且简洁的上下文信息,并且最终在程序的顶层或者某一个不得不处理的层级处理该错误。
2025-07-12 21:45:16
340
翻译 Go 重构:尽量避免使用 else、break 和 continue
但我们的主要任务是确保业务逻辑单元在任何输入情况下都能正常工作。因此,让我们使用提前返回来实现这一点。这对性能有好处,因为我们丢弃了不必要的迭代,但对代码支持和可读性不利。同样的逻辑,但是拆分成更细粒度的方法,也有精确的返回语句,可以很容易地通过测试来实现。为了正确阅读代码,您应该牢记它对操作顺序的具体影响。例如,我们有一个简单的搜索任务。对我来说,Break 和 Continue 语句总是可以分解的信号。在某些情况下,带有子任务的简单功能可能会破坏这段代码。逻辑是一样的,但是下面的做法可读性会更强。
2025-07-11 23:34:53
8
原创 在Go中理解栈和先进先出原则
在本博文中,我们将探讨如何在 Go 中实现和使用堆栈,以及堆栈如何遵循先进先出 (FIFO) 原则。Push方法将一个新的元素追加到片段的末尾,而Pop方法则从片段中删除并返回最后一个元素。堆栈的主要特点是遵循后进先出(LIFO)原则:最后一个添加到堆栈的元素是第一个被移除的元素。当我们运行这段代码时,我们可以看到元素从堆栈中移除的顺序与添加的顺序相反。当我们运行这段代码时,我们可以看到元素是按照添加的顺序从队列中移出的。使用堆栈实现队列的一种方法是使用两个堆栈:一个用于添加元素,另一个用于移除元素。
2025-07-11 23:34:18
213
原创 在Go中过滤范型集合:性能回顾
此外,我对分配的数量也有点担心。那是因为我的两个过滤函数都是将过滤后的项目从输入集合复制到输出集合中。我不是把过滤后的结果写到一个新的集合中,然后再返回,而是把结果写回原来的集合中,并保留一个额外的索引,以便在过滤后的项目数上 "切 "出一个片断。如果我需要过滤一个整数的集合,那么我就需要另一个极其相似的函数。现在我可以写一个测试用例,判断 filterStrings 函数的输出与我的过滤范型器的输出相同。首先,我需要一个随机集合(在我的例子中,是字符串)的生成器。到最后,我需要做的是过滤原始的收集。
2025-07-11 23:33:44
357
CC++ 技术面试基础知识总结,包括语言、程序库、数据结构、算法、系统、网络、链接装载库等知识及面试经验、招聘、内推等信息.zip
2025-07-14
OpenCV-contrib-module-Chinese-Tutorials-master (2).zip
2025-07-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人