1.try、catch、finally、return的执行顺序?
结论:
1.不管出没出现异常,finally块中的语句都会执行;
2.当try或catch块中有return语句时,finally块中的语句仍会执行;
3.finally块中的语句是在return语句执行之后才执行的,即函数返回值是在finally块
中语句执行前确定的;
4.finally块中不能包含return语句。
总结:
finally在return前执行,在finally的操作,不会改变已经确定的return的值.
finally不能加return语句。出现异常,先找是否有处理器可以处理这个异常.再finally。
finally里面可以有返回语句,也可以执行,但是eclipse中会有警告。因为这样的话,
finally中的return会覆盖掉正常和非正常return的信息,导致用户无法判断当前的情况。
2.解释一下什么叫多态?
一个引用或类型在不同情况下的多种状态。
比如说咱公司网站真爱网,和百合网都属于网站,分别继承网站,网站有个构造方法Call
();然后分别实例化两个网站,分别调用Call()方法,虽然语句一样,但是执行的结果不一
样。一个是真爱网,一个百合网。人吃饭,看到的是左手还是右手,这就是我理解的多态。
靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方
法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运
行的那个对象的方法,而不是引用变量的类型中定义的方法。
3.解释一下什么叫反射?
反射就是把Java类中的各种成分映射成相应的java类。
例如,一个Java类用一个类来表示,一个类中的组成部分:成员变量,方法,构造方法,修
饰符,包等等信息也用一个个的Java类来表示,就像汽车是一个类,汽车中的发动机,变速
箱等等也是一个个的类。
4.容器类
容器类分为两种:独立元素序列的Collection和键值对的Map.
Collection主要有如下几种:
List:按插入顺序保存元素;
ArrayList:擅长于随机访问元素,但是在List的中间插入和移除元素较慢;
LinkedList:插入删除代价较低,特性集比ArrayList大,但随机访问相对比较慢;
Set:不重复保存元素;
HashSet:提供最快查找,使用了散列函数,顺序是杂乱的;
TreeSet:按照比较结果的升序保存对象,保留了HashSet的查询速度;
LinkedHashSet:按照被添加的顺序保存对象,使用了散列函数,同时保留了HashSet的查
询速度;
Queue:按排队规则顺序保存元素;
Map:一组成对的“键值对”对象,允许键来查找值,有如下几种:
HashMap:提供最快的查找,没有明显顺序保存对象;
TreeMap:按照比较结果的升序保存键,保留了HashMap的查询速度;
LinkedHashMap:按照插入的顺序保存键,保留了HashMap的查询速度;
5.update是否可以与join子句联合使用?
用子查询里
update a_table set val='test' where id in (
select id from b_table a
left jion c_table c on a.id=c.id
)
6.解释一下什么叫“左外连接”。
外联接。外联接可以是左向外联接、右向外联接或完整外部联接。
在 FROM 子句中指定外联接时,可以由下列几组关键字中的一组指定:
LEFT JOIN 或 LEFT OUTER JOIN。
左向外联接的结果集包括 LEFT OUTER 子句中指定的左表的所有行,而不仅仅是联
接列所匹配的行。如果左表的某行在右表中没有匹配行,则在相关联的结果集行中右表的所
有选择列表列均为空值。
RIGHT JOIN 或 RIGHT OUTER JOIN。
右向外联接是左向外联接的反向联接。将返回右表的所有行。如果右表的某行在左表中没有
匹配行,则将为左表返回空值。
7.JDBC先获取,后获取,然后释放资源。
操作oracle连接类
PreparedStatement是预编译的,对于批量处理可以大大提高效率. 也叫JDBC存储过程
2.使用 Statement 对象。在对数据库只执行一次性存取的时侯,用 Statement 对象进行
处理。PreparedStatement 对象的开销比Statement大,对于一次性操作并不会带来额外
的好处。
3.statement每次执行sql语句,相关数据库都要执行sql语句的编译,
preparedstatement是预编译得, preparedstatement支持批处理。
8.事务处理/
开始时:connection.setAutoCommit(false);
出现异常时回滚事务:connection.rollback();
提交事务:connection.commit();
最后可以将自动提交设置为true:connection.setAutoCommit(true);
9.架构
因为web应用大了,servletClass多了,所以用到struts来减轻我们的负担,使得模块更清
晰,和更利于复用和管理。
因为web应用大了,表、字段多了,写sql语句会写死人,且比较容易出错,所以用到
hibernate来获得它给我们的面向对象操作数据库的服务,省去了写n多sql的烦心事,且使
我们的程序更加面向对象
因为逻辑和组件模块多了,因为层多了,于是我们考虑整一个spring,一来包装hibernate
,提供更简便的服务接口及更易于管理的事务服务,二来代理了我们的服务层和dao层,使
得这两层与实际的控制单元的关系变成ioc框架来管理,任何一方的修改都不会牵扯到双方
都要修改的问题。总之spring就是把杂乱的dao、service、action给串了起来,变成了一
个个可在程序外控制的模块,使其可以自由的组合在一起,即可获得想要的服务也不用烦他
们之间的关系。
10.Struts框架在M-V-C三层,分别提供了那些工具?
v提供ognl还有标签库 m方面struts提供自动映射到一个model,c方面struts本身就是了
,提供字符串对应的不同网页。
11.tomcat部署web项目的3中方法
1.直接把项目复制到Tomcat安装目录的webapps目录中,这是最简单的一种Tomcat项目部署
的方法,也是初学者最常用的方法。
2.在tomcat安装目录中有一个conf文件夹,打开此文件夹,其中包含配置文件server.xml
,打开配置文件,并在<host>和</host>之间插入如下语句。
<Context path="/hello" docBase="F:\eclipse3.2\workspace\hello
\WebRoot" debug="0" privileged="true"> </Context>
其中,docBase为设置项目的路径。
3.在conf目录中,在Catalina\localhost(此处需要注意目录的大小写)目录下新建一个
XML文件,任意命名,只要和当前文件中的文件名不重复即可.
12.测试与调试
测试是为了发现错误,而调试是为了定位错误,修改错误。
一、写测试目标(业务相关的类)
二、写测试用例
三、写测试单元
四、运行单元测试的main()方法