公司面试题

1, 在java中的一个类,方法和变量被声明为final类型,分别表示了什么意思?

答:final声明一个类表示这个类不能被继承,属于顶级类

     final声明一种方法是把方法锁定,以防任何继承类修改它的含义

      final声明一种变量对于一个final变量,如果是基本数据类型的变量,则其数值一旦在初始化之后便不能更改;如果是引用类型的变量,则在对其初始化之后便不能再让其指向另一个对象。

2,请简单描述java中值传递和引用传递的区别。

值传递:(形式参数类型是基本数据类型):方法调用时,实际参数把它的值传递给对应的形式参数,形式参数只是用实际参数的值初始化自己的存储单元内容,是两个不同的存储单元,所以方法执行中形式参数值的改变不影响实际参数的值。

引用传递:(形式参数类型是引用数据类型参数):也称为传地址。方法调用时,实际参数是对象(或数组),这时实际参数与形式参数指向同一个地址,在方法执行中,对形式参数的操作实际上就是对实际参数的操作,这个结果在方法结束后被保留了下来,所以方法执行中形式参数的改变将会影响实际参数


3,数组有没有length()这个方法?String有没有length()这个方法?

数组中没有length()这个方法,有length这个属性。String有length()这个方法。


4,请简单描述Overload和Override的区别,Overloaded的方法是否可以改变返回值的类型?

方法的重写overriding和重载overloading是Java多态性的不同表现。重写overriding是父类与子类之间多态性的一种表现,

重载overriding是一个类中多态性的一种表现。如果在子类中定义某方法与父类有相同的名称和参数,我们说该方法被重写

(overriding)。子类的对象使用这个方法时,将调用子类中的定义,对他而言,父类中的定义如同被"屏蔽"了。如果在一个类

中定义了多个同名的方法,他们或有不同的参数个数或有不同的参数类型,则称为方法的重载(overloading).overloaded方法

是乐意改变返回值的类型。



5,try{}里有一个return语句,那么紧跟在这个try后的finally{}里的code会不会被执行,什么时候执行,在return前还是后。

finally里的代码会执行,在return之前执行。

6,请简单描述集合中List,Map,Set有什么区别?

 Set 和List 都继承了Collection,Map不继承Collection,但他继承HashMap,HashTable.


7,sleep()wait()有什么区别?

1). 这两个方法来自不同的类,sleep方法属于Thread,wait方法属于Object。
2). 最主要是sleep方法没有释放锁,而wait方法释放了锁,使得其他线程可以使用同步控制块或者方法。
3). wait, notify和notifyAll只能在同步控制方法(synchronized)或者同步控制块里面使用,而sleep可以在任何地方使用。
4). sleep必须捕获异常,而wait,notify和notifyAll不需要捕获异常


8,编写一个可以编译的泛型的方法。

public class Fan<T> { 
    private T ob;     //定义泛型成员变量 
    public Fan(T ob) { 
            this.ob = ob; 
    } 
    public T getOb() { 
            return ob; 
    } 
    public void setOb(T ob) { 
            this.ob = ob; 
    } 
    public void showTyep() { 
            System.out.println("T的实际类型是: " + ob.getClass().getName()); 
    } 
}

public class FanXing {
public static void main(String args){
//定义泛型类Gen的Integer
Fan<Integer> intOb = new Fan<Integer>(88);
intOb.showTyep();
int i =intOb.getOb();
System.out.println("value= "+i);
//定义泛型类Fan的String版本
Fan<String> strOb = new Fan<String>("I am zhongwenyong");
strOb.showTyep();
String s = strOb.getOb();
System.out.println("value ="+s);
}


}



9,你用过java反射机制么?我们为何需要反射?

用过,在stuts框架,反射机制指的是程序在运行时能够获取自身的信息。在java中,只要给定类的名字, 
    那么就可以通过反射机制来获得类的所有信息。


10,jsp有哪些内置对象?作用分别是什么?

JSP共有以下9种基本内置组件

       1、request对象 客户端请求,此请求会包含来自GET/POST请求的参数通过它才能了解到客户的需求,然后做出响应。

        2、response对象 响应客户请求的有关信息

        3、session对象 它指的是客户端与服务器的一次会话,从客户端连到服务器的一个WebApplication开始,直到客户端与服务器断开连接为止。

        4、out对象   它是JspWriter类的实例,是向客户端输出内容常用的对象

        5、page对象   它是指向当前JSP页面本身,有点象类中的this指针,它是 java.lang.Object类的实例

        6、application对象 它实现了用户间数据的共享,可存放全局变量。它开始于服务器的启动,直到服务器的关闭

        7、exception对象 它是一个例外对象,当一个页面在运行过程中发生了例外,就产生这个对象。

        8、pageContext对象 它提供了对JSP页面内所有的对象及名字空间的访问

        9、config对象 它是在一个Servlet初始化时,JSP引擎向它传递信息用的


