J2SE
文章平均质量分 65
jimmee
这个作者很懒,什么都没留下…
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
IO - 同步,异步,阻塞,非阻塞 (亡羊补牢篇)
原文地址:http://blog.youkuaiyun.com/historyasamirror/article/details/5778378 当你发现自己最受欢迎的一篇blog其实大错特错时,这绝对不是一件让人愉悦的事。《 IO - 同步,异步,阻塞,非阻塞 》是我在开始学习epoll和libevent的时候写的,主要的思路来自于文中的那篇link 。写完之后发现很多人都很喜欢,我还是非常开心的...原创 2013-11-30 08:59:08 · 114 阅读 · 0 评论 -
字符串相似算法-(2) Levenshtein distance
编辑距离概念描述: 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数。许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符,删除一个字符。例如将kitten一字转成sitting:sitten (k→s)sittin (e→i)sitting (→g)俄罗斯科学家Vladimir Levenshtein在196...2014-06-08 16:32:54 · 271 阅读 · 0 评论 -
字符串相似算法-(3) NGram Distance
就是N-Gram version of edit distance public float getDistance(String source, String target) { final int sl = source.length(); final int tl = target.length(); if (sl == 0 || tl ...2014-06-08 17:54:45 · 1093 阅读 · 0 评论 -
lucene的拼写检查的实现原理
1. 建索引时, 使用ngram的方式创建索引 SpellChecker的indexDictionary方法 private static void addGram(String text, Document doc, int ng1, int ng2) { int len = text.length(); for (int ng = ng1; ng &l...2014-06-08 18:19:32 · 259 阅读 · 0 评论 -
mapreduce的一些算法设计,优化等(1)
本系列是根据书籍《Data-Intensive Text Processing with MapReduce.pdf》和工作中的一些mapreduce使用做的笔记:本篇针对《Data-Intensive Text Processing with MapReduce》第三章: 1. local aggregation(局部合并) IN-MAPPER COMBINING,也就是...原创 2014-01-27 17:15:56 · 384 阅读 · 0 评论 -
mapreduce的一些算法设计,优化等(2)
1. 反序(order inversion)模式 通过反序模式,我们可以控制中间结果进入reducer的顺序,从而在reducer中先计算出一些结果(根据先进入reducer的中间结果计算出),而这些结果对于高效处理后续的数据很有意义。要使用反序模式,需要先将算法中的操作序问题转化为一般排序问题。 以共现矩阵为例,要计算相对频率问题。 (1)strip...原创 2014-01-28 15:50:34 · 203 阅读 · 0 评论 -
lucene索引创建的理解思路
虽然lucene4很早就出来,但是这里仍然以lucene3.0为基础,理解lucene索引创建的思路: 1. 要记录正向信息 field的数据,fdx,fdt,依次写每个field的即可 词向量,tvx,tvd,tvf tvf是真正存储的地方,tvx是每个文档一项,具体包含第一个field的位置,其他field只要记录与覅一个field的偏移量即可 2. ...2014-06-29 23:12:36 · 142 阅读 · 0 评论 -
ClassNotFoundException等异常导致thread挂了
昨天工作中发现一个导数据的问题: 启动一个定时任务,定时导入数据,导入之前打印一条日志, 导入结束后打印一条日志;但是运行后发现导入失败,导入之前的日志有打印,导入结束后的日志未打印,成功Exception类型的异常没有任何打印。但进程还在,刚开始怀疑是进程hang住了,但是jstack查看没有任何异常,没有发现导入数据的那个线程的存在,怀疑导入的线程挂掉了。 ...原创 2013-09-30 12:15:55 · 224 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(1)-准备工作
1. 协议实现方案: Yunhong Gu提出的rfc的草案 https://tools.ietf.org/html/draft-gg-udt-03 2. 实际工程中用到的实现 https://github.com/barchart/barchart-udt 3. 作为练习和原理的理解 http://svn.code.sf.net/p/udt-java/...原创 2014-03-27 12:52:44 · 524 阅读 · 0 评论 -
字符串相似算法-(1) Jaro-Winkler Distance
Jaro-Winkler Distance 算法 这是一种计算两个字符串之间相似度的方法,想必都听过Edit Distance,Jaro-inkler Distance 是Jaro Distance的一个扩展,而Jaro Distance(Jaro 1989;1995)据说是用来判定健康记录上两个名字是否相同,也有说是是用于人口普查,具体干什么就不管了,让我们先来看一下Jaro Dis...原创 2014-06-08 12:05:25 · 653 阅读 · 0 评论 -
tomcat参数编码处理过程
1. org.apache.coyote.http11.Http11Processor.process处理请求的数据 2. org.apache.coyote.http11.InternalInputBuffer.parseRequestLine() // 例如:127.0.0.1:8080/test.jsp?a=%E4%B8%AD%E5%9B%BD ...原创 2014-06-07 09:49:34 · 377 阅读 · 0 评论 -
hadoop的mapreduce的join操作原理
1. 概述如果我们有如下的两个文件:person.txt(字段是id, name,addressId):1 tom 1002 jme 1013 kite 1024 jack 1005 tim 101address.txt(字段是id,name):100 ...原创 2014-01-23 16:23:39 · 614 阅读 · 0 评论 -
各种排序算法比较:时间复杂度,空间复杂度
时间复杂度n^2表示n的平方,选择排序有时叫做直接选择排序或简单选择排序 排序方法平均时间最好时间最坏时间桶排序(不稳定)O(n)O(n)O(n)基数排序(稳定)O(n)O(n)O(n)归并排序(稳定)O(nlogn)O(nlogn)O(nlogn)快速排序(不稳定)O(nlogn)O(nlo...原创 2013-12-05 17:18:54 · 344 阅读 · 0 评论 -
整理一下准备编写的笔记目录
工作6年,主要从事分布式服务器端开发(3年),做过垂直爬虫和搜索以及数据挖掘(2年),1年的产品的业务开发,学习过和使用过的东西,陆续会写笔记,在整理的同时,算是一种经验积累的记录吧。 tcp通信过程中的一些重要事项,udt的原理和源码分析,参看 http://jimmee.iteye.com/admin/blogs/2037451 系列图片处理垂直爬虫的注意点 ht...原创 2013-12-31 21:21:15 · 267 阅读 · 0 评论 -
线程池中, 怎么保证的一个会话数据的有序性
0. 线程池中, 怎么保证的一个会话数据的有序性 既然用到了线程池, 并不要求始终是同一个线程执行同一个会话的数据, 只要保证多个线程执行的同一个会话的数据在时间上的有序性即可. 原理其实很简单, 每个会话的数据依次放到一个队列中. 特定时刻, 只有一个线程从此队列中读取数据执行. 借用netty中保持同一会话有序性的线程池的实现类的OrderedMemo...原创 2014-05-22 18:53:28 · 833 阅读 · 0 评论 -
rpc中怎么处理方法的调用的?
1. rpc请求中怎么分发请求方法 方法一: 直接使用反射, 通过方法名, 参数名等反射调用实际使用中的示例, hadoop的实现, 具体可参见 http://jimmee.iteye.com/blog/1206598 例如: org.apache.hadoop.ipc.RPC public Writable call(Class<?> proto...原创 2014-05-23 19:27:35 · 390 阅读 · 0 评论 -
SSL和HTTPS
SSL说明: 1)简介 SSL (Secure Socket Layer)为Netscape所研发,用以保障在Internet上数据传输之安全,利用数据加密(Encryption)技术,可确保数据在网络上之传输过程中不会被截取。它已被广泛地用于Web浏览器与服务器之间的身份认证和加密数据传输。SSL协议位于TCP/IP协议与各种应用层协议之间,为数据通讯提供安全支持。 2)S...原创 2014-05-25 21:22:35 · 240 阅读 · 0 评论 -
最简单的nio server编程
原文地址: http://rox-xmlrpc.sourceforge.net/niotut/ 1. Use a single selecting thread 使用单线程处理selectors, selectors are threadsafe their key sets are not 2. Modify the selector from the selectin...原创 2014-05-26 09:28:14 · 193 阅读 · 0 评论 -
SSLEngine的示例
为什么要使用SSLEngine, 参考javadoc的说明: SSLSocket 类提供很多相同的安全功能,但是所有的入站和出站数据都是使用底层 Socket 自动地传输,底层 Socket 设计为使用阻塞模型。虽然这适合于很多应用程序,但是此模型却不提供大型服务器所需的可伸缩性。SSLEngine 的主要特征是它在入站和出站的字节流上操作,与传输机制无关。安排到同位体可靠的 I/...原创 2014-05-26 19:44:34 · 2234 阅读 · 0 评论 -
hive编写udf处理非utf-8数据
hive默认都是utf-8编码处理数据的,如果原始数据不是utf-8,例如是gbk,我们怎么处理这种数据呢? 方式很简单,我们写udf的时候,继承GenericUDF类就行了。例如: public class CharsetConvertor extends GenericUDF { private transient StringObjectIn...原创 2014-01-23 12:40:12 · 1002 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(2)-为什么要用udt
0. AIMD算法的简单回顾 (1) 慢开始阶段说明 开始时cwnd为1个最大报文段(MSS), 每当一个MSS收到确认, 则cwn增加1个MSS大小, 过程: 开始 ---> cwnd = 1 经过1个RTT后 ---> cwnd = 2*1 = 2 经过2个RTT后...原创 2014-03-28 08:00:04 · 384 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(3)-包结构说明
udt的包结构1. 数据包,基本结构如下: 0 1 2 3 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-...原创 2014-03-29 17:24:51 · 343 阅读 · 0 评论 -
Java 并发之 ConcurrentSkipListMap 简述
JCIP 提到了在 Java 6 中引入了两个新的并发集合类 ConcurrentSkipListMap 和 ConcurrentSkipListSet。其实只要介绍一下 ConcurrentSkipListMap 即可(后面简称为 CSLM),因为我们都知道 JDK 中 Set 是基于 Map 实现的。简而言之,CSLM 是一个并发的、可排序的 Map,因此它可以在多线程环境中弥补 Concu...原创 2015-09-20 20:24:31 · 275 阅读 · 0 评论 -
[转载]并发之痛 Thread,Goroutine,Actor
转自 http://jolestar.com/parallel-programming-model-thread-goroutine-actor/ 本文基于我在2月27日Gopher北京聚会演讲整理而成,进行了一些补充以及调整。投稿给《高可用架构》公众号首发。聊这个话题之前,先梳理下两个概念,几乎所有讲并发的文章都要先讲这两个概念:并发(concurrency) 并发的关...原创 2017-04-06 19:21:10 · 700 阅读 · 0 评论 -
2. 伪共享(False Sharing)[转载]
作者:Martin Thompson 译者:丁一缓存系统中是以缓存行(cache line)为单位存储的。缓存行是2的整数幂个连续字节,一般为32-256个字节。最常见的缓存行大小是64个字节。当多线程修改互相独立的变量时,如果这些变量共享同一个缓存行,就会无意中影响彼此的性能,这就是伪共享。缓存行上的写竞争是运行在SMP系统中并行线程实现可伸缩性最重要的限制因素。有人将伪共享描述成无声...原创 2014-11-25 21:40:26 · 134 阅读 · 0 评论 -
3. Java 7与伪共享的新仇旧恨[转载]
原文:False Shareing && Java 7 (依然是马丁的博客) 译者:杨帆 校对:方腾飞在我前一篇有关伪共享的博文中,我提到了可以加入闲置的long字段来填充缓存行来避免伪共享。但是看起来Java 7变得更加智慧了,它淘汰或者是重新排列了无用的字段,这样我们之前的办法在Java 7下就不奏效了,但是伪共享依然会发生。我在不同的平台上实验了一些列不同的方案,并且...原创 2014-11-25 21:45:42 · 151 阅读 · 0 评论 -
4. 内存访问模型的重要性[转载]
在高性能的计算中,我们常说缓存失效(cache-miss)是一个算法中最大性能损失点。 近些年来,我们的处理器处理能力的增长速度已经大大超过了访问主内存的延迟的缩短。 通过更宽的,多通道的总线,到主内存的带宽已经大大增加,但延迟并没有相应显著减少。 为了减少延迟,处理器采用愈加复杂的多层的高速缓存子系统。在1994年的一篇论文“Hitting the memory wall: implicati...原创 2014-11-25 21:53:01 · 233 阅读 · 0 评论 -
5.合并写(write combining)[转载]
原文地址 译者:无叶 校对:丁一现代CPU采用了大量的技术来抵消内存访问带来的延迟。读写内存数据期间,CPU能执行成百上千条指令。多级SRAM缓存是减小这种延迟带来的影响的主要手段。此外,SMP系统采用消息传递协议来实现缓存之间的一致性。遗憾的是,现代的CPU实在是太快了,即使是使用了缓存,有时也无法跟上CPU的速度。因此,为了进一步减小延迟的影响,一些鲜为人知的缓冲区派上了用场。本...原创 2014-11-25 21:54:23 · 1078 阅读 · 0 评论 -
6. 内存屏障[转载]
原文地址 作者:Martin Thompson 译者:一粟 校对:无叶,方腾飞本文我将和大家讨论并发编程中最基础的一项技术:内存屏障或内存栅栏,也就是让一个CPU处理单元中的内存状态对其它处理单元可见的一项技术。CPU使用了很多优化技术来实现一个目标:CPU执行单元的速度要远超主存访问速度。在上一篇文章 “Write Combing (合并写)”中我已经介绍了其中的一项技术。C...原创 2014-11-26 00:07:37 · 129 阅读 · 0 评论 -
多线程程序中操作的原子性[转载]
0. 背景原子操作就是不可再分的操作。在多线程程序中原子操作是一个非常重要的概念,它常常用来实现一些同步机制,同时也是一些常见的多线程Bug的源头。本文主要讨论了三个问题:1. 多线程程序中对变量的读写操作是否是原子的?2. 多线程程序中对Bit field(位域)的读写操作是否是线程安全的?3. 程序员该如何使用原子操作?1. 多线程环境下对变量的读写操作是否是原子的?我们先从一道...原创 2014-12-06 10:49:39 · 154 阅读 · 0 评论 -
hbase等源码导入eclipse流程
hbase: 1. 下载源码svn co http://svn.apache.org/repos/asf/hbase/trunk hbase 2. 执行mvn eclipse:eclipse -DskipTests 3. 导入到eclipse tomcat: tomcat的源码是利用ant来创建和管理的。先安装ant,再执行ant ide-ecl...原创 2015-09-20 19:00:25 · 295 阅读 · 0 评论 -
最简单的平衡树(红-黑树)的实现
在二叉搜索树(BST)的基础上,要实现一颗平衡树,可以使用2-3树的方式,2-3树的直接实现,相对比较复杂,因此算法的研究者们提出了红-黑树的实现方式。 package com.test;public class RedBlackTree<Key extends Comparable<Key>, Value> { private static f...原创 2015-09-04 08:04:47 · 289 阅读 · 0 评论 -
JVM动态调整字节码
粗略的点开btrace的源码看了一下,实际上他只是封装了JDK自带的功能而已 1. attach client到java进程 VirtualMachine vm = null; if (debug) { debugPrint("attaching to " + pid); } ...2016-04-14 19:27:03 · 435 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(4)-发送和接收的算法
0. 计时器udt有四种计时器:ACK, NAK, EXP and SND1. 发送端的算法数据结构和变量:1)SenderLossList: 记录发送方丢失的包的列表,根据序号升序排列2)sendBuffer: 记录发送过的包和序号发送算法:1)如果丢失列表不为空,则重传这些packet包,并从丢失列表中移出,到5)2)若应用层有数据,则执行发送3) 进行检查 a. 若未确认的包...原创 2014-03-30 10:09:39 · 1088 阅读 · 0 评论 -
协议-基于UDP的可靠数据传输协议的实现分析(5)-可靠性怎么保证
发送方的处理:1) 包发送确认后,由于还没有收到确认,先缓存2) 收到确认包后,从缓存中删除发送的包3) 接收方将丢失的包通知过来,或者超过一定的时候,若还没有收到确认的包,进行重传(注意,这个由接收线程触发)接收方的处理:1) 接收到包的数据,先将数据放到缓存中,a. 若有丢包现象,通知发送方,同时记录丢失的包 b.若是重传的包,从丢失的列表中删除2) 发送确认包3) 丢失的包,超时会让发送方...原创 2014-03-31 23:08:12 · 439 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(6)-链接的建立和关闭
1. 模式有client/server mode(客户端,服务器端模式) and the rendezvous mode(会合模式,可同时向对方发送请求)2. client发送的握手信息,信息有:1) UDT version: udt版本,主要用作兼容性处理2) Socket Type: STREAM (0) or DGRAM (1).3) Initial Sequence Number: 第...原创 2014-04-01 22:47:29 · 358 阅读 · 0 评论 -
UDT协议-基于UDP的可靠数据传输协议的实现分析(7)-流量和拥塞控制
流量控制 对于一个带宽1Gbps, RTT为100ms的网络来说 BDP=1,000,000,000*0.1/8=12,500,000字节=12207K=12M 传统TCP接收窗口大小=65535byte=64K, 显然满足不了 udt使用包大小1500byte, 默认接口窗口大小为8192, 因此接收窗口的大小为=1500*8192=12,288,000字节=12000K=11.7M 因此, ...原创 2014-04-02 20:53:46 · 421 阅读 · 0 评论 -
Lucene的数字范围搜索 (Numeric Range Query)原理
0. 全文索引的核心就是倒排索引. 1. 若数字不支持范围查询, 直接变成字符串查找即可 2. 如果要支持范围查询, 直接的字符串存储支持么? 目前lucene要求term按照字典序(lexicographic sortable)排列,然后它的范围查询根据tii找到范围的起始Term,然后把这中间的所有的Term展开成一个BooleanQuery。...原创 2014-04-05 16:08:54 · 818 阅读 · 0 评论 -
MessagePack, Protocol Buffers和Thrift序列化框架原理和比较说明
第1部分 messagepack说明1.1messagepack的消息编码说明为什么messagepack比json序列化使用的字节流更少, 可通过图1-1、图1-2有个直观的感觉。 图1- 1 messagepack与json的格式对比1 图1- 2 messagepack与json的格式对比2messagepack的具体的消息格式如图1-3所示,...原创 2014-04-09 12:50:24 · 764 阅读 · 0 评论 -
Java 7 Hotspot循环Bug详解
上周Java 7 GA发布后,新JIT默认开启的优化中发现了一个问题。虽然这个问题最早是在Lucene搜索索引器的一个用例中出现的,但是它也有可能普遍存在于其他代码之中。这个Bug引来了不少杞人忧天的文章,例如《Don't use Java 7 for anything》,其中暗示所有循环都有问题。事实上,虽然存在一个有效的Bug(循环可能无法正确执行或者引起SIGSEGV崩溃),但是这个B...原创 2013-11-04 16:49:20 · 118 阅读 · 0 评论
分享