0%

这是一篇短文。

用过python的都知道generator,也就是生成器。生成器函数返回一个迭代器。那么如果用golang如何来实现呢?两种方法:channel和闭包。

Read more »

先说一下web server和http server的区别。http server,顾名思义,支持http协议的服务器;web server除了支持http协议可能还支持其他网络协议。本文只讨论使用golang的官方package编写web server的几种常用方式。

Read more »

在上一篇《reflect实践与剖析》的文章中,本来打算写的更深入一点,结果发现reflect里面的东西太多了,在一篇文章中很难写全,就草草收尾了。今天谈一谈关于reflect的另一个问题:reflect为什么慢?

先问是不是,再问为什么。我们先来看一下reflect是不是真的慢。

Read more »

Go struct拷贝

在用Go做orm相关操作的时候,经常会有struct之间的拷贝。比如下面两个struct之间要拷贝共同成员B,C。这个在struct不是很大的时候从来都不是问题,直接成员拷贝即可。但是当struct的大小达到三四十个成员的时候,就要另辟蹊径了。

1
2
3
4
5
6
7
8
9
10
11
12
13
type A struct {
A int
B int
C string
E string
}

type B struct {
B int
C string
D int
E string
}
Read more »

Kafka是一种高吞吐、高性能的消息队列。参考官网Quick Start可以很快在本地把环境搭起来。

Quick Start

1.官网下载并解压

1
2
$ tar -xzf kafka_2.11-0.10.0.0.tgz
$ cd kafka_2.11-0.10.00
Read more »

skiplist,又称作跳表,跳跃表。

最开始接触skiplist的时候是在看那本《数据结构与算法分析——C++语言实现》,这本书很好,但是看完的人并不多。在书中第一次看到skiplist数据结构的时候,感觉还挺复杂的。直到去年看redis实现的时候又看到了skiplist才发现这真的是一种很巧妙的数据结构。下面先看一下最简单的skiplist,然后介绍两种变体。

Read more »

微服务架构火了之后,伴随而来的一个问题就是如何做服务注册和发现(Service Register and Discovery)。

为什么需要服务注册与发现

对于微服务架构来说,每个服务都可以单独地管理和部署。比如把服务部署在多个节点上,前端请求过来之后采用负载均衡策略把流量打到具体的机器上。如果某个节点宕机(比如最常见的原因Out of Memory),这时候用户的请求达到了宕机的机器上就会造成很不好的用户体验。又比如说横向扩展的时候,手动添加配置也很繁杂。

服务注册与发现就是用来解决这些问题的。所有服务的IP地址以及端口都存放在一个强一致性的数据中心。对于服务宕机以及添加能够自动发现,不再需要人工干预。

Read more »

这次的QCon去打了个酱油,发现现在微服务框架已经变成最火的概念了。有人说微服务其实就是SOA的包装,其实我觉得并不能完全这么说。SOA和微服务的区别在于粒度更细,更容易,但是话说回来,“细”,“容易”本身也不是用来区分的。QCon回来找了一本书《Software Architecture Patterns》看了一下,说的还不错。这是一本比较轻量的书,相比于之前的一本圣经基本的书《Pattern-oriented Software Architecture》,实在是太轻量了。下面就简单谈一下书中提到的几种软件建构。

Layered Architecture

这种架构是最古老的架构,一般最早想到的架构就是这种架构,在早起的Java EE项目(比如传统软件公司)中广泛使用。可以用下面的图来表示。简单来说就是整体按功能分成多个层级(展现层、业务逻辑层、持久化层、DB),层级之间再交互,理论上各个层级之间松耦合,但是实际实现中经常会出现紧耦合的情况。正常的request是通过一个一个层级最后到达DB。

Read more »

我离职了。

萌生离职的想法的时候其实在入职不久就产生了。15年校招的时候,差一点成功入职G家。现在回想起来应该是G家在15年的时候招人太多,导致Bar下降了不少。所以在我入职贵司的时候,当时还想一年之后再试一次,也就是16年的二月份,结果又一次挂了。而这大半年由于一直在练算法,工作上又比较枯燥乏味,导致工作上也不是特别上心,而技术水平上提高也不是太多。

在贵司的大半年可以用一个词来概括就是安逸,毕竟公司的节奏就是工作和生活的平衡,当然这并不是说这种公司文化不好。在公司年会上的时候,有人问如何做到工作和生活的平衡,老板说,关于这个问题其实没有什么Balance的说法,family always comes first。这句话尤其让人感动。虽然我心里认为贵司是一家很好的公司,但是我还是决定要走。为了表明决心,我在还没有开始面试的时候就和Leader提出了离职,当然这也是出于不能耽误公司的工作的考虑。

Read more »

最近公司需要做一个mock server。在广告行业中,有时候为了做统计需要像第三方发tracking url或者post一些数据。为了测试,mock server的角色就是代替第三方的server来接收tracking url,然后基于此做进一步的操作。

技术选型

我们这边有一个回归测试框架,是用Python开发的,每次新的feature上线之前需要跑过所有的回归测试,伴随着业务不断发展,新的case会不断被加到回归测试的case集合,现在大概有800多个case。mock server的最终归宿也是继承到回归测试框架中负责第三方相关的测试。首先是技术选型的问题,大家都知道现在使用Go来做Web service极其简单,所以我最开始使用了Go的Gorilla很随意的搭了一个,但是后来考虑到和回归测试框架继承,被否定了,采用了Python。Python做Web Service就是WSGI那一套,也有很多有名的框架像Tornado,Webpy什么的。我本着节约资源的原则选择CherryPy,CherryPy是很轻巧,但是功能以及文档不是很全,对于从0开始上手很不友好,暂且按住不表,之后单独用一篇文章来写。

Read more »