堆(heap)排序

堆排序

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

堆是逻辑上讲是一个完全二叉树:每个结点的值都大于或等于其左右孩子结点的值,称为大根堆;每个结点的值都小于或等于其左右孩子结点的值,称为小根堆。

Read More

在 Go 如何实现枚举?

Go 语言并没有 enum 关键字,在Protobuf中,Go 语言只是 ”有限的枚举“ 支持,我们也会用常量来定义,枚举值也需要有字面意思的映射。

示例

通过定义常量来定义枚举类型,如:

1
2
3
4
5
6
7
8
9
10
11
type OperateType int

const (
INSERT OperateType = iota
UPDATE
DELETE
)

func main() {
fmt.Println(INSERT, UPDATE, DELETE)
}
Read More

三剑客-正则表达式

正则表达式的作用?

  • 匹配有规律的东西,手机号,身份证号码,匹配日志。
  • regular expression(RE)
  • 使用一些符号表达重复出现,大小写,开头/结尾含义
Read More

golang实现原子操作的几种方式

什么是原子操作?

原子操作就是并发编程中“最小的且不可并行化”的操作。如果有多个并发体对同一个共享资源进行的操作是原子的话,那么同一时刻最多只能有一个并发体对该资源进行操作。

Read More

golang内置rpc的简单使用

Go 语言的RPC包的路径为net/rpc,也就是放在了net包下面。因此可以猜测该RPC包是建立在net包基础之上的。我们尝试基于RPC实现一个简单的打印例子。

Read More

代码整洁之道之函数

代码整洁之道之函数编码规范。

短小

函数的第一规则是要短小。第二条规则是还要更短小。

代码块和锁进

if语句,else语句,while语句等,其中的代码应该只有一行。该行大抵是一个函数调用。这样不仅能保持函数短小,而且因为块内调用的函数拥有较具说明性的名称,从而增加了文档上的价值。

Read More

代码整洁之道之变量

整洁代码

C++语言发明者

我喜欢优雅和高效的代码。代码逻辑应该直接了当,叫缺陷难以隐藏;尽量减少依赖关系。使之便于维护;依据某种分层战略完善错误代码;性能调至最优,省的引诱别人做没规矩的优化,搞出一堆混乱来。整洁的代码只做好一件事。

Read More

golang简单实现发布订阅模式

发布/订阅(publish-subscribe)模型通常被简写为pub/sub模型。在这个模型中,消息生产者为发布者(publisher)。而消息消费者者为订阅者(subscriber),生产者和消费者是 M:N 的关系。在传统生产者/消费者模型中,是将消息发送到一个队列中,而发布订阅模型则是将消息发布给一个主题。

Read More

golang生成素数

本文示例参考《Go语言高级编程》的生成思路,因为在看书过程中,此处理解了很久,特此记录以下。

素数是除了1和其本身公约数之外,没有其他公约数,也就是不能整除其他整数。

Read More

golang简单实现生产者消费者模式

生产者/消费者模型主要通过平衡生产线程和消费线程的工作能力来提高程序的整体处理数据的速度。简单来说,就是生产者生产一些数据,放到成果队列中,同时消费者从成果队列中来取数据。这样生产和消费就变成了异步过程了。当成果队列中没有数据时,消费者就进入饥饿的等待状态中;而当成果队列中数据已满时,生产者则面临因产品挤压导致CPU被剥夺的问题。

Read More
Search by:GoogleBingBaidu