`

<Java.JavaEE面试整理>(10) --"标签"接口,重载vs覆盖........

阅读更多
Q 13: Java中为什么有些接口里并没有定义任何方法? LF FAQ
A 13:Java中的那些没定义任何方法的接口当做Marker来用的,利用它可以告诉编译器对这类接口的实现类另行对待.
Java中像java.io.Serializable,java.lang.Cloneable,java.util.EventListener等这些接口也称为"tag"接口,因为用它们可以将其实现类基于某种特性再分类.

Q 14: 谈谈你对Java里覆盖与重载的理解?它们有什么不同?
Q 14:
    Method Overloading:
        方法重载说的是,在同一类中可以有同名但不同方法签名的方法,利用方法重载,我们可以针对不同的数据以不同的实现方法来定义the same operation.
        如下类所示:
        class MyClass {
            public void getInvestAmount(int rate) {...}
            public void getInvestAmount(int rate,long principal) {...}
        }
        在上例中,两个方法的名字相同,不过它们的method signatures,这就是我们所说的方法重载.
        
    Method Overriding:
        方法覆盖是指,在有父子关系的两个类中方法可以有同样的名字和签名,利用方法覆盖,我们可以针对不同类型的对象以不同的方式定义the same operation.
        如下类所示:
        class BaseClass {
            public void getInstanceAmount (int rate) {...}
        }
        
        class MyClass extends BaseClass {
            public void getInvestAmount(int rate) {...}
        }
        
        上例中,两个类中的方法具有相同的名字和签名,不过子类中的方法覆盖了父类中的相应方法.
        
Q 15: Java中的ArrayList和Vector有什么区别?HashMap与Hashtable呢?stack与queue又有什么不同呢?
What is the main difference between an ArrayList and a Vector? What is the main difference between HashMap
and Hashtable? What is the difference between a stack and a queue?   LF DC PI CI FAQ
A 15:
    Vector/Hashtable:
        这两个类是在没有引入Collections API前已有的,Vector和Hashtable这两个类都是sychronized,Any method that touches their contents is thread-safe.
    ArrayList/HashMap:
        不过若我们并不想用线程安全这个特性时(毕竟这个线程安全是很影响性能的),就可以选ArrayList或HashMap.
    
Q. 哪一个更好呢? 通常来说,ArrayList/HashMap优于Vector/Hashtable.若项目是基于多线程并且其中至少有一个线程要么add要么delete collection中的entry的话,我们选现在Java中新collection API里的external synchronization功能,下面例子中我们就可以根据需要临时地获得一个synchronized的collection:
    Map myMap = Collections.synchronizedMap(myMap);
    List myList = Collections.synchronizedList(myList);
    
    Note:
        1,若使用J2SE5的话,为了提高性能,我们可以用那个新的"java.util.concurrent"包中的API,这样...because the concurrent package collections are not governed by a single synchronized lock as shown above. The “java.util.concurrent” package collections like ConcurrentHashMap is threadsafe and at the same time safely permits any number of concurrent reads as well as tunable number of concurrent writes. The “java.util.concurrent” package also provides an efficient scalable thread-safe non-blocking FIFO queue like ConcurrentLinkedQueue.
        
        2,The “java.util.concurrent” package also has classes like  CopyOnWriteArrayList,  CopyOnWriteArraySet, which gives you thread safety with the added benefit of immutability to deal with data that changes infrequently. The  CopyOnWriteArrayList  behaves much like the ArrayList class, except that when the list is modified, instead of modifying the underlying array, a new array is created and the old array is discarded. This means that when a caller gets an iterator (i.e.  copyOnWriteArrayListRef.iterator() ), which internally holds a reference to the underlying CopyOnWriteArrayList object’s array, which is immutable and therefore can be used for traversal without requiring either synchronization on the list  copyOnWriteArrayListRef or need to clone() the copyOnWriteArrayListRef list before traversal (i.e. there is no risk of concurrent modification) and also offers better performance.   
    
    Array:
        1,Java中的arrays要比ArrayList/Vector快的多,因此若我们提前已知道了array的长度的话就尽多地使用arrays.
        2,array里的任何item都可以直接地访问到.
    List/Stack等:
        1,ArrayList/Vector are specialized data structures,其底层是应用了array不过是另外又加了许多方便实用的方法,如add(...),remove(...)等,这样其底层array的大小就会"自动"地伸缩.ArrayList另外也支持基于index的search,如indexOf(Object obj)和lastIndexOf(Object obj).
        2,这些类(接口)与其底层的array相比是更为abstact,对其元素的访问也更为restricted.如对stack添加元素时只能从最后一个元素的位置进行.(These are more abstract than arrays and access is restricted.  For example, a stack allows access to only last item inserted. )
    
    
    Queue<E>(J2SE5.0中引入):
        1,先进先出.
        2,This mechanism is called First In First Out(FIFO);
        3,Placing an item in the queue is called “enqueue or insertion” and removing an item from a queue is called “dequeue or deletion”. Pre J2SE 5.0, you should write your own Queue class with enqueue() and dequeue() methods using an ArrayList or a LinkedList class.  
 
        J2SE 5.0 has a java.util.Queue<E> interface.  
    
    Stack:
        1,元素只能在最后一个元素处添加.
        2,LIFO
        3,If you want to reverse "XYZ" -->"ZYX",then you can use a java.util.Stack.
 
    
   
2
0
分享到:
评论

相关推荐

    JavaEE面试题加答案

    根据给定文件的部分内容,我们可以总结出一系列与Java EE相关的面试知识点,这些知识点涵盖了核心Java、异常处理、数据库连接、Web开发、企业级组件等多个方面。以下是对这些知识点的详细解释: ### 1. Java核心...

    JAVAEE精选面试题.docx

    以上知识点涵盖了Java基础以及JavaEE面试中常见的问题,包括数据类型的比较、类与接口的设计、异常处理机制以及内存管理的细节,这些都是Java程序员应掌握的基本概念和技能。在面试中理解和熟练运用这些知识,能够...

    1000道互联网Java工程师面试题.pdf

    MyBatis动态sql可以根据不同的条件生成不同的sql语句,例如使用&lt;if&gt;标签或&lt;choose&gt;标签。 16. Xml映射文件中,除了常见的select|insert|updae|delete标签之外,还有哪些标签?例如&lt;resultMap&gt;、&lt;parameterMap&gt;、&lt;sql...

    javaEE面试题

    JavaEE面试题是Java开发人员在求职过程中常常会遇到的一类问题,涵盖了广泛的Java和Java Web技术领域。这里,我们将深入探讨这些领域的关键知识点,帮助你更好地准备面试。 1. **Java基础知识** - **数据类型与...

    JAVAEE常见面试汇总.docx

    ### JAVAEE常见面试知识点汇总 #### 一、JavaSE基础 ...通过以上总结,我们不仅了解了JavaSE的基础知识点,还深入探讨了一些重要的概念和技术细节,这对于准备JavaEE面试的人来说是非常宝贵的参考资料。

    JavaEE基础面试题.docx

    JavaEE基础面试题通常会涵盖Java的核心概念,包括面向对象的特性、数据类型、操作符、内存管理等。以下是对这些知识点的详细说明: 1. **面向对象的特征**: - **抽象**:抽象是将复杂的问题简化,只关注核心特征...

    javaEE经典面试题及答案.doc

    10. **goto在Java中的地位**: - Java中保留了`goto`关键字,但并未使用,因此无法在Java代码中使用。 11. **length方法与length属性**: - 数组没有`length()`方法,但有`length`属性来获取长度。 - String类有...

    【电子版】校招面试题库(附答案与解析)java篇-破解密码.pdf

    - 面向对象:Java是一种面向对象的语言,对象的概念、类的定义、构造函数、方法重载和覆盖、接口等是面试中的常见问题。 - 集合部分:Java集合框架包括List、Set、Queue和Map等,面试中常会考察ArrayList与...

    java面试题库大全

    Java面试题库大全涵盖了广泛的Java技术领域,是准备Java面试的宝贵资源。下面将详细解析其中可能涉及的重要知识点,帮助你全面了解Java的基础知识、进阶技能以及面试中常见的问题。 1. **J2SE基础知识**: - **...

    javaee 面试题

    JavaEE面试题涵盖了许多核心的Java编程概念,这里我们将深入探讨其中几个关键知识点。 1. **final, finally, finalize的区别**: - `final`:这个关键字用于声明不可改变的变量、类或方法。对于变量,一旦赋值后就...

    自整理Java关于基础和框架的面试题

    ### 自整理Java关于基础和框架的面试题 #### 基础知识点 ##### JDK常用的包 - **java.lang**: 包含所有基本类,如`String`、`Math`等。 - **java.util**: 提供集合框架、日期/时间设施、事件模型、杂项实用程序类...

    java初级面试题

    ### Java初级面试题知识点解析 #### 一、Java三大开发平台 Java的三大开发平台分别是: 1. **JavaSE (Standard Edition...以上知识点覆盖了Java初级面试中常见的概念和技术要点,对于初学者来说是非常重要的基础知识。

    java资料面试题

    #### 1.5 JavaSE.JavaEE和JavaME有什么区别? - **Java SE (Standard Edition)**:标准版,提供核心 Java 技术,包括基本的类库和开发工具,适用于桌面应用程序开发。 - **Java EE (Enterprise Edition)**:企业版...

    阿里巴巴 面经

    - 新建状态 -&gt; 就绪状态 -&gt; 运行状态 -&gt; 阻塞状态 -&gt; 死亡状态 **26. 如何停止一个线程** - 使用`interrupt()`方法中断线程。 - 使用`stop()`方法强行终止线程(不推荐)。 **27. 线程安全概念** - 指多个线程...

    最新java综合面试题(全)

    在Java面试中,通常会考察开发者对Java基础知识的掌握,包括Javase和Javaee两个部分。以下是对一些常见面试题的详细解释: 1. `super()`与`this()`的区别: `super`关键字用于访问父类的成员,而`this`关键字则指...

    常见面试题200道题目

    本资料“常见面试题200道题目”包含了JavaSE(Java标准版)和JavaEE(Java企业版)的相关问题,旨在帮助应聘者全面准备面试。 1. **Java基础知识**: - 讲解Java的内存管理,包括堆内存、栈内存、方法区和本地方法...

    java基础面试文档

    它的这三个主要体系结构——JavaSE、JavaEE和JavaME,分别对应标准版、企业版和微型版,覆盖了从桌面应用到大型企业级系统再到嵌入式设备的广泛应用场景。 Java的封装性是面向对象编程的核心特征之一。它通过访问...

    Java面试宝典(基础篇).docx

    Java编程语言中,方法覆盖(Overriding)和方法重载(Overloading)是两种重要的多态性体现,它们是理解面向对象编程的关键概念。 方法重载(Overloading)指的是在一个类内部,允许存在多个同名方法,但这些方法的...

Global site tag (gtag.js) - Google Analytics