自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

做一只会做软件的程序猴

一个类似于笔记的博客

  • 博客(20)
  • 收藏
  • 关注

原创 在go中封装future对象处理异步结果

在go中,有了协程和chan,就能轻松而优雅的实现很多模式。而引入future的思想可以解放思维。其它的不说了,看注释吧。package utilsimport ( "sync" "time")/*Future 是一个未来的任务的抽象。和python里的那个有点类似。在异步任务中SetResult,在GetResult的时候会等待result生成,或者超时。...

2018-07-19 21:36:16 1873

原创 搭个微服务(二)与错共舞

咦?panic啦如果你是学院派,玩微服务必须dubbo,zookeeper不离手,业务保证100%可用,那本文就不是为你写的啦。由于微服务间采用网络通讯,“错误”是难免的。在传统的进程中,除了太阳黑子爆发导致硬件寄存器出错(参见一个经典案例),调用函数几乎是不存在失败的。但微服务不同,产生“错误”主要有以下几种情况:网络间发生抖动 某个服务发生异常,导致依赖它的服务异常某个服务正...

2018-07-14 01:52:46 268

原创 搭个微服务(一)微服务初探

前言好久没写博客了,最近主导了一个产品的后端设计。沉迷于微服务不可自拔呀(改BUG改的不可自拔:P)。准备写一个系列,用来记录这个产品从无到有的心路历程。也许多年后的我,看到这先文章,会大吃一惊。我那时真菜呀。首先,我不是砖家,我只是一只大肥猫。观看本文后果自负。本文纯属搞笑。为什么选择微服务在《微服务架构》这本书中,作者已明确:微服务不是银弹。相反,它解决很多问题的同时,也会...

2018-07-10 21:19:25 847

原创 python3 实现rc4算法

实现rc4库非常简洁,看代码吧import base64import hashlibimport osfrom io import BytesIOclass RC4(object): def __init__(self, key=None): self.key = hashlib.md5(key.encode("utf-8")).hexdigest(...

2018-07-07 01:54:19 3769 2

原创 python:优雅的退出程序或重启服务

使用任务队列有助于松耦合的设计。有时我们不得不重启服务(比如发新版),但不能打断队列中正在进行的任务。 正确的做法是handle sigterm信号,具体代码如下:import sysimport argparseimport loggingimport signalimport asyncioclass GracefulKiller: kill_now = False def _

2017-11-18 11:06:21 8569 1

原创 django:自定义静态文件服务器

静态文件使用nginx是比较有效率的,但是有时,我们需要对文件下载做细粒度的处理,比如鉴权下载,此时就需要写代码了。 下面将一步步实现一个自定义的文件handler。关闭自带的static handler确保没有开启 django.contrib.staticfilesINSTALLED_APPS = ( 'django.contrib.admin', 'django.contri

2017-10-14 22:33:26 1168

原创 go web :5 用Interface{}简化对json的处理

使用go处理json,需要把它unmarshal到一个结构体。对于用惯了python的我,简直要吐血啊。 为了屏蔽掉讨厌的结构体,在处理json的时候,可以使用interface{}。具体姿势如下: 服务端:func TestTemplate(w http.ResponseWriter, r *http.Request) { timeout := time.Duration(5 * ti

2017-09-08 14:32:01 2994 2

原创 go web: 4 处理默认错误

panic会导致程序崩溃在go web中,难免会引发panic。比如用户在一次请求中输入了不正确的数据导致除0或者数组越界。如果不设置默认的错误处理,那程序就会崩溃退出,这显然是不能接受的。所以要实现一个默认的总错误处理。代码依前文,现在项目中已经有如下结构:src--| handlers--| test--| tes

2017-09-03 00:04:32 617

原创 go web: 3 中间件和路由

中间件中间件的本质来看,就是在执行handler的前(后)先执行一个自定义的handler而已。那问题变成,go web中,每个handler是怎么执行的。答案在mux := http.NewServeMux()中,稍微阅读下源码,我们就能得出,mux对象中有个ServeHTTP(w, r)方法。这就秘密所在。根据go的鸭子类型特性,我们完全可以实现一个结构,然后让它拥有ServeHTTP(w, r

2017-09-02 23:53:09 2426

原创 go web: 2 封装日志包log

在web项目中,记日志是非常重要的。所以,我做的第一件事,就是向log包动手。 和Python相比,log包功能上逊色不少,但它给我们提供了基础的构架,让我们能自己稍微封装下。需求对日志包我的要求很低,只要满足: 1. 提供Error, Info方法即可 2. 日志按天分割,即每隔一天,把昨天的日志保存为 logname.20170823这样的文件代码在原来的基础上,我们在src中创建文件夹l

2017-09-02 23:51:23 1521

原创 go web: 1 创建项目

时隔1年,又拣起了go。而且是我一直很想玩的go web。网上的资料大部分都不全,这里我会实现一个简单的商业项目,目前已经应用到公司的统计服务中。 废话不说,开go。建立项目首先,创建结构:src--| handlers--| test--| test.go | main.go网上关于建立项目大部

2017-09-02 23:49:21 1260 1

原创 go语言实现设计模式(三):模版模式

模版模式真的是一个好东西。所谓模版模式,就是说,某几个类中相同的操作和代码提取到父类的一个函数中,并定义相同的操作为抽象函数。由子类来实现。估计我也没表达清楚,下面还是看代码来讲解吧。例:我们有两个文档处理程序,一个处理本地数据,一个处理网络数据。这两个类的功能和执行步骤高度类似,但是,获取数据的方式不同。在这两个类中势必存在大量结构相同的代码。现在,我们使用模版模式来重构这两个类。1.定义父类,在

2015-11-01 21:34:52 1053 1

原创 go语言实现设计模式:前言

转眼间工作快4个月了,让我欣喜的是在工作中,我接触到了一直以来让我念念不忘的go语言。在我还是个学生时,就对这门新兴的语言有着兴趣,但当时只是浅尝辄止。在这4个月中,对go语言的了解从无到有,慢慢加深,我越发感受到它的美好。甚至我对它的喜爱超越了陪伴我多时的C#。项目组中大部分都是曾经写内核态程序的大神,这也使得面向对象的概念在我们现在的程序中并不明显。这无疑给了我一个大大的宝藏,这些尚未设计的地方

2015-11-01 10:59:40 863

原创 go语言实现设计模式(二):简易工厂

简易工厂主要是用来解决对象“创建”的问题。以下的例子取自《大话设计模式》中第一章,实现一个可扩展的“计算器”。当增加新的功能时,并不需改动原来已经实现的算法。由于是简易工厂,所以我们还是需要对工厂类进行相应修改。1.首先,我们定义一个计算的接口package calctype CalcSuper interface { SetData(data ...interface{}) Cal

2015-11-01 10:29:36 1932 1

原创 go语言实现设计模式(一):策略模式

策略模式定义了算法家族,在调用算法家族的时候不感知算法的变化,客户也不会受到影响。下面用《大话设计模式》中的一个实例进行改写。例:超市中经常进行促销活动,促销活动的促销方法就是一个个策略,如“满一百减20”,“打八折”等。现在实现策略模式,用CashContext生产策略,并完成策略的调用。1.首先定义所有策略的接口。1

2015-10-31 22:28:02 2228 1

原创 C# Trie树工具类

写了个简单的Trie树类,用来检索关键词和查询前缀用。举例:和谐关键词用。//string[] keys = { "和谐", "社会", "你我共建" }; //BuildTree bt = new BuildTree(keys); //string testStr = "和谐,和(干扰)谐,你#我#共#建。";

2015-01-07 14:43:00 772

原创 linqToXml终结了,封装成了操作类。。。

闲来无事写了一个xmlHelper类。感觉比市面上流行的那个好用一些。好处:使用反射,所以传入参数,查询条件等等全是string类型。坏处:使用反射和表达式树,应该效率会差一点点。

2015-01-07 11:11:07 432

原创 解决cookie中文乱码问题

很多时候,我们要写一个中文的cookie到浏览器中,比如做全站静态的时候,留下登录用户的用户名之类的。但是,虽然主流浏览器对中文的支持已经较好,一些手机浏览器却仍然会把中文解码成一堆乱码。比如wp自带的IE。解决办法真心简单。。。。。那就是对cookie进行编码。1、在服务器端对cookie进行编码,再写入。 HttpCookie username = new Ht

2014-04-18 21:50:20 1293

原创 第二篇:花时间打个小框架

上回说到,一时无聊用类把自定义的对象来了个大封装。起初只是为了方便写代码,感觉有个小规范好一点点。但是旁边的峰锅锅说,既然你都写成了类,为什么不顺便做一个由excel驱动的框架呢?这个excel的框架,说白了,就是完全抛开QTP(现在好像叫uft)只需在excel中写出事件的始末,就能在QTP中进行调用执行相关的操作。恩恩,就像下面这个excel似的。(非常感谢峰锅锅提供他们公司以前的这个

2014-03-05 19:56:25 815

原创 第一篇:面向对象试行QTP

前言:最近从开发转到了自动测试,反正正在实习,有大把的时间。所以也乐于转型。而且,我还碰到了我的公司中的老师,亲爱的秦哥哥。但愿这一年的实习期能让我真正的掌握QTP的运行。QTP,用VB。哈哈。好开心的。因为VB不支持继承,多态。那怎么面向对象呢?我试了一试,居然是支持“类”这个概念的。而且,也有Public private之类的概念。好了,那就行了。可以慢慢的构造我自己的架构了。

2014-02-22 21:56:45 579

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除