IT技术博客大学习 共学习 共进步

技术文章

精选技术长文、实践记录与系统化阅读

技术文章精选

低噪声、高可扫读;标题、摘要、来源、标签一目了然。

最新文章

采集自各技术站点的近期文章。

IT 其他/ 2012-09-20 13:42:40 / 累计浏览 1,664

关于二部图的再次思考

最早是10年听baidu的一位老师讲信息检索课程,那一次对离散数学中的“二部图”的使用场景,有了一个真真切切的认识。然后这个概念一直伴随着自己,到现在,并且在不同场所的听课中,去询问个一些讲师,貌似都很“吃惊”“不清楚”“没有做过”。我才知道这就是技术的差距。 应用中,二部图就是语义推荐使用,系统是搜索引擎,数据是二部图结构,参数是“全部海归的7-8个博士、顶级专业人才”。。。。然后带着当时的疑惑,来到这里,四处打听相关技术,然后慢慢理解了,“曾经这是一家运营公司”“曾经这是一家数据库公司” “曾经这家公司都不怎么用技术的”。。。。 自语语言学+领域学知识+社会学知识构成了“有效推荐”的三大基石。 自语语言初级:分词、词性标注 中级:本体、语料 高级:领域、主体的关联和聚合 领域学:领域热点、核心、焦点价值、商业模式 社会学:用户行为、思考、互动等。

IT 算法/ 2012-09-20 13:42:18 / 累计浏览 3,592

Java Worker 设计模式

Worker模式 想解决的问题 异步执行一些任务,有返回或无返回结果 使用动机 有些时候想执行一些异步任务,如异步网络通信、daemon任务,但又不想去管理这任务的生命周。这个时候可以使用Worker模式,它会帮您管理与执行任务,并能非常方便地获取结果 结构 很多人可能为觉得这与executor很像,但executor是多线程的,它的作用更像是一个规划中心。而Worker则只是个搬运工,它自己本身只有一个线程的。每个worker有自己的任务处理逻辑,为了实现这个目的,有两种方式 1. 建立一个抽象的AbstractWorker,不同逻辑的worker对其进行不同的实现; 2. 对worker新增一个TaskProcessor不同的任务传入不同的processor即可。 第二种方式worker的角色可以很方便地改变,而且可以随时更换processor,可以理解成可”刷机”的worker

IT 算法/ 2012-09-20 13:41:45 / 累计浏览 3,251

SolrQuery挖掘–单维度聚合分析

单维度聚合分析,主要解决类似以下场景的问题 (1)同一个用户搜索输入关键词 (2)某个时间段内搜索词排行榜 (3)某些关键词联合出现情况 (4)IP\\位置 维度下的关键词聚合情况 (5)其他任何参与搜索的单维度搜索请求统计 (6)平均命中率、hits=0、查询平均响应时间 ...... (7)新词发现(8)输入提示 目录 1 单维度聚合分析 1.1 为什么选择搜索引擎 1.2 单维度聚合分析意义 1.3 陷阱 2 单维度聚合关键问题 2.1 维度的选择 2.2 格式化 3 单维度聚合实现样例 单维度聚合分析 为什么选择搜索引擎 单维度聚合分析应该是各种分析统计中最为简单、直接。 对于主动搜索、被动搜索一体的应用场景,有登录和无登陆等统一兼顾。并且提供接口服务,按需返回维度信息,并且可以复用。 无疑采取搜索引擎,依赖搜索引擎的facet统计功能,最为直接、快捷、有效、低沉本。

IT 其他/ 2012-09-20 13:39:42 / 累计浏览 1,666

有感Google的混合研究方法

对于一个长期在研发领域的人来说,经常需要思考研发的意义、工程与研究的关系、产品型的公司应当做何种程度的研究等问题。理想情况下,我们期望每一项研发工作都能得到组织、同事以及社区的高度认可。因此不管你处于工程领域还是研究领域,工程与研究的关系会让你不断思考甚至困扰。最近看到的Google’s hybrid Approach to research (English 中文) 一文或许会让你豁然开朗。 研究领域的现状 根据技术领域的差异,大部分产品开发可以依赖已有成熟的工程技术完成,进一步通过研究来提升产品能力的空间并不大(比如提升空间在10%以下)。互联网企业偏重产品开发能力,关注点主要在开发效率、研发流程等交付能力上。偏实用主义驱动方式,很难对相关领域的工程技术进行升华。因此研究的驱动力、研究的空间及取得成果的可能性较低。

