Loading...
最近看到了一个没有见过的东西,函数柯里化,然后简单学习了一下这玩意,这里记录一下本文主要参考掘金的一篇文章:「前端进阶」彻底弄懂函数柯里化 ,并使用Golang代替文中的JavaScript(貌似Golang函数柯里化相关的资料比较少)什么是函数柯里化在计算机科学中,柯里化(英语:Currying),是把接受多个参数的函数变换成接受一个单一参数(最初函数的第一个参数)的函数,并且返回接受余下...
既然上一篇写了LRU,那这一篇我们就来搞一下LFU吧。LFU,Least Frequently Used,最近最少使用,其核心思想是,“如果一个数据在最近一段时间很少被访问到,那么可以认为在将来它被访问的可能性也很小”。本文基于 LeetCode 460. LFU 缓存 进行,解法不是最优,但是实现了Get和Put操作的时间复杂度均为O(1)。这里我们使用一个HashMap实现Get操作的O...
LRU,Least Recently Used的缩写,即“最近最少使用”,其核心思想是“如果数据最近被访问过,那么将来被访问的几率也更高”。这里,我们基于 LeetCode 146. LRU 缓存 ,使用Golang实现,并使其Get、Put操作的时间复杂度均为O(1)。思路很简单,使用HashMap保存Cache,保证其Get的复杂度为O(1),使用一个双向链表,保证Put操作维护使用顺序...
最近开始学习Raft算法,就简单记录一下吧。(本文及后续相关文章的实现基于 MIT 6.824 Lab 2: Raft 2022 进行。)背景知识复制状态机一组服务器上的状态机产生相同状态的副本,并且在一些机器宕掉的情况下也可以继续运行。复制状态机在分布式系统中被用于解决很多容错的问题。图 1 :复制状态机的结构。一致性算法管理着来自客户端指令的复制日志。状态机从日志中处理相同顺序的相同指令...
开门见山,在golang中,for range 中,接收到的item用的是同一个地址,因为for range创建了每个元素的副本,而不是直接返回每个元素的引用,也就是说,以下代码将会不符合预期:package main import "fmt" type A struct { AA string `json:"aa"` } type B ...