这次写数据库连接池主要想解决的还是servlet访问数据库获取数据的稳定性问题,于是便研究了一下,下面来讲一讲如何用java来写一个适合自己用的数据库连接池。这个东西大家并不陌生,通过使用数据连接池我们能够更好地控制程序和数据库之间建立的连接,减小数据库访问压力,也便于管理连接,提高了利用率和工作性能。
设计数据库连接池,个人认为应该注意以下几点:
1、能够控制连接池的大小
2、有一个统一的接口用于获得连接
3、使用后的连接要有一个接口能够接受并处理掉
4、连接池要有自我维护能力,比如说暂时提高连接池大小以应对可能的连接小高潮,或者处理多余的连接
ok,我们先确定连接池的数据结构:
123456789101112public class SimpleConnetionPool { private static LinkedList m_notUsedConnection = new LinkedList(); private static HashSet m_usedUsedConnection = new HashSet(); pr ...
基本算法
贪心算法:贪心算法 作者:独酌逸醉
贪心算法:贪心算法精讲 作者:3522021224
递归和分治:递归与分治策略 作者:zhoudaxia
图论
图的遍历(DFS和BFS):图的遍历 作者:jefferent
最小生成树(Prim算法和Kruskal算法):贪心算法–最小生成树 作者:独酌逸醉
Dijkstra算法:最短路径之Dijkstra算法详细讲解 作者:绿岩
Dijkstra算法: 最短路径算法—Dijkstra(迪杰斯特拉)算法分析与实现(C/C++) 作者:tankywoo
Bellman-Ford算法: 最短路径算法—Bellman-Ford(贝尔曼-福特)算法分析与实现(C/C++) 作者:tankywoo
Floyd-Warshall算法:最短路径算法—Floyd(弗洛伊德)算法分析与实现(C/C++) 作者:tankywoo
Johnson算法: ...
java
未读写在前面:
本文列出的名单是根据我自己的调查,并结合个人的经验。有可能是它们不恰恰是最流行的,但至少众所周知的。
我会不断更新这个列表,使之更加完整和准确。感谢您的意见。
一个典型的Java项目依赖于第三方库。本文总结的Java库适用于各种应用,比较流行并且广泛使用。其中一些还提供简单的示例(来自ProgramCreek)。
Java SDK 肯定是使用最广的库,所以本文的名单焦点是流行的第三方库。该列表可能并不完善,所以如果你觉得有什么应该出现在列表中的,请留下您的评论。非常感谢!
1、核心库
Apache Commons Lang:来自Apache的核心库,为java.lang API补充了许多常用的工具类,如字符串操作、对象的创建等。
Google Guava:来自谷歌的核心库,包括集合(Collection)、缓存(Caching)、支持原语(Primitives)等。(示例)
2、HTML、XML Parser
Jsoup:一个简化了的 HTML操作的库。(示例)
STaX:一组可以高效处理 XML的API。 (示例)
3、Web框架
Spring:Ja ...
Ctrl+1 快速修复(最经典的快捷键,就不用多说了)Ctrl+D: 删除当前行 Ctrl+Alt+↓ 复制当前行到下一行(复制增加)Ctrl+Alt+↑ 复制当前行到上一行(复制增加)Alt+↓ 当前行和下面一行交互位置(特别实用,可以省去先剪切,再粘贴了)Alt+↑ 当前行和上面一行交互位置(同上)Alt+← 前一个编辑的页面Alt+→ 下一个编辑的页面(当然是针对上面那条来说了)Alt+Enter 显示当前选择资源(工程,or 文件 or文件)的属性Shift+Enter 在当前行的下一行插入空行(这时鼠标可以在当前行的任一位置,不一定是最后)Shift+Ctrl+Enter 在当前行插入空行(原理同上条)Ctrl+Q 定位到最后编辑的地方Ctrl+L 定位在某行 (对于程序超过100的人就有福音了)Ctrl+M 最大化当前的Edit或View  ...
HTTP协议状态码表示的意思主要分为五类 ,大体是 :
1×× 保留
2×× 表示请求成功地接收
3×× 为完成请求客户需进一步细化请求
4×× 客户错误
5×× 服务器错误
**100 Continue
**指示客户端应该继续请求。回送用于通知客户端此次请求已经收到,并且没有被服务器拒绝。
客户端应该继续发送剩下的请求数据或者请求已经完成,或者忽略回送数据。服务器必须发送
最后的回送在请求之后。
**101 Switching Protocols **
服务器依照客服端请求,通过Upgrade头信息,改变当前连接的应用协议。服务器将根据Upgrade头立刻改变协议
在101回送以空行结束的时候。
**Successful **
=================================
**200 OK**
指示客服端的请求已经成功收到,解析,接受。
**201 Created **
请求已经完成并一个新的返回资源被创建。被创建的资源可能是一个URI资源,通 ...
1 解析自动化测试的困惑在软件工程领域,如果说有一种工作让人在痛苦中感受它的价值、在无休止的加班中体会它的苦涩、在技术的进步中体验它的快乐的话,那它一定是软件测试。计算机技术发展到今天,自动化测试工具的广泛应用使人们重新认识到测试的源动力:最优的质量成本,软件开发过程中的测试及各种质量保证活动,无疑是在追求软件质量成本和收益间的最佳平衡点。
谈到自动化测试,首先我们要明确什么情况下需要自动化。自动化测试的目的是通过自动执行测试脚本,使测试人员在更短的时间内能够更快地完成更多的软件测试,并提供以更高的频率执行测试的能力,从而有效降低测试成本、提高测试效率。从软件测试的成本来看,使用测试工具进行软件自动化测试的成本可以以下公式表示:
自动化测试的成本=测试工具成本+测试脚本的创建成本+测试脚本的维护成本
既然自动化测试的目的在于降低测试成本、提高测试效率,因此,测试团队在选择自动化测试工具时,必须在提高测试效率的同时,尽量做到自动化测试的总体成本小于手工测试成本。因此,自动化测试工具的脚本自动化创建能力和可维护性,就成了衡量自动化测试工具的重要因素。
在实际的测试工作中,一般说来,我们选择 ...
如果你使用Java语言进行开发,对于定时执行任务这样的需求,自然而然会想到使用Timer和TimerTask完成任务,我最近就使用 Timer和TimerTask完成了一个定时执行的任务,实现得没有问题,但当在TimerTaks的run()方法中使用 Thread.sleep()方式时,可能会出现奇怪的现象,好像Timer失效了,网上查了一下,倒是有人遇到了相同的问题,但是并没有找到一篇解释为什么会出现这种情况,期待有某位达人能够分析清楚这个问题。
遇到了这样的问题,始终让我不爽,于是看了一下Timer的源码,先将了解到的内容整理如下,接下来再看看Thread.sleep()的源码,看能否找到问题所在。
在Java中,与定时任务执行相关的类很少,只有Timer、TimerTask、TimerThread、TaskQueue几个,其中每个类的职责大致如下:
Timer:一个Task的调度类,和TimerTask一样,暴露给最终用户使用的类,通过schedule方法安排Task的执行计划。该类通过TaskQueue和TimerThread类完成Task的调度。
TimerTask:实现Ru ...
javagc
未读学C/C++出身的我,对Java有一点非常困惑,那就是缺乏计算对象占用内存大小的机制。而在C++中就可以通过sizeof运算符来获得基本类型以及类实例的大小。C和C++中的这个操作符对于指针运算、内存拷贝和IO操作都非常有用。
Java中并没有一个类似的运算符。事实上,Java也不需要这种运算符。Java中基本类型的大小在语言规范中已经定义了,而C/C++中基本类型大小则跟平台相关。Java有自己的通过序列化构建的IO框架。再者,由于Java中没有指针,因此指针运算和内存块拷贝之类的操作也不存在。
但是,Java程序员有时还是希望能知道一个Java对象到底用了多少内存的。不过这个问题的答案并不简单。
首先要区分清楚的是shallow size和deep size。Shallow size是指对象自身占用的内存大小,其引用对象的大小不算在内。而deep size,则是自身所占内存大小和其递归引用的所有对象所占内存大小的总和。大多数情况下,你会希望获得一个对象的deep size,但是为了知道这个值,首先要知道怎么算shallow size,下面我来介绍一下。
有人抱怨 ...
系统架构
未读美国程序员Jon Scott Stevens,公布了他的创业公司所使用的开发工具清单。
他的语言平台是Java,开发项目是一个网站(还未上线)。所用到的工具都是开源的,可以免费得到。
在目前的创业者之中,用Java作为网站开发语言的人似乎很少。这当然不是没有原因的,Java看上去确实不像是最便捷的网站开发工具,给人的感觉是用起来麻烦又费事。
但是不可否认的是,Java的平台很成熟,各种工具包、工具库非常多,而且JVM虚拟机更是先进的技术。另外,Google App Engine平台提供免费的Java主机,所以使用Java建站也不失为一种合理的选择。
我把他的工具清单抄在下面。如果有一天,我也用Java建站,就可以参考了。
=============================& ...
前言:
在J2EE中,注解使得开发更加便利,省去了生成XML文件的过程,在Hibernate实体声明中,可以简简单单的用几个注解就可以免去生成一个XML的文件操作。这里就主要论述一下annotation的用法和自定义注解处理器。当在创建描述符性质的类或接口时,有大量重复性的工作时候,就可以利用注解来实现。
基本语法:
Java目前包括三种标准注解和四种元注解。元注解主要负责注解其他注解的。
三种标准注解:
@Override,表示当前的方法定义覆盖了父类中的方法。必须要有相同的方法签名即(方法名,参数类型,参数顺序,参数个数)都一样。否则在编译过程中发出错误提示。
@Deprecated,对不应该再使用的方法添加注解,当使用这个方法的时候,会在编译时候显示提示信息。
@SuppressWarnings,关闭不当的编译器报警信息
四种元注解:
@Target,表示该注解可以用什么地方。
如CONSTRUCTOR,构造器声明;FIELD,域声明;METHOD,方法声明;TYPE,类,接口或enum声明
@Retention,表示需要在什么级别保存该注解信息。
如SOURCE,注 ...
