自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

西代零零发

既然选择远方,便只顾风雨兼程

  • 博客(424)
  • 收藏
  • 关注

原创 程序员修炼之路

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

2016-02-10 11:02:35 6875 6

原创 内存计算技术资料整理

先来看一下一张技术的全景图,其中涉及内存计算的技术标成红色。 1)事务处理:主要分为Cache(Memcached, Redis, GemFire)、RDBMS、NewSQL(以VoltDB为首的)三部分,缓存和NewSQL数据库是关注的重点。2)流式处理:Storm本身只是计算的框架,而Spark-Streaming才实现了内存计算式的流处理。3)分析阶段的对比:Ø  通用处理:MapReduc

2014-12-13 14:22:32 15321 2

原创 Data Lake学习资料推荐

Data Lake学习资料推荐整体介绍和产品《Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics》《The Snowflake Elastic Data Warehouse》数据存储:表、文件列存《Delta Lake: High-Performance ACID Table Storage over Cloud Object Stor

2022-03-01 04:02:14 392

原创 Hyperspace初体验:Delta Lake表索引

Hyperspace初体验:Delta Lake表索引1.简介Hyperspace是一个由微软开发的开源的数据湖索引子系统。1.1 特性提供了一套定义完好的索引管理API (4.1 建索引, 5.2 增量刷新)为用户提供更大的自由度,毕竟用户是最了解自己用例的人不尝试去解决所有问题,有些问题没有固定答案独立于数据和元数据,索引有自己的元数据/日志(4.2 Hyperspace日志)能感知到底层数据的版本,同数据一起“时间旅行” (5.1 Time Travel支持)因为

2021-12-22 03:43:03 853

原创 湖中小屋:从数据仓库到数据湖

湖中小屋:从数据仓库到数据湖昨天读完了一篇不错的论文《Lakehouse: A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics》。虽然篇幅不长,而且也没涉及到具体的理论和技术实现,但可以当作是对当前比较火的数据湖领域知识的导读。论文标题也比较有趣,Data Warehouse + Data Lake = Lakehouse。有点文字游戏,但非常契合文章主旨:是否能够融合数据仓库和数据湖的

2021-10-27 06:59:23 603

原创 SQL语句的确定性

SQL语句的确定性1.确定性的用途SQL语句的确定性,从字面上理解就是执行一条语句始终有同样的结果。根据语句类型的不同(DQL/DML/DDL),这里的结果指的可能是查询结果,也可能是副作用,比如对数据库状态的修改。在思考确定性的准确定义之前,我们先看下面三个判断SQL语句确定性的用途:数据复制(Replication):分布式数据库要保持主副本和从副本之间的数据一致性,两种常见的策略是基于语句和基于行数据。前者只发送要执行的语句,比如DML的INSERT/UPDATE,这就要保证这条语句具有确定性

2021-10-19 04:02:33 388

原创 系统设计之数据模型

最近终于有时间,拜读了《Designing Data-Intensive Applications》的第一部分。这本书的豆瓣评分高达9.1,被奉为系统设计面试的“圣经”。个人觉得第二章逻辑数据模型和第三章物理存储实现最为经典,这也是这篇读书笔记内容的主要来源。数据模型(或数据结构)可能是软件开发中最重要的部分,因为它不仅影响如何写代码,更重要的是它会影响我们如何思考要解决的问题。著名的《人月神话》里有专门一章讲述数据结构的重要性。其中有句让我印象深刻的话:“”。一个典型的应用程序可能包含很多层次,每一个

2021-09-24 07:30:04 1553 4

原创 分布式查询引擎Presto

分布式查询引擎Presto本文内容主要来自《Presto: The Definitive Guide - SQL at Any Scale, on Any Storage, in Any Environment》一书。1.Presto的历史2008年,Facebook开源了Hive,之后成了Apache的顶级项目。Hive在Facebook被广泛使用来分析它巨大Hadoop集群中HDFS里的数据。然而,Hive的性能不足以支撑交互式数据分析的场景。2012年,Facebook的Hive数据仓库已经达到

2021-09-21 03:10:32 458

原创 深入Elasticsearch:索引的创建

为了深入学习Elasticsearch和Lucene,本文从Elasticsearch索引的创建过程入手,对Refresh和Flush两个重要的API做一个小实验。从而理解Elasticsearch在接收到一个文档后,是如何对其进行索引的。了解了整个流程,后续我们再深入学习Lucene索引的内存数据结构和磁盘文件格式。注:本文使用Elasticsearch和Kibana 7.10.2。1.实验环境1.1 创建索引创建索引lucene-learning,设置shard数为1,关闭replica,同时关闭

2021-06-02 06:26:26 861

原创 为什么要学习排序算法?

为什么要学习排序算法?根据统计,早起大型机CPU资源的四分之一都花在了数据排序上面。排序算法作为最基础的算法,各种操作系统、编程语言都提供了内置的实现。既然排序实现随处可见,我们为什么还要自己动手实现呢?虽然经典算法要动手写写加深印象的道理都懂,但直到最近才发现,每种排序算法里都“暗藏玄机”。排序算法看似简单,其实不同的算法中蕴涵着经典的算法策略。通过熟练掌握排序算法,就可以掌握基本的算法设计思想,包括暴力枚举法、时间空间置换、子问题的分治以及随机化。1.选择排序:暴力搜索1.1 “暴力”的定义按

2021-04-30 08:21:54 2057

原创 Redis之父的“退役”感言

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

2020-07-02 01:59:59 2272 3

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

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

2020-06-02 13:11:43 791 2

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

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

2020-05-29 14:32:27 935

原创 三本有趣的科普书

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

2020-05-29 14:31:28 532

原创 数据库引擎学习导读

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

2020-03-28 11:36:44 615 2

原创 迟来的2019年总结

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

2020-01-20 09:54:05 594 1

原创 GitHub Action开启自动化

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

2019-11-16 14:24:17 5399

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

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

2019-10-28 03:53:15 1261

原创 深入学习关系理论

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

2019-10-24 14:02:00 846

原创 疯狂的罗素

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

2019-10-13 07:25:27 1062

原创 超越离散数学

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

2019-10-13 06:34:48 671

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

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

2019-10-12 13:48:20 1390

原创 编译器中的语义分析

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

2019-08-27 13:34:35 2405

原创 逻辑的引擎

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

2019-07-20 13:14:19 1010 1

原创 如何高效地做设计评审

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

2019-07-17 13:46:46 1492

原创 Linux Mint从HDD升级到SSD

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

2019-07-16 13:52:42 782 2

原创 有品位的程序员

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

2019-07-01 04:36:44 594

原创 ElasticSearch近实时搜索的实现

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

2019-06-30 03:38:15 3686

原创 AWS开源Elasticsearch插件

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

2019-03-12 07:16:24 2463

原创 2019想要完善的几点

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

2019-02-25 14:08:00 559

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

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

2019-01-02 15:13:12 854 1

原创 我的2018年总结

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

2018-12-31 04:05:39 1745

原创 那些年我错过的Java

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

2018-08-26 06:34:20 847

原创 当我通勤时我该读什么

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

2018-08-24 12:22:14 965 6

原创 优雅的对象

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

2018-07-16 08:38:19 1078 3

原创 在GitHub上轻松搭建博客

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

2018-07-16 01:43:05 927 3

原创 Haskell带你玩转函数

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

2018-07-01 03:15:10 4041 4

原创 程序员的数学修养

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

2018-06-10 07:46:17 1944 4

原创 程序员的理想桌面

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

2018-06-04 01:13:41 11407 26

原创 X的奇幻之旅

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

2018-06-03 07:53:07 1912

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除