go模式-责任链 所谓责任链也就是一组任务执行,每个任务输入是上一个任务输出,每个任务输出是下个任务输入,每个任务完成自己负责部分,相当于一个管道串接起来完成任务,因此也叫pipe filter ,常用于任务编排。
go模式-生产者消费者 常见的生产者消费者,就是多个生产者并发生产数据,多个消费者并发消费数据。在golang中很简单,生产者生产全部输入到channel中,消费者消费全部从channel中读取,天然具有并发安全性。
go并发-异步和超时控制 go 中可如下实现异步Future功能,异步任务AsyncService返回的是获取数据的管道chan string而不是直接的string调用后立即返回。通过管道控制,可轻松实现异步和超时控制。
go unsafe常见应用 go 本身是类似java一样,底层运行虚拟机,整个程序处于托管状态(GC等),要想和底层打交道需要用到unsafe模块,unsafe也常用于性能提升和程序灵活处理场景,本文介绍unsafe常用的几个场景。
字典树(Trie树) 字典树主要是为了解决前缀匹配问题,比如下图的搜索输入前缀后匹配比如有6个字符串how,hi,her,hello,so,see,如果现在输入字符判断是否要前缀匹配指定字符串,必须一个字符串比较,如果有100万就要比对100万次,如何优化这个问题呢?其实我们可以理解,每输入一个字符,应该整个搜索空间就会缩小,具体来说就是构造一颗如下的树,就是所谓的字典树(Trie树),一旦构建完成,搜索过程中,即可完成动态剪裁,最大搜索次数就是最长字符串长度。具体实现来说就是一颗多叉树,可以使用hashmap或者数组
并查集(Union Find) 算法背景Union Find算法,中文并查集。主要用来解决图论中的连通判断问题,简单抽象问题为:平面上有n个点给定他们之间两两连接关系要求输入任意两个点,判断他们是否能够有一条路径联通算法步骤一旦有连接,就把一个节点设为另一个节点的父节点,最终连通的点会构成一颗树。通过判断两个节点的根节点是否相同,即可判断是否连通。具体如下初始化时,每个节点指向自己,也就是根节点遍历给定的两两连接关系,分别找各自的根节点,将两个根节点连接起来判断是否联通很简单,找两个点的根结点是否相同整个过程是
go 接口/错误处理 知识点 接口面向对象3大特性,封装/继承/多态,封装采用结构体完成,继承使用组合的方式完成,而接口使用的是所谓的鸭子模型(Duck Type)。也就是说不像c++/java中,实现接口必须继承实现,只需要实现了接口定义的一组方法,那么就默认为实现了该接口。如下,利用接口实现多态,注意new后传入对象指针// --- interfacetype Animal interface { sayHello(words string)}type Peopple struct {}func
3.kafka 重要参数和性能测试 参数配置不同的参数对集群性能影响很大,除了之前基础与安装中指定的参数,还有一些中要的参数值得注意,包括如下Broker参数Topic 管理auto.create.topics.enable:是否允许自动创建 Topic,一般设为false,允许集群管理员统一分配和管理。unclean.leader.election.enable:是否允许 Unclean Leader 选举,一般设为false,不允许落后太多的副本参与选举。auto.leader.rebalance.enable:是否允许定
2.kafka 选择和集群部署规划 kafka有不同的发行版和版本号,部署时选择什么样的硬件等都决定kafka不同的特性和性能,在正式上线前通常需要考虑如下选择:发行版本选择当kafka作为一个开源框架有自己的一套生态,不仅有原生的kafka框架,也有开源公司在社区版本基础上扩展开发的发行版,相比来说提供的功能更多,使用更加友好,但是定制性下降,目前主流版本如下:Apache Kafkakafka的社区发行版,最正宗,大公司一般在此基础上定制自己的版本,但是特性相比较少,比如缺少自带的集群监控系统,个人用适用于简单流处理场合。另外
go 类型/表达式/函数 知识点 最近准备换工作,又过一遍常规go基础,发现还是很多细节需要细扣下,顺便分享给需要的朋友参考,既是自我提升,也能加快开发效率。基础用好多值传递和常量自增定义,很多时候事半功倍。const ( east = iota + 1 south west earth)const ( On = 1 << iota Off Unknown)func TestBase(t *testing.T) { // 支持多值传递 a := 1 b := 2 a, b =.
3.深入PHP中的引用 虽然常说做C/C++编程的程序员转做PHP编程很快可以上手,但是对于PHP中的引用和C++的差别比较大,这种差别更多是由于C++和PHP的变量存储结构不同造成的,本文试图详解一下PHP中的引用,对C++中的引用只是作对比时提及,如果要了解C++的引用请参考《C++ Primer》一书。理解本文最好先看一下笔者PHP变量存储结构的博文和变量赋值行为的博文,本文说明PHP引用特别是对象引用和函数返回引...
c++ 类基本概念易错点 总结常见的类基本概念中的容易混淆和弄错的地方。 1.const[1].函数声明为const,无法修改类成员变量的值,声明和实现都需要加const关键字[2].const函数还是可以正常访问const和非const成员变量[3].声明变量为mutable表示变量是特殊的,在const中还可以改变值class Test1{public: Test1(); void D...
datax同步hive到mongo 1.datax简介datax是阿里开发的大数据同步引擎,现在使用越来越广泛,其基本原理就是各种输入输出统一转换成中间格式,中间层处理各种控制来完成整个过程。具体详细截取段文档如下DataX本身作为离线数据同步框架,采用Framework + plugin架构构建。将数据源读取和写入抽象成为Reader/Writer插件,纳入到整个同步框架中。Reader:Reader为数据采集模块,负责采集数据源的数据,将数据发送给Framework。Writer: Writer为数据写入模块,负责不断向