`
文章列表

Lucene索引原理

Lucene是一个高性能的java全文检索工具包,它使用的是倒排文件索引结构。该结构及相应的生成算法如下:      0)设有两篇文章1和2   文章1的内容为:Tom lives in Guangzhou,I live in Guangzhou too.   文章2的内容为:He once lived in Shanghai.      1)由于lucene是基于关键词索引和查询的,首先我们要取得这两篇文章的关键词,通常我们需要如下处理措施   a.我们现在有的是文章内容,即一个字符串,我们先要找出字符串中的所有单词,即分词。英文单词由于用空格分隔,比较好处理。中文单词间是连在一起的需要特殊的 ...
   让我们先从高级的视角来查看 Linux 引导过程,这样就可以看到整个过程的全貌了。然后将回顾一下在各个步骤到底发生了什么。在整个过程中,参考一下内核源代码可以帮助我们更好地了解内核源代码树,并在以后对其进行深入分析。    当系统首次引导时,或系统被重置时,处理器会执行一个位于已知位置处的代码。在个人计算机(PC)中,这个位置在基本输入/输出系统(BIOS)中,它保存在主板上的闪存中。嵌入式系统中的中央处理单元(CPU)会调用这个重置向量来启动一个位于闪存/ROM 中的已知地址处的程序。在这两种情况下,结果都是相同的。因为 PC 提供了很多灵活性,BIOS 必须确定要使用哪个设备来引导系 ...

Linux 内核剖析(转)

  linux内核是一个庞大而复杂的操作系统的核心,不过尽管庞大,但是却采用子系统和分层的概念很好地进行了组织。在本文中,您将探索 Linux 内核的总体结构,并学习一些主要的子系统和核心接口。 Linux 内核简介   如果站在 ...
  lucence的索引结构是一种反向索引结构,什么是反向索引结构(inverted index)呢,反向索引是以索引项为中心,每个索引都指向一个文档序列,该序列中所有文档都包含这个索引项。相反,在正向索引中,文档占据了中心的位置,每个文档指向了一个它所包含的索引项的序列。你可以利用反向索引轻松的找到那些文档包含了特定的索引项。Lucene正是使用了反向索引作为其基本的索引结构。 索引文件的逻辑视图     lucence有索引块为基本的索引单位,每个索引块都包含一定数目的文档,我们能够对单独的每个索引块进行检索。下图显示索引块的逻辑结构。索引块的个数由索引的文档的总数以及每个索引块所能包含的最 ...
Lucene 简介 Lucene 是一个基于 Java 的全文信息检索工具包,它不是一个完整的搜索应用程序,而是为你的应用程序提供索引和搜索功能。Lucene 目前是 Apache Jakarta 家族中的一个开源项目。也是目前最为流行的基于 Java 开源全文检索 ...
锁( locking ) 业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算 处理中,我们希望针对某个 cut-off 时间点的数据进行处理,而不希望在结算进行过程中 (可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机 制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓 的 “ 锁 ” ,即给我们选定的目标数据上锁,使其无法被其他程序修改。 Hibernate 支持两种锁机制:即通常所说的 “ 悲观锁( Pessimistic Locking ) ” 和 “ 乐观锁( Optimistic Locking ...
  对于java序列化其实以前一直处于了解状态,今天找了一篇很好的文章对java序列话做了很好很全面的总结,这里我结合文章内容做点整理,和大家分享一下。 序列化 ID 问题 大家肯定注意到,每次我们实现Java序列化的类,eclipse都会提醒你增加 private static final long serialVersionUID 字段,这个字段在序列化是很重要的, 情境:两个客户端 A 和 B 试图通过网络传递对象数据,A 端将对象 C 序列化为二进制数据再传给 B,B 反序列化得到 C。 问题:C 对象的全类路径假设为 com.inout.Test,在 A 和 B 端都有这么一个类文件, ...
二、简介 1.什么是线程安全? (1)控制多个线程对某个资源的有序访问或修改 (2)如果一个类在多线程的访问下,其状态是可以预测的,并且不需要额外的同步,那么这个类就是线程安全的类 2.为什么要线程安全? (1)线程不安全会造成数据错误,修正数据错误是费时费力的 (2)线程不安全会导致程序发生一些异常行为,而且这种行为很难查找 (3)线程不安全的现象一般只有在并发量大时才会出现,因此很难重现 三、线程不安全产生原因 1.线程工作内存与主存交互 当线程操作某个共享变量时,可能的执行顺序如下: (1)从主存复制变量到当前工作内存 (2)执行代码,改变共享变量的值 (3) 将工作内存数据同步回 ...

java多线程基础

一、线程基本介绍 1.线程和进程的区别 (1)进程是系统进行资源分配和调度的一个独立单位 (2)线程是进程的一个实体,是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 (3)进程有独立的地址空间 (4 ...
在JDK1.2以前的版本中,当一个对象不被任何变量引用,那么程序就无法再使用这个对象。也就是说,只有对象处于可触及状态,程序才能使用它。这 就像在日常生活中,从商店购买了某样物品后,如果有用,就一直保留它,否则 ...
互联网发展的今天,一方面离不开其开放、共享的特性带给人们的全新体验,另一方面也离不开数以亿计的为其提供各类丰富内容的网络节点。互联网被普及前,人们查阅资料第一想到的便是拥有大量书籍资料的图书馆,到了今 ...
随着搜索经济的崛起,人们开始越加关注全球各大搜索引擎的性能、技术和日流量。作为企业,会根据搜索引擎的知名度以及日流量来选择是否要投放广告等;作为普通网民,会根据搜索引擎的性能和技术来选择自己喜欢的引擎 ...
每个分区都需要挂载(mount)以后才能使用,包括系统根分区,家目录,swap等等,这些是启动时系统已经帮你搞定的,只是你不知道而已。 那么系统是怎么搞定的呢?通过fstab文件啊!你可以打开/etc/fstab自己看看,比如我的有这 ...

kmp算法分析

我们这里说的KMP不是拿来放电影的(虽然我很喜欢这个软件),而是一种算法。KMP算法是拿来处理字符串匹配的。换句话说,给你两个字符串,你需要回答,B串是否是A串的子串(A串是否包含B串)。比如,字符串A="I'm matrix67& ...
真正的程序员都是用c和c++,呵呵这句话如此绝对,哥就受这句话的刺激今天就学了一下c语言,其实我一直认为是c语言是最简单的,和java比起来他的特性要简单的很多,不过为什么用C语言的人自我感觉很牛呢,呵呵,估计用这种语言写程序是比较难,尤其是程序规模比较大的时候尤其是这样,如果不是这样的话,面向对象也不会得到发展,同时也不会有所谓的软件危机一说,其实c语言适合那些对计算机理解比深刻的人用,本身用它做的东西都是偏底层和要求高效率的地方,其次要写出看得很清爽的c程序,真的要有点水平,我是这样认为的是其实面向对象的语言其实就是在语言的层次上要求你去写出规范的程序,去封装,去隐藏实现,去给代码解耦。c语 ...
Global site tag (gtag.js) - Google Analytics