自定义博客皮肤VIP专享

*博客头图:

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

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

博客底图:

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

栏目图:

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

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+
  • 博客(75)
  • 资源 (6)
  • 收藏
  • 关注

原创 socket中MSG_WAITALL和SO_RCVTIMEO(SO_SNDTIMEO)选项

这几个选项都可以通过setsockopt函数来对套接字进行设置,MSG_WAITALL要求套接字在接收时,阻塞地等到指定的长度的消息都到达才返回,可以简化TCP连接中分片的情况下,需要多次接收的处理。SO_RCVTIMEO(SO_SNDTIMEO)可以设置套接字的接收(发送)超时,防止套接字一直等待造成的程序阻塞。需要注意的是,及时设置了MSG_WAITALL,套接字还是可能会因为超时而提...

2018-09-18 12:22:24 2193

原创 RabbitMQ使用简谈

最近简单看了一下RabbitMQ,这里简单总结一下。(先写到现在学习的,有错误的话后面再改正)相较于其他MQ,RMQ更加成熟稳定,所以有更大的学习的价值。相较于ZMQ只是一个网络组件,RMQ是一个独立的服务,使用时需要服务器和RMQ server之间进行通信。RMQ服务器保证了消息的持久化和消息的正确发送。相较于ZMQ简单的直接根据连接类型(订阅、消费)等直接生成socke...

2018-06-24 17:52:42 254

原创 中文编码及绘制

最近一个任务是判断一个字符串是不是中文,并将其绘制到一个jpg文件上。对于编码一直挺糊涂的,这次梳理了一下。对于一个文件,可以使用file -i a.txt查看它的编码格式(不知怎么回事,我的终端是utf-8,在vim中输入中文时,老是出现乱码,只能在notepad++中编辑好之后再上传到linux上,可能是vim的设置有问题。)当终端和文件的编码方式一致时,就能显示正常的中文。回...

2018-06-02 18:30:06 312

原创 消息队列简谈

现在软件开发越来越复杂,各部分耦合也越来越严重。尤其是一些创业公司,各部分模块变化频繁,给软件开发和设计提出了很多的要求。这时候,消息队列就越来越重要了。一般来说,消息队列的使用场景有:1、各部分解耦合2、高峰时的削峰(作为cache)3、可以作为RPC调用4、热插拔,可以在不重启的情况下,改变网络拓扑形式和计算能力,对系统进行扩容我主要看了Zero...

2018-05-20 16:09:47 204

原创 无锁并发编程简谈

(有半年没有写博客了,时间飞逝呀。。。。 :o )这里简单介绍一下无锁并发编程。现在CPU的核越来越多,多线程、并发编程已经成为趋势。一涉及并发,同步是绕不开的话题。一般的方法是使用Mutex、旋转锁、条件变量等系统提供的方法来进行同步。(一个问题,Mutex和自旋锁的区别?)如果并发不太大,qps是数百时,这些方法还没有问题,但是当qps增加到数千时,这些同步方法的开销就太大...

2018-05-10 11:56:04 763

原创 query求交模块总结

最近重新梳理了一下query的求交模块,记录一下。以前不太清楚的地方,主要是怎么处理近义词(比如“蔡依林”和“Jolin”)以及怎么有些没全部命中term也可以找到。第一个,在数据制作的过程中就会处理近义词,做到相应的倒排中(会标明近义词)。而且,求交的过程中,近义词也会一起参与求交。“蔡依林演唱会”其实是“蔡依林”“Jolin”“演唱会”三个词一起求交。这样就不会遗漏一些很相似的...

2017-11-05 15:01:39 121

原创 TCP三次握手和keep_alive

tcp/ip协议很久之前看过,现在忘得差不多了,补充一下tcp的三次握手和状态。[img]http://dl2.iteye.com/upload/attachment/0127/6929/d85f79ac-2e6a-3f13-ae9d-5f21b18d8109.png[/img]当对已经关闭的tcp套接字调用recv时,会返回-1,表示连接已经关闭,这是因为tcp有一个keep_a...

2017-11-05 14:17:59 290

