自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

keepLearning的专栏

以应用为本,技术让世界更美好

  • 博客(24)
  • 资源 (2)
  • 收藏
  • 关注

原创 JVM内存模型及垃圾回收算法

JVM内存模型总体架构图及垃圾回收算法

2013-12-31 17:29:44 5879 1

转载 Spring MVC和Struts2的区别

1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同。2. 性能:spring会稍微比struts快。spring mvc是基于方法的设计,而sturts是基于类,每次发一次请求都会实例一个action,每个action都会被注入属性,而spring基于方法,粒度更细,但要小心把握像在servlet控制数据一样。spring3 mv

2013-12-29 22:09:49 732

原创 Tomcat常用参数设置

tomcat的默认值在一般情况下都是性能最好的选择,除了堆栈内存外启动tomcat时设置的内存参数及设置准则:-Xms   设置JVM启动时的堆栈内存的大小-Xmx   设置JVM最大的堆栈内存大小一般都建议将这两个值设置成一样大小,因为重新分配时会耗费性能。内存设置过小,会导致tomcat运行过慢,或者容易报OutOfMemoryError错误信息,使运行不正常。内存设置过大,可能出现系统无法分配如此多内存而导致启动tomcat失败,要么正常启动,但耗费过多计算机内存,使其他应用程序无法正常运

2013-12-28 23:15:24 769

转载 HTTP Keep-Alive

HTTP Keep-AliveKeep-Alive功能使客户端到服务器端的连接持续有效,当出现对服务器的后继请求时,Keep-Alive功能避免了建立或者重新建立连接。市场上 的大部分Web服务器,包括iPlanet、IIS和Apache,都支持HTTP Keep-Alive。对于提供静态内容的网站来说,这个功能通常很有用。但是,对于负担较重的网站来说,这里存在另外一个问题:虽然为客户保留

2013-12-28 22:29:23 2272

原创 JAVA 非阻塞IO原理

1.  基本概念IO是主存和外部设备(硬盘、终端和网络等)传输数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。2.  nio简介nio是java New IO的简称(并不只是指非阻塞IO),在jdk1.4里提供的新api。Sun官方标榜的特性如下:为所有的原始类型提供(Buffer)缓存支持。字符集编码解码解决方案。

2013-12-28 21:10:59 3182

原创 synchronized(object)的应用场景以及与synchronized修饰方法的区别

synchronized(object)的作用原理是:在object内有一个变量,当有线程进入时,判断是否为0,如果为0,表示可进入执行该段代码,同时将该变量设置为1,这时其他线程就不能进入;当执行完这段代码时,再将变量设置为0。虽然可以通过synchronized 关键字来修饰方法,但是不同的线程如果创建了各自的对象实例,多个对象实例调用方法时仍然是异步的。如果想保证代码块在任务情况下都同步,即代码块在程序的中同一时刻只被一个线程调用,即需要使用synchronized(object)。

2013-12-28 14:36:53 2214

原创 测量web负载的工具

