西代零零发

既然选择远方,便只顾风雨兼程
私信 关注
cdai
码龄14年
  • 4,290,659
    被访问量
  • 353
    原创文章
  • 491
    作者排名
  • 3,128
    粉丝数量
  • 于 2007-04-23 加入CSDN
获得成就
  • 博客专家认证
  • 获得1,729次点赞
  • 内容获得1,717次评论
  • 获得917次收藏
荣誉勋章
兴趣领域
  • #大数据
    #hadoop#spark
TA的专栏
  • 内存计算
    18篇
  • 探索编程的本质
    3篇
  • C
    55篇
  • Windows
    15篇
  • Linux
    58篇
  • Web
    23篇
  • JS
    6篇
  • Java
    78篇
  • PHP
    17篇
  • MySQL
    13篇
  • .Net
    5篇
  • Struts
    9篇
  • Database
    17篇
  • NoSql
    6篇
  • 公开课
    7篇
  • Python
    6篇
  • 算法
    52篇
  • Shell
    6篇
  • 游戏
    8篇
  • Qt
    4篇
  • 业余项目
    13篇
  • 网络编程
    14篇
  • Geek
    11篇
  • Hibernate
    4篇
  • J2EE
    13篇
  • MyBatis
    2篇
  • 软件工程
    11篇
  • Lisp
    8篇
  • Hadoop
    8篇
  • Spring
    2篇
  • Redis
    15篇
  • Tomcat
    3篇
  • Nginx
    3篇
  • Ruby
    2篇
  • 推荐算法
    1篇
  • 实时计算
    14篇
  • Spark
    5篇
  • NewSQL
    2篇
  • IMDG
    11篇
  • LeetCode
    12篇
  • 开发工具
    8篇
  • 编译链接
    4篇
  • 计算机体系结构
    2篇
  • golang
    3篇
  • 虚拟化
    1篇
  • 汇编语言
    2篇
  • 计算机科学
    8篇
  • Math
    2篇
  • 函数式编程
    1篇
  • 数据库
    2篇
  • 读书笔记
    11篇
博客之星评选拉票

重在参与,请您投票 :)

  • 最近
  • 文章
  • 资源
  • 问答
  • 课程
  • 帖子
  • 收藏
  • 关注/订阅

Redis之父的“退役”感言

Redis之父Antirez今早发布了一篇文章,题为《The end of the Redis adventure》。多年以前深入学习过Redis,这个最流行的缓存解决方案。当时惊叹于其近乎“变态”的性能表现,简直就是一个性能猛兽。而更令人印象深刻的是,在优异的外在表现背后,其代码质量也同样优秀。当年又不少的文章和书籍,都是关于Redis源码解析的。因为工作的缘故,我也写了不少文章,对Redis这个好产品还是有些怀念的。出于这些缘由,今天特意仔细读了一下Redis之父的这篇博客。文章虽然不长,但有的地方还
原创
5评论
2点赞
发布博客于 6 月前

测试驱动开发下的软件生长

测试驱动开发下的软件生长1.前言最近读完了《Growing Object-Oriented Software, Guided by Tests》,这本在豆瓣上高达9.5分的好书。事实证明,群众的眼睛是雪亮的。除去中间那个很长的实际项目案例没耐下心来看完,其他部分我都看了不止一遍。虽然还没有读过那本名气很大的《Test Driven Development: By Example》,但到目前为止,这本书已经成了我心中测试驱动开发的“圣经”。读完全书,印象深刻的地方实在太多了,比如快速反馈的重要性、软件系
原创
1评论
4点赞
发布博客于 7 月前

对《如何解题》思路的补充

1.前言《如何解题》(《How to Solve it》)是波利亚的经典著作,列举了很多数学问题,总结了解决问题的主要思路和步骤,即定义问题,设计方案、实现、验证。虽然全书主要是以数学问题为例,但其思路适用于生活和学习的其他方面。比如在软件开发领域,我们通常也是按照这四步。首先收集客户需求、找到客户的痛点和要解决的问题,然后进行产品设计、架构设计和每个模块的详细设计,接下来就是编码实现和最终测试验证了。这四步法的确非常有效,然而很多时候,现实世界的问题与纯粹的数学问题还是有很大差别的。最近读了一些其他这
原创
0评论
0点赞
发布博客于 8 月前

三本有趣的科普书

1.《The Joy Of X》第25章—— 最孤独的数Computers have found twin primes at unbelievably remote parts of the number line. The largest known pair consists of two numbers with 100355 decimal digits each, snuggling in the darkness.所谓Twin Primes就是两个紧邻的质数,比如11和13,17和1
原创
0评论
0点赞
发布博客于 8 月前

数据库引擎学习导读