原创 qs收集结果

前一段处理qs网络堵塞的问题,进一步将lq和qs之间的通信做了一些梳理,记录一下。我们知道,lq是一遍查找,一遍向qs发送请求的,每遍历一定数量的doc后(比如说60w,具体和工作场景有关),就向qs发送一定数量的结果。qs将这些答复汇总后记录,当达到一定的条件之后,就发送cancel信号,lq停止查找。以前以为lq发送一定的结果之后,就停止查找,qs也是偶尔才会发送cancel信...

2017-09-29 16:05:35 156

原创 perf查看函数调用

前一段使用perf查看程序的热点以及函数调用,一直看不到热点函数的函数调用,很是奇怪,在网上问别人,别人都说没问题,一度很是迷惑。后来又试了一下,结果就出现了,很是神奇。使用方法很简单,就是perf record加上-g选项。另外,perf top也可以查看程序的热点,选项是-G。上图一张,就是以前很渴望的调用函数。[img]http://dl2.iteye.com/u...

2017-09-02 10:51:10 7278

原创 query的网络模型

最近看了一下项目的代码,写一下query的网络模型。cache和query之间通信比较简单,就是tcp通信。qs和lq之间通过udp通信,而且扩展性比较好,这里记录一下。刚开始lq绑定一个端口(udp也可以绑定),然后qs通过配置文件,读取每个lq的地址,然后和没有lq建立一个连接。qs向lq发送请求时,请求中会包含一个字段,为qs等待接收答复的地址,这样,同一组里所有的lq都会向...

2017-07-15 17:25:27 220

原创 倒排和正排

搜索主要用到了三个文件:diskdata、docinfo和forwardindex。diskdata文件是倒排文件,用于求交。docinfo是doc的一般属性信息(pagerank/publish_time/颜色签名/尺寸等),用于排序前的剪枝(就是根据request信息简单过滤)。forwardindex是正排信息,用于求更重rank。排序时要整合docinfo和...

2017-06-26 10:36:50 575

原创 socket编程近期经验总结

最近在做的一个小项目,难度不大,但是网络传输部分费了一点周折,在这里把近期的一些经验教训总结一下。因为是自己的一点心得,如果有疏漏,后面再补充修正。程序使用TCP协议传输,先epoll_wait(其实连接不多,只是熟悉一下,结果确实学到了东西),然后进行接收。因为TCP有流量控制,会把大的流进行分片,所以一次recv并不能接收全部的数据,刚开始就先接收一个header,包含了流的长度,然后...

2017-06-18 16:38:44 129

原创 一次socket排错

用socket通信,一般复用以前的组件,很少直接从底层写,很多问题没有注意到。这次写人脸打卡,server和qo之间的通信,我用以前的Transporter,底层是TCP通信。每当qo重启或者通信错误时,server便重连一次。程序刚开始运行很正常,但是有一次发现通信错误,qo发给server的内容是错误的,于是排查。刚开始以为是qo错误,但是看了一下qo的日志,发现没有问题。于是用ss ...

2017-05-31 19:24:17 141

原创 一次linux系统网络调优

两台服务器之间利用udp协议传输数据,增大传输量后从日志发现有很多丢包现象,使用nload发现平均速率只有200Mbp/s,并没有达到理论极限。是网卡有故障吗?仔细思考后找到了原因,nload统计的是平均速率,但是网络传输是很快的,并不是一个稳定的速率,可能某一瞬时速率超过了前兆网卡的极限,就发上了丢包现象。所以平均速率并不能很好地说明问题,尽管平均速率很低,网络还是形成了瓶颈。后...

2016-09-11 18:24:23 157

原创 Linux系统内存使用

使用linux操作系统很多年了,但是对于内存使用不是太了解(估计很多人都不太懂),正好最近有个任务要降低程序的内存使用(要在一个服务器上同时跑更多的程序,内存成为瓶颈),就稍微深入了解了一下linux内存的使用说明。一般来说看内存使用一般使用top命令,top命令的输出大致如下: PID USER PR NI [color=red]VIRT RES SHR ...

