自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(63)
  • 收藏
  • 关注

转载 互联网流量下的分层实验平台是咋做的

前言对于现在拥有大流量的互联网平台来说,一个微小的页面改版或者是一个微小的后台内容推荐模型参数的修改都会产生非常大的影响,如何安全的在线上流量验证这些改进是否真有助于提高公司的收益或者是用户的体验呢?A/B Test很容易想到做A/B Test,我们可以用一种方式把全网流量分成100份,取其中两份流量来进行实验:一份作为对照组,一份作为实验组。由于实验所占流量为全网的1%,故而影响...

2018-10-30 11:05:00 536

转载 机器学习web服务化实战:一次吐血的服务化之路

背景在公司内部,我负责帮助研究院的小伙伴搭建机器学习web服务,研究院的小伙伴提供一个机器学习本地接口,我负责提供一个对外服务的HTTP接口。说起人工智能和机器学习,python是最擅长的,其以开发速度快,第三方库多而广受欢迎,以至于现在大多数机器学习算法都是用python编写。但是对于服务化来说,python有致命的问题:很难利用机器多核。由于一个python进程中全局只有一个解释...

2018-10-15 10:30:00 413

转载 RabbitMQ和Kafka到底怎么选(二)?

前言前一篇文章《RabbitMQ和Kafka到底怎么选?》,我们在吞吐量方面比较了Kafka和RabbitMQ,知道了Kafka的吞吐量要高于RabbitMQ。本文从可靠性方面继续探讨两个队列的差异。RabbitMQ可靠性我们通过前文知道,RabbitMQ的队列分为master queue和mirror queue,mirror queue 在master queue宕机之后,会被...

2018-09-14 11:04:00 292

转载 RabbitMQ和Kafka到底怎么选?

前言开源社区有好多优秀的队列中间件,比如RabbitMQ和Kafka,每个队列都貌似有其特性,在进行工程选择时,往往眼花缭乱,不知所措。对于RabbitMQ和Kafka,到底应该选哪个?RabbitMQ架构RabbitMQ是一个分布式系统,这里面有几个抽象概念。broker:每个节点运行的服务程序,功能为维护该节点的队列的增删以及转发队列操作请求。master queue:每...

2018-09-12 10:02:00 6597

转载 基于海量词库的单词拼写检查、推荐到底是咋做的?

前言在我们日常应用中,应该遇到不少类似的状况:写文档时,单词拼写错误后,工具自动推荐一个相似且正确的拼写形式;使用搜狗输入法时,敲错某个字的拼音照样能够打出我们想要的汉字;利用搜索引擎进行搜索时,下拉框中自动列出与输入相近的词语。等等,不一一列举。这种功能是如何实现的呢?里面用到了哪些算法呢?本文就来介绍一个能够完成这个任务的算法。问题描述其实,这几个问题都能够转换成...

2018-09-05 08:35:00 234

转载 死磕一周算法,我让服务性能提高50%

前言我最近一直在公司做检索性能优化。当我看到这个算法之前,我也不认为我负责的检索系统性能还有改进的余地。但是这个算法确实太牛掰了,足足让服务性能提高50%,我不得不和大家分享一下。其实前一段时间的博客中也写到过这个算法,只是没有细讲,今天我准备把它单独拎出来,说道说道。说实话,本人数学功底一般,算法证明不是我强项,所以文中的证明只是我在论文作者的基础上加入了自己的思考方法,并且还没有完...

2018-08-24 09:39:00 131

转载 如何为分布式系统优雅的更换RPC

为啥需要更换RPC?很多小伙伴都遇到过需要为分布式系统调用更换RPC的问题,为什么会遇到这种事呢?其实,在系统搭建初期,需求简单,架构简单,最重要的是请求量也少,所以很多系统都采用快速原型开发模式,对rpc的要求不高,随便找一个顺手的或者熟悉的rpc框架套进系统中即可。但是随着业务复杂度增高,系统承载的请求量增高,可能一开始所采用的RPC框架显现出一些致命的问题,比如大扇出问题。我们以...

