- 博客(63)
- 收藏
- 关注
原创 redis实现分布式锁,go实现完整code
Redis 分布式锁是一种使用 Redis 数据库实现分布式锁的方式,可以保证在分布式环境中同一时间只有一个可以访问共享资源。
2024-10-29 15:31:44
458
原创 关于广告的一些术语的解释
CPS的模式较为固定,例如电商平台京东,我们就可以投放广告让用户进行购买商品,当用户成功通过广告购买商品之后就算一次订单计费,可以根据此订单进行广告计费,这种条件也非常苛刻,但是收益较高,如果媒体配合活动拉新,例如0.01买东西,这种计费模式还是非常可观。rtb是广告中一种商业模式,通过竞价的方式来决定流量的归属权,在竞价中有一价二价的模式,现在大部分都是一价的模式,有地板价的存在,这种竞价也是价高者得,二价的模式有一种博弈论,有感兴趣的小伙伴可以自行搜索。
2024-10-09 17:17:24
537
原创 go context详解
当定时器到期时,会调用cancel方法关闭通道,级联关闭当前Context派生的子Context,并取消与父Context的绑定关系。每个派生出的子Context都会创建一个新的退出通道,这样,只要组织好Context之间的关系,就可以实现继承链上退出信号的传递。而WithDeadline函数会先判断父Context设置的超时时间是否比当前Context的超时时间短,如果是,那么子协程会随着父Context的退出而退出,没有必要再设置定时器。因此,要具体使用Context,需要派生出新的Context。
2024-05-06 11:23:35
931
2
原创 n个协程交替打印1-100,详细注释
思路:创建等同goroutine数量的chan切片,每个chan通过阻塞的性质控制goroutine的顺序。2、必须要加协程去发送这条数据,不然直接死锁了,因为不是协程发数据就会一直阻塞导致死锁。1、这一步主要是给最后一个chan先发送数据,保证第一个chan可以取到数据不阻塞。这道题是面试时经常遇到的一道题,是考察对goroutine和channel的应用。
2024-03-13 15:55:46
520
原创 kafka实现延迟队列
首先说一下延迟队列这个东西,实际上实现他的方法有很多,kafka实现并不是一个最好的选择,例如redis的zset可以实现,rocketmq天然的可以实现,rabbitmq也可以实现。如果切换前几种方案成本高的情况下,那么就使用kafka实现,实际上kafka实现延迟队列也是借用了rocketmq的延迟队列思想,rocketmq的延迟时间是固定的几个,并不是自定义的,但是kafka可以实现自定义的延迟时间,但是不能过多,因为是依据topic实现的,接下来我使用go实现简单的kafka的延迟队列。
2024-01-31 17:49:05
4532
1
原创 * error decoding ‘exporters‘: unknown type: “jaeger“ for id: “jaeger“
在使用otel收集jaeger时候出现了这个错误,很显然jaeger exporters在0.85.0中被删除了,因为jaeger添加了对otlp的本机支持。把jaeger 改为otlp出口就可以了。
2023-11-01 10:39:37
508
1
原创 网站反应慢?如何排查?
1、服务器出口带宽不够用,本身服务器购买的出口带宽比较小。一旦并发量大的话,就会造成分给每个用户的出口带宽就小,访问速度自然就会慢。跨运营商网络导致带宽缩减。例如,公司网站放在电信的网络上,那么客户这边对接是长城宽带或联通,这也可能导致带宽的缩减。2、服务器负载过大,导致响应不过来可以从两个方面入手分析:分析系统负载,使用 w 命令或者 uptime 命令查看系统负载。如果负载很高,则使用 top 命令查看 CPU ,MEM 等占用情况,要么是 CPU 繁忙,要么是内存不够。
2023-11-01 10:31:15
367
原创 协程切换为什么就要比线程低?
本文我们主要介绍为什么 Go 协程比进程和线程占用的系统资源低,通过进程、线程、协程的 CPU 资源和内存占用的比较,发现无论是在切换时消耗的 CPU 资源(时间片),还是内存占用,Go 协程都有明显优势。一句话总结就是 Go 协程的切换成本和内存占用比线程和进程都低。需要注意的是,Go 协程占用系统资源低,并不代表可以无限创建 Go 协程。
2023-10-19 16:03:30
319
原创 go在1.21.0新版本特性
众所周知,我们在使用golang的时候没有max和min函数,很多小伙伴在拿go写算法的时候都要去自己简单的构造max和min函数,不过go终于在1.21.0内置max和min和clear函数。
2023-10-13 11:21:26
959
原创 go中读写锁(rwmutex)源码解读实现原理
读写锁区分读锁和写锁,而普通的互斥锁不区分,读写锁主要应用在读多写少的场景,既保证了并发读的执行效率,又保证了线程之间的安全。
2023-08-29 10:35:39
661
原创 golang中byte和rune的区别?
类型本质上是uint8类型的别名,代表的就是ascll码的一个字符。类型本质上其实是int32类型的别名,代表的就是一个UTF-8字符。在go语言中都是字符类型,从源码来看他们都是别名形式。
2023-08-28 17:56:50
529
原创 使用前缀树实现敏感词过滤
前缀树(Prefix Tree),也被称为字典树(Trie),是一种用于高效存储和检索字符串的数据结构。它的主要特点是能够快速地查找具有相同前缀的字符串集合。
2023-08-12 15:16:28
579
原创 关于gin框架的脚手架
本脚手架是基于gin框架实现内置zap日志库viper读取配置文件jwt & cors & track的中间件缓存使用redis,orm框架使用gorm七牛云oss文件上传使用依赖倒置原则抽象dao层dockerfile制作镜像,docker-compose编排项目使用shell脚本自动生成dao、cache、service、svc模板代码jaeger的链路追踪收集到jaeger-uielk日志收集系统。
2023-07-21 21:20:21
833
原创 go中string转[]byte会发生内存拷贝吗
今天来了解一下go语言的string的底层是怎么实现的,我们知道java的string是一个类实现的,其实go也是类似的,go使用结构体实现了string。
2023-07-21 19:36:42
318
原创 go切片扩容机制
通过这个结果可以明显的看出,修改新切片的值居然影响到了老切片的值了,扩容以后并没有新建一个新的数组,并且append操作也改变了原来数组的值,如果原数组上有多个切片,那么这些切片都会影响,产生了莫名的bug! 第二种情况就是扩容策略的例子了,在扩容之后产生了新的切片,因为原数组的容量达到了最大值,再扩容都会开出一片新的内存,把原来的值拷贝过来,再进行后续操作也不会影响原数组。扩容之后数组就一定是新的吗?
2023-07-09 21:25:09
458
原创 mysql聚簇索引和非聚簇索引的优缺点
聚簇索引适合于那些经常需要按照索引顺序进行数据查询的表,例如时间序列数据表;而非聚簇索引适合于那些需要频繁插入和更新数据的表,例如日志表。在实际使用中,应根据表的特点选择合适的索引类型。
2023-04-02 20:07:46
1262
原创 go实现简易的区块链(1)
区块链是一种安全共享的去中心化的数据账本。本质上,区块链只是一个分布式数据库而已。不过使他独一无二的事,区块链是一个公开的数据库,而不是一个私有的数据库,也就是说,每个使用它的人都有完整或部分的副本。数据被细分为多个共享区块,并以加密哈希形式的唯一标识符链接在一起。此外,也正是由于区块链,才使得加密货币和智能合约成为现实。
2022-11-04 19:49:29
2848
1
原创 go的切片扩容机制
通过这个结果可以明显的看出,修改新切片的值居然影响到了老切片的值了,扩容以后并没有新建一个新的数组,并且append操作也改变了原来数组的值,如果原数组上有多个切片,那么这些切片都会影响,产生了莫名的bug! 第二种情况就是扩容策略的例子了,在扩容之后产生了新的切片,因为原数组的容量达到了最大值,再扩容都会开出一片新的内存,把原来的值拷贝过来,再进行后续操作也不会影响原数组。扩容之后数组就一定是新的吗?
2022-11-02 19:47:58
1520
原创 MySQL事务高频面试题
对于一个事务,要么事务内的SQL全部执行,要么都不执行脏读 Dirty Read(读未提交数据)当事务A正在访问一个数据并进行了修改,但这种修改还没有提交到数据库中,此时事务B也访问到了这个数据,并且使用了这个数据。由于这个数据是还没有提交的数据,那么事务B读取的这个数据是“脏数据”,那么之后的操作都是不正确的。这种情况常发生于转账与取款操作中。幻读 Phantom Read(前后多次读取,数据总量不一致)
2022-10-04 08:30:54
1673
原创 Illegal mix of collations (utf8mb4_unicode_ci,IMPLICIT) and (utf8mb4_general_ci,IMPLICIT) for operat
如果没有表格的相关信息,这是最好的伪代码形式。可以解决当前问题,指定排序规则,让两张表排序规则相同。
2022-08-03 08:27:41
1675
原创 如何使用docker-compose+实战官网用例(超简单)
简介首先我们了解一下什么是docker-compose:Docker Compose 并不是通过脚本和各种冗长的 docker 命令来将应用组件组织起来,而是通过一个声明式的配置文件描述整个应用,从而使用一条命令完成部署。应用部署成功后,还可以通过一系列简单的命令实现对其完整声明周期的管理。甚至,配置文件还可以置于版本控制系统中进行存储和管理。作用:批量容器编排我们来简单理解什么是docker-composeCompose是Docker官方的开源项目,需要安装!Dockerfile让
2022-04-26 21:18:52
3553
原创 如何在服务器用docker搭建Redis集群
用docker部署Redis集群这里用的是分片+高可用+负载均衡,三主三从第一步创建网卡# 创建网卡docker network create redis --subnet 172.38.0.0/16第二步用shell脚本配置(一个一个或者用shell脚本创建都行,建议shell脚本!)# 通过脚本创建六个redis配置for port in $(seq 1 6); \do \mkdir -p /mydata/redis/node-${port}/conftouch /myd
2022-04-24 11:00:51
2530
2
原创 在Docker发布自己的镜像方法
发布自己的镜像到Docker hub首先去 docker Hub 注册一个账号,在我们服务器上提交自己的镜像# push到我们的服务器上[root@QCSJdeLinux ~]# docker push diytomcatThe push refers to repository [docker.io/library/diytomcat]2eaca873a720: Preparing 1b38cc4085a8: Preparing 088ebb58d264: Preparing c067
2022-04-23 21:53:38
609
原创 Docker核心(数据卷+实战用例)
容器数据卷什么是容器数据卷(容器数据卷能做什么)将应用和环境打包成一个镜像!数据?如果数据都在容器中,那么我们容器删除,数据就会丢失!需求:数据可以持久化MySQL,容器删了,删库跑路!需求:MySQL数据可以存储在本地!容器之间可以有一个数据共享技术!Docker容器中产生的数据,同步到本地!这就是卷技术,目录的挂载,将我们容器内的目录挂载到linux目录上面!**总结: **容器的持久化和同步操作!容器间数据也是可以共享的!使用数据卷方式一: 直接使用命令来挂载 -vdocker
2022-04-23 21:48:52
1511
原创 Docker常用命令(你想要的这都有)
Docker的常用命令帮助命令docker version # docker版本信息docker info # 系统级别的信息,包括镜像和容器的数量docker 命令 --help 镜像命令docker images 查看所有本地的主机上的镜像mac@QCSJdeMacBook-Pro ~ % docker imagesREPOSITORY TAG IMAGE ID CREATED SIZEmysql 5.7
2022-04-23 21:43:12
197
原创 如何在服务器上用docker部署msyql(看这一篇就够了)
如何在服务器用docker部署mysql第一步:先在服务器上下载docker,具体下载看docker官网(记得配置阿里云镜像,国外的太慢了)第二步:用docker下载mysql(我这里下载的是5.7版本)docker pull mysql:5.7第三部:用docker运行mysql服务docker run --name dockermysql -p 3306:3306 -e MYSQL_ROOT_PASSWORD=你自己设置的密码 -d mysql--name 为mysql的实例设置别名。
2022-04-21 20:09:48
2147
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人