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

技术文章

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

技术文章精选

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

最新文章

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

IT 系统架构/ 2012-04-07 14:43:40 / 累计浏览 2,286

Google Guava V11 中的Cache操作

Google Guava cache的主要功能点:     * 你需要给现有系统加速;     * 有些key需要不知一次的查询获取;     * 从策略上讲,你的应用需要从策略上把所有的value从cache中清理出来 — 你试图减少重复的工作;[注:weakKey , weakValue]     * cache仅仅存储在内存中,没有在文件中或者其他的server上面,如果不满足你的需求,可以考虑Memcached API的两种调用方式 1:普通的调用方式,通过key得到value的时间较短

IT 系统架构/ 2012-04-07 14:42:58 / 累计浏览 4,049

MySQL Cluster 与 MongoDB 复制及分片设计及原理

分布式数据库计算涉及到分布式事务、数据分布、数据收敛计算等等要求   分布式数据库能实现高安全、高性能、高可用等特征,当然也带来了高成本(固定成本及运营成本),我们通过MongoDB及MySQL Cluster从实现上来分析其中的设计思路,用以抽象我们在设计数据库时,可以引用的部分设计方法,应用于我们的生产系统.......

IT MySQL/ 2012-04-07 14:37:44 / 累计浏览 2,671

InnoDB Log 漫游(3)

理论上来说,如果MySQL数据库InnoDB存储引擎的buffer足够大,就不需要将数据本身持久化。将全部的redo log重新执行一遍就可以恢复所有的数据。但是随着时间的积累,Redo Log会变的很大很大。如果每次都从第一条记录开始恢复,恢复的过程就会很慢,从而无法被容忍。为了减少恢复的时间,就引入了Checkpoint机制。

IT MySQL/ 2012-04-07 14:37:12 / 累计浏览 2,211

InnoDB Log 漫游(2)

虽说Redo Log将数据的操作细分到了页面级别。但是有些在多个页面上的操作是逻辑上不可分裂的。比如B-Tree的分裂操作,对父节点和2个子节点的修改。当进行恢复时,要么全部恢复,要么全部不 恢复,不能只恢复其中的部分页面。InnoDB中通过mini-transaction(MTR)来保证这些不可再分的操作的原子性。

IT MySQL/ 2012-04-07 14:34:53 / 累计浏览 2,186

