摘要: 一、引言主串(被扫描的串):S=‘s0s1...sn-1’,i 为主串下标指针,指示每回合匹配过程中主串的当前被比较字符;模式串(需要在主串中寻找的串):P=‘p0p1...pm-1’,j 为模式串下标指针,指示每回合匹配过程中模式串的当前被比较字符。字符串匹配:在主串中扫描与模式串完全相同的部分,并返回其在主串中的位置,这里的起始扫描位置默认为主串的第一个字符,即默认pos=0,其他情况类似。朴素匹配算法:在模式串与主串的匹配过程中,一共要进行n=Length(S)回合的匹配,每一回合分别从主串的起始字符s0,s1,...,sn-1开始进行。在具体某一回合的匹配过程中,每当模式串P中的某一字 阅读全文
posted @ 2012-10-23 14:15 曾先森在努力 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 1. 哈希表的概念 对于动态查找表而言,1) 表长不确定;2)在设计查找表时,只知道关键字所属范围,而不知道确切的关键字。因此,一般情况需建立一个函数关系,以f(key)作为关键字为key的录在表中的位置,通常称这个函数f(key)为哈希函数。(注意:这个函数并不一定是数学函数) 1. 哈希函数是一个映象,即:将关键字的集合映射到某个地址集合上,它的设置很灵活,只要这个地址集合的大小不超出允许范围即可; 2. 由于哈希函数是一个压缩映象,因此,在一般情况下,很容易产生“冲突”现象,即:key1 key2,而 f(key1) = f(key2) 并且,改进哈希函数只能减少冲突,而不能避免冲... 阅读全文
posted @ 2012-10-16 14:09 曾先森在努力 阅读(330) 评论(0) 推荐(0) 编辑
摘要: 三种查找算法:顺序查找,二分法查找(折半查找),分块查找,散列表(以后谈)一、顺序查找的基本思想:从表的一端开始,顺序扫描表,依次将扫描到的结点关键字和给定值(假定为a)相比较,若当前结点关键字与a相等,则查找成功;若扫描结束后,仍未找到关键字等于a的结点,则查找失败。说白了就是,从头到尾,一个一个地比,找着相同的就成功,找不到就失败。很明显的缺点就是查找效率低。适用于线性表的顺序存储结构和链式存储结构。计算平均查找长度。例如上表,查找1,需要1次,查找2需要2次,依次往下推,可知查找16需要16次,可以看出,我们只要将这些查找次数求和(我们初中学的,上底加下底乘以高除以2),然后除以结点数, 阅读全文
posted @ 2012-10-14 21:17 曾先森在努力 阅读(256) 评论(0) 推荐(0) 编辑
摘要: 8种排序之间的关系: 1,直接插入排序 (1)基本思想:在要排序的一组数中,假设前面(n-1)[n>=2] 个数已经是排好顺序的,现在要把第n个数插到前面的有序数中,使得这n个数也是排好顺序的。如此反复循环,直到全部排好顺序。(2)实例①直接插入排序例:六个数12 15 9 20 6 31 24 用直接插入排序,如下图:思路:第一步:从给出的六个数中,随便拿出一个数,比如12,形成一个有序的数据序列(一个数当然是有序的数据序列了,不看12之外的数,就当其他的数不存在);第二步:从剩下的五个数中挑出一个数来,比如15,和刚才的12作比较,12<15,因此,放在12后面,形成数据序列1 阅读全文
posted @ 2012-10-14 21:10 曾先森在努力 阅读(592) 评论(0) 推荐(0) 编辑
摘要: 1.概念: 运行时,对任意类,都能知道这个类的所有属性和方法;对任意一对象,都能够调用它的每个方法和属性;这种动态获取、动态调用的功能称为Java语言的反射机制。2.实现 Java反射相关的API在包java.lang.reflect中Member接口该接口可以获取有关类成员(域或者方法)后者构造函数的信息。AccessibleObject类该类是域(field)对象、方法(method)对象、构造函数(constructor)对象的基础类。它提供了将反射的对象标记为在使用时取消默认 Java 语言访问控制检查的能力。Array类该类提供动态地生成和访问JAVA数组的方法。Construct. 阅读全文
posted @ 2012-09-27 14:14 曾先森在努力 阅读(247) 评论(0) 推荐(0) 编辑
摘要: (转)http://www.cnblogs.com/Quincy/archive/2011/06/19/2084557.html一、什么是JAVA的反射机制Java反射是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。Java反射机制 阅读全文
posted @ 2012-09-27 14:11 曾先森在努力 阅读(199) 评论(0) 推荐(0) 编辑
摘要: 本篇文章依旧采用小例子来说明,因为我始终觉的,案例驱动是最好的,要不然只看理论的话,看了也不懂,不过建议大家在看完文章之后,在回过头去看看理论,会有更好的理解。下面开始正文。【案例1】通过一个对象获得完整的包名和类名?123456789101112131415package Reflect; /** * 通过一个对象获得完整的包名和类名 * */class Demo{ //other codes... } class hello{ public static void main(String[] args) { Demo demo=new Demo(); System.out.println( 阅读全文
posted @ 2012-09-27 14:05 曾先森在努力 阅读(231) 评论(0) 推荐(0) 编辑
摘要: 1 基本信息摘要:每个java开发人员对java.lang.ClassNotFoundExcetpion这个异常肯定都不陌生,这背后就涉及到了java技术体系中的类加载。Java的类加载机制是java技术体系中比较核心的部分,虽然和大部分开发人员直接打交道不多,但是对其背后的机理有一定理解有助于排查程序中出现的类加载失败等技术问题,对理解java虚拟机的连接模型和java语言的动态性都有很大帮助。由于关于java类加载的内容较多,所以打算分三篇文章简述一下:第一篇:java类加载原理解析第二篇:插件环境下类加载原理解析第三篇:线程上下文类加载器分类:开发技术->J2EE标签:Java类加 阅读全文
posted @ 2012-09-27 14:02 曾先森在努力 阅读(289) 评论(0) 推荐(0) 编辑
摘要: 简介:类加载器(class loader)是 Java™中的一个很重要的概念。类加载器负责加载 Java 类的字节代码到 Java 虚拟机中。本文首先详细介绍了 Java 类加载器的基本概念,包括代理模式、加载类的具体过程和线程上下文类加载器等,接着介绍如何开发自己的类加载器,最后介绍了类加载器在 Web 容器和 OSGi™中的应用。 -->类加载器是 Java 语言的一个创新,也是 Java 语言流行的重要原因之一。它使得 Java 类可以被动态加载到 Java 虚拟机中并执行。类加载器从 JDK 1.0 就出现了,最初是为了满足 Java Applet 的需要而开发出来的。Java 阅读全文
posted @ 2012-09-27 13:50 曾先森在努力 阅读(270) 评论(0) 推荐(0) 编辑
摘要: 假设一个服务器完成一项任务所需时间为:T1 创建线程时间,T2 在线程中执行任务的时间,T3 销毁线程时间。当T1 + T3 远大于 T2时,采用多线程技术可以显著减少处理器单元的闲置时间,增加处理器单元的吞吐能力。 线程池就是一个线程的容器,每次只执行额定数量的线程, 线程池作用就是限制系统中执行线程的数量。采用线程池不仅调整T1,T3产生的时间段,而且它还显著减少了创建线程的数目。 为什么要用线程池: 1)减少了创建和销毁线程的次数,每个工作线程都可以被重复利用,可执行多个任务 2)可以根据系统的承受能力,调整线程池中工作线线程的数目,防止因为因为消耗过多的内存,而把服务器累趴下(每个线程 阅读全文
posted @ 2012-09-26 16:46 曾先森在努力 阅读(1229) 评论(0) 推荐(0) 编辑
摘要: 线程的生命周期 与人有生老病死一样,线程也同样要经历开始(等待)、运行、挂起和停止四种不同的状态。这四种状态都可以通过Thread类中的方法进行控制。下面给出了Thread类中和这四种状态相关的方法。 1 // 开始线程 2 public void start( ); 3 public void run( ); 4 5 // 挂起和唤醒线程 6 public void resume( ); // 不建议使用 7 public void suspend( ); // 不建议使用 8 public static void sleep(long millis... 阅读全文
posted @ 2012-09-26 16:44 曾先森在努力 阅读(574) 评论(0) 推荐(0) 编辑
摘要: 线程简介 一、线程概述线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个 阅读全文
posted @ 2012-09-26 16:42 曾先森在努力 阅读(296) 评论(0) 推荐(0) 编辑
摘要: 线程一般有6个状态:新建状态:NEW可运行状态:RUNNABLE休眠状态:TIMED_WAITING等待状态:WAITING阻塞状态:BLOCKED终止状态“TERMINATED当我们使用new创建线程之后,线程处于新建状态,当调用start方法之后,线程出于可运行状态,当线程需要获得对象的内置锁,而这个锁被其他线程所占用的时候,线程就出于阻塞状态,当线程等待其他线程通知调度表可以运行时,线程处于等待状态,当一个含有时间参数的方法,必须sleep()方法,可以让线程处于计时等待状态,当run()方法运行完毕或者出现异常,线程处于终止状态。?123456789101112131415161718 阅读全文
posted @ 2012-09-26 16:28 曾先森在努力 阅读(209) 评论(0) 推荐(0) 编辑
摘要: 这一篇文章主要关于java多线程,主要还是以例子来驱动的。因为讲解多线程的书籍和文章已经很多了,所以我也不好意思多说,呵呵、大家可以去参考一些那些书籍。我这个文章主要关于实际的一些问题。同时也算是我以后复习的资料吧,。呵呵大家多多指教。同时希望多结交一些技术上的朋友。谢谢。---------------------------------------------------------------------------------------------------------------------------------------------------- java中的多线程在java 阅读全文
posted @ 2012-09-26 16:26 曾先森在努力 阅读(201) 评论(0) 推荐(0) 编辑
摘要: 下面是Java线程系列博文的一个编目:Java线程:概念与原理Java线程:创建与启动Java线程:线程栈模型与线程的变量Java线程:线程状态的转换 Java线程:线程的同步与锁Java线程:线程的交互Java线程:线程的调度-休眠 Java线程:线程的调度-优先级Java线程:线程的调度-让步Java线程:线程的调度-合并Java线程:线程的调度-守护线程Java线程:线程的同步-同步方法Java线程:线程的同步-同步块 Java线程:并发协作-生产者消费者模型Java线程:并发协作-死锁 Java线程:volatile关键字Java线程:新特征-线程池Java线程:新特征-有返回值的.. 阅读全文
posted @ 2012-09-26 16:22 曾先森在努力 阅读(160) 评论(0) 推荐(0) 编辑
摘要: 很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题,这些问题经常被高级工程师所问到。 0、Java 中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个 Java 线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。 1、解释实现多线程的几种方法? 一 Java 线程可以实现 Runnable 接口或者继承 Thread 类来实现,当你... 阅读全文
posted @ 2012-09-26 16:06 曾先森在努力 阅读(224) 评论(0) 推荐(0) 编辑
摘要: Steven Haines, 创始人兼 CEO, GeekCap Inc.简介:多线程编程向来不容易,但是它确实有助于理解 JVM 进程如何巧妙地构建不同代码。Steven Haines 分享 5 个技巧,可以帮助您在使用同步方法、volatile 变量和原子类时做出更明智的决策。虽然很少有 Java™ 开发人员能够忽视多线程编程和支持它的 Java 平台库,更少有人有时间深入研究线程。相反地,我们临时学习线程,在需要时向我们的工具箱添加新的技巧和技术。以这种方式构建和运行适当的应用程序是可行的,但是您可以做的不止这些。理解 Java 编译器的线程处理特性和 JVM 将有助于您编写更高效、性能 阅读全文
posted @ 2012-09-26 16:04 曾先森在努力 阅读(206) 评论(0) 推荐(0) 编辑
摘要: 引言将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识。回页首序列化 ID 问题情境:两个客户端 A 和 B 试图通过网络传递对象数据,A 端将对象 C 序列化为二进制数据再传给 阅读全文
posted @ 2012-09-25 17:09 曾先森在努力 阅读(3481) 评论(0) 推荐(3) 编辑
摘要: 转自:http://developer.51cto.com/art/200908/147650.htm 本文讲解了Java序列化的机制和原理。从文中你可以了解如何序列化一个对象,什么时候需要序列化以及Java序列化的算法。 有关Java对象的序列化和反序列化也算是Java基础的一部分,下面对Java序列化的机制和原理进行一些介绍。Java序列化算法透析 Serialization(序列化)是一种将对象以一连串的字节描述的过程;反序列化deserialization是一种将这些字节重建成一个对象的过程。Java序列化API提供一种处理对象序列化的标准机制。在这里你能学到如何序列化一个对象,什.. 阅读全文
posted @ 2012-09-25 16:37 曾先森在努力 阅读(356) 评论(0) 推荐(0) 编辑
摘要: 引言将 Java 对象序列化为二进制文件的 Java 序列化技术是 Java 系列技术中一个较为重要的技术点,在大部分情况下,开发人员只需要了解被序列化的类需要实现 Serializable 接口,使用 ObjectInputStream 和 ObjectOutputStream 进行对象的读写。然而在有些情况下,光知道这些还远远不够,文章列举了笔者遇到的一些真实情境,它们与 Java 序列化相关,通过分析情境出现的原因,使读者轻松牢记 Java 序列化中的一些高级认识。回页首文章结构本文将逐一的介绍几个情境,顺序如下面的列表。序列化 ID 的问题静态变量序列化父类的序列化与 Transien 阅读全文
posted @ 2012-09-25 16:37 曾先森在努力 阅读(211) 评论(0) 推荐(0) 编辑