result+=a[k];
if(result==n)
break;
}
if(i==n-1)
i=0;
else
i++;
}
}
}
32.final,finalize,finally的区别?
答:
final主要用于说明该类不能派生新子类,或表示该变量在使用过程中不被改变,用于方法时表示该方法不能被重载。
Finalize为对象方法,主要用于在对象清除出内存前做必要的清理工作。
Finally主要用于提示在异常处理结束时,必须处理的函数块。
33.简述ArrayLists和LinkedList的区别?
34.实现点击页面上的一个链接,然后隐藏这个链接的javascript代码。
35.C/S架构,B/S架构融合
36.equals()方法:
比较两个对象的类型和值;==:
比较两个对象的地址
37.简述template和Strategy设计模式的区别
模板-------设计模式
适用条件:
1)一次性实现一个算法的不变的部分,并将可变的行为留给子类来实现。
2)各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
3)控制子类扩展。
模板方法只在特定点调用操作,这样就只允许在这些点进行扩展。
如果你不愿子类来修改你的模板方法定义的框架,你可以采用两种方式来做:
一是在API中不体现出你的模板方法;二、将你的模板方法置为final就可以了。
解决方案:
1)AbstractClass(抽象类):
定义了一到多个的抽象方法,以供具体的子类来实现它们;而且还要实现一个模板方法,来定义一个算法的骨架。
该模板方法不仅调用前面的抽象方法,也可以调用其他的操作,只要能完成自身的使命。
2)ConcreteClass(具体类):
实现父类中的抽象方法以完成算法中与特定子类相关的步骤。
实例:
publicabstractclassBank{
privatedoublelilu; //利率
privatedoublefond; //本金
publicdoublegetFond(){
returnfond;
}
publicvoidsetFond(doublefond){
this.fond=fond;
}
publicdoublegetLixi(){ //抽象类中的模板方法其中调用了一个抽象方法
returngetFond()*getLilu();
}
publicabstractdoublegetLilu(); //抽象类中的抽象方法
}
publicabstractclassm_ChinaBankextendsBank{
//另一个抽象类.继承了上一个抽象类
privatedoubletime; //时间
publicdoublegetLixi(){ //override基类中的模板方法
returngetFond()*getLilu()*getTime();
}
publicdoublegetTime(){
returntime;
}
publicvoidsetTime(doubletime){
this.time=time;
}
}
publicclassChinaBankextendsm_ChinaBank{
publicstaticvoidmain(String[]args){
ChinaBankbk=newChinaBank();
bk.setFond(1000000);
bk.setTime(100);
System.out.println(bk.getLixi());
}
publicdoublegetLilu(){ //实现抽象类中的抽象方法.
return0.0003;
}
}
注意本例中模板设计模式只有三个类就可以完全表现出模板设计模式.为什么还要加上中间的一个类呢.主要是为了演示怎样在程序完成之后根据客户的需求来升级程序之用.在中间类中我们重写了getLixi()方法.改变了利率的计算方式.
12.说说你对测试驱动开发(TDD)的理解.
(1)测试驱动开发(Test-DrivenDevelopment):
是敏捷开发中的一项核心实践和技术,也是一种设计方法论。
是极限编程的一个重要组成部分,它的基本思想就是在开发功能代码之前,先编写测试代码。
(2)TDD的原理:
在开发功能代码之前,先编写单元测试用例代码,测试代码确定需要编写什么产品代理。
(3)TDD基本思路:
通过测试来推动整个开发的进行,但测试驱动开发并不只是单纯的测试工作,而是把需求分析,设计,质量控制量化的过程。
(4)TDD的重要目的:
不仅仅是测试软件,测试工作保证代码质量仅仅是其中一部分,而且是在开发过程中帮助客户和程序员出去模棱两可的需求。
TDD首先考虑使用需求(对象、功能、过程、接口等),主要是变成测试用例框架对功能的过程和接口进行设计,而测试框架可以持续验证。
13线程间通知和唤醒
14线程安全
(a)如果要求线程安全,使用Vector、Hashtable;enum,stack
(b)如果不要求线程安全,应使用ArrayList,LinkedList,HashMap;
(c)如果要求键值对,则使用HashMap,Hashtable;
(d)如果数据量很大,又要线程安全,则考虑Vector。
15Ioc和aop
ioc就是控制翻转或是依赖注入。
通俗的讲就是如果在什么地方需要一个对象,你自己不用去通过new生成你需要的对象,而是通过spring的bean工厂为你长生这样一个对象。
aop就是面向切面的编程。
比如说你每做一次对数据库操作,都要生成一句日志。
如果,你对数据库的操作有很多类,那你每一类中都要写关于日志的方法。
但是如果你用aop,那么你可以写一个方法,在这个方法中有关于数据库操作的方法,每一次调用这个方法的时候,就加上生成日志的操作。
16Comparator和Comparable的区别
一个类实现了Camparable接口则表明这个类的对象之间是可以相互比较的,这个类对象组成的集合就可以直接使用sort方法排序。
Comparator可以看成一种算法的实现,将算法和数据分离,Comparator也可以在下面两种环境下使用:
1、类的设计师没有考虑到比较问题而没有实现Comparable,可以通过Comparator来实现排序而不必改变对象本身
2、可以使用多种排序标准,比如升序、降序等
17HTTPSession失效转移
18jdbc事务隔离级别
知识点:
(1)java中sleep执行完之后,线程进入什么状态,就绪还是准备状态,另外问一下yield()执行完呢?
还有join呢?
sleep执行完后,线程进入睡眠状态,只有当睡眠时间到达(sleepintervalexpires)或者被打扰(interrupted)才进入就绪状态(ready);线程调用yield()执行完后使相同优先级的线程都获得运行的机会。
yield方法只用于非分时的系统中;线程调用join()方法后,等待该线程的终止。
形参列表中可以设定终止需要的时间。
(2)JDBC的主要作用?
JDBC是由一系列连接(Connection)、SQL语句(Statement)和结果集(ResultSet)构成的,其主要作用概括起来有如下3个方面:
建立与数据库的连接。
向数据库发起查询请求。
处理数据库返回结果。
Connectioncon=DriverManager.getConnection("jdbc:
odbc:
wombat","login", "password");
Statementstmt=con.createStatement();
ResultSetrs=stmt.executeQuery("SELECTa, b, cFROMTable1");
while (rs.next()) {
intx=rs.getInt("a");
Strings=rs.getString("b");
floatf=rs.getFloat("c");
}
(3)springMVC中的中心控制Servlet是那个类?
简介:
spring内建了一个请求驱动的webmvc框架,以一个servlet分发器为中心,将web请求分发到各个不同的处理器进行处理(这点和struts很相似)。
这个servlet就是spring提供的DispatcherServlet,它必须在web.xml里配置。
当然web.xml里可以配置多个DispatcherServlet,每个DispatcherServlet都会加载和自己相关的web应用上下文(即和应用相关的xml文件)。
例如:
jpet
org.springframework.web.servlet.DispatcherServlet
2
jpet
*.do
以上的配置表示所有“.do”结尾的请求都交DispatcherServlet来预处理(分发)。
在web-inf下,spring默认查找jpet-servlet.xml作为程序应用上下文。
(4)redirect不会默认产生301Permanentlymoved的HTTP响应。
301MovedPermanently
客户请求的文档在其他地方,新的URL在Location头中给出,浏览器应该自动地访问新的URL。
301重定向是指当用户或搜索引擎向网站服务器发出浏览请求时,服务器返回的HTTP数据流中头信息(header)中的状态码的一种,表示本网页永久性转移到另一个地址。
301重定向可促进搜索引擎优化效果,从搜索引擎优化角度来看,301重定向是网址重定向最为可行的一种办法。
当网站的域名发生变更后,搜索引擎只对新网址进行索引,同时又会把旧地址下原有的外部链接如数转移到新地址下,从而不会让网站的排名因为网址变更而受到影响。
同样,在使用301永久性重定向命令让多