- 博客(99)
- 收藏
- 关注
原创 mysql云数据库使用规范
腾讯云mysql云数据库使用规范:https://cloud.tencent.com/document/product/236/13390。
2025-02-12 16:10:00
478
原创 go内存逃逸和GC(垃圾回收)工作原理
首先将根对象标记为灰色,加入灰色集合,垃圾搜集器取出一个灰色对象,将其标记为黑色,并将其指向的对象标记为灰色,加入灰色集合。为了解决这个问题,Go 使用了内存屏障技术,它是在用户程序读取对象、创建新对象以及更新对象指针时执行的一段代码,类似于一个钩子。但在标记和用户程序并发执行过程中,用户程序删除了 C 对 D 的引用,而 A 获得了 D 的引用。标记清除算法的一大问题是在标记期间,需要暂停程序(Stop the world,STW),标记结束之后,用户程序才可以继续执行。
2025-01-17 16:47:48
729
原创 订单系统设计
状态(未支付,待确认,待发货,已发货,待确认收获,已完成,已退款)下单商品信息(商品id,总金额、单价、应付、快照)即使不涉及真实的交易流水也会产生账,比如调账。侧重交易:发生真实的资金流动。类型:微信支付、支付宝支付。消费者发起的一次交易请求。面向对象:消费者、经营者。面向对象:消费者、经营者。类型:支付账单、退款账单。面向对象:财务、技术人员。面向对象:财务人员、商家。类型:收入流水、支出流水。记录每次支付的详细信息。记录商家的真实资金流动。消费者的资金变动记录。
2025-01-16 10:22:46
158
原创 mysql事务及隔离机制
可重复读(Repeatable Read):确保同一事务的多次读取结果一致,但可能发生幻读。Mysql默认的隔离级别是RR 可重复读级别。但是通过MVCC机制解决了读-写的并发问题。串行化是最严格的隔离级别,但是并发时每次读和写都需要加锁,会导致性能差。操作都要阻塞,这样就会导致 MySQL 的并发性能极差。,解决并发问题,就需要加锁。之间的操作才可以并发执行,MySql提供了一种。
2025-01-09 17:32:49
320
转载 MySQL是怎么保证持久性的redolog
有了redo log后,commit后虽然不会直接刷新到磁盘中,但是在内存结构中的Redolog Buffer会记录事务中的物理修改信息(即数据页变化),在commit后会立即将redolog Buffer中redo log的日志信息刷新到磁盘中的redo log file(重做日志文件)中,持久化的保存在磁盘文件中。这样的话,在一段时间后,Buffer Pool里的脏页刷新到 磁盘的过程中,即使出错了,那么也可以通过磁盘中的redo log file日志文件来进行数据恢复,保证 数据的持久化!
2025-01-08 17:26:35
21
原创 mysql创建用户及数据库授权
修改密码:update mysql.user set password=password(‘新密码’) where user=‘username’;创建用户:CREATE USER ‘username’@‘%’ IDENTIFIED BY ‘userpwd’;给用户授权:grant all privileges on 数据库名.* to ‘user1’@‘%’;查看创建的数据库:show create database test_a。创建数据库:create database test_a。
2023-07-12 17:48:48
527
原创 golang中的枚举iota
1、const内的常量每增加一行,iota的计数增加1。2、如果指定了规则,那么后面将延续这个规则。看起来很方便,但是需要注意几个问题。
2023-07-12 16:17:39
147
原创 go性能调优之pprof
pprofpprof是go语言自带的性能分析工具,在对go程序进行故障定位、性能调优时应用非常广泛。pprof是一个分析工具,通过go tool pprof可以直接对采集样本进行分析。什么情况下需要进行性能调优一般常规内容:cpu:程序对cpu的使用情况 - 使用时长,占比等内存:程序对cpu的使用情况 - 使用时长,占比,内存泄露等。如果在往里分,程序堆、栈使用情况I/O:IO的使用情况 - 哪个程序IO占用时间比较长golang 程序中:goroutine:go的协程使用情况,调
2022-03-08 23:57:22
1728
原创 docker容器网络
host、bridge与nonedocker在安装好会自带三个网络,通过docker network ls可以查看,分别为host、bridge、none。host:与主机共用网络环境bridge:网桥模式,docker安装启动后,会在宿主机创建一个名为docker0的虚拟网络接口(网桥),默认选择172.17.0.1/16网段,通过docker0与iptables nat表配置与宿主机通信,在这个模式下,连在同一网桥上的容器可以互相通信none:无网络环境在docker run创建容器时,可
2022-03-07 23:12:51
797
原创 linux下常用软件的代理配置
yum配置yum源:在/etc/yum.repos.d/目录下创建yum源文件配置yum代理:echo "proxy=http://proxy.example.com:8080" >> /etc/yum.conf全局配置vi ~/.bashrcexport http_proxy=http://proxy.example.com:8080/export https_proxy=http://proxy.example.com:8080/source ~/.bashrcwg
2022-03-07 22:32:58
775
原创 用户鉴权之JWT和AKSK
JWT和AK/SKJWT和AK/SK都是用于鉴权的。由于http的无状态性,为了避免每次登录时都去数据库查询用户信息,用户第一次登录后,应用需要保存用户登录信息,以便下次请求客户端时识别用户的身份。通常我们可以采用session的方式来保存用户登录状态和用户信息。这种方式,会在服务端保存session信息,登录之后返回一个session_id,这样客户端每次请求的时候将session_id传到服务端。使用session的方式会在服务器保存session信息,这样会占用服务器资源,下面介绍另外两种鉴权
2022-03-05 18:15:58
7395
原创 数组的全排列
func combine() [][]int { ret:= com(0,[]int{1,2,3,4}) fmt.Println(ret) return ret}func com(pre1 int ,req []int)([][]int){ fmt.Println(pre1,req) if len(req)==0{ return [][]int{ []int{}, } } ou
2022-02-26 22:28:34
197
原创 最大堆排序
堆堆可以用队列来表示。堆是一种完全二叉树,满足父节点小于左子节点小于右子节点。如果父节点的编号为n堆排序// CreateMaxHeap 创建最大堆// 创建最大堆有两种方法:// 1. 先创建一个空堆,然后依此给堆添加元素(add)// 2. 从最后一个非叶子节点开始遍历,对遍历到的节点如果不满足堆的定义(父节点>左子节点>右子节点),交换父子节点的位置,交换后的子节点可能会不满足堆定义,对其进行下沉调整// 采用第二种方法func CreateMaxHeap()[]int
2022-02-23 00:26:08
170
原创 数据结构-树
树树是不包含回路的连通无向图二叉树:每个节点最多拥有2个子节点满二叉树:n层满二叉树拥有2^n-1个节点完全二叉树:除去第n层以外,是一个满二叉树,第n层也是从左到右排列堆:堆是一种完全二叉树,满足父节点小于子节点,左子节点小于右子节点二叉查找树:也叫二叉搜索树,如果父节点有左子节点,那么左子节点的值小于父节点,如果父节点有右子节点,那么右子节点大于父节点。平衡二叉树:二叉平衡树的左右子树高度的差不大于1,任何子树都是一个平衡二叉树。B数:B数也是一种平衡树,只是父节点由多个元素组成,可以降
2022-02-22 23:40:23
298
原创 图及常见算法
图图是一种非常重要且应用广泛的数据结构。一个图主要由多个顶点及连接顶点的边组成。其中根据图中的边是否包含方向分为有向图和无向图。根据图中的边是否包含权值分为有权图和无权图。图的表示方式图的表示方式分为两种:一种是邻接矩阵,经常用来表示稠密图,第二种是邻接表,常用来表示稀疏图。图的遍历图的遍历分为广度优先搜索(BFS)和深度优先搜索(DFS),两种都可以完成图的遍历。广度优先搜索:用队列来实现深度优先搜索:可以通过递归或者栈来实现最短路径多源最短路径:弗洛伊德(Floyd)算法核心思
2022-02-22 23:38:53
161
原创 go语言性能测试go test
go test语法:go test [build/test flags] [package] [build/test flags && test binary flags]test flaggo help testflag-bench 指定运行的基准测试,默认不进行基准测试,常用-bench=.来运行所有的基准测试-benchtime 指定每个基准测试运行的时间,默认是1s,例如-benchtime=3s制定每个基准测试运行3s,也可以通过Nx的方式来指定基准测试运行的次数,例
2022-01-10 20:26:02
1347
原创 go程序启动过程
go程序编译过程当使用go build main.go时进行编译,将go源码文件转化成可执行目标文件,主要经历了以下几个过程:将.go后缀的源文件,通过编译器,编译成以.s为后缀的汇编程序将汇编程序,通过汇编器,编译成以.o为后缀的二进制可重定向目标文件将.o文件,通过链接器进行链接,最终胜出可执行目标文件。在编译过程中,go编译器主要进行了一下几个过程:4. 词法分析,通过设定的关键字,将字符序列转换成token序列5. 词法分析,对token序列进行分析,确定其语法结构(语法树)的过
2022-01-10 19:20:16
1022
原创 kafka问题排查经历
今天kafka遇到个问题,go代码中消费者一直接收不到消息。开始排查问题:登录kafka集群的三个节点,使用ps -ef +network查看三个节点的broker都是正常启动的。查看启动配置,三个节点的broker.id分别为0,1,2ls /logs/kafka-logs 查看topic的日志,确定producer生产的消息都正确存储了。./bin/kafka-topics.sh --describe --topic mytopic 查看topic的详细信息,确定topic是一个分区,一个副
2022-01-04 21:14:08
1209
原创 kafka总结
为什么使用消息队列?消息队列的作用是什么?异步、解耦、削峰填谷kafka的topic和分区内部是如何存储的,有什么特点?在Kafka文件存储中,同一个topic下有多个不同partition,每个partition为一个目录,partiton命名规则为topic名称+有序序号,第一个partiton序号从0开始,序号最大值为partitions数量减1。每个partion(目录)相当于一个巨型文件被平均分配到多个大小相等segment(段)数据文件中。但每个段segment file消息数量不一定
2022-01-04 20:12:02
857
原创 kafka学习-部署及基本命令
快速开始下载kafka安装包:http://kafka.apache.org/downloads解压安装包tar -xzf kafka_2.13-3.0.0.tgzcd kafka_2.13-3.0.0启动zookeeperbin/zookeeper-server-start.sh config/zookeeper.properties启动kafka-serverbin/kafka-server-start.sh config/server.properties
2021-12-23 15:23:16
1262
原创 kafka基本概念
Kafka的基本概念:Broker:Kafka集群包含一个或多个服务实例,这些服务实例被称为Broker。Topic:每条发布到Kafka集群的消息都有一个类别,这个类别称为Topic。Partition:分区,Kafka将Topic分为一个或者多个Partition,每个Partition在物理上对应一个文件夹。Offset:用于记录当前所消费的消息的位置,为一个long型数字,唯一的标记一条消息。Producer:负责发布消息到Kafka Broker。Consumer:消息消费者,从Ka
2021-12-23 15:03:16
1335
原创 tinkerpop图计算框架
TinkerPopTinkerPopTinkerPop是一个面向实时事务处理(OLTP),以及批量图分析(OLAP)的图计算框架。TinkerPop是一个总称,它包含若干子项目,以及核心TinkerPop Gremlin引擎集成的模块。在TinkerPop2及之前,TinkerPop分为若干子项目,而从TinkerPop3起,都合并到了Gremlin。Gremlin相当于一个JDK,不管通过哪种语言编写的Gremlin程序,不管是编写的OLTP程序还是OLAP程序,都可以通过编译成Gremlin字
2021-07-20 23:10:08
1015
1
原创 golang context应用场景
Golang contextContext数据结构type Context interface { Deadline() (deadline time.Time, ok bool) Done() <-chan struct{} Err() error Value(key interface{}) interface{}}Context是一个接口类型。Deadline():当ctx有结束时间时,返回结束时间和true。WithTimeout和WithDeadline方法都有结束时间。
2021-06-14 16:15:14
503
原创 dgraph部署和使用
dgraph安装和启动下载安装包解压,会有三个文件 badger 、dgraph、dgraph-ratel启动zero ./dgraph zero启动alpha./dgraph alpha --lru_mb 2048 --zero localhost:5080启动ratel./dgraph-ratel访问可视化页面 localhost:8000提示 您需要设置Dgraph服务器可以通过 lru_mb 标志的估计内存。这只是Dgraph服务器的一个提示,实际使用率会高于此值。建议将lru_m
2021-06-10 21:45:36
1731
4
原创 golang内存分配(三)
文章目录golang内存分配3数据结构2. class2. span是内存管理的基本单元3. cache4. central5. heap总结Spans资料golang内存分配3golang中实现了内存分配器,原理与tcmalloc类似。从内存申请一大块内存,通过内存分配器自己管理这块内存。在64位系统中,go程序启动时会向系统申请512MB的spans 、16GB的的bitmap、512G的arena。为了方便管理,arena区被划分成一个个页,每个页为8KB,一共有 512G/8K 个页 = 6
2021-05-31 23:00:48
642
1
原创 golang内存分配(二)进程地址空间
文章目录golang内存分配2进程地址空间golang内存分配2进程地址空间32位系统,cpu一次能处理32位的二进制数,一次最多可以用32位二进制数来表示一个地址,共可以表示2^32个地址,每个byte对于一个地址,所以共可以寻址4GB的空间虚拟内存到物理内存的映射,以页(4096)为单位。用页目录和页表组合来表示一个虚拟页的地址,一个虚拟页对于一个物理页。一个虚拟页用12位bit表示,最大能寻址4096个地址,也就是最大能寻址4KB的物理内存。虚拟内存分段:0-10bit为页目录 11-20b
2021-05-31 22:47:11
460
原创 golang内存分配(一)内存和虚拟内存
文章目录golang内存分配go语言内存分配概述go语言实现跨平台计算机内存golang内存对齐虚拟内存Reference本节关键词golang内存分配go语言内存分配概述go语言的内存分配是基于tcmalloc模型的,关于tcmalloc可以搜索《图解TCMalloc》go语言跟大多数内置运行时(runtime)的编程语言一样,抛弃传统内存分配的方式,改为自己管理。这样可以完成类似预分配、内存池等操作,以闭开系统调用带来的性能问题,防止每次分配内存都需要系统调用。go的内存分配的核心思想分为以下
2021-05-31 22:36:00
1895
原创 redis缓存穿透
正常请求Redis总中存放的是访问频率很高的热点数据热点请求大部分情况下都会命中redis,只有少部分请求redis没命中,去访问数据库访问数据库后,需要将查询的数据回填到redis原则上说,对于会进行修改的热点数据都需要设置超时时间,以保证万一出现异常,能确保数据的最终一致性。缓存穿透请求一个redis中不存在的数据,该请求必定穿透redis到达数据库,当请求足够频繁,会导致数据库崩溃当redis短时间失效,请求会全部落到数据库,造成数据库短时间崩溃当redis数据丢失,请求全部穿透
2021-05-29 14:06:56
97
原创 mysql分页优化
通常我们使用offset+limit的方式进行分页查询,然而随着数据表数据量越来越大,这种分页查询的方式性能也会随之降低。本篇主要介绍如何对分页查询进行优化。起因offset+limit方式的分页查询,当数据表超过100w条记录,性能会很差。主要原因是offset limit的分页方式是从头开始查询,然后舍弃前offset个记录,所以offset偏移量越大,查询速度越慢。分页查询优化使用子查询的方式,也是比较常用的方式,先使用子查询查询出分页所在的起始id的值SELECT * FROM tab
2021-05-29 13:30:46
1915
1
原创 微服务架构
微服务架构什么是微服务架构风格?微服务架构风格是将单个应用程序实现为一组小服务的软件设计开发方法,每个小服务都运行在自己的进程中,并以轻量化的机制进行通信(基于HTTP或RPC)。这些小服务围绕业务功能构建,可以通过全自动化部署机制进行独立部署。这些小服务应用最少的集中化管理(去中心化),他们可以用不同的编程语言编写,也可以使用不同的数据存储技术。关键特征:服务解耦(区别于单体架构风格的逻辑解耦)每个服务打成独立的包,独立发布部署跨进程、跨网络动态注册、动态发现数据库独立微服务架构设计
2021-05-29 12:18:59
137
原创 golang struct详解
Go struct详解内存模型go语言的结构体的内存模型,是连续的内存。内存对齐package mainimport ( "fmt" "unsafe")type StructA struct { A bool}type StructB struct { A bool B int16}func main() { a := StructA{} fmt.Println(unsafe.Sizeof(a)) b := StructB{}
2021-05-27 23:19:00
1328
1
原创 docker学习笔记
Docker两个口号:build、ship、run(创建、运输、运行)Build once,Run anywhere(创建一次,到处运行)文章目录Docker初识Dockerdocker前世今生docker架构dockerdockerdcontainerddocker-containerd-shimrunCdockerd Vs containerd Vs runC名词解释OCI :Open Container InitiativeCRI :Container Runtime InterfaceR
2021-05-27 23:15:54
1627
原创 ArangoDB(五)API 和 AQLCache
AQL CacheAQL Cache机制可以对通过AQL查询出来的结果进行缓存。Modesoff: 禁用cache,所有的查询结果都不会缓存on:开启cache,所有通过AQL查询的结果默认都进行缓存,除非在查询时设置cache attribute 为falsedemand:只在需要时通过设置cache attribute 来控制是否进行缓存cache mode可以在启动时指定,也可以在运行时指定设置全局配置启动时指定 --query.cache-mode 进行配置在运行中,通过a
2021-05-27 23:14:18
250
原创 ArangoDB(四)Pregel
arango pregel.status()返回值localhost:8529@_system> pregel.status(1099521660554){ "state" : "done", "gss" : 7, "totalRuntime" : 8.389497518539429, "aggregators" : { }, "sendCount" : 392647, "receivedCount" : 392647, "vertexCount" : 124307
2021-05-27 23:13:09
510
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人