本文对HanLP的es插件踩坑过程做个简单的记录。
自动问答系统开源轮子简介
本文对自动问答系统相关的开源轮子做简单的对比,包括全套的问答系统实现和纯粹的NLP框架。
对比的指标很简单:能不能跑起来、能不能正常交互。虽然指标很简单,但是实际上很多开源项目并不能达标……
视频技术概念扫盲初步
本文就视频技术做一个初步的扫盲(主要是针对我本人,不是针对在座的各位),基本就是资料的搜集和摘要,目的是知道一些常见的概念大概是怎么一回事,包括PPI、分辨率、比特率和视频音频压缩的一些常见术语。
(本来题目叫做《视频技术概念扫盲》的,但是一轮下来,发现水深得很,还是加上『初步』比较好,毕竟还有很多盲点没扫到。)
几种开源的媒体服务器对比
本文对几种开源的流媒体服务器做对比。
JVM GC相关问题
1. 概念
http://blog.csdn.net/u011080472/article/details/51324422
1.0 并发和并行
这两个名词都是并发编程中的概念,在谈论垃圾收集器的上下文语境中,它们可以解释如下。
并行(Parallel):指多条垃圾收集线程并行工作,但此时用户线程仍然处于等待状态。
并发(Concurrent):指用户线程与垃圾收集线程同时执行(但不一定是并行的,可能会交替执行),用户程序在继续运行,而垃圾收集程序运行于另一个CPU上。
1.1 Minor GC 和 Full GC
新生代GC(Minor GC / Young GC / YGC):指发生在新生代的垃圾收集动作,因为Java对象大多都具备朝生夕灭的特性,所以Minor GC非常频繁,一般回收速度也比较快。
老年代GC(Major GC / Full GC / FGC):指发生在老年代的GC,出现了Major GC,经常会伴随至少一次的Minor GC(但非绝对的,在Parallel Scavenge收集器的收集策略里就有直接进行Major GC的策略选择过程)。Major GC的速度一般会比Minor GC慢10倍以上。
WebSocket简介
1 概念
1.1 comet
天不生WS,万古如长夜。
在WebSocket出现之前,服务端主动推送消息给浏览器的需求就已经存在了,但是HTTP这个协议本来就不是设计用来进行双向通信的,所以机智的工程师们采取了各种hack的方式来实现这种功能,这些实现方式都统称为comet
。
但是无可避免地,这些技术都存在缺陷,既然WebSocket都出现了,那么这些技术大概也能进博物馆了,除了实现Fallback方案时需要去了解之外,这些技术感觉价值不大了,所以不展开说,如果读者有兴趣,可以根据关键词找资料去了解。
JVM运行时数据区域
根据 The Java® Virtual Machine Specification - Java SE 8 Edition,可以整理出其定义的JVM内存结构如下:
JVM Specification定义的运行时数据区域模型↑↑↑
其中,方法区所属的区域并没有强制要求。不同的JVM实现,其内存分布细节会不同。
JVM加载、启动和初始化
0 概述
这实际上是《The Java® Virtual Machine Specification - Java SE 8 Edition》中第五章内容(Loading, Linking, and Initializing)的部分翻译。主要目的是整理阅读笔记,让我自己看得明白,在这个前提下,尽量让别人看得明白,如果读者觉得我写得很混乱,还请自行阅读原文,不便之处敬请见谅。如有错误,还请指正(拉到页面底部点击『联系我』就可以发邮件给我)。
阅读本文内容需要先对java的class文件结构有所了解。如果尚不了解,不妨参考我的另一篇博文 Java class文件格式
- 加载是这样一个过程:寻找一个特定名称的class或者interface的二进制表达形式(binary representation),然后从这个二进制表达形式中创建出一个class或者interface。
- 链接是这样一个过程:取得class或者interface,然后将其结合到JVM的运行时状态,使得它可以被执行。
- 初始化一个class或者interface的过程就是执行这个class或者interface的初始化方法
<clinit>
的过程。
Java class文件格式
0 概述
这实际上是《The Java® Virtual Machine Specification - Java SE 8 Edition》中第四章内容(The class File Format)的部分翻译。主要目的是整理阅读笔记,让我自己看得明白,在这个前提下,尽量让别人看得明白,如果读者觉得我写得很混乱,还请自行阅读原文,不便之处敬请见谅。如有错误,还请指正(拉到页面底部点击『联系我』就可以发邮件给我)。
每一个class文件都包含了一个单独的class或者interface的定义。尽管一个class或者interface并不是有一个以文件形式存在的外部表达,但是下面还是通俗地将class或interface的任何有效表达称为类文件格式(the class file format)。
一个类文件由一个8位字节流
组成。 所有的16位,32位和64位量分别通过读取2、4、8个连续的8位字节来构造。 多字节数据项总是以big-endian顺序
存储,其中高字节排在第一位。 在Java SE平台中,此格式由接口java.io.DataInput
和java.io.DataOutput
以及类如java.io.DataInputStream
和java.io.DataOutputStream
支持。
Druid连接池监控的一次改造
1. 背景
druid本身提供了监控功能,具体在我另一篇博文《Druid连接池监控》里有介绍。当时提到有以下缺陷:
- 无法灵活监控多个目标
- 切换环境不方便
- JMX重连不会成功
因此针对这些问题,对其进行改造。改造后的源码已经放在个人的github上:
https://github.com/bungder/druid-aggregated-monitor
对应本文的版本,已经打了tag:
https://github.com/bungder/druid-aggregated-monitor/releases/tag/0.0.1