几个比较著名的测量web负载的工具:Apache Benchmark  (http://httpd.apache.org)Siege   ( http://www.joedog.org/JoeDog/Siege)Apache Jakarta的JMeter ( http://jakarta.apache.org/jmeter)Faban ( http://faban.suns

2013-12-26 14:57:18 1017

原创 一些常用设计模式的应用场景

创建型模式构建者(builder)当创建一个类的过程比较复杂时(例如要组合对象、以及判断构造参数是否足够和合法),用专门的类(如建立一个专门的Builder类)和方法将这个创建的过程封装起来。工厂方法(Factory Method)给方法传入类的名称,方法给你返回你想要的类实例,现在这个模式的功能被spring框架IOC取代抽象工厂(Abstract Factory)

2013-12-26 12:39:58 6248

转载 工厂方法模式与抽象工厂模式

本文是转的一、引子       话说十年前,有一个暴发户,他家有三辆汽车——Benz奔驰、Bmw宝马、Audi奥迪,还雇了司机为他开车。不过,暴发户坐车时总是怪怪的:上Benz车后跟司机说“开奔驰车!”,坐上Bmw后他说“开宝马车!”,坐上Audi说“开奥迪车!”。你一定说:这人有病!直接说开车不就行了?!       而当把这个暴发户的行为放到我们程序设计中来时,会发现这是一个普遍存

2013-12-26 12:06:33 579

原创 Executor框架

当看到以下形式的代码时:new Thread(runnable).start();时,如果希望用一种更灵活的执行策略,例如什么时候执行按照什么顺序执行(FIFO, LIFO, 优先级)等多少个任务并发执行一个任务执行前或后,应该进行什么操作。这时可考虑使用Executor代替Thread.start();public class TaskExecutionWebServer {

2013-12-20 14:53:15 619

原创 ConcurrentHashMap的使用场景以及与HashTable的比较

ConcurrentHashMap使用了一种完全不同的加锁策略来提供更高的并发性和伸缩性。ConcurrentHashMap并不是将每个方法都在同一个锁上同步并使得每次只有一个线程访问容器,而是使用一种粒度更细的加锁机制来实现更大程度的共享,这种机制成为分段锁(lock striping)。这种机制中,任意数量的读取线程都可以并发访问Map,并且一定数量的线程可以并发修改Map。好处是:在并发环境

2013-12-20 14:45:23 6001

转载 线程7种状态的相互转换

今天有同事问到线程的问题,自己突然就有点蒙了,只模糊的记得个大概。当初学习线程的时候把这7个状态记得比自己名字还熟悉还把这7个状态编成了一段凄惨而美丽的爱情故事没想到如今却只能记得个大概真验证了“好记性不如烂笔头”的真理还是赶快回忆一下吧先从图片开始小小的作下解释:1、线程的实现有两种方式,一是继承Thread类,二是实现Runnable接口,但不管怎样

2013-12-20 14:09:19 563

原创 一些错误的线程安全写法

1、使用List时的加锁代码但使用synchronized声明的方法锁住的是调用该方法的对象,而不是提供方法的对象。所以上例的代码中,list对象并没有被锁住,如果有其他方法也是有相同的判断为空即添加的代码,就可能重复添加了。正确的写法:

2013-12-20 12:05:05 801

原创 实现线程安全的一些方法

1、不变的对象一定是线程安全的,满足以下条件的对象是不变的。对象没有变量,只有方法。对象创建后,状态就不能修改。对象的所以变量都是final型。对象被正确创建(创建时,this没有被逸出)2、实例封闭       将数据封装在对象内部,可以将数据的访问限制在对象的方法上,从而更容易确保线程在访问数据时总能持有正确的锁。public class PersonSet {

2013-12-20 11:26:16 1332

原创 ThreadLocal的用法

使用ThreadLocal是维持线程封闭的一种更规范的方法。其实就是通过ThreadLocal的set方法,使每个线程都拥有一个自己的对象,其他线程是不需要访问的,也访问不到的,这样的就不产生多个线程共同使用一个对象的问题。但注意,set进去的对象必须是调用着自己创建的,并且需要自己保证跟其他set进去的对象不是相同的引用。如果ThreadLocal.set()进去的东西本来就是多个线程共享的

2013-12-20 10:51:34 607

转载 Java中final关键字用法总结

final        1)用final修饰的类不能被继承,没有子类;用final修饰的方法不能被子类的方法覆盖;用final修饰的变量表示常量,只能被赋一次值。       final不能用来修饰构造方法,父类中用private修饰的方法不能被子类的方法覆盖。final方法是不允许子类方法中写一个同样签名的方法的,但private的情况下,你可以定义一个同样签名的方法。(final方法

2013-12-18 15:00:20 570

转载 Java中集合类用法总结

Collection├List│├LinkedList│├ArrayList (异步,线程不安全,空间用完时自动增长原容量一半)│└Vector (同步,线程安全,空间用完时自动增长原容量一倍)│ └Stack└Set  ├HashSet  └TreeSetMap├Hashtable├HashMap├WeakHashMap└TreeMap

2013-12-18 14:57:36 607

原创 多线程中的数据共享

多线程中的可读性问题在多线程访问同一个对象的变量时,如果read操作和write操作分别在两个不同的线程中,read操作并不能保证马上获取到write操作修改后的值。因为在没有同步的情况下,编译器、处理器以及运行时都可能对操作的执行顺序进行一些意想不到的调整。在缺乏足够同步的多线程程序中,要想对内存操作的执行顺序进行判断,几乎无法得到正确的结论。例如以下代码有可能会输出0,并且会无

2013-12-18 14:54:53 1173

转载 Java 中的悲观锁和乐观锁的实现

锁(locking)业务逻辑的实现过程中,往往需要保证数据访问的排他性。如在金融系统的日终结算处理中,我们希望针对某个cut-off时间点的数据进行处理,而不希望在结算进行过程中(可能是几秒种,也可能是几个小时),数据再发生变化。此时,我们就需要通过一些机制来保证这些数据在某个操作过程中不会被外界修改,这样的机制,在这里,也就是所谓的“锁”,即给我们选定的目标数据上锁,使其无法

2013-12-18 13:10:54 4538

原创 java多线程基础知识:如何编写线程安全代码

我们编写程序时经常犯错的几个地方:1、以为i++是原子操作,其实不然,i++是分两步完成的,所以当我们在多个线程并发操作时就可能产生错误,例如以下代码:public class UnsafeSequence{ private int value; public int getNext(){ return value++; }}在多线程时:

2013-12-17 18:38:31 1568

原创 Scrum要点

Scrum与传统的项目管理方法有什么不同?最大的特点是双重回馈机制:   左边输入的是“软件需求”,中间的流程是软件开发活动,输出的是软件本身。   两条线的实践活动含义如下:  评审会议(Review meeting):每个sprint结束时,开发团队要展示本次所完成的功能给客户看,如果不符合,就加以修正,从而避免到最后才发现软件不符合需求。每个sprint一般2-4周。

2013-12-17 13:32:58 861

转载 领域模型驱动应用心得....

几乎每种语言、开发框架和工具面世时,都号称要把开发人员解放出来,让他/她们更加关注于业 务逻辑的处理。但目前的工作状况是,每当一个新的“解放工具”出现,就会有众多的技术狂热者蜂拥而上,而忽略了他们最应该关注的业务逻辑部分。还好,从 2004年开始,“领域驱动设计”的声音开始浮现,开始逐渐扭转这种局面。 领域驱动设计词解 尽管提出人Eric Evens 已给出了领域驱动设计的官方的解

2013-12-17 13:09:33 1814

转载 J2EE程序的性能优化技巧

应用J2EE平台开发的系统的性能是系统使用者和开发者都关注的问题,本文从服务器端编程时应注意的几个方面讨论代码对性能的影响,并总结一些解决的建议。  关键词:性能,Java,J2EE,EJB,Servlet,JDBC  一、概要  Java 2 Platform, Enterprise Edition (J2EE)是当前很多商业应用系统使用的开发平台,该技术提供了一个基于组

2013-12-17 13:08:09 607

转载 LRU和LFU的区别

LRU和LFU是不同的!LRU是最近最少使用页面置换算法(Least Recently Used),也就是首先淘汰最长时间未被使用的页面!LFU是最近最不常用页面置换算法(Least Frequently Used),也就是淘汰一定时期内被访问次数最少的页!比如,第二种方法的时期T为10分钟,如果每分钟进行一次调页,主存块为3,若所需页面走向为2 1 2 1 2 3 4注意,当调页

2013-12-17 13:06:34 1110

MRPII制造资源计划基础-陈启申

对MRPII制造资源计划讲解最经典的教程

2009-02-17

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除