2018-04-25 10:04:00 151

转载 手把手教你实现boost::bind

前言boost::bind操作想必大家都使用过,它特别神奇,能够绑定函数与参数,绑定后能够改变参数数量,并且还可以使用占位符。它可以绑定普通函数也可以绑定类成员函数。好多小伙伴试图看过boost::bind的源码,但是可能效果不佳。原因在于boost::bind的代码考虑了很多使用情况,而且还要兼容各种编译环境,所以实现的代码很复杂,很容易在看源码的时候被各种宏定义带跑偏,以至于乱了思...

2018-04-16 10:15:00 649

转载 我是如何用单机实现亿级规模题库去重的?

背景最近工作中遇到了一个问题:如何对大规模题库去重?公司经过多年的积累,有着近亿道题目的题库,但是由于题目来源不一导致题库中有很多重复的题目,这些重复的题目在检索时,除了增加搜索引擎的计算量外,并不会提高准确率。此外由于题目过多,搜索引擎往往采取了截断策略,只对一部分题目进行计算,这导致了某些正确的题目反而得不到计算,拍搜准确率甚至不增反降。所以对于一个搜索引擎来说,虽然初期增加题目数...

2018-02-09 18:10:00 267

转载 搜索引擎:该如何设计你的倒排索引?

搜索引擎如何工作?信息检索已经发展的非常成熟了,应该所有人都不陌生。我有幸这几年接触过并且实际做过一些搜索引擎开发的工作,特此总结并分享给大家。实际上,一个成熟的搜索引擎是想当复杂的,比如百度的,就分nginx,vui,us,as,bs,da.....等等这些模块,当然这些简写的字母大家也不必了解,只要知道它确实复杂就可以。今天我所讲的是一个简化版的搜索引擎,简化到只涉及到倒排建立和...

2018-01-18 10:08:00 491

转载 服务中有“推”有“拉”,该如何分析线上问题?

背景随着队列技术越来越成熟,很多公司都把MQ放入其技术栈中,线上也基本都运行着该组件。接下来我们一起讨论下,当使用MQ后,你该如何分析线上问题?这里给出两个名词解释,“推”:指常用的RPC调用,“拉”:使用队列进行消息传递。示例架构如上图一个普通的服务架构,图中有多个要素,下面对这几个要素进行详细说明。用户 网站的使用者,他会有奇怪的行为:当迟迟看不到结果页面时,会反复刷新浏...

2018-01-04 09:52:00 104

转载 2017我都干了啥?

前言过完农历新年,我也即将奔入三十而立之年。对于男人来说,三十意味着更多的责任。回头看自己从毕业到现在五年,有进步,但稍稍有些遗憾,当初制定的目标:年薪百万,架构师统统么有实现。这不免让我想到了前段时间的“中兴跳楼事件”,我离他还远么?想到这里,我不免有些难受,那种无力感就像我深陷泥沼,越挣扎陷入的越深,而我却只能眼睁睁的看着自己下沉。我感觉有些喘不过起来,我的脚,我的腿,我的腰,我...

2018-01-02 11:17:00 142

转载 什么?-你的服务竟然被探活搞死了?

背景今年开发了好多服务,着实踩了不少的坑。这不,分分钟就被探活搞的死去活來。这里我把这些经验分享给大家,避免大家再继续犯这种错误。通用tcp探活原理其实,探活原理特别简单,只要稍懂计算机网络就能够理解。检测端 发起tcp三次握手,建立新连接,连接建立成功代表服务活着,建立失败代表服务死了,之后发送rst包主动断开连接。被检测端 接受检测端发送的三次握手手建立连接,当接收到检测...

2017-12-26 10:06:00 383

转载 弹性伸缩服务实战:我是如何节省80%的机器成本的