因为目前项目涉及到数据库查询引擎的实现,所以近来愈发觉得数据库引擎开发是一个很好的技术领域。首先,一个数据库引擎与传统编译器很像,可以细分为三大部分,前端、中端和后端。所谓前端,就是一个SQL解析器把用户的SQL语句转换成语法树(Parse Tree或者叫Concrete Syntax Tree,CST),然后在执行语义检查的同时将其转换成中端所需的输入——抽象语法树(Abstract Synta...
原创
0评论
2点赞
发布博客于 10 月前

迟来的2019年总结

2018年的个人总结内容很丰富,2019年也已经过去两周了,想提笔写点什么却好像素材不多。这一年最大的收获应该就是,一直在做的主项目3月份在GitHub上开源了。以前对GitHub上如何开发和协作一点都不了解,没想到在Amazon竟然有机会参与到开源软件的开发。于是在接下来的大半年时间,如果管理Issue,发Pull Request,合并到主干。同时还读了《Pro Git》的主要部分,对Git和...
原创
1评论
0点赞
发布博客于 1 年前

GitHub Action开启自动化

这周突然发现公司项目的GitHub代码库多了一个Tab页,叫做GitHub Action。于是了解了一下,发现这就是大家期待已久的自动化功能。自动化不只是我们常说的CICD(持续集成和持续部署),通过定义一个yml文件我们可以实现更多的动作。这个yml配置文件会保存在代码库的.github文件夹,所以fork出去的代码库也跟着自动开启了相应的GitHub Action功能。下面就是我们代码库里一...
原创
0评论
0点赞
发布博客于 2 年前

Grammarinator:基于ANTLR4语法自动生成语句

Grammarinator是一个基于ANTLR 4的grammar文件,自动生成语句的开源项目:https://github.com/renatahodovan/grammarinator。从语言的grammar生成语句或者所谓的Fuzzy Testing,对软件测试很帮助。就像Grammarinator的README里所说,它已经帮助一些项目发现了很多缺陷。本文通过一个简单例子,让大家先了解一下...
原创
0评论
0点赞
发布博客于 2 年前

深入学习关系理论

周末阴雨连绵,在家闲来无事,抽空读了《Database In Depth: Relational Theory for Practitioners》这本评价不错的关系理论书的开篇。作者C.J.Date是关系理论之父Codd的好友,所以对关系理论的理解是足够深入的。甚至在开篇不久,作者就提到了与Codd理念不合的地方,比如关于NULL的合理性,关于Domain与Type的等价性等。1.SQL不等...
原创
0评论
0点赞
发布博客于 2 年前

疯狂的罗素

原书《Logicomix》,中文名《罗素的故事》或《疯狂的罗素》。讲述的是逻辑学家、哲学家罗素追寻真理的故事。以罗素的回忆为主线,穿插了许多史实和一些虚构的情节,比如罗素与一些人物的会面和对话。主要内容上与《逻辑的引擎》类似,毕竟如罗素悖论、哥德尔不完备性等大事件是一定会提及的。不同的是轻松有趣的漫画风格,而且是制作漫画的画师和数学家、演讲中的罗素、以及罗素回忆的故事三重场景不断转换,像盗梦空间一...
原创
0评论
0点赞
发布博客于 2 年前

超越离散数学

早些时候曾写过一篇程序员的数学修养,介绍了一些程序员可以学习的数学分支。虽然与编程有一定的相关,但自学起来也不是一件容易的事。所以本文再推荐一些专门为程序员写的数学书,可以用作入门。有了一定基础知识,可以再根据需要去学习和选读一些更偏向数学的书。说到程序员数学,可能第一反应就是离散数学,再就是算法。国外的几本经典教材可能大家也都耳熟能详,所以本文会侧重一些不是很热门或者新出版的书籍。1.抽象代...
原创
0评论
0点赞
发布博客于 2 年前

如何实现语义分析中的类型检查

之前曾写过一篇语义分析的概念性介绍:https://daichen.blog.csdn.net/article/details/100097850。最近,终于开发完了一套基于SQL的语义分析器,算是对之前学习到的理论的一次工程实践。本文只是点出一下实践时的一些关键点和经验,具体细节还请看这里的设计文档:https://github.com/opendistro-for-elasticsearch/...
原创
0评论
1点赞
发布博客于 2 年前

编译器中的语义分析

最近一直在看编译原理方面的书,之前着重研究过词法解析和语法解析,这一次因为工作原因比较侧重语义分析。简单来说,语义分析是发生在词法和语法解析之后,输入是Concrete Syntax Tree又名Parse Tree。语义分析器对Parse Tree进行分析,同时可以产生Abstract Syntax Tree(AST)。AST即忽略了语法细节的语法树,可能大家更熟悉一些。AST一般作为编译器前端...
原创
0评论
2点赞
发布博客于 2 年前

逻辑的引擎

最近利用通勤时间又读完了一本好书,《Engines of Logic——Mathematicians and the Origin of the Computer》。可能由于作者本身也是数学和计算方面的牛人,所以这本书并不那么容易读。一是字里行间可以立即感受到的不舒服,即句式有些太复杂,随便翻开一页就能发现很多可以用作GRE阅读理解的长难句。二是每一章都大概用了至少一半的篇幅,对年代和人物生平进行...
原创
1评论
1点赞
发布博客于 2 年前

如何高效地做设计评审

设计评审(Design Review),即在真正开始开发之前,组织一次或多次会议,先评审设计,以降低日后返工甚至项目失败的风险。相信工作过一段时间,开始主导一个功能模块甚至整个系统的同学,都对设计评审不会陌生。今天偶然看到了一篇亚马逊VP及Distinguished工程师Brad Porter的一篇博客,讲述了设计评审容易陷入的问题以及他主张的一些最佳实践。也许并不适用于所有公司和项目组,但不妨一...
原创
0评论
2点赞
发布博客于 2 年前

Linux Mint从HDD升级到SSD

Linux Mint从HDD升级到SSD两年前的黑五,几乎不到五折入手了Thinkpad P50,一款非常不错的个人工作站。可因为当时预算有限,所以买的是“乞丐版”配置,处理器、内存、屏幕、背光键盘都还是次要的,最主要的是没有固态硬盘。之后便一直嫌麻烦没有升级。最近恰逢打折,于是直接买了三星的970 Pro固态硬盘,又从联想官网买了支架,准备折腾一下。1.拆机安装首先要感慨的一点就是这SS...
原创
2评论
1点赞
发布博客于 2 年前

有品位的程序员

本文主要是一本老书《黑客与画家》部分章节的读后感,包括了我个人最最喜欢的两章《Hackers and Painters》和《Taste for Makers》。两个观点深入我心:不管做什么行业,一定要做一个Maker,方式不重要,重要的是你想不想表达自己的思想。能站在别人角度写出好代码是一种天赋,即同情心和同理心,它远比想象的难,甚至无法后天习得。1.创造者们黑客与画家,看似没有什么...
原创
0评论
1点赞
发布博客于 2 年前

ElasticSearch近实时搜索的实现

ElasticSearch近实时搜索的实现1.近实时搜索1.1 实时与近实时实时搜索(Real-time Search)很好理解,对于一个数据库系统,执行插入以后立刻就能搜索到刚刚插入到数据。而近实时(Near Real-time),所谓“近”也就是说比实时要慢一点点。1.2 近实时的挑战对于一个单机系统来说,这也并不容易实现,因为还要保证数据的持久化,还要利用缓存等技术加快数据的访问...
原创
0评论
2点赞
发布博客于 2 年前

AWS开源Elasticsearch插件

今天Amazon Web Service发布了Elasticsearch的开源分发包,项目名为Open Distribution for Elasticsearch。其中包括了Security,Alerting,SQL,performance工具等一组套件。因为有幸参与了其中SQL插件的开发,所以在这里打一打广告,欢迎大家Fork!官方介绍:https://opendistro.github.i...
原创
0评论
0点赞
发布博客于 2 年前

2019想要完善的几点

最近发现了自己学习时的一些不足,先简单地列在这里。以后发现了好的解决方法,或者更多可以改善的地方,再继续补充。1.勤做读书笔记读书笔记是这个博客的主要组成部分,但如何能做好却不是一件简单的事。主要原因就在做笔记的频率。过频则会不断打断阅读思路,纯粹成了为了做笔记而做笔记。而过晚则会导致当时的短时记忆都不在,就剩下书上的一些划线和旁注,最终很多书读过就忘了,这也是我现在最想改正的问题。一个简单...
原创
0评论
1点赞
发布博客于 2 年前

启发式面向对象设计(上)

前一阵子断断续续读完了一本老书《Object-Oriented Design Heuristics》,中文名被译作《面向对象沉思录》。虽然是一本老书,但里面的一些观点对我真的是很新奇,比如对象的动态语义、类之间的关系、关系的拓扑结构、对象树与编译器中抽象语法树的相似等,总而言之非常值得一读。1.面向对象的积木:类与对象面向对象范式使用类和对象的概念,作为分析、设计、实现的一致性模型。1.1...
原创
1评论
1点赞
发布博客于 2 年前

我的2018年总结

转眼又是一年,2018年也要离我们远去。最近半年没有怎么更新博客,落笔有些生疏,但其实一直都零星地写一些。只不过写作时间碎片化,导致好多文章半途而废。趁着这年底最后的几天,赶紧好好总结一下这充实的一年。以下是前几年的总结,记录着自己成长的轨迹:我的2015技术学习流水账:https://blog.csdn.net/dc_726/article/details/50437464春夏秋冬又一年:...
原创
0评论
7点赞
发布博客于 3 年前

那些年我错过的Java

最近在看面向对象设计的书,有了一些新的感悟。于是周末闲来无事,想写个小东西练练手。最近一直用Python,所以想回归一下更面向对象、更“静态”一些的Java。正研究怎么升级到Java 9尝尝鲜,结果发现再有80天Java 11都要发布了!真是山中方一日,世上已千年。才不关注Java没多久,已经快成版本帝了。索性直接上了Java 10,把最近落下的都补上。在这个夏天,补上那些年我错过的Java。...
原创
0评论
0点赞
发布博客于 3 年前

当我通勤时我该读什么

今年夏天房子到期后搬出了西雅图市区,从此开始了通勤上下班的生活。可能因为公交不太拥挤的缘故,在车上经常能看见捧着书读的人,有的还是厚厚的精装书。坐的每一趟车上平均都会有三到五个,甚至还有没有座位站着也要读书的。本以为亚马逊的Kindle会更为流行,结果好像很少见到,没想到实体书还如此顽强地生存着。于是信箱既然读书氛围这么好,我还一直有座位,那我也来读点什么吧。但以前晚上读的书有些比较费脑,感觉不是...
原创
6评论
0点赞
发布博客于 3 年前

优雅的对象

最近一口气读完了二百多页的《Elegant Objects》。可能因为整理自博客所以排版一般,而且才二百多页定价却40多刀。但读过之后发现超值,甚至还想去买第二卷。作者观点大多比较激进,对自己的理念异常坚定,所以经常使用诸如“绝对不要使用XXX”、“记住XXX,就这样,句号”。但作者绝不故弄玄虚,在批判之后,一定会给出自己的建议和代码示例。除去个别章节个人觉得很有争议,大部分内容读过之后都是很震撼...
原创
3评论
0点赞
发布博客于 3 年前

在GitHub上轻松搭建博客

从2011年开始正式定期地写文章,最开始在Google AppEngine搭建了Wordpress,几个月后又将文章都转移到了CSDN。时间飞逝,一看自己的历史文章列表发现都快七年整了。CSDN也在进步,美观方面加了各种皮肤,功能方面支持了Markdown。用得时间长了也觉得有很不方便的地方,可能也是因为一直以来的需求比较低,本地写好后能发表就行。最近偶然间在知乎上看到一篇对CSDN博客系统的吐槽...
原创
3评论
1点赞
发布博客于 3 年前

Haskell带你玩转函数

函数,再简单不过的概念。不管是什么范式的编程语言,都离不开用函数来表达逻辑。而函数式编程,当然核心就是函数。但函数式编程中的函数与其他语言有什么区别呢?本节都带着大家领略一下Haskell中强大的函数。这也是我们最应该从Haskell中学习,如果你觉得Haskell或其他函数式语言中的其他概念都太复杂太学术,那函数就是你至少应该从中收益的。再回到日常项目的非函数式语言时,学会领悟如何识别概念、分析...
原创
4评论
1点赞
发布博客于 3 年前

程序员的数学修养

1.什么是数学按照维基百科上的解释,数学没有准确的概念,它可以笼统地分为纯数学和应用数学。纯数学研究数量(Quantity)、结构(Structure)、空间(Space)、变化(Change),使用各种符号找寻规律,将各种猜想形式化,并证明其真伪。数学的基础包括了:数理逻辑、集合论、范畴论、计算理论。数量主要就是数字系统的建立,结构涉及组合、数论、图论、群论、代数等,空间涉及几何、差...
原创
4评论
5点赞
发布博客于 3 年前

程序员的理想桌面

最近搬家换了新公寓,地方大了一些,配了一个书桌,于是又开始折腾起了自己的开发环境。之前近一年的时间,连个书桌都没有,基本上处于晚上在床上看看书,白天工作时间有空就整理一下。但经常忙起来就搁浅了,所以写文章的时间也少了不少。现在准备重新弄好自己的环境,继续奋笔疾书:)1.显示器关于屏幕大小和分辨率着实研究(纠结)了一段时间。从便宜的低分辨率32寸,到宽屏34寸,再到4K高分辨率的27寸。...
原创
26评论
2点赞
发布博客于 3 年前

