Weakyon Blog

Weakyon

ADX信息调研

一 优酷 1.1 BidRequest.SiteObject Name 媒体广告名称 Page 当前页面URL Ref Referrer URL(从哪个页面链接到当前页面) Content 视频的内容相关信息。只有视频贴片类型的广告位才会有这个字段 Title ...

golang字符处理

golang字符处理已经踩过好几个坑了,记录一下 一 emoji表情的处理 用的mysql版本比较老,不支持emoji,所以需要golang来去除emoji表情 判断思路是普通汉字utf8下都是3字节内,而emoji表情是4字节,如果大于4字节就过滤掉即可 import "unicode/utf8" func FilterEmoji(content string) string {...

mysql隐式转换导致的越界bug

之前用触发器做数据统计 然后还是一不小心踩坑了 触发器新建了一张fileinfo表,file表中增删查改的信息都会以触发器的形式去修改fileinfo表 后来发现由于mysql是行级锁,由于file表的操作QPS会很高,这个行级锁会造成很大的性能损失 所以需要把增删查改写入随机行。 首先需要新加一个NoUseId字段,这个字段就是随机值匹配的字段 然后需要把原先的UploadSi...

macOS下golang环境配置

双十一京东mac air 11寸(redis作者也是用的这个)促销,只要3999,于是买了一台试试水。 本意是通过上一篇博客的内网穿透,直连公司虚拟机用的。但是没想到双休日虚拟机居然连不上了,p2p和代理方式甚至teamview都不行,为了防止这种情况再发生,还是进行一下配置吧。 记录一下防止以后还要装0.0 一 通用配置 最基础的应该是homebrew安装了,毕竟没有这个连wget...

排查一次golang的协程泄漏

在一个爬虫程序的优化后,意外出现了内存泄漏 泄漏非常缓慢,一般会在运行4小时后导致OOM。 检查了很多次代码,找不到问题 一 排查过程 众所周知,golang是自带pprof工具的 我利用pprof工具查看了内存使用情况 go tool pprof http://A.A.A.A:port/debug/pprof/heap (pprof) top10 54.09MB of 64.6...

内网穿透

买了一台阿里云的VPS,有了公网IP就想着内网穿透的事情 一台内网服务器A,一台外网服务器B,我希望通过外网连接SSH来连接到A 也就是在家里连公司内网的办公虚拟机 中间踩了几波坑,记录一下 一 ssh反向代理(不推荐) 最简单的内网穿透就是利用ssh反向代理 在B上设置/etc/sshd_config中修改GatewayPorts no为yes来转发外网的ip请求,随后重启ss...

当主重启时sentinel没有切换导致数据丢失

说来惭愧,codis是去年年初就开始调研的。因为想codis和k8s一起上,重心一直在k8s这边。 导致codis上线一拖再拖,我们DBA用着twemproxy那一套老旧的方案快奔溃了。 上个月调研的时候发现codis改了HA的方案,上了sentinel。 我们之前在codis-HA方案上确实是踩了坑,有一套环境丢了数据。希望sentinel能更好一些。但是很快就发现了数据丢失的情况。...

golang并发模式的思考

golang的使用一直是野路子。在看了几个国外开源项目(nsq,skynetservices)以后,才发现管道的重要性。 其实在公司的大型项目开发过程中早就意识到了这个问题,那就是mutex的使用是可以完全被channel所替代的。 但是channel的一些场景用mutex去实现会非常复杂。 一 实际开发中的例子 举一个资源池的例子 package main import ( ...

golang的http客户端读写超时设置

net/http库中提供的Client中的Timeout字段是针对整个读写过程的。 也就是说如果下载或者上传一个很大的文件,Timeout字段设置为10秒,那么到10秒的时候不管你在做什么这个连接会报出Timeout 而一般而言,客户端其实需要的是每个连接的read,write timeout。这里需要设置Client中的Transport字段 Transport字段是一个接口 ty...

模板模式实践--设计模式

在模板模式中,一个抽象类公开定义了执行他方法的模板,但是没有给出方法的实现。 方法的实现延迟到由继承的子类来实现。 抽象实现 然而golang并没有继承,所以只能用组合接口的方式,来实现继承重写方法,使得父类能直接调用抽象出的方法。 这是golang的实现 package main import ( "fmt" ) const ( typeA = iota typeB...