前言今年一直在做的事情就是成本优化,今天分享的是如何打造一个弹性可伸缩服务。why? 为什么需要弹性伸缩?一个网站,通常流量大小不是每时每刻都一样,有高峰,有低谷,如果每时每刻都要保持能够扛住高峰流量的机器数目,那么成本会很高。一个诱人的想法就是根据流量大小自动调节机器的数量,这就需要我们开发弹性伸缩服务。How?怎么实现弹性伸缩?我们公司使用的是阿里的ECS,而它提供弹性伸缩...

2017-12-21 10:17:00 458

转载 最长公共子序列与最小编辑距离-你有更快的算法么?

前言工作以后很少用到算法,时间长了脑袋也不灵活。但是最近,我有幸在工作中又开始用到算法,这使我欣喜若狂,这两个算法主要用在计算文本相似度的场景中。小伙伴看标题中的“最长公共子序列”和“最小编辑距离”算法想当然都认为是烂大街的算法了,有什么好讲的。当然那种朴素的$ O(N^{2}) $的算法本文不去讲,而是讲更快速的算法,而且还有变种问题。最长公共子序列对于字符串P和T,求其最长公共...

2017-12-20 16:59:00 331

转载 我是怎么用跳表优化搜索引擎的?

前言对于跳表,我想大家都不陌生吧,这里不多解释,感兴趣的小伙伴可以看我的这篇文章:http://www.cnblogs.com/haolujun/archive/2012/12/24/2830683.html。 这段时间在做我们拍搜的优化,今天我就讲讲我是如何用跳表优化检索系统的。搜索引擎的夹角余弦计算都知道,搜索引擎利用夹角余弦计算query与文档的相似度,感兴趣的小伙伴可以看我...

2017-12-11 09:48:00 175

转载 我是如何利用Hadoop做大规模日志压缩的

背景刚毕业那几年有幸进入了当时非常热门的某社交网站,在数据平台部从事大数据开发相关的工作。从日志收集、存储、数据仓库建设、数据统计、数据展示都接触了一遍,比较早的赶上了大数据热这波浪潮。虽然今天的人工智能的热度要远高于大数据,但是大家还是不能否定大数据在人工智能中不可取代的地位。话回正题,当时遇到了一个需要解决的问题就是如何快速对日志进行压缩。那时一天的日志量大概是3TB左右,共...

2017-09-27 10:03:00 136

转载 我为什么要设计自己的流量调度算法?

背景公司使用阿里的云主机部署计算型的服务,就是特别耗cpu的那种。使用过程中有一件事情很苦恼,那就是云主机的性能是不一致的,机器间的性能可相差30%,更严重的是由于是共享云主机,经常在晚上8点钟左右(各大网站的高峰期)有某些机器的系统cpu突然飙高(原因是一次系统调用消耗突然增加,系统cpu能飙到90%,机器基本不可用)。这个问题其实很好解释:阿里云在同一个物理机上虚拟好多云主机,并...

2017-09-22 16:56:00 417

转载 SimpleRpc-客户端与服务端工作模型探讨

前言本篇文章讲述客户端与服务端的具体设计细节。有细心的小伙伴发现,客户端和服务端的工作方式不一样:服务端是多线程计算模型,利用工作线程完成数据的读取,而客户端是单线程(利用Reactor线程完成数据的读取)。这么做的原因有二:首先我们认为我们的使用RPC的初衷是由于CPU计算是瓶颈,不得已把计算放到多台机器上,所以服务端采用多线程计算模型;其次我们认为网络IO只要不是客户端故意阻...

2017-09-21 17:17:00 137

转载 SimpleRpc-序列化与反序列化的设计与实现

为什么需要序列化和反序列化?假设你是客户端,现在要调用远程的加法计算服务,你与服务端商定好了发送数据的格式:发送8个字节的请求,前4字节是第一个数,后4字节是第二个数,服务端读取数据的时候也按照商定的方式读取。其实,这就是一个序列化和反序列化的过程。序列化:2个数字变成8个字节数据,反序列化:8个字节数据变成2个数字。但是这么做有个问题,那就是太容易出错,每次你还得考虑按照什么形...

