2018年5月6日
摘要: 笔者参与过一些完全以面向对象为设计思想的项目,不过感觉都不太好,例如,它们往往有非常之多的硬编码和隐藏的逻辑,导致小小的修改往往会出现意外的问题;因为对象调用跳转太多,代码也很难阅读和修改,调用关系很难理解。 个人认为,这不但是写代码的人不注意的问题,而是面向对象这种方法,鼓励了非常之不好的代码写法 阅读全文
posted @ 2018-05-06 21:19 dearplain 阅读(927) 评论(0) 推荐(0) 编辑
  2018年3月11日
摘要: github地址:https://github.com/dearplain/goloader 这里有以前的一些思路:http://www.cnblogs.com/dearplain/p/8145985.html,不过改了好多,具体还是要看代码。 这个动态加载库是很有意思的项目,它直接重用了golan 阅读全文
posted @ 2018-03-11 12:21 dearplain 阅读(11786) 评论(1) 推荐(0) 编辑
  2018年2月3日
摘要: 工作流是啥? 在界面上画画点点就能生成代码,这是很吸引人的事情,也是很多自动化工具追求的目标。工作流就是这么一个东西,通过定义流程和输入,就能实现你想要的东西,不需要编写代码。 工作流的实现 通过解析流程图,可以知道执行什么逻辑、输入什么数据和生成什么数据。 工作流和逻辑引擎为什么没有真正在代码的世 阅读全文
posted @ 2018-02-03 15:22 dearplain 阅读(1228) 评论(0) 推荐(0) 编辑
  2018年1月12日
摘要: 线上一个服务有个严重问题,处理消息数1k/s提升不上去,经过查看是阻塞在了一个新加的函数上,这个函数负责收集信息,送到一个channel上,再由某个函数处理,这个处理函数很简单,看不出任何问题,最大的特点是为了不加锁,只起一个goroutine。 问题很明显了,只起一个goroutine,当系统繁忙 阅读全文
posted @ 2018-01-12 16:11 dearplain 阅读(3093) 评论(0) 推荐(0) 编辑
  2017年12月30日
摘要: update: 实现在此,欢迎star: https://github.com/dearplain/goloader 实现后的一些介绍:http://www.cnblogs.com/dearplain/p/8543804.html golang动态加载原生代码思路(非plugin,非so文件。使用m 阅读全文
posted @ 2017-12-30 11:55 dearplain 阅读(6611) 评论(0) 推荐(1) 编辑
  2017年12月9日
摘要: 整个代码不是很复杂,可以从代码中理解如何实现。 特点:btree,很小巧,但实现了完整事务机制,稳定,即使丢电也不会导致数据库错误。 整个结构如下: meta page (前两页) > freelist page (第三页) | > bucket page (属于leaf page 开始是第4页) 阅读全文
posted @ 2017-12-09 16:02 dearplain 阅读(2020) 评论(2) 推荐(0) 编辑
  2017年12月6日
摘要: 1. 建议使用ext3 ext4等日志式文件系统,并打开journal。 2. 文件系统无法保证write是原子的,所以,建议直接使用一些优秀的数据库保存数据或者配置,比如sqlite。 sqlite可以考虑打开synchronous = FULL, fullfsync = 1。如果还是出现文件损坏 阅读全文
posted @ 2017-12-06 17:15 dearplain 阅读(1038) 评论(0) 推荐(0) 编辑
  2017年11月30日
摘要: 一般来说,我们接收到消息,然后通过消息队列发送消息给worker的时候,会有些额外的字段,这些字段不属于实际的消息,我们想把实际的消息和发给worker的消息分开定义。这时候我们会把worker消息中一个字段定义为interface{}或者object,这个字段表示任意的实际消息。 一切看起来很完美 阅读全文
posted @ 2017-11-30 16:05 dearplain 阅读(9581) 评论(0) 推荐(0) 编辑
  2017年11月25日
摘要: 同步状态和消息推送,几乎是每个app或者设备都需要的,设计一个省流量,能简化两端逻辑,能应对业务增长的框架尤为重要。 我认为,以下方法不够好: 1.每一个状态都设计一个消息,导致每增加一个状态,服务端都需要改动。 2.每次上线后都请求一次所有类型的最新的消息。 3.最新的消息只推送一次就完事。 第一 阅读全文
posted @ 2017-11-25 22:25 dearplain 阅读(1085) 评论(0) 推荐(0) 编辑
  2017年11月19日
摘要: 我们用的是cassandra3.7官方的docker镜像,在生产环境发现有一个小时一次停顿的现象。我猜测是java gc的原因,于是看了cassandra的gc日志,果然发现有每小时长达300ms-2s的停顿。 经过研究发现是netty的原因,netty用了direct memory,因为是通过mm 阅读全文
posted @ 2017-11-19 11:33 dearplain 阅读(1581) 评论(0) 推荐(0) 编辑