ARTS打卡第三周

概述

        infoq的arts打卡学习,贯彻左耳朵耗子的学习理念,活到老学到老,每天都精进一点,上个星期没有写打卡文档,只能用工作太忙为借口为自己开脱了

一、Algorithm 一道算法题

        最近工作使用算法场景较少,基本上是基于数据统计对系统进行优化,因此结合工作的算法暂时没有,最近在学习go,就用go来写一些经典算法吧,再配上单元测试,加深对go的理解

        二分查找法go的实现,接收两个参数:有序数组arr和待查找的值target。通过循环迭代的方式,在每次迭代中更新查找范围的起点和终点,直到找到待查找的值或者确认查找范围为空。若找到待查找的值,则返回它在数组中的索引位置;若未找到,则返回-1。  

// 冒泡排序法
func AscSort(arr []int) []int {
	maxInter := len(arr) - 1
	for i := 0; i < maxInter; i++ {
		for j := maxInter; j > i; j-- {
			if arr[j-1] > arr[j] {
				temp := arr[j]
				arr[j] = arr[j-1]
				arr[j-1] = temp
			}
		}
	}
	return arr
}

单元测试

func TestAscSort(t *testing.T) {
	Convey("冒泡排序", t, func() {
		// 排好序的情况
		arr := []int{1,3,4,5,7,9,10}
		res := AscSort(arr)
		So(res, ShouldResemble, arr)
		// 乱序
		arr1 := []int{7,1,5,3,9,4,10}
		res = AscSort(arr1)
		So(res, ShouldResemble, arr)
		// 逆序
		arr2 := []int{10,9,7,5,4,3,1}
		res = AscSort(arr2)
		So(res, ShouldResemble, arr)
	})
}

二、Review 读一篇英文文章

        英语单词,推荐使用「摸鱼单词」,每天早到公司15分钟,开启「摸鱼单词」记忆单词熟悉发音

        英语每日一读, 微信公众号 - 「夏说英文晨读」或「友邻优课app」,最近时事,每天一遍,跟读录音review,感觉挺好

        

三、Technique/Tips 分享一个小技术

        在高并发场景下,使用go取代php,在实现上有更多的思路(方案)提升性能。提升性能的本质之一是减少io

        场景: 寻址系统 - 在一堆服务器中为设备选出最优(连接数最少、负载最低)一台,让设备与服务器保持长连接。

        现状:初始时,已经将php代码优化到了极致,但一次寻址仍然存在20次io,主要是和redis的交互,而存储在redis中的信息配置数据几乎不怎么修改。

        优化:使用php已经无法再优化;
        1、go使用etcd做配置中心,将改动频率低的数据写入到etcd中,有变更时实时更新到程序内存中。 

        2、当前php限流依赖于redis中滞后的redis、mongo的操作数和连接数,存在redis io,改用go sentinal,没有io,并且限流及时,不会滞后,更好地保护下游服务。

四、Share 分享一个观点

        知识不是一成不变的真理。

知识不是对现实的客观纯粹反映,是人们对事物的解释、假说和假设,随着人们对事物的认识程度的深入而不断变革、深化,出现新的解释和假说。

比如地心说和日心说,我们现在看知道这两种说法都是错误的。但地心说提出的时候,人们都认可地心说,随着人们对事物认识程度的深入,阿利斯塔克、哥白尼又提出了日心说,日心说经过300多年的发展,随着开普勒、伽利略和牛顿工作的进展,特别是恒星光行差和视差的发现,终于否定了地心说和日心说,提出了大爆炸说。天文学的发展表明,太阳仅仅是一个普通恒星,它并不在宇宙的中心。

        

  

你可能感兴趣的:(考研)