java面试总结
2011-09-25 20:36
218 查看
一、Struts和servlet的关系?
答:
i. 在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。
ii. Struts2.0的原理:
a) 客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action” 。
b) 请求被提交到一系列(主要是三层)的过滤器(Filter),如ActionContextCleanUp,FilterDispatcher等 。
c) FilterDispatcher是控制器的核心,FilterDispatcher进行初始化并启用核心doFilter 。
d) FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 。
e) ActionProxy通过(struts.xml)询问框架的配置文件,找到需要调用的Action类. 。
f) ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
iii. ActionInvocation工作原理:
a) ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
b) 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
c) 一 旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果
二、 冒泡排序的过程
答:
a) 基本思想:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
改进方案:了提升冒泡排序法的效率,可对BubbleSort函数进行改进,当在某一遍扫描时,发现数据都已经按顺序排列了,就不再进行后继的扫描,而结束排序过程。
b) 图形表示:
a) 算法程序:
为改进前:
void BubbleSort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j-1]>a[j])
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}
}
printf("第%2d遍:",i+1);
for(j=0;j<n;j++)
printf("%d ",a[j]);
printf("\n");
}
}
改进后:
void BubbleSort1(int a[],int n)
{
int i,j,t,flag=0; //flag用来标记是否发生交换
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j-1]>a[j])//交换数据
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
flag=1;
}
}
printf("第%2d遍:",i+1);
for(j=0;j<n;j++)
printf("%d",a[j]);
printf("\n");
if(flag==0) //没发生交换,直接跳出循环
break;
else
flag=0;
}
}
三、有两个表,一个学生表SC一个选课表SC,没选课的同学在SC表中没有记录,请查询出没有选修英语科目的学生。入下图
S(学生表)
SC(选课表)
答:SELECT s_no, s_name, s_ageFROM S WHERE NOT EXISTS (SELECT * FROM SC WHERES.s_no=SC.s_no ANDSC.sc_name = '英语');
测试建立数据表的语句:
create table S(
s_novarchar(10) primary key,
s_namevarchar(25),
s_ageint
);
create table SC(
s_novarchar(10),
sc_namevarchar(25),
s_score varchar(6),
primary key(s_no,sc_name)
);
alter table SC add constraint fk_user_role_userforeign key(s_no) references S(s_no);
insert into S values('1','张三', 22);
insert into S values('2','李四', 20);
insert into S values('3','王五', 24);
insert into SC values('1','英语', 85);
insert into SC values('1','数学', 90);
insert into SC values('2','语文', 79);
四、描述面向对象语言Java三大特征中多态的特性?
答:
a) 一个接口定义了N个抽象方法,接口的M个实现类都实现了这N个方法,通过这N个方法建立了一种父子引用联系——“父类引用指向子类对象”。
b) Overload(重载)和Override(重写)。其中重载是一个类中的多态性的一种体现;重写是父类和子类之间多态性的一种体现。
五、 Java中创建多线程的几种方法?
答:
a) 继承Thread类后覆盖其中的public void run()方法。
b) 创建一个线程类Thread的实例,在构造函数中把实现Runnable接口后的实例对象当成参数传递进去。
答:
i. 在struts2.0中,可以通过ServletActionContext.getRequest()获取request对象。
ii. Struts2.0的原理:
a) 客户端提起一个(HttpServletRequest)请求,如上文在浏览器中输入”http://localhost:8080/TestMvc/add.action” 。
b) 请求被提交到一系列(主要是三层)的过滤器(Filter),如ActionContextCleanUp,FilterDispatcher等 。
c) FilterDispatcher是控制器的核心,FilterDispatcher进行初始化并启用核心doFilter 。
d) FilterDispatcher询问ActionMapper是否需要调用某个Action来处理这个(request)请求,如果ActionMapper决定需要调用某个Action,FilterDispatcher把请求的处理交给ActionProxy 。
e) ActionProxy通过(struts.xml)询问框架的配置文件,找到需要调用的Action类. 。
f) ActionProxy创建一个ActionInvocation的实例,同时ActionInvocation通过代理模式调用Action。但在调用之前ActionInvocation会根据配置加载Action相关的所有Interceptor(拦截器)
iii. ActionInvocation工作原理:
a) ActionInvocation初始化时,根据配置,加载Action相关的所有Interceptor。
b) 通过ActionInvocation.invoke方法调用Action实现时,执行Interceptor。
c) 一 旦Action执行完毕,ActionInvocation负责根据struts.xml中的配置找到对应的返回结果
二、 冒泡排序的过程
答:
a) 基本思想:对待排序记录关键字从后往前(逆序)进行多遍扫描,当发现相邻两个关键字的次序与排序要求的规则不符时,就将这两个记录进行交换。这样,关键字较小的记录将逐渐从后面向前面移动,就象气泡在水中向上浮一样,所以该算法也称为气泡排序法。
改进方案:了提升冒泡排序法的效率,可对BubbleSort函数进行改进,当在某一遍扫描时,发现数据都已经按顺序排列了,就不再进行后继的扫描,而结束排序过程。
b) 图形表示:
a) 算法程序:
为改进前:
void BubbleSort(int a[],int n)
{
int i,j,t;
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j-1]>a[j])
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
}
}
printf("第%2d遍:",i+1);
for(j=0;j<n;j++)
printf("%d ",a[j]);
printf("\n");
}
}
改进后:
void BubbleSort1(int a[],int n)
{
int i,j,t,flag=0; //flag用来标记是否发生交换
for(i=0;i<n-1;i++)
{
for(j=n-1;j>i;j--)
{
if(a[j-1]>a[j])//交换数据
{
t=a[j-1];
a[j-1]=a[j];
a[j]=t;
flag=1;
}
}
printf("第%2d遍:",i+1);
for(j=0;j<n;j++)
printf("%d",a[j]);
printf("\n");
if(flag==0) //没发生交换,直接跳出循环
break;
else
flag=0;
}
}
三、有两个表,一个学生表SC一个选课表SC,没选课的同学在SC表中没有记录,请查询出没有选修英语科目的学生。入下图
S(学生表)
学号 | S_no |
姓名 | S_name |
年龄 | S_age |
学号 | S_no |
科目 | Sc_name |
成绩 | Sc_score |
测试建立数据表的语句:
create table S(
s_novarchar(10) primary key,
s_namevarchar(25),
s_ageint
);
create table SC(
s_novarchar(10),
sc_namevarchar(25),
s_score varchar(6),
primary key(s_no,sc_name)
);
alter table SC add constraint fk_user_role_userforeign key(s_no) references S(s_no);
insert into S values('1','张三', 22);
insert into S values('2','李四', 20);
insert into S values('3','王五', 24);
insert into SC values('1','英语', 85);
insert into SC values('1','数学', 90);
insert into SC values('2','语文', 79);
四、描述面向对象语言Java三大特征中多态的特性?
答:
a) 一个接口定义了N个抽象方法,接口的M个实现类都实现了这N个方法,通过这N个方法建立了一种父子引用联系——“父类引用指向子类对象”。
b) Overload(重载)和Override(重写)。其中重载是一个类中的多态性的一种体现;重写是父类和子类之间多态性的一种体现。
五、 Java中创建多线程的几种方法?
答:
a) 继承Thread类后覆盖其中的public void run()方法。
b) 创建一个线程类Thread的实例,在构造函数中把实现Runnable接口后的实例对象当成参数传递进去。
相关文章推荐
- 身为一名Java程序员,在面试的时候常常被问到的,下面我总结一些常常别问到的问题。
- JAVA面试中问及HIBERNATE与 MYBATIS的对比总结
- Java综合-2014面试总结
- JAVA高级面试总结-JVM篇
- Java面试找工作的总结
- 2016年魅族Java研发面试总结
- Java面试常见问题总结
- 三年java经验面试总结
- Java工程师的一些面试总结(1)
- 黑马程序员_java面试总结
- java笔试+面试总结——mysql
- Java多线程面试总结
- JAVA基础面试总结
- java面试总结-2 hibernate
- [Java面试五]Spring总结以及在面试中的一些问题.
- #面试java基础总结大全#多线程
- java基础面试总结1
- 一个两年Java的面试总结
- Java核心技术及面试指南 面向对象部分的面试题总结以及答案
- Java核心技术及面试指南 多线程并发部分的面试题总结以及答案