Home
Kane's Blog
Cancel

Getting Started

started 今天折腾了一下新域名 kekai.wang,不再维护自己的历史 demo 项目了(去年用 Gin 框架重构过一版),陆续 wangkekai.cn 和 wangkekai.com 也会迁移到这来~ 新站直接使用 github page 托管建站,主题选了好大一会,最后选择了 jekyll-theme-chirpy, 简洁、完善~ process 最近也是打算找工作,...

Redis 持久化

Redis 持久化 Redis 的持久化机制有两种 第一种是快照 RDB,是一次全量备份 第二种是 AOF 日志,是连续的增量备份 快照是内存数据的二进制序列化形式,在存储上非常紧凑,而 AOF 日志记录 的是内存数据修改的指令记录文本。 AOF 日志在长期的运行过程中会变的无比庞大,数据库重启时需要加载 AOF 日志进行指令重放,这个时间就会无比漫长。所以需要定期进行 ...

Map

map 结构 hmap map 类型的变量本质上是一个 hmap 类型的指针: type hmap struct { count int // 已经存储的键值对个数 flags uint8 B uint8 // 常规桶个数等于2^B; map底层的哈希表通过与运算的方式选择桶 noverflow uint16 // ...

Slice

slice 底层结构 切片在运行时的表现是 SliceHeader 结构体,定义如下: type SliceHeader struct { Data uintptr Len int Cap int } Data:指向具体的底层数组。 Len:代表切片的长度。 Cap:代表切片的容量。 要点是:切片真正存储数据的地方,是一个数组。切片的 Data 属性中...

Go 常见面试题

Go - nil nil 只能赋值给指针、chan、func、interface、map 或 slice 类型的变量 channel Go 语言中,不要通过共享内存来通信,而要通过通信来实现内存共享。Go 的 CSP(Communicating Sequential Process)并发模型,中文叫做通信顺序进程,是通过 goroutine 和 channel 来实现的。 chann...

Redis 常见面试题

Redis 为什么这么快? 纯内存操作 不论读写操作都是在内存上完成的,跟传统的磁盘文件数据存储相比,避免了通过磁盘 IO 读取到内存这部分的开销。 单线程模型 避免了频繁的上下文切换和竞争锁机制,也不会出现频繁切换线程导致CPU消耗,不会存在多线程的死锁等一系列问题。 单线程指的是 Redis 键值对读写请求的执行是单线程...

MySQL - InnoDB 和 MyISAM 的区别

InnoDB 和 MyISAM 的区别 定义 InnoDB:MySQL 默认的存储引擎,是一个平衡了可靠性和高性能的通用存储引擎。从 MySQL-5.5 开始做为默认存储引擎。 MyISAM:在 MySQL-5.1 及之前的版本,MyISAM 是默认引擎。因为它不支持事务和行锁并且崩溃后无法恢复导致了它的没落,当然还是有很多优点的。 区别 事务 InnoDB 支持事物,...

MySQL 索引及常见面试题

一、索引是什么? 索引(Index)是帮助 MySQL 高效获取数据的数据结构,是对表中一列或多列值进行排序的结构。 就比如索引是一本书的目录,可以通过目录快速查找自己想要查询的东西。 二、索引为什么使用B+树? 先看一下常见的索引存储结构 哈希表 是一种以键 - 值(key-value)存储数据的结构,我们只要输入待查找的值即 key,就可以找到其对应的值即 Val...

Golang 开发规范 -- Go Code Review Comments

疫情期间入职新公司一个月了,部门每月会有知识分享,由大家轮流进行! 我们的主力开发语言由 PHP 在逐步转向Go,参考 Go Code Review Comments 在上一次的部门分享我做的是 Go 语言的开发规范,在官方的基础上做了一个简单的分类,供大家参考共同学习。 格式化 gofmt 通过gofmt自动格式化代码,以保证所有的go代码与官方推荐的格式保持一致。 首字母大写和缩...