正如那本<Code Reading>一书中指出的那样,源代码阅读一直没有被很好的重 视:你上大学的时候有“代码阅读”这门课吗?相信没有. 1 Source Insight 谈到阅读源代码,不得不提一下很多人都用过并且现在也还用着的一个工具: Source Insight.很多年前我最早接触的源代码阅读工具就是这个.不可否认, 它有很多优点:非常直观,非常容易上手,该有的功能基本上都有… 但是,它也有一些缺点: 是商业软件:要花钱买或者使用盗版是Windows软件:在Linux下用的话需要用 W…
阅读源代码时常常遇到找变量,函数定义的问题.vim为我们提供了一个好用的工具,ctags. 安装 ctags. 在 libvirt的源代码根目录运行 ctags -R . vim -t virConnectPtr 或者在vim中把光标移到virConnectPtr(或其它结构体,函数,等等), 再按 Ctrl-[ 可以跳到定义处…
  Linux下阅读源代码的方法很多,聪明人从标题应该就可以知道,需要(g)vim+Taglist+ctags.3者配合,真是珠联璧合,功力无限啊! vim/gvim什么是vim/gvim,如果看官连vi都不知道,那就别往下看了.一些对Linux一知半解的人说,vi不就是一个和Win下的note pad一样的工具吗?其实大错特错了,如果仅仅是和note pad一样的功能,那它早就不叫vi了. TaglistTaglist是一个vim的源代码浏览插件,具体功能介绍还烦请各位看官自己google一下…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 进入了源代码篇,我们先从整体入手,之后拿一个简单流程前端连接建立与认证作为例子,理清代码思路和设计模式.然后,针对每一个重点模块进行分析. 1. 整体通信与业务框架: 前端与后端通信框架都为NIO/AIO,因为目前生产上用的linux发行版内核都没有真正实现网络上的AIO,如果应用用AIO的话可能比NIO还要慢一些,所以,我们这里只分析NIO相关的通信模块. NIOAcceptor:作为服务器接受客户端连…
ilocker:关注 Android 安全(新入行,0基础) QQ: 2597294287 [emacs tutorial]是熟悉 emacs 的入门资料.一共几十个命令,不需硬记,勤练即可. 翻页命令: C-v:向前移动一屏 M-v:向后移动一屏 C-l:重绘屏幕,并将光标所在行置于屏幕的中央 光标控制: C-n:移动到下一行(next) C-p:移动到上一行(previous) C-f:向右移动一个字符(forward) C-b:向左移动一个字符(backward) M-f:向右移动一个词[…
说来真是惭愧呀.一直在用VIM 做开发.却不知道VI 里还有这么好使的工具.以前一直都是用: find -type f -print | xargs grep -i **** 在源代码里查找. 原来Linux下也有类似于Souce Insight工具.以下是引用人家的文章.http://blog.chinaunix.net/u1/56619/showart_1822993.html linux源代码分析和阅读工具比较 Windows下的源码阅读工具Souce Insight 凭 借着其易用性和多…
1.最近刚到公司,公司就发一架构代码自己看,看了几天看的想吐,也在网上找了下相关的技巧吧,不是有句话叫做:成功必有方法,失败总是借口! 2.借鉴别人的方法来看看如下: 记得在开源流行之前,我看过的代码紧限于所参与的项目,能有个几万行就不错哩.后来很多优秀开源项目都相继蹦出来了,阅读的代码量那叫一个大呀!不得不看.我现在掉到android这个大坑里,每天都要看很多源代码.以前做过J2EE,看Struts2.Lucene.OSWorkflow.iText等项目的源码,动机有三:文档不足.找问题的原因…
参照10年前写的文档 (Linux源码阅读工具lxr和glimpse的安装与配置),想重新搭建一个源代码阅读工具,发现源里面都没有相关的工具了. 然后看到有更简单的安装工具Global可以使用,所以果断尝试新的工具,安装后感觉确实简单很多. 源里面的版本有点旧(关键是好像没有htags-server命令,折腾apache2半天还是有问题),建议下载最新版: $ wget http://tamacom.com/global/global-6.6.2.tar.gz 下载页面:https://www.…
org.apache.flume.sink.AvroSink是用来通过网络来数据传输的.能够将event发送到RPCserver(比方AvroSource),使用AvroSink和AvroSource能够组成分层结构. 它继承自AbstractRpcSink  extends AbstractSink implements Configurable这跟其它的sink一样都得extends AbstractSink implements Configurable.所以重点也在confgure.st…
Java 的输入输出总是给人一种非常混乱的感觉.要想把这个问题搞清楚.必须对各种与输入输出相关的类之间的关系有所了解. 仅仅有你了解了他们之间的关系.知道设计这个类的目的是什么.才干更从容的使用他们. 我们先对 Java I/O 的整体结构进行一个总结,再通过分析源码,给出把每一个类的关键功能是怎样实现的. Java I/O 的主要结构 Java 的输入输出,主要分为下面几个部分: 字节流 字符流 新 I/O 每一个部分,都包括了输入和输出两部分. 实现概要 这里仅仅给出每一个类的实现概要,详细…
综合他们多篇博客,做一个自己的总结(从0开始,记录过程) 系统:ubuntu 16.04  vim:7.4.1689 内容来源: https://www.cnblogs.com/wangzhe1635/p/9025711.html https://blog.csdn.net/niepangu/article/details/52888116 https://blog.csdn.net/limanjihe/article/details/49994247 关于 ctags.cscope.tagli…
首先,非常多人说,不会看jdk中的源代码就不叫学过Java.显然这是肯定的.打个例如:真正的厨师须要从食材的选取.加工.到最后的烹饪.装盘成型,甚至到最后给用户介绍食用方法等一整套流程走下来.而实际上非常多厨师仅仅是做了当中的一小部分,所以最多也仅仅能叫得上"炒菜的",而不是一个厨师.而非常多顶级餐厅强调选材,就是从源头上找到适合做某道菜的原料,甚至是反过来.得到一个供应链供应某种独特食材而专门为该材料设计某种烹饪技术. 这就是从头至尾的资源最大化利用.其体现创新及内功的地方贯穿整个流…
大家知道Windows下有一个很好的查看源代码的软件sourceinsight,使用sourceinsight查看Linux内核代码.嵌入式软件开发中的C语言项目源代码.驱动程序代码很是方便.在Linux下使用vim查看源代码不是很方便,于是搜了一下Linux下sourceinsight的相关替代软件,找到了一款Source Navigator,于是就试着在Ubuntu12.04下安装了一下.但是安装之后默认字体不好看,新建一个工程很慢,个人感觉跟sourceinsight没法比,还不如使用最新…
对android elf的资料学习,多数是在看雪找的资料,另一部分朋友的研究,当然,给他们提议过整理成一系列文章,只是大家工作都太忙,也都没顾上,这里简单整理放上一些pdf的资料,有兴趣的朋友能够看看. 下载链接: http://pan.baidu.com/s/1gd05JFX…
一 题外话 之前写过一篇最新版SDWebImage的使用,也简单的介绍了一下原理.这两天正梳理自己的知识网络,觉得有必要再阅读一下源码,一是看具体实现,二是学习一下优秀开源代码的代码风格,比如接口设计,设计模式,变量命名等等. 既然是第一篇,就要制定一个阅读源码的计划,以什么顺序阅读完全部代码.我们从最常见的入口切入sd_setImageWithURL,一路下去,最后再阅读没有设计到的部分. 二 入口 我们为什么使用SDWebImage,是因为他帮我们实现了图片的二级缓存,使我们加载图片更流畅.…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 前端连接建立与认证 Title:MySql连接建立以及认证过程client->MySql:1.TCP连接请求  MySql->client:2.接受TCP连接client->MySql:3.TCP连接建立MySql->client:4.握手包HandshakePacketclient->MySql:5.认证包AuthPacketMySql->client:6.如果验证成功,…
线程池简单点就是任务队列+线程组成的. 接下来我们来简单的了解下ThreadPoolExecutor的源代码. 先看ThreadPoolExecutor的简单类图,对ThreadPoolExecutor总体来个简单的认识. 为了分析ThreadPoolExecutor我们得下扯点队列和队列里面的任务这东西. 常见三种BlockingQueue堵塞队列SynchronousQueue,LinkedBlockingQueue,ArrayBlockingQueue当然还有其它的,简单类图(仅仅画了Sy…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 5. 路由模块 真正取得RouteResultset的步骤:AbstractRouteStrategy的route方法:对应源代码: public RouteResultset route(SystemConfig sysConfig, SchemaConfig schema, int sqlType, String origSQL,             String charset, ServerC…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 调用processInsert(sc,schema,sqlType,origSQL,tableName,primaryKey): public static boolean processInsert(ServerConnection sc,SchemaConfig schema,            int sqlType,String origSQL,String tableName,String …
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3. 连接模块 3.5 后端连接 对于后端连接,我们只关心MySQL的. 从后端连接工厂开始MySQLConnectionFactory.java: public MySQLConnection make(MySQLDataSource pool, ResponseHandler handler,             String schema) throws IOException {       …
这是我在看论文时无意刷到的博客推荐的一篇文章"How to Read a Paper",教你怎么样看论文.对于研究生来说,看论文基本是日常,一篇论文十多二十页,如何高效地读论文确实非常重要,我也看了不少论文,有了一些体会,这篇文章介绍的方法值得参考. 原文来自https://blizzard.cs.uwaterloo.ca/keshav/home/Papers/data/07/paper-reading.pdf 这里还发现了翻译成中文的版本:https://wenku.baidu.co…
接近用了4个多月的时间,完成了整个<Spring官网阅读>系列的文章,本文主要对本系列所有的文章做一个总结,同时也将所有的目录汇总成一篇文章方便各位读者来阅读. 下面这张图是我整个的写作大纲 对应的文章目录汇总如下: Spring官网阅读(一)容器及实例化 本文主要涉及到官网中的1.2,1.3节.主要介绍了什么是容器,容器如何工作. Spring官网阅读(二)(依赖注入及方法注入) 本文主要涉及到官网中的1.4小节,主要涉及到Spring的依赖注入 Spring官网阅读(三)自动注入 在对依赖…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3. 连接模块 3.4 FrontendConnection前端连接 构造方法: public FrontendConnection(NetworkChannel channel) throws IOException {     super(channel);      InetSocketAddress localAddr = (InetSocketAddress) channel.getLocalA…
源码: # -*- coding: utf-8 -*-""" flask ~~~~~ A microframework based on Werkzeug. It's extensively documented and follows best practice patterns. :copyright: © 2010 by the Pallets team. :license: BSD, see LICENSE for more details.""&…
源码: # -*- coding: utf-8 -*-""" flask.__main__ ~~~~~~~~~~~~~~ Alias for flask.run for the command line. :copyright: © 2010 by the Pallets team. :license: BSD, see LICENSE for more details.""" if __name__ == '__main__': from .c…
一  SDWebImageManager的downloadImageWithURL的方法 上一篇,我们刚开了个头,分析了一下开始加载图片之前如何取消其他正在下载的任务,接着,我们回到 - (void)sd_setImageWithURL:(NSURL *)url placeholderImage:(UIImage *)placeholder options:(SDWebImageOptions)options progress:(SDWebImageDownloaderProgressBlock…
此文已由作者易国强授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 2. 前端连接建立与认证 Title:MySql连接建立以及认证过程client->MySql:1.TCP连接请求  MySql->client:2.接受TCP连接client->MySql:3.TCP连接建立MySql->client:4.握手包HandshakePacketclient->MySql:5.认证包AuthPacketMySql->client:6.如果验证成功,…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. public static void handle(String stmt, ServerConnection c, int offs) {         int offset = offs;         switch (ServerParseSelect.parse(stmt, offs)) {         case ServerParseSelect.VERSION_COMMENT:    …
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 3. 连接模块 3.5 后端连接 3.5.2 后端连接获取与维护管理 还是那之前的流程, st=>start: MyCat接受客户端连接并为之建立唯一绑定的Session e=>end: 将请求发送给对应连接,处理完之后归还连接 op1=>operation: MyCat接受客户端的请求,计算路由 op2=>operation: 根据请求和路由创建合适的handler,这里为SingleNo…
此文已由作者张镐薪授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 对于表的dataNode对应关系,有个特殊配置即类似dataNode="distributed(dn$1-10)",这个含义是: /**      * distribute datanodes in multi hosts,means ,dn1 (host1),dn100      * (host2),dn300(host3),dn2(host1),dn101(host2),dn301(host…