2013年10月27日

Java面试中的多线程问题

摘要: 很多核心 Java 面试题来源于多线程(Multi-Threading)和集合框架(Collections Framework),理解核心线程概念时,娴熟的实际经验是必需的。这篇文章收集了 Java 线程方面一些典型的问题,这些问题经常被高级工程师所问到。 0、Java 中多线程同步是什么? 在多线程程序下,同步能控制对共享资源的访问。如果没有同步,当一个 Java 线程在修改一个共享变量时,另外一个线程正在使用或者更新同一个变量,这样容易导致程序出现错误的结果。 1、解释实现多线程的几种方法? 一 Java 线程可以实现 Runnable 接口或者继承 Thread 类来实现,当你打... 阅读全文

posted @ 2013-10-27 23:25 heartstage 阅读(209) 评论(0) 推荐(0) 编辑

Java IO设计模式

摘要: JAVAIO设计模式彻底分析2011-01-0614:20:09|分类:java|字号订阅http://blog.csdn.net/tianyue168/archive/2010/08/03/5786642.aspx 一。引子(概括地介绍Java的IO) 无论是哪种编程语言,输入跟输出都是重要的一部分,Java也不例外,而且Java将输入/输出的功能和使用范畴做了很大的扩充。它采用了流的机制来实现输入/输出,所谓流,就是数据的有序排列,而流可以是从某个源(称为流源或SourceofStream)出来,到某个目的地(称为流汇或SinkofStream)去的。由流的方向,可以分成输入流和输出流,. 阅读全文

posted @ 2013-10-27 18:10 heartstage 阅读(575) 评论(0) 推荐(0) 编辑

Java IO 流 设计模式

摘要: 学过装饰模式后,大家会发现,它在Java语言中最著名的应用莫过于Java I/O标准为库的设计了。这一节将以处理Byte流为例,看看装饰模式是怎样得到应用的。 为什么不用继承而用装饰模式 我们知道Java I/O库需要很多性能的各种组合,如果说这些性能的组合是通过继承方式来实现的话,那么每一种组合都需要一个类,这样就会出现大量重复性问题的出现,从而使类数目“爆炸”。而如果采用装饰模式,那么不仅类的数目大减少了,性能的重复也可以减至到最少。所以装饰模式是Java I/O库的基本模式。在这里我想再用>中讲到装饰模式时候的一个例子,看看装饰模式是怎么达到不仅类的数目大减少了,性能的重复也可以减 阅读全文

posted @ 2013-10-27 18:07 heartstage 阅读(2340) 评论(0) 推荐(0) 编辑

关于bug的沟通

摘要: 关于BUG的沟通 一个人要去做一件事情,一般来说是按照自己的意愿去做的,如果不是自己想做而是被要求这么做的话,心里一定会留下点不愉快,特别是那种有自信有自己主见的人,比如说开发人员,当测试人员发现一个BUG,然后告知开发人员后,开发人员之所以会去修改BUG,是因为他自己认为的确需要修改,而不是因为你提到要改他才改的,所以当他认为不需要修改的时候,肯定是有自己的想法和理由,不妨理解下他们,合理的就可以接受,不合理的话,也不要强制的让他去修改,试着解释给他听,让他心甘情愿的去修改,这才不会让他心里产生不愉快的情绪,开发人员和测试人员彼此间的关系才不会弄得很紧张,如果强制性的让他修改多次的发生,那. 阅读全文

posted @ 2013-10-27 16:51 heartstage 阅读(423) 评论(0) 推荐(0) 编辑

继承和组合的比较

摘要: 面向对象系统中功能复用的两种最常用技术是类继承和对象组合(object composition)。正如我们已解释过的,类继承允许你根据其他类的实现来定义一个类的实现。这种通过生成子类的复用通常被称为白箱复用(white-box reuse)。术语“白箱”是相对可视性而言:在继承方式中,父类的内部细节对子类可见。对象组合是类继承之外的另一种复用选择。新的更复杂的功能可以通过组装或组合对象来获得。对象组合要求被组合的对象具有良好定义的接口。这种复用风格被称为黑箱复用(black-box reuse),因为对象的内部细节是不可见的。对象只以“黑箱”的形式出现。继承和组合各有优缺点。类继承是在编译时刻 阅读全文

