限定词(一):冠词
限定词(一):冠词冠词的位置与读音the在辅音前读读成[ ð ə],在元音前读读成[ ð i]a 用于辅音音素(并非辅音字母)开头的名词前an 用于元音音素(并非元音字母)开头的名词前
冠词的用法四种泛指的表达模式
不可数名词不加冠词表示泛指;
复数名词不加冠词表示泛指;
单数名词与定冠词the连用可以表示泛指; the + 单数名词也可特指,但需要结合上下文语境分析
单数名词与不定冠词a/an连用可以表示泛指; “a/an + 单数名词”可以表示泛指,不定冠词a/an的泛指用法指的是某一类事物中任何一个具有代表性的成员,相当于any
特殊:
the + 国籍名词:一个国籍、民族的人
the + 形容词:表示一类人,是泛指,相当于在形容词的后面省去了people,所以被看做是复数名词,作主语时,谓语要用复数;主要限于用在主语的位置,如果处在其他位置则不表示泛指。
定冠词the的特指用法情景/文化特指定冠词the 用于这一类特指,必须依赖于说话者和听者双方共用的知识。
the可表示著名的人或事物Albert Einstein, the f ...
软件需求的本质
软件需求的本质在软件项目中,所有干系人的利益交接点主要集中在需求方面。正是由于需求是软件开发和项目管理活动的基础,因此所有干系人都应该致力于需求实践活动,这是打造一流产品的前提。
需求的层次和种类
业务需求描述组织为什么要执行系统(组织希望获得的业务收益)。其关注点在于组织或者提出系统要求的客户有哪些业务目标
用户需求描述了用户使用产品必须完成的目标或者任务,并且这个产品要能有为人提供价值。用户需求表达的是用户通过系统完成那些具体的工作。
功能需求说的是在特定条件下所展示出来的行为 ,主要描述开发人员需要实现的功能以便用户能够完成自己的任务(用户需求),进而满足业务需求
系统需求描述了人们对某个产品的需求,而这个产品由多个组件或者系统子集组成
业务规则包括公司政策、政府法规、工业标准以及计算算法。业务规则有时又引申出具体的质量特性,这些特性有以功能的方式由开发人员实现。特定的功能需求可以追溯到具体的业务规则。
非功能需求描述系统必须展现的属性或者特性,或者必须遵循的约束。强调的并不是系统要做什么,其重点在于展现系统做的有多棒。包括系统的易用性、安全性、性能等特征。
特性单个或者多个用户 ...
需求开发
需求开发建立业务需求定义业务需求“业务需求”指的是一组信息,描述的是需要,在此需要的指导下,一个或多个项目交付一个解决方案和符合预期的最终业务成果。
确定预期业务收益 业务需求设置业务背景,提供衡量体系业务希望通过该项目达成怎样的收益。组织如果不清楚项目能为业务增加什么价值,就不要启动任何项目。为业务目标设置可度量的目标,然后定义指标,以便衡量是否在实现这些目标的正确轨道上。 业务分析师应能够确保有合适的干系人设置业务需求和引导获取活动,优先级排序和解决冲突。 业务收益必须体现对项目发起人和产品客户的真正价值。
产品愿景和项目范围 业务需求的两个核心元素是愿景和范围。 产品愿景简单描述最终产品将要达成什么业务目标。该产品可以作为业务需求的完整解决方案或解决方案的一部分。愿景描述产品大约是什么并且最终变成什么。它提供整个产品生命周期中决策的背景,让所有干系人团结在一个共同的目标之下。 项目范围明确当前项目或开发迭代应强调最终产品愿景的哪些部分。范围声明描述的是项目内外的边界。
愿景作为一个整体应用于产品。随着产品战略定位或公司业务目标随时间而演化,愿景也要做出相对缓慢的变更。范围 ...
SpringAOP
Spring的AOPAOP实现可分为两类
静态AOP实现AOP框架在编译阶段对程序进行修改,即实现对目标类型的增强,生成静态的AOP代理类(生成的*.class文件已经被改掉了,需要使用特定的编译器)。以AspectJ代表。
动态AOP实现AOP框架在巡行阶段动态生成AOP代理(在内存中以JDK动态代理或cglib动态地生成AOP代理类),以实现对目标对象的增强。以SpringAOP为代表
一般来说,静态AOP实现具有较好的性能,但需要使用特殊的编译器。动态AOP实现是纯Java实现,因此无须特殊的编译器,但是通常性能较差。
AOP的基本概念术语:
切面(Aspect):切面用于组织多个Advice,Advice放在切面中定义
连接点(Joinpoint):程序执行过程中明确的店,如方法的调用,或者异常的抛出。在SpringAOP中,连接点总是方法的调用
增强处理(Advice):AOP框架在特定的切入点执行的增强处理。处理有“around”、“before”、“after”等类型
切入点(Ponitcut):可以插入增强处理的连接点。简而言之,当某个连接点满足指定要求时, ...
Spring入门
Spring入门使用Spring容器Spring有两个核心接口,BeanFactory和ApplicationContext,其中ApplicationContext是BeanFactory的子接口。它们都可代表Spring容器,Spring容器是生成Bean实例的工厂,并管理容器中的Bean.
Spring容器BeanFactory是Spring最基本的容器,包含如下几个基本方法:
123456789// 判断Spring容器中是否包含id为name的Bean实例boolean containsBean(String name);// 获取Spring容器中输入requiredType类型的、唯一的Bean实例<T> T getBean(Class<T> requiredType);// 返回容器id为name的Bean实例Object getBean(String name);// 返回容器中id为name,并且类型类requiredType的Bean<T> T getBean(String name,class<T> require ...
Spring 的事务
Spring 的事务Spring支持的事务策略Java EE应用的传统事务有两种策略:全局事务和局部事务。全局事务由应用服务器管理,需要底层服务器的JTA(全称Java Transaction API ,即Java事务API)。局部事务和底层所采用的持久化技术相关,当采用JDBC持久化技术时,需要使用Connection对象来操作事务;而采用Hibernate持久化技术时,需要使用Session对象来操作事务。
术语
全局事务:Global Transactions
局部事务:Local Transactions
JTA:Java Transaction API(Java事务接口)
CMT:Container Managed Transaction(容器管理事务)
声明式事务管理:Declarative Transaction Management
编程式事务管理:Programmatic Transaction Management
JNDI:Java Naming and Directory Interface(Java命名和目录接口)
全局事务 全局事务由应用服务器通 ...
Spring的缓存机制
Spring的缓存机制Spring的缓存不是一种具体的缓存实现方案,它底层需要依赖EhCache、Guava等具体的缓存工具。应用程序只要面向Spring缓存API编程,应用底层的缓存实现可以在不同的缓存之间自由切换,应用程序无须任何改变,只需要对配置文件略作修改即可。
启用Spring缓存为了启用Spring缓存,需要在配置文件中导入cache:命名空间。导入cache:命名空间之后,启用Spring缓存还需要两步:
在Spring配置文件中添加<cache:annotation-driven cache-mangager="缓存管理器ID"/>,该元素指定Spring根据注解来启用Bean级别或方法的缓存
针对不同的缓存实现配置对应的缓存管理器
Spring内置缓存实现的配置Spring内置的缓存实现只是一种内存中的缓存,并非真正的缓存实现,因此通常指能用于简单的测试环境,不建议在实际项目中使用Spring内置的缓存实现。Spring内置的缓存实现使用SimpleCacheManager作为缓存管理器,使用SimpleCacheManager ...
深入使用 Spring
深入使用 Spring两种后处理器
Bean后处理器:这种后处理器会对容器中的 Bean进行后处理,对 Bean 进行额外加强
容器后处理器:这种后处理器对 IoC 容器进行后处理,用于增强容器功能
Bean 后处理器Bean 后处理器是一种特殊的 Bean,这种特殊的 Bean 并不对外提供服务,它甚至无需 id 属性,它主要负责对容器中其他 Bean 执行后处理,例如为容器中的目标 Bean 生成代理等,这种Bean 被称作Bean后处理器
Bean后处理器会在 Bean 实例创建成功之后,对 Bean 实例进行进一步的增强处理,Bean 后处理器必须实现 BeanPostProcessor 接口,该接口包含如下两个方法:
1234// 该方法的第一个参数是系统即将进行后处理的 Bean 实例,第二个参数是该 Bean 的配置 idObject postProcessAfterInitialization(Object bean, String beanName)throws BeansException// 该方法的第一个参数是系统即将进行后处理的 Bean 实例,第二个参 ...