2018-04-17 Eric Wang
**历史基本上就是政府制造通货膨胀的过程。 ——哈耶克** 作者简介:李钧,壹比特数字科技首席执行官。长铗,著名科幻作家,巴比特社区创始人。 在布雷顿森林体系解体之前,理论上,一美元的背后就有对应的黄金作为支撑,这样你在世界上使用美元,别人才会承认其合法地位,因为拿到美元之后可以换到等值的黄金,但是在美国相继发动朝鲜战争、越南战争、两次石油危机等之后,美国财政赤字大幅上升,导致美国政府发行大量货币来弥补财政赤字,而对应的黄金储备并没有增加,所以理论上,就是一美元已经换不到对应的等值黄金了,所以这是导致布雷顿森林体系解体的直接原因。 在布雷顿森林体系崩溃之后,美元与黄金脱钩,各国法定货币与美元挂钩,而想要维持美元的强势地位,美 继续阅读 »
2017-12-27 Eric Wang
**我们最美好的愿望就是那些冒着生命危险与独裁者周旋的人们能够幸福和成功。** 作者简介:布鲁斯•布鲁诺•德•梅斯奎塔,纽约大学政治学系 Julius Silver 讲座教授、亚历山大•汉密尔顿政治经济学研究中心主任和斯坦福大学胡佛研究所高级研究员。他通过设立于纽约的咨询公司长期担任美国政府国家安全事务方面的顾问,也为众多公司提供谈判指导与结果预测方面的咨询服务。梅斯奎塔1971年从密歇根大学获得政治科学博士学位。2001—2002年他担任国际研究学会主席。他是美国艺术与科学院院士、美国对外关系理事会会员以及古根海姆基金会学者。梅斯奎塔迄今出版了16本书,超过120篇论文,并在《纽约时报》、《洛杉矶时报》、《芝加哥论坛报》、《国 继续阅读 »
2017-12-12 Eric Wang
Lucene 事务 有过数据库经验的人都知道ACID特性,原子性(atomicity,或称不可分割性)、一致性(consistency)、隔离性(isolation,又称独立性)、持久性(durability)。由于隔离性的存在,对于新的变更包括添加、修改、删除,如果不进行 commit 的话,那么在读端是无法看到数据的变化的,在这里简单的介绍下 Lucene 中的事务,即ACID。 原子性 当你在一次 IndexWriter 的 session 中做操作(增加,删除文档),然后 commit,要么你的所有的操作修改都是可见的(commit 成功),要么所有的操作修改都不可见(commit 失败),绝不会处于某种中间状态。有些 继续阅读 »
2017-11-15 Eric Wang
抛出问题 在 RDBMS 中,我们可以使用 GROUP BY 来对检索的数据进行分组,同样地,想要在 Lucene 中实现分组要如何做呢?首先思考如下几个问题 - Lucene 是如何实现分组的? - 用来分组的字段(域)或者说 Field 如何添加? - 组的大小如何设置? - 组内大小如何设置? - 如何实现组的分页? - 如果结果集超过了组内大小,可以通过分页解决,那么如果结果集超过了组大小的上限,如何解决? - 如何实现单类别分组,即类似SQL中的 GROUP BY A - 如何实现多类别分组,即类似SQL中的 GROUP BY A, B 从 SQL 的 GROUP BY 说起 如果分组后面只有一个字段,如 GROUP 继续阅读 »
2017-10-13 Eric Wang
背景 如果把这个标题拆分成两个来讲,那么每一个都很好解决,下文会进行详述,而如果把这两者看做是与条件并加上其它限制,则实现起来比较困难,本文就是要探讨在需求繁多的情况下,如何优雅地实现。比如需求如下 - 保留标点符号,否则去掉标点的话,在标点两边的词可能会匹配上,比如“你好,小甜甜”,去掉标点切分是『你|好|小|甜|甜』,那么『好小』有可能会命中,而如果切分成『你|好|,|小|甜|甜』,则『好小』无法命中 - 只要包含搜索词,要求对任意搜索词均可命中 - 比如“我爱你中国”,不同的分词工具会切分出不同的结果 - 『我|爱|你|中国』或者『我爱你|中国』或者『我|爱|你|中|国』等,那么要求搜索“我爱”或者“爱你”或者“你中 继续阅读 »
2017-10-10 Eric Wang
一般来说,如果想要从Lucene索引中获取Field的值,那么需要在索引阶段设置Field.Store.YES才可以,然后在搜索阶段得到TopDocs对象之后,用它去获取ScoreDoc再取出Document,使用Document获取存储在索引中的值。但是我们都知道,存储字段是需要硬盘空间的,如果想要追求极致的存储空间并且获取Field的值,那么在不存储的情况下,如何获取呢?其实仔细思索一下,在我们只索引不存储的情况下,Lucene依然可以判断搜索是否命中,这说明在Lucene索引中依然存有一份Field的值,这样在搜索阶段才能判断是否匹配。本文就是探讨在这种情形下,使用Lucene的核心包获取没有存储的Field的值的几种方法,如 继续阅读 »
2017-09-29 Eric Wang
如果线上服务器可以连外网的话,当然是用官方提供的命令来安装插件最简单了,但是可惜的是,好多公司线上服务器是没有外网访问权限的,这就需要在使用某些插件的时候,进行离线安装。而离线安装有两种方式,一种是在可以联网的机器上安装插件,之后使用prepare-offline-pack命令打包,然后将打包文件上传到不能联网的服务器,再使用prepare-offline-pack解包,安装。但是这种方式太麻烦,要求你必须要有一个可以联网的机器,最好还是和不能联网的服务器相同的配置环境,这里推荐一种更好的方案,来解决离线安装插件的问题。 先演示一下,正常的联网环境是如何操作的,如下所示 shell [elastic@escluster logst 继续阅读 »
2017-09-24 Eric Wang
楔子 好久没有发文了,最近有价值的技术总结并不多,或者说,已经懒的去总结技术了,毕竟这事也挺耗费时间与精力的。虽说初衷是为了避免无病呻吟,结果却导致自己懈怠了,但是这并不能作为懒惰的理由。最近被一篇《一个月就辞职:一个北大女生的求职悲欢》文章刷屏了,一枚学霸姐,放弃在鹅厂的实习转正机会,毅然投奔在杭州网易的男友,只因为她无法接受异地或者同城异地的感情生活,遂写了这篇半是吐槽半是炫耀的软文,妹子和她的男友确实优秀,两个北大的研究生,一个拿着网易的高薪OFFER,一个弃鹅厂OFFER于不顾,毅然选择为了爱情抛弃面包。如果说这么优秀的妹子仅仅是吐槽找工作困难那是不可能的,头顶拥有着中国最顶级的学府北大的光环,试问全中国795万毕业生(2 继续阅读 »
2017-09-22 Eric Wang
Byteman简介 Byteman由JBoss出品,JBoss大家应该都熟悉,顶顶大名的应用服务器JBoss也出自其手。Byteman的代码插入能力相比BTrace而言更强,似乎可以在代码中任意的位置插入我们的跟踪代码(当然,你可能需要对Java代码生成、字节码技术有一定的了解),以及访问当前方法中变量的能力(包括方法参数、局部变量、甚至于调用其它函数的参数值、返回值等),而BTrace在这方面的能力要弱很多。 安装Byteman 首先去官网下载最新的压缩包,解压,配置环境变量,开始操练,老熟悉了。新建BYTEMAN_HOME值是E:\byteman-3.0.10,编辑Path环境变量,在末尾添加;%BYTEMAN_HOME% 继续阅读 »
2017-09-22 Eric Wang
背景 在日常开发中,有一些常见的环境,比如Dev、UAT、预发、生产等,当然并不是每个公司都是这样。有时候开发环境一切正常,但是到线上的UAT环境或预发等等会出现各种问题,那么你是不是经常需要进行本地修改代码、提交、编译、打包、上传、运行、查看日志等这一系列步骤呢?这种方式不仅低效、繁琐而且容易引入诸多不可控的因素,比如你在任意一个环节出现问题,可能都会影响到程序最终的运行结果。而如果能有一种神器,可以对正在运行的程序,进行动态追踪、错误诊断、性能剖析等,是不是无形中为你延长了生命呢?如果你之前不知道也就罢了,然而如果你看到这里了,却还不学习的话,就是你自己的锅了。 Java运行时追踪工具 常见的动态追踪工具有BTrace、H 继续阅读 »