-
Redis源码阅读之数据结构
按照网上别人的建议,从数据结构相关的代码看起,reids version:3.2.0-rc3,涉及: 文件 内容 `sds.h` 和 `sds.c` Redis 的动态字符串实现。 `adlist.h` 和 `adlist.c` Redis 的双端链表实现。 dict.h 和 dict.c Redis 的字典实现。 `server.h`...…
-
Redis源码阅读之sds
按照网上别人的建议,从数据结构相关的代码看起,reids version:3.2.0-rc3,涉及: 文件 内容 `sds.h` 和 `sds.c` Redis 的动态字符串实现。 `adlist.h` 和 `adlist.c` Redis 的双端链表实现。 dict.h 和 dict.c Redis 的字典实现。 `server.h`...…
-
Java的autobox
Integer a = new Integer(1); Integer b = new Integer(1); System.out.println(a == b); // false System.out.println(a == 1); // true System.out.println(a .equals(b)); // true Integer c = 1; Integer d = 1; ...…
-
Netty数据处理流程
前序发先如果只是单纯的从底向上的分析源码的话,很难有深入的理解,单纯看割裂开的一个个类,不好去理解他们产生的意义。那就换个思路,从逻辑处理的整个流程去理解netty的设计。…
-
Netty_sourcecode_bytebuf
前序开篇第一节关注的是netty对ByteBuf的封装。对于封装的意义,我理解分几个方面: 通过引入Pool来管理内存分配,做到对象池服用 简化API操作 加入了UnSafe、DirectBuffer这些类型的buffer对象作为可选项。(buffer包涉及的类太多,请使用查看原图)大体分为这么几块: ByteBuf的派生类 ByteBufAllocator的派生类 辅助的功能类ByteBuf派生类ByteBuf直接派生出来的类有这么几个:WrappedByteBuf,Abst...…
-
Netty_sourcecode
今天开挖新坑,记录netty的源码学习之路。对netty感兴趣主要是在这么几个方向上: 内存管理,主要是在DirectBuf的使用上 EventLoop如何实现的,另外看看它如何让CPU利用率更高效 FrameWork层如何设计,更好的扩展以及封装底层APINetty 5.x的包结构大概是:io.netty |-bootstrap |-buffer |-channel |-handler |-util 后面会按照顺序去挨个分析每个包…
-
2014读书计划
2014年已经过去了3分之一,first quarter的读书计划比较失败啊。还是得做好计划列一下,好督促自己,全年的目标是啃掉24本,看看今年到年底进度如何。已完成: 王石:「道路与梦想」 完成时间:2014-03-20 读书笔记:(占坑) 卡马克:「DOOM启世录」 完成时间:2014-3 读书笔记:(占坑) 王长庆:「东晋门阀政治」 完成时间:2014-3 读书笔记:(占坑)Doing: [How google test software] -s 2014-11-04 放...…
-
Unix网络编程(二)——bio
首先从最简单的BIO开始,参考了csdn上一系列不错的blog,上来先看看代码/* A simple server in the internet domain using TCP The port number is passed as an argument */#include <stdio.h>#include <stdlib.h>#include <string.h>#include <unistd.h>#include <...…
-
Zookeeper初探
再挖个坑,准备仔细看一下zookeeper。zookeeper作为很多分布式服务中用于管理的关键一环,意义其实很重要,这里先仔细学习下吧。##什么是zookeeperzookeeper贵为apache的顶级项目,在它的介绍中说ZooKeeper is a centralized service for maintaining configuration information, naming, providing distributed synchronization, and provi...…
-
Java高性能线程通讯
今天在infoq的网站上看到一篇有趣的文章Java里快如闪电的线程间通讯。文章探索的是多个生产者、单一消费者场景下高效无锁并发处理模型,看了作者的几种解决问题的办法,代码在github上https://github.com/asyncj/core: 首先,很多情况下,写的糟糕的多线程代码并不如单线程代码高效! 作者的方案一,阻塞队列 + 缓存线程池,根据作者的测算,大概是单线程代码throughput的五千分之一。呃,这是最容易想到,也是最常用的办法,其效率也是显而易见的……不过需要说...…
-
Thrift_what_and_why
这两天有点时间,琢磨下一直一知半解的thrift。thrift的官网中对它的介绍是:The Apache Thrift software framework, for scalable cross-language services development, combines a software stack with a code generation engine to build services that work efficiently and seamlessly betwee...…
-
One_class_collabrater_filtering
http://www.resyschina.com/2011/04/one-class-collaborative-filtering.html#0-tsina-1-92495-397232819ff9a47a7b7e80a40613cfe1##摘要有许多协同过滤问题,例如对新闻、书签的推荐,都会被很自然的视为单分类协同过滤(OCCF)。在这些问题中,训练集数据经常是由简单的二元数据{binary data}组成的,比如新闻是否被访问或者网页是否被用户收藏到书签。经常这类数据是极其稀疏的,...…
-
Python第二发
python第二发来啦。结合最近看的东西还有项目需求,准备用python尝鲜做点小东西checkDupImage。简而言之,就是想从大量的图片中找出重复的图片。在网上搜了下,感觉比较简单的办法还是使用phash。python有个imagehash库,可以计算出图片hash,然后直接将所有图片根据hash值排序,phash相同的就基本没跑了,phash差距在500以内的也是十拿九稳,更可靠的阈值目前正在测试中 :D 下面是对两个脚本的简单介绍##checkDumpImg.py这是一个使用py...…
-
协程与多线程
先挖个大坑备填。这两天在看lua的时候顺路了解了coroutine,发现这东西真的是个利器啊,除了lua原生支持之外,python、java都可以通过第三方module支持,值得好好学习一下。准备阅读: gevent for the working python developer gevent社区出品 Implementing servers gevent.org上面的guide 淺談coroutine與gevent 湾湾的一片文章,简洁易懂,里面的时序图画的很棒。评论里面提到了S...…
-
Python初体验
最近在看《div into python》,正文部分快看完了,然后今天找个机会试试身手。需求其实说简单也简单,说复杂用java写起来的话也挺麻烦的:遍历1w多张图片,确定图片的宽高,然后计算出最接近图片的背景色。为什么会有这么个奇怪的需求呢?因为受pinterest客户端启发。试用pinterest的android客户端,发现它的图片在加载的时候,应该会首先通过api获取图片的宽度和高度以及背景色,然后用这个色值作为背景,加载一个同样宽度和高度的色块,再去load图片。这样当图片出来的时候...…
-
Nginx+lua=手术刀
之前听说过@agentzh出品的openresty集成了很多有用的第三方module,特别是集成了lua相关的一系列东西,非常好用,这次终于有机会来尝试了。使用之后总体感觉就是一个字,“爽”,有一种甩开java的畅快感。首先为了省事,没有安装nginx官方版本再自己一个个的去安装module,安装的是openresty最新的稳定版。我们使用的到的模块,基本包括了ngx_lua、ngx_redis2、cjson、rds这些模块。另外为了从nginx直接访问数据库,使用了drizzle模块。操...…
-
Nginx Upstream Timeout
今天检查我们nginx的错误日志,发现大量的 upstream timed out (110: Connection timed out) while reading response header from upstream ,果断google一下,发现网上不少建议是在使用php-fpm的时候,调大fastcgi_read_timeout这个参数,实际上应该是延迟超时时间吧。…
-
Razor抓虫记
昨天因为一个问题,跟razor掐了一天,今天终于有空总结一下。问题的起因是想做两件事:一是把razor的地址查询从在线查询的方式修改为使用离线数据,二是讲原来直接插入数据库的数据先缓存到redis,再定期写入mysql数据库。做这两件事情的时候就遇到坑了。首先需要说明的是,我的razor使用的是0.4的版本,因为项目其他事情的原因,一直没有升级到最新的版本。中间为razor增加了一些特性,也一直没有合并进razor的主库,这也引起了后面的一些问题。 按照razor官方...…
-
Razor 服务器端代码分析(二)
cobub razor是开源的移动统计后台,github主页:https://github.com/cobub/razor。分为客户端SDK和服务器端两部分,客户端主要负责采集数据,而razor的服务器端需要完成数据的采集、统计分析、展示的工作。数据采集依赖于提供的api接受client发回的数据,统计分析是依赖于mysql数据库的存储过程来完成的,而数据的展示则是依靠一个php开发的后台实现,里面大量的报表展示和导出,还是非常不错的。razor中有不少的设定可能和项目本身的设计不是很吻合...…
-
监控应用自身被卸载
今天思考的一个问题是如何让应用监控到自己被卸载,然后在卸载的时候执行一些操作,比如向服务器发送一个报告,或者引导用户到一个卸载反馈页上去,比如360手机助手那样。然后就在网上上看到了这篇文章android应用监控被卸载还有它的续集,github上有人根据他的方案做出了一个demo:https://github.com/sevenler/Uninstall_Statics。这个demo我测试过,是可用的。只要不是用户通过进程管理器把整个进程都kill掉,就能够在应用自身被卸载的时候调用c写的...…