摘要: 参考:mooc浙大数据结构 https://www.icourse163.org/learn/ZJU-93001?tid=1459700443#/learn/content?type=detail&id=1235254085&cid=1254945340 kmp算法的本质是: 1、当指针 i 指向的 阅读全文
posted @ 2021-11-25 20:35 moon_orange 阅读(124) 评论(0) 推荐(0) 编辑
摘要: 名词解释 单调栈和单调队列都有共同的特性,单调性。所谓单调性就是在一段区间上,这段区间的数是线性递增的,或者线性递减的。栈和队列中一直维护一串单调的数字,那么这个栈和队列就叫做单调栈和单调队列, 可以解决的问题 一般单调栈解决的是,在一串数字中,求第i个数的左边第一个比它小的数。(当然问题不是绝对的 阅读全文
posted @ 2021-11-25 13:38 moon_orange 阅读(172) 评论(0) 推荐(0) 编辑
摘要: golang中单例模式体现在很多地方, 比如init函数,当包被导入的时候只会被执行一次。实现单例模式有很多种方式,这里给出几种简单的实现: 互斥锁 对全局共享变量加锁,如果该变量不是nil,那么证明已经被创建了实例,直接返回它的值就好。 type singleton struct {} var ( 阅读全文
posted @ 2021-11-20 20:56 moon_orange 阅读(516) 评论(0) 推荐(0) 编辑
摘要: slice扩容代码在go/src/runtime/slice.go中,当前使用的使用的golang源码是GitHub中的master分支代码。时间是2021-10-11。 先抛出一个问题,你觉得应该是打印多少呢? var b = []int64{1, 1} b = append(b, 1, 1, 1 阅读全文
posted @ 2021-11-20 20:37 moon_orange 阅读(485) 评论(0) 推荐(0) 编辑
摘要: 对齐规则 1、对于结构体成员变量: 某个成员的偏移量 = k * min(编译器对齐系数, 该成员类型长度) k >= 1 2、结构体完整大小也必须满足: min(k * max(编译器对齐系数, 最大成员类型长度)) k >= 1 编译器默认对齐长度和计算机一次处理的的位数有关,32位处理器对齐系 阅读全文
posted @ 2021-11-20 20:36 moon_orange 阅读(106) 评论(0) 推荐(0) 编辑
摘要: 逃逸分析 我们知道往往声明一个变量或者申请内存空间时,是需要区分内存区域的,有的可以申请栈空间,有的申请堆空间。go语言中决定变量是分配到栈还是堆,取决于go编译器对程序的逃逸分析。 在程序编译时,如果发现一个变量需要后续一直使用,往往会将其分配到堆内存。看例子: func test02() *in 阅读全文
posted @ 2021-11-20 20:33 moon_orange 阅读(37) 评论(0) 推荐(0) 编辑
摘要: 我们都知道go语言起一个线程是很简单的,但这其中也有很多问题(坑)。我在刚了解到并发时,常会思考以这样的方式达到两个线程之间的同步: var a string var done bool func setUp() { a = "hello world" done = true } func main 阅读全文
posted @ 2021-11-20 20:25 moon_orange 阅读(525) 评论(0) 推荐(0) 编辑
摘要: 动态和静态的区别 链表分静态链表和动态链表,工程里一般用动态链表,去new一个node,动态创建节点。静态链表一般用在刷算法题的时候,由于使用数组模拟,没有动态创建过程,并且使用数组下标代替next指针,所以静态链表的速度非常快,缺点就是非常消耗内存。 静态链表的结构 两个数组 静态链表中使用两个数 阅读全文
posted @ 2021-11-20 15:14 moon_orange 阅读(18) 评论(0) 推荐(0) 编辑
摘要: 简谈mr mr的出现就是因为单机无法处理过多的任务,需要多加几台机器来提高性能,那么就要处理多台机器的分工合作问题。拿word-count举例,将任务均分到集群中的每台机器,各自运算得出结果,再将结果收集进行合并,这个过程就是mapreduce。 分布式的机器处理时是并行的,互相不影响,对比单机能提 阅读全文
posted @ 2021-11-19 18:19 moon_orange 阅读(60) 评论(0) 推荐(0) 编辑
摘要: 计算机中存储数字,是存储数字的补码,其中正数的补码是它本身,负数的补码是原码取反再加一。 计算机没有减法操作,所以 x + (-x) = 0,所以 -x = 0 - x,计算机中计算二进制0 - x,一样需要借位,计算的结果就是 ~x + 1,所以计算机存负数存的是 ~x + 1。 求x的第k位,k 阅读全文
posted @ 2021-11-19 18:09 moon_orange 阅读(31) 评论(0) 推荐(0) 编辑