61.关键字final 分别修饰一个类,一个方法,一个变量,各起什么作用
解答:final修饰类是不能被继承
fianl修饰方法不能在子类中被覆盖
final修饰变量,称为常量,初始化以后不能改变值。
62.启动一个线程是用run()还是start()?
解答:start()。
63.是否可以继承String类
解答:不可以。因为String类有final修饰。
64.Java异常处理中,try {}里有一个return语句,那么紧跟在这个try后的finally {}里的code会不会被执行,什么时候被执行,在return前还是后?
解答:会执行,在return前执行。
65.EJB包含哪3种bean
解答:session bean(会话bean), entity bean(实体bean), message bean(消息bean)
66.Class.forName(String className)这个方法的作用
解答:通过类的全名获得该类的类对象
67.你认为在表上建立索引可以提高数据库系统的效率吗,为什么?
解答:不一定
建立太多的索引将会影响更新和插入的速度,因为它需要同样更新每个索引文件。对于一个经常需要更新和插入的表格,就没有必要为一个很少使用的where子句单独建立索引了,对于比较小的表,排序的开销不会很大,也没有必要建立另外的索引。
68.hibernate中的java对象有几种状态,其相互关系如何(区别和相互转换)。
解答:在Hibernate中,对象有三种状态:临时状态、持久状态和游离状态。 临时状态:当new一个实体对象后,这个对象处于临时状态,即这个对象只是一个保存临时数据的内存区域,如果没有变量引用这个对象,则会被jre垃圾回收机制回收。这个对象所保存的数据与数据库没有任何关系,除非通过Session的save或者SaveOrUpdate把临时对象与数据库关联,并把数据插入或者更新到数据库,这个对象才转换为持久对象;
持久状态:持久化对象的实例在数据库中有对应的记录,并拥有一个持久化表示(ID)。对持久化对象进行delete *** 作后,数据库中对应的记录将被删除,那么持久化对象与数据库记录不再存在对应关系,持久化对象变成临时状态。
持久化对象被修改变更后,不会马上同步到数据库,直到数据库事务提交。在同步之前,持久化对象是脏的(Dirty)。
游离状态:当Session进行了Close、Clear或者evict后,持久化对象虽然拥有持久化标识符和与数据库对应记录一致的值,但是因为会话已经消失,对象不在持久化管理之内,所以处于游离状态(也
叫:脱管状态)。游离状态的对象与临时状态对象是十分相似的,只是它还含有持久化标识。
69.对hibernate的延迟加载如何理解,在实际应用中,延迟加载与session关闭的矛盾是如何处理的?
解答:延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载。那么Hibernate是怎么知识用户在什么时候使用数据了呢?又是如何加载数据呢?其实很简单,它使用了代理机制。返回给用户的并不是实体本身,而是实体对象的代理。代理对象在用户调用getter方法时就会去数据库加载数据。但加载数据就需要数据库连接。而当我们把会话关闭时,数据库连接就同时关闭了。这种情况就叫做未初始化的关系。
延迟加载与session关闭的矛盾一般可以这样处理:
1)、关闭延迟加载特性。
*** 作起来比较简单,因为hibernate的延迟加载特性是在hbm配置里面可控制的。默认lazy=”true”,具体配置可以查看一下相关文档,就不详细叙述了。
但使用这个解决办法带来的隐患是十分大的。
首先,出现no session or session was closed就证明了您已经在使用外键关联表,如果去掉延迟加载的话,则表示每次查询的开销都会变得十分的大,如果关联表越多,后果也可以想象得到。所以不建议使用这个方法解决。
2)、在session关闭之前把我们想要查询的数据先获取了。
首先需要了解一下session什么时候关闭,也就是它的生命周期。通常情况下hibernate会在查询数据关闭session,而使用getHibernateTemplate().get方法查询后会延迟关闭的时间。会在事务结束后才关闭。
使用拦截器(Interceptor)或过滤器(Filter)控制session。
spring为解决hibernate这一特性提供的解决方案,可以有效的控制session生命周期。
70.什么是AOP和OOP,IOC和DI有什么不同?
解答:
1)面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。AOP是OOP的延续,是Aspect Oriented Programming的缩写,意思是面向方面编程。 将通用需求功能从不相关类之中分离出来;同时,能够使得很多类共享一个行为,一旦行为发生变化,不必修改很多类,只要修改这个行为就可以。AOP就是这种实现分散关注的编程方法,它将“关注”封装在“方面”中
2)控制反转IOC(Inversion of Control) 控制指的就是程序相关类之间的依赖关系.传统观念设计中,
通常由调用者来创建被调用者的实例, 在Spring里,创建被调用者的工作不再由调用者来完成,而是由Spring容器完成,依赖关系被反转了,称为控制反转,目的是为了获得更好的扩展性和良好的可维护性。依赖注入(Dependency injection)创建被调用者的工作由Spring容器完成,然后注入调用者,因此也称依赖注入。控制反转和依赖注入是同一个概念。
71.Struts1中actionform和action属于MVC哪一层,为什么?
解答:actionform和action属于MVC的Model层,Action用来处理业务逻辑,actionform保存用户表单数据以便于在不同页面间传递。而MVC中的model层就是业务逻辑层,该层用于实现具体的业务逻辑、状态维护及管理。
73.error和exception有什么区别?
解答:
error表示系统级的错误和程序不必处理的异常,是恢复不是不可能但很困难的情况下的一种严重问题;比如内存溢出,不可能指望程序能处理这样的情况; exception表示需要捕捉或者需要程序进行处理的异常,是一种设计或实现问题;也就是说,它表示如果程序运行正常,从不会发生的情况。
74.Log4J是Apache组织的开源一个开源项目,通过Log4J,可以指定日志信息输出的目的地,如console、file等。Log4J采用日志级别机制,请按照输出级别由低到高的顺序写出日志输出级别。
解答:Log4J分 为OFF、FATAL、ERROR、WARN、INFO、DEBUG、ALL或者您定义的级别。Log4j建议只使用四个级别,优先级从高到低分别是 ERROR、WARN、INFO、DEBUG。通过在这里定义的级别,您可以控制到应用程序中相应级别的日志信息的开关。比如在这里定义了INFO级别, 则应用程序中所有DEBUG级别的日志信息将不被打印出来。
75.说出几个与spring同类型的开源框架,说出几个与hibernate同类型的开源框架,说出几个与struts同类型的开源框架
解答:
1)与spring同类型的开源框架:JUIDE、EJB3.0、picoContainer
2)与hibernate同类型的开源框架 :ibatis,jdo,JPA
3)几个与struts同类型的开源框架:webwork,tapestry,JSF
76、Struts2包含哪些标签?
解答:
A:
<s:a href=””></s:a>—–超链接,类似于html里的<a></a>
<s:action name=””></s:action>—–执行一个view里面的一个action <s:actionerror/>—–如果action的errors有值那么显示出来 <s:actionmessage/>—–如果action的message有值那么显示出来 <s:append></s:append>—–添加一个值到list,类似于list.add(); <s:autocompleter></s:autocompleter>—–自动完成<s:combobox>标签的内容,这个是ajax
B: <s:bean name=””></s:bean>—–类似于struts1.x中的,JavaBean的值
C: <s:checkbox></s:checkbox>—–复选框 <s:checkboxlist list=””></s:checkboxlist>—–多选框 <s:combobox list=””></s:combobox>—–下拉框 <s:component></s:component>—–图像符号
D: <s:date/>—–获取日期格式 <s:datetimepicker></s:datetimepicker>—–日期输入框 <s:debug></s:debug>—–显示错误信息 <s:div></s:div>—–表示一个块,类似于html的<div></div> <s:doubleselect list=”” doubleName=”” doubleList=””></s:doubleselect>—–双下拉框
E: <s:if test=””></s:if> <s:elseif test=””></s:elseif> <s:else></s:else>—–这3个标签一起使用,表示条件判断
F: <s:fielderror></s:fielderror>—–显示文件错误信息 <s:file></s:file>—–文件上传 <s:form action=””></s:form>—–获取相应form的值
G: <s:generator separator=”” val=””></s:generator>—-和<s:iterator>标签一起使用
H: <s:head/>—–在<head></head>里使用,表示头文件结束
<s:hidden></s:hidden>—–隐藏值
I: <s:i18n name=””></s:i18n>—–加载资源包到值堆栈 <s:include value=””></s:include>—–包含一个输出,servlet或jsp页面 <s:inputtransferselect list=””></s:inputtransferselect>—–获取form的一个输入 <s:iterator></s:iterator>—–用于遍历集合
L: <s:label></s:label>—–只读的标签
M: <s:merge></s:merge>—–合并遍历集合出来的值
O: <s:optgroup></s:optgroup>—–获取标签组 <s:optiontransferselect doubleList=”” list=”” doubleName=””></s:optiontransferselect>—–左右选择框
P: <s:param></s:param>—–为其他标签提供参数 <s:password></s:password>—–密码输入框 <s:property/>—–得到’value’的属性 <s:push value=””></s:push>—–value的值push到栈中,从而使property标签的能够获取value的属性
R:
<s:radio list=””></s:radio>—–单选按钮 <s:reset></s:reset>—–重置按钮 S: <s:select list=””></s:select>—–单选框 <s:set name=””></s:set>—–赋予变量一个特定范围内的值 <s:sort comparator=””></s:sort>—–通过属性给list分类 <s:submit></s:submit>—–提交按钮 <s:subset></s:subset>—–为遍历集合输出子集
T:
<s:tabbedPanel id=””></s:tabbedPanel>—–表格框 <s:table></s:table>—–表格 <s:text name=””></s:text>—–I18n文本信息 <s:textarea></s:textarea>—–文本域输入框 <s:textfield></s:textfield>—–文本输入框 <s:token></s:token>—–拦截器 <s:tree></s:tree>—–树 <s:treenode label=””></s:treenode>—–树的结构
U: <s:updownselect list=””></s:updownselect>—–多选择框 <s:url></s:url>—–创建url
77、struts2中,OGNL访问值栈的时候查找的顺序是什么?请排序:模型对象、临时对象、固定名称的对象、Action对象
解答:struts2的值栈排列顺序为:1).临时对象;2).模型对象;3).Action对象;4).固定名称对象(如#application, #session, #request等对象)。
78、struts2中,Action通过什么方式获得用户从页面输入的数据,又是通过什么方式把其自身的数据传给视图的?
解答:
1)可以直接通过与表单元素相同名称的数据成员(需要存在符合命名规范set和get方法)获取页面表单数据。
2)会把处理好的数据成员放入值栈中,到页面可以使用struts2标签取值就可以了。
79.常用的设计模式有哪些?说明工厂模式。
解答:Java中的23种设计模式:
Factory(工厂模式), Builder(建造模式),Factory Method(工厂方法模式),
Prototype(原始模型模式),Singleton(单例模式),Facade(门面模式),
Adapter(适配器模式),Bridge(桥梁模式),Composite(合成模式),
Decorator(装饰模式),Flyweight(享元模式),Proxy(代理模式),
Command(命令模式),Interpreter(解释器模式),Visitor(访问者模式),
Iterator(迭代子模式),Mediator(调停者模式),Memento(备忘录模式),
Observer(观察者模式),State(状态模式),Strategy(策略模式),
Template Method(模板方法模式), Chain Of Responsibleity(责任链模式)
工厂模式:工厂模式是一种经常被使用到的模式,根据工厂模式实现的类可以根据提供的数据生成一组类中某一个类的实例,通常这一组类有一个公共的抽象父类并且实现了相同的方法,但是这些方法针对不同的数据进行了不同的 *** 作。首先需要定义一个基类,该类的子类通过不同的方法实现了基类中的方法。然后需要定义一个工厂类,工厂类可以根据条件生成不同的子类实例。当得到子类的实例后,开发人员可以调用基类中的方法而不必考虑到底返回的是哪一个子类的实例。
80.什么是数据库的参照完整性?
解答:数据库的参照完整性是指表与表之间的一种对应关系,通常情况下可以通过设置两表之间的主键、外键关系,或者编写两表的触发器来实现。 有对应参照完整性的两张表格,在对他们进行数据插入、更新、删除的过程中,系统都会将被修改表格与另一张对应表格进行对照,从而阻止一些不正确的数据的 *** 作。
81.如何优化数据库,如何提高数据库的性能?
解答:
1) 硬件调整性能 最有可能影响性能的是磁盘和网络吞吐量,解决办法扩大虚拟内存,并保证有足够可以扩充的空间;把数据库服务器上的不必要服务关闭掉;把数据库服务器和主域服务器分开;把SQL数据库服务器的吞吐量调为最大;在具有一个以上处理器的机器上运行SQL。
2)调整数据库
若对该表的查询频率比较高,则建立索引;建立索引时,想尽对该表的所有查询搜索 *** 作, 按照where选择条件建立索引,尽量为整型键建立为有且只有一个簇集索引,数据在物理上按顺序在数据页上,缩短查找范围,为在查询经常使用的全部列建立非簇集索引,能最大地覆盖查询;但是索引不可太多,执行UPDATE DELETE INSERT语句需要用于维护这些索引的开销量急剧增加;避免在索引中有太多的索引键;避免使用大型数据类型的列为索引;保证每个索引键值有少数行。
3)使用存储过程
应用程序的实现过程中,能够采用存储过程实现的对数据库的 *** 作尽量通过存储过程来实现,因为存储过程是存放在数据库服务器上的一次性被设计、编码、测试,并被再次使用,需要执行该任务的应用可以简单地执行存储过程,并且只返回结果集或者数值,这样不仅可以使程序模块化,同时提高响应速度,减少网络流量,并且通过输入参数接受输入,使得在应用中完成逻辑的一致性实现。
4)应用程序结构和算法
建立查询条件索引仅仅是提高速度的前提条件,响应速度的提高还依赖于对索引的使用。因为人们在
使用SQL时往往会陷入一个误区,即太关注于所得的结果是否正确,特别是对数据量不是特别大的数据库 *** 作时,是否建立索引和使用索引的好坏对程序的响应速度并不大,因此程序员在书写程序时就忽略了不同的实现方法之间可能存在的性能差异,这种性能差异在数据量特别大时或者大型的或是复杂的数据库环境中(如联机事务处理OLTP或决策支持系统DSS)中表现得尤为明显。在工作实践中发现,不良的SQL往往来自于不恰当的索引设计、不充份的连接条件和不可优化的where子句。在对它们进行适当的优化后,其运行速度有了明显地提高!
82.JS中的三种d出式消息提醒(警告窗口、确认窗口、信息输入窗口)的命令是什么?
解答:alert confirm prompt
83.描述JSP和Servlet的区别、共同点、各自应用的范围
解答:JSP在本质上就是SERVLET,但是两者的创建方式不一样.Servlet完全是JAVA程序代码构成,擅长于流程控制和事务处理,通过Servlet来生成动态网页很不直观.JSP由HTML代码和JSP标签构成,可以方便地编写动态网页.因此在实际应用中采用Servlet来控制业务流程,而采用JSP来生成动态网页.
84.在java语言中int 和 Integer 有什么区别
解答:int是基本数据类型,Integer是int的包装类,属于引用类型
85.计算下列结果:
25&3 =
25|3=
解答:25的二进制是11001 , 3的二进制是00011, 按位与的结果是:00001 ,按位或的结果是:11010,因此转成10进制分别为:1 和27
85.如何获得<div id=”div1”>This is first layer</div>中的值?
解答:
<script>
var div1=document.getElementById(“div1”);
alert(div1.innerHTML)
</script>
86.JDK1.5中支持的 for循环的语法
解答:
for(type element : array) { System.out.println(element)
} type 集合(不仅仅指Collection,也包含普通的数组)中元素的数据类型 element 遍历到的元素 array 集合对象本身(当然不只是Collection)
87.简述synchronized和java.util.concurrent.locks.Lock的异同?
解答:
主要相同点:Lock能完成synchronized所实现的所有功能 主要不同点:Lock有比synchronized更精确的线程语义和更好的性能。synchronized会自动释放锁,而Lock一定要求程序员手工释放,并且必须在finally从句中释放。
88.如何格式化日期
解答:
Date now=new Date();
SimpleDateFormat sdf=new SimpleDateFormat(“yyyy-MM-dd hh:mm:ss”);
String formatNow=sdf.format(now);
变量formatNow就是格式化好的日期。
89.将字符“12345”转换成long型
解答: String s=”12345″;
long num=Long.valueOf(s).longValue();
90.struts中如何实现国际化,涉及哪些文件?
解答:“国际化”是指一个应用程序在运行时能够根据客户端请求所来自的国家/地区、语言的不同而显示不同的用户界面。Struts框架通过使用<bean:message>标记,以及使用java.util数据包中定义的Locale和ResourceBundle类来支持国际化。java.text.MessageFormat类定义的技术可以支持消息的格式。利用此功能,开发人员不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,不需了解这些类的细节就可进行国际化和设置消息的格式。会涉及到资源文件,struts-config.xml配置文件,web.xml配置文件。
91.例举在诊断Oracle性能问题时,常用的工具、方法
解答: 1)简单一点的可以用toad及dbartisan这样的工具。 2)纯做性能监测,比较出色的有spolight和emc的I3,这两个软件都比较贵。 3)一些网管系统这方面也不错,如hp的openview。不过定制起来不太容易,且很贵。
4)不用花钱又好用的就是Oracle的statpack了。 5)再有就是自己写脚本了,大多数有经验的DBA都喜欢这样的方式。优点是实用灵活。缺点是如果想出一个性能变化的曲线图等图表,且做的美观就需要些delphi,c++builder或是pb的开发功底了。
92.Oracle启动中,startup nomount、 startup mount 有什么差别?
解答: startup nomount:启动实例,读取参数文件,分配内存空间,启动后台进程,打开跟踪文件和报警文件。startup mount:装载数据库,打开控制文件。nomount方式下还没有读取控制文件,该选项用于在数据库的控制文件全部损坏,需要重新创建数据库控制文件或创建一个新的数据库时使用。mount 选项下并没有打开数据文件,该选项可以用来修改数据库的运行模式或进行数据库恢复。
93.Oracle启动中,spfile.ora、init<SID>.ora、spfile<SID>.ora 这三个文件正确的先后顺序是什么?
解答:启动数据库,使用startup命令,Oralce将会按照以下顺序在缺省目录中搜索参数文件:spfile<SID>.ora , spfile.ora ,init<SID>.ora a
94.说明Oracle数据库逻辑备份和物理备份的方式。
解答:Oracle备份包括逻辑备份和物理备份。
1).逻辑备份
数据库的逻辑备份包含读一个数据库记录集和将记录集写入文件。
a.输出(Export)输出可以是整个数据库、指定用户或指定表。
b.输入(import)输入将输出建立的二进制转储文件读入并执行其命令。
2).物理备份
物理备份包含拷贝构成数据库的文件而不管其逻辑内容。
Oracle支持两种不同类型的物理文件备份:脱机备份(offline backup)和联机备份(online backup)。
a.脱机备份: 脱机备份用在当数据库已正常关闭,数据库处于”offline”时,要备份下列文件:
所有数据文件
所有控制文件
所有联机日志
init.ora(可选的)
b 联机备份:联机备份可用来备份任何运作在ARCHIVELOG方式下的数据库。在这种方式下,联机日志被归档,在数据库内部建立一个所有作业的完整记录。联机备份过程具备强有力的功能。第一,提供了完全的时间点(point-in-time)恢复。第二,在文件系统备份时允许数据库保持打开状态。
95.有2个类Cat及WhiteCat,代码如下:
public class Cat {
protected static String color = “random”;
public Cat() {
}
public void showCatColor() {
System.out.println(“Cat:” + color);
}
public static void showColor() {
System.out.println(“Cat:” + color);
}
}
public class WhiteCat extends Cat {
protected static String color = “white”;
public WhiteCat() {
super();
}
public void showCatColor() {
System.out.println(“WhiteCat:” + color);
}
public static void showColor() {
System.out.println(“WhiteCat:” + color);
}
}
请分析下面各段程序的运行结果
A.WhiteCat whiteCat = new WhiteCat(); Cat cat = whiteCat; cat.showColor(); cat.showCatColor();
B.Cat cat = new Cat(); WhiteCat whiteCat = (WhiteCat) cat;
cat.showColor(); cat.showCatColor();
C.Cat cat = new WhiteCat(); WhiteCat whiteCat = (WhiteCat) cat; cat.showColor(); cat.showCatColor();
解答:A段执行的结果是:
Cat:random
WhiteCat:white
B段执行的结果是:
会抛出java.lang.ClassCastException异常
C段执行的结果是:
Cat:random
WhiteCat:white
96、说说下面语句是否有错误,或可能出现的缺陷,并指出错误,或缺陷在哪里?
public class MyFile implements Runnable{
public void run(){
while (true){
try{
FileReader fr=new FileReader(new File(“a.txt”)) ;
String line=fr.readLine();
System.out.println(line);
}catch(IOException err) {
}
Sleep(1000); }
}
解答: 1.fr.readLine()没有这个方法
2.Sleep(1000)需要用Thread.sleep(1000);
97、判断下列语句是否正确,如果有错误,请指出错误所在?
List<Short> a = new ArrayList<Short>();
a.add(5);
解答:错误,默认封装int类型。
98、判断下列语句是否正确,如果有错误,请指出错误所在?
void foo(final int []arg){
if (arg.length > 1)
arg[0] = 5;
}
解答:正确
99、判断下列语句是否正确,如果有错误,请指出错误所在?
interface A{
int add(final A a);
}
class B implements A{
long add(final A a){
return this.hashCode() + a.hashCode();
}
}
解答:返回值不是long类型
100、指出下面程序的运行结果:
class A{
static{
System.out.print(“a”);
}
public A (){
System.out.print(“x”);
}
}
class B extends A{
static{
System.out.print(“b”);
}
public B (){
System.out.print(“y”);
}
}
public class Test{
public static void main(String[] args){
A ab = new B ();
ab = new B ();
}
}
解答:abxyxy
101、下列代码的输出结果是什么?
public class MyFor {
public static void main (String argv[]){
int i; int j;
outer:for(i=1;i<3;i++)
inner:for(j=1;j<3;j++){
if (j==2) continue outer;
System.out .println(“Value for i=”+i+” Value for j=” +j);
}
}
}
解答:Value for i=1 Value for j=1
Value for i=2 Value for j=1
102、查看下面的代码,写出可以使程序正常执行的修改方法
1.public class MyClass {
2.static String s1;
3. String s2;
4. public static void main(String args[]) {
5. String s3;
6. System.out.println(“s1 =” + s1);
7. System.out.println(“s2 =” + s2);
8. System.out.println(“s3 =” + s3);
9. }
10.}
解答:删除第8行或者将第6行改为String s3 = “”;
103、为了显示myStr = 23 这样的结果,写出在控制台输入的命令
public class MyClass {
public static void main(String args[]) {
String s1 = args[0];
String s2 = args[1];
String myStr = args[2];
System.out.printin(“myStr =” + s2 + myStr);
}
}
解答:java MyClass 1 2 3 4
104、写出下面代码的执行结果
public class MyClass {
static void aMethod(StringBuffer sf1, StringBuffer sf2) {
sf1.append(sf2);
sf2 = sf1;
}
public static void main(String[] args){
StringBuffer sf1 = new StringBuffer(“A”);
StringBuffer sf2 = new StringBuffer(“B”);
aMethod(sf1,sf2);
System.out .println(sf1+ “:”+sf2);
}
}
解答:AB:B
105、第3行中生成的object在第几行执行后成为garbage collection的对象?
1.public class MyClass {
2. public StringBuffer aMethod() {
3. StringBuffer sf = new StringBuffer(“Hello”);
4. StringBuffer[] sf_arr = new StringBuffer[1];
5. sf_arr[0] = sf;
6. sf = null;
7. sf_arr[0] = null;
8. return sf;
9. }
10.}
解答:第7行
106、写出执行下面的代码后的结果
public class MyClass {
public static void main(String args[]) {
java.util.Vector v1 = new java.util.Vector();
v1.addElement(“Hello”);
v1.addElement(new Float(3.14f));
v1.addElement(10);
System.out.println(v1.elementAt(0) + “:” + v1.elementAt(1) + “:”+ v1.elementAt(2));
}
}
解答:Hello : 3.14 : 10
107、写出执行下面代码后的正确结果
interface MyDB {
public void getConnection();
}
class MyDBDriver implements MyDB {
public void getConnection() {
System.out.println(“getConnection()”);
}
}
public class MyClass {
public static void aMethod(MyDB db) {
db.getConnection();
}
public static void main(String args[]) {
MyDBDriver db_driver = new MyDBDriver();
aMethod(db_driver);
}
}
解答:getConnection()
108、下列程序运行的结果是
class A {
class Dog {
private String name;
private int age;
private int step;
Dog(String s, int a) {
name = s;
age = a;
step = 0;
}
public void run(Dog fast) {
fast.step++;
}
}
public static void main(String args[]) {
A a = new A();
Dog d = a.new Dog(“Tom”, 3);
d.step = 25;
d.run(d);
System.out.println(d.step);
}
}
解答:26
109、请看下列程序,运行结果是
class Super{
int i=10;
Super(){
print();
i=20;
}
void print(){
System.out.print(i);
}
}
public class Sub extends Super{
int j=30;
Sub(){
print();
j=40;
}
void print(){
System.out.print(j);
}
public static void main(String[] args){
System.out.print(new Sub().j);
}
}
解答:03040
110、getSomething ()执行时发生IllegalArgumentException会出现什么样的结果?
void makeConnection(String url) {
try {
getSomething();
}catch(NullPointerException e) {
System.out.printin(“Invalid URL”) ;
return;
}catch(Exception e) {
System.out.println(“Exception”);
}
}
解答:Exception
111.Tomcat服务器的默认端口是多少?怎样修改tomcat的端口?
解答:默认端口为8080,可以通过service.xml的Connector元素的port属性来修改端口。
112.多线程有几种实现方法,都是什么?同步的方法有几种,都是什么?
解答:多线程有两种实现方法:继承Thread类或者实现Runnable接口。
实现同步也有两种方法:一种是同步方法,另一种是同步代码块。
同步方法是在方法返回类型前面加上synchronized关键字
同步代码块是synchronized (这里写需要同步的对象){…}
113.谈一下聚簇索引和非聚簇索引的区别以及各自的优缺点。
解答:
聚集索引,表中存储的数据按照索引的顺序存储,检索效率比普通索引高,但对数据新增/修改/删除的影响比较大 非聚集索引,不影响表中的数据存储顺序,检索效率比聚集索引低,对数据新增/修改/删除的影响很小
114. 死锁的必要条件?怎么克服?
解答:产生死锁的四个必要条件:
互斥条件:一个资源每次只能被一个进程使用。
请求与保持条件:一个进程因请求资源而阻塞时,对已获得的资源保持不放。
不剥夺条件:进程已获得的资源,在末使用完之前,不能强行剥夺。
循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。
这四个条件是死锁的必要条件,只要系统发生死锁,这些条件必然成立,而只要上述条件之一不满足,就不会发生死锁。
死锁的解决方法:
a 撤消陷于死锁的全部进程; b逐个撤消陷于死锁的进程,直到死锁不存在; c从陷于死锁的进程中逐个强迫放弃所占用的资源,直至死锁消失。 d从另外一些进程那里强行剥夺足够数量的资源分配给死锁进程,以解除死锁状态
115.描述重做与回滚的认识;
解答:重做日志生成日志文件,是为将来恢复数据库使用的.
回滚段保存未提交数据,是为支持事务而起作用的。
116.索引组织表,聚蔟表的用途;
解答:
索引组织表:数据按主码存储和排序,同索引结构一样,不过数据直接存储于主码后面。适用于信息.检索、空间和OLAP程序。索引组织表的适用情况:
a.代码查找表。
b.经常通过主码访问的表。
c.构建自己的索引结构。
d.加强数据的共同定位,要数据按特定顺序物理存储。
e.经常用between„and„对主码或唯一码进行查询。数据物理上分类查询。如一张订单表,按日期装载数据,想查单个客户不同时期的订货和统计情况。
索引聚簇表:索引聚簇表是表相关的表共享同一数据块中的相同列,并把相关数据存储中同一个数据块上。创建索引聚簇表中最重要的是对SIZE参数有很好的估量,否则聚簇将会降低空间利用,降低效率。
使用索引聚簇表的注意点:
a如果表中数据有大量DML *** 作的话,那么聚簇将不适用,因为会消极地影响到DML性能。
b聚簇中,全表扫描将受到影响。这是因为将扫描聚簇中不同表的数据,额外增加很多无用的数据。
c如果经常TRUNCATE表和装载表的话,聚簇将不适用。聚簇中的表无法被TRUNCATE的,这是因为每个块中不只是存储一张表的数据。
SQL> truncate table emp;
truncate table emp
*
ERROR at line 1:
ORA-03292: Table to be truncated is part of a cluster
d如果大部分是读取 *** 作,且通过聚簇码索引或聚簇表中其他索引来读取的话,聚簇将会比较适用。
117.消耗资源的SQL的定位方法;
解答:select sql_text from v$sql where disk_reads > 1000 or (executions > 0 and buffer_gets/executions > 30000);
SELECt * FROM ( SELECt sql_text,buffer_gets,disk_reads FROM v$sql ORDER BY buffer_gets,disk_reads DESC) WHERe ROWNUM<=10;
118.对触发器的认识;
解答:触发器是表上的程序,主要提供数据添加、修改与删除后的程序处理方法,可以用来检查数据及进行数据更新,也可以分担一些前端应用程序撰写的逻辑规则。用场景: 触发器可以查询其他表,而且可以包含复杂的SQL语句。它们主要用于强制复杂的业务规则或要求。
触发器的主要应用场合概括起来讲有以下几种:
1).当向一张表中添加或删除记录时,需要在相关表中进行同步 *** 作。比如,当为应用系统添加一个系统用户时,需要同时向权限表中添加该用户的缺省权限,此时就编写系统用户表的触发器在添加记录动作时触发。
2).当表上某列数据的值与其他表中的数据有联系时。比如,当某客户进行欠款消费,可以在生成订单时通过设计触发器判断该客户的累计欠款是否超出了最大限度。
3).当需要对某张表进行跟踪时。比如,当人事表中有人离职时,第一时间通知或更改相关表的值。
119.对ORA-01555错误的认识;
解答:ORA-01555错误产生的原因:一致性读(Consistent Get)和延迟块清除(Delayed Block Cleanout)。
120.将ORACLE数据库更改为归档模式;写出步骤
解答:具体步骤如下: 1),以exp方式在线备份数据库到指定位置; 2),观察当前数据库是以服务器参数文件(spfile)方式启动还是以参数文件(pfile)方式启动: SQL> show parameter spfile; NAME TYPE VALUE ———————————— ———– —————————— spfile string /home/db/oracle/10g/dbs/spfile XXXX.ora value后有内容,说明数据库以服务器参数文件方式启动,这里的spfile文件对应的裸设备为/dev/vgdata/rspfile(通过查看/home/db/oracle/10g/dbs/initSID.ora文件内容获得); 3),关闭所有实例(shutdown immediate); 4),任意选取一个实例,创建参数文件到指定路径: SQL>create pfile=’/home/db/oracle/pfile.ora’ from spfile; 5),修改pfile.ora文件,添加参数cluster_database=false; 6),以修改之后的参数文件按nomount方式启动数据库: SQL>startup nomount pfile=’/home/db/oracle/pfile.ora’; 7),使数据库以exclusive方式启动: SQL>alter database mount exclusive; 8),改变归档模式: SQL>alter database archivelog; 9),将pfile参数中的cluster_database重新更改为“true”; 10),更新服务器参数文件: SQL>create spfile from pfile=’/home/db/oracle/pfile.ora’; 11),关闭数据库实例; SQL>shutdowm immediate; 12),分别在两个节点上启动数据库: SQL>startup;
13),在两个节点上分别检查归档模式是否更改成功: SQL>archive log list; Database log mode Archive Mode Automatic archival Enabled Archive destination /home/db/oracle/10g/dbs/arch Oldest online log sequence 489 Next log sequence to archive 491 Current log sequence 491 完成。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)