IT 安全/ 2012-09-19 23:36:23 / 累计浏览 5,432

个人数据安全 (2):保护即时通讯隐私

一般来说,即时通讯(IM)软件都会对客户端到服务器的通讯进行加密,对用户隐私数据安全提供一定程度的保障。但也有例外,比如MSN就完全不加密。所以一些小公司将MSN作为主要IM工具是极为不明智的,借助Wireshark等简单工具对员工间甚至员工和客户间的对话内容进行监听易如反掌,极容易造成商业机密的泄漏。微软坚持使用明文MSN协议的目的让人难以捉摸,其中恐怕难免混有政治因素。使用MSN Shell插件的加密功能或者SSH隧道转发等手段,也可以不同程度地间接加密MSN通讯数据。即使是那些号称使用加密协议的IM服务,也并不真的就百分之百地安全,在国内的网络环境下尤其如此。一直饱受质疑的QQ(1、2)自不必说,国内其他的IM运营商也多少存在类似的境况。这种行为固然可恶,但作为国内的运营商,若不如此便无法生存——饭否便是个极好的例子。

IT 安全/ 2012-09-19 23:35:49 / 累计浏览 4,665

个人数据安全 (1):用GnuPG保护个人隐私数据

之前在Twitter上说过,打算写一个个人数据安全解决方案的系列,内容包括: 基于GnuPG的个人隐私数据保护自建XMPP服务器保障即时通讯安全使用Dropbox进行较低密级的文件共享和协作(后记:事后觉得Dropbox这个话题太简单了点,没啥好写的,且重点在共享和协作,而非安全,便取消了。) 原本还打算写一写用SSH端口转发隧道建立SOCKS v5代理(俗称SSH翻墙术),鉴于网上已经有不少不错的介绍(1、2),就不再重复劳动了。这里所采用的技术全部基于开源软件、免费软件或免费服务商,同时也兼顾使用体验。除了自建XMPP服务器所需的域名费用外,其余部分的经济成本为零。 跟丫头暂时还维持着北京、杭州两地分居的状况,网络是平时联络和数据交换的最为重要的手段。上述的这些技术都是我们目前正在使用的数据安全保障手段。

IT 系统运维/ 2012-09-19 23:34:59 / 累计浏览 1,966

复杂系统故障面面观

6月29日,Amazon EC2美国东部1号区域的一个availability zone遭大规模雷暴袭击而断电,该事故殃及了包括Netflix、Instagram、Pinterest在内的一大批服务,详情参见Amazon针对此次事故的官方报告。几天后,偶然在Channel 9上看到一篇文章,进而顺藤摸瓜找到了Richard Cook的这篇发表于1998年的How Complex Systems Fail。这篇文章总结了十八条关于复杂系统故障的经验,言简意赅却一针见血,读之让人击节叫好,大有拨云见日之感。回顾Amazon针对这次事故的官方报告,以及自己在过去若干年间遇到的种种线上事故,几乎无不落入这十八条之内。这篇文章并没有将视线局限在技术领域,而是从系统、从业人员、事故评估等一系列角度全方位地探讨了复杂系统故障的性质,点破了复杂系统中的一系列“潜规则”。

IT MySQL/ 2012-09-19 23:31:37 / 累计浏览 3,369

关于InnoDB索引长度限制的tips

有同学问到InnoDB的索引长度问题,简单说几个tips。 大家经常碰到InnoDB单列索引长度不能超过767bytes,实际上联合索引还有一个限制是3072。

IT 用户研究/ 2012-09-19 23:30:31 / 累计浏览 5,510

深度解读网站用户体验三要素(3):别让我烦