2017-09-21 17:16:00 367

转载 SimpleRpc-网络事件响应Reactor设计模式

前言这篇文章主要介绍整个框架用到的最核的一个设计模式:反应器模式。这个设计模式可以在《面向对象的软件架构》中详细了解,没有这本书的小伙伴不要急,我通过咱们的SimpleRpc来告诉大家这个设计模式是如何运用的。之所以它叫反应器模式,是因为它是处理事件的一种比较优美的框架。如何优美,我们慢慢道来。如何设计一个高吞吐量的web服务?web服务会面对大量的网络请求,服务要对...

2017-09-21 17:16:00 146

转载 SimpleRpc-系统边界以及整体架构

系统边界什么是系统边界?系统边界就是在系统设计之初,对系统所要实现的功能进行界定,不乱添加,不多添加。这么做的好处就是,系统简单明了,主旨明确,方便开发和用户使用。举个例子,一个自动售货机的本职工作是自动售货,用户投入零钱,选择商品,出货,找零,功能简单明了。但是,工程师非要再给售货机添加一个播放音乐的功能,原因是能够提升用户感受,用户在买东西的时候听音乐会心情舒畅,这明显就是乱...

2017-09-21 17:09:00 191

转载 如何用一天时间实现自己的RPC框架

前言最近,闲来无事,自己写了一个简单的RPC框架,我把它叫做SimpleRpc。它有多简单?一共只有1400行代码。这个RPC只是作为自己试验作品,交流技术之用,当然如果你敢用,也可以放到生产环境之中,只不过要自求多福。现在有很多开源的RPC,我用过的有ICE,thrift,grpc。我知道有很多小伙伴想阅读以上这些开源项目的源码,但是一头扎进去,难免会迷了方向,毕竟这些成熟...

2017-09-21 17:07:00 110

转载 一个自己研究出来的字符串匹配算法-k子串算法

前言最近工作中需要写一个算法,而写完这个算法我却发现了一个很有意思的事情。需要的这个算法是这样的:对于A,B两个字符串,找出最多K个公共子串,使得这K个子串长度和最大。百度之没有这样的算法,然后就开始想了一些乱七八糟的想法,一一被自己举反例推翻了,直到最后找到了正确算法,我觉得这个思考过程值得记录一下。思考过程错误想法1:每次找最长公共子串,找到一个子串后,从A,B两个字符串...

2016-09-11 17:26:00 192

转载 迟来的2015总结

我上一篇博客是2014年总结,一个技术博客貌似慢慢的被我变成了一年只写一篇日记的自娱自乐的小小的日记本了。总的来说今年自己不好,各种问题很多,心态还有些消极。但是还是写上一点吧,也许后来的某一天看到了今天的我的这些感慨会觉得当年的可笑。按照惯例,从工作,学习,生活三个方面写。工作:去年可是我非常纠结的一年,原因是我跳槽了,从某社交网跳到了某搜索厂,大家自己猜去吧。工作内容发生了翻...

2016-02-21 16:22:00 149

转载 一个纠结的2014年

写在前面今年博客园里,自己基本上没写过博客,相信新一年里不会这个样子了。只不过这第一篇就是要说那2014年的总结,这些都是我在2013年就确定下来的并在2012年就计划好的。按照往年的惯例,自己还是从工作、生活、学习三个方面来总结一下自己。也希望对遇到和我有同样情况的刚踏入职场的人有些帮助。工作今年的转变比较大,应该是说主要精力都放在了技术上面。今年的精力大部分用于思考怎...

2015-02-07 14:28:00 132

转载 学了这么多年技术,为什么水平还是一般般?