X的奇幻之旅

顺应之前《程序员如何学数学》的指导思想,买了不少比较轻松的数学科普书,《The Joy of X》就是其中之一。闲来无事随手拿起,没想到却基本读完了。看似不起眼的一本小书,内容的编排、文笔的轻松令人叹为观止。有的章节让人觉得精妙无比,有的章节又扣人心悬。本文就简单地加以整理,稍微打乱了原书的顺序,按照逻辑关系重新组织,希望能让更多的人发现这本好书。1.数字1.1 自然数:上帝的...
原创
0评论
1点赞
发布博客于 3 年前

编程这件小事(续)

经常听人(大部分时候是领导:)说的一句话就是写代码简单,业务/设计才是最重要、最值钱的。个人一直不以为然,这种思想的存在当然肯定是有道理。本文的目的也不是要说代码才是最重要的,那无异于走入了另一个极端。这里只是想说:除非把设计做的非常细致,甚至达到了“能运行”的伪代码的级别,否则我们真的没有资格说码代码很简单,因为它确实不简单。随着能力和级别的提升,我们经常被告知要着眼于更大的方面、更高的层次,这...
原创
4评论
7点赞
发布博客于 3 年前

软件开发复杂度分析

1.软件开发的本质软件开发的首要难题是什么?需求的收集?技术的选型?项目管理?都没错,但用一个词来总结那就是:复杂度!《Code Complete》中引用了Brooks(没错,就是写出了著名的《人月神话》的那位)论文《No Silver Bullets: Essence and Accidents of Software Engi- neering》里对软件开发复杂度的阐述,按照亚里士多德的哲
原创
2评论
0点赞
发布博客于 3 年前

编程这件小事

大家都知道编程很复杂,工作流程包含需求分析、架构设计、代码实现、测试发布等。每一步又都包含了很多学问,比如架构设计要考虑正确性、扩展性、安全、性能等,如果是分布式系统则还要考虑伸缩性、健壮性等等。这样大的一个主题,那本文为什么说编程是一件小事呢?因为要想一下说清楚一个学科是不可能的,大的方面我们暂且不提。凡事都是从一点一滴做起来的,本文就说说编程中最最微小的细节。只谈谈编程中最小的三个方面:编辑、
原创
0评论
2点赞
发布博客于 3 年前

Vim终极指南:所思即所得

关于开发工具方面的书,有两本获得了超高的评价,一本是《Pro Git》,另一本就是本文的主要参考《Practical Vim》,副标题Edit Text at the Speed of Thought更为形象生动——以思考的速度去编辑。这本书中包含了一百多个非常实用的Vim使用技巧,不管你是已经使用Vim多少年的专家,相信都能从中获取新的养分。推荐大家在读完本文后进一步去读一下这本书进行深入学习。
原创
2评论
6点赞
发布博客于 3 年前

对2018的展望

之前写过一篇《我的2015技术学习流水账》,最近两年因为读研的缘故导致职场的空白期,所以就不做总结(关于读研所学的总结可以参考之前的文章《北美CS求学找工指南》),而是展望一下即将到来的2018年。本文提到的资料书籍都可在《高分编程佳作推荐》中找到,都是高分好书。1.两条战线如果从实习的那年算起,2018年将是进入职场的第十个年头。从二十二岁入行到已经三十有二,可谓感慨良多。为此,分两条主线进行展望
原创
12评论
9点赞
发布博客于 3 年前

