java编程思想
文章平均质量分 83
Java我人生
java我人生,即使跑在路上被拌倒无数次,也不要规规矩矩走一辈子,岁月不止,奋斗不息,在为生活奔波的同时更希望为技术而痴狂,能够拥有自己的一家互联网公司!
展开
-
java集合中LinkedList源码浅析
LinkedList就传说中的双向循环链表了。是List 接口的链接列表实现。实现所有可选的列表操作,并且允许所有元素(包括 null)。除了实现 List 接口外,LinkedList 类还为在列表的开头及结尾 get、remove 和 insert 元素提供了统一的命名方法。这些操作允许将链接列表用作堆栈、队列或双端队列。链表操作优点:1.因为每个结点记录下个结点的引用,则在进转载 2015-01-07 16:58:54 · 831 阅读 · 0 评论 -
Java中ArrayList源码深入分析(JDK1.6)
ArrayList就是传说中的动态数组,就是Array的复杂版本,它提供了如下一些好处:动态的增加和减少元素、灵活的设置数组的大小...... 认真阅读本文,我相信一定会对你有帮助。比如为什么ArrayList里面提供了一个受保护的removeRange方法?提供了其他没有被调用过的私有方法? 首先看到对ArrayList的定义:[java] v转载 2015-01-04 14:28:53 · 1938 阅读 · 0 评论 -
数据结构与算法 ---- 线性表 及Java实现 顺序表、链表、栈、队列
数据结构与算法是程序设计的两大基础,大型的IT企业面试时也会出数据结构和算法的题目,它可以说明你是否有良好的逻辑思维,如果你具备良好的逻辑思维,即使技术存在某些缺陷,面试公司也会认为你很有培养价值,至少在一段时间之后,技术可以很快得到提高。同时,它也是软考的重点,我们需要对这部分的内容进行一下总结。 我们先看一下数据结构和算法的整体内容。转载 2015-01-04 14:57:46 · 7195 阅读 · 0 评论 -
commons-lang中常用方法
public class TestLangDemo { public void charSetDemo() { System.out.println("**CharSetDemo**"); CharSet charSet = CharSet.getInstance("aeiou"); String demoStr = "The quick转载 2015-01-24 22:47:16 · 12845 阅读 · 2 评论 -
BidiMapMultiMapLazyMap-apache-commons-collections中Map辅助类的使用
今天自己利用周末的时间额外学习了和测试了一下commons-collections中Map辅助类的,感觉还是不错的,挺有用的,尽管我们用JDK类里给的工具经过业务逻辑处理也能达到相同的作用与效果,但毕竟作为一个开源的工具类辅助类,apache推出来的,对它有个了解还是有必要的,使用起来很方便和顺手,特意在这里记录一下,和大家一同分享与进步,同时加深自己的印象(本人用的3.2版本)。BidiMa原创 2015-01-25 21:56:24 · 2573 阅读 · 0 评论 -
java集合中HashMap原理详解
HashMap在Java开发中有着非常重要的角色地位,每一个Java程序员都应该了解HashMap。主要从源码角度来解析HashMap的设计思路,并且详细地阐述HashMap中的几个概念,并深入探讨HashMap的内部结构和实现细节,讨论HashMap的性能问题。1. HashMap设计思路以及内部结构组成HashMap设计思路 Map是一种以键值对存储数据的转载 2015-01-07 16:19:42 · 2522 阅读 · 2 评论 -
使用java.util.concurrent.ThreadFactory来创建线程
在How to do in java网站看到很多不错的好文章,《Creating Threads Usingjava.util.concurrent.ThreadFactory》就是其中一篇,它简单介绍了如何使用ThreadFactory来创建线程,最重要的是这中做的好处,为什么有时候要用它创建,下面就让我们看看这篇文章吧。工厂设计模式是一种最常用的设计模式在java中。这是一个创建型翻译 2015-01-10 16:08:54 · 10279 阅读 · 0 评论 -
java线程池的原理、实现和应用
一. 线程池:其实到目前为止我们接触过很多关于池的概念:string池、连接池,之所以要用这个池,目的只有一个:资源的重复使用。线程池:首先创建一些线程,当服务器接收到一个客户请求后,就从线程池中取出一个空闲的线程为之服务,服务完后并不关闭该线程,而是将该线程还回到线程池中。在线程池的编程模式下,任务是提交给整个线程池的,而不是直接交给某个线程,线程池在拿到任务后,它就在内部找有无空闲转载 2015-01-13 09:51:46 · 3045 阅读 · 0 评论 -
java集合框架中HashMap源码(基于JDK1.6)
基于哈希表的 Map 接口的实现。此实现提供所有可选的映射操作,并允许使用 null 值和 null 键。(除了非同步和允许使用 null 之外,HashMap 类与 Hashtable 大致相同。)此类不保证映射的顺序,特别是它不保证该顺序恒久不变。此实现假定哈希函数将元素适当地分布在各桶之间,可为基本操作(get 和 put)提供稳定的性能。迭代 collection 视图所需原创 2015-01-07 16:28:08 · 1332 阅读 · 0 评论 -
java集合框架中Hashtable源码(基于JDK1.6)
此类实现一个哈希表,该哈希表将键映射到相应的值。任何非 null 对象都可以用作键或值。为了成功地在哈希表中存储和获取对象,用作键的对象必须实现 hashCode 方法和equals 方法。Hashtable 的实例有两个参数影响其性能:初始容量 和加载因子。容量 是哈希表中桶 的数量,初始容量 就是哈希表创建时的容量。注意,哈希表的状态为open:在发生“哈希冲突”的情况下,单个原创 2015-01-07 20:37:11 · 870 阅读 · 0 评论 -
用JDK中的 jps、jinfo、jstat、jstack、jmap、jconsole等命令对JVM,内存,线程进行分析和故障诊断
JDK提供了几个很实用的工具,如下:jinfo:观察运行中的java程序的运行环境参数:参数包括Java System属性和JVM命令行参数,java class path等信息。命令格式:jinfo 进程pidjps:用来显示本地的java进程,可以查看本地运行着几个java程序,并显示他们的进程号。命令格式:jps 或 jps 远程服务ip地址 (默认端口1099)转载 2015-02-02 22:30:37 · 3814 阅读 · 0 评论 -
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试
Struts2、SpringMVC、Servlet(Jsp)性能对比 测试 。Servlet的性能应该是最好的,可以做为参考基准,其它测试都要向它看齐,参照它。做为一个程序员,对于各个框架的性能要有一个基本的认知,便于选型时做出正确的决策。在测试中发现了什么也不要大喊大叫,因为这些都是Java程序员的基础知识。 人人都要了解。----------------------转载 2015-02-02 20:59:44 · 5707 阅读 · 1 评论 -
再论java程序性能小优化(太多了,网上到处都是,不多说,略说一二,我经常不注意的小项!我的博客处女作)
经常来CSDN看看各个技术专家们的博客,确实是太多的牛人了,经常为他们独特的见解或者层层深入的分析感到高兴感到欣喜,每遇到这种技术文章,都会耐心的品味和学习!我承认,自己还是一个初出茅庐的程序猿毕业生,游览器收藏夹满满的全是各种技术文章技术问题的收藏,还分着各种文件夹,自己确“懒得”也写写博客记录自己的见解和学到的知识和大家一块分享,也许是没养成习惯吧,这种技术类的,这种电子式的习惯,有点效率低的原创 2015-01-05 21:06:27 · 1146 阅读 · 1 评论 -
java线程中Callble和Future的使用
Callable是java.util.concurrent包中一个接口,Callable 接口类似于Runnable,两者都是为那些其实例可能被另一个线程执行的类设计的。但是Runnable 不会返回结果,并且无法抛出经过检查的异常。此接口中就声明了一个方法call(),这个方法计算结果,如果无法计算结果,则抛出一个异常。Executors 类包含一些从其他普通形式转换成 Callable原创 2015-01-10 23:28:07 · 5012 阅读 · 0 评论 -
String中substring方法内存泄漏问题
众所周知,JDK中以前String类中的substring方法存在内存泄漏问题,之所以说是以前,是因为JDK1.7及以后的版本已经修复了,我看都说JDK1.6的版本也存在这个问题,但是我本机上安装的1.6看了看源码不存在内存泄漏问题啊,又看了1.7的源码,和我本机的1.6的一样,是不是我的1.6版版其实是1.7的?!唉,不管了,反正1.7版本肯定没有这个问题(1.5及更老版本肯定有)了,大家就放心原创 2015-02-08 21:12:01 · 7039 阅读 · 2 评论 -
Java反射机制深入研究
Java 反射是Java语言的一个很重要的特征,它使得Java具体了“动态性”。 在Java运行时环境中,对于任意一个类,能否知道这个类有哪些属性和方法?对于任意一个对象,能否调用它的任意一个方法?答案是肯定的。这种动态获取类的信息以及动态调用对象的方法的功能来自于Java 语言的反射(Reflection)机制。 Java 反射机制主要提供了以下功能:在运行时判断任意一个对象转载 2015-01-04 11:06:21 · 1725 阅读 · 0 评论 -
一个java对象到底占多大内存?
最近在读《深入理解Java虚拟机》,对Java对象的内存布局有了进一步的认识,于是脑子里自然而然就有一个很普通的问题,就是一个Java对象到底占用多大内存?在网上搜到了一篇博客讲的非常好:http://yueyemaitian.iteye.com/blog/2033046,里面提供的这个类也非常实用:import java.lang.instrument.Instr转载 2015-02-09 22:01:42 · 1508 阅读 · 0 评论 -
如何高效地判断数组中是否包含某特定值
如何检查一个未排序的数组中是否包含某个特定值,这是一个在Java中非常实用并且频繁使用的操作。另外,这也是Stack Overflow上面非常受关注的问题。在得票数最多的答案中,可以看到,检查数组中是否包含特定值可以用多种不同的方式实现,但是时间复杂度差别很大。下面,我将为大家展示各种方法及其需要花费的时间。1.检查数组中是否包含特定值的四种不同方法1)使用List:翻译 2015-02-11 23:25:22 · 4601 阅读 · 0 评论 -
Java中数组的存储与内存分配
Java数组及其内存分配[日期:2013-03-28]来源:Linux社区 作者:xiaoxuetu[字体:大 中 小]几乎所有的程序设计语言都支持数组。Java也不例外。当我们需要多个类型相同的变量的时候,就考虑定义一个数组。在Java中,数组变量是引用类型的变量,同时因为Java是典型的静态语言,因此它的数组也是静态的,转载 2015-02-26 20:13:36 · 6083 阅读 · 0 评论 -
java中字符串String的深入浅出
大家知道我们在java中定义一个字符串是这样定义的 String str=”abc”;然而还可以这样来定义 String str=new String(“abc”);那么这两者的区别是什么呢?我们先来看看代码:String str="abc"; String str1=new String("abc"); System.out.println(str转载 2015-02-26 21:26:20 · 1831 阅读 · 1 评论 -
Array.asList:数组转list时你一定要知道的“陷阱”!
最近开发中,业务上处理,经常用到asList方法,这让我不经想起了它的很多容易让人犯错的地方或者误解的地方,所以就想抽出时间来,整理一下,和大家分享出来,深夜了,话不多说,主要以代码为主,简易的代码,你一看就知道了!大家都知道这个方法是将数组转成list,是JDK中java.util包中Arrays类的静态方法。大家使用时一定要注意(请看代码): String原创 2015-02-12 22:57:47 · 45849 阅读 · 17 评论 -
Bag集合工具类(apache-commons-collections3.2工具包)在java中的使用
Bag 是在 org.apache.commons.collections 包中定义的接口 ,也是集合的一种扩充工具类,当然结合用JDK中的map类进行相应的逻辑处理,也能实现Bag类的功能,但apache推出来肯定有它的原因和用处,知道有这么一个类了解它大概的用法,开发的时候真遇到这种情况,知道有这么个工具在你身边等着你用呢。此接口定义源码:public interface Ba原创 2015-01-25 21:19:20 · 11735 阅读 · 2 评论 -
IT行业,唯一不变的原则—“变”!
最为一个程序猿的我,尽管刚出来,但还是对这个行业的变化之快很感概。应该是,也确实是,IT行业因为“变”才能跟上和推动整个人类的发展,IT行业唯一不变的原则就是“变”,尤其是互联网上的技术,刚盛行没几年技术就能很快被更好更新的技术替代了,很多技术都经历这个淘汰的过程,从大一,到现在,我也是深有些体会。 我认为,作为一个IT工作者,要时时刻刻准备并很快跟上这种“变”,不管你是小小的程序猿原创 2015-02-13 23:02:45 · 2016 阅读 · 0 评论 -
spring持久类po或者javabean为什么常常实现序列化?
无论用hibernate或者mybatis结合spring做开发还是其他,系统里持久类往往要实现序列化, implements Serializable。我还是比较好奇,为什么要这样做呢?一直只知道个大概,学习hibernate和mybatis时,一些书中有几个字的介绍,有的书中举得例子或者和spring整合时举得例子也没实现序列化,有时可能在你项目上,如果不是实现serializable接口,可原创 2015-02-15 10:15:11 · 9768 阅读 · 1 评论 -
那些年,我关于java集合的"老照片"!
今天翻书无意中在一本很破的java书中翻到2张我大二时画的集合的各个类的关系及各个类应该注意的地方的“图”,看了一会想想那时的我,还是挺有意思的。当时记得用“饭卡”比着话的,现在再看看画的“形状”和里边的内容,只能呵呵了。当时用来好长时间去画这2张图,就是秉着理清、整理、弄清集合的心理去完成这2张“图”,当时画完很是欣喜,恐怕丢了,特意去打印店里复印了3份,分别加在不同的书里。现在看来,里边的涉及原创 2015-02-13 21:58:30 · 1813 阅读 · 3 评论 -
java序列化一定要应该注意的6个事项!
1、如果子类实现Serializable接口而父类未实现时,父类不会被序列化,但此时父类必须有个无参构造方法,否则会抛InvalidClassException异常。2、静态变量不会被序列化,那是类的“菜”,不是对象的。3、transient关键字修饰变量可以限制序列化。4、虚拟机是否允许反序列化,不仅取决于类路径和功能代码是否一致,一个非常重要的一点是两个类的序列化 ID 是否一致,原创 2015-02-15 11:06:21 · 12544 阅读 · 0 评论 -
Java HashMap的工作原理
面试的时候经常会遇见诸如:“java中的HashMap是怎么工作的”,“HashMap的get和put内部的工作原理”这样的问题。本文将用一个简单的例子来解释下HashMap内部的工作原理。首先我们从一个例子开始,而不仅仅是从理论上,这样,有助于更好地理解,然后,我们来看下get和put到底是怎样工作的。我们来看个非常简单的例子。有一个”国家”(Country)类,我们将要用Country对象翻译 2015-03-01 17:00:54 · 1779 阅读 · 0 评论 -
java中预处理PrepareStatement为什么能起到防止SQL注入的作用??!!
大家都知道,java中JDBC中,有个预处理功能,这个功能一大优势就是能提高执行速度尤其是多次操作数据库的情况,再一个优势就是预防SQL注入,严格的说,应该是预防绝大多数的SQL注入。 用法就是如下边所示:String sql="update cz_zj_directpayment dp"+ "set dp.projectid = ? where dp.payid= ?";原创 2015-03-02 21:11:50 · 31914 阅读 · 5 评论 -
Java并发的四种风味:Thread、Executor、ForkJoin和Actor
这篇文章讨论了Java应用中并行处理的多种方法。从自己管理Java线程,到各种更好几的解决方法,Executor服务、ForkJoin 框架以及计算中的Actor模型。Java并发编程的4种风格:Threads,Executors,ForkJoin和Actors我们生活在一个事情并行发生的世界。自然地,我们编写的程序也反映了这个特点,它们可以并发的执行。当然除了Python代码(译者注:链翻译 2015-03-03 21:51:28 · 3028 阅读 · 0 评论 -
读取Excel表格报错问题分析总结(用apache POI读取,表格稍微改动就报错导入不进去)
首先是建立在用apachePOI解析Excel时一定几率是能成功解析导入的,如果一点也不能的话,也可以参考看看我总结的原因,也许也是导致你屡次导入不能的原因之一。 这个问题是前天客户反应的,不用下载的好的模版套进内容再导入的话就报错,怎么也导入不进去,客户即想用从其他直接导出的数据导入我们的产品中用想能自己复制一些其他的内容到自己建立的excel表格中导入进去原创 2015-02-11 22:21:02 · 6683 阅读 · 1 评论 -
StringBuilder性能真的优于StringBuffer?!!!!
大家都知道,StringBuilder和StringBuffer主要区别是前者不是线程安全的,后者是线程安全的,余JDK预留的对外接口几乎是一模一样的,所以在确定线程安全的环境的前提下,优先使用SringBuilder,肯定不相同条件下的StringBuffer性能要高,因为那维护同步数据的正确性肯定要消耗资源的。 然而在今天的事业部代码质量报告会上,我在讲解StringBuild原创 2015-03-05 21:16:05 · 8935 阅读 · 6 评论 -
哪种Map遍历方法更优?!—Map遍历方法的正确选择
我们都知道遍历Map一般有3种方法,values(),keySet()和entrySet(),常见的是keySet用的多,简单容易理解,entrySet()是返回Map中的静态内部类Entry类类型的Set实例,当然了你别说forEach,forEach只是一种代替for(int i=0;;)和while()遍历的一种方式,底层也是用迭代器实现的,只不过把部分东西隐藏了,建议大家平常开发中能用fo原创 2015-03-05 21:01:07 · 13757 阅读 · 2 评论 -
Java代码优雅之道-Guava
Guava,中文是石榴的意思,Guava项目,是基于java的Google的开源的工具类库,包含了许多被Google的java项目广泛依赖的核心库,例如:集合、缓存、原生类型支持、并发库、通用注解、字符串处理、I/O 等等。 所有这些工具每天都在被Google的工程师应用在产品服务中。 为什么项目开发中我们要选择Guava,借用网友的回答:•瓜娃是java API蛋糕上的冰激凌原创 2015-03-24 23:21:04 · 11998 阅读 · 0 评论 -
JAVA使用Dom4j实现字符串和xml文件相互转换
在文章《JAVA 使用Dom4j 解析XML》中,介绍了使用Dom44j解析XML,比如节点的解析遍历、节点的增加、删除、写入文件等操作,本文我们继续使用dom4j实现xml字符串与xml文件之间的转换。1、xml文档或节点转换为字符串(1)代码[java] view plaincopyprint?//xml文档或节点转换为字符串 @Test转载 2015-01-19 21:46:32 · 3017 阅读 · 0 评论 -
java虚拟机JVM内存的配置与调优
JVM内存的设置的原理默认的java虚拟机的大小比较小,在对大数据进行处理时java就会报错:java.lang.OutOfMemoryError。设置jvm内存的方法,对于单独的.class,可以用下面的方法对Test运行时的jvm内存进行设置。java -Xms64m -Xmx256m Test-Xms是设置内存初始化的大小-Xmx是设置最大能够使用内存的大小(最好不要超过转载 2015-03-08 23:59:15 · 1474 阅读 · 0 评论 -
字符编码 ASCII,Unicode 和 UTF-8扫盲
今天中午,我突然想搞清楚Unicode和UTF-8之间的关系,于是就开始在网上查资料。结果,这个问题比我想象的复杂,从午饭后一直看到晚上9点,才算初步搞清楚。下面就是我的笔记,主要用来整理自己的思路。但是,我尽量试图写得通俗易懂,希望能对其他朋友有用。毕竟,字符编码是计算机技术的基石,想要熟练使用计算机,就必须懂得一点字符编码的知识。1. ASCII码我们知道,在计算机内部,所有的翻译 2015-03-14 14:21:27 · 1806 阅读 · 0 评论 -
预处理语句的使用-代码典型缺陷分析(一)
BAD: 尽管这块代码能够正确执行,能够完成都应的业务逻辑的处理,但这个预处理语句使用是有问题的。因为这个SQL语句是动态拼接而来的,这样处理和Statement直接处理几乎一点区别也没有,一点也没体现出运用PrearedStatement的优势。 正确使用是以参数化的形式给preparedStatement传参数,而不是动态拼接SQL语句,如下:原创 2015-03-08 17:08:13 · 3915 阅读 · 0 评论 -
每个Java程序员必须知道的5个JVM命令行标志
本文是Neward & Associates的总裁Ted Neward为developerworks独家撰稿“你不知道5个……”系列中的一篇,JVM是多数开发人员视为理所当然的Java功能和性能背后的重负荷机器。然而,我们很少有人能理解JVM是如何进行工作的—像任务分配和垃圾收集、转动线程、打开和关闭文件、中断和/或JIT编译Java字节码,等等。不熟悉JVM将不仅会影响应用程序性能,而且当J翻译 2015-03-20 22:34:00 · 2291 阅读 · 0 评论 -
循环体中用“+”拼接字符串-代码典型缺陷分析(二)
如上图所示,在一个循环体中用“+”动态拼接字符串,这是我们开发中非常的忌讳的方式,虽然它也能达到我们想要的效果但是性能上包括时间和内存都造成了很大程度的浪费,尤其是访问量很高的循环次数很多的情况下,很容易引起内存溢出。 因为“+”拼接字符串,每拼接一次都是再内存重新开辟一个新的内存区域(堆里边),然后把得到的新的字符串存在这块内存,字符串如果很大,循环次多又多,那么浪费了很多时间和原创 2015-03-16 22:04:30 · 13074 阅读 · 1 评论 -
JVM性能优化,提高Java的伸缩性
很多程序员在解决JVM性能问题的时候,花开了很多时间去调优应用程序级别的性能瓶颈,当你读完这本系列文章之后你会发现我可能更加系统地看待这类的问题。我说过JVM的自身技术限制了Java企业级应用的伸缩性。首先我们先列举一些主导因素。主流的硬件服务器提供了大量的内存分布式系统有大量内存的需求,而且该需求在持续增长一个普通Java应用程序所持有的对空间大概在1GB~4GB,这远远低于一个硬件服务翻译 2015-03-20 22:37:50 · 2433 阅读 · 0 评论