这是网站用户体验三要素的完结篇,本文主要内容是:别让我烦。 用户都是喜欢偷懒的,如果你的网站操作效率很低,就会令用户烦躁,进而导致不好的体验,甚至出现坏口碑。有一个粗略的说话是,完成任务的难度与其所需步骤的平方成正比,那么,缩短完成路径就是帮用户偷懒,就是好的用户体验。

IT 算法/ 2012-09-19 00:03:25 / 累计浏览 4,566

URL相似度计算的思考

在做一些web相关的工作的时候,我们往往可能需要做一些对url的处理,其中包括对相似的url的识别和处理。这就需要计算两个url的相似度。 那么怎么进行url相似度的计算的?我首先想到的是把一个url看作是一个字符串,这样就简化成两个字符串相似度的计算。字符串相似度计算有很多已经比较成熟的算法,比如“编辑距离算法”,该算法描述了两个字符串之间转换需要的最小的编辑次数;还有一些其他的比如“最长公共字串”等方法。但这些方法对于url相似度的计算来说是不是够了呢?

IT 编程语言/ 2012-09-19 00:02:28 / 累计浏览 2,165

C语言可变参数函数取参方法

熟悉C的人都知道,C语言支持可变参数函数(Variable Argument Functions),即参数的个数可以是不定个,在函数定义的时候用(...)表示,比如我们常用的printf()\\execl函数等;printf函数的原型如下: int printf(const char *format, ...); 注意,采用这种形式定义的可变参数函数,至少需要一个普通的形参,比如上面代码中的*format,后面的省略号是函数原型的一部分。 C语言之所以可以支持可变参数函数,一个重要的原因是C调用规范中规定C语言函数调用时,参数是从右向左压入栈的;这样一个函数实现的时候,就无需关心调用他的函数会传递几个参数过来,而只要关心自己用到几个;以printf为例: printf("%d%s\n",i,s); printf函数在定义的时候,不知道函数调用的时候会传递几个参数。

IT 编程语言/ 2012-09-19 00:00:59 / 累计浏览 3,092

弱类型?C语言参数提升带来的一个陷阱

很久以前,我接触的最初几本C语言书中,我记得有类似这么一句话“C语言是一种弱类型的语言,类型之间可以进行隐式的转换;而C++是强类型的语言,需要进行强制类型转换”。我忘了是哪本书,但这句话我一直记得。因为实际写代码中一直也没有触碰隐式的转换(我一般都会强制转换),所以也没有深究过这个问题。然而最近的一段代码却给我带来了一些困惑。

IT 算法/ 2012-09-18 23:59:54 / 累计浏览 5,346

一个十分有趣的字符串算法题目

在blogspot上看到一个十分有趣的字符串算法题目,原文在这里。作者讲述了自己面试google的一次经历。本文不理会这个故事,只来讨论一下里面着个有趣的算法。 算法题目:有两个字符串由不同的字母组成,一长一短,长的为A短的为B。设计一个算法,如果所有在B中出现的字符都在A中出现,则返回true,否则返回false。例子: 如下字符串: 字符串A: abddfdioegdddffsfagj 字符串B: dofsjadg 字符串B中每个字符都在A中出现,返回true。 如下字符串: 字符串A: aaaabbbbbbdddddd 字符串B: acc 字符串B中有字符没在A中出现,返回false。

IT 算法/ 2012-09-18 23:57:04 / 累计浏览 3,124

c关键字-sizeof的种种

熟悉c的人都知道,sizeof是一个关键字而不是一个宏或者库函数什么的,他的值是在编译时确定的,如果这个不了解,可以现看看这篇文章和这篇文章。 既然如此,让我们先看下面几个小例子: sizeof(int); sizeof(char); sizeof(double); 上面三行sizeof的值是多少呢?这里我们假定在32位的x86系统下。我们会得到答案:4,1,8。这个没什么吧,大多数人都应该知道。那么,下面这个: sizeof(int); sizeof(long); 在32位x86下,这两个是多少呢?4,8?实际上,答案是4,4。我们需要注意,long类型在32位系统下是32位的。那么,64位下结果又如何呢?8,8?其实答案是4,8。另一个需要注意的是,64位下的int是32位的。

IT Linux/ 2012-09-18 23:55:40 / 累计浏览 11,530

