0%

在进行Linux网络编程开发的时候,免不了会涉及到IO模型的讨论。《Unix网络编程》一书中提到的几种IO模型,我们在开发过程中,讨论最多的应该就是三种: 阻塞IO非阻塞IO以及异步IO

本文试图理清楚几种IO模型的根本性区别,同时分析了为什么在Linux网络编程中最好要用非阻塞式IO。

阅读全文 »

在客户端开发中,往往会有一些功能对时间要求比较严格,客户端需要获取到当前最准确的时间。但由于客户端环境多种多样,我们无法保证直接在客户端设备上获取到的时间是最准确的时间。
对于某些问题设备来说,设备时间与比当前实际的时间差了几个小时,甚至几天的情况都存在。倘若某功能依赖于当前时间,而客户端所提供的时间不准,就往往会给客户造成一些困扰。

那么,客户端如何能够获取到当前最准确的时间呢?

阅读全文 »

muduo陈硕大神个人开发的C++的TCP网络编程库。muduo基于Reactor模式实现。Reactor模式也是目前大多数Linux端高性能网络编程框架和网络应用所选择的主要架构,例如内存数据库Redis和Java的Netty库等。

陈硕的《Linux多线程服务器端编程》一书对muduo整个架构进行了非常详尽的介绍和分析,可以说是学习muduo源码和设计理念最好的资料了。这本书也非常推荐大家购买阅读,感觉是后台开发的必读书目了。

而本文则主要是从源码角度辅助理解整个muduo的实现,同时也姑且算是对muduo的一个小小的补充。

同时我也提供了一个muduo注释版,用以辅助理解muduo的源码。

阅读全文 »

最近我用Golang开发了一个可以将数据库每张表的各个列信息转化成文档的小工具。开发的缘由是因为写后端时,经常需要为数据库写说明文档,对于稍微有些规模的项目来说,就动辄几十张上百张数据表,开发人员在文档中不断的写各个列的列名、类型、描述实在是无聊、枯燥和苦不堪言。所以就有了这个小工具的诞生。

项目地址在这里

阅读全文 »

2017年总共阅读了21本书,相比于2016年减少了4本。
今年读的这些书相对于去年来说种类比较全而且质量比较高, 但是有一个非常大的缺点就是没有留下可用的笔记,尤其是像《北宋名家词选讲》这种书,没有好的笔记留下,书里的精髓就会流失很多。
希望2018年的阅读能够做到以下几点:

  1. 读的每本非小说类书,都要认真的做笔记或者思维图
  2. 2018年可以阅读30本书以上
  3. 多把空闲时间放在用kindle读书上
阅读全文 »

ClassViewer是我最近开发的一个用于展示jvm class字节码的小工具。它是一个单纯的静态网页,完全使用浏览器端的Javascript开发。之所以开发这款工具,是因为我在开发ToyJVM的时候,需要常常校验class文件某一部分的字节码, 所以如果一款工具能够很方便的显示class文件各个部分的信息和字节码,对于ToyJVM的开发将会是一个非常大的帮助。

在开始写代码之前调研了一些类似的产品,主要有jdk自带的javap、国外的Java-Class-Viewer以及国人开发的classpy,它们都是非常不错的class文件分析工具,但是也存在着一些算不上缺陷的小问题。所以最终还是决定自己写一个适合自己小工具,同时也加深下class结构的理解。

在调研了目前的产品后,我也更加清晰了自己的目标。首先它的受众应该是有兴趣研究jvm的程序员,而它应该有这些特性:

  • 不依赖于特定操作系统平台
    它应该具备基本的跨平台的能力,因为程序员的Mac和Linux使用率很高。
  • 无需复杂的安装和编译,无需用户有特定的知识背景
    我不太希望用户拿到我的代码后,还需要安装相应的环境、了解一堆无关知识。

最终实现出来的工具是这样的:

阅读全文 »

4月9号,在武汉参加了人生第一次半程马拉松,风里雨里的21.0975公里。虽然已时隔一周,但想到那天一路的奔跑、疲惫、欣喜,还是想记记这半马的流水账。

阅读全文 »

介绍

BloomFilter(布隆过滤器)是一种可以高效地判断元素是否在某个集合中的算法。

在很多日常场景中,都大量存在着布隆过滤器的应用。例如:检查单词是否拼写正确、网络爬虫的URL去重、黑名单检验,微博中昵称不能重复的检测等。

在工业界中,Google著名的分布式数据库BigTable也用了布隆过滤器来查找不存在的行或列,以减少磁盘查找的IO次数;Google Chrome浏览器使用BloomFilter来判断一个网站是否为恶意网站。

对于以上场景,可能很多人会说,用HashSet甚至简单的链表、数组做存储,然后判断是否存在不就可以了吗?

当然,对于少量数据来说,HashSet是很好的选择。但是对于海量数据来说,BloomFilter相比于其他数据结构在空间效率和时间效率方面都有着明显的优势。

但是,布隆过滤器具有一定的误判率,有可能会将本不存在的元素判定为存在。因此,对于那些需要“零错误”的应用场景,布隆过滤器将不太适用。具体的原因将会在第二部分中介绍。

阅读全文 »

2016年过去了。真的是转瞬即逝,一眨眼的功夫,365个日夜。总结2016年,平平凡凡但踏踏实实。

阅读全文 »

2016年总共阅读了25本书,其中计算机相关书籍5本,小说和传记类15本,其他类型的5本。阅读介质大部分为kindle电子书和微信读书APP。
2016年时间匆匆,感谢我看过的每一本书。

阅读全文 »