仅以此文以自勉。(大神们可以轻点拍)先举个例子。公司里面有两个同事,暂时叫做A,B。A君是90后,但是可别小看90后,工作的经验可比我们这帮80后还要丰富。学生时代暑假工地打工搬过砖,而且有了三四年的工作经验。小伙很吃苦耐劳,工作也很拼命,性格也很随和,经常在一起插科、打诨、扯淡,但是公司给他的待遇基本上是垫底的。所以每次看到这哥们,我都有点心疼(我少年老成,虽然是80后的尾巴)...

2014-02-23 16:50:00 117

转载 你能不用计算机来计算S=a+(a+1)+(a+2) + ...... + b的解的数目吗?

S=a + (a + 1) + (a + 2) + ...... + b(其中a, b > 0)现在我们要求,给定一个正整数S,求有多少种不同的<a,b>,使得上述的等式成立。这个问题很有意思,我猜大家一定想出了比较简单的那个方法了。方法1:代码大概是这个样子的:int sum = 0;for(int st = 1, ed = 1; ed &...

2014-01-26 15:54:00 132

转载 迟来的2013年总结

和去年一样,来一个年终总结吧,算是自己一年的记录。工作:13年4月18号入职,到现在也有8个多月。搞的是数据这行,不是数据挖掘,是数据分析。所以关于大数据的书看了很多。工作分为几部分:1:在数据平台组,所以工作比较杂。每天都要处理一大堆的业务需求,给出各种各样的统计数据。其实最难得部分在于如何把一个统计需求落实在具体的数据中,比如,日志在哪,应该如何统计才能得到他们要的数字。...

2014-01-25 14:12:00 92

转载 如何快速查找IP归属地

这两天遇到这么一个问题,就是查找一个IP的归属地。当然我会有一个IP段的分配列表,格式如下:16777472 16778239 XX省 XX市第一列是IP段的起始IP,第二列是IP段的终止IP,第三列是对应的省份。一共大概200万条左右。那么好了,如何进行查找呢?想到的最简单的办法,就是二分查找。首先对这些IP段进行首位相接的排序,之后一个二分查找。那么有没有...

2013-08-22 11:27:00 481

转载 自己动手实现自旋锁

注:本文部分内容来源于<<操作系统概念>>第六版,[美]Abraham Silberschatz,Peter Baer Galvin,Greg Gagne著,郑扣根译。如有错误,还望大家批评指正,我先谢过大家了。锁是为了解决某种资源(又有人称临界资源)互斥使用提出的一种机制。常用的有读写锁、互斥锁、自旋锁。接下来就谈谈这个自旋锁。自旋锁和互斥锁功在使用时差不多...

2013-03-02 15:56:00 302

转载 自己动手编译、运行Java程序

本人初学Java,看到别人都说学Java先不要用Eclipse、NetBeans这些开发工具,所以索性就自己试试。过程犯的错误极多,参照着李刚老师那本疯狂Java一点一点的实验.由于自己使用过Makefile,所以就用Makefile做了实验,总算是可以不用Eclipse、NetBeans就能自己编译运行一些小的程序了,下面就是我自己总结的心得,如有错误,请大家指正,谢谢。本文分四小...

2013-03-02 10:08:00 171

转载 新手学信息检索6:谈谈二值独立模型

介绍一个概率检索模型-二值独立模型。这个模型我自认为比较扯淡,如有大神在可以指点一下。这个模型用了N多个假设。假设1:词项之间的出现是相互独立的。这样文档和查询都可以向量化,如下:当词项t出现在文档或查询中,则xt或qt的值为1,否则为0。由于我们假设词项出现是相互独立的,并且向量取值只取0,1两个值,故这个模型就叫做二值独立模型。那么这个模型是如何进行文档检索以及排序的...

2013-01-14 15:49:00 543

转载 新手学信息检索5:正确率-召回率与搜索引擎的评价

这篇就简单介绍一下搜索引擎的评价方法。从用户的角度去评价一个搜索引擎的检索效果最好的方法就是计算用户在查到自己满意文档时已经浏览的文档数。但是实际中,查询千变万化,文档也千变万化,所以这种方法不可行。人们便提出了下面的概念,并建立了一个评价标准。这里面有三个常用的概念:正确率,精确率,召回率。正确率(Precision,简称为P)定义为:P=返回结果中相关文档个数/返回结果的数目...

2013-01-09 11:17:00 612

转载 新手学信息检索4:向量空间模型与相似度计算

相似度从字面上理解就是两个事物的相似程度。在信息检索中,相似度表示的是两个文档之间的相似程度或者查询与文档的相似程度。首先回想一下检索过程:1:首先用户输入查询词。2:搜索引擎根据查询词查找相应的文档。3:搜索引擎把查询结果以一定的方式显示给用户。那么一篇文档是否满足用户的查询需求可以用文本与查询的相似程度来衡量。而相似度到最后总能够计算成一个实数,所以可以根据文档与...

2013-01-08 10:48:00 532

转载 新手学信息检索3:词频-逆文档频

上一篇介绍了倒排表这种数据结构,接下来将介绍一下词频-逆文档频(tf-idf)这个概念。首先,什么是词频?词频就是一篇文档包含一个词的次数。举个例子,如果一篇文档d中“cat”这个词出现了5词,那么我们就说“cat”的词频为5,记做tf(cat)=5。那么,什么是文档频?这个概念也是对于一个词来说的。通俗来说文档频就是包含一个词的文档数目。举个例子,如果有100篇文档都有...

2013-01-07 09:38:00 250

转载 新手学信息检索2:倒排表与存储

这篇就说一个信息检索里面理解最简单的一个东西吧,它就叫做倒排表或者倒排索引。但是这只是个名字,我想大家都知道它是什么就行了,不必纠结于名称。先说说倒排表张什么样子吧!倒排表以词做索引,内容为包含该词的文档编号。对于上图可知,文档1、3、5、7、9包含词"Cat",文档2、5、8、10包含词"Dog"。你可能问这么简单的东西能干啥?其实他就是搜索引擎中的最关键的核心数据结构。那么搜...

2013-01-06 17:11:00 511

转载 新手学信息检索1:浅谈信息检索

前记:本人是一个初学者,新手其实都算不上。没做过信息检索,所以别人怎么做的也不知道。很想知道Google,百度这样的大公司怎么做搜索引擎的,但是没机会也不会知道。凭着自己的理解就写了这么几篇随笔,这样能督促自己思考,也希望得到大神们的指点。这个系列叫做“新手学信息检索”。这个系列说白了,就是把自己看过的东西总结了一下,加入了自己对信息检索一些概念的理解,没什么理论,也不注重于实现,更没有...

2013-01-06 13:55:00 166

转载 2012-写个总结

留个脚印,自己才算是在园子里呆了一年,总得回顾一下这一年自己到底干了些什么吧,要不总觉得自己啥也没干一事无成。另一个原因是觉得自己没有方向,像一只无头苍蝇乱闯,也希望得到大神指点。首先说学校的生活吧:9月份之前一直在给实验室打工。必须和老师翻脸才能抽时间准备一下找工作。哎,何必呢?期间做的东西比较杂:众核平台下的系统移植,多模过滤,网络http数据的编码以及解析,gzip算法分析...

2013-01-02 13:10:00 111

转载 摔鸡蛋问题与跳表

摔鸡蛋问题:给你K个鸡蛋,让你测试鸡蛋壳的硬度,测量的方法就是从不同高度的楼层向下扔,如果鸡蛋在第i层摔碎了而在第i-1层没摔碎,那么我们就知道鸡蛋壳的硬度了,即用层数代表鸡蛋壳的硬度。并且假设鸡蛋肯定能用某一层的层数来表示。现在的问题是,用K个鸡蛋,最坏情况下最少需要多少次才能测试出鸡蛋壳的硬度?例如只有一个鸡蛋,那么为了保证在测出鸡蛋壳硬度之前鸡蛋不破裂,只能一层一层的试。如果楼...

2012-12-24 11:15:00 171

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除