java面试总结

一、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(学生表)

学号

S_no

姓名

S_name

年龄

S_age


SC(选课表)

学号

S_no

科目

Sc_name

成绩

Sc_score

   




答: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接口后的实例对象当成参数传递进去。



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值