`
mixer_b
  • 浏览: 114145 次
社区版块
存档分类
最新评论

java 面试题

阅读更多

1、请说出作用域public,private,protected,以及不写时的区别

这四个作用域的可见范围如下表所示。

说明:如果在修饰的元素上面没有写任何访问修饰符,则表示friendly。

 

作用域    当前类 同一package 子孙类 其他package

public    √     √          √       √

protected  √     √          √      ×

friendly   √     √          ×      ×

private    √     ×          ×      × 

备注:只要记住了有4种访问权限,4个访问范围,然后将全选和范围在水平和垂直方向上分别按排从小到大或从大到小的顺序排列,就很容易画出上面的图了。

2、Overload和Override的区别。Overloaded的方法是否可以改变返回值的类型?

Overload是重载的意思,Override是覆盖的意思,也就是重写。

重载Overload表示同一个类中可以有多个名称相同的方法,但这些方法的参数列表各不相同(即参数个数或类型不同)。

重写Override表示子类中的方法可以与父类中的某个方法的名称和参数完全相同,通过子类创建的实例对象调用这个方法时,将调用子类中的定义方法,这相当于把父类中定义的那个完全相同的方法给覆盖了,这也是面向对象编程的多态性的一种表现。子类覆盖父类的方法时,只能比父类抛出更少的异常,或者是抛出父类抛出的异常的子异常,因为子类可以解决父类的一些问题,不能比父类有更多的问题。子类方法的访问权限只能比父类的更大,不能更小。如果父类的方法是private类型,那么,子类则不存在覆盖的限制,相当于子类中增加了一个全新的方法。

至于Overloaded的方法是否可以改变返回值的类型这个问题,要看你倒底想问什么呢?这个题目很模糊。如果几个Overloaded的方法的参数列表不一样,它们的返回者类型当然也可以不一样。但我估计你想问的问题是:如果两个方法的参数列表完全一样,是否可以让它们的返回值不同来实现重载Overload。这是不行的,我们可以用反证法来说明这个问题,因为我们有时候调用一个方法时也可以不定义返回结果变量,即不要关心其返回结果,例如,我们调用map.remove(key)方法时,虽然remove方法有返回值,但是我们通常都不会定义接收返回结果的变量,这时候假设该类中有两个名称和参数列表完全相同的方法,仅仅是返回类型不同,java就无法确定编程者倒底是想调用哪个方法了,因为它无法通过返回结果类型来判断。

 

override可以翻译为覆盖,从字面就可以知道,它是覆盖了一个方法并且对其重写,以求达到不同的作用。对我们来说最熟悉的覆盖就是对接口方法的实现,在接口中一般只是对方法进行了声明,而我们在实现时,就需要实现接口声明的所有方法。除了这个典型的用法以外,我们在继承中也可能会在子类覆盖父类中的方法。在覆盖要注意以下的几点:

1、覆盖的方法的标志必须要和被覆盖的方法的标志完全匹配,才能达到覆盖的效果;

2、覆盖的方法的返回值必须和被覆盖的方法的返回一致;

3、覆盖的方法所抛出的异常必须和被覆盖方法的所抛出的异常一致,或者是其子类;

4、被覆盖的方法不能为private,否则在其子类中只是新定义了一个方法,并没有对其进行覆盖。

overload对我们来说可能比较熟悉,可以翻译为重载,它是指我们可以定义一些名称相同的方法,通过定义不同的输入参数来区分这些方法,然后再调用时,VM就会根据不同的参数样式,来选择合适的方法执行。在使用重载要注意以下的几点:

1、在使用重载时只能通过不同的参数样式。例如,不同的参数类型,不同的参数个数,不同的参数顺序(当然,同一方法内的几个参数类型必须不一样,例如可以是fun(int,float),但是不能为fun(int,int));

2、不能通过访问权限、返回类型、抛出的异常进行重载;

3、方法的异常类型和数目不会对重载造成影响;

4、对于继承来说,如果某一方法在父类中是访问权限是priavte,那么就不能在子类对其进行重载,如果定义的话,也只是定义了一个新方法,而不会达到重载的效果。

 

3、4月21号班同学贡献的一些题?

朱wenchao,女:3500,21岁

搞了多个重载方法,参数分别是int ,char,和double,然后将double x = 2,传递进去,会选择哪个方法?

说说对javaee中的session的理解,你是怎么用session的?

 

 

陈yong, 4000

一个房子里有椅子,椅子有腿和背,房子与椅子是什么关系,椅子与腿和背是什么关系?

如果房子有多个椅子,就是聚合关系,否则是一种关联关系,当然,聚合是一种特殊的关联。椅子与腿和背时组合关系。

说说has a与is a的区别。

答:is-a表示的是属于得关系。比如兔子属于一种动物(继承关系)。

         has-a表示组合,包含关系。比如兔子包含有腿,头等组件;

工厂模式的类图

4.5月15号班同学贡献的一些题?

1. 线程如何同步和通讯。 同学回答说synchronized方法或代码块!面试官似乎不太满意!

 只有多个synchronized代码块使用的是同一个监视器对象,这些synchronized代码块之间才具有线程互斥的效果,假如a代码块用obj1作为监视器对象,假如b代码块用obj2作为监视器对象,那么,两个并发的线程可以同时分别进入这两个代码块中。 …这里还可以分析一下同步的原理。

   对于同步方法的分析,所用的同步监视器对象是this

   接着对于静态同步方法的分析,所用的同步监视器对象是该类的Class对象

       接着对如何实现代码块与方法的同步进行分析。

2.ClassLoader如何加载class 。

    jvm里有多个类加载,每个类加载可以负责加载特定位置的类,例如,bootstrap类加载负责加载jre/lib/rt.jar中的类, 我们平时用的jdk中的类都位于rt.jar中。extclassloader负责加载jar/lib/ext/*.jar中的类,appclassloader负责classpath指定的目录或jar中的类。除了bootstrap之外,其他的类加载器本身也都是java类,它们的父类是ClassLoader。

3.Servlet的生命周期

4.抽象类的作用

5.ArrayList如何实现插入的数据按自定义的方式有序存放

class MyBean implements Comparable{

       public int compareTo(Object obj){

              if(! obj instanceof MyBean)

                     throw new ClassCastException() //具体异常的名称,我要查jdk文档。

 

              MyBean other = (MyBean) obj;

              return age > other.age?1:age== other.age?0:-1;

       }

}

 

 

class MyTreeSet {

 

       private ArrayList  datas = new ArrayList();

 

       public void add(Object obj){

              for(int i=0;i<datas.size();i++){

                     if(obj.compareTo(datas.get(i) != 1){

                            datas.add(i,obj);

                     }

              }

       }

}

 

6.分层设计的好处;把各个功能按调用流程进行了模块化,模块化带来的好处就是可以随意组合,举例说明:如果要注册一个用户,流程为显示界面并通过界面接收用户的输入,接着进行业务逻辑处理,在处理业务逻辑又访问数据库,如果我们将这些步骤全部按流水帐的方式放在一个方法中编写,这也是可以的,但这其中的坏处就是,当界面要修改时,由于代码全在一个方法内,可能会碰坏业务逻辑和数据库访问的码,同样,当修改业务逻辑或数据库访问的代码时,也会碰坏其他部分的代码。分层就是要把界面部分、业务逻辑部分、数据库访问部分的代码放在各自独立的方法或类中编写,这样就不会出现牵一发而动全身的问题了。这样分层后,还可以方便切换各层,譬如原来的界面是Swing,现在要改成BS界面,如果最初是按分层设计的,这时候不需要涉及业务和数据访问的代码,只需编写一条web界面就可以了。

   下面的仅供参考,不建议照搬照套,一定要改成自己的语言,发现内心的感受:

  分层的好处:

        1,实现了软件之间的解耦;

        2.便于进行分工

        3.便于维护

        4,提高软件组件的重用

        5.便于替换某种产品,比如持久层用的是hibernate,需要更换产品用toplink,就不用该其他业务代码,直接把配置一改。

        6.便于产品功能的扩展。

        7。便于适用用户需求的不断变化

 

7.序列化接口的id有什么用?

   对象经常要通过IO进行传送,让你写程序传递对象,你会怎么做?把对象的状态数据用某种格式写入到硬盘,Person->“zxx,male,28,30000”àPerson,既然大家都要这么干,并且没有个统一的干法,于是,sun公司就提出一种统一的解决方案,它会把对象变成某个格式进行输入和输出,这种格式对程序员来说是透明(transparent)的,但是,我们的某个类要想能被sun的这种方案处理,必须实现Serializable接口。

   ObjectOutputStream.writeObject(obj);

   Object obj = ObjectInputStream.readObject();

   假设两年前我保存了某个类的一个对象,这两年来,我修改该类,删除了某个属性和增加了另外一个属性,两年后,我又去读取那个保存的对象,或有什么结果?未知!sun的jdk就会蒙了。为此,一个解决办法就是在类中增加版本后,每一次类的属性修改,都应该把版本号升级一下,这样,在读取时,比较存储对象时的版本号与当前类的版本号,如果不一致,则直接报版本号不同的错!

 

9.hashCode方法的作用?说      

    (网友提供的一段,待改进:hashcode这个方法是用来鉴定2个对象是否相等的。

那你会说,不是还有equals这个方法吗?

不错,这2个方法都是用来判断2个对象是否相等的。但是他们是有区别的。

一般来讲,equals这个方法是给用户调用的,如果你想判断2个对象是否相等,你可以重写equals方法,然后在代码中调用,就可以判断他们是否相等了。简单来讲,equals方法主要是用来判断从表面上看或者从内容上看,2个对象是不是相等。举个例子,有个学生类,属性只有姓名和性别,那么我们可以认为只要姓名和性别相等,那么就说这2个对象是相等的。

hashcode方法一般用户不会去调用,比如在hashmap中,由于key是不可以重复的,他在判断key是不是重复的时候就判断了hashcode这个方法,而且也用到了equals方法。这里不可以重复是说equals和hashcode只要有一个不等就可以了!所以简单来讲,hashcode相当于是一个对象的编码,就好像文件中的md5,他和equals不同就在于他返回的是int型的,比较起来不直观。我们一般在覆盖equals的同时也要覆盖hashcode,让他们的逻辑一致。举个例子,还是刚刚的例子,如果姓名和性别相等就算2个对象相等的话,那么hashcode的方法也要返回姓名的hashcode值加上性别的hashcode值,这样从逻辑上,他们就一致了。

要从物理上判断2个对象是否相等,用==就可以了。

分享到:
评论

相关推荐

    最新Java面试题视频网盘,Java面试题84集、java面试专属及面试必问课程

    面试题包含了不同技术层面的面试问题,同时也能对一些没有面试开发经验的小白给予不可估量的包装, 让你的薪水绝对翻倍, 本人亲试有效.Java面试题84集、java面试专属及面试必问课程,所有的面试题有视屏讲解, 解答方案....

    java面试题集锦 java面试题集锦

    以下是对标题和描述中涉及的一些常见Java面试题的详细解释: 1. **JDK 和 JRE 的区别** JDK(Java Development Kit)是用于开发和调试Java程序的完整工具集,包括JRE(Java Runtime Environment)、编译器(javac...

    最新各大公司企业真实面试题-Java面试题

    本压缩包包含了一系列由IT资深专家单兴华整理的最新各大公司企业的真实Java面试题,旨在帮助求职者提升自己的技术水平和面试准备。 首先,我们来看"java练习题2.doc",这可能是针对基础语法和编程技巧的练习,涵盖...

    2017java面试题

    "2017java面试题"这个压缩包文件提供了丰富的资源,帮助Java开发者准备面试,深化对Java开发的理解。 文档"Java面试宝典2017.doc"可能包含了以下核心Java知识点: 1. **基础语法**:这包括变量、数据类型、运算符...

    汇丰软件java面试题

    "汇丰软件Java面试题详解" 汇丰软件Java面试题是许多IT行业新人的梦寐以求的岗位,需要考生具备扎实的Java基础知识和良好的编程能力。以下是对汇丰软件Java面试题的详细解析。 笔试部分 笔试部分主要包含三部分:...

    java面试题,J2EE面试题 笔试题

    最全的j2EE面试题,题量...8、java面试题及答案 9、java面试题编程篇 10、Oracle面试题 11、Oracle企业面试题集锦 12、Spring面试题 13、SSH面试题 14、Strut+Spring+Hibernate面试题 15、张孝祥整理Java就业面试题大全

    java面试题java面试题java面试题

    java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题java面试题...

    2023最新JAVA面试题集

    最新JAVA面试题总结之基础/框架/数据库/JavaWeb/Redis BIO,NIO,AIO,Netty面试题 35道 BTA 常问的 Java基础39道常见面试题及详细答案 Dubbo面试题 47道 ElasticSearch面试题 30道 Git常用命令面试题 60道 Java并发...

    java面试题总结资料

    这份"java面试题总结资料"涵盖了多个Java核心领域的关键知识点,包括但不限于: 1. **基础语法**:理解基本的数据类型(如整型、浮点型、字符型和布尔型),变量的声明与使用,以及运算符的优先级。同时,要熟悉...

    Java面试题和练习题

    本文将基于标题“Java面试题和练习题”以及描述中提到的内容,深入探讨Java相关的面试题和练习题,旨在帮助求职者或希望提升技能的开发者巩固知识,准备面试。 一、Java基础 1. Java的数据类型:了解Java的八种...

    java面试题总结 下载

    Java面试题是每个Java开发者在求职过程中必须面对的挑战,涵盖的范围广泛,涉及语言基础、数据库、并发编程、设计模式等多个领域。这份"java面试题总结资料"应该包含了作者精心整理的各类常见问题和解答,旨在帮助...

    最全java面试题及答案(208道).pdf

    "Java面试题及答案详解" Java是目前最流行的编程语言之一,在软件开发行业中广泛应用。以下是Java面试题及答案的详解: Java基础 1. JDK 和 JRE 的区别是什么? JDK(Java Development Kit)是Java开发工具包,...

    java面试题整理

    java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理java面试题整理

    java面试题集

    java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集java面试题集

    计算机和JAVA 面试题大全

    本资料集涵盖了丰富的Java面试题,旨在帮助求职者准备Java相关的技术面试,以期在竞争激烈的IT市场中脱颖而出。 1. **Java基础** - 讲解Java的特性:自动内存管理(垃圾回收)、多线程支持、异常处理等。 - 面试...

    java面试题18道java面试题18道

    java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java面试题18道java面试题java面试题18道java面试题18道java...

    10万字总结java面试题和答案

    Java 10万字总结java面试题和答案 其包含的内容模块有:基础、JVM、多线程与高并发、Spring、MyBatis、SpringBoot、MYSQL、SpringCloud、Dubbo、Nginx、MQ、数据结构与算法、Linux、Zookeeper、Redis、分布式、网络...

    百度java面试题

    java面试题! java面试题! java面试题! java面试题! java面试题! java面试题!

    Java面试题大全.pdf

    《Java面试题大全.pdf》文件中包含了丰富的面试题目,覆盖了Java的核心知识、开发平台、数据类型、面向对象编程、数据结构等多个方面,对求职者来说是一份非常有价值的复习资料。 首先,面试题中提到了两种常见的...

    Java面试题基础篇

    Java 面试题基础篇 Java 面试题基础篇是面向Java开发人员的一份详细的面试题库,涵盖了 Java 的基础知识点,包括面向对象编程、变量作用域、事件委托机制、垃圾回收机制、序列化、排序算法、继承、多态、内部类、...

Global site tag (gtag.js) - Google Analytics