1 | docker run --name redmine -d \ |
Docker 部署gitlab
1 | docker run --name gitlab -d \ |
二叉查找树的一些操作方法
本文源码地址: https://github.com/zboyco/go-test/blob/master/findtree/main.go
二叉查找树
树有多种不同的结构,但都是由节点构成,一颗树至少有一个根节点,节点下有子节点,没有子节点的节点称为叶子;
二叉树指每一个树节点都最多有两个子节点的树,两个子节点分别称为左节点和右节点;
二叉查找树则是指每一个节点的左节点的值都小于当前节点的值,右节点的值都大于或等于当前节点的值。
Go gRPC体验
本文源码地址: https://github.com/zboyco/go-test/blob/master/gRPC
0 环境安装
protobuf
1 | https://github.com/protocolbuffers/protobuf/releases |
protoc-gen-go
1 | go get -u github.com/golang/protobuf/protoc-gen-go |
gRPC
1 | go get -u google.golang.org/grpc |
Go 使用go-micro编写微服务
go-micro
go-micro是一个可以构建微服务的rpc基础框架。
准备工作
1.protobuf
go-micro代码生成依赖Protobuf,所以需要安装protobuf。参考Go语言使用protobuf
1 | https://github.com/protocolbuffers/protobuf/releases |
2.protoc-gen-go
go-micro采用protobuf作为数据传输编码,所以需要安装protoc-gen-go
生成工具。
1 | go get -u github.com/golang/protobuf/protoc-gen-go |
3.protoc-gen-micro
protoc-gen-micro
用来生成go-micro代码。
1 | go get -u github.com/micro/protoc-gen-micro |
4.consul
go-micro
默认使用consul
作为服务发现框架。下载地址:
1 | https://www.consul.io/downloads.html |
- 下载后需要将consul所在目录加入PATH环境变量
执行consul agent -dev
即可运行consul。
Go 实现线程安全栈
Go 求两个数组切片交集
记录下golang可能的一些项目问题
虚拟助手app
介绍下项目。
该项目是一个移动端养成类的app,相似的有日本的《makes》,功能比较简单,就是通过用户和虚拟人物日常的对话和交互累计经验和资源,使用资源购买道具装扮虚拟人物,然后解锁更多的交互内容、方式和场景,同步实现一些备忘录和闹钟功能的app。介绍下项目架构。
为什么采用web api实现?
因为该项目主要是用户和虚拟人物的交互,没有用户对用户的交互需求,对即时性相应要求并不高,所以采用web api的方式实现,配合JWT协议,利用gin中间件可以方便的实现权限验证,开发效率高,并且gin也比较稳定。为什么使用redis作为缓存?
- 直接操作数据库相对较慢,redis存储在内存中,提高访问速度
- 高并发,redis的承受能力高于数据库,使用redis可以减小数据库的压力
- redis支持分布式缓存和持久化
- redis是单线程的,操作具有原子性
- 支持的数据类型多
redis和mysql的数据一致性问题怎么解决?
- 读:读redis,如果redis没有再读取mysql并写入redis
- 写:更新mysql–>异步删redis
- redis设置短过期时间
- 串行化对同一数据的处理
为什么采用protobuf协议?
- protobuf序列化后数据大小是
json
格式的十分之一,是xml
格式的二十分之一,适合网络传输,减少数据量,减少网络IO - 解析效率快
- 较复杂,数据本身不具有可读性
- protobuf序列化后数据大小是
什么情况下使用nsq队列?怎么使用?
高可用有没有接触?如何保证高可用?
JWT有什么优势?有什么缺点?
- 服务端不用保存会话信息
- 实现单点登录
- 增加了请求头开销
- 续签和注销不方便
记录下golang可能的一些问题
记录下题目,涉及多个方面,答案有自己总结,也有来源与网络,并不是标准答案,仅供参考。