11,JAVA SERVLET APL中forward()与redirect()的区别?

     forward()属于服务器转发行为,redirect()属于客服端的重定向行为。在两种情况都可以使用的情况下,应该先考虑forward();

12,spring最核心的是哪个部分?请简单描述Spring MVC的工作流程?

  1. 用户向服务器发送请求,请求被Spring 前端控制Servelt DispatcherServlet捕获;
      2. DispatcherServlet对请求URL进行解析,得到请求资源标识符(URI)。然后根据该URI,调用HandlerMapping获得该Handler配置的所有相关的对象(包括Handler对象以及Handler对象对应的拦截器),最后以HandlerExecutionChain对象的形式返回;
      3. DispatcherServlet 根据获得的Handler,选择一个合适的HandlerAdapter。(附注:如果成功获得HandlerAdapter后,此时将开始执行拦截器的preHandler(...)方法)
       4.  提取Request中的模型数据,填充Handler入参,开始执行Handler(Controller)。 在填充Handler的入参过程中,根据你的配置,Spring将帮你做一些额外的工作:
      HttpMessageConveter: 将请求消息(如Json、xml等数据)转换成一个对象,将对象转换为指定的响应信息
      数据转换:对请求消息进行数据转换。如String转换成Integer、Double等
      数据根式化:对请求消息进行数据格式化。 如将字符串转换成格式化数字或格式化日期等
      数据验证: 验证数据的有效性(长度、格式等),验证结果存储到BindingResult或Error中
      5.  Handler执行完成后,向DispatcherServlet 返回一个ModelAndView对象;
      6.  根据返回的ModelAndView,选择一个适合的ViewResolver(必须是已经注册到Spring容器中的ViewResolver)返回给DispatcherServlet ;
      7. ViewResolver 结合Model和View,来渲染视图
      8. 将渲染结果返回给客户端


13,猴子吃桃问题,猴子第一天摘下若干个桃子,当即吃了一半,还不够隐,又多吃了一个,第二天又将剩下的桃子吃掉一半,

又多吃了一个,以后每天早上都吃了前一天剩下的一半零一个,到第10天早上想再吃时,见只剩下一个桃子了,求第一天共摘

了多少。

第一天摘了1536个

java代码

public class Taozi {
public static void main(String args[]){
//建立数组
int []sum=new int[10];
//第十天桃子的剩余量
sum[9]=1;
for(int i=8;i>=0;i--){
sum[i]=(sum[i+1]+1)*2;//桃子每前一天数的等于现在桃子数加1在乘以2

}


System.out.println("第一天的桃子数为"+sum[0]);

}

}


14,问题:对于一下程序代码;

Socket socket = new Socket();//第一行

SocketAddres remoteAddr1 = new InetSocketAddress("localhost",8000);//第二行

SocketAddres remoteAddr2 = new InetSocketAddress("localhost",8001);//第三行

socket.connect(remoteAddr1,60000);//第四行

socket.connect(remoteAddr2,60000);//第五行

下面那些说法是正确的?

-a)以上程序代码可以顺利编译和运行通过。不正确

-b)第一行程序代码创建了一个与本地匿名端口绑定的Socket对象。正确

-c)第一行程序代码创建的Socket对象没有与任何服务器建立连接,并且没有绑定任何本地端口。不正确

-d)第五行程序代码会运行出错,因为一个Socket对象只允许建立一次连接。不正确

-e)第四行程序代码使Socket对象与一个服务器建立连接,并且绑定一个本地匿名端口。正确


15,编程题,写一个Sington出来

  private static SingleTonPattern stp;

    //返回的是对象

  public static SingleTonPattern getIntance(){

if(stp == null){

stp = new SingleTopPattern();

}

return stp;

}

16,用一条SQL语句,查询出每门课大于80分的学生姓名(假设表名为table)

name     course      score

张三 语文 81

张三 数学            75

李四 语文            76

李四 数学 90

王五       语文 81

王五 数学 100

select * from user where result>80 group by userName



17,有三个表,如果学生缺考,那么在成绩表中就不存在这个学生的这门课程成绩的记录,写一段SQL语句,检索出每个学生缺考的科目

A学生表(student)

字段1 学生号(s_id)

字段2 学生号(s_name)


B 科目表(course)

字段1 科目号(c_id)

字段2 科目名(c_name)


C 成绩表(grade)

字段1 成绩号(g_id)

字段2 学生号(s_id)

字段3 科目号(c_id)

字段4 成绩(score)


select  * from students join course left join grade on students.s_id=grade.s_id and course.c_id=grade.c_id where grade.score is null;  

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值