InnoDB Log 漫游(1)

Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方(这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

IT 用户研究/ 2012-04-07 14:32:59 / 累计浏览 2,628

产品原则,还是用户习惯?

产品原则 很欣赏 iOS 系统的文件夹:只能一个个把应用往其拖拽,不支持批量,也不支持文件夹套文件夹。用户不需要这样的功能吗?未必没有,越狱版本提供了这样的插件且用户数还不少就是一个证明。但是,这将打破苹果产品「简约」的原则。这里支持批量与嵌套,那里是不是也应该支持呢?批量最好能排序,排序的维度不仅有音序、笔画序,还要有最新、最热…… 产品原则决定做还是不做,做到什么程度。原则给产品划了一条底线。需求、流畅度、信息架构、交互设计等等都围绕着它跑。说白了,产品原则制衡用户需要与功能规格。

IT 系统架构/ 2012-04-07 14:31:47 / 累计浏览 6,130

消息系统该Push/Pull模式分析

信息推拉技术简介 “智能信息推拉(IIPP)技术”是在网上信息获取技术中加入了智能成份,从而有助于用户在海量信息中高效、及时地获取最新信息,提高了信息系统主动信息服务的能力。如果引入基于IIPP的主动信息服务系统,则可根据用户的特性提供具有针对性的、个性化的信息服务。 以往在Internet上搜寻信息,最常用的方法就是浏览器发出请求后,Web就将信息传送给用户,此过程用户需要“拉取”信息而被描述为Pull;而将信息直接“推送”到用户的计算机的方法就是信息推送,称之为Push,用户只需要在初次使用时自己设定所需要的信息频道,此后,定制信息将通过Web自动传给用户。 信息推拉技术智能化 在传统的Client/server结构中,信息获取方式是按“拉”(Pull)的模型进行的:服务器根据用户终端发送的服务请求进行处理并返回用户所需的结果。

IT 算法/ 2012-04-07 14:31:01 / 累计浏览 4,151

正多边形的滚动与旋轮线下方的面积

    想像一个圆盘在地面上滚动一周,那么圆周上一点所形成的轨迹就叫做旋轮线(或者摆线)。旋轮线下方的面积是多少,这是一个非常有趣的问题。据说, Galileo 曾经用一种非常流氓的方法,推测出了旋轮线下方的面积。他在金属板上切出一块圆片,再在金属板边缘剪下这个圆形所对应的旋轮线,把它们拿到秤上一称,发现后者的重量正好是前者的三倍。于是,他推测,半径为 r 的滚轮所产生的旋轮线,其下方的面积就是 3πr2 。     

IT 系统架构/ 2012-04-07 14:29:59 / 累计浏览 10,994

Facebook 网站架构

我收集到一些文章和视频, 可以带你窥探 Facebook 的架构. Facebook 承载了几十亿的用户, 它的架构(包括思想和实现)是非常值得参考的. 当然, 你要小心不要照搬 Facebook 的每一字一句, 因为任何思想和实现都是有自己的应用场景的.

IT 算法/ 2012-04-07 14:25:53 / 累计浏览 1,425

Ringbuffer 范例

前段时间谈到了 ringbuffer 在网络通讯中的应用 。有不少朋友写 email 和我探讨其实现细节。 清明节放假,在家闲着无聊,就实现了一个试试。虽然写起来还是挺繁杂的,好在复杂度还在我的可控范围内,基本上也算是完成了。 设想这样一个需求:程序 bind 并listen 一个端口,然后需要处理连接到这个端口上的所有 TCP 连接。当每个连接上要数据过来时,收取这些数据,识别出封包,发送给对应的逻辑层处理。如果数据不完整,则暂时挂起这些数据,直到数据收取完整再行处理。我写的这个小模块实现了这样一组特性,因为使用了唯一的 ringbuffer 缓存所有的连接,可以保证在程序运行过程中,完全没有额外的内存分配操作。

IT 奋斗/ 2012-04-03 23:02:04 / 累计浏览 2,149

去或留

前些日跟梁冬先生见了一面,绕了个很有意思的话题:去或留。 每个人在每个公司每个项目组都只有两条路可走:去或留。 换个公司,换个项目组,换一个行业,仍然是这两个选项。 既然“去”这个词,最终会遇到“留”,考虑一下为什么“去”“留”,就很有意思了。 有人是为了薪水,有人是为了成就感,有人是为了舒服的环境。 你为什么走了?你为什么留下来?你为什么放弃舒服的环境去陌生的项目组? 为了涨薪水?为了涨成就感? 我们需要“增长”的经验,不仅仅是技术经验,还包括与人交往的经验。 你的人脉也是你重要的一笔财富。 找人做事情,有两种境界。 他帮你,也会有两种原因。 一种是善意的,他看你在忙,愿意帮你做这件事情。或者你求他做事,他答应你。 一种是欠意的,你帮他做过很多事,他特别希望有个机会能帮你做事。 前者会有个限度,求啊求啊,他就不会帮你了。或者没有那么积极的帮你。 后者是主动的,效果会好很多。

IT 系统运维/ 2012-03-31 23:59:54 / 累计浏览 2,473

MogileFS 文件系统检查

MogileFS 是一个大型的分布式支持 HTTP 的数据存储的系统,当然不会有一个传统的 "fsck" 组件. 他设计了一种机制来并行的,在线的,异步的检查整个文件系统. The MogileFS fsck 默认,会检查和核对...

IT 算法/ 2012-03-31 23:50:24 / 累计浏览 1,905

Apache MPM Prefork设计方法浅析

最近几天翻阅了apache的MPM(Multi-Processing Module)机制相关的代码,虽然还有很多细节没有搞明白,但对apache的服务器模型有了一个大体的概念,对于不同的操作系统,apache提供了不同的默认MPM模型,下表是不同操作系统默认的MPM模型: BeOSbeos Netwarempm_netware OS/2mpmt_os2 Unixprefork Windowsmpm_winnt Unix平台则对应着prefork模型,prefork从名字上看意思是预先生成子进程,所以这种模型大致上是怎么工作的我们心里差不多有些认识了,prefork是一种很重要的服务器程序设计模型,对应的还有prethread,prefork一般应用在Unix平台上,因为在服务器启动时需要预告fork出一些空闲的子进程,由它们共同监听客户端的请求,这样来实现快速高并

IT 算法/ 2012-03-31 23:49:47 / 累计浏览 4,376

Memcached的线程模型及状态机

Memcached是一种应用较广泛的分布式内存对象缓存系统,应用之余总想了解它的实现机理,这也就是开源的好处,以至于每接触一款优秀的开源软件都有去阅读它源代码的冲动,Memcached-1.4.7的代码量还是可以接受的,只有10K行左右,我比较关心的两个方面还是它的进程(线程)管理机制和内存管理机制,这里先简单写一下我对Memcached进程管理方面的理解。 Memcached使用libevent实现事件循环,libevent在Linux环境下默认采用epoll作为IO多路复用方法,这个不重要,接下来要讨论的是Memcached的进程管理模型。

IT 算法/ 2012-03-31 23:49:17 / 累计浏览 5,088

Memcached内存管理机制浅析

Memcached的内存管理在网上也可以搜集到不少不错的文章,新浪的这篇《Memcached深度分析》讲得不错,读别人的文章还是不如自己直接去读源码分析源码来得直接,这里写一下我阅读Memcached源码时对于Memcached内存管理机制的理解。 Memcached的代码结构很简单,从main()函数入口进去之后便是几个模块的初始化函数,和内存管理相关的主要有两个函数,一个是assoc_init(),这个是用来初始化哈希表的,关于这个哈希表的作用留在外面讨论,另一个是slabs_init(),该函数用来初始化slab,下面先来讨论一下slab机制。

IT 算法/ 2012-03-31 23:48:27 / 累计浏览 3,929

Redis的事件循环与定时器模型

简单翻阅了下Redis的源码,读一款server软件的源码我一般是从进程/线程模型开始的,Redis让我有些诧异,它采用了单进程单线程的模型,一般的server软件都会采用多进程或者多线程再或者多线程多进程混合的模型来设计,从而充分利用多核处理器的并行计算能力来提高软件的性能,Redis这种模型我只能推断程序的可并行化程度不高,顺序计算反而能省去多线程同步和维护线程池/进程池的开销,我对于数据库server端的设计没有什么经验也没有太多的理解,如有谬误欢迎大家指正。 当然,这里要写的不是关于Redis的进程模型,而是Redis的事件模型和定时器模型。

IT 信息和交互/ 2012-03-31 23:43:08 / 累计浏览 2,169

UGC如何建立内容秩序

我之前发微博说,千万多考虑UGC用户的下限,而不是以己推人去幻想他们的上限。缺乏对内容秩序的控制力,再好的产品设计都得啃泥。对内容秩序通俗一点的解释,就是优胜劣汰。好的内容浮上来成为主流,坏的内容沉下去不惹是非。维持内容秩序有两招最常见,一是拉人,引入优质用户;二是管人,用人工管理与互动算法来奖励好的内容,惩罚坏的内容。但如果你仅仅这么做,那就是本末倒置。什么是本呢?“本”是UGC的“内容基调”。这个拗口的名词还有一些别的称谓,比如“产品气场,产品品位,内容气质,内容价值观”等等。一个比一个虚。直白点说,它是对内容好坏,用户优劣的精确定义。

IT PHP/ 2012-03-31 23:41:21 / 累计浏览 3,473

http header中缺少Content-Type导致$_POST为空

今天出现一个诡异的情况,$HTTP_RAW_POST_DATA是有值的,但是$_POST却是空的array()。 反复尝试后发现是因为header中缺少Content-Type,设置Content-Type : application/x-www-form-urlencoded; charset=UTF-8 之后,就搞定了。 非常诡异的问题,总之以后养成设置Content-Type的好习惯就对了。

IT JavaScript/ 2012-03-31 23:40:13 / 累计浏览 4,510

渐进增强的无刷新多图片上传控件(iFrame+HTML5)

目标: 实现一个无刷新的,多图片上传控件.(目前已在91美图网中使用) 特点: 采用渐进增强的设计思路,针对支持HTML5新特性比较好的现代浏览器,使用HTML5中的新特性,包括File对象,XMLHttpRequest中的upload对象,File对象等新增的功能实现较为高级的多图片无刷新能够检测上传进度的上传控件.而对于不支持HTML5特性的较老的浏览器则使用传统的隐藏iFrame的形式来实现伪装的多图片上传功能.

IT 设计思想/ 2012-03-31 23:38:58 / 累计浏览 2,587

创业与苦干

2011年的春节,我在柬埔寨旅行了11天,有位正在加班的创业同行微博怒斥说,我们春节都不放下工作,他还好意思去旅行?这种人还好意思追求产品成功?只见过贼吃肉,没见过贼挨打吧。然后我把他拖黑了……所以不知道他的创业项目是否顺利。事情过去了很久,我也不生气了,姑且祝他能得到与辛苦对等的报偿吧。不过就算不能如愿,相信他也会安慰自己说,我鞠躬尽瘁问心无愧。最近两年很流行创业,各路神仙说过,这个创业啊就得拼,就得每周工作70-80小时。连我这种习惯性每周工作60+小时的人,听了都有点后心发凉,觉得年纪大了怕是体力不支哟。后来我多了解了几支创业团队,有滋润的,有维持的,有蛰伏的,也没见他们多苦逼啊?尤其是做APP的,你想加班加点弄复杂点用户还不乐意呢。那么“苦干”究竟是不是产品创业的常态,或者说创业顺利的必经之路呢?广告行业有句名言:“我花在广告上的钱有一半被浪费掉了,糟糕的是,我不清楚是哪一半。”