【置顶】未来学习计划 前言 对于已经掌握的知识,必须要及时进行复盘与总结,并且进行文字化的输出! Go 学习前言Go 语言的应用场景有许多,但是语言主要的优势在以下三大块: 1、云原生 (微服务 + DevOps + PaaS 等中间件) 2、高性能 API 工具开发 3、服务器端开发 如果职业方向是往以上几个方向发展,那么 Go 语言的学习是至关重要的,市场上初步的任职要求如下: 1、编程语言: 使 2022-03-05
容器化环境搭建 docker 内环境的搭建 注意:单机环境下的容器管理使用 docker- compose 进行管理,多机环境下使用 K8S (kubernetes) 进行管理! 1、nacos123456# docker 启动服务docker run -d -p 8848:8848 && \ -e MODE=standalone & 2022-08-19 devops #docker
GPE 监控系统分析与搭建 Grafana + Prometheus +Exporter 监控体系的搭建 Prometheus 的监控体系1、系统层监控(需要监控的数据) 1、CPU、Load、Memory、swap、disk i/o、process 等2、网络监控:网络设备、工作负载、网络延迟、丢包率等 2、中间件及基础设施类监控 1、消息中间件:kafka、redis、RocketMQ 等消息代理 2022-08-19 middleware #GPE
MySQL 优化 1、索引索引只是一种数据结构而已,具体看 Mysql 的数据库引擎。 比如 MyISAM 使用 B 树,InnoDB 使用的 B+ 树。 (聚簇索引与非聚簇索引是 b 与 b+ 树的两个别名) 缺点: 1、少量数据不需要 2、频繁更新的数据不适合作为索引 3、很少使用的字段 4、索引提升查询效率、降低增删改的效率 5、索引占用空间很大(但是机械硬盘也不值钱了) 优点: 1、查询效率 2022-06-14 middleware #MySQL
深入理解 redis 底层 主要用于 redis 的底层原理、源码实现的个人学习记录,配图主要来自极客时间。 引言首先,redis 主要是为了实现高性能、高可靠、高可扩展性三个高度。 而全面学习 redis,主要是当redis 出现相应的故障问题时,开发人员能进行快速对问题进行定位与解决。 而对于问题的定位排查需要的流程,我见过画的最好的图还是极客时间的蒋老师的问题排查图。 Redis 底层数据结构 redis 底层数 2022-06-13 middleware #redis
Go 语言中的 channel 学习 主要学习 Go 语言中 channel 数据结构使用,以及工作过程中的避坑。文章中的代码主要参考极客时间 go 并发编程,如有需要查看其详细内容,请前去购买! channel 使用方向上的避坑虽然 Go 的开发者极力推荐使用 channel。但是通过大家的工程化道路上的探索, channel 并不是处理并发问题的普适性的使用方法,有时候使用传统的并发原语更简单,而且不容易出错。 所以在使用并发 2022-05-05 go #channel
Go 语言中的错误处理 通过模块化组件的方式,学习 Go 语言的微服务 Go 语言的错误处理Go 语言中的 error 定义如下 123type error interface { Error() string} 在 Go 1.13 版本之前,我们通常使用的是 errors.New() 来进行返回一个 error 对象指针,相应的源码如下所示: 12345678func New(text 2022-04-19 go #microservice
雪花算法 主要学习 Twitter 开源的雪花算法 介绍雪花算法是 Twitter 公司开源的 64 bit 整数组成的分布式 ID, 并且在单机上递增! snowflake-64 bit 如下图所示: 如图,1、雪花算法默认左起第一位应该是 0, 第一位在实际中并无任何作用。 2、从第一位之后的 41 位都是时间戳,单位为 ms, 能容纳 69 年的时间。以某个时间点为基准, 基准可以自行设置, 偏移 2022-04-11 middleware #snowflake
TDD 实践 TDD 的项目驱动 TDD 具体原则1、当且仅当存在失败的自动化测试,才开始编写生产代码 2、消除重复(徐昊老师:消除坏味道) 经典的红/绿/重构(Red/Green/Refactoring) 红:编写一个失败的小测试,甚至可以是无法编译的测试; 绿:让这个测试快速通过,甚至不惜犯下任何罪恶; 重构:消除上一步中产生的所有重复(坏味道)。 TDD 工 2022-04-04 go #TDD
Golang 开发一个 HTTP Web 服务器/客户端 之前的 zinx 学习,是基于 TCP/UDP 的 socket 协议进行编写,而本次要实现的是基于 HTTP 协议开发一个 Web 服务器端与客户端! 1、要求服务器端要求: 1、服务端维护一个内存数据结构,所有数据进程重启丢失,不做数据持久化,不考虑内存容量问题 2、服务端实现一个网络 API 接口,客户端向该 API 发送一个网络请求,请求数据是一个 string 的信息 3、服务端 2022-03-31 go #HTTP
MySQL 原理 理解思考项目,原理先行,实践在后 1、redo-log 与 bin-log 两种日志区别首先,redo-log 与 bin-log 两种日志是 InnoDB 数据库引擎为了满足事务的持久性与原子性引入了的,其中,redo-log 是 InnoDB 的特性,bin-log 是mysql 中 server 层的日志。 redo-log 日志 在更新一条记录时,先将其先写入 redo-log 中,然 2022-03-29 middleware #MySQL
Go Test 的一个小坑 使用 TDD 的模式驱动自己编写测试驱动开后,使用goland 调试过程中出现的一些小问题,做一些记录 如何解决 undefined function首先在确保自己的测试代码与主干代码在同一个软件包下。最合适办法采用命令行调试,但是如果是喜欢使用 goland 调试,那么在 go test 模板需要把目录改成软件包(如下图所示),或者是把目录下文件全部添加上(不建议)。 Go mod ini 2022-03-26 go #go-test
TDD 概念介绍与学习课程 在接触 TDD (测试驱动开发) 之后,发现自己的确很能认同测试驱动开发的理念。所以在加上极客时间中有徐昊老师新开的一门课程,所以就开始自己的 TDD 学习之陆 前言首先推荐两个课程: 1、徐昊老师的新课:TDD 项目实战 70 讲。 2、go 语言的教程:Learn-go-with-test,建议能尽量进行英文阅读,就阅读英文原版。 推荐1、郑烨老师的专栏《软件设计之美》 2、《测试驱动开发 2022-03-25 go #TDD
Go 语言中的 sync.Pool 学习 本博客为在学习极客时间的 go 并发编程的学习笔记,具体详细内容请看极客时间官方的专栏–go 并发编程实战课 Go 语言是自带垃圾回收机制的,具体演变过程可以看博主写的另一篇博客。所以我们不用像 C/C++ 一样,创建对象的同时,使用完需要删除/析构对象,防止因为空指针导致的内存泄漏。 但是 Garbage Collect 机制方便方便的同时,也带来的一定的性能隐患,比如 2022-03-20 go #sync
浅谈 Redis 中间件 本博客主要是总结自己学习 Redis 中间件的经验,教程来源于b站狂神说 java 的 redis 教程 1、Redis 概念1、Redis 是基于计算机内存的数据库,一般称为缓存数据库,由于没有固定的表结构与关系,也叫 NoSQL (Not Only SQL) 数据库。 2、为什么要使用 Redis: 1、数据的爆发增长 2、没有固定关系的数据 3、最新的版本中,官方不建议直接在 win 2022-03-18 middleware #redis
Go 语言中的 sync.Mutex 学习 极客时间专栏,鸟窝大佬的 Go 并发编程课程,由于大佬的课程十分精彩,领悟需要时间与精力!所以再次本文仅仅只能作为知识总结,相应具体内容与源码分析请去极客时间上购买大佬相应的课程! Mutex Go 语言中的 sync 包的 mutex 的设计,有四个演变阶段。 1、初版的 Mutex 采用一个 flag 表示锁是否被持有,实现比较简单 2、之后为了照顾新来的 Goroutine(下文简称 2022-03-06 go #sync
Go 学习方向 通过几次面试,来总结一些现在阶段,对于自己的职业规划的发展与思考! 经历了三四次面试,收获挺大的。面试不是目的,只是一种过程,要在不断的面试中,找到适合自己发展的领域才是面试的目的! 1、现阶段发展的方向 首先,Go 语言的云原生跟云中件发展是非常迅速的,而且 Go 语言社区中,讨论最多的也是云计算的发展,docker、K8S集群、普罗米修斯,都是云中件的代表,所以去学习其中设计的思想、 2022-03-04 go #Direction
Golang 垃圾回收机制 学习 Go 语言中的各个版本的垃圾回收的机制。 1、Go V1.3 版本之前的标记清除(mark and sweep)此版本的垃圾回收机制,一般分为以下四步: 1、暂停程序业务逻辑,找出不可达的对象以及可达的对象 2、开始标记,程序找出其所有可达的对象,并进行标记 3、标记完之后,开始清除未标记的对象 4、继续运行程序。循环以上的过程,知道程序的生命周期终止为止 但是相应的,V1.3 版本 2022-03-01 go #GC
GMP 模型分析 关于 GMP 模型的一些理解,G 为 goroutine, M 为 thread(内核级线程)、P 为 Processor(处理器)。 1、Golang 早期调度器的由来 在讲述早期调度器之前,让我们先聊一下早期的操作系统。 在没有多核 CPU 之前,操作系统以单进程的任务执行,计算机在只能一个任务一个任务完整的执行的情况。在此情况下,操作系统不仅存在工作效率低下的问题,而且一旦正在执行 2022-02-24 go #GMP
Go web 的相关知识复习 开始动手学习一些框架的基本样例,抛开学习底层的设计不谈,主要还是参考文档进行相应的组件开发。参考文档见文末 1、Beego 与 gin 首先学习框架之前,需要我们理解一个道理,学习框架的目的是首先是适应业务场景的需要,其次是有两种大类:一种是为了开发效率,另一种是为了追求运行的性能。 追求运行性能的框架包含的东西挺好,比如 GIN ,另一种追求开发效率的框架封装得非常好,即是 Beego 2022-02-22 go #gin