Python+Vim:天作之合

1.与Vim的缘分7年的Java开发生涯,一年半Java和Python混合的研究生学习,到现在最近全职Python开发,不知不觉已经半年没碰Java了。从2013年开始从Eclipse转到Intellij,完全习惯了用JetBrain的产品做各种语言的IDE。现在Python开发也不例外,依旧沿用Intellij IDEA外加Python插件。虽然一直用Intellij这种“重型”IDE,但文本编辑
原创
2评论
5点赞
发布博客于 4 年前

设计模式沉思录

最近在读一本超高分的编程语言书《Fluent Python》,网评的高分绝对实至名归。这本书引起了两方面的反思:其一是语言学习方面,Fluent用得非常恰当,流利二字反映出我们在学习任何一门新语言时(不管是编程语言还是自然语言),都试图用旧的(母语的)思维去“扭曲”它而没有做到真正的地道和流利,关于这一方面会单独写一篇关于Python学习的文章;其二就是关于设计模式方面的反思,为什么会有设计模式,设
原创
2评论
1点赞
发布博客于 4 年前

高分编程佳作推荐

编程方面书籍的Top 10榜单大家可能都已经烂熟于心,TAOCP、GoF、CLRS、SICP、《The C Programming Language》、《Clean Code》、《Refactoring》、《Code Complete》、人月神话、龙书等等,这些都是经过了时间考验、需要反复阅读的经典。本文不谈这些人人皆知的经典著作,而是给大家推荐一下比较新的、网评非常好的“新经典”,如果前面那些都已
原创
2评论
2点赞
发布博客于 4 年前

谈技术资料的阅读方法

作为一名程序员,有几种获取知识的渠道,比如本文将要讨论的技术书籍、开源代码、学术论文。这些可能都不是什么秘密,但每个人都有不同的方式和习惯,也就对应有不同的效果和效率。本文就分享下自己这些年来的一些经验,不一定适用每个人,但也许每个人能有些小的触动和收获。1.技术书籍可能程序员都很少读书,因为这个时代就是这样的特点,读书的人在减少。大家更多地从工作日常获得知识,对于程序员来说比如CSDN、Stack
原创
4评论
9点赞
发布博客于 4 年前

AWS核心服务概览

1.Amazon Web Service应该可以说,Amazon Web Service目前是云计算领域的领头羊,其业务规模、开发水平和盈利能力在业界内都是首屈一指的。从本科毕业离开学校就一直做Java后端,后来又接触到大型的SOA组件和中间件,现在读研毕业后有幸加入到了AWS开发团队,真是做梦都没想到。在异常复杂的系统、大量资料面前,不敢懈怠,抓住这个学习的好机会学习一下AWS。当然,一来因为刚入
原创
4评论
10点赞
发布博客于 4 年前

程序员的八重境界

看到一篇有趣的文章The Eight Levels of Programmers。以前似乎看过不少这种程序员的多少个级别、境界,但这篇语言很风趣,而且分类比较细化,让人觉得挺合情合理、无法反驳的。绝大部分人想成为一名优秀程序员的人,通过努力可以避免1,因为在编程上的追求避开了2,最终可能都停留在4或5。但努力追寻是没有错的,不然没有梦想和咸鱼有什么分别:)。注意一点,作者并没有无脑地批判谁,并没有说
翻译
36评论
44点赞
发布博客于 4 年前

当你编码时你在做什么:谈编程的本质(二)可爱的树

憋了好久的一篇,主题有点大一直没有写完,中间隔了很长时间现在已经有点捡不起来了,索性先发出来吧。至少个人觉得,完成的部分还是总结了一些有用的东西。关于Tree之上的属性、递归算法等,只能等状态回来了再补充了。 I think that I shall never see A poem lovely as a tree. Poems are made by fools like me
原创
0评论
2点赞
发布博客于 4 年前

程序员如何学数学

最近在找一些传统离散数学以外的数学书,想从其他角度补习一下计算机科学相关的数学知识,偶然间就看到一些人都推荐了这篇文章Math For Programmers,通读了一遍果然不错。但文章有点长,所以没逐字逐句地翻译,只是对每个部分做一下总结,并标注了一些写得很不错的地方。非常难能可贵地是,作者并没有像老师或者大牛一样说教或者“炫技”,而是一直在强调两点:兴趣热情和解决问题的直觉。不管通篇作者说了多少
翻译
6评论
10点赞
发布博客于 4 年前

北美CS求学找工指南

这篇文章主要谈谈来美求学工作这一路的点点滴滴,因为之前留言中不少同学对这方面内容比较感兴趣,有些已经在准备,有些还在犹豫,希望本文能对大家有些许帮助。因为来美的途径也有不少,有上学、有投资、有通过国内公司transfer过来,所以这里只能谈谈最了解的求学工作这条路吧。下面是之前写过的一些留学生活方面的文章,按照时间顺序排列:而立之年说离别入学一月谈春夏秋冬又一年毕业了,开始新的生活!关于课
原创
25评论
31点赞
发布博客于 4 年前

毕业了,开始新的生活!

转眼间就毕业了,短短的18个月过得真快!因为一直忙于上课找工作,所以好久没发文章了。现在已经重新开始上班一个月了,渐渐安稳了下来。开始适应新生活,也重新开始走自己的学习节奏。希望渐渐能多写一些技术文章,继续学习进步!这篇“回归”的文章就先简要总结一下这一年半的经历吧,也算是给过去的生活画上个句号。1.研究生学习总结读研期间最骄傲的三件事儿就是:读了一所不算很有名但是性价比很高的学校,选了很多很好的课
原创
103评论
146点赞
发布博客于 4 年前

当你编码时你在做什么:谈编程的本质(一)状态机

当你编码时你在做什么:谈编程的本质(一)状态机1.State Machine这学期学习了两门有意思的课,Theory of Computation和Distributed System,一低一高完全两个层次上的分支,却意外地发现两者在理论方面的重叠——那就是状态机。在Theory of Computation中,DFA、NFA、Turing Machine都是非常经典的State Machine,而
原创
8评论
10点赞
发布博客于 4 年前

当你编码时你在做什么:谈编程的本质(零)

当你编码时你在做什么:谈编程的本质(零)编码时间也不算短了,一直想写这么一篇文章,但苦于知识面和功力不够。经过了一年的读研学习,终于对什么是计算、什么是编程的本质有了些领悟。于是断断续续花了几天时间,斗胆提笔来谈一谈自己的理解。写着写着就越写越多,于是干脆就写成一个系列吧。还没搞懂的就先放下,等搞懂了写好了再发,用这个系列先占个位置,督促自己不断地深入学习,不要停歇。目前已经想到的比较重要的内容有:
原创
3评论
9点赞
发布博客于 4 年前

如何突破编程学习的瓶颈期

如何突破编程学习的瓶颈期1.谁未曾彷徨对于每个学习编程的工程师来说,肯定都会遇到或长或短的瓶颈期。基本症状就是:不知道该学什么、该怎样继续提高。看什么都能上手弄一弄,但好像又什么都不精通。本文谈谈笔者在不到十年的整个职业生涯中碰到的三次瓶颈期,以及是如何克服的。方法因人而异,本文只供大家参考借鉴。2.真实的项目是什么样这是本人在本科学习时还未实习前最好奇的一点。因为学了C++/JAVA等专业课,尤其
原创
4评论
12点赞
发布博客于 5 年前