2016-09-11 17:29:03 127

原创 数据挖掘

[url]http://www.cnblogs.com/wentingtu/p/3513979.html[/url]

2016-09-11 17:08:18 92

原创 线程池的使用

以前没自己写过线程池,觉得挺神秘,前一段看了一下项目中线程池的实现,也挺简单。所以说会者不难,难者不会。其实就是定义一些结构体,大致长这样:struct Item{ Func *f; Arg *arg;};然后维持一个链表,线程每次从连表中取一个Item,然后运行函数(调用f(arg)),结束后再通知调用函数。既然是多线程,当然会涉及到锁和...

2016-01-02 20:17:42 97

原创 使用LFM(Latent factor model)隐语义模型进行Top-N推荐[转]

原文地址:[url]http://blog.csdn.net/harryhuang1990/article/details/9924377[/url]最近在拜读项亮博士的《推荐系统实践》,系统的学习一下推荐系统的相关知识。今天学习了其中的隐语义模型在Top-N推荐中的应用,在此做一个总结。隐语义模型LFM和LSI,LDA,Topic Model其实都属于隐含语义分析技术,是一类概念,他...

2016-01-02 19:45:12 129

原创 c++动态链接库错误导致的程序运行异常

昨天改程序,明明代码都编译通过了,但是运行程序时老是出错,一会儿说文件加载异常,一会儿说找不到符号(“symbol lookup error”),在程序中加注释也没有打印,一度怀疑是见鬼了。 后来搜了一下,一般报的找不到符号错误是因为链接错误造成了,就使用ldd命令查看程序链接了什么动态链接库。结果发现编译时链接的是本地的动态链接库,然后我使用“make install DE...

2015-12-01 17:21:12 1002

原创 一个比较巧妙的主备机设置

[img]http://dl2.iteye.com/upload/attachment/0111/6453/ac3e95b2-597b-3601-84b2-f553b4f0eb79.png[/img]manual01 manual02互为主备,平时请求均匀打到两台机器上,一台出故障之后全部请求打到健康的一台上。...

2015-09-11 17:47:02 360

原创 C/C++ 中的0长数组(柔性数组)