gdb的基本工作原理是什么?

还是面某M的时候,面试官问我:“用过gdb么?” 答:“用过,调了两年bug了”。“那好,给我解释下gdb是怎么工作的?或者说跟内核什么地方有关系?”。 是阿,gdb凭什么可以调试一个程序?凭什么能够接管一个程序的运行?我以前也想过这样的问题,但是后来居然忘记去查看了。我想到了我们的二进制翻译器,想到了intel的pin,Dynamo。这些都是将翻译后的代码放到codecache中去运行,然后接管整个程序的执行。gdb是不是也一样呢? 如果真是这样,为什么我记得用gdb跑一个程序,这个程序会有一个单独的进程?gdb的attach功能又是怎么实现的? 想了想,我还是没有答上来。面试就是由这么一个又一个细节的小杯具最后汇集成一个大杯具。 那么,gdb到底是凭什么接管的一个进程的执行呢?其实,很简单,通过一个系统调用:ptrace。

IT 编程语言/ 2012-09-18 23:55:11 / 累计浏览 5,509

C语言的那些个关键字们

最近感冒,昨天流着鼻涕去一直很想去的某M面试,居然还迟到了,一紧张,鼻涕不流了- -# 问的问题不难,都是基础,可是自己不争气,答的不怎么样,一直自诩C语言用的很不错,可是还是在基础上被鄙视- -!都是那些个关键字们阿~今天,让我挨个把C的关键字给详细的整一整,加深一下印象~ 首先,C语言中到底有多少个关键字呢?木有错,ANSI C规定是32个! 他们分别是:auto double int struct break else long switch case enum register typedef char extern return union const float short unsigned continue for signed void default goto sizeof volatile do if while static。 别看那一堆了字母了,直接看下面的分类接受.......

IT 系统架构/ 2012-09-18 23:53:27 / 累计浏览 2,444

Transfer 2.0 介绍

Transfer是一个主从多线程同步工具,直接patch在MySQL中。2011年开发完成。于去年的12.12上线,并撑住高峰期主从,保证从库无延迟,使得应用能够直接从从库上读数据。

IT 源码分析/ 2012-09-18 23:46:58 / 累计浏览 2,589

linux异步IO编程实例分析

在Direct IO模式下,异步是非常有必要的(因为绕过了pagecache,直接和磁盘交互)。linux Native AIO正是基于这种场景设计的,具体的介绍见:KernelAsynchronousI/O (AIO) SupportforLinux。下面我们就来分析一下AIO编程的相关知识。

IT 其他/ 2012-09-18 23:43:39 / 累计浏览 2,005

用白盒的思想黑盒地测试

题目虽然看起来比较晦涩,而且有堆砌关键词的嫌疑,但是我相信还是比较贴切的。相信现在业界都还是认为白盒测试是比较高级的一种测试,因为他会涉及到开发的具体逻辑,需要测试人员有读代码的能力。我也部分同意这种看法,但是我认为,黑盒测试在某种意义上,尤其是自动化测试上,是非常具有意义的。为什么这么说?我们来讲一个案例。一个电子商务的网站的同事向我描述了他目前的测试任务,问我如何快速的,健康的测试。

IT 系统架构/ 2012-09-18 23:42:50 / 累计浏览 2,730

硬件虚拟化技术浅析

硬件虚拟化技术通过虚拟化指令集、MMU(Memory Map Unit)以及IO来运行不加修改的操作系统。 传统的处理器通过选择不同的运行(Ring 特权)模式,来选择指令集的范围,内存的寻址方式,中断发生方式等操作。在原有的Ring特权等级的基础上,处理器的硬件虚拟化技术带来了一个新的运行模式:Guest模式[1],来实现指令集的虚拟化。当切换到Guest模式时,处理器提供了先前完整的特权等级,让Guest操作系统可以不加修改的运行在物理的处理器上。Guest与Host模式的处理器上下文完全由硬件进行保存与切换。此时,虚拟机监视器(Virtual Machine Monitor)通过一个位于内存的数据结构(Intel称为VMCS, AMD称为VMCB)来控制Guest系统同Host系统的交互,以完成整个平台的虚拟化。