春夏秋冬又一年

春夏秋冬又一年春夏秋冬,一年又一年。可总有那些岁月,可能是几个月,几天甚至一瞬间,让人刻骨铭心难以忘怀的。2016就是我生命中最难忘的一年,不是几个月、几天或者一瞬间,而是满满的一年。到国外求学,学到自己想要的东西,还度过了三十岁的生日,辛苦忙碌却又非常充实而欣慰的一年。1.春:飘洋过海去求学2016最重要的一件事就是:工作了六七年后,又重新回到了校园。本科学习时的种种遗憾,终于有了机会弥补。一整年
原创
39评论
31点赞
发布博客于 5 年前

当Linux Mint遇上Thinkpad

当Linux Mint遇上Thinkpad1.再谈好工具的重要性大概两年前开始使用Linux Mint,从此无法自拔,真的太方便了!但真正进入Linux世界之前,笔者也是经历了小心翼翼在虚拟机里用Ubuntu、安装Cygwin模拟等一系列的过程,大概也有个两三年的适应之后,才真正在真机上安装Linux Mint的。安装过程出奇的简单,真后悔没早点弄个双系统。以下便是之前整理关于Linux系统安装、开
原创
5评论
0点赞
发布博客于 5 年前

Leetcode分类解析:二分查找

Leetcode分类解析:二分查找1.原始二分查找1.1 典型例题35-Search Insert Position (Medium): Given a sorted array and a target value, return the index if the target is found. If not, return the index where it would be if it w
原创
4评论
2点赞
发布博客于 5 年前

Leetcode分类解析:链表

