java基础
面向对象3大特征
简而言之,一个程序至少有一个进程,一个进程至少有一个线程.
线程的划分尺度小于进程,使得多线程程序的并发性高。
另外,进程在执行过程中拥有独立的内存单元,而多个线程共享内存,从而极大地提高了程序的运行效率。
线程在执行过程中与进程还是有区别的。每个独立的线程有一个程序运行的入口、顺序执行序列和程序的出口。但是线程不能够独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制。
四、线程的五大状态
1.新建状态(New):
当用new操作符创建一个线程时, 例如new Thread®,线程还没有开始运行,此时线程处在新建状态。 当一个线程处于新生状态时,程序还没有开始运行线程中的代码
2.就绪状态(Runnable)
一个新创建的线程并不自动开始运行,要执行线程,必须调用线程的start()方法。当线程对象调用start()方法即启动了线程,start()方法创建线程运行的系统资源,并调度线程运行run()方法。当start()方法返回后,线程就处于就绪状态。
处于就绪状态的线程并不一定立即运行run()方法,线程还必须同其他线程竞争CPU时间,只有获得CPU时间才可以运行线程。因为在单CPU的计算机系统中,不可能同时运行多个线程,一个时刻仅有一个线程处于运行状态。因此此时可能有多个线程处于就绪状态。
3.运行状态(Running)
当线程获得CPU时间后,它才进入运行状态,真正开始执行run()方法.
三、索引
什么时候用?
应该只为最经常查询和最经常排序的数据列建立索引。
只有表或视图的所有者才能为表创建索引
优点:
第一,通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
第二,可以大大加快 数据的检索速度,这也是创建索引的最主要的原因。
第三,可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
第四,在使用分组和排序 子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
第五,通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
缺点
第一,创建索引和维护索引要耗费时间,这种时间随着数据 量的增加而增加。
第二,索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
第三,当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
四、触发器:在一表执行一个事件时触发另一个事件
优点:
或者:
2.create table B like A;
八、事务的:原子性、一致性、分离性、持久性
原子性:整个事务中的所有操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可以只执行其中的一部分操作。
持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。
隔离性:事务的执行是互不干扰的,一个事务不可能看到其他事务运行时,中间某一时刻的数据
一致性:一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
第一范式1NF:字段不可分;
第二范式2NF:有主键,非主键字段依赖主键;
第三范式3NF:非主键字段不能相互依赖;
解释:
1NF:原子性 字段不可再分,否则就不是关系数据库;
2NF:唯一性 一个表只说明一个事物;
3NF:每列都与主键有直接关系,不存在传递依赖;
前端
一、定义方式
相对定位
想让一个元素在他本来的位置做一些调整(位移),我们可以将该元素定位设置为relative,同时指定相对位移(利用top,bottom,left,right)。
absolute(绝对定位)
如果你想在一个文档(Document)中将一个元素放至指定位置,你可以使用absolute来定位,将该元素的position设置为absolute,同时使用top,bottom,left,right来定位。
如果没有父元素,位置是相对于body来进行的。
绝对定位会使元素从文档流中被删除,结果就是该元素原本占据的空间被其它元素所填充。
(固定定位)
根据屏幕的位置
获取对象
节点的类型有那些?
ELEMENT_NODE: 1, 元素节点
ATTRIBUTE_NODE: 2, 属性节点
TEXT_NODE: 3, 文本节点
如何访问节点?
前端除了jQ框架还有什么长用的框架
gulp.js grunt sea.js Bootstrap、React、Angular
servlet与jsp
一、jsp九大内置对象 四大作用域
request 请求对象 类型 javax.servlet.ServletRequest 作用域 Request
response 响应对象 类型 javax.servlet.SrvletResponse 作用域 Page
pageContext 页面上下文对象 类型 javax.servlet.jsp.PageContext 作用域 Page
session 会话对象 类型 javax.servlet.http.HttpSession 作用域 Session
application 应用程序对象 类型 javax.servlet.ServletContext 作用域 Application
out 输出对象 类型 javax.servlet.jsp.JspWriter 作用域 Page
config 配置对象 类型 javax.servlet.ServletConfig 作用域 Page
page 页面对象 类型 javax.lang.Object 作用域 Page
exception 例外对象 类型 javax.lang.Throwable 作用域 page
jsp四个作用域
application作用域就是服务器启动到关闭的整段时间,在这个作用域内设置的信息可以被所有应用程序使用。application作用域上的信息传递是通过ServletContext实现的.
session作用域比较容易理解,同一浏览器对服务器进行多次访问,在这多次访问之间传递信息,就是session作用域的体现,
一个HTTP请求的处理可能需要多个Servlet合作,而这几个Servlet之间可以通过某种方式传递信息,但这个信息在请求结束后就无效了。Servlet之间的信息共享是通过HttpServletRequest接口的两个方法来实现的。
page对象的作用范围仅限于用户请求的当前页面,对于page对象的引用将在响应返回给客户端之后被释放,或者在请求被转发到其他地方后被释放。对page对象的引用通常存储在pageContext对象中。
二、jsp指令与动作
jsp命令指令用来设置与整个jsp页面相关的属性,它并不直接产生任何可见的输出,而只是告诉引擎如何处理其余JSP页面。其一般语法形式为: <%@ 指令名称 属性=“值”%>
三种命令指令分别是page、include、taglib。
一、page指令。
功能:设定整个JSP网页的静态属性。
语法:<%@ page 标签元素=“值”%>,比如 <%@ page language=“java”%>
标签元素:language、import、contentType、session、errorPage、isErrorPage等等。
1、language
language=“language” 指定JSP Container要用什么语言来编译JSP网页。目前只可以使用Java语言,不过不排除增加其它语言。默认值为Java。比如 <%@ page language=“java”%>
2、import
import=“importList” 定义此JSP页面可以使用哪些Java API。用逗号分隔列出一个或多个全质类名。此列表用于在生成的java servlet中创建相应的导入语句。以下包是自动包含的,不必被指出:java.lang.;java.servlet.;java.servlet.jsp.;java.servlet.http. 比如<%@ page import=“java.util.*”%>
3、contentType
contentType=“ctinfo” 表示将在生成servlet中使用的MIME(Multipurpose Internet Mail Extensions)多用途互联网邮件扩展 类型和可选字符解码。比如<%@ page contentType=“text/html;charset=GBK”%>
4、session
session=“true|false” 指明JSP页面是否需要一个HTTP会话,如果为true,那么产生的servlet将包含创建一个HTTP会话(或访问一个HTTP会话)的代码,缺省为true。
5、errorPage
errorPage=“error_url” 表示如果发生异常错误,网页会被重新指向一个URL页面。错误页面必须在其page指令元素中指定isErrorPage=“true”
6、isErrorPage
isErrorPage=“true|false” 如果此页面被用作处理异常错误的页面,则为true。在这种情况下,页面可被指定为另一页面page指令元素中errorPage属性的取值。指定此属性为true将使exception隐含变量对此页面可用。缺省值为false。
二、include指令
功能:include指令用来向当前页面插入一个静态文件的内容。这个文件可以是JSP、HTML、文本或是Java程序。
语法:<%@ include file=“filename” %> 比如 <%@ include file=“111.txt” %>
标签元素:file
注意:include指令元素和行为元素主要有两个方面的不同点。
1.include指令是静态包含,执行时间是在编译阶段执行,引入的内容为静态文要,在编译成servlet时就和包含者融合到一起。所以file不能是一个变量,也不能在file后接任何参数。
2.include行为是动态包含,执行时间是在请求阶段执行,引入的内容在执行页面时被请求时动态生成再包含到页面中。
三、taglib指令
功能:使用标签库定义新的自定义标签,在JSP页面中启用定制行为。
当页面引用了用户自定义标签时,taglib指令用于引用自定义标签库,并指定标签的前缀。
语法:<%@ taglib uri=“URIToTagLibrary” prefix=“tagPrefix” %>
如<%@ taglib uri=“http://www.jspcentral.com/tags” prefix=“JAXP” %>
标签元素:uri、Prefixpage指令元素的属性
uri=“tagLibraryURI” 标签库描述器的URI,主要是说是tagLibrary的存放位置。
prefix=“tagPrefix” 用于标识在页面后面部分使用定制标签的唯一前缀。
前缀在标签的名字前面使用,例如,在中public在loop前面。空的前缀将被忽略。如果你正在开发或使用自定义的标签的话,你不能使用标签前缀:jsp,jspx,java,javax,servlet,sun和sunw等,因为他们已经被Sun的系统的所使用。
三、JSP基本动作
JSP中的动作元素包括:include、forward、useBean、getProperty、setProperty、plugin、param。
1.include动作
jsp:include标签用来包含一个静态或者动态的文件。
2.forward动作
jsp:forward标签用来重定向一个静态HTML文件、JSP文件或者是一个程序段。
3.useBean动作
jsp:useBean标签用来在JSP页面中创建一个Bean实例,并指定其名称和作用范围。
4.getProperty动作
jsp:getProperty标签用来获取Bean的属性值(在此之前必须用jsp:useBean创建它),并将之转化为一个字符串,然后将其插入到输出的页面中。
5.setProperty动作
jsp:setProperty标签表示用来设置Bean中的属性值。
6.plugin动作
jsp:plugin 标签用于在浏览器中播放或显示一个对象(典型为applet和Bean),这种显示需要在浏览器上安装Java插件。当JSP文件被编译后送往浏览器时,jsp:plugin元素将会根据浏览器的版本替换成或者元素。
7.param动作
jsp:param标签用来传递参数,必须与forward、include及plugin动作配合使用
四、servlet 与 jsp的区别
JSP在本质上就是SERVLET,但是两者的创建方式不一样.
Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.
JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.
因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.
在struts框架中,JSP位于MVC设计模式的视图层,而Servlet位于控制层.
JSP是Servlet技术的扩展,本质上就是Servlet的简易方式。
JSP编译后是“类servlet”。
Servlet和JSP最主要的不同点在于,Servlet的应用逻辑是在Java文件中,并且完全从表示层中的HTML里分离开来。而JSP是Java和HTML组合成一个扩展名为.jsp的文件。
JSP侧重于视图,Servlet主要用于控制逻辑.
五,转发与重定向的区别
1.从地址栏显示来说
forward是服务器请求资源,服务器直接访问目标地址的URL,把那个URL的响应内容读取过来,然后把这些内容再发给浏览器.浏览器根本不知道服务器发送的内容从哪里来的,所以它的地址栏还是原来的地址.
redirect是服务端根据逻辑,发送一个状态码,告诉浏览器重新去请求那个地址.所以地址栏显示的是新的URL.
2.从数据共享来说
forward:转发页面和转发到的页面可以共享request里面的数据.
redirect:不能共享数据.
3.从效率来说
forward:高.
redirect:低.
六、servlet生命周期
Servlet生命周期分为三个阶段:
1. init()方法
在Servlet的生命周期中,仅执行一次init()方法,它是在服务器装入Servlet时执行的,可以配置服务器,以在启动服务器或客户机首次访问Servlet时装入Servlet。无论有多少客户机访问Servlet,都不会重复执行init();
2. service()方法 它是Servlet的核心,每当一个客户请求一个HttpServlet对象,该对象的Service()方法就要调用,而且传递给这个方法一个“请求”(ServletRequest)对象和一个“响应”(ServletResponse)对象作为参数。在HttpServlet中已存在Service()方法
3. destroy()方法
仅执行一次,在服务器端停止且卸载Servlet时执行该方法,有点类似于C++的delete方法。
Servlet工作原理:
Servlet接收和响应客户请求的过程,首先客户发送一个请求,Servlet是调用service()方法对请求进行响应的,service()方法中对请求的方式进行了匹配,选择调用doGet,doPost等这些方法,然后再进入对应的方法中调用逻辑层的方法,实现对客户的响应。
cookie 和session 的区别:
1、cookie数据存放在客户的浏览器上,session数据放在服务器上。
2、cookie不是很安全,别人可以分析存放在本地的COOKIE并进行COOKIE欺骗
考虑到安全应当使用session。
3、session会在一定时间内保存在服务器上。当访问增多,会比较占用你服务器的性能
考虑到减轻服务器性能方面,应当使用COOKIE。
4、单个cookie保存的数据不能超过4K,很多浏览器都限制一个站点最多保存20个cookie。
5.cookie关闭浏览器就失效 session默认保存30分钟
6、所以个人建议:
将登陆信息等重要信息存放为SESSION
其他信息如果需要保留,可以放在COOKIE中
MVC
全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写
Model(模型)是应用程序中用于处理应用程序数据逻辑的部分。
通常模型对象负责在数据库中存取数据。
View(视图)是应用程序中处理数据显示的部分。
通常视图是依据模型数据创建的。
Controller(控制器)是应用程序中处理用户交互的部分。
通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
SpringMVC运行原理
prototype :
prototype作用域部署的bean,每一次请求(将其注入到另一个bean中,或者以程序的方式调用容器的getBean()方法)都会产生一个新的bean实例,相当于一个new的操作,对于prototype作用域的bean,有一点非常重要,那就是Spring不能对一个 prototype bean的整个生命周期负责,容器在初始化、配置、装饰或者是装配完一个prototype实例后,将它交给客户端,随后就对该prototype实例不闻不问了
Request:
request表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP request内有效
session
session作用域表示该针对每一次HTTP请求都会产生一个新的bean,同时该bean仅在当前HTTP session内有效
global session
global session作用域类似于标准的HTTP Session作用域,不过它仅仅在基于portlet的web应用中才有意义。Portlet规范定义了全局Session的概念,它被所有构成某个 portlet web应用的各种不同的portlet所共享。在global session作用域中定义的bean被限定于全局portlet Session的生命周期范围内。如果你在web中使用global session作用域来标识bean,那么,web会自动当成session类型来使用。
Spring 框架是一个分层架构,由 7 个定义良好的模块组成
。Spring 模块构建在核心容器之上,核心容器定义了创建、配置和管理 bean 的方式,组成 Spring 框架的每个模块(或组件)都可以单独存在,或者与其他一个或多个模块联合实现。每个模块的功能如下:
核心容器:核心容器提供 Spring 框架的基本功能。核心容器的主要组件是 BeanFactory,它是工厂模式的实现。BeanFactory 使用控制反转 (IOC)模式将应用程序的配置和依赖性规范与实际的应用程序代码分开。
Spring 上下文:Spring 上下文是一个配置文件,向 Spring 框架提供上下文信息。Spring 上下文包括企业服务,例如 JNDI、EJB、电子邮件、国际化、校验和调度功能。
Spring AOP:通过配置管理特性,Spring AOP 模块直接将面向方面的编程功能集成到了 Spring 框架中。所以,可以很容易地使 Spring 框架管理的任何对象支持 AOP。Spring AOP 模块为基于 Spring 的应用程序中的对象提供了事务管理服务。通过使用 Spring AOP,不用依赖 EJB 组件,就可以将声明性事务管理集成到应用程序中。
Spring DAO:JDBC DAO 抽象层提供了有意义的异常层次结构,可用该结构来管理异常处理和不同数据库供应商抛出的错误消息。异常层次结构简化了错误处理,并且极大地降低了需要编写的异常代码数量(例如打开和关闭连接)。Spring DAO 的面向 JDBC 的异常遵从通用的 DAO 异常层次结构。
Spring ORM:Spring 框架插入了若干个 ORM 框架,从而提供了 ORM 的对象关系工具,其中包括 JDO、Hibernate 和 iBatis SQL Map。所有这些都遵从 Spring 的通用事务和 DAO 异常层次结构。
Spring Web 模块:Web 上下文模块建立在应用程序上下文模块之上,为基于 Web 的应用程序提供了上下文。所以,Spring 框架支持与 Jakarta Struts 的集成。Web 模块还简化了处理多部分请求以及将请求参数绑定到域对象的工作。
Spring MVC 框架:MVC 框架是一个全功能的构建 Web 应用程序的 MVC 实现。通过策略接口,MVC 框架变成为高度可配置的,MVC 容纳了大量视图技术,其中包括 JSP、Velocity、Tiles、iText 和 POI。
spring原理
内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xml Spring的配置文件来动态的创建对象,和调用对象里的方法的 。
Spring还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是 在调用这类对象的具体方法的前后去调用你指定的 模块)从而达到对一个模块扩充的功能。这些都是通过 配置类达到的。
Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)
spring依赖注入:依赖注入其实就是控制反转,它分为构造方法注入,set方法注入,接口注入,我们最常用的就是set方法注入。
Spring的AOP
优点:
AOP只是一种编程范式,用于提供从另一角度来考虑程序结构以完善面向对象编程。主要优点有:1-降低模块之间的耦合度。2-使系统容易扩展。3-更好的代码复用。
AOP的概念(切面,连接点,通知[顾问],切入点,[引入,关注点],目标对象, 代理对象, 织入目标)
2.1 切面(Aspect):一个关注点的模块化,这个关注点可能会横切多个对象。事务管理是J2EE应用中一个关于横切关注点的很好的例子
在Aspect中 声明类似于Java 中的类声明,在Aspect中会包含着一些切入点Pointcut 以及对切入点进行相应的操作的通知Advice。
2.2 连接点(Joinpoint):在程序执行过程中某个特定的点,比如某方法调用的时候或者处理异常的时候。在Spring AOP中,一个连接点总是表示一个方法的执行。
2.3 通知(Advice)有时候也叫处理:Advice(通知):所谓通知是指拦截到切入点之后所要做的事情就是通知.通知分为前置通知,后置通知,异常通知,最终通知,环绕通知
2.4 切入点(Pointcut):连接点集合
2.5 Target Object): 被一个或者多个切面所通知的对象。也被称做被通知(advised)对象
2.6 AOP代理(AOP Proxy):AOP框架创建的对象,用来实现切面功能(例如通知方法执行等等)。在Spring中,AOP代理可以是JDK动态代理或者CGLIB代理。
2.7 织入 (Weave):指将切面应用到目标对象并导致代理对象创建的过程称为织入.
2.8 引入(Introduction):在不修改类代码的前提下, Introduction可以在运行期为类动态地添加一些方法
AOP的通知
3.1 前置通知:执行目标方法前拦截到的方法。没有特殊注意的地方,只需要一个连接点,JoinPoint,即可获取拦截目标方法以及请求参数。
3.2 后置通知: 切面的后置通知,不管方法是否抛出异常,都会走这个方法。只需要一个连接点,JoinPoint,即可获取当前结束的方法名称。
3.3 返回通知: 在方法正常执行通过之后执行的通知叫做返回通知。此时注意,不仅仅使用JoinPoint获取连接 点信息,同时要在返回通知注解里写入,resut=“result”。在切面方法参数中加入Object result,用于接受返回通知 的返回结果。如果目标方法方法是void返回类型则返回NULL
3.4 异常通知: 在执行目标方法过程中,如果方法抛出异常则会走此方法。和返回通知很相似,在注解中 加入,throwing=“ex”,在切面方法中加入Exection ex用于接受异常信息
3.5 环绕通知:环绕通知需要携带ProceedingJoinPoint 这个类型的参数,环绕通知类似于动态代理的全过程 ProceedingJoinPoint类型的参数可以决定是否执行目标函数环绕通知必须有返回值。其实就是包含了所有通知的全 过程
MyBatis与Hibernate的区别
两者相同点
• Hibernate与MyBatis都可以是通过SessionFactoryBuider由XML配置文件生成SessionFactory,然后由SessionFactory 生成Session,最后由Session来开启执行事务和SQL语句。
• Hibernate和MyBatis都支持JDBC和JTA事务处理。
Mybatis优势
• MyBatis可以进行更为细致的SQL优化,可以减少查询字段
•mybatis是把sql语句与java代码分离了…sql语句在xml文件配置的
Hibernate优势
• Hibernate的DAO层开发比MyBatis简单,Mybatis需要维护SQL和结果映射。
• Hibernate对对象的维护和缓存要比MyBatis好,对增删改查的对象的维护要方便。
• Hibernate数据库移植性很好,MyBatis的数据库移植性不好,不同的数据库需要写不同SQL。
• Hibernate有更好的二级缓存机制,可以使用第三方缓存。MyBatis本身提供的缓存机制不佳。
•大大简化了dao层的编码工作
mybatis与jdbc的区别:
jdbc操作数据的效率更高,mybatis实现了对Dao层的封装,便于管理扩展
hibernate与jdbc的区别:
hibernate操作的是对象去操作数据库,jdbc则是直接操作数据库
JDBC要比hibernate的效率好,因为hibernate是基于JDBC的技术
hibernate是JDBC的轻量级封装对象,hibernate可以用在任何JDBC可以使用的场合
ajax的优缺点。
优点:
最大的优点是页面局部刷新。
使用异步方式与服务器通讯,响应速度更快。
还可以减轻服务器端的负担。
缺点:
最大的缺点就是不能回退。
只能用于小型项目的业务逻辑,不适于大型项目的业务逻辑
安全性不高,因为Ajax是基于脚本的客户端可能会看到源码。
***** Struts2请求处理流程 *****
1、客户端发送请求 (客户端初始化一个指向Servlet容器(如Tomcat)的请求)
2、请求经过一系列过滤器(如ActionContextCleanUp、SiteMesh等),ActionContextCleanUp–>FilterDispatcher
3、FilterDispatcher通过ActionMapper来决定这个Request需要调用哪个Action 如果不是调用action 则直接执行你的资源
4、如果ActionMapper决定调用某个Action,FilterDispatcher把请求的处理交给ActionProxy,
5、ActionProxy通过Configuration Manager询问Struts配置文件(Struts.xml),找到需要调用的Action类。
6、ActionProxy创建一个ActionInvocation的实例
7、ActionInvocation调用真正的Action,当然这涉及到相关拦截器的调用
8、Action执行完毕,ActionInvocation创建Result并返回,返回结果前要做些动作也是可以的
什么时候用assert。
assertion(断言)在软件开发中是一种常用的调试方式,很多开发语言中都支持这种机制。在实现中,assertion就是在程序中的一条语句,它对一个boolean表达式进行检查,一个正确程序必须保证这个boolean表达式的值为true;如果该值为false,说明程序已经处于不正确的状态下,assert将给出警告或退出。一般来说,assertion用于保证程序最基本、关键的正确性。assertion检查通常在开发和测试时开启。为了提高性能,在软件发布后,assertion检查通常是关闭的。
反射机制的概念:
指在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法,对于任意一个对象,都能调用它的任意一个方法.这种动态获取信息,以及动态调用对象方法的功能叫java语言的反射机制.
Java有23种设计模式
创建型模式用来处理对象的创建过程,主要包含以下5种设计模式:
Ø 工厂方法模式(Factory Method Pattern)--------记住
Ø 抽象工厂模式(Abstract Factory Pattern)------记住
Ø 建造者模式(Builder Pattern)---------------记住
Ø 原型模式(Prototype Pattern)---------------记住
Ø 单例模式(Singleton Pattern)---------------记住
结构型模式用来处理类或者对象的组合,主要包含以下7种设计模式:
Ø 适配器模式(Adapter Pattern)
Ø 桥接模式(Bridge Pattern)
Ø 组合模式(Composite Pattern)
Ø 装饰者模式(Decorator Pattern)-------记住
Ø 外观模式(Facade Pattern)
Ø 享元模式(Flyweight Pattern)
Ø 代理模式(Proxy Pattern)
行为型模式用来对类或对象怎样交互和怎样分配职责进行描述,主要包含以下11种设计模式:
Ø 责任链模式(Chain of Responsibility Pattern)
Ø 命令模式(Command Pattern)
Ø 解释器模式(Interpreter Pattern)
Ø 迭代器模式(Iterator Pattern)----------记住
Ø 中介者模式(Mediator Pattern)
Ø 备忘录模式(Memento Pattern)
Ø 观察者模式(Observer Pattern)
Ø 状态模式(State Pattern)
Ø 策略模式(Strategy Pattern)
Ø 模板方法模式(Template Method Pattern)-------Spring里用的最经典的一个设计模式
Ø 访问者模式(Visitor Pattern)
如何介绍项目
1.先介绍项目背景(基本上是一带而过,然面试官有个了解)
2.项目功能,也就是说说项目是干什么的
3.用到的技术和自己做的结果(细点儿,这部分是重点,要把握住度,面试官一般主要是从这个地方给了解你的实际能力的)
4.说说还需改进的地方(一般不需要,但说说能体现你发现问题的能力)
例一:
版本自动升级工具系统测试软件环境:Windows 2000 Professional SP4; Visual SourceSafe; IIS5.0
硬件环境:Intel® on®2.93GHz; 512M; 40G
开发环境:Delphi
软件介绍:是供证券公司对自身软件进行升级的工具;已经有三个版本,需要对其功能及性能等分别进行测试
主要职责:作为组长,制定测试计划初稿,编写测试需求框架,进行工作任务的分配与安排,参与部分模块——业务流程的测试(编写完整的测试需求、设计测试用例、执行测试用例并完成缺陷报告),完成测试总结分析报告、工作绩效统计;各阶段组织评审;另外对控件命名的规范以及每个人提交文档的格式进行统一。
例二: 2006/4—2006/5:
项目名称:商场管理系统
项目描述: 该项目是在心力教育学习期间以小组为团队完成的一个实践项目,团队5人,我主要负责项目计划、测试需求分析、测试分析和总结分析,系统测试用例设计、执行。 全程使用测试管理工具TestDirector进行管理。
例三:
PhpWind Blog(Web项目)在项目中担任组长,负责制定测试计划,并和组员一起按照测试计划按时完成测试需求、测试用例设计、测试执行和缺陷报告、总结分析报告等一系列测试过程的工作。在测试的开始阶段就进行了需求的细分,事实也验证了这样做的好处。运用了数据驱动的测试用例设计方法进行功能测试和安全性测试,并制定相关指标进行了手工的性能测试。