posted @ 2013-10-27 16:44 heartstage 阅读(522) 评论(0) 推荐(0) 编辑

Java Hibernate事务并发控制

摘要: 在产品上线时发现当用户数量大并发性能差,经常发现数据库死锁,经诊断,是由于设置了不正确的事务隔离,可以做如下优级化(这里我们使用JTA事务):JTA具有的3个接口:UserTransaction接口、TransactionManager接口和Transaction接口,这些接口共享公共的事务操作。UserTransaction能够执行事务划分和基本的事务操作,TransactionManager能够执行上下文管理。在一个具有多个数据库的系统中,可能一个程序将会调用几个数据库中的数据,需要一种分布事务,或者准备用JTA来管理Session的长事务,那么就需要使用JTATransaction。在. 阅读全文

posted @ 2013-10-27 16:33 heartstage 阅读(1662) 评论(0) 推荐(0) 编辑

Java死锁及解决

摘要: Java线程死锁如何避免这一悲剧 Java线程死锁需要如何解决,这个问题一直在我们不断的使用中需要只有不断的关键。不幸的是,使用上锁会带来其他问题。让我们来看一些常见问题以及相应的解决方法: Java线程死锁 Java线程死锁是一个经典的多线程问题,因为不同的线程都在等待那些根本不可能被释放的锁,从而导致所有的工作都无法完成。假设有两个线程,分别代表两个饥饿的人,他们必须共享刀叉并轮流吃饭。他们都需要获得两个锁:共享刀和共享叉的锁。 假如线程 “A”获得了刀,而线程“B”获得了叉。线程“A”就会进入阻塞状态来等待获得叉,而线程“B”则阻塞来等待“A”所拥有的刀。这只是人为设计的例子,但尽... 阅读全文

posted @ 2013-10-27 16:15 heartstage 阅读(366) 评论(0) 推荐(0) 编辑

Java编程经验汇总

摘要: JDK和JRE 大家肯定在安装JDK的时候会有选择是否安装单独的jre,一般都会一起安装,我也建议大家这样做。因为这样更能帮助大家弄清楚它们的区别: Jre 是java runtime environment, 是java程序的运行环境。既然是运行,当然要包含jvm,也就是大家熟悉的虚拟机啦, 还有所有java类库的class文件,都在lib目录下打包成了jar。大家可以自己验证。至于在windows上的虚拟机是哪个文件呢? 学过MFC的都知道什么是dll文件吧,那么大家看看jre/bin/client里面是不是有一个jvm.dll呢?那就是虚拟机。 Jdk 是java development 阅读全文

posted @ 2013-10-27 16:04 heartstage 阅读(267) 评论(0) 推荐(0) 编辑

oracle的锁与并发机制

摘要: 锁是并发访问的时候用于保护不共享资源不被同时并发修改的机制。oracle锁分为DML锁,DDL锁,内部锁和latch DML锁确保一次只能只有一个人修改某一行(TX锁),而且正在处理一个表时别人不能删除(TM锁)。DDL锁,在DDL操作是系统会自动为对象加上DDL锁,保护这些对象不被其他会话锁修改。latch是轻量级的串行化设备,用于协调对共享数据结构、对象、文件的多用户访问,一般都是保护共享内存结构使用的锁,在此不做讨论。 一般的锁管理器工作过程:1.找到想要锁定的那一行地址2.在锁管理器排队3.锁定列表4.搜索列表,查看别人是否锁定这一行5.在列表中创建一个新的条目,表明已经锁定这一行6. 阅读全文

posted @ 2013-10-27 15:50 heartstage 阅读(365) 评论(0) 推荐(0) 编辑

Oracle并发控制、事务管理学习笔记

摘要: (a)基本概念 锁的2种最基本、最简单的类型:排他锁(eXclusive lock,即X锁)、共享锁(Share lock,即S锁)。 不同级别的锁定协议及其作用:申请的锁及其作用锁定协议修改时申请X锁读取时申请S锁作用操作结束释放事务结束释放操作结束释放事务结束释放不丢失修改不脏读可重复读一级锁定协议是是二级锁定协议是是是是三级锁定协议是是是是是锁定对象的大小被称为锁定的粒度(granularity)。 如果在一个数据库管理系统中,同时支持多种锁定粒度供事务选择,这种锁定方法就被称为多粒度锁定(multiple granularity locking)。 多粒度锁定协议是指,允许对多粒度树中 阅读全文

