hibernate中离线查询去除重复项怎么加条件??
dc.setResultTransformer(Criteria.DISTINCT_ROOT_ENTITY);
http协议及端口,smtp协议及端口
http:超文本传输协议 端口 80
smtp:简单邮件传输协议端口25
编写程序,完成文件复制功能
Servlet创建过程及生命周期Servlet 在容器中运行时,其实例的创建及销毁等是由容器进行控制。
Servlet 的创建有两种方法。
客户端请求对应的Servlet 时,创建 Servlet 实例;大部分Servlet 都是这种 Servlet 。
通过在web.xml 中设置load-on-startup来创建servlet实例,这种实例在Web 应用启动时,立即创建Servlet 实例
Servlet 的运行都遵循如下生命周期:
创建 Servlet 实例。
Web 容器调用 Servlet 的 init() 方法,对Servlet 进行初始化。
Servlet 初始化后,将一直存在于容器中,用于响应客户端请求。根据客户端的请求方式通过Servlet中service()方法去相应的doXXX()方法;
Web 容器销毁Servlet 时,调用 Servlet 的 destroy() 方法,通常在关闭Web容器之时销毁Servlet。
用sql语句分页:
Mysql数据库:
SELECT TOP 页大小 * FROM table1WHERE id NOT IN (
SELECT TOP 页大小*(页数-1) id FROM table1 ORDER BY id
) ORDER BY id
Oracle数据库:
在ORACLE大数据量下的分页解决方法。一般用截取ID方法,还有是三层嵌套方法。
截取ID的方法
select * from emp a, (select empno,rownumas num from emp)b where a.empno=b.empno and b.num between 5 and 7;
三层嵌套
SELECT * FROM ( SELECT A.*, rownum r FROM (SELECT * FROM emp ) A WHERE rownum <=7 ) B WHERE r >5;
list.map.set的存储特点?
List 以特定次序来持有元素,可有重复元素.
Set 无法拥有重复元素,内部排序.
Map 保存key-value值,value可多值
final,finally,finaliz的区别
final—修饰符(关键字)如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承。因此一个类不能既被声明为 abstract的,又被声 明为final的。将变量或方法声明为final,可以保证它们在使用中不被改变。被声明为final的变量必须在声明时给定初值,而在以后的引用中只能读取,不可修改 被声明为final的方法也同样只能使用,不能重载。
finally—再异常处理时提供 finally 块来执行任何清除操作。如果抛出一个异常,那么相匹配的 catch 子句就会执行,然后控制就会进入 finally 块(如果有的话)。
finalize—方法名。Java 技术允许使用finalize() 方法在垃圾收集器将对象从内存中清除出去之前做必要的清理工作。这个方法是由垃圾收集器在确定这个对象没有被引用时对这个对象调用的。它是在 Object 类中定义的,因此所有的类都继承了它。子类覆盖;finalize() 方法以整理系统资源或者执行其他清理工作 finalize() 方法是在垃圾收集器删除对象之前对这个对象调用的。
arraylist和vector的区别?
1).同步性:Vector是线程安全的,也就是说是同步的,而ArrayList是线程不安全的,不是同步的
2).数据增长:当需要增长时,Vector默认增长为原来一培,而ArrayList却是原来的一半
说出ArrayList,Vector,LinkedList的存储性能和特性?
ArrayList 采用的是数组形式来保存对象的,这种方式将对象放在连续的位置中,所以最大的缺点就是插入删除时非常麻烦 LinkedList 采用的将对象存放在独立的空间中,而且在每个空间中还保存下一个链接的索引但是缺点就是查找非常麻烦 要丛第一个索引开始
ArrayList和Vector都是用数组方式存储数据,此数组元素数要大于实际的存储空间以便进行元素增加和插入操作,他们都允许直接用序号索引元素,但是插入数据元素涉及到元素移动等内存操作,所以索引数据快而插入数据慢.
Vector使用了sychronized方法(线程安全),所以在性能上比ArrayList要差些.
LinkedList使用双向链表方式存储数据,按序号索引数据需要前向或后向遍历数据,所以索引数据慢,是插入数据时只需要记录前后项即可,所以插入的速度快.
HASHMAP,HASHTABLE区别
1.Hashtable是Dictionary的子类,HashMap是Map接口的一个实现类;
2.Hashtable中的方法是同步的,而HashMap中的方法在缺省情况下是非同步的。
3.在HashMap中,null可以作为键,这样的键只有一个;可以有一个或多个键所对应的值为null。
.描述Cookie和Session的作用,区别和各自的应用范围,Session工作原理
Session用于保存每个用户的专用信息. 每个客户端用户访问时,服务器都为每个用户分配一个唯一的会话ID(Session ID) .她的生存期是用户持续请求时间再加上一段时间(一般是20分钟左右).Session中的信息保存在Web服务器内容中,保存的数据量可大可小.当 Session超时或被关闭时将自动释放保存的数据信息.由于用户停止使用应用程序后它仍然在内存中保持一段时间,因此使用Session对象使保存用户数据的方法效率很低.对于小量的数据,使用Session对象保存还是一个不错的选择
Cookie 用于保存客户浏览器请求服务器页面的请求信息,程序员也可以用它存放非敏感性的用户信息,信息保存的时间可以根据需要设置.如果没有设置Cookie失效日期,它们仅保存到关闭浏览器程序为止.如果将Cookie对象的Expires属性设置为Minvalue,则表示Cookie永远不会过期.Cookie存储的数据量很受限制,大多数浏览器支持最大容量为4K,因此不要用来保存数据集及其他大量数据.由于并非所有的浏览器都支持Cookie,并且数据信息是以明文文本的形式保存在客户端的计算机中,因此最好不要保存敏感的,未加密的数据,否则会影响网站的安全性
session工作原理
(1)当有Session启动时,服务器生成一个唯一值,称为Session ID(好像是通过取进程ID的方式取得的)。
(2)然后,服务器开辟一块内存,对应于该Session ID。
(3)服务器再将该Session ID写入浏览器的cookie。
(4)服务器内有一进程,监视所有Session的活动状况,如果有Session超时或是主动关闭,服务器就释放改内存块。
(5)当浏览器连入IIS时并请求的ASP内用到Session时,IIS就读浏览器Cookie中的Session ID。
(6)然后,服务检查该Session ID所对应的内存是否有效。
(7)如果有效,就读出内存中的值。
(8)如果无效,就建立新的Session。
String和stringbuffer进行字符串连接时的区别?
String对项内容是不可改变的,StringBuffer是可以改变的,且高效;
什么叫项目?
用有限的资源、有限的时间为特定客户完成特定目标的一次性工作
.J2EE J是什么意思? 2是什么意思 EE是什么意思? Struts的拦截器你是怎么做的,是独立开发的,能够独立开发的到。然后问有哪几种拦截?
Java 2 Platform,Enterprise Edition
继承AbstractInterceptor类,覆盖intercept()方法
有struts自己的拦截器 如timer ,i18n,scop,servletconfig,token
还有自定义拦截器
简单介绍下java?Spring的AOP,IOC的讲述 对struts2的了解,1,2的比较 xml的了解 J2ee的webserviced的协议?
Spring AOP:代理机制 Spring提供的自动代理机制
Spring的IoC来实组件之间的依赖关系注入,使控制层与业务实现分离,即客户通过
调用业务委托接口来调用具体的业务组件的实例,避免控制层与业务层的藕合带来的维护
或升级困难。由Spring为DAO生成代理对象来为DAO添加事务服务,由IoC容器DAO的代理实例注入到业务组件中,业务组件通过DAO的委托接口调用DAO对象,使得上层组件不直接依赖于DAO的实现类,使得持久层更换或修改不影响上层组件。
Collections,collection的区别
Collection是个java.util下的接口,它是各种集合结构的父接口。Collections是个java.util下的普通类,它包含有各种有关集合操作的静态方法。Collections是针对集合类的一个帮助类,它提供一系列的静态方法实现对各种集合的搜索,排序,线程安全化等操作
如何释放过度使用的undo表空间
1. 启动SQLPLUS,并用sys登陆到数据库。 2. 查找数据库的UNDO表空间名3. 确认UNDO表空间;SQL> select name from v$tablespace; 4. 检查数据库UNDO表空间占用空间情况以及数据文件存放位置; 5. 查看回滚段的使用情况,哪个用户正在使用回滚段的资源,如果有用户最好更换时间 6. 检查UNDO Segment状态
数据库里面游标,索引是怎么用的? 在oracle数据库中,用get 和load方法这2个方法来查没有的数据那么分别会反馈什么样的结果?
declare cur cursor keyset for
get返回null,load classnotfoundException
.在Oracle中数据库中的一个表中,这个表没有主键id也没有特定标示来查数据,怎么查?
rowid
简述private、proteced、public、internal修饰符的访问权限
同一个类 同一个包 不同包的子类 不同包非子类
private *
default * *
protected * * *
public * * * *
概述反射和序列化
Reflection 是Java被视为动态(或准动态)语言的一个关键性质。这个机制允许程序在运行时透过Reflection APIs取得任何一个已知名称的class的内部信息,包括其modifiers(诸如public, static 等等)、superclass(例如Object)、实现之interfaces(例如Cloneable),也包括fields和methods的所有信息,并可于运行时改变fields内容或唤起methods。本文借由实例,大面积示范Reflection APIs。
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决在对对象流进行读写操作时所引发的问题。
序列化的实现:将需要被序列化的类实现Serializable接口,该接口没有需要实现的方法,implements Serializable只是为了标注该对象是可被序列化的,然后使用一个输出流(如:FileOutputStream)来构造一个 ObjectOutputStream(对象流)对象,接着,使用ObjectOutputStream对象的writeObject(Object obj)方法就可以将参数为obj的对象写出(即保存其状态),要恢复的话则用输入流
ORACLE中not和and和or优先级由高到低?
not and or
java 是如何进行异常处理的
Java通过面向对象的方法进行异常处理,把各种不同的异常进行分类,并提供了良好的接口。在Java中,每个异常都是一个对象,它是Throwable类或其它子类的实例。当一个方法出现异常后便抛出一个异常对象,该对象中包含有异常信息,调用这个对象的方法可以捕获到这个异常并进行处理。Java的异常处理是通过5个关键词来实现的:try、catch、throw、throws和finally。一般情况下是用try来执行一段程序,如果出现异常,系统会抛出(throws)一个异常,这时候你可以通过它的类型来捕捉(catch)它,或最后(finally)由缺省处理器来处理
struts2 必备包
commons-fileupload-1.2.1.jar
freemarker-2.3.13.jar
ognl-2.6.11.jar
struts2-core-2.1.6.jar
xwork-2.1.2.jar
dao 是什么及作用
dao 是数据访问对象 DAO负责管理与数据源的连接来获取和储存其中的数据
ibatis 中的#与$的区别
在Ibatis中我们使用SqlMap进行Sql查询时需要引用参数,在参数引用中遇到的符号#和$之间的区分为,#可以进行与编译,进行类型匹配,而$不进行数据类型匹配,例如:
select * from table where id = #id# ,其中如果字段id为字符型,那么#id#表示的就是’id’类型,如果id为整型,那么#id#就是id类型。
select * from table where id = $id$ ,如果字段id为整型,Sql语句就不会出错,但是如果字段id为字符型,那么Sql语句应该写成 select * from table where id= ‘$id$‘
struts2的实现原理
1、客户端初始化一个指向Servlet容器(例如Tomcat)的请求
2、这个请求经过一系列的过滤器(Filter)(这些过滤器中有一个叫做ActionContextCleanUp的可选过滤器,这个过滤器对于Struts2和其他框架的集成很有帮助,例如:SiteMesh Plugin);
3、接着FilterDispatcher被调用,FilterDispatcher询问ActionMapper来决定这个请求是否需要调用某个Action;
4、如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy;
5、ActionProxy通过Configuration Manager询问框架的配置文件,找到需要调用的Action类;
6、ActionProxy创建一个ActionInvocation的实例。
7、ActionInvocation实例使用命名模式来调用,在调用Action的过程前后,涉及到相关拦截器(Intercepter)的调用。
8、一旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果。返回结果通常是(但不总是,也可能是另外的一个Action链)一个需要被表示的JSP或者FreeMarker的模版。在表示的过程中可以使用Struts2框架中继承的标签。在这个过程中需要涉及到ActionMapper
简述spring 的事务传播行为和 隔离级别
spring 的事务传播行为:
Spring在TransactionDefinition接口中规定了7种类型的事务传播行为,它们规定了事务方法和事务方法发生嵌套调用时事务如何进行传播:
PROPAGATION_REQUIRED:如果当前没有事务,就新建一个事务,如果已经存在一个事务中,加入到这个事务中。这是最常见的选择。
PROPAGATION_SUPPORTS:支持当前事务,如果当前没有事务,就以非事务方式执行。
PROPAGATION_MANDATORY:使用当前的事务,如果当前没有事务,就抛出异常。
PROPAGATION_REQUIRES_NEW:新建事务,如果当前存在事务,把当前事务挂起。
PROPAGATION_NOT_SUPPORTED:以非事务方式执行操作,如果当前存在事务,就把当前事务挂起。
PROPAGATION_NEVER:以非事务方式执行,如果当前存在事务,则抛出异常。
PROPAGATION_NESTED:如果当前存在事务,则在嵌套事务内执行。如果当前没有事务,则执行与PROPAGATION_REQUIRED类似的操作。
Spring 的隔离级别
1、Serializable:最严格的级别,事务串行执行,资源消耗最大;
2、REPEATABLE READ:保证了一个事务不会修改已经由另一个事务读取但未提交(回滚)的数据。避免了”脏读取”和”不可重复读取”的情况,但是带来了更多的性能损失。
3、READ COMMITTED:大多数主流数据库的默认事务等级,保证了一个事务不会读到另一个并行事务已修改但未提交的数据,避免了”脏读取”。该级别适用于大多数系统。
4、Read Uncommitted:保证了读取过程中不会读取到非法数据。
写一段把本地文件formfile拷贝到本地文件tofile的程序
public class ChangeJtdToJava {
public static voidmain(String[] args) {
Filedir = new File(“f:/jtd”);
//得到d:/jtd 下的所有文件对象
File[]files = dir.listFiles();
for(File file : files) {
StringfileName = file.getName(); // 得到文件名
intindex = fileName.indexOf(“.”);// .的索引位置
StringfileName2 = fileName.substring(0, index); // 不带后缀名的文件名
StringhouZui = fileName.substrinxg(index);
if(houZui.equals(“.jtd”)) {
//“f:/java/” + fileName2 + “.java”
//要移到的地方
file.renameTo(newFile(“f:/java/” + fileName2 + “.java”));
}
}
}
}
写出删除表中重复记录的语句oracle
delete from people
where peopleId in (select peopleId frompeople group by peopleId having count(peopleId) > 1) and rowid not in(select min(rowid) from people group by
java 类实现序列化的方法(二种)?如在collection框架中,要实现什么样的接口
java.io.Serializable接口
Collection框架中实现比较要实现Comparable 接口和 Comparator 接口
Struts2实现拦截器的原理?
实现原理:Struts2拦截器是在访问某个Action或Action的某个方法、字段之前或之后实施拦截,并且Struts2拦截器是可插拔的,拦截器是AOP的一种实现。当请求struts2的action时,Struts 2会查找配置文件,并根据其配置实例化相对的拦截器对象,然后串成一个列表,最后一个一个地调用列表中的拦截器。
sleep()和wait()区别
sleep() 方法:线程主动放弃CPU,使得线程在指定的时间内进入阻塞状态,不能得到CPU 时间,指定的时间一过,线程重新进入可执行状态。典型地,sleep() 被用在等待某个资源就绪的情形:测试发现条件不满足后,让线程阻塞一段时间后重新测试,直到条件满足为止。
wait( ) :与notify()配套使用,wait()使得线程进入阻塞状态,它有两种形式,一种允许指定以毫秒为单位的一段时间作为参数,另一种没有参数,当指定时间参数时对应的notify() 被调用或者超出指定时间时线程重新进入可执行状态,后者则必须对应的 notify() 被调用
Servlet的生命周期分为3个阶段:? 和CGI的区别?
Servlet的生命周期主要由3个过程组成。
(1)init()方法:服务器初始化servlet。
(2)service()方法:初始化完毕,servlet对象调用该方法响应客户的请求。
(3)destroy()方法:调用该方法消灭servlet对象。
其中,init()方法只在servlet第一次被请求加载的时候被调用一次,当有客户再请求servlet服务时,web服务器将启动一个新的线程,在该线程中,调用service方法响应客户的请求。
与cgi的区别在于servlet处于服务器进程中,它通过多线程方式运行其service方法,一个实例可以服务于多个请求,并且其实例一般不会销毁,而CGI对每个请求都产生新的进程,服务完成后就销毁,所以效率上低于servlet。
forward与redirect 的区别?有哪些方式实现
多线程、同步实现方法?
1)实现线程有两种方法:继承Thread类或者实现Runnable接口
2)实现同步也有两种,一种是用同步方法,一种是用同步块.. 同步方法就是在方法返回类型后面加上synchronized, 比如:
public void synchronized add(){…}
同步块就是直接写:synchronized(这里写需要同步的对象){…}
集合类有哪些?有哪些方法?
集合类 ArrayList LinkedListHashSet HashMap
方法:add(),remove(),put(),addAll(),removeAll()
java中实现多态的机制是什么
重写,重载
方法的重写Overriding和重载Overloading是Java多态性的不同表现。
重写Overriding是父类与子类之间多态性的一种表现,重载Overloading是一个类中多态性的一种表现。如果在子类中定义某方法与其父类有相同的名称和参数,我们说该方法被重写 (Overriding)。子类的对象使用这个方法时,将调用子类中的定义,对它而言,父类中的定义如同被”屏蔽”了。
果在一个类中定义了多个同名的方法,它们或有不同的参数个数或有不同的参数类型,则称为方法的重载(Overloading)。Overloaded的方法是可以改变返回值的类型。
静态的多态和动态的多态的区别
静态的多态: 即为重载 ;方法名相同,参数个数或类型不相同。(overloading)
动态的多态: 即为重写;子类覆盖父类的方法,将子类的实例传与父类的引用调用的是子类的方法 实现接口的实例传与接口的引用调用的实现类的方法。
作用域Public,private,protected.以及不写时的区别
public整个java程序中都可以访问
protected在其他包中不可以访问
friendly只有当前包或当前内可以访问,其他都不行
private只有当前内可以访问
不写的话默认是protected
extends和implement的不同
extends是继承父类,只要那个类不是声明为final或者那个类定义为abstract的就能继承,JAVA中不支持多重继承,但是可以用接口来实现,这样就要用到implements,继承只能继承一个类,但implements可以实现多个接口,用逗号分开就行了 比如 class A extends B implements C,D,E
join与left join的区别:
inner join(等值连接) 只返回两个表中联结字段相等的行
left join(左联接) 返回包括左表中的所有记录和右表中联结字段相等的记录
right join(右联接) 返回包括右表中的所有记录和左表中联结字段相等的记录
DAO设计模式与DELEGATE模式
DAO(Data Access Object)模式实际上是两个模式的组合,即Data Accessor 模式和 Active Domain Object 模式,其中 Data Accessor 模式实现了数据访问和业务逻辑的分离,而Active DomainObject 模式实现了业务数据的对象化封装,一般我们将这两个模式组合使用。
DAO 模式通过对底层数据的封装,为业务层提供一个面向对象的接口,使得业务逻辑开发员可以面向业务中的实体进行编码。通过引入DAO模式,业务逻辑更加清晰,且富于形象性和描述性,这将为日后的维护带来极大的便利。试想,在业务曾通过Customer.getName方法获得客户姓名,相对于直接通过SQL语句访问数据库表并从ResultSet中获得某个字符型字段而言,哪种方式更加易于业务逻辑的形象化和简洁化?
Business Delegate起到客户端业务抽象化的作用。它抽象化,进而隐藏业务服务的实现。使用BusinessDelegate,可以降低表示层客户端和系统的业务服务之间的耦合程度。根据实现策略不同,Business Delegate可以在业务服务API的实现中,保护客户端不受可能的变动性影响。这样,在业务服务API或其底层实现变化时,可以潜在地减少必须修改表示层客户端代码的次数。
适配器模式与桥梁模式的区别
适配器模式把一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。又称为转换器模式、变压器模式、包装模式(把已有的一些类包装起来,使之能有满足需要的接口)。适配器模式的用意是将接口不同而功能相同或者相近的两个接口加以转换,包括适配器角色补充一些源角色没有但目标接口需要的方法。就像生活中电器插头是三相的,而电源插座是两相的,这时需要一个三相变两相的转换器来满足。
比如,在Java I/O库中使用了适配器模式,象FileInputStream是一个适配器类,其继承了InputStrem类型,同时持有一个对FileDiscriptor的引用。这是将一个FileDiscriptor对象适配成InputStrem类型的对象形式的适配器模式。StringReader是一个适配器类,其继承了Reader类型,持有一个对String对象的引用。它将String的接口适配成Reader类型的接口。等等。
桥梁模式的用意是要把实现和它的接口分开,以便它们可以独立地变化。桥梁模式并不是用来把一个已有的对象接到不相匹配的接口上的。当一个客户端只知道一个特定的接口,但是又必须与具有不同接口的类打交道时,就应该使用桥梁模式。
比如,JDBC驱动器就是一个桥梁模式的应用,使用驱动程序的应用系统就是抽象化角色,而驱动器本身扮演实现化角色。应用系统和JDBC驱动器是相对独立的。应用系统动态地选择一个合适的驱动器,然后通过驱动器向数据库引擎发出指令就可以访问数据库中的数据。
工厂模式
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的操作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
开发中都用到了那些设计模式?用在什么场合?
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心。通过这种方式,你可以无数次地使用那些已有的解决方案,无需在重复相同的工作。
(1) MVC模式,在J2EE项目开发中主要用在表示层框架中,很好解决视图和流程控制。在项目中采用的Struts、WebWork等框架。
(2) DAO模式,在项目开发中主要用在数据层,封装数据的访问操作,为业务层提供数据服务。
(3) IoC模式,在项目开发中业务层有大量对象,他们之间存在依赖关系,可以使用IoC模式减少他们之间的代码耦合,提高系统的可扩展性。实际项目中使用的Spring框架来实现业务组件的装配。
(4) Observer模式,在Servlet的监听器中应用到了观察者模式。
(5) singleton单例模式和Factory工厂模式结合使用在项目中无需使用者了解过多的细节就可获取有关的对象实例。比如Hibernate项目中通过SessionFactory来获取Session。
(6) bridge模式,在项目中使用JDBC驱动访问数据库。
Hibernate中离线查询与在线查询的区别
Criteria 和 DetachedCriteria 的主要区别在于创建的形式不一样, Criteria 是在线的,所以它是由 Hibernate Session 进行创建的;而 DetachedCriteria 是离线的,创建时无需 Session,DetachedCriteria 提供了 2 个静态方法 forClass(Class)或forEntityName(Name) 进行DetachedCriteria 实例的创建。
C#数据类型有哪些?
int 整型double 双精度型string 字符串型 char 字符型 bool 布尔型
抽象类能否被实例化 ?抽象类的作用是什么?
抽象类一般不能被实例化;
抽象类通常不是由程序员定义的,而是由项目经理或模块设计人 设计抽象类的原因通常是为了规范方法名 抽象类必须要继承,不然没法用,作为模块设计者,可以把让底层程序员直接用得方法直接调用,而一些需要让程序员覆盖后自己做得方法则定义称抽象方法
ASP.NET页面传递值的方式有哪些
1 通过URL链接地址传递 2 通过post方式。 3 通过session 4通过Application
5 通过Server.Transfersend.aspx:
如何定义一个MDI(.NET技术)
定义MDI父窗口应该是设置窗体的MdiParent属性= true
WCF是什么?
Windows Communication Foundation
(WCF) 是由微软发展的一组数据通信的应用程序开发接口,它是.NET框架的一部分,由 .NET Framework 3.0 开始引入,与 Windows PresentationFoundation 及 WindowsWorkflow Foundation 并行为新一代 Windows 操作系统以及 WinFX 的三个重大应用程序开发类库
常用的包,类,接口,各举5个。
类StringInteger Long File Date
包java.lang.*;java.io.*;java.util.*;java.swt.*;java.math.*;
接口: Comparable,Connection,Map,List,Runable,
网上购物系统的类图,用例图。
用例图:
类图:
给你一个整数类型的数组,按从小到大的顺序进行排列!
public static void fun(int [] a,int c){
for(inti=0;i for(intj=i;j try { //得到test.TestClass类 Class c=Class.forName(“test.TestClass”); //得到testMethod的方法 Method m=c.getDeclaredMethod(“testMethod”, new Class[]{String.class}); //打印完整的方法表示字符串 System.out.println(m.toGenericString()); //调用这个方法 Object obj=m.invoke(c.newInstance(), new Object[]{“method”}); //打印返回结果 System.out.println(obj); } catch (SecurityException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalArgumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (NoSuchMethodException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IllegalAccessException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InvocationTargetException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (InstantiationException e) { // TODO Auto-generated catch block e.printStackTrace(); } 写一个单例模式?描述工厂模式和单例优缺点 举例在什么情况下用 class Single{} public private SingleFactory(){}; private public if(single==null){ single=new Single(); } return } } 简单工厂模式能够根据外界给定的信息,决定究竟应该创建哪个具体类的对象。通过它,外界可以从直接创建具体产品对象的尴尬局面中摆脱出来。 外界与具体类隔离开来,偶合性低。 明确区分了各自的职责和权力,有利于整个软件体系结构的优化。 缺点:工厂类集中了所有实例的创建逻辑,容易违反GRASPR的高内聚的责任分配原则 虽然简单工厂模式能够适应一定的变化,但是它所能解决的问题是远远有限的。它所能创建的类只能是事先教考虑到的,如果需要添加新的类,则就需要改变工厂类了。(这个问题在工厂方法模式将得到很好的解决) 应用情景 工厂类负责创建的对象比较少客户只知道传入了工厂类的参数,对于始何创建对象(逻辑)不关心 JVM加载class文件原理? 所谓装载就是寻找一个类或是一个接口的二进制形式并用该二进制形式来构造代表这个类或是这个接口的class对象的过程. Tomcat的class加载的优先顺序一览 1.最先是$JAVA_HOME/jre/lib/ext/下的jar文件。 2.环境变量CLASSPATH中的jar和class文 3.$CATALINA_HOME/common/classes下的class 4.$CATALINA_HOME/commons/endorsed下的jar文件。 5.$CATALINA_HOME/commons/i18n下的jar文件。 6.$CATALINA_HOME/common/lib 下的jar文件。 (JDBC驱动之类的jar文件可以放在这里,这样就可以避免在server.xml配置好数据源却出现找不到JDBC Driver的情况。) 7.$CATALINA_HOME/server/classes下的class文件。 8.$CATALINA_HOME/server/lib/下的jar文件。 9.$CATALINA_BASE/shared/classes 下的class文件。 10.$CATALINA_BASE/shared/lib下的jar文件。 11.各自具体的webapp /WEB-INF/classes下的class文件。 12.各自具体的webapp /WEB-INF/lib下的jar文件。 CS与BS联系区别 1)java适合开发bs结构,cs不是它的强项 C/S 服务器通常采用高性能的PC、工作站或小型机,并采用大型数据库系统,如Oracle、Sybase、Informix或 SQL Server。客户端需要安装专用的客户端软件。B/S 客户机上只要安装一个浏览器(Browser),如Internet Explorer,服务器安装Oracle、Sybase、Informix或 SQL Server等数据库。在这种结构下,用户界面完全通过WWW浏览器实现,一部分事务逻辑在前端实现,但是主要事务逻辑在服务器端实现。浏览器通过Web Server 同数据库进行数据交互 1.硬件环境不同: C/S 一般建立在专用的网络上, 小范围里的网络环境, 局域网之间再通过专门服务器提供连接和数据交换服务. B/S 建立在广域网之上的 2)对安全要求不同 C/S 一般面向相对固定的用户群, 对信息安全的控制能力很强. 一般高度机密的信息系统采用C/S 结构适宜. 可以通过B/S发布部分可公开信息. B/S建立在广域网之上, 对安全的控制能力相对弱, 可能面向不可知的用户 3)对程序架构不同 C/S 程序可以更加注重流程, 可以对权限多层次校验 B/S 对安全以及访问速度的多重的考虑, 建立在需要更加优化的基础之上 Error和 exception的区别与联系 error 表示恢复不是不可能,但很困难的情况下的一种严重问题。比如说内存溢,网络故障等。不可能指望程序能处理的情况。 在编写页面的会用到哪些技术? 美化页面需要用到CSS、页面交互使用JavaScript、动态页面需要用到JSP、XML等动态网页技术。 手写个程序在本页面中心弹出一个窗体,里面有学生的成绩,可以修改学生的成绩,并且可以关闭窗口,把每个要用的jsp页面显示出来。(用JavaScript) 到显示页面的ShowStudentServlet public throws ServletException, IOException { request.setCharacterEncoding(“gbk”); response.setCharacterEncoding(“gbk”); response.setContentType(“text/html”); StudentDao dao=new StudentDao(); List request.setAttribute(“sts”, sts); request.getRequestDispatcher(“/showStu.jsp”).forward(request, response); } 学生成绩的显示页面:showStu.jsp 请求修改的UpdateStudentServlet public throws ServletException, IOException { request.setCharacterEncoding(“gbk”); response.setCharacterEncoding(“gbk”); response.setContentType(“text/html”); String s=request.getParameter(“sid”); if(s!=null&&!s.equals(“”)){ StudentDao dao=new StudentDao(); Integer sid=Integer.parseInt(s); Student st=dao.findById(sid); request.setAttribute(“st”, st); request.getRequestDispatcher(“/updateStu.jsp”).forward(request, response); }else{ throw } } 可以修改成绩的页面:updateStu.jsp 负责修改成绩的UpdateScoreServlet public throws ServletException, IOException { request.setCharacterEncoding(“gbk”); response.setCharacterEncoding(“gbk”); response.setContentType(“text/html”); String sid=request.getParameter(“sid”); String score=request.getParameter(“score”); if(sid!=null&&!sid.equals(“”)&&score!=null&&!“”.equals(score)){ StudentDao dao=new StudentDao(); Student st=new Student(); st.setSid(Integer.parseInt(sid)); st.setScore(Double.parseDouble(score)); dao.update(st); response.getWriter().println(“”); } } 用main涵数输出一到一百的和。 #include int main() { printf(“sum:%d\n”, sum()); return 0; } int sum() { int i; int sum = 0; for (i = 1; i <= 100; i++) sum += i; return sum; } 查一下每门课程都大于80的学生姓名 学生表student 分数表grade select s.name from student s where s.id notin(select g.studentid from grade g where g.marks<=80) 或者 select s.name from student s where notexists(select 1 from grade g where g.studentid=s.id and g.marks<=80) LIUNIX如何查看CPU,IP,内存? cat /proc/cpuinfo 查看CPU cat /proc/meminfo 查看内存 /sbin/ifcong 查看 IP的 j2EE系统访问速度慢.从哪些方面可以优化 J2EE性能的优化包括很多方面的,要达到一个性能优良的系统,除了关注代码之外,还应该根据系统实际的运行情况,从服务器软硬件环境、集群技术、系统构架设计、系统部署环境、数据结构、算法设计等方面综合考虑 J2EE访问速度慢,怎么样优化 1 使用缓冲标记对于代码逻辑复杂的页面,利用缓冲标记提高性能的效果比较明显;反之,效果可能略逊一筹。 2 始终通过会话Bean访问实体Bean一些时候,使用实体Bean会导致程序性能不佳。如果实体Bean的惟一用途就是提取和更新数据,改成在会话Bean之内利用JDBC访问数据库可以得到更好的性能 3 选择合适的引用机制 4 在部署描述器中设置只读属性实体Bean的部署描述器允许把所有get方法设置成”只读”。当某个事务单元的工作只包含执行读取操作的方法时,设置只读属性有利于提高性能,因为容器不必再执行存储操作 5 缓冲对EJB Home的访问 haShtable的原理 原理:通过节点的关键码确定节点的存储位置,即给定节点的关键码k,通过一定的函数关系H(散列函数),得到函数值H(k),将此值解释为该节点的存储地址 struts中的prepare怎么用? prepare是在validate拦截器之前执行 在使用struts2checkboxlist,select绑定list时,有时候会出现 以下异常 The requested list key ‘users’ could not be resolved as a collection/array/map/enumeration/iteratortype. Example: people or people.{name} – [unknown location]这样的错误。是因为list的值为空 解决办法是把初始化list的工作放到prepare拦截器中 public class RoleAction extendsActionSupport implements Preparable{ @Override public void prepare() throws Exception { //初始化list } } ContextMenu 组件提供与选定对象相关的常用命令的菜单。可以通过向 MenuItems 集合中添加 MenuItem 对象来向快捷菜单中添加项。可以从快捷菜单中永久地移除项;但是在运行时隐藏或禁用项可能更为妥当。ListView的ContextMenu属性设置为ContextMenu对象 写一条SQL语句,查询姓张学生中平均成绩大于75的学生信息 select * from student where name in (selectname from student where name like ‘张%’ group by name having avg(score) > 75) 从以下方面比较strut1和strut2:线程模式、依赖、可测性、表达式语言、捕获输入、绑钉值到页面、类型转换 线程模式: Struts1Action是单例模式并且必须是线程安全的,因为仅有Action的一个实例来处理所有的请求。单例策略限制了Struts1 Action能作的事,并且要在开发时特别小心。Action资源必须是线程安全的或同步的。 • Struts2Action对象为每一个请求产生一个实例,因此没有线程安全问题。(实际上,servlet容器给每个请求产生许多可丢弃的对象,并且不会导致性能和垃圾回收问题) Servlet 依赖: • Struts1Action 依赖于Servlet API,因为当一个Action被调用时HttpServletRequest 和 HttpServletResponse 被传递给execute方法。 • Struts 2Action不依赖于容器,允许Action脱离容器单独被测试。如果需要,Struts2 Action仍然可以访问初始的request和response。但是,其他的元素减少或者消除了直接访问HttpServetRequest和HttpServletResponse的必要性。 可测性: • 测试Struts1 Action的一个主要问题是execute方法暴露了servlet API(这使得测试要依赖于容器)。一个第三方扩展--Struts TestCase--提供了一套Struts1的模拟对象(来进行测试)。 • Struts 2Action可以通过初始化、设置属性、调用方法来测试,”依赖注入”支持也使测试更容易。 捕获输入: • Struts1 使用ActionForm对象捕获输入。所有的ActionForm必须继承一个基类。因为其他JavaBean不能用作ActionForm,开发者经 常创建多余的类捕获输入。动态Bean(DynaBeans)可以作为创建传统ActionForm的选择,但是,开发者可能是在重新描述(创建)已经存在的JavaBean(仍然会导致有冗余的javabean)。 • Struts 2直接使用Action属性作为输入属性,消除了对第二个输入对象的需求。输入属性可能是有自己(子)属性的rich对象类型。Action属性能够通过 web页面上的taglibs访问。Struts2也支持ActionForm模式。rich对象类型,包括业务对象,能够用作输入/输出对象。这种 ModelDriven 特性简化了taglib对POJO输入对象的引用。 表达式语言: • Struts1 整合了JSTL,因此使用JSTL EL。这种EL有基本对象图遍历,但是对集合和索引属性的支持很弱。 • Struts2可以使用JSTL,但是也支持一个更强大和灵活的表达式语言--”Object GraphNotation Language” (OGNL). 绑定值到页面(view): • Struts 1使用标准JSP机制把对象绑定到页面中来访问。 • Struts 2 使用 “ValueStack”技术,使taglib能够访问值而不需要把你的页面(view)和对象绑定起来。ValueStack策略允许通过一系列名称相同但类型不同的属性重用页面(view)。 类型转换: • Struts 1ActionForm 属性通常都是String类型。Struts1使用Commons-Beanutils进行类型转换。每个类一个转换器,对每一个实例来说是不可配置的。 • Struts2 使用OGNL进行类型转换。提供基本和常用对象的转换器。 struts的工作原理可分为如下8步。 1.读取配置(初始化ModuleConfig对象) 2.用户请求 3.填充FormBean 4.派发请求 5.处理业务 6.返回响应 7.查找响应 8.响应用户 Spring工作原理 内部最核心的就是IOC了,动态注入,让一个对象的创建不用new了,可以自动的生产,这其实就是利用java里的反射,反射其实就是在运行时动态的去创建、调用对象,Spring就是在运行时,跟xmlSpring的配置文件来动态的创建对象,和调用对象里的方法的 还有一个核心就是AOP这个就是面向切面编程,可以为某一类对象 进行监督和控制(也就是在调用这类对象的具体方法的前后去调用你指定的模块)从而达到对一个模块扩充的功能。这些都是通过配置类达到的 Spring目的:就是让对象与对象(模块与模块)之间的关系没有通过代码来关联,都是通过配置类说明管理的(Spring根据这些配置 内部通过反射去动态的组装对象)要记住:Spring是一个容器,凡是在容器里的对象才会有Spring所提供的这些服务和功能 Hibernate 的初始化. 读取Hibernate 的配置信息-〉创建Session Factory 1)创建Configeration类的实例。 它的构造方法:将配置信息(Hibernateconfig.xml)读入到内存。 一个Configeration实例代表Hibernate 所有Java类到Sql数据库映射的集合。 2)创建SessionFactory实例 把Configeration对象中的所有配置信息拷贝到SessionFactory的缓存中。 SessionFactory的实例代表一个数据库存储员源,创建后不再与Configeration 对象关联。 缓存(cache):指Java对象的属性(通常是一些集合类型的属性--占用内存空间。 在main方法中将字符串中的。数字排序并输出 STRING A=”56.89.5.3.75.98.98.26.15.44″ String s=” 56.89.5.3.75.98.98.26.15.44″; String s1[]=s. split (“.”); Integer ii[]=new Integer[s1.length]; For(int i=0;i ii[i]=Integer.parseInt(s1[i]); } Arrays.sort(ii); for(Integer o: ii){ System.out.println(o+” s”); } 96Oracle冷备份的通常步骤 1 正常关闭数据库 2 备份所有重要的文件到备份目录(数据文件、控制文件、重做日志文件等) 3 完成备份后启动数据库用冷备份进行恢复时,只需要将所有文件恢复到原有位置,就可以启动数据库了 关闭数据库SQL>shutdown 5 备份文件到备份的目录 6 然后启动数据库 #sqlplus “/as sysdba”SQL>startup 冷备份完毕!! servlet 创建过程以及ruquest,response,session的生命周期? Servlet的创建过程: 第一步 public class AAA extends HttpServlet{ 实现对应的doxxx方法 } 第二步: 在web.xml中配置 servlet的生命周期: servlet容器创建servlet的一个实例 容器调用该实例的init()方法 如果容器对该servlet有请求,则调用此实例的service()方法 容器在销毁本实例前调用它的destroy()方法 销毁并标记该实例以供作为垃圾收集 一旦请求了一个servlet,就没有办法阻止容器执行一个完整的生命周期。 容器在servlet首次被调用时创建它的一个实例,并保持该实例在内存中,让它对所有的请求进行处理。容器可以决定在任何时候把这个实例从内存中移走。在典型的模型中,容器为每个servlet创建一个单独的实例,容器并不会每接到一个请求就创建一个新线程,而是使用一个线程池来动态的将线程分配给到来的请求,但是这从servlet的观点来看,效果和为每个请求创建一个新线程的效果相同。 一旦请求提交给容器,容器会自动创建相应的request、response,一旦回应完毕则request、response自动销毁。客户端第一次请求时,容器会建立相应的会话,直到会话超时,会话随即销毁。 手写个单例模式?每个公司基本都考 public class danli { private staticdanli dl; privatedanli(){ System.out.println(“单例模式”); } publicstatic danli getconnection() { if(dl==null) { dl=newdanli(); } returndl; } } 解释一下mvc以及熟悉的mvc框架 答:m代表模型层,v 代表视图层,c代表控制层,也就是把一个整体分割成不同的模块,各负责自己的功能,分工明确,提高代码的重用性和方便维护。 在jsp设计模式二中,jsp用来做视图层,servlet是控制器,dao则处理相关业务成为模型层。 在struts2.0,其中m是action,c是拦截器,v是jsp. 解释一下IOC,以及spring的举例 IOC称为控制反转,也叫依赖注入,ioc是Spring的核心组件,它通过配置文件,将需要创建的对象以池的方式管理,将实例注入到需要的对象中区,是对象依赖于注入而不依赖于实现,解决了各个组件的耦合度,使得项目在后期的维护和扩展上非常方便。如在ssh框架整合中,我们将datasource对象注入给sessionFactory,再将sessionFactory注入给dao组件,再将dao组件注入给struts的Action组件,在将action对象注入给struts的拦截器。 Oracle和Sqlserver的区别?数据库里面的语言符号表示? a)体系结构: ORACLE的文件体系结构为: 数据文件 .DBF (真实数据) / 日志文件 .RDO / 控制文件 .CTL / 参数文件 .ORA SQL SERVER的文件体系结构为: .MDF (数据字典) / .NDF (数据文件) / .LDF (日志文件) b)存储结构: ORACLE存储结构:在ORACLE将存储单位分为块、区、段、表等;块的大小可设置(OLTP块和DSS块);将连续的块组成区,可动态分配区(区的分配可以是等额的也可以是自增长的)可减少空间分配次数;ORACLEl里表可以分为多个段,段由多个区组成,每个段可指定分配在哪个表空间里(段的类型分为:数据段、索引段、回滚段、临时段、CASH段。ORACLE里还可对表进行分区,可按照用户定义的业务规则、条件或规范,物理的分开磁盘上的数据。这样大大降低了磁盘争用的可能性。 SQL SERVER 存储结构:以页为最小分配单位,每个页为8K(不可控制,缺乏对页的存储情况的分析机制),可将8个连续的页的组成一个’扩展’,以进一步减少分配时所耗用的资源。(分配缺乏灵活性),在SQL SERVER里数据以表的方式存放,而表是存放在数据库里。真实数据与数据字典存放在一起。对系统参数信息无安全机制。 c)操作系统: Oracle可在所有主流平台上运行;但SQL Sever只在Window平台上的表现很好; d)运行速度与安全性:Oracle高于SQLServer; e)价格:Oracle高于SQLServer; 浏览器页面与T0MCat的交互过程? 当一个JSP页面第一次被访问的时候,JSP引擎将执行以下步骤: (1)将JSP页面翻译成一个Servlet,这个Servlet是一个java文件,同时也是一个完整的java程序 (2)JSP引擎调用java编译器对这个Servlet进行编译,得到可执行文件class (3)JSP引擎调用java虚拟机来解释执行class文件,生成向客户端发送的应答,然后发送给客户端 以上三个步骤仅仅在JSP页面第一次被访问时才会执行,以后的访问速度会因为class文件已经生成而大大提高。当JSP引擎街道一个客户端的访问请求时,首先判断请求的JSP页面是否比对应的Servlet新,如果新,对应的JSP需要重新编译。 用C编写将一个100以内的自然数分解质因数 /* 100以内素数 */ #include main() { int i,j; for(i=2;i<100;i++) { for(j=2;j
{ if(i%j==0) break; } if(i==j) { printf(“%d “,i); } } } /* 分解质因数*/ main() { int n,i; printf( “please input a number:\n “); scanf( “%d “,&n); printf( “%d= “,n); for(i=2;i <=n;i++) while(n!=i) { if(n%i==0) { printf( “%d* “,i); n=n/i; } else{ break; } } printf( “%d “,n); getch(); } 用一个方法查出宜个数值类型数组的最大值,用递归方式实现 方法1 public class Test1 { public static inta(int[] i,int j){ if(i.length-1>j){ if(i[j]>i[j+1]){ i[j+1]=i[j]; } returna(i,j+1); }else{ returni[i.length-1]; } } } 方法2 — 非递归 public static int test(int []num) { intx=0; int log = num.Length;for(intt=0;t 方法3 — 递归 不改变原数组中的元素 public static int getMax(int[]a, intindex,int max){ intlen = a.length; if(len==1){ returna[len-1]; } if(index==0){ max= a[index]; } if(index==len){ returnmax; } function fun1(){ window.showModalDialog(“${pageContext.request.contextPath}/user.do?method=login”,”700″); window.dialogHeight=800; } function fun(isd){ var tabIds=document.getElementById(isd); if(tabIds.style.display==’none’){ tabIds.style.display=’inline’; }else{ tabIds.style.display=’none’; } }
class SingleFactory {
static Single single;
static Single getSingle(){
single;
在Java中,类装载器把一个类装入Java虚拟机中,要经过三个步骤来完成:装载、链接和初始化,其中链接又可以分成校验、准备、解析
装载:查找和导入类或接口的二进制数据;
链接:执行下面的校验、准备和解析步骤,其中解析步骤是可以选择的;
校验:检查导入类或接口的二进制数据的正确性;
准备:给类的静态变量分配并初始化存储空间;
解析:将符号引用转成直接引用;
初始化:激活类的静态变量的初始化Java代码和静态Java代码块
JVM中类的装载是由ClassLoader和它的子类来实现的,Java ClassLoader 是一个重要的Java运行时系统组件。它负责在运行时查找和装入类文件的类
一个Java应用程序使用两种类型的类装载器:根装载器(bootstrap)和用户定义的装载器(user-defined)。
根装载器以某种默认的方式将类装入,包括那些Java API的类。在运行期间一个Java程序能安装用户自己定义的类装载器。根装载器是虚拟机固有的一部分,而用户定义的类装载器则不是,它是用Java语言写的,被编译成class文件之后然后再被装入到虚拟机,并像其它的任何对象一样可以被实例化。 Java类装载器的体系结构如下所示:
Bootstrap(根装载器)
|
Extension (扩展装载器)
|
System
|
UserDefine1
/ \
UserDefine2 UserDefine3
|
UserDefine4
Java的类装载模型是一种代理(delegation)模型。当JVM 要求类装载器CL(ClassLoader)装载一个类时,CL首先将这个类装载请求转发给他的父装载器。只有当父装载器没有装载并无法装载这个类时,CL才获得装载这个类的机会。这样, 所有类装载器的代理关系构成了一种树状的关系。树的根是类的根装载器(bootstrap ClassLoader) , 在JVM 中它以”null”表示。除根装载器以外的类装载器有且仅有一个父装载器。在创建一个装载器时, 如果没有显式地给出父装载器, 那么JVM将默认系统装载器为其父装载器
下面针对各种类装载器分别进行详细的说明:
根(Bootstrap) 装载器:该装载器没有父装载器,它是JVM实现的一部分,从sun.boot.class.path装载运行时库的核心代码。
扩展(Extension) 装载器:继承的父装载器为根装载器,不像根装载器可能与运行时的操作系统有关,这个类装载器是用纯Java代码实现的,它从java.ext.dirs (扩展目录)中装载代码。
系统(System or Application) 装载器:装载器为扩展装载器,我们都知道在安装JDK的时候要设置环境变量(CLASSPATH ),这个类装载器就是从java.class.path(CLASSPATH 环境变量)中装载代码的,它也是用纯Java代码实现的,同时还是用户自定义类装载器的缺省父装载器。
小应用程序(Applet) 装载器: 装载器为系统装载器,它从用户指定的网络上的特定目录装载小应用程序代码。
exception 表示一种设计或实现问题。也就是说,它表示如果程序运行正常,就不会发生的情况。程序可以捕获到这些异常,并进行处理。
void doGet(HttpServletRequest request, HttpServletResponse response)
学号 姓名 成绩 修改 ${st.sid} ${st.name} ${st.score}
void doGet(HttpServletRequest request, HttpServletResponse response)
new ServletException(“需要传递一个名为sid的int类型参数”);
target=“_self”>
void doPost(HttpServletRequest request, HttpServletResponse response)
C#题目conetextmenu控件如何使用.. listview
Struts框架总控制器(ActionServlet)是一个Servlet,在web.xml中被配置成一个自动启动的Servlet。读取配置文件struts-config.xml的配置信息,为不同的Struts模块初始化相应的ModuleConfig对象。
用户提交表单或调用URL向WEB应用程序服务器提交一个请求,请求的数据用HTTP协议上传给WEB服务器。
(*.do请求)从ActionConfig中找出对应该请求的Action子类,如有对应的Action且这个Action又一个相应的ActionForm,ActionForm被实例化并用HTTP请求的数据填充其属性,并保存在ServletContext中,这样他们就可以被其它Action对象或JSP调用。如果没有对应的Action,控制器则直接转发给JSP或静态页面。
控制器根据配置信息ActionConfig将请求派发到具体的Action,相应的FormBean一并传给这个Action的execute()方法。
Action一般只包含一个execute方法,它负责执行相应的业务逻辑。执行完毕后返回一个ActionFoward对象,控制器通过该ActionFoward对象来进行转发工作。
Action根据业务处理的不同结果返回一个响应对象给总控制器,该目标响应对相对应一个具体的JSP页面或另一个Action。
总控制器根据业务功能Action返回的目标响应对象找到对应的资源对象,通常是一个具体的JSP页面。
JSP将结果展现给用户。
树型菜单
菜单名称
kongjian
办公自动化系统用到的技术,分哪些层,有哪些包
使用技术:DWR +Struts + Hibernate + Spring+Ajax+JavaScript
系统架构分为: View层、WEB层、Serivce层、DAO层、持久层(po层)
解释下mvc,客户端的请求被发送到哪?
.jsp是v层(视图层view) Servlet是c层(控制层,Control)Bean Bin都是M层(后台类,Model)
m层(模型层)
使用了哪些数据库事务?
BeginTransaction、Commit 和 Rollback
.
对数据库的访问是怎么实现的
将对持久层数据库的基本添加,修改,查找等操作提取到BaseDAO中,采用JavaBean对数据进行封装,以便对持久层的数据能够很好的处理,实现BaseDAO设计对数据库访问的便捷。业务组件通过DAO 的委托接口调用DAO对象,使得上层组件不 直接依赖于DAO的实现类.
回答步骤:
1.回答什么是抽象类、什么是接口。
2.回答抽象类和接口各自特点的区别。
3.回答他在应用场合的区别.
答:
含有abstract修饰符的class即为抽象类,abstract 类不能创建的实例对象。含有abstract方法的类必须定义为abstract class,abstract class类中的方法不必是抽象的。abstract class类中定义抽象方法必须在具体(Concrete)子类中实现,所以,不能有抽象构造方法或抽象静态方法。如果的子类没有实现抽象父类中的所有抽象方法,那么子类也必须定义为abstract类型。
接口(interface)可以说成是抽象类的一种特例,接口中的所有方法都必须是抽象的。接口中的方法定义默认为public abstract类型,接口中的成员变量类型默认为public static final。
<<回答了什么是抽象类、什么是接口>>
下面比较一下两者的语法区别:
1.抽象类可以有构造方法,接口中不能有构造方法。
2.抽象类中可以有普通成员变量,接口中没有普通成员变量
3.抽象类中可以包含非抽象的普通方法,接口中的所有方法必须都是抽象的,不能有非抽象的普通方法。
4. 抽象类中的抽象方法的访问类型可以是public,protected和(默认类型,虽然
eclipse下不报错,但应该也不行),但接口中的抽象方法只能是public类型的,并且默认即为publicabstract类型。
5. 抽象类中可以包含静态方法,接口中不能包含静态方法
6. 抽象类和接口中都可以包含静态成员变量,抽象类中的静态成员变量的访问类型可以任意,但接口中定义的变量只能是public static final类型,并且默认即为public static final类型。
7. 一个类可以实现多个接口,但只能继承一个抽象类。
<<对比了抽象类和接口各自特点>>
下面接着再说说两者在应用上的区别:
接口更多的是在系统架构设计方法发挥作用,主要用于定义模块之间的通信契约,对架构组件进行解藕命名其组件实现依赖于抽象而不依赖于实现。而抽象类在代码也可以在架构设计上实现方面发挥作用,可以实现代码的重用。如果对一个组件接口的实现可以通过抽象类实现方法体,再通过子类进行派生,选择重写实现,这也是一种适配器模式的应用。
<<架构上的作用>>
数据库优化的方案
建立主键,为数据库创建索引,建立存储过程,触发器,可提高查询速度。
冒泡
public static void Bubble(int a[]){