位运算是一种在计算机中直接操作二进制位的方法,它通常比其他算数运算速度更快。在解决一些特定的问题的时候,位运算可以提供高效的解决方案。下面我们来详细的学习一下位运算的相关操作。 基本操作 按位与(AND):& 两个二进制位都为1时,结果为1,否则位0。 示例: let a = 5; // 0101 let b = 3; // 001 ...
位运算是一种在计算机中直接操作二进制位的方法,它通常比其他算数运算速度更快。在解决一些特定的问题的时候,位运算可以提供高效的解决方案。下面我们来详细的学习一下位运算的相关操作。 基本操作 按位与(AND):& 两个二进制位都为1时,结果为1,否则位0。 示例: let a = 5; // 0101 let b = 3; // 001 ...
chrony是一个时间同步工具,旨在替换掉传统的ntpd服务。特别适合现在的动态设备(如虚拟机、容器和移动设备),具有更快的同步速度和更高的灵活性。下面是关于chrony的原理和安装教程。 chrony的原理 客户端和服务器通信:chronyd作为客户端,向配置的ntp服务器发送时间同步请求。 计算时间偏差:根据服务器的响应时 ...
打开官网下载链接 官网下载链接 centos安装 sudo yum install -y https://dl.grafana.com/enterprise/release/grafana-enterprise-11.4 ...
概述 在现代的微服务架构中,监控系统的性能和健康状况是至关重要的。Prometheus 是一个开源的监控和告警工具,广泛用于收集和查询时间序列数据。Gin 是一个高性能的 Go Web 框架,结合 Prometheus 可以方便地监控 HTTP 请求、系统资源使用情况以及 Go 运行时的状态。 本文将介绍如何在 Gin 框架中集成 Prometheus,并通过多个关键指标来监控系统的性 ...
分布式锁在分布式系统中非常重要,它可以帮助我们避免多个进程或线程同时访问共享资源,从而避免数据一致性问题。在Go语言中,我们可以使用Redis来实现分布式锁。 获取锁 在Redis中,我们可以使用SETNX命令来获取锁。SETNX命令的作用是,如果指定的key不存在,则设置key的值为指定的value,并返回1;如果指定的key已经存在,则不设置key的值,并返回0。 su ...
prometheus 是一款开源的监控和告警系统,它可以帮助你收集和存储各种指标数据,并提供查询和可视化功能。Gin 是一款高性能的 Go 语言 Web 框架,它可以用来构建高性能的 Web 应用程序。 在本教程中,我们将介绍如何在 Gin 集成 Prometheus 来收集和存储该应用程序的指标数据。 初始化prometheus服务 package s ...
1. 创建prometheus用户 创建prometheus用户,用于运行prometheus服务 sudo useradd --no-create-home --shell /bin/false prometheus 2. 下载安装包 下载最新的prometheus安装包 sudo wget https://github. ...
什么是yum YUM(全称Yellowdog Updater,Modified)是一个在类Unix系统中,特别是Red Hat系列的发行版(如Centos、RHEL、Fedora)中,常用的包管理工具。它用来自动的安装、更新、删除和管理软件包,可以简化系统管理员的工作。 yum的工作原理 依赖管理:yum会自动处理软件包的依赖 ...
背景 最近从grafana的alert中收到一个告警,告警内容是K8S服务pod重启了,查看pod日志描述信息显示如下: kubectl describe xxxxxx-api-6577f45dd5-9gprq Name: xxxxxx-api-6577f45dd5-9gprq Namespace: xxxxxx Prior ...
背景 最近,在编译打包镜像的老是会失败,查看jenkins编译日志,发现是磁盘空间不足导致的。报错日志如下: #14 97.58 go: failed to trim cache: open /root/.cache/go-build/trim.txt: no space left on device Dockerfile:41 ...
背景 公司内部服务之间调用是,使用的签名如下: // 签名验证 func ValidateSignatureMiddleware(svc *service.Service) gin.HandlerFunc { return func(ctx *gin.Context) { ctxx := contextx.NewContextx(ctx, svc) if svc ...
在go语言中,从标准输入(os.Stdin)读取数据的常见方式有下面几种: 1. 使用fmt.Scan系列函数 fmt.Scan系列函数提供了简单的从标准输入读取数据的方法。 1.1 fmt.Scan 从标准输入读取由空白符(空格、制表符、换行符等)分隔的值,并将这些值保存到提供的参数中。 换行符被视为空白符,因此会忽略掉换行符继续输入。 返 ...
在实际的生产环境中,为了保障系统的安全性,通常会通过IP白名单来限制访问来源,确保只有在白名单中的受信任的IP地址才能访问特定的服务。常见的IP白名单主要有以下的几种方式: 单个IP配置 CIDR表示法配置 通用IP段配置 通配符的配置 单个IP配置 这种方式用于指定固定的IP地址。在白名单中直接配置: 192.168.100.60 CI ...
背景介绍 公司的一个公众号内嵌H5页面,用户在公众号内打开这个H5页面,点击页面的按钮打开微信小程序来领取优惠券。 运营反馈从昨天开始,用户点击打开小程序的按钮后没有反应,但是点击跳转h5的按钮可以正常跳转。而且时好时坏,并不是每次点击都无效。由于影响范围较大(公众号的主要功能受影响,受影响活跃用户在5w左右),所以进行了立即排查。 页面结构 H5的页面内部的主要逻辑是展示优惠 ...
在Go语言中,接口是一个非常重要的概念,用于定义一组行为的集合,任何实现了该接口方法集的类型都可以视为该接口的实现。在接口的使用过程中,有一种较为高级的技巧,即通过类型断言来确保某个类型实现了接口。这篇博客将详细介绍其中一种常用方式: var _ Buffer = (*StringBuffer)(nil) 这行代码看起来简单,却非常实用。在大型项目中,它可以帮助我们避免 ...
Go语言中并没有内置的三元运算符(类似a ? b : c),但可以通过定义一个泛型函数 Ter 来实现相同的效果。以下是详细的实现与使用示例。 实现三元运算符函数 在Go 1.18+版本中引入了泛型,允许定义泛型函数。Ter 函数的实现如下: // 三元运算符函数 func TerT any T { if cond { r ...
在编程过程中,我们经常需要比较两个值是否相等。go提供了丰富的数据类型,那么这些类型都是怎么进行等值比较的呢?下面我们来学习一下。 go中的数据类型 基本类型 整型 (int8, int16, int32, int64, int, uint8, uint16, uint32, uint64, uint, byte, rune) 浮点型 (fl ...
什么是Bitmap 位图(Bitmap)是一种在计算机领域广泛使用的数据结构,主要用于高效地表示和操作大量布尔值(0或1)的集合。它通过利用位级运算的特性,将每个布尔值存储在一个二进制位(bit)中,从而实现了空间高效和运算高效的目标。 位图的基本原理是使用一个连续的位序列(一个位就是0或1)来表示一组元素的集合。每个元素在位图中对应一个固定的位位置,如果该位为1,则表示该元素存在于集 ...
我们在搭建完服务器之后,默认的时区通常是Etc/UTC (UTC, +0000)。 Etc/UTC 是一个特殊的时区标识,代表协调世界时(Coordinated Universal Time,缩写为UTC)或格林威治标准时间(Greenwich Mean Time,缩写为GMT)。这是一个不考虑夏令时的时区,始终保持不变。 "+0000" 是与UTC时区关联的时区偏移值,表示该时 ...
背景 最近需要配置一个web服务,该web服务提供了HTTP和wss两种协议通信,在配置反向代理的过程中,wss协议的请求一直失败。了解后发现是相关参数未设置的问题,下面我将就我遇到的这个问题,简要的介绍一下什么是wss协议,以及如何正确的配置nginx代理wss。 什么是wss WSS, 全称:WebSocket Secure。顾名思义,就是安全的` ...
在服务器上经常会有文件内容部分或者全量替换的操作,下面我们来学习一下如何在vim编辑器里执行替换操作。 语法 替换命令的基本语法如下: :%s/要替换的文本/新文本/g 这个命令包括以下部分: :%s:表示对整个文档执行替换操作。 /要替换的文本:在这里指定你要查找和替换的文本。 /新文本:在这里指定你要替换成的新文本。 g ...
HTTP基本身份验证: 这是最简单的身份验证方法,它要求用户提供用户名和密码以访问受保护的资源。配置示例: location /secure { auth_basic "Restricted Area"; authbasicuser_file /etc/nginx/.htpasswd; } `authbasicuser_file参数指定存储 ...
背景 最近在配置一个web代理服务,除了http代理外,还需配置wss协议代理。这篇博客记录一下如何使用nginx配置wss代理。 配置 如何配置Nginx支持WSS协议。 location /websocket { proxypass http://backendserver; # WebSocket后端的地址 proxyhttpve ...
根据ubuntu官方文档关于UFW命令的介绍,UFW(Uncomplicated Firewall),UFW 旨在简化 iptables 防火墙配置,提供了一种用户友好的方法来创建基于 IPv4 或 IPv6 主机的防火墙。默认情况下,UFW 最初处于禁用状态。从 ufw 手册页:"UFW并 ...
在Ubuntu上设置静态IP地址需要编辑网络配置文件。以下是在Ubuntu 20.04上设置静态IP地址的步骤: 查看网络接口名称 $ ip addr 1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback ...
背景 最近在给自己的服务器安装ubuntu server系统的时候,所有的选项都是用了安装引导的推荐选项,导致只分配了100G的磁盘空间,而磁盘剩余空间为1.8T。 $ ubuntu@ubuntu:~$ lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINTS nvme0n1 ...
添加Graphics Drivers PPA PPA(Personal Package Archive)是一种用于在Ubuntu中安装软件的方式。输入以下命令将Graphics Drivers PPA添加到系统中: $ sudo add-apt-repository ppa:graphics-drivers/ppa 按下回车后,系统可能会要求你输入管理员密码。 ...
什么是Embedding? 嵌入数据(Embedding Data)是一种将高维数据映射到低维空间的技术,通常应用于自然语言处理(NLP)和机器学习领域。在NLP中,词嵌入是一种常见的应用,它将单词映射到连续向量空间中,使得语义相近的词在向量空间中距离较近。 什么是SentenceTransformers? SentenceTransformers 是一个用于将句子、文本和图像生 ...
Jupyter是一个开源的交互式计算环境,最初是用于支持Python编程语言的交互式数据分析和可视化工作。它的名称由三个主要支持的编程语言,即Julia、Python和R(R语言)的开头字母组成。Jupyter提供了一个基于Web的界面,允许用户在浏览器中创建和分享文档,这些文档可以包含实时代码、方程、图表、可视化结果以及文本说明,从而实现了代码和解释性内容的结合。 Jupyter最显著的特点 ...
最近新搭建了一套CI/CD,大体流程上是通过git提交代码到gitea,通过gitea仓库的web钩子来触发Jenkins运行代码打包(golang docker)和发布(kuboard k8s)的脚本。但是在昨天运行的过程中,一直构建失败,报错代码如下: #12 37.01 # github.com/gin-gonic/gin #12 37.0 ...