java面试题06
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了java面试题06相关的知识,希望对你有一定的参考价值。
第一部分
1.try{}里面有一个return语句,那么紧跟这个try后面的finally{}里面的code或不会执行,什么时候执行,在return前还是之后?
会执行
在return 执行之前执行
2.写出通过主函数在控制台打印出“hello,world”的程序。
package cn.ssdf.test;
public class Test01{
public static void main(String [] args) {
System.out.println(“hello,world”);
}
}
3.JQuery选取页面元素id为deptid的写法
$(“#deptid”);
4.编程实现:将字符串“hello world,hello java”输出为“hello world,world hello”.
String str = “hello world,hello java”;
str.replace(“hello java”,” world hello”);
5.简述strut2、hibernate、spring三个框框架各自的功能
hibernate是一个持久层框架,对JDBC进行了封装,负责对数据库的CRUD操作;
strut2是三层开发中的表现层的框架,MVC模式中的model层;很好的实现页面的跳转和用户输入信息的验证,处理用户请求信息并返回显示页面给用户;
spring是一个轻量级框架,两大特性:IOC和AOP;通过IOC-控制反转将对象的创建交给spring容器,解决各层业务层和dao层之间的过度依赖;AOP面向切面,对事物进行很好的管理,支持多个框架例如:hibernate、struts2、mybatis等。
6.简述Spring框架中如何控制事务
Spring支持两种类型的事务管理:这意味着你的业务代码分开事务管理。你只用注释或基于XML 配置来管理事务。
编程式事务管理:
编程式事务管理办法允许您管理与编程的源代码的帮助下事务。这就给了极大的灵活性,但它难以维护。
声明式事务管理:
声明式事务管理的方法可帮助您管理配置,而不是在源代码中硬编码的事务。这意味着,可以单独从业务代码事务管理。只用注释或基于XML配置来管理事务。bean的配置将指定的方法是事务性。以下是声明性与事务相关的步骤:
我们使用<tx:advice/>标签,这将创建我们定义了一个切入点匹配所有我们想做成事务,并引用其中的事务通知方法的事务并同时处理建议。
7.写出sql语法中左外连接的关键字,并且叙述左外连接的含义
关键字:left join ……on……
含义:查询结果左表为准,左表内容全部显示,右表对应的内容不管有没有内容都显示出来。
8.oracle数据库表A中有类型为varchart2的deptcode的字段,通过sql实现deptcode字段中第二位到第四位等于03的所有记录。
select * from A where substr(“deptcode”,2,4) = “03”;
9.如何看软件产品的易用性、可扩展性
可维护性是说,对于前期开发的代码,后期在进行机能改善和扩充时,修改方便。不会出现推倒重新编写。
易用性是说,代码简洁明了,不冗余。
10.说说你个人的优点与缺点
第二部分
1.short S1=1;S1=S1+1;有什么错?short S1=1;S1+= 1;有什么错?
前面一句中,s1 = s1 + 1需要进行强转,写成s1 = (short)(s1 + 1),后面一句没错。
2.用最有效率的方法算出2乘以8等于几?
2<<3
3.请说出作用域public,private,protected,以及不写时的区别
public 所有地方都可以使用
protected 同一类、同包和子类中可以使用
private 仅限本包内使用
不写时 在同一类和本包中可以使用
4.构造器Constructor是否可被override
不可以被重写,但是可以重载。
5.是否可以继承String类
不可以,因为String类有final修饰符,而final修饰的类是不能被继承的
6.描述一下JVM加载class文件的原理机制
类装载器就是寻找类或接口字节码文件进行解析并构造JVM内部对象表示的组件,在java中类装载器把一个类装入JVM,经过以下步骤:
(1)装载:查找和导入Class文件
(2)链接:其中解析步骤是可以选择的
(a)检查:检查载入的class文件数据的正确性
(b)准备:给类的静态变量分配存储空间
(c)解析:将符号引用转成直接引用
(3)初始化:对静态变量,静态代码块执行初始化工作
类装载工作由ClassLoder和其子类负责。JVM在运行时会产生三个ClassLoader:根装载器,ExtClassLoader(扩展类装载器)和AppClassLoader,其中根装载器不是ClassLoader的子类,由C++编写,因此在java中看不到他,负责装载JRE的核心类库,如JRE目录下的rt.jar,charsets.jar等。ExtClassLoader是ClassLoder的子类,负责装载JRE扩展目录ext下的jar类包;AppClassLoader负责装载classpath路径下的类包,这三个类装载器存在父子层级关系,即根装载器是ExtClassLoader的父装载器,ExtClassLoader是AppClassLoader的父装载器。默认情况下使用AppClassLoader装载应用程序的类
Java装载类使用“全盘负责委托机制”。“全盘负责”是指当一个ClassLoder装载一个类时,除非显示的使用另外一个ClassLoder,该类所依赖及引用的类也由这个ClassLoder载入;“委托机制”是指先委托父类装载器寻找目标类,只有在找不到的情况下才从自己的类路径中查找并装载目标类。这一点是从安全方面考虑的,试想如果一个人写了一个恶意的基础类(如java.lang.String)并加载到JVM将会引起严重的后果,但有了全盘负责制,java.lang.String永远是由根装载器来装载,避免以上情况发生
7.java中有几种类型的流?JDK为每种类型的流提供了一些抽象类以供继承,请说出他们分别是那些?
Java中的流分为两种,一种是字节流,另一种是字符流,分别由四个抽象类来表示(每种流包括输入和输出两种所以一共四个):InputStream,OutputStream,Reader,Writer。
8.STRUTS的应用(如STRUTS架构)
Struts 是采用Java Servlet/JavaServer Pages技术,开发Web应用程序的开放源码的framework。采用Struts能开发出基于MVC(Model-View-Controller)设计模式的应用构架。 Struts有如下的主要功能:一.包含一个controller servlet,能将用户的请求发送到相应的Action对象。二.JSP自由tag库,并且在controller servlet中提供关联支持,帮助开发员创建交互式表单应用。三.提供了一系列实用对象:XML处理、通过Java reflection APIs自动处理JavaBeans属性、国际化的提示和消息。
9.hibernate的inverse属性的作用
hibernate的属性inverse:它是用来指定关联的控制方的,inverse属性默认是false,若为false,则关联由自己控制,若为true,则关联由对方控制。
10.介绍一下hibernate的二级缓存
二级缓存是独立于Hibernate的软件部件,属于第三方的产品,多个厂商和组织都提供有缓存产品,例如,EHCache和OSCache等等。在Hibernate中使用二级缓存,首先就要在hibernate.cfg.xml配置文件中配置使用哪个厂家的缓存产品,接着需要配置该缓存产品自己的配置文件,最后要配置Hibernate中的哪些实体对象要纳入到二级缓存的管理中。一个SessionFactory可以关联一个二级缓存,也即一个二级缓存只能负责缓存一个数据库中的数据,当使用Hibernate 的二级缓存后,注意不要有其他的应用或SessionFactory来更改当前数据库中的数据,这样缓存的数据就会与数据库中的实际数据不一致。
11.用table显示n条记录,每三行换一次颜色,即1、2、3用红色字体,4、5、6用绿色字体,7、8、9用红色字体
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<script type="text/javascript">
window.onload=function() {
var tbl = document.getElementById("tbl");
var rows = tbl.getElementsByTagName("tr");
for(i=0;i<rows.length;i++) {
var j = parseInt(i/3); // 此语句的效果是,以3个为单位,000 111 222 333 444 ...
if(j%2==0) rows[i].style.backgroundColor="#f00";
else rows[i].style.backgroundColor="#0f0";
}
};
</script>
</head>
<body>
<table id="tbl" border="1">
<tr><td>1</td></tr>
<tr><td>2</td></tr>
<tr><td>3</td></tr>
<tr><td>4</td></tr>
<tr><td>5</td></tr>
<tr><td>6</td></tr>
<tr><td>7</td></tr>
<tr><td>8</td></tr>
<tr><td>9</td></tr>
<tr><td>10</td></tr>
<tr><td>11</td></tr>
<tr><td>12</td></tr>
<tr><td>13</td></tr>
</table>
</body>
</html>
12.第一个人10,第二个比第一个大2岁,一次递推,请用递归方式计算出第八个人多大?
package com.test;
public class ComputeAge {
/**
* 递归函数的执行过程具有三个特点:
* 1、函数名相同 2、不断地自调用 3、最后被调用的函数要最先被返回
* @param n
* @return
*/
public static int getComputeAge(int n) {
int age = 0;
if (n == 1) {
age = 10;
} else {
age = getComputeAge(n - 1) + 2;
}
return age;
}
public static void main(String[] args) {
System.out.println(getComputeAge(8));
}
}
13。请写出用于校验HTML文本框中输入的内容全部为数字的javascript代码
<input type="text" id="d1" onblur=" chkNumber(this)"/>
<script type=”text/javascript” />
function chkNumber(eleText) {
var value =eleText.value;
var len =value.length;
for(vari=0;i<len;i++) {
if(value.charAt(i)>"9"||value.charAt(i)<"0") {
alert("含有非数字字符");
eleText.focus();
break;
}
}
}
</script>
14.查出比经理薪水还高的员工信息
wzg大于flx,lhm大于zxx
select e.*
from employees e,employees m
where e.managerid=m.id
and e.salary>m.salary;
15.一个用户表中有一个积分字段,假如数据库中有100多万个用户,若要在每年第一天凌晨将积分清零,你将考虑什么,你将想什么办法解决?
alter table drop column score;
alter table add colunm score int;
可能会很快,但是需要试验,试验不能拿真实的环境来操作,并且要注意,这样的操作时无法回滚的,只有inert update delete等DML语句才能回滚,对于create table,drop table ,alter table等DDL语句是不能回滚。
解决方案一,update user set score=0;
解决方案二,假设上面的代码要执行好长时间,超出我们的容忍范围,那我就alter table user drop column score;alter table user add column score int。
下面代码实现每年的那个凌晨时刻进行清零。
Runnable runnable = new Runnable(){
public void run(){
clearDb();
schedule(this,new Date(new Date().getYear()+1,0,0));
}
};
schedule(runnable,
new Date(new Date().getYear()+1,0,1));
以上是关于java面试题06的主要内容,如果未能解决你的问题,请参考以下文章