posted @ 2013-10-27 15:46 heartstage 阅读(517) 评论(1) 推荐(0) 编辑

Oracle的隔离级别

摘要: 隔离级别(isolation level) 隔离级别定义了事务与事务之间的隔离程度。 隔离级别与并发性是互为矛盾的:隔离程度越高,数据库的并发性越差;隔离程度越低,数据库的并发性越好。 ANSI/ISO SQL92标准定义了一些数据库操作的隔离级别: 未提交读(read uncommitted) 提交读(read committed) 重复读(repeatable read) 序列化(serializable) 通过一些现象,可以反映出隔离级别的效果。这些现象有: 更新丢失(lost update):当系统允许两个事务同时更新同一数据是,发生更新丢失。 脏读(dirty read)... 阅读全文

posted @ 2013-10-27 15:43 heartstage 阅读(4320) 评论(0) 推荐(0) 编辑

Java多线程总结之由synchronized说开去

摘要: 更新完毕,结贴,以后有新的想法再开新帖 这几天不断添加新内容,给个大概的提纲吧,方面朋友们阅读,各部分是用分割线隔开了的:synchronized与wait()/notify()JMM与synchronizedThreadLocal与synchronizedReentrantLock与synchronized最重要一条: synchronized是针对对象的隐式锁使用的,注意是对象! 举个小例子,该例子没有任何业务含义,只是为了说明synchronized的基本用法:Java代码 ClassMyClass(){synchronizedvoidmyFunction(){//dosomethin. 阅读全文

posted @ 2013-10-27 14:49 heartstage 阅读(288) 评论(0) 推荐(0) 编辑

j2ee性能调优之最小化资源压力测试法则

摘要: 前面看到有人讲j2ee的性能调优,虽然这块不是自己的专长,但是猪养多了,也忍不住跳出来说几句。 虽然几乎每本讲性能调优的书籍开篇都会提,没必要的情况下就不要做调优,但是我个人还是认为,所有系统在上线前,都应该做一次基本的压力测试并对相关的性能问题进行检测, 但是迫于资源压力,很多项目都无法做正规的压力测试,一直到系统上线出现问题,才倒回来找原因。 而正规的压力测试,往往因为需要严格模拟生产环境,需要耗费大量的资源,各类专家配合解决问题,并不是那么轻松的可以做下来的。 而j2ee应用的特点就是以复杂性来回避传统问题,所以任意一个j2ee的部署,相对于php那样的结构都是比较复杂的。系统一旦发生性 阅读全文

posted @ 2013-10-27 02:29 heartstage 阅读(225) 评论(0) 推荐(0) 编辑

线程和进程(Java)

摘要: 一、线程概述线程是程序运行的基本执行单元。当操作系统(不包括单线程的操作系统,如微软早期的DOS)在执行一个程序时,会在系统中建立一个进程,而在这个进程中,必须至少建立一个线程(这个线程被称为主线程)来作为这个程序运行的入口点。因此,在操作系统中运行的任何程序都至少有一个主线程。进程和线程是现代操作系统中两个必不可少的运行模型。在操作系统中可以有多个进程,这些进程包括系统进程(由操作系统内部建立的进程)和用户进程(由用户程序建立的进程);一个进程中可以有一个或多个线程。进程和进程之间不共享内存,也就是说系统中的进程是在各自独立的内存空间中运行的。而一个进程中的线可以共享系统分派给这个进程的内存 阅读全文

posted @ 2013-10-27 02:24 heartstage 阅读(310) 评论(0) 推荐(0) 编辑

Tomcat配置和Spring MVC配置

摘要: Tomcat启动时,先找系统变量CATALINA_BASE,如果没有,则找CATALINA_HOME。然后找这个变量所指的目录下的conf文件夹,从中读取配置文件。最重要的配置文件:server.xml。要配置tomcat,基本上了解server.xml,context.xml和web.xml。Server.xml--tomcat主配置文件Web.xml--servlet与其他适用于整个Web应用程序设置的配置文件,必须符合servlet规范的标准格式。Context.xml--默认的context配置,应用于安装了Tomcat的所有主机的所有部署内容。该文件的格式和标准的contextXML 阅读全文

posted @ 2013-10-27 02:21 heartstage 阅读(2317) 评论(0) 推荐(0) 编辑

Servlet 工作原理

摘要: Servlet运行在Servlet容器中,由容器负责Servlet实例的查找及创建工作,并按照Servlet规范的规定调用Servlet的一组方法,这些方法也叫生命周期的方法。具体调用过程如下图所示:Servlet生命周期详解 如上图所示,Servlet的生命周期可以分为四个阶段,即装载类及创建实例阶段、初始化阶段、服务阶段和实例销毁阶段。下面针对每个阶段的编程任务及注意事项进行详细的说明。(1)装载类及创建实例 客户端向Web服务器发送一个请求,请求的协议及路径必须遵守如下的格式:http://serverip:port/application-path/resource-path 其中,s 阅读全文

posted @ 2013-10-27 02:18 heartstage 阅读(272) 评论(0) 推荐(0) 编辑

Servlet学习总结

摘要: JavaWeb应用程序中所有的请求-响应都是由Servlet来完成的。Servlet是Java Web的核心程序,所有的网址(请求-响应)都交给Servlet来处理。Servlet在Web应用中被映射成一个URL(Uniform Resource Locator),该URL可以被客户端浏览器请求,当用户向指定URL对象的Servlet发送请求时,该请求被Web服务器接收到,该Web服务器负责处理多线程、网络通信等功能,而Servlet的内容则决定了服务器对客户端的响应内容。#.常用的Web服务器 1)Apache 2)IIS 3)Tomcat#.主流的(Java Web)应用服务器(不仅包括w 阅读全文

posted @ 2013-10-27 02:18 heartstage 阅读(373) 评论(0) 推荐(0) 编辑

Spring MVC

摘要: 一、前言:大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了。Spring3 MVC结构简单,应了那句话简单就是美,而且他强大不失灵活,性能也很优秀。官方的下载网址是:http://www.springsource.org/download (本文使用是的Spring 3.0.5版本)Struts2也是比较优秀的MVC构架,优点非常多比如良好的结构。但这里想说的是缺点,Struts2由于采用了值栈、OGNL表达式、 struts2标签库等,会导致应用的性能下降。Struts2的多层拦截器、多实例action性能都很 阅读全文

posted @ 2013-10-27 02:16 heartstage 阅读(413) 评论(0) 推荐(0) 编辑

Spring的线程安全

摘要: http://www.cnblogs.com/gofblogs/p/3236669.html前言 如果开发者正开发或维护基于Servlet的Web应用,则Servlet规范建议最好能够看看。因为它含有的内容对于Web应用开发者理解Servlet容器的工作机理很有帮助。 其中,规范给出了Servlet容器是如何处理客户请求的。Servlet容器将会根据web.xml配置文件中定义的各个Servet而创建相应的单例。因此,多个客户请求可能同时访问这些单例,即多个线程同时访问它们。在Web应用中保证线程安全是很重要的。开发者应该对这个问题保持警惕,而且必须确保各自的代码必须以线程安全的方式运行... 阅读全文

posted @ 2013-10-27 02:14 heartstage 阅读(1907) 评论(0) 推荐(0) 编辑

Struts的线程安全

摘要: Servlet/JSP技术和ASP、PHP等相比,由于其多线程运行而具有很高的执行效率。由于Servlet/JSP默认是以多线程模式执行的,所以,在编写代码时需要非常细致地考虑多线程的安全性问题。然而,很多人编写Servlet/JSP程序时并没有注意到多线程安全性的问题,这往往造成编写的程序在少量用户访问时没有任何问题,而在并发用户上升到一定值时,就会经常出现一些莫明其妙的问题。 Servlet的多线程机制 Servlet体系结构是建立在Java多线程机制之上的,它的生命周期是由Web容器负责的。当客户端第一次请求某个Servlet 时,Servlet容器将会根据web.xml... 阅读全文

posted @ 2013-10-27 02:06 heartstage 阅读(329) 评论(0) 推荐(0) 编辑

导航