Leetcode分类解析:链表1.分类地图按照惯例,首先来看一下链表在本系列所处的位置:基础结构(Fundamentals) 1.1 数组和链表(Array&List):插入、删除、旋转等操作。 1.2 栈和队列(Stack&Queue):栈的典型应用。 1.3 树(Tree):构建、验证、遍历、转换。 1.4 字符串(String):转换、搜索、运算。积木块(Building Bloc
原创
2评论
5点赞
发布博客于 5 年前

Linux Mint 18升级失败记

Linux Mint 18升级失败记上月末看到Linux Mint 18发布的消息,非常期待,但官方迟迟没有给出具体的升级办法,于是就没敢轻举妄动。今天看到官方终于发布升级手册了,于是简单备份了一下系统(大部分重要资料都保存在DropBox了)就开始动手升级了。结果不出所料,失败了,千小心万小心,还是没躲开这一劫……1.升级失败满心欢喜按照升级Instruction一步步来,结果在最后一步升级各种包
原创
1评论
0点赞
发布博客于 5 年前

Leetcode分类解析:组合算法

Leetcode分类解析:组合算法所谓组合算法就是指:在解决一些算法问题时,需要产生输入数据的各种组合、排列、子集、分区等等,然后逐一确认每种是不是我们要的解。从广义上来说,组合算法可以包罗万象,甚至排序、各种搜索算法都可以算进去。最近读《The Algorithm Design Manual》时了解到这种归类,上网一查,甚至有专门的书籍讲解,而且Knuth的巨著TAOCP的第四卷就叫组合算法,看来
原创
4评论
2点赞
发布博客于 5 年前

操作系统内核的绝佳学习材料——JOS

操作系统内核的绝佳学习材料——JOS前言:关于JOS和一些经验之谈这一学期的操作系统课使用的是MIT用于教学的JOS操作系统,并且StonyBrook在其基础上做了大量改动,最重要的变化就是从32位移植到了64位。因为个人之前曾系统学习过Linux 0.11内核(《操作系统内核Hack:(四)内核雏形》,实现到时钟中断部分停下了),深知自己从零开始实现内核的工作量。即便是如我个人实
原创
3评论
5点赞
发布博客于 5 年前

深入数据库理论:查询语言

深入数据库理论:查询语言“Theory is when you know everything but nothing works. Practice is when everything works but no one knows why. In our lab, theory and practice are combined: nothing works and no one knows w
原创
2评论
2点赞
发布博客于 5 年前

关于算法,那些你不知道的事

关于算法,那些你不知道的事1.算法,不止于刷题提到算法,不管是科班出身还是半路出家的程序员可能都会说上几句,算法谁没学过谁不知道啊?对于走工业界路线而非学术路线的同学来说,算法学习的最大作用也许是找工作…… 毕竟工作后,绝大多数时候都用各种成熟的类库,少有自己实现高级数据结构和算法的时候。但刚结束一学期修的算法课,上得我还真跟没学过算法似的,让我大开眼界,虽然每次课上我都听的不是很懂,但每节都期盼着
原创
6评论
5点赞
发布博客于 5 年前

Leetcode算法题分类解析:(一)总览

Leetcode算法题分类解析:(一)总览1.为何/如何刷题1.1 必要性刷题刷题,从“刷”字就能看出其中的机械性和应试性,但这就是几乎所有IT公司面试中的一环。尽管面试者可能也对这种考察方式不是很满意,可在没有更好的方式之前,这个现状会一直保持下去。我们改变不了这个现状,那就适应它吧。1.2 分类攻破为什么要这么麻烦地分类呢?照着Leetcode的题目顺序做不就好了?个人觉得分类有几个动机:一是
原创
3评论
5点赞
发布博客于 5 年前

十年之后重学C语言

十年之后重学C语言1.每个程序员都该有本翻烂的K&R1.1 多次自学,不得其法距离大学时学习C语言已有十个年头了。印象里最深的就是当时一位海归老师,在讲课时流露出对K&R的崇敬之情,以及用Hanoi塔的例子讲解递归。但当时的我还无法体会,也只是不走心的听听。那时的我还不知道K&R有多牛,递归有多重要。十年间经历了很多项目,也业余时间自学了很多东西。温习过C、自学过汇编、尝试操作系统内核。看过不少推荐
原创
10评论
9点赞
发布博客于 5 年前

CS研究生学习阶段必读书籍

CS研究生学习阶段必读书籍书单、书单、还是书单现在各种大牛推荐的书单已经太多太多了,大多包含如《Code Complete》、SICP、龙书等等经典之作,但后果就是十分雷同。因为特别经典的书的数量有限吧,多少年也出不了一本吧。所以,为了能有些新意,笔者决定推荐书单时针对特别群体或特别话题,让推荐的东西更多样性、有趣,也更有价值一些。本文就针对计算机科学专业的研究生群体,推荐一些教材和必读书籍。特别说
原创
4评论
14点赞
发布博客于 5 年前

留美CS学习的第一学期总结

留美CS学习的第一学期总结来美学习的第一学期就这么结束了!总体来说,在StonyBrook的这一学期没有辜负我的期望,有些方面甚至远超出我的预期。用受益匪浅四个字都不足以形容收获之大,夸张一点说:可能学到了许多自己可能一辈子都不会想到的东西。下面简单整理一下自己的心得和收获,有些东西也许对大家开阔思路能有些帮助。1.专业与课程特点CS专业可能是研究生专业里属得上的“累”专业了,学习压力是很大的!几乎
原创
8评论
9点赞
发布博客于 5 年前

算法学习的新阶段

算法学习的新阶段最近忙得一塌糊涂,所以根本没时间总结整理学习成果了。之前刚开学不太忙时写了几篇都没写完,因为发现面前开启了一道道大门,想系统整理的东西太多了。于是时隔快两个月,先发一篇以作记录,系统整理只能等到暑假开始时了……1.基本数据结构一开始接触到算法是在大学,具体有什么用也不清楚。但老师一般都说:算法+数据结构=程序。当时听起来觉得太重要了(确实重要,但现在知道了,程序的世界何止算法和数据结
原创
2评论
3点赞
发布博客于 5 年前

程序员修炼之路

0.前言:在路上,再上路在前言《程序员修炼之路-(0)前言:在路上, 再上路》中已经对知识体系进行了梳理,主要分为问题定义、算法与数据结构、系统平台API、编程语言实现、代码设计、测试验证等等。目前集中精力编写算法与数据结构部分,这可能也是最艰难的一部分。其他部分之前零零散散有所涉及,之后再慢慢补充。1.计算机数学离散数学与具体数学。2.算法分析设计对于这一部分的内容编排,主要以《算法设计与分析基础
原创
6评论
9点赞
发布博客于 5 年前

入学一月谈

不觉间已经来美国快一个月了,感觉还像一场梦。从以前熟悉的生活圈子,每天起来朝九晚五地上班下班,回家吃饭看电视看书,到现在每天一睁眼从陌生的环境醒来,点点滴滴,要学习的很多。来了之后的第一大问题就是时差了。在飞机上凌晨三点多才睡到,早上七点又醒了。然后下午四点多下飞机,其实正是纽约的凌晨。等到了宿舍,收拾行李,然后打起精神出去找吃的。最后,坚持到纽约时间的晚上九、十点再睡。实际上就相当于快两天只睡了飞
原创
23评论
20点赞
发布博客于 5 年前

Git幕后的“故事”

实验要求必读《Understanding git conceptually》,觉得确实不错,于是就简单地记录一下。作者开篇说到:仅仅记住在什么时候用什么命令是不够的,出问题只是早晚的事。只有理解了Git的工作原理,才算真正学会Git。遗憾的是大部分网上的教程都只是教你在何时使用哪个命令,然后让你去模仿。说得这么好,那就看看作者这篇教程是否把Git的工作原理讲清楚了。注意:以下1.2.1到1.2.3都
原创
2评论
2点赞
发布博客于 5 年前

而立之年说离别

明天就要正式开课了!从大四实习离开校园,到今天重返,阔别了七年半。而立之年飘扬过海,远离故乡,远离亲朋,心中五味杂陈、百感交集……本以为会热泪盈眶、心潮澎湃、脑中浮现各种英雄人物事迹,事实却是当我经过十五个小时的飞行,清晨六点走出肯尼迪机场,在冷风中看着还未苏醒的纽约时,我的内心异常平静。如果你很想要一样东西,你立刻就得到了,你可能会激动万分。如果你非常想做一件事,经过几年的付出和等待,时间被这样拉
原创
32评论
33点赞
发布博客于 5 年前

我的2015技术学习流水账

我的2015技术学习流水账2015年马上就要过去了,匆匆忙忙地又是一年。回头总结整理,发现这一年还挺充实的。在正常上班工作之余,学习到了不少新东西,不禁感到很欣慰!一个多月前就开始写,终于赶在2016年来临之前写完了这篇文章…… 关于本文,尽管叫做流水账,但是出于程序员条理性的“强迫症”,还是进行系统分类,分类方法参照Thoughtworks技术雷达的Tecniques、Languages & Fr
原创
15评论
7点赞
发布博客于 6 年前

Java程序员的现代RPC指南

Java程序员的现代RPC指南1.前言1.1 RPC框架简介最早接触RPC还是初学Java时,直接用Socket API传东西好麻烦。于是发现了JDK直接支持的RMI,然后就用得不亦乐乎,各种大作业里凡是涉及到分布式通信的都用RMI,真是方便。后来用上了Spring,发现Spring提供了好多Exporter,可以无侵入地将一个POJO暴露为RPC服务。接触了这么多RPC框架后,发现当时公司内部自己
原创
0评论
1点赞
发布博客于 6 年前

我对读计算机软件专业硕士的几点看法

分析得比较深刻的一篇好文,原文出处找不到了...就我自己的理解,谈谈我对读研和软件学院的看法,不妥之处一笑了之即可。  如果你有实际开发工作经验,感觉自己的水平和实力进入了一个高原期,迫切需要从理论上提高,那么计算机学院是唯一选择。因为计算机学院才能让你在理论上更上一层楼。软件学院从教学计划上就没有把你往这方面带。当然能不能更上一层楼最终还是完全取决于你自己。需要特别说明的是,工作经验并不一定等于
转载
0评论
8点赞
发布博客于 6 年前

Hadoop加速器GridGain

GridGain的Hadoop加速器像GridGain等内存网格产品(IMDG)不仅可以作为简单的缓存,加速Hadoop中MapReduce计算也是IMDG的一个亮点。这样内存计算领域又多了一种思路和选择,而不只是Spark独霸一方的局面。关于GridGain的功能介绍请参考《开源IMDG之GridGain》。1.安装Hadoop 2.7.1很早之前写过一篇《Hadoop入门(一):Hadoop伪分
原创
0评论
0点赞
发布博客于 6 年前

BDD敏捷开发入门与实战

BDD敏捷开发入门与实战1.BDD的来由2003年,Dan North首先提出了BDD的概念,并在随后开发出了JBehave框架。在Dan North博客上介绍BDD的文章中,说到了BDD的想法是从何而来。简略了解一下BDD的历史和背景,有助于我们更好地理解。1.1 TDD的困惑Dan在使用TDD敏捷实践时,时常会有很多同样的困惑萦绕脑海,这也是很多程序员敏捷实践都想知道的:where to st
原创
0评论
4点赞
发布博客于 6 年前

操作系统内核Hack:(四)内核雏形

操作系统内核Hack:(四)内核雏形在本系列的前一篇文章《操作系统内核Hack:(三)BootLoader制作》中,我们制作出了一个两阶段引导BootLoader,并进入了一个内核的空壳main函数。本文我们继续完善引导程序和内核,让内核的内容一点点充实起来。本文的代码可以参考GitHub上的MiniOS分支kernel_prototype。1.周边代码修改1.1 常量和宏提取像各个模块的内存这种常
原创
0评论
2点赞
发布博客于 6 年前

操作系统内核Hack:(三)引导程序制作

操作系统内核Hack:(三)BootLoader制作关于本文涉及到的完整源码请参考MiniOS的v1_bootloader分支。1.制作方法现在我们已经了解了关于BootLoader的一切知识,让我们开始动手做一个BootLoader吧!但真正开始之前,我们还要做出一个选择,在之前的讨论中我们曾说过,有两种学习和制作引导程序和操作系统内核的路线:1)《Orange’s:一个操作系统的实现》书中的路线
原创
0评论
3点赞
发布博客于 6 年前

操作系统内核Hack:(二)底层编程基础

操作系统内核Hack:(二)底层编程基础在《操作系统内核Hack:(一)实验环境搭建》中,我们看到了一个迷你操作系统引导程序。尽管只有不到二十行,然而要完全看懂还是需要不少底层软硬件知识的。本文的目的就是跟大家一起学习这一部分知识,本着够用就行的原则,不会完全铺开来,只要能让我们顺利走完未来的操作系统内核Hack之旅就可以了。1.开篇:“古怪”的80386如果大家跳过这一部分直接看本文后面的部分,或
原创
0评论
8点赞
发布博客于 6 年前

用Netty开发中间件:高并发性能优化

用Netty开发中间件:高并发性能优化最近在写一个后台中间件的原型,主要是做消息的分发和透传。因为要用Java实现,所以网络通信框架的第一选择当然就是Netty了,使用的是Netty 4版本。Netty果然效率很高,不用做太多努力就能达到一个比较高的tps。但使用过程中也碰到了一些问题,个人觉得都是比较经典而在网上又不太容易查找到相关资料的问题,所以在此总结一下。1.Context Switch过高
原创
24评论
17点赞
发布博客于 6 年前

C实战:项目构建Make,Automake,CMake

C实战:项目构建Make,Automake,CMake在本系列文章《C实战:强大的程序调试工具GDB》中我们简要学习了流行的调试工具GDB的使用方法。本文继续“C实战”的主题,对同样非常流行的构建工具Make的用法和原理一探究竟,并顺便看一下一些高级衍生产品。1.Make基础首先我们编写一个简单的C项目,以此项目在实战中学习Make的相关知识。更全面的介绍请参考官方手册。cdai@vm /syspa
原创
0评论
3点赞
发布博客于 6 年前

分布式一致性协议Raft原理与实例

分布式一致性协议Raft原理与实例1.Raft协议1.1 Raft简介Raft是由Stanford提出的一种更易理解的一致性算法,意在取代目前广为使用的Paxos算法。目前,在各种主流语言中都有了一些开源实现,比如本文中将使用的基于JGroups的Raft协议实现。关于Raft的原理,强烈推荐动画版Raft讲解。1.2 Raft原理在Raft中,每个结点会处于下面三种状态中的一种:follower
原创
24评论
4点赞
发布博客于 6 年前

Redis Cluster架构优化

Redis Cluster架构优化在《全面剖析Redis Cluster原理和应用》中,我们已经详细剖析了现阶段Redis Cluster的缺点:无中心化架构 Gossip消息的开销不停机升级困难无法根据统计区分冷热数据客户端的挑战 Cluster协议支持连接和路由表的维护开销MultiOp和Pipeline支持有限Redis实现问题 不能自动发现不能自动Resharding
原创
14评论
3点赞
发布博客于 6 年前

全面剖析Redis Cluster原理和应用

全面剖析Redis Cluster原理和应用1.Redis Cluster总览1.1 设计原则和初衷在官方文档Cluster Spec中,作者详细介绍了Redis集群为什么要设计成现在的样子。最核心的目标有三个:性能:这是Redis赖以生存的看家本领,增加集群功能后当然不能对性能产生太大影响,所以Redis采取了P2P而非Proxy方式、异步复制、客户端重定向等设计,而牺牲了部分的一致性、使用性。
原创
39评论
29点赞
发布博客于 6 年前

操作系统内核Hack:(一)实验环境搭建

操作系统内核Hack:(一)实验环境搭建三四年前,心血来潮,入手《Orange’s:一个操作系统的实现》学习操作系统内核,还配套买了王爽的《汇编语言(第二版)》和《80X86汇编语言程序设计教程》,虽然Orang’s只看了不到三分之一,但当时还是很认真的,练习也做了不少。唯一遗憾的就是没有留下文字记录,导致现在忘得差不多一干二净了,后悔不已!如今想再捡起来,弥补当时的懒惰,虽然困难重重,但这么优秀的
原创
3评论
4点赞
发布博客于 6 年前

Docker新手入门:基本用法

Docker新手入门:基本用法1.Docker简介1.1 第一本Docker书工作中不断碰到Docker,今天终于算是正式开始学习了。在挑选系统学习Docker以及虚拟化技术的书籍时还碰到了不少麻烦,主要就是没有特别经典的书!Docker的《第一版Docker书》和《Docker技术入门与实战》普遍评价不高,而《Docker开发实践》和《Dockeru源码分析》又是2015年最近才出的,评价不是很多
原创
6评论
10点赞
发布博客于 6 年前

Jedis分片Sentinel连接池实验

Jedis分片Sentinel连接池实验1.起因众所周知,Redis官方HA工具Sentinel已经问世很久了,但令人费解的是,Jedis官方却迟迟没有更新它的连接池。到目前Maven库中最新的2.7.3版本为止,都只能要么使用分片连接池,要么使用不分片的Sentinel连接池。如果既进行了Sharding,又对每组的主从实例配置Sentinel进行监控,怎么办?答案是只能自己开发了,晕!还好万能的
原创
11评论
4点赞
发布博客于 6 年前

Netty 4源码解析:请求处理

Netty 4源码解析:请求处理通过之前《Netty 4源码解析:服务端启动》的分析,我们知道在最前端“扛压力”的是NioEventLoop.run()方法。我们指定创建出的NioServerSocketChannel就是注册到了NioEventLoop中的Selector上。所以我们继续顺藤摸瓜,看看服务端启动完成后,Netty是如何处理每个请求的。1.MainReactor1.1 事件轮询之前我
原创
3评论
0点赞
发布博客于 6 年前

用Netty开发中间件:网络编程基础

跟Netty 4学网络编程《Netty权威指南》在网上的评价不是很高,尤其是第一版,第二版能稍好些?入手后快速翻看了大半本,不免还是想对《Netty权威指南(第二版)》吐槽一下:前半本的代码排版太糟糕了,简直就是直接打印Word的版式似的。源码解析部分的条理性和代码排版好多了,感觉比其他部分的质量高多了。如果你是初学者可能会感觉很详细,几乎每部分都会来一套客户端和服务端的Demo,如果你不是入门
原创
4评论
2点赞
发布博客于 6 年前

Netty 4源码解析:服务端启动

Netty 4源码解析:服务端启动1.基础知识1.1 Netty 4示例因为Netty 5还处于测试版,所以选择了目前比较稳定的Netty 4作为学习对象。而且5.0的变化也不像4.0这么大,好多网上的例子都已经过时了。 <dependency> <groupId>io.netty</groupId> <artifactId>netty-
原创
1评论
0点赞
发布博客于 6 年前

Redis监控工具,命令和调优

Redis监控工具,命令和调优1.图形化监控因为要对Redis做性能测试,发现了GitHub上有个python写的RedisLive监控工具评价不错。结果鼓捣了半天,最后发现其主页中引用了Google的jsapi脚本,必须在线连接谷歌的服务,Stackoverflow上说把js脚本下载到本地也没法解决问题,坑爹!正要放弃时发现了一个从RedisLive fork出去的项目redis-monitor,
原创
10评论
6点赞
发布博客于 6 年前

高效程序员的狂暴之路

不觉间已经工作六年,回想第一天实习的场景历历在目、恍若昨日。六年已足以令许多人转管理、转产品、转测试、转行,也一定有人还在坚守着编码,只因热爱。遇到过形形色色的经理、架构师、运维、性能工程师等等,还是觉得写代码的才是最厉害的!在这里分享一些这些年来修习到的个人心得。也许并不适用于其他人,但对于我却都是最珍贵的“宝藏”。也谨以此文纪念在代码堆里度过的青春~ 看到这些点点滴滴的收获,就会感到所有逝去的光
原创
9评论
9点赞
发布博客于 6 年前

豌豆夹Redis解决方案Codis源码剖析:Dashboard

豆瓣Redis解决方案Codis源码剖析:Dashboard1.不只是Dashboard虽然名字叫Dashboard,但它在Codis中的作用却不可小觑。它不仅仅是Dashboard管理页面,更重要的是,它负责监控和指挥各个Proxy的负载均衡(数据分布和迁移)。并且,所有API都以RESTFul接口的形式对外提供,供Proxy和codis-config(Codis的命令行工具)调用。下面就来看一下
原创
14评论
1点赞
发布博客于 6 年前

负载均衡LVS(DR模式)安装实战

1.编译安装ipvsadm首先从LVS官网下载tarball,解压后make && make install即可。要注意的是LVS的依赖有:popt-static、libnl、kernel。如果yum源里有就直接安装,如果没有就自行下载,但一定要对应上已有软件如popt或Linux内核的版本。$ tar -xzvf ipvsadm-1.26.tar.gz$ cd ipvsadm-1.26$ ma
原创
0评论
0点赞
发布博客于 6 年前

豌豆夹Redis解决方案Codis安装使用

豆瓣Redis解决方案Codis安装使用1.安装1.1 Golang环境Golang的安装非常简单,因为官网被墙,可以从国内镜像如studygolang.com下载。[root@vm root]$ tar -C /usr/local -zxf go1.4.2.linux-amd64.tar.gz[root@vm root]$ vim /etc/profileexport GOROOT=/usr/
原创
6评论
3点赞
发布博客于 6 年前

六星经典CSAPP-笔记(12)并发编程(上)

六星经典CSAPP-笔记(12)并发编程(上)1.并发(Concurrency)我们经常在不知不觉间就说到或使用并发,但从未深入思考并发。我们经常能“遇见”并发,因为并发不仅仅是操作系统内核的“绝招”,它也是应用开发中必不可少的技巧:访问慢I/O设备:就像当应用程序等待I/O中的数据时内核会切换运行其他进程一样,我们的应用也可以用类似的方式,将I/O请求与其他工作重叠从而挖掘并发的潜能。推迟工作
原创
0评论
0点赞
发布博客于 6 年前

豌豆夹Redis解决方案Codis源码剖析:Proxy代理

豆瓣Redis解决方案Codis源码剖析:Proxy代理1.预备知识1.1 CodisCodis就不详细说了,摘抄一下GitHub上的一些项目描述: Codis is a proxy based high performance Redis cluster solution written in Go/C, an alternative to Twemproxy. It supports mul
原创
27评论
3点赞
发布博客于 6 年前

序列化战争:主流序列化框架Benchmark

序列化战争:主流序列化框架BenchmarkGitHub上有这样一个关于序列化的Benchmark,被好多文章引用。但这个项目考虑到完整性,代码有些复杂。为了个人学习,自己实现了个简单的Benchmark测试类,也算是总结一下当今主流序列化框架的用法。1.序列化的战争按照序列化后的数据格式,主流的序列化框架主要可以分为四大类:JSON、二进制、XML、RPC。从更高层次来说,JSON和XML都可以算
原创
0评论
0点赞
发布博客于 6 年前

Java程序员的Golang入门指南(下)

Java程序员的Golang入门指南(下)4.高级特性上面介绍的只是Golang的基本语法和特性,尽管像控制语句的条件不用圆括号、函数多返回值、switch-case默认break、函数闭包、集合切片等特性相比Java的确提高了开发效率,但这些在其他语言中也都有,并不是Golang能真正吸引人的地方。不仅是Golang,我们学习任何语言当然都是从基本语法特性着手,但学习时要不断地问自己:使这门语言区
原创
0评论
2点赞
发布博客于 6 年前

用Netty解析Redis网络协议

用Netty解析Redis网络协议根据Redis官方文档的介绍,学习了一下Redis网络通信协议。然后偶然在GitHub上发现了个用Netty实现的Redis服务器,很有趣,于是就动手实现了一下!1.RESP协议Redis的客户端与服务端采用一种叫做 RESP(REdis Serialization Protocol)的网络通信协议交换数据。RESP的设计权衡了实现简单、解析快速、人类可读这三个因素
原创
5评论
6点赞
发布博客于 6 年前

Java程序员的Golang入门指南(上)

Java程序员的Golang入门指南1.序言Golang作为一门出身名门望族的编程语言新星,像豆瓣的Redis平台Codis、类Evernote的云笔记leanote等。1.1 为什么要学习如果有人说X语言比Y语言好,两方的支持者经常会激烈地争吵。如果你是某种语言老手,你就是那门语言的“传道者”,下意识地会保护它。无论承认与否,你都已被困在一个隧道里,你看到的完全是局限的。《肖申克的救赎》对此有很好
原创
2评论
10点赞
发布博客于 6 年前

Apache Curator入门实战

Apache Curator入门实战Curator是Netflix公司开源的一个Zookeeper客户端,与Zookeeper提供的原生客户端相比,Curator的抽象层次更高,简化了Zookeeper客户端的开发量。1.Zookeeper安装部署Zookeeper的部署很简单,如果已经有Java运行环境的话,下载tarball解压后即可运行。[root@vm Temp]$ wget http://
原创
5评论
11点赞
发布博客于 6 年前

C实战:强大的程序调试工具GDB

C实战:强大的程序调试工具GDB1.基本调试这里只列举最最常用的GDB命令。1.1 启动GDBgdb program:准备调试程序。也可以直接进入gdb,再通过file命令加载。1.2 添加断点b function:为函数设置断点。b是break的缩写,除了函数名,还可以是地址、当前执行处的+/-偏移等。1.3 运行程序run args:开始运行程序,run后面可以加程序需要的参数,就像在命令行正常
原创
0评论
7点赞
发布博客于 6 年前

CSAPP缓冲区溢出攻击实验(下)

CSAPP缓冲区溢出实验(下)3.3 Level 2: 爆竹实验要求这一个Level的难度陡然提升,我们要让getbuf()返回到bang()而非test(),并且在执行bang()之前将global_value的值修改为cookie。因为全局变量与代码不在一个段中,所以我们不能让缓冲区一直溢出到.bss段(因为global_value初始化为0,所以它会被放在.bss而非.data段以节省空间)覆
原创
5评论
3点赞
发布博客于 6 年前

程序员的自我修养:(1)目标文件

程序员的自我修养:(1)目标文件1.目标文件1.1 编译与链接在使用像Visual Studio或Qt Creator等IDE时,通常有一个叫做“构建”的按钮。当编辑完成要运行和测试时点一下它,程序就能跑起来了,所以我们很少关心编译和链接。其实,编译和链接合并在一起就称为 构建(Build)。简单的一次按键,实际背后却是异常复杂的过程:预编译(Preprocessing)编译(Compilati
原创
2评论
4点赞
发布博客于 6 年前