51CTO博客开发敏捷开发 陈勇
系统调用进程有两种运行模式:用户态和内核态。进程通常在用户态,这时可以使用CPU和内存,而当进程需要对硬件外设进行操作的时候(如读取磁盘文件、发送网络数据),就必须切换到内核态,当在内核态的任务完成后,进程又切回到用户态。由于系统调用涉及进程从用户态到内核态的切换,导致一定的内存空间交换,这也是一定程度上的上下文切换,所以系统调用的开销通常是比较昂贵的。减少不必要的系统调用,也是Web服务器性能优
一台Web服务器在单位时间内能处理的请求越多越好,这也成了Web服务器的能力高低所在,它体现了我们常说的"服务器并发处理能力"。吞吐量Web服务器的并发处理能力,一般使用单位时间内服务器处理的请求数来描述其并发能力,习惯称其为吞吐率(Throughput),单位是"reqs/s"。并发用户数人们常常把并发用户数和吞吐率混淆,实际上,它们并不是一回事,吞吐率是指在一定并发用户数的情况下,服务器处理请
传统的软件开发是瀑布式的,它提倡设定计划,遵循计划,按部就班的实施,其中一部分的重要产出就是大量完备的文档。但是敏捷宣言中明确的指出:工作的软件高于详尽的文档!这并不是说,敏捷中文档不重要,但在敏捷中有哪些文档呢?只记录结果文档。这又是问什么呢?这就要与敏捷宣言中的另一句话:响应变化高于遵循计划,一起结合着看!进行过敏捷的团队都了解用户故事,用户故事是在迭代计划中团队承诺的 feature,并会对
京麦团队从2014年在敏捷教练的指导下进行敏捷转型,至今团队已经进化为部门内的标杆,产品也上升到了部门战略级。
最近,线上生产系统突然频繁的 JVM 内存报警!但本系统近期内并没有上线改动!为了能查清内存报警的原因,使用 Eclipse Memory Analyzer tool(MAT)对 JVM Dump 文件进行了分析!1. 生成 dump 文件用 jmap 生产 dump 文件jmap -dump:format=b,file=HeapDump.bin <pid>2. M
问题:JVM 内存频繁预警,内存规律性波动。 一. 查看JVM 的GC Collector:Young GC:PS Scavenge | Full GC:PS MarkSweepPS Scavenge 新生代的收集器,也叫 Parallel Scavenge。PS MarkSweep 老生代的收集器,也叫 Serial Old。二. 内存曲线分析1. 频繁 Young GC,
梳理最近在重构一段代码,发现之前的流程大概是如下图,这样的设计结构。一、这是一个发送消息的流程,长长的一段代码,通过依赖构成整个流程的架构。整个流程依赖三个环节:适配、发送、保存,其中发送又依赖消息体生成。二、由于消息类型不同,适配、发送、保存的具体实现不同,所以代码中大量的充斥着if ... else ...的判断语句。这不仅导致代码可读性很差,而且还产生了大量冗余代码。重构针对如上问题,首先是
在 Servlet API 中有一个 ServletContextListener 接口,它能够监听 ServletContext 对象的生命周期,实际上就是监听 Web 应用的生命周期。当Servlet 容器启动或终止Web 应用时,会触发ServletContextEvent 事件,该事件由ServletContextListener 来处理。在 ServletContextListener
下面介绍一种优秀的事务代理配置策略:采用这种配置策略,完全可以避免增量式配置,所有的事务代理由系统自动创建。容器中的目标bean自动消失,避免需要使用嵌套bean来保证目标bean不可被访问。这种配置方式依赖于Spring提供的bean后处理器,该后处理器用于为每个bean自动创建代理,此处的代理不仅可以是事务代理,也可以是任意的代理,只需要有合适的拦截器即可。下面是采用BeanNameAutoP
pom.xml<dependency> <groupId>org.apache.ibatis</groupId> <artifactId>ibatis-sqlmap</artifactId> <version>2.3.4.726</version> </dependency&g
1.通过maven加载依赖<dependency> <groupId>org.apache.velocity</groupId> <artifactId>velocity</artifactId> <version>1.7</version> </dependency>
创建项目选择Maven Module,新建一个Maven项目选择maven-archetype-quickstart选项,点击下一步顶级项目就创建好啦,把顶级项目里边所有Src源文件将其删除删除之后,留下pom.xml配置文件打开pom.xml文件,修改packageing属性为pom之后,鼠标右键点击项目,New Module弹出一个窗口,创建一个新New Maven Module下一步,选择m
1、新建项目,选择Maven Module,输入项目名称,点击Next继续。注意这里的Module就是项目的意思,等同于MyEclipse中的Project。接着直接点击Finish即可。下图就是创建完毕后的Maven项目,双击pom.xml查看POM文件内容,可以自行添加Maven的依赖。打开pom.xml文件,添加必须的Maven依赖。也叫Maven坐标,由groupId、artifactId
1.安装Maven(1)下载Maven,并解压(2)在系统环境中设置M2_HOME(3)将%M2_HOME%/bin; 加入系统环境变量PATH中(4)在DOS串口中,输入mvn -version,若显示版本号相关信息,则安装成功2.安装mavenRepository3.配置MyEclipse配置Maven仓库目录配置Maven的settings.xml路径4.创建Maven项目5.构建webap
pom作为项目对象模型,通过xml表示maven项目,使用pom.xml文件来实现。<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://mav
Hosts是一个没有扩展名的系统文件,其作用是将一个常用的网址域名与其对应的IP地址建立一个关联“数据库”,当用户在浏览器重输入一个需要登陆的网址时,系统会首先自动从Hosts文件中寻找对应的IP地址,一旦找到,系统会立即打开对应网页,如果没有找到,则系统会将网址提交给DNS域名解析服务器进行IP地址解析。Hosts文件位置:C:\Windows\System32\drivers\etc\host
1.Hibernate查询方式Hibernate提供了以下几种检索对象的方式:HQL检索方式HQL(Hibernate Q是面向对象的查询语言,它具有以下功能:在查询语句中设定各种查询条件;支持投影查询,仅查询出对象的部分属性;支持分页查询;支持连接查询;支持分组查询,允许使用having和group by关键字;提供内置聚合函数,如sun()、min()和max();能够调用用户定义的SQL函数
Spring3.0已不再支持Hibernate2.x,仅为Hibernate3.x提供支持,且要求Hibernate必须在3.2版本以上。配置SessionFactory使用Hibernate框架的第一个工作是编写Hibernate配置文件,如何使用配置文件实例化SessionFactory,Spring为创建SessionFactory提供了一个好用的FactoryBean工厂类:org.spr
Hibernate是Java应用关系数据库之间的桥梁,负责Java对象和关系数据之间的映射。Hibernate内部封装了通过JDBC访问数据库的操作,向上层应用提供面向对象的数据访问API。Hibernate配置文件Hibernate从其配置文件中读取和数据库连接有关的信息,Hibernate的配置文件有两种形式,配置文件默认文件名hibernate.properties;另一种是XML格式的文件
1.Struts2插件Struts2通过提供各种插件,用于与大部分流程的J2EE框架进行整合。插件概述Struts2的插件是一个JAR文件,这个JAR文件可以用于扩展、改变或者添加Struts2的功能。每个Struts2的插件JAR都包含一个名为struts-plugin.xml的配置文件,struts-plugin.xml文件的内容与普通的struts.xml文件内容完全相同。当把这个包含str
Servlet是用Java编写的应用程序,在服务器上运行,处理请求的信息并将其发送到客户端。Servlet在初始化后驻留内存,因此没做请求时无需加载。1.HTTP基础用户的请求和Web应用通过Internet从一台计算机发送到另一个台计算机或服务器,使用超文本传输协议HTTP,HTTP是一个客户端和服务器请求和答应的标准。Get和Post方法HTTP请求消息使用Get和Post方法在Web上传输请
1.Struts2体系介绍Struts2的体系和Struts1体系差别很大,因为Struts2使用了WebWork的设计核心,而不是使用Struts1的设计核心。Struts2大量使用连接器来处理用户请求,从而允许用户的业务逻辑控制与Servlet API分离。Struts2的框架Struts2使用拦截器作为处理用户的业务逻辑,通过控制器代理负责处理用户请求,处理用户请求时回调业务控制器的exec
1.定义定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。2.解决问题——订阅报纸看起来订阅者是直接根有据打交道,但实际上,订阅者的订阅数据是被邮寄传递到报社,当报社出了报纸,报社按订阅信息交给邮局,邮局在代为发送到订阅者手里。在整个过程中,邮局起到一个中转的作用。使用观察者模式来解决问题public class Subject { p
1.定义动态的给一个对象添加一个额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。2.解决问题——奖金计算不用模式的解决方案public class Prize { public double calcPrize(String user, Date begin, Date end) { double prize = 0.0; // 计算当月业务奖
1.定义将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的哪些类可以一起工作。2.解决问题——日志管理不用模式的解决方案版本一:用户要求日志以文件的形式记录public interface LogFileOperateApi { /** * 读取日志文件,从文件里面获取存储的日志列表对象 * @return 存储日志列表对
进程试运行在它自己的地址空间内的自包容的程序。多任务操作系统可以通过周期性地将CPU从一个进程切换到另一个进程。操作系统会将进程互相隔离开,因为他们不会彼此干涉。编写多线程程序最基本的困难在于在协调不同线程驱动的任务之间对共享资源的使用,以使得这些资源不会同时被多个任务访问。1.线程机制一个线程是在进程中的一个单一的顺序控制流,因此,单个进程可以拥有多个并发执行的线程。每个任务都觉得自己在一直占用
Java操作符作用于操作数,生成一个新值。几乎所有的操作符都智能操作基本类型,例外的操作符是"="、"=="、和"!=",这些操作符可以操作所有的对象,除此之外,String类还支持"+"和"+="。优先级当一个表达式中存在多个操作符时,操作符的优先级决定了各部分的计算顺序。赋值赋值操作符"
不可变StringString对象是不可变的。String类中的每一次看起来会修改String值的方法,实际上都是创建了一个新的String对象。重载 "+"与StringBuilderString mango = "mango";String s = "abc" + mango + "def"+ 47;String对
1.输入输出InputStream和OutputStream是面向字节的,Reader和Write则面向字符的且兼容Unicode。InputStream类型ByteArrayInputStream:允许将内存的缓冲区当作InputStream使用StringBufferInputStream:将String转换成InputStreamFileInputStream:用于从文件中读取信息Piped
Copyright © 2005-2023 51CTO.COM 版权所有 京ICP证060544号