![](https://img-blog.csdnimg.cn/20201014180756754.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
Java
文章平均质量分 87
booboo2006
I am a Java software engineer.
展开
-
Input a string in Java
在算法和数据结构的示例程序中经常会遇到接收用户输入数据的要求,下面的getString()函数可以从控制台接收一个字符串,可以根据需要再进行类型转换。public static getString() throws IOException{ InputStreamReader isr=new InputStreamReader(System.in); BufferedReader br原创 2006-08-30 12:56:00 · 1195 阅读 · 0 评论 -
[转贴]Hibernate框架ORM的实现原理
1.什么是ORM ORM的全称是Object Relational Mapping,即对象关系映射。它的实现思想就是将关系数据库中表的数据映射成为对象,以对象的形式展现,这样开发人员就可以把对数据库的操作转化为对 这些对象的操作。因此它的目的是为了方便开发人员以面向对象的思想来实现对数据库的操作。 2.什么是Hibernate 对于Hibernate的称呼有很多,比如工具、技术、转载 2008-07-08 21:54:00 · 1070 阅读 · 1 评论 -
[转贴] 反射实现 AOP 动态代理模式(Spring AOP 的实现原理)
其实AOP的意思就是面向切面编程. OO注重的是我们解决问题的方法(封装成Method),而AOP注重的是许多解决解决问题的方法中的共同点,是对OO思想的一种补充! 还是拿人家经常举的一个例子讲解一下吧: 比如说,我们现在要开发的一个应用里面有很多的业务方法,但是,我们现在要对这个方法的执行做全面监控,或部分监控.也许我们就会在要一些方法前去加上一条日志记转载 2008-07-08 22:01:00 · 1020 阅读 · 1 评论 -
[转贴] 正确使用 Volatile 变量
Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量。这两种机制的提出都是为了实现代码线程的安全性。其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低),而且其使用也更容易出错。在这期的 Java 理论与实践 中,Brian Goetz 将介绍几种正确使用 volatile 变量的模式,并针对其适用性限制提出一些建议。 Java 语言转载 2008-07-04 18:25:00 · 559 阅读 · 0 评论 -
[转贴] Java程序初始化顺序
import java.util.*;public class Demo ...{ static ...{ System.out.println("i am static demo."); } ...{转载 2008-07-09 13:03:00 · 499 阅读 · 0 评论 -
[转贴] Spring AOP的底层实现技术
AOP概述软件的编程语言最终的目的就是用更自然更灵活的方式模拟世界,从原始机器语言到过程语言再到面向对象的语言,我们看到编程语言在一步步用更自然、更 强大的方式描述软件。AOP是软件开发思想的一个飞跃,AOP的引入将有效弥补OOP的不足,OOP和AOP分别从纵向和横向对软件进行抽象,有效地消除 重复性的代码,使代码以更优雅的更有效的方式进行逻辑表达。AOP有三种植入切面的方法:其一是编译期转载 2008-07-10 18:36:00 · 685 阅读 · 0 评论 -
[转载] Java内部类总结
内部类:1,概述内部类是指在一个外部类的内部再定义一个类。内部类作为外部类的一个成员,并且依附于外部类而存在的。内部类可为静态,可用PROTECTED和PRIVATE修饰。(而外部类不可以:外部类只能使用PUBLIC和DEFAULT)。2,分类成员内部类、局部内部类、静态内部类、匿名内部类(图形是要用到,必须掌握)。3,使用方法A,成员内转载 2008-07-10 19:11:00 · 466 阅读 · 0 评论 -
[转贴] Java 理论与实践: 使用通配符简化泛型使用
在 Java 语言中,数组是协变的(因为一个 Integer 同时也是一个 Number,一个 Integer 数组同时也是一个 Number 数组),但是泛型不是这样的(List 并不等于 List)。人们会争论哪些选择是 “正确的”,哪些选择是 “错误的” — 当然,每种选择都各有优缺点转载 2008-08-01 13:57:00 · 510 阅读 · 0 评论 -
[转贴] Java 理论与实践: 使用通配符简化泛型使用
自从泛型被添加到 JDK 5 语言以来,它一直都是一个颇具争议的话题。一部分人认为泛型简化了编程,扩展了类型系统从而使编译器能够检验类型安全;另外一些人认为泛型添加了很多不必要的复杂性。对于泛型我们都经历过一些痛苦的回忆,但毫无疑问通配符是最棘手的部分。 通配符基本介绍 泛型是一种表示类或方法行为对于未知类型的类型约束的方法,比如 “不管这个方法转载 2008-08-01 14:12:00 · 506 阅读 · 0 评论 -
[转贴] Java 理论和实践: 了解泛型
表面上看起来,无论语法还是应用的环境(比如容器类),泛型类型(或者泛型)都类似于 C++ 中的模板。但是这种相似性仅限于表面,Java 语言中的泛型基本上完全在编译器中实现,由编译器执行类型检查和类型推断,然后生成普通的非泛型的字节码。这种实现技术称为擦除(erasure)(编译器使用泛型类型信息保证类型安全,然后在生成字节码之前将其清除),这项技术有一些奇怪,并且有时会带来一些令人迷惑的后果转载 2008-08-01 14:13:00 · 386 阅读 · 0 评论 -
[转贴] Java Map 集合类简介
了解最常用的集合类型之一 Map 的基础知识以及如何针对您应用程序特有的数据优化 Map。本文相关下载: · Jack 的 HashMap 测试 · Oracle JDeveloper 10gjava.util 中的集合类包含 Java 中某些最常用的类。 最常用的集合类是 List 和Map。 List 的具体实现包括 ArrayList 和 Vect转载 2008-07-30 17:29:00 · 470 阅读 · 0 评论 -
Servlet及JSP中的多线程同步问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的同步问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程同步的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题,对于这类随转载 2008-08-04 14:39:00 · 421 阅读 · 0 评论 -
关于servlet线程安全问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。转载 2008-08-04 14:41:00 · 598 阅读 · 0 评论 -
深入研究Servlet线程安全性问题
Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。 Ser转载 2008-08-04 14:44:00 · 397 阅读 · 0 评论 -
JDK 5.0中的并发-----整理自IBM-900
概述:JDK 5.0 是用 Java 语言创建高可伸缩的并发应用程序的主要步骤。JVM 已经进行了改进,允许类利用硬件级别支持并发,并且提供了一组丰富的新并发构造块,使开发并发应用程序更加容易。 本教程将介绍 JDK 5.0 提供的用于并发的新实用程序类,并通过与现有并发原语(synchronized、wait() 和 notify())相比较,说明这些类如何提高了可伸缩性。 虽然本文档针对于各个转载 2008-08-05 13:19:00 · 1355 阅读 · 0 评论 -
一个关于Java数据类型的有趣问题
猜猜下面几条语句会输出什么? Integer i1 = 100; Integer i2 = 100; Integer i3 = 1000; Integer i4 = 1000; System.out.println(i1==i2); System.ou转载 2008-08-05 13:52:00 · 532 阅读 · 0 评论 -
线程高级---读写锁
读写锁问题也是比较常见的问题,这是因为现实中充斥着这类问题,而读者写者问题是单纯synchronized的进化版,之所以这么说,是因为它将锁分为读锁和写锁,通过读锁之间的并发性和写锁的排他性从而极大的提升性能。 在开始之前,还是先来回顾一下读写锁问题。一个数据文件或记录能被多个线程共享。有些线程要求读,而另一些则要求写或修改。允许多个读线程同时读一个共享对象,因为读操作不会使数据转载 2008-08-05 14:30:00 · 2935 阅读 · 0 评论 -
jdk concurrent threadPool---ThreadPoolExecutor原理分析
线程池 线程池是管理线程的高级技术,通常它提供了如下功能: 通过对线程的管理,更加合理的调配资源。通常,线程池里维护着一组空闲线程,并向外提供,根据系统繁忙程度动态增加或减少空闲线程的数量。比较高级的还提供了自动检测异常线程的功能。 通过维护池中既存线程,可以节省创建线程的开销,尤其是对于webserver这类处理频繁,而处理过程又比较快的程序,创建线程的开销是转载 2008-08-05 14:33:00 · 4433 阅读 · 0 评论 -
JAVA API备忘----String
有些面试经验都会发现目前市场上大多数公司都喜欢面试字符串处理,诸如字符串倒置,字符串拼接,字符串替换真是层出不穷屡试不爽。之所以会这样是跟计算机处理的对象有密切关系的。现在的计算机越来越专注于处理更多复杂的外界信息,而外界信息在计算机内存放很大部分是以串的形式。这也正是本文讨论的意义所在。 String类是一个比较值得学习的类,不仅因为字符串处理的重要性,还在于这个类用到了许多J转载 2008-08-05 14:39:00 · 851 阅读 · 0 评论 -
Java 理论与实践: 性能管理 您有规划吗?
性能管理通常被视为一种巫术,因为性能问题通常在应用程序开发完成之后才会出现。到那时,就难以确定它们的根源。然而,一旦十分准确地确定了性能问题的起因,那么修正它常常是比较简单的事情。工程师在寻找更有效的方法来执行特殊任务方面通常具有相当的创造性(有时他们的创造性过了头)。对于任何给定的性能问题,通过使用高速缓存来减少冗余计算或者只是添加更多的硬件,解决方案可能会与用更有效的算法进行替换一转载 2008-08-05 16:35:00 · 395 阅读 · 0 评论 -
Java 理论与实践: 并发集合类
在Java类库中出现的第一个关联的集合类是 Hashtable ,它是JDK1.0的一部分。 Hashtable 提供了一种易于使用的、线程安全的、关联的map功能,这当然也是方便的。然而,线程安全性是凭代价换来的―― Hashtable 的所有方法都是同步的。此时,无竞争的同步会导致可观的性能代价。 Hash转载 2008-08-05 18:47:00 · 423 阅读 · 0 评论 -
JDBC基础知识
JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面: 建立与数据库的连接。 向数据库发起查询请求。 处理数据库返回结果。 这些作用是通过一系列API实现的,其中的几个重要接口如表13-1所示。转载 2008-08-05 11:48:00 · 630 阅读 · 0 评论 -
线程高级---异步线程
异步线程是多线程编程中比较重要的编程方法。记得编写过.net的socket,提供的编程模式与传统的多线程socket编程方式不同,很长时间也没搞清楚,的确,单凭异步这个词去理解它是稍微难了些。不妨再次使用这个socket做例子来解释异步线程。 我需要做的是编写一个服务器,接受多个客户端的请求并根据需要返回数据。.net的socket是这样来做的:首先,起一个线程listene转载 2008-08-05 14:31:00 · 12956 阅读 · 0 评论 -
线程高级---线程的一些编程技巧
对于线程的编程,同步已经不在算什么技巧了,而是基础。所以在阅读本篇之前,希望对同步有很深刻的认识。而本篇是朝着技巧来的,将会在今后的阐述中以此为主线将一些简单但常见的线程编程问题解释一下。 1.提高性能的技巧。 这里主要介绍几个提高性能的多线程编程技巧,适当的使用它们将会让多线程程序快很多。 1)在阐述之前,先看看s转载 2008-08-05 14:32:00 · 1186 阅读 · 0 评论 -
JAVA API备忘----Thread
JAVA的线程是一个既简单又复杂的概念。说它简单,是因为JAVA在语言级就内置了线程,使得线程的编程相对其它语言来说要简单得多;另一方面,线程编程本身就很复杂,无论再怎么去简化,总离不开并发、通信等概念,而这些东西就有复杂性。 JAVA线程编程涉及的变化比较多,但是总结下来,基本上都是对基础知识的深入应用。本文不打算介绍每本书都必写的东西,而是试图强调一些比较重要而又需要深入理解的基础概转载 2008-08-05 14:41:00 · 925 阅读 · 0 评论 -
jive备忘--浅析jive缓存
jive的缓存非常简单,很适合初学者提升功力,这里将jive缓存几个关键的地方拿出来与大家分享一下。 首先,让我们对jive缓存的类库有个框架性认识,如图: 上图所列的,就是jive实现缓存所用的几个关键类。主要包括Cache,Cacheable,CacheObject,LinkedList以及和此类似的一整套Long的Cache类。现在把以上每个功能分别叙述一下。L转载 2008-08-05 14:42:00 · 663 阅读 · 0 评论 -
jdk concurrent collection---ConcurrentHashMap原理分析
集合是编程中最常用的数据结构。而谈到并发,几乎总是离不开集合这类高级数据结构的支持。比如两个线程需要同时访问一个中间临界区(Queue),比如常会用缓存作为外部文件的副本(HashMap)。这篇文章主要分析jdk1.5的3种并发集合类型(concurrent,copyonright,queue)中的ConcurrentHashMap,让我们从原理上细致的了解它们,能够让我们在深度项目开转载 2008-08-05 13:08:00 · 856 阅读 · 0 评论 -
jdk concurrent collection---ConcurrentLinkedQueue原理分析
先来回顾之前提到过的ConcurrentHashMap,它是一个以Concurrent开头的并发集合类,其原理是通过增加锁和细化锁的粒度来提高并发度。 另一个值得一提的Concurrent是ConcurrentLinkedQueue。这个类采用了另一种提高并发度的方式:非阻塞算法(Non-blocking),第一次实现了无锁的并发。 谈到这里,先要介绍一下非阻塞算法。其实非阻塞算转载 2008-08-05 14:21:00 · 1274 阅读 · 0 评论 -
线程高级---生产者消费者问题
说到生产者消费者问题,大部分人都不会陌生,OS课的经典问题,并且其本身就是一个计算机编程中常见的问题。可以说既是难点又是重点。对于它的应用,可以举出无数的例子,小到一个多线程程序对队列的共享互斥操作,大到目前流行的中间件产品,诸如BEA的BMQ(BEAMessage Queue),IBM的MQSerious等中间件就是将生产者消费者问题应用通用化体系化的结果。 在开始之前转载 2008-08-05 14:25:00 · 1122 阅读 · 0 评论 -
Java 理论与实践: 线程池与工作队列
贴在我们多线程 Java 编程论坛上最常见的问题之一是“怎样创建线程池?”。几乎在每个服务器应用程序中都会出现线程池和工作队列问题。本文中,Brian Goetz 探讨了线程池的动机、一些基本实现和调优技术以及一些要避免的常见危险。 为什么要用线程池? 诸如 Web服务器、数据库服务器、文件服务器或邮件服务器之类的许多服务器应用程序都转载 2008-08-05 14:34:00 · 693 阅读 · 0 评论 -
JAVA API备忘----集合
类继承关系图List:List有两个实现类,ArrayList和LinkedList,前者用数组实现,后者用链表实现,关于两者的比较,将会在分析之后给出。ArrayList:先来看看最常用的ArrayList,它继承了AbstractList,实现了List,RandomAccess, Cloneable, Serializable四个接口。常常听见ArrayList是用数组实转载 2008-08-05 14:37:00 · 1109 阅读 · 0 评论 -
java垃圾回收算法一窥
记得部门老大曾经说过,java的垃圾回收机制对于java体系结构的学习非常重要。这里将阅读的一些文献整理总结出来,记述java的几种垃圾回收算法。 垃圾回收算法有两个基本的问题:1.必须检测到垃圾对象。2.必须重新声明被垃圾对象占用的堆空间并且让堆空间可用。 可达性(reachability) 一个对象是可达的,当且仅当从可执行程序的根集开始有引用路径能访问该对象。 根集(转载 2008-08-05 15:04:00 · 1244 阅读 · 0 评论 -
Java 理论与实践: 哈希
虽然Java语言不直接支持关联数组 -- 可以使用任何对象作为一个索引的数组 -- 但在根 Object 类中使用 hashCode() 方法明确表示期望广泛使用 HashMap (及其前辈 Hashtable )。理想情况下基于散列的容器提供有效插入和有效检索;直接在对象模式中支持散列可以促进基于散列的容器的开发和使转载 2008-08-05 18:45:00 · 455 阅读 · 0 评论 -
彻底明白Java的IO系统
Input和Output1. stream代表的是任何有能力产出数据的数据源,或是任何有能力接收数据的接收源。在Java的IO中,所有的stream(包括Input和Output)都包括两种类型:1.1 以字节为导向的stream以字节为导向的stream,表示以字节为单位从stream中读取或往stream中写入信息。以字节为导向的stream包括下面几种类型:转载 2008-08-07 09:02:00 · 378 阅读 · 0 评论 -
六种异常处理的陋习
你觉得自己是一个Java专家吗?是否肯定自己已经全面掌握了Java的异常处理机制?在下面这段代码中,你能够迅速找出异常处理的六个问题吗? 1 OutputStreamWriter out = ... 2 java.sql.Connection conn = ... 3 try { // ⑸ 4 Statement stat = conn.createStatement(); 5 ResultS转载 2008-08-05 11:46:00 · 431 阅读 · 0 评论 -
JAVA API备忘----I/O
java的I/O向来以纷繁复杂著称。如此多的I/O类,以至于在第一次看到是我就一句:mygod,甚至于在用了许多次之后仍然是没有半点概念,下次再用仍然一无所知。的确,是该打压下javaI/O的嚣张气焰了,所以写这篇东西以自勉。关于JAVAI/O,网上也有足够的文章了,比较好的一篇是《彻底明白java的I/O》,整个体系上比较全,今后可以参考。 在开始之前,先记住,java有两个对转载 2008-08-05 14:42:00 · 713 阅读 · 0 评论 -
Java 理论与实践: 您的小数点到哪里去了?
虽然几乎每种处理器和编程语言都支持浮点运算,但大多数程序员很少注意它。这容易理解 ― 我们中大多数很少需要使用非整数类型。除了科学计算和偶尔的计时测试或基准测试程序,其它情况下几乎都用不着它。同样,大多数开发人员也容易忽略 java.math.BigDecimal 所提供的任意精度的小数 ― 大多数应用程序不使用它们。然而,在以整数为主的程序中有时确实会出人意料地需要表示非转载 2008-08-05 16:24:00 · 455 阅读 · 0 评论 -
Java 理论与实践: 变还是不变?
不变对象是指在实例化后其外部可见状态无法更改的对象。Java 类库中的 String 、 Integer 和 BigDecimal 类就是不变对象的示例 ― 它们表示在对象的生命期内无法更改的单个值。 不变性的长处 如果正确使用不变类,它们会极大地简化编程。因为它们只能处于一种状态,所以只要转载 2008-08-05 16:31:00 · 547 阅读 · 0 评论 -
Java同步机制浅谈 synchronized对代码作何影响?
Java对多线程的支持与同步机制深受大家的喜爱,似乎看起来使用了synchronized关键字就可以轻松地解决多线程共享数据同步问题。到底如何?――还得对synchronized关键字的作用进行深入了解才可定论。总的说来,synchronized关键字可以作为函数的修饰符,也可作为函数内的语句,也就是平时说的同步方法和同步语句块。如果再细的分类,synchronized可作用于instance变量转载 2008-08-07 16:57:00 · 563 阅读 · 0 评论 -
[转贴] AOP = Proxy Pattern + Method Reflection + Aspect DSL + 自动代码生成
学如逆水行舟,不进则退。半年多来,居无常所,没有稳定的上网环境,这次抽空上来一看,又有好多陌生的名词漫天飞舞了。落伍退化得很厉害。不过,我还能温故而知新,炒炒冷饭,写写基本的内容AOP。怀旧一番。AOP = Proxy Pattern + Method Reflection + Aspect DSL + 自动代码生成Declarative Programming & DSL转载 2008-06-24 19:15:00 · 760 阅读 · 0 评论