0%

我认为,控制反转和模版模式以及框架的概念是类似的,而控制正转类同于策略模式,库。

反转的是依赖关系,对框架代码来说,实现的就是模版模式。使用框架的代码,其实被反转调用了。而库则是主动去调用的,是一种策略模式。

因为控制反转是一种设计模式,因此所有语言都存在。

例如C,JS是以回调函数实现。而Python作为一种动态语言,这方面的支持更为强大。

对于OOP的静态语言(Cpp,Java,Golang等等)来说,通过继承的实现更为自然(Golang通过桥接模式变相实现)。

阅读全文 »

我对23种设计模式的理解:

类模式和对象模式

有些博文会把对象分为类模式和对象模式,在我看来这两种模式是可以相互转化的。类模式主要强调类的继承决定结构或者行为,是通过继承的延迟到子类去实现,来完成模式。而对象模式则主要强调对象的关联来完成模式(关联一个接口用桥接模式完成继承,关联一个对象用适配器模式完成调用)。所以所有的类模式都可以转化为对象模式,而对象模式则不一定可以转化为类模式。

对写golang的同学来说这一点很容易理解,因为golang只有关联没有继承。想要通过继承来延迟到子类去实现,实际上子类是通过关联一个实现了某个接口的对象以及父类,然后把关联的过程封装在创建过程中。这样不同的子类通过动态的组合不同的对象来完成继承。(实际就是桥接模式)

创建型(5种)

阅读全文 »

概括

最近在做的项目设计到一些金钱交易方面的事情。涉及到一些分布式事务的逻辑。

参考了一些资料,做一些总结。

  • 一句话概括分布式事务:

一部分资源的数据更新以后,怎么保证另外一部分资源的数据也必须更新成功。

阅读全文 »

优酷

BidRequest.SiteObject

1
2
3
4
5
6
7
8
9
10
11
12
Name                媒体广告名称
Page 当前页面URL
Ref Referrer URL(从哪个页面链接到当前页面)
Content 视频的内容相关信息。只有视频贴片类型的广告位才会有这个字段
Title 视频标题名称
Keywords 视频标签关键字,如果是多个关键字,则使用英文竖线分隔
Ext
Channel 视频的频道ID
Cs 二级频道ID
Usr 视频上传者id,优酷里上传视频的用户ID
S 节目id
Vid 视频id

根据优酷提供的

ADX频道列表

ADX二级频道列表

阅读全文 »

golang字符处理已经踩过好几个坑了,记录一下

emoji表情的处理

用的mysql版本比较老,不支持emoji,所以需要golang来去除emoji表情

判断思路是普通汉字utf8下都是3字节内,而emoji表情是4字节,如果大于4字节就过滤掉即可

1
2
3
4
5
6
7
8
9
10
11
12
import "unicode/utf8"

func FilterEmoji(content string) string {
new_content := ""
for _, value := range content {
_, size := utf8.DecodeRuneInString(string(value))
if size <= 3 {
new_content += string(value)
}
}
return new_content
}
阅读全文 »

之前用触发器做数据统计

然后还是一不小心踩坑了

触发器新建了一张fileinfo表,file表中增删查改的信息都会以触发器的形式去修改fileinfo表

后来发现由于mysql是行级锁,由于file表的操作QPS会很高,这个行级锁会造成很大的性能损失

所以需要把增删查改写入随机行。

阅读全文 »

双十一京东mac air 11寸(redis作者也是用的这个)促销,只要3999,于是买了一台试试水。

本意是通过上一篇博客的内网穿透,直连公司虚拟机用的。但是没想到双休日虚拟机居然连不上了,p2p和代理方式甚至teamview都不行,为了防止这种情况再发生,还是进行一下配置吧。

记录一下防止以后还要装0.0

通用配置

最基础的应该是homebrew安装了,毕竟没有这个连wget之类的都没有

阅读全文 »

在一个爬虫程序的优化后,意外出现了内存泄漏

泄漏非常缓慢,一般会在运行4小时后导致OOM。

检查了很多次代码,找不到问题

排查过程

众所周知,golang是自带pprof工具的

阅读全文 »

买了一台阿里云的VPS,有了公网IP就想着内网穿透的事情

一台内网服务器A,一台外网服务器B,我希望通过外网连接SSH来连接到A

也就是在家里连公司内网的办公虚拟机

中间踩了几波坑,记录一下

ssh反向代理(不推荐)

阅读全文 »

说来惭愧,codis是去年年初就开始调研的。因为想codis和k8s一起上,重心一直在k8s这边。

导致codis上线一拖再拖,我们DBA用着twemproxy那一套老旧的方案快奔溃了。

上个月调研的时候发现codis改了HA的方案,上了sentinel。

我们之前在codis-HA方案上确实是踩了坑,有一套环境丢了数据。希望sentinel能更好一些。但是很快就发现了数据丢失的情况。

复现过程

阅读全文 »