`
文章列表

Trie数据结构

/**********************************************************数据结构:Trie树,又称单词查找树或字典树,是一种树形结构,是一种哈希树的变种;基本原理:Trie树的核心思想是空间换时间,利用字符串的公共前缀来降低查询时间的开销以达到提高效率的目的;应用:用于统计和排序大量的字符串(但不仅限于字符串),所以经常被搜索引擎系统用于文本词频统计;优点:最大限度地减少无谓的字符串比较,查询效率比哈希表高;基本特性:(1)根节点不包含字符,除根节点外每一个节点都只包含一个字符;(2)从根节点到某一节点,路径上经过的字符连接起来,为该节点对应的字符串 ...

lucene

转自 Lucene/Solr开发经验[原] 作者 张驰有道   注意:该文章所属Blog中的日记遵循Creative Commons(创作共用)授权 ,您可以任意转载,转载时请务必以超链接形式标明文章原始出处 和作者信息 及本声明 。   [开篇语 ]按照惯例应该写一篇技术文章了,这次结合Lucene/Solr来分享一下开发经验。 Lucene是一个使用Java语言写的全文检索开发包(API),利用它可以实现强大的检索功能,它的详细介绍大家可以去Google上搜索一下,本文重点放在Solr相关的讨论上。   [概述 ]目前国内研究Solr的人不多,而且大多是因为项目开发需要。 ...
产生死锁的原因主要是:(1) 因为系统资源不足。(2) 进程运行推进的顺序不合适。(3) 资源分配不当等。如果系统资源充足,进程的资源请求都能够得到满足,死锁出现的可能性就很低,否则就会因争夺有限的资源而陷入死锁。其次,进程运行推进顺序与速度不同,也可能产生死锁。产生死锁的四个必要条件:(1) 互斥条件:一个资源每次只能被一个进程使用。
    一直想写一篇数据库访问的博客,之前很忙,一直没有时间。想写的数据库访问的这个博客不涉及到具体的数据库操作,比如增删改查或者一些ORM框架的使用,比如mybaitis、Hibernate,也不涉及到高阶的事务处理。就是想概况的写一下。     那什么是数据库访问呢,很简单——访问数据库呗。对,就是这么简单,咱们用图来说话,如下图所示:       客户端程序,比如Java程序(因为本人是干Java的,就以java举例),发送消息给关系型数据库,关系数据库返回查询结果给客户端程序。这两者到底是怎么通信的呢,有的人可能会说用JDBC API,这样说也对,但是还是没有涉及到根本。这两者是 ...
1、sleep() 使当前线程(即调用该方法的线程)暂停执行一段时间,让其他线程有机会继续执行,但它并不释放对象锁。也就是说如果有synchronized同步快,其他线程仍然不能访问共享数据。注意该方法要捕捉异常。 例如有两个线程同时执行(没有synchronized)一个线程优先级为MAX_PRIORITY,另一个为MIN_PRIORITY,如果没有Sleep()方法,只有高优先级的线程执行完毕后,低优先级的线程才能够执行;但是高优先级的线程sleep(500)后,低优先级就有机会执行了。 总之,sleep()可以使低优先级的线程得到执行的机会,当然也可以让同优先级、高优先级的线程有执行 ...
两个线程可以交换对象的同步点。每个线程都在进入 exchange 方法时给出某个对象,并接受其他线程返回时给出的对象。   用于实现两个人之间的数据交换,每个人在完成一定的事务后想与对方交换数据,第一个先拿出数据的人将一直等待第二个人拿着数据到来时,才能彼此交换数据。 构造方法摘要 Exchanger()           创建一个新的 Exchanger。  方法摘要 V exchange(V x)           等待另一个线程到达此交换点(除非它被中断),然后将给定的对象传送给该线程,并接收该线程的对象。 V exchange(V x, long timeout, TimeUn ...
一:前言:      在新增的Concurrent包中,BlockingQueue很好的解决了多线程中,如何高效安全“传输”数据的问题。通过这些高效并且线程安全的队列类,为我们快速搭建高质量的多线程程序带来极大的便利。本文详细介绍了BlockingQueue家庭中的所有成员,包括他们各自的功能以及常见使用场景。 二:认识BlockingQueue 阻塞队列,顾名思义,首先它是一个队列,而一个队列在数据结构中所起的作用大致如下图所示: 从上图我们可以很清楚看到,通过一个共享的队列,可以使得数据由队列的一端输入,从另外一端输出; 常用的队列主要有以下两种:(当然通过不同的实现方式,还可以延伸出很多 ...
    听某位高级软件开发工程师说遍历HashMap的三种方式,用KeySet遍历的方式会非常慢,效率特别低,所以推荐使用EntrySet的方式遍历HashMap,这两种都是可以获取到HashMap的key-value对,另外一种遍历HashMap的方式是调用HashMap的values ...
还有20天 ,就工作一年了,感觉时间过得真快,当然有的时候也会觉得时间过得很慢,当然觉得慢的时候是觉得怎么离发工资还有那么久的时间,回顾这一年的时间,从刚开始的生手到现在得到一个技术牛人的认可,经历了很多。当然,能让自己进步唯有学习。。自己本身非常喜欢技术,不是很喜欢管理,觉得管理人员的事比较多,比较杂,比较费心、劳心,所以以后还是想走技术路线,争取早日实现自己的一个目标-成为架构师。废话不多说了,今天就来说说代理--proxy java中的代理按照代理类的生成时期不同分为静态代理和动态代理。 (1)静态代理。由程序员创建或由特定工具自动生成源代码,再对其编译。在程序运行前,代理类的.cl ...
第一种(懒汉,线程不安全):  1 public class Singleton {   2     private static Singleton instance;   3     private Singleton (){}    4     public static Singleton getInstance() {   5     if (instance == null) {   6         instance = new Singleton();   7     }   8     return instance;   9     }  10 }  11    ...
生成对象的四种方式 (1)通过new生成对象。这是我们最常用的方式,生成的对象置于内存中的堆空间中,堆空间的构成如下图所示 一个old区,一个eden区,两个survivor区。通常生成的对象会置于Eden区中,但是当生成的对象过 ...
Spring 把所有能记录信息的载体,如各种类型的文件、二进制流等都称为资源,对 Spring 开发者来说,最常用的资源就是 Spring 配置文件(通常是一份 XML 格式的文件)。 在 Sun 所提供的标准 API 里,资源访问通常由 java.net.URL 和文 ...

Mysql Explain 详解

一.语法 explain < table_name > 例如: explain select * from t3 where id=3952602; 二.explain输出解释 +----+-------------+-------+-------+-------------------+---------+---------+-------+------+-------+ | id | select_type | table | type  | possible_keys     | key     | key_len | ref   | rows | Extra | +- ...
    首先我想谈一下写博文的感受,我觉得博文不一定多么复杂,多么有深度,只要能对看的人有所帮助即可。我不赞同写关于一些框架的整合文章,比如struts2与spring整合之类的。当然要是开辟专栏系统得介绍框架的使用就另当别论了。因为在平时开发工作当中,经过几个项目的洗礼,对于框架的使用也就能掌握了。另外一点,在面试的时候,面试官也很少会问某个框架如何使用,一般都会问你这个框架比较深的东西。举个例子,面试官不会问你Spring声明式事务怎么配,会问你Spring利用什么技术实现的这点,会问你Spring是利用什么技术使得利用单例的dao就能实现线程安全。还有不能忽略对基础知识的学习,Spring ...
最近翻看下java编程思想,对java类和对象的初始化有点困惑,查阅了一些资料: 一、java类初始化 对于类的初始化:类的初始化一般只初始化一次,类的初始化主要是初始化静态成员变量。 类的编译决定了类的初始化过程。编译器生成的class文件主要对定义在源文件中的类进行了如下的更改:   1、先按照静态成员变量的定义顺序在类内部声明成员变量。   2、再按照原java类中对成员变量的初始化顺序进行初始化。 源文件public class Person { public static String name = "gyq"; public static int age; ...
Global site tag (gtag.js) - Google Analytics