随笔分类 - Java基础
摘要:有如下情况下可以用到内存文件映射技术解决问题: 1.不要复制文件中所有的数据,只需要修改文件中局部的数据。 2.并行/分段处理大文件。 如下代码示使用javaNIO局部修改文件中指定位置的部分数据: /** * 修改文件中的某一部分的数据测试:将字定位置的字母改为大写 * @param fName :要修改的文件名字 * @param start:起始字节 * @param len:要修改多少个字节 * @return :是否修改成功 * @throws E...
阅读全文
摘要:public class Singleton { private static class Holder { // lazy class static final Singleton instance = new Singleton(); } public static Singleton getInstance() { return Holder.instance; } }
阅读全文
摘要:1. 首先String不属于8种基本数据类型,String是一个对象。因为对象的默认值是null,所以String的默认值也是null;但它又是一种特殊的对象,有其它对象没有的一些特性。2. new String()和new String(“”)都是申明一个新的空字符串,是空串不是null;3. String str=”kvill”; String str=new String (“kvill”);的区别: 在这里,我们不谈堆,也不谈栈,只先简单引入常量池这个简单的概念。 常量池(constant pool)指的是在编译期被确定,并被保存在已编译的.class文件中的一些数据。它包括了关于类、
阅读全文
摘要:ThreadLocal是什么早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很简洁地编写出优美的多线程程序。ThreadLocal很容易让人望文生义,想当然地认为是一个“本地线程”。其实,ThreadLocal并不是一个Thread,而是Thread的局部变量,也许把它命名为ThreadLocalVariable更容易让人理解一些。当使用ThreadLocal维护变量时,ThreadLocal为每个使用该变量的线程提供独立的变量副本,所以每一个线程都可以独立地改变自己的副本,而不会
阅读全文
摘要:关于volatile在JVM 1.2之前,Java的内存模型实现总是从主存读取变量,是不需要进行特别的注意的。而随着JVM的成熟和优化,现在在多线程环境下volatile关键字的使用变得非常重要。在当前的Java内存模型下,线程可以把变量保存在本地内存(比如机器的寄存器)中,而不是直接在主存中进行读写。这就可能造成一个线程在主存中修改了一个变量的值,而另外一个线程还继续使用它在寄存器中的变量值的拷贝,造成数据的不一致。要解决这个问题,只需要像在本程序中的这样,把该变量声明为volatile(不稳定的)即可,这就指示JVM,这个变量是不稳定的,每次使用它都到主存中进行读取。一般说来,多任务环境下
阅读全文
摘要:简历和自我介绍上经常能够读到“精通Java”这样的话,有人和我说,精通Java的人太多了,精通Java已经不能算亮点、不能给自己加分了。可是事实真是这样吗?对于语言的学习,我有一种观点,一是纵向,即要选择一门自己认为合适的语言学到有相当的深度。二在于横向,即要学习不同类型、不同历史和不同门派的语言:既有底层的语言,也有高级语言;接触一些动态语言、函数式语言;了解一些不同语言的编程范型和编程方式,比如基于原型编程、面向切面编程、命令式编程等等;最好能关注一门年纪尚浅,甚至小众的语言,了解一门语言的发展。横向类比能够带来对一门语言的不同认识,但是,有广度而没有深度的专家是可笑的,深入地学习一门语言
阅读全文
摘要:应用程序并行计算遇到的问题 当硬件处理能力不能按摩尔定律垂直发展的时候,选择了水平发展。多核处理器已广泛应用,未来处理器的核心数将进一步发布,甚至达到上百上千的数量。而现在 很多的应用程序在运行在多核心的处理器上并不能得到很好的性能提升,因为应用程序的并发处理能力不强,不能够合理有效地的利用计算资源。线性的计算只能利 用n分之一的计算支援。 要提高应用程序在多核处理器上的执行效率,只能想办法提高应用程序的本身的并行能力。常规的做法就是使用多线程,让更多的任务同时处理,或者让一部分操作 异步执行,这种简单的多线程处理方式在处理器核心数比较少的情况下能够有效地利用处理资源,因为在处理器核心比较少的
阅读全文
摘要:The fork/join framework is an implementation of the ExecutorService interface that helps you take advantage of multiple processors. It is designed for work that can be broken into smaller pieces recursively. The goal is to use all the available processing power to enhance the performance of your app
阅读全文
摘要:一、对于java bean,就是一个java模型组件,他为使用java类提供了一种标准的格式,在用户程序和可视化管理工具中可以自动获得这种具有标准格式的类的信息,并能够创建和管理这些类。java bean 可以使应用程序更加面向对象,可以把数据封装起来,把应用的业务逻辑和显示逻辑分离开,降低了开发的复杂程度和维护成本!JavaBean 是一种JAVA语言写成的可重用组件。为写成JavaBean,类必须是具体的和公共的,并且具有无参数的构造器。JavaBeans 通过提供符合一致性设计模式的公共方法将内部域暴露称为属性。众所周知,属性名称符合这种模式,其他Java 类可以通过自省机制发现和操作这
阅读全文
摘要:java反射效率到底如何,花了点时间,做了一个简单的测试.供大家参考.测试背景: 1. 测试简单Bean(int,Integer,String)的set方法2. loop 1亿次3. 测试代码尽可能避免对象的创建,复发方法的调用,仅仅测试set方法的耗时测试结果:场景本机测试结果(XP,双核,2G)服务器测试结果(Linux,XEN虚拟机,8核,5.5G) 方法直接调用235MS190MSJDK Method调用29188MS4633MSJDK Method调用(稍作优化)5672MS4262MSCglib FastMethod调用5390MS2787MS得出一个感性的结果: 1.JDK反射效
阅读全文
摘要:Both version numbers (1.6.0 and 6) are used to identify this release of the Java Platform. Version 6 is the product version, while 1.6.0 is the developer version. The number 6 is used to reflect the evolving level of maturity, stability, scalability and security of Java SE. 2个版本号(1.6.和 6)都用来标识这个版本的J
阅读全文
摘要:1)优势多线程读取并修改一个资源时,我们过去通常使用 synchronized同步锁,这个是有性能损失的,很多情况下:资源对象总是被大量并发读取,偶尔有一个线程进行修改,也就是说:以读为主,修改不是 很频繁,那么我们在JDK5.0中用ReentrantReadWriteLock就获得比synchronized更高并发性能,高并发性能是我使用 JDK5.0主要目的,而不是annotation和泛型等设计优点。ReentrantReadWriteLock被大量使用在缓存中,因为缓存中的对象总是被共享大量读操作,偶尔修改这个对象中的子对象,比如状态,我们可以使用ReentrantReadWriteL
阅读全文
摘要:1.getPath()与getAbsolutePath()的区别public static void test1(){ File file1 = new File(".\\test1.txt"); File file2 = new File("D:\\workspace\\test\\test1.txt"); System.out.println("-----默认相对路径:取得路径不同------"); System.out.println(file1.getPath()); System.out.println(file1...
阅读全文
摘要:获取 BufferedImage对象:BufferedImage bufferedImage = null; try { bufferedImage = ImageIO.read(new FileInputStream(path)); } catch (IOException e) { e.printStackTrace(); //To change body of catch statement use File | Settings | File Templates. }计算缩放比例按宽度缩放: do...
阅读全文
摘要:下面是网络上流传的关于提高性能的做法,本人对其中一部分做法做了些点评:1. 尽量在合适的场合使用单例使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面:第一,控制资源的使用,通过线程同步来控制资源的并发访问;第二,控制实例的产生,以达到节约资源的目的;第三,控制数据共享,在不建立直接关联的条件下,让多个不相关的进程或线程之间实现通信。【支持】2. 尽量避免随意使用静态变量要知道,当某个对象被定义为stataic变量所引用,那么gc通常是不会回收这个对象所占有的内存,如Java代码public class A{stati
阅读全文
摘要:首先看JAVA重载的规则:1、必须具有不同的参数列表;2、可以有不同的返回类型,只要参数列表不同就可以;3、可以有不同的访问修饰符;4、可以抛出不同的异常;5、方法能够在一个类中或者在一个子类中被重载。示例代码:public class HelloWorld{ public HelloWorld() { } public static void main(String[] argc) { HelloWorld w = new HelloWorld(); System.out.println(w.Multi(2,3)); System.out.println(w.Multi(2,3,4))...
阅读全文
摘要:我心目中最好的框架组合是: 表示层:spring mvc 3.1 + annotation 控制层:spring 3.1 持久层:hibernate 3.6 +jdbcTemplate 后台列表控件:displaytag 1.2 Ajax框架: DWR 3 JS框架 : Jquery 缓存机制:spring 3.1 cache + ehcache/memcached 静态化机制: Freemarker静态化/spring mvc伪静态化 页面技术: EL + JSTL +JSP 安全框架 spring security 搜索引擎: Lucene 中文分词:IKAnalyzer 模板引擎: ap
阅读全文
摘要:下面是我对面向接口编程的理解优点:1.程序结构清晰,使用方便2.接口经过合理设计后,有利于程序设计的规范化,并可以并行开发,提高工作效率3.实现了程序的可插拔性,对于不同的需求切换不同的实现,降低了耦合度,随着系统复杂性的提高这个优势会越来越明显4.允许多重实现,弥补了继承的缺陷缺点:1.增加了设计的复杂度,不佳的接口的设计会对所有使用接口的层都有影响,并且并不是所有的程序的都需要使用接口,接口只有在系统的复杂性达到一定程度才能体现出它的优势,否则只是纯粹的增加工作量,当然选择接口是不会错的,这需要自己的衡量2.可能会降低代码的可复用性3.可能会降低程序的执行效率使用接口的经典案例:1.JDB
阅读全文
摘要:1 简介1.1什么是tsung ?Tsung (以前称为IDX-Tsunami)是一个分布是负载测试工具。它与协议无关,目前可以用来测试HTTP,WebDAV,SOAP,PostgreSQL, MySQL, LDAP, and Jabber/XMPPIt is distributed under the GNU General Public License version 2.1.2 什么是erlang 为什么在这里erlang很重要。tsung 的主要特点是,他可以使用单CPU模拟大量用户,当用于集群中时,你使用它便能产生真正的负载,并且容易安装和维护。Tsung 使用erlang开发,er
阅读全文
摘要:要想成为高效的程序员,你需要具备一定的综合素质才能够让你用你所掌握的技能、经验和知识编写出有效的代码。有一些开发人员在技术方面具备一定的技巧,但 他们永远无法成为高效的程序员,就是因为他们缺乏所需的其它几项特质。本文将给出成为一个伟大的程序员所必须具备的7项特质。 1. 主动学习新的技术和非技术两方面的知识不好的程序员只有在实在不行的时候才开始进行知识学习。良好的程序员会主动学习新的技术知识。伟大的程序员不仅会自行学习新的技术知识,而且还会学习非技术方面的知识,对各种知识来源都有一种开放的心态,而不会像有的人那样固步自封。具体点说,不好的程序员只有在参加了采用WPF的项目时才开始学习XAM;良
阅读全文