- 博客(28)
- 收藏
- 关注
原创 基于etcd的分布式定时任务框架
在开发过程中,往往需要系统执行一些定时的任务,例如我们需要将数据进行迁移,又或者需要做一些数据的离线统计工作,这些都需要定时任务来进行处理。传统的方法就是quartz来写个定时任务脚本,然后该机器就会在特定时间执行我们要执行的代码,但是假如这台机器出现故障,那么这个定时任务就不会执行。 项目github:https://github.com/Mrfogg/gojob使用方式如下代码,我的机器已经
2017-12-03 22:47:35 2572
原创 Distributed system for fun and profit笔记1
系统模型分布式系统模型的主要性质是分布。更确切来说,程序运行在分布式系统。同时运行在独立的节点上通过网络互相连接,可能导致不确定节点以及消息丢失没有共享的存储时钟系统模型中的节点node是用来计算和存储的。他们有运行程序的能力存储数据的能力(内存(不可靠)或硬盘(可靠))时钟(不一定准确)通信链路节点之间可以通信的,通过相互发型消息,消息的读写是FIFO(先进先出),消息是可能丢失的 网络
2017-11-19 15:34:48 564
翻译 Goroutine调度分析(三)
上一篇文章中,大致讲了goroutine的C代码数据结构以及大致的调度策略,但是其实上一篇所提到的知识一开始go的设计,还有许多性能上的缺点。高吞吐量的其服务器以及并行运算,显示14%的的时间用在了runtime.futex()。scheduler 的问题一个全局的互斥锁和集中的状态。互斥锁保护goroutine的操作。Goroutine hand-off。工作线程经常之间传递runnable
2017-10-02 17:16:45 654
翻译 Goroutine的调度分析(二)
Go 是用C写的,对于Gorutime,主要有三个数据将结构(其实是4个,后面会讲)支持着goruntime记录着所有的信息以及调度。G G数据结构代表一个goroutine。他保存着goroutine的栈和当前的状态。当然也保存着它将要运行的code的一些相关信息。如下图所示 M M数据结构代表系统线程,它有保存全局goroutine队列的指针,当前运行G的指针,它自己的cache.SCHE
2017-10-02 14:26:44 422
原创 Goroutine的调度分析(一)
golang这个新兴的语言,最关键的就在于goroutine,而goroutine的调度又是golang的核心。可以说,没有goroutine,那么这个语言就会毫无意义,没有发明的必要。为了能够更好的写出高质量的代码,最近学习了goroutine的调度,收获良多。写篇文章总结记录一下。我的参考资料Analysis of the Go runtime scheduler 一篇分析goroutine的论
2017-09-24 23:46:39 889
原创 Gradiant Boosting Machine
最近看了Friedman的关于梯度提升算法的论文,记录一下。 1 函数估计 在机器学习领域,算法就是利用数据去估计一个函数或就是一个“预测学习”问题。用训练数据得到一个估计的F*(x),这个函数将x映射到y,然后我们通过最小化一个损失函数,求出我们想要的F(x),即: F∗=argminFEy,xL(y,F(x))=argminFEx[EyL(y,F(x))|x](1)F^{*} = \arg
2017-09-18 21:54:11 585
原创 R --xgboost使用
最近用xgboost做了个识别二维码的任务(仅仅是识别是或不是,并不解析二维码的内容)。这里记录一下xgboost的使用,免得将来忘记。其实个人感觉xgboost真的是一个很强大的工具,在很多数据挖掘比赛里xgboost受到了众多选手的青睐,因为又快又简单而且不粘人。 首先是训练数据的准备。#这里是从硬盘里读取训练数据生成数据框赋给data变量data = read.csv('/Users/
2017-09-10 19:56:26 3217
原创 golang--lru算法实现
package lruimport "container/list"// Cache is an LRU cache. It is not safe for concurrent access.type Cache struct { // MaxEntries is the maximum number of cache entries before // an item is e
2017-08-28 10:31:48 1192
原创 golang--net/rpc
用这个这个包,我们可以通过网络或者其他I/O的连接来访问其他机器上的方法。一个服务器可以注册一个对象,然后其他机器就可以用对象的类型名来远程调用这个对象的方法。当然这些可以被远程调用的方法需要一些限制:-the method’s type is exported. - the method is exported. - the method has two arguments, both e
2017-08-26 22:13:33 442
原创 控制并发数量
package mainimport “fmt”func main() { c := make(chan int ,10)for i:=0; i<10000;i++{ c <- 1 go func() { fmt.Println(i) <- c }()}}
2017-08-21 18:46:07 671
原创 终端命令积累
ps -fu coyte|grep java|awk ‘{print $2}’|xargs kill -9 删除coyte用户下所有的java程序。这里最关键的是awk命令,其中左边的命令的输出都是右边命令的输入。
2017-08-20 16:53:08 363
原创 管道控制循环退出
package mainimport ( “fmt” “os” “os/signal” “syscall” )var ( stop chan bool )func main() { stop = make(chan bool) go run() WaitForExitSign() close(stop)
2017-08-16 17:33:42 439
原创 golang --嵌套括号匹配
用一个整型count作为栈 func getContentInKH(str string, startIndex int) string { buf := bytes.NewBufferString(“”) var count int = 0 for i := startIndex; i < len(str); i++ { if str[i] ==
2017-08-15 11:02:02 1569
原创 代码提交问题总结
包的规范引入的包分为三个部分:系统包、自己的包、以及第三方外部包 更新数据库能更新单个字段就不要upsert注意检查程序有没有引用其他项目的包,这是IDE的弊端
2017-08-15 10:02:20 836
原创 一个goroutine通知另一个goroutine结束任务
package mainimport ( “fmt” “strconv” “sync” )var ( msg chan string signal chan bool )func main() { signal = make(chan bool) msg = make(chan string) var wg s
2017-08-14 23:12:13 853
原创 算法导论--二叉树
搜索树这个数据结果支持很多动态的操作:搜索、最小值啦、最大值,插入和删除,当然也可以作为词典以及优先级队列。啥是二叉搜索树 上图便是二叉搜索树,一个父节点最大分两个叉,并且左孩子子树的所有节点小于等于父节点,右孩子子树的所有节点大于等于父节点。这样就可以通过访问根节点顺序的不同递归遍历这样的二叉搜索树,这就是我们所熟知的:前序遍历,中序遍历,后序遍历。 上图伪代码是中序遍历,其实中序遍历二叉
2017-06-17 11:47:25 885
原创 算法导论--在平均线性时间下选择元素
一般的选择问题比简单的选择最小值要难的多。但是,随着n的增大,它们所消耗的时间都是O(n)。这一次我们介绍一个基于分治法的算法来解决这个问题,叫做随机选择算法,英文名叫,RANDOMIZED-SELECT。这个算法跟快速排序很像,只不过它只在一边执行partition算法。这个区别导致这样的分析:苏日安快速排序的时间复杂度是O(nlgn),但是RANDOM-SELECT算法的平均时间是O(n),在元
2017-06-12 16:34:48 426
原创 算法导论--线性时间排序
Counting sortcounting sort假设待排序的数组元素是整型,并且都在一个范围内,例如学生们的考试分数(没有0.5分)在0-100之间,这样我们可以用O(n)的时间来排序。 假如我们要给A[1…n]排序,我还需要两个数组,B[1…n]来排过序的结果,数组C[0…k]来存储临时变量。伪代码如下: 来解释一下伪代码: 2-3行:初始化C数组 4-5行
2017-06-08 20:27:56 608
原创 算法导论--快速排序
快速排序算法最坏情况下有O(n^2)的时间复杂度,但是在实践过程中快速排序往往有很好的平均性能,在O(nlogn)中的常数项很小。《算法导论》里有很多快速排序的分析,在这里我们不做太多的数学分析,仅仅从直觉上来谈这个算法。不仅如此,《算法导论》里的Partitioning算法也和我之前在国内教材上看的不一样,而且更容易理解。 快速排序采用“分治法”的思想,递归解决问题。
2017-06-06 20:36:49 892
原创 算法导论--堆排序
堆排序涉及到一个数据结构就是“堆”,所以我们先从“堆”开始讲起。一、堆堆的存储方式其实就是一个数组,而堆的逻辑结构是一个完全二叉树(什么是完全二叉树请自行百度)。如图(a)是一个完全二叉树,树的父节点都比孩子节点要大,这个就是“大根堆”,如果树的父节点都比孩子节点小,那么就是一个“小根堆”。而图(b)则表示了一个图(a)是如何存储的。这样就很容易计算每个节点的父节点,左孩子节点,右孩子节点。 例如
2017-06-03 12:02:25 568
原创 ElasticSearch--Lucene是怎么计算相关度的
话不多说,直接上公式 公式说明:score(q,d)是文档 d 和查询 q 之间的相关度queryNorm(q)是查询正则化因子 %coord(q,d)是coordination factor %对在查询字符串q中的每个单词t在文档d中的权重求和词频,单词t在文档d中的词频t的idft.getBoost()是一个权重的提升权重%norm(t,d) 是filed-lengt
2017-05-04 13:14:59 535
原创 ElasticSearch--相关度背后的理论
TF/IDF词频(TF)其实就是一个词在一篇文章中出现的频率在开平方,频率越高,说明这个词在这篇文章中的权重越高IDFidf(word) = 1+log(numDocs/(docFreq +1)) numdocs是所有文档的数量,docFreq 是包含有word的文档的数量。可以看出当docFreq越大,则IDF越小,例如像the这样的词,几乎每篇文章里都有,所以这样的词权重就很低Field-le
2017-05-04 10:20:47 504
原创 ElasticSearch--停用词的使用
使用停用词的利弊我们拥有更多硬盘资源,但是比较少的内存资源。从索引中去掉一些停用词平均每百万个文档中也就节省了4MB的资源。所以停用词并不是来节省存储资源的。 并且,我们移除一些停用词会带来一些坏处。比如我们就很难无法做到以下几种事情:区分 happy from not happy搜索 the band The The找到莎士比亚的名言”to be, or not to be”用国家
2017-05-03 16:20:15 2966
原创 ElasticSearch--以属性为中心的查询
在实体查询中,我感兴趣是最匹配的项,而不是说最匹配的属性,这个在Most_fileds 或者best_fields都是以属性为中心的查询。问题1:在多个属性中匹配同样的单词考虑most_fields查询是怎么执行的:ElasticSearch对每一个属性生成一个match query 然后把这些query 包括在bool query 中。 我们用validate-query API看一下GET
2017-04-28 14:45:11 857
原创 ElasticSearch--实体搜索
现在学习到了实体搜索,加入我们想搜索例如Person、product这样的实体,在这种情况下,一些关键的信息其实分布在数据的多个属性里的。比如person的数据存储{ "firstname": "Peter", "lastname": "Smith"}或者是地址,比如这样 ```{ "street": "5 Poland Street", "city"
2017-04-28 11:10:28 577
原创 ElasticSearch--Term-Based VS Full-Text
所有的访问执行关联度计算,但并不是所有访问都有一个分析阶段。除了一些特定查询例如Bool或者是function_score查询,这些不再文本上执行。文本访问可以被分成两个部分:Term-based queriesQueries 像term或者是fuzzy queries 是一种低水平访问,没有分析模块。它们在单个term上执行。一个term query for foo 寻找具体term 在反向索引中
2017-04-26 17:25:19 371
原创 ElasticSearch--联合过滤器查询
Combining Filters 之前的两个例子都是单个字段的查询。在生成环境中,你会需要多个值一起查询的,例如在sql语言中 SELECT product FROM products WHERE (price = 20 OR productID = "XHDK-A-1293-#fJ3") AND (price != 30) 这种情况,你需要一个bool query在c
2017-04-26 15:12:57 939
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人