不会飞的章鱼

熟能生巧,勤能补拙;念念不忘,必有回响。

什么是数组

数组有哪些基本特性

Go 语言的数组是一个长度固定的、由同构类型元素组成的连续序列。
因此Go 的数组类型包含两个重要属性:元素的类型和数组长度(元素的个数)。
所以,Go 语言中数组类型变量的声明:

1
var arr [N]T //声明了一个数组变量 arr,它的类型为[N]T,其中元素的类型为 T,数组的长度为N。

通过声明,我们可以得出一个结论:如果两个数组类型的元素类型 T 与数组长度 N 都是一样的,那么这两个数组类型是等价的,如果有一个属性不同,它们就是两个不同的数组类型。

阅读全文 »

什么是channel

channel是Go语言提供的一种重要的并发原语。它在Go语言的CSP模型中扮演者重要的角色:

  • 可以实现goroutine之间的通信;
  • 可以实现goroutine之间的同步。

channel原语的使用:

1
2
3
4
5
6
7
8
9
10
11
12
c := make(chan int)  // 创建一个无缓冲的int类型的channel
c := make(chan int,5) // 创建一个带缓冲的int类型的channel
c <- x // 向channel c 中发送一个值
<- c // 从channel c 中接收一个值
x = <- c // 从channel c 接收一个值并将其存储到变量x中
x,ok = <- c // 从channel c 接收一个值。若channel关闭了,ok将被置为false
for i := range c {...}
close(c) // 关闭channel c

c := make(chan chan int) // 创建一个无缓冲的chan int类型的channel
func stream(ctx context.Context, out chan<- Value) error // 将只发送channel作为函数参数
func spwn(...) <-chan T // 将只接收类型channel作为返回值
阅读全文 »

什么是goroutine

goroutine是由Go运行时管理的用户层轻量级线程。

相比较于操作系统线程,goroutine的资源占用和使用代价都要小得多,可以创建几十个、几百个甚至成千上万个goroutine也不会造成系统资源的枯竭,Go的运行时负责对goroutine进行管理。而所谓的管理 == 调度。

goroutine调度器

一个Go程序中可以创建成千上万个并发的goroutine,而将这些goroutine按照一定算法放到CPU上执行的程序就称为goroutine调度器

阅读全文 »

题目

剑指 Offer 42. 连续子数组的最大和

题解

暴力求解

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
func maxSubArray(nums []int) int {
//一个临时值,和一个最大值
temp,max := 0,nums[0]
for i:=0;i<len(nums);i++ {
if (temp + nums[i]) > nums[i] {
temp = temp + nums[i]
} else {
temp = nums[i]
}
if temp > max {
max = temp
}
}

return max //返回最大值
}
阅读全文 »

版本更新描述

在基于版本2的基础上继续优化 WordPress 网站的部署,其中的关键是让数据库 MariaDB 实现数据持久化。

架构图

网站的整体架构图变化不大,前面的 Nginx、WordPress 还是原样,只需要修改 MariaDB:

阅读全文 »

版本更新描述

完全舍弃了 Docker,把所有的应用都放在 Kubernetes 集群里运行,部署方式也不再是裸 Pod,而是使用 Deployment,稳定性大幅度提升。

架构图

原来的 Nginx 的作用是反向代理,那么在 Kubernetes 里它就升级成了具有相同功能的 Ingress Controller。WordPress 原来只有一个实例,现在变成了两个实例(你也可以任意横向扩容),可用性也就因此提高了不少。而 MariaDB 数据库因为要保证数据的一致性,暂时还是一个实例。

阅读全文 »

架构图


MariaDB 作为后面的关系型数据库,端口号是 3306;WordPress 是中间的应用服务器,使用 MariaDB 来存储数据,它的端口是 80;Nginx 是前面的反向代理,它对外暴露 80 端口,然后把请求转发给 WordPress。

使用 docker pull 拉取镜像

1
2
3
docker pull wordpress:5
docker pull mariadb:10
docker pull nginx:alpine

启动 MariaDB

阅读全文 »