在标准C和C++中0长数组如charArray[0]是不允许使用的,因为这从语义逻辑上看,是完全没有意义的。但是,GUN中却允许使用,而且,很多时候,应用在了变长结构体中,如:StructPacket{Int state;Int len;Char cData[0]; //这里的0长结构体就为变长结构体提供了非常好的支持,也可以将“0”省去};首先对0长数组做一个...

2015-03-18 18:16:50 182

原创 排序算法

有时间可以学习一下:learning to rank[url]http://www.360doc.com/content/14/0218/16/13256259_353571486.shtml[/url][url]http://www.cnblogs.com/kemaswill/archive/2013/06/01/3109497.html[/url]bm25...

2015-02-15 16:48:53 96

原创 动态链接库地址重定位【转】

前面写过动态链接库 延迟绑定的一篇博文,那篇文章我非常喜欢,但是当时刚搞清楚,自己写的比较凌乱,我最近学习了Ulrich Drepper的How to write share library,学习了几篇其他的讲述动态链接的文章,再次整理了这篇文章。 有一个问题是我们调用了动态链接库里面的函数,我们怎么知道动态链接库里面的函数的地址呢?事实上,直到我们第一次调用这个函数,我们并不知道...

2015-02-06 12:27:34 796

原创 查看服务器处理器、内存的信息

cat /proc/cpuinfocat /proc/meminfodmidecode -t processordmidecode -t memory #可以查看内存频率,制造商等信息

2015-01-28 15:43:33 198

原创 查看程序运行热点(perf)

主要介绍一个定位程序热点的工具:perf。 性能调优工具如 perf,Oprofile 等的基本原理都是对被监测对象进行采样,最简单的情形是根据 tick 中断进行采样,即在 tick 中断内触发采样点,在采样点里判断程序当时的上下文。假如一个程序 90% 的时间都花费在函数 foo() 上,那么 90% 的采样点都应该落在函数 foo() 的上下文中。运气不可捉摸,但我想只要采样频率足...

2015-01-16 17:19:42 4275

原创 【转】召回率 Recall、精确度Precision、准确率Accuracy、虚警、漏警等分类判定指标...

根据自己的知识总结的,定义应该肯定对了,在某些表述方面可能有错误的地方。假设原始样本中有两类,其中: 1:总共有 P个类别为1的样本,假设类别1为正例。 2:总共有N个类别为0 的样本,假设类别0为负例。 经过分类后:3:有 TP个类别为1 的样本被系统正确判定为类别1,FN 个类别为1 的样本被系统误判定为类别 0,显然有P=TP+FN; 4:有 FP 个类别为0 的样本...

2014-12-04 19:37:10 533

原创 Linux读写锁使用

读写锁很早就知道了,但是使用的不多,这次代码中出现了,才认真思考怎么用。摘录一下:读写锁的特点是:当读写锁是写加锁时,在这个锁被解锁之前,所有试图对这个锁加锁的线程都会被阻塞。当读写锁是读加锁时,在这个锁被解锁之前,所有试图以读模式对他进行加锁的线程都可以得到访问权,但是如果线程以写模式对此锁加锁时会造成阻塞,直到所有线程释放读锁这里有一个问题,如果一个线程现 A 获得一把...

2014-10-17 14:48:14 117

原创 内核线程和用户态线程

读书看到下面这一段,不太理解,就搜了一下,学了很多东西。[img]http://dl2.iteye.com/upload/attachment/0101/1229/77b038f5-c8a0-3683-a4c6-b9c1ac9b2f61.jpg[/img]线程的实现可以分为两类:用户级线程(User-Level Thread)和内核线线程(Kernel-Level Thread...

2014-09-14 15:26:39 531

原创 异步I/O

用的不多,一些概念是模糊的,从网上整理了一些资料。方法一:使用fcntl来置O_ASYNC位。 这个方法的效果是,当输入缓存中的输入数据就绪时(输入数据[size=large][color=red]可读[/color][/size]),内核向用F_SETOWN来绑定的那个进程发送SIGIO信号。此时程序应该用getchar等函数将输入读入。 ...

2014-09-12 10:07:48 103

原创 Python连接sqlserver中文乱码的问题

第一次遇到这个问题,Google后才找到解决方法(百度果然还是太弱了啊),编码的问题还是不熟settings = {'CMT_SQLSERVER_DSN':'MerchantPrice','CMT_SQLSERVER_USERNAME':'readuser','CMT_SQLSERVER_PASSWD':'password'}conn = "DSN=%s;UID=%s;PWD=%s" ...

2014-09-04 09:59:21 1578

原创 关于linux中的Ctrl+C,Ctrl+Z【转】

Ctrl+C:送SIGINT信号,默认进程会结束,但是进程自己可以重定义收到这个信号的行为。Ctrl+Z:送SIGSTOP信号,进程只是被停止,再送SIGCONT信号,进程继续运行。ctrl-d 不是发送信号,而是表示一个特殊的二进制值,表示 EOF 有些信号不能被屏蔽,比如中断,还应该有杀死进程的信号,要不然内核怎么做操作系统中的老大。实际上,SIGKILL和SIGSTOP信号是...

2014-09-03 11:35:56 77

原创 Python的深拷贝和浅拷贝

Python的深拷贝和浅拷贝需要留意一下1. copy.copy 浅拷贝 只拷贝父对象,不会拷贝对象的内部的子对象。2. copy.deepcopy 深拷贝 拷贝对象及其子对象一个很好的例子:import copya = [1, 2, 3, 4, ['a', 'b']] #原始对象b = a #赋值,传对象的引用c = copy.copy(a) #对象...

2014-09-02 10:06:34 162

原创 twisted框架

twisted框架是python实现的基于事件的优秀的框架,适合于网络编程等。一个server实例 # -*- coding: UTF-8 -*- #Twisted MMORPG from twisted.internet.protocol import Factory from twisted.protocols.basic import Li...

2014-09-01 15:44:44 160

原创 libevent实现的httpclient

还比较简单,主要是几个函数、结构体的使用#include #include #include "event2/event.h" #include "event2/http.h" #include "event2/buffer.h" #include "event2/http_struct.h" #include "event2/dns.h" ...

2014-08-31 23:15:20 546

原创 SO_REUSEADDR和SO_REUSEPORT【转】

在读TCP/IP协议时对这些概念比较熟悉,时间久了,有些模糊,就转一下,方便以后回顾。SO_REUSEADDR提供如下四个功能:SO_REUSEADDR允许启动一个监听服务器并捆绑其众所周知端口,即使以前建立的将此端口用做他们的本地端口的连接仍存在。这通常是重启监听服务器时出现,若不设置此选项,则bind时将出错。SO_REUSEADDR允许在同一端口上启动同一服务器的多个实例,只...

2014-08-30 10:48:22 153

原创 协同过滤(CF)【转】

注:其实是很简单的东西,只是数据挖掘理论的一个应用,只是了解一下amazon的算法,一些算法看似很简单,也很实用,效果也不错。在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法。本文将带你深入了解协同过滤的秘密。下面直接进入正题1 什么是协同过滤协同过滤是利用集体智慧的一个典型方法。要理解什么是协同过滤 (Collaborative Filte...

2014-08-30 08:20:08 119

原创 c++析构/构造函数与虚函数

虚函数的意义很简单,就是动态绑定,从而完成多态。没有太大的疑问。但是关于虚函数的使用,有两种情况比较特殊,需要留意:构造函数和虚构函数。在实例化一个类时,会按照父类-成员变量-子类的构造函数依次调用构造函数,析构的时候,会按照相反的次序依次调用析构函数。如果在构造函数/析构函数中调用虚函数,或者调用的一般成员函数(非虚函数)中调用了虚函数,情况会怎么样那?这种情况下,因为编译器知道...

2014-08-28 09:07:08 95

原创 正则表达式

转义符:[color=red]\s[/color] 空白字符:[ \t\n\x0B\f\r] //这个是重点!\t 制表符 ('\u0009') \n 新行(换行)符 ('\u000A') \r 回车符 ('\u000D') \f 换页符 ('\u000C') \a 报警 (bell) 符 ('\u0007') \e 转义符 ('\u001B') \cx 对...

2014-08-26 11:40:28 71

原创 KMP算法【转】

一些时间没看了,有些生疏,拿出来熟悉一下。其实理解了原理就很简单了。KMP算法之所以叫做KMP算法是因为这个算法是由三个人共同提出来的,就取三个人名字的首字母作为该算法的名字。其实KMP算法与BF算法的区别就在于KMP算法巧妙的消除了指针i的回溯问题,只需确定下次匹配j的位置即可,使得问题的复杂度由O(mn)下降到O(m+n)。  在KMP算法中,为了确定在匹配不成功时,下次匹配时...

2014-08-23 10:34:35 111

原创 进程和线程的一些东西

上次和一个人谈到操作系统调度的问题,他说进程可以绑定CPU,线程不可以。我觉得不是,但是不确定,查了一下,是按照线程绑定的,参考:Linux系统提供API函数sched_setaffinity和sched_getaffinity用于设置或获取线程的可以使用的CPU核。int sched_setaffinity(pid_t pid, unsigned int cpusetsize, ...

2014-08-22 10:22:43 80

Visual_C _MFC_简明教程

很简练,可以帮助你快速熟悉MFC编程技术,在较短的时间内达到可以使用的水平

2010-03-16

深入浅出MFC(第二版)

MFC的经典读物,要深入学习MFC机制必读,读完之后,不仅会用MFC,还从根本上讲解了其运行原理

2010-03-16

C++和Java混合编程

C++和Java相互调用,介绍了一些设置以及要注意的地方,很详细,用的话可以试试

2009-10-29

learning opencv

学习opencv不可错过的宝典,读完之后,让你对opencv原理和使用有清晰的认识,为以后在图像处理方面的发展奠定基础

2009-10-06

空空如也

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

TA关注的人

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