`

core java interview point (2)

阅读更多

接上篇(1)

 

11. HashMap和ConcurrentHashMap的区别,HashMap的底层源码。

 HashMap是键值对形式的集合map,是由数组和链表数据结构。ConcurrentHashMap是线程安全的HashMap“再包装”,是由一些列的Segment标签标注的HashMap。

 具体的讲解请参照我的博客《HashMap和ConcurrentHashMap的区别,HashMap的底层源码》

 

 

12. TreeMap、HashMap、LindedHashMap的区别。

Map集合是Java集合工具类顶级父类接口,键值对形式存储数据。

HashMap是Map接口最常用的实现类,根据键的hashcode值存储数据,使用get(1)或者get('key')获取值,访问数度快遍历顺序是随机的。HashMap允许一条记录的键为null,值可以为空,HashMap是非线程安全的,可以使用集合工具类Collections.synchronziedMap()线程安全包装,返回一个线程安全的map或者使用ConcurrentHashMap。HashTable与HashMap类似,但是它是Dictionary类的子类,不允许key或者value为bull并且是线程安全的。

TreeMap是SortMap的实现类,能够将其保存的数据根据键排序,默认升序(ASC)也可以重写排序方法,因此使用Iterator遍历时候是有序的。

LinkedHashMap是KashMap的子类,它是有序的保存了插入时候的顺序,

 

 

13. Collection包结构,与Collections的区别。

Collection是集合工具类顶级父类接口,实现类包括List, Set等;Collections集合工具类,提供了集合类的公共处理方法,比如排序sort,synchronziedMap,synchronziedList等方法。

 

14. try catch finally,try里有return,finally还执行么?

try...catch用于捕获异常并处理一样,finally用于该语法最后,用于处理不论是否异常都需要完成的逻辑,而不论是否有return都执行。

 

15. Excption与Error包结构。OOM你遇到过哪些情况,SOF你遇到过哪些情况。

Ecveption和Error都是顶级异常接口Throwable的子接口。Throwable接口包含了一个线程创建时执行线程执行堆栈的快照,提供了printStackTrace()等接口用于获取堆栈跟踪数据等信息。

Exception:运行时异常RuntimeException和非运行时异常

  运行时异常是java编译器不会检查的会在程序运行时出现的异常,如ArithmaticException, NullpointException, OutOfMemoryException, IndexOutOfBoundException等

非运行时异常,一般都是我们提供的代码中需要显示throw的自定义异常类。

 

Error:用于指示合理运行的程序因为系统以外的因素如系统错误等。

 

OOM:OutOfMemoryException内存异溢出,是虚拟机jvm内存运行过程中因为内存不足而导致抛出异常,程序停止运行

 

16. Java面向对象的三个特征与含义。

抽象:是对一个主题中共同部分的拆分和细节的忽略,以便更充分的描述这样一类的公共特征。

继承:继承是一种子类能够通过复用父类的方法属性而提供的明确表述共性的方法。一个新对象可以从现有的对象中派生或者修改部分对象方法,并且新对象仍然可以自由增加新的方法可以使之更适合特殊的需求。

封装:将过程和数据等逻辑重新写在一个新的方法中,对他的访问只能通过这已定义的接口访问。

多态:父类的引用,在同一个行为下却因为不同的子类实现而不同。由此衍生出了:

引用变量类型:编译时类型和运行时类型。编译时类似由声明该变量时使用的类型决定,运行时类型由实际给该变量赋值对象决定。

 

17. Override和Overload的含义去区别。

Override重写是在对象继承机制中,子类对象对父类或者超类中某一个方法的逻辑进行的特殊改变以适应新需

Overload重载,是在同一个类中,具有相同的名称的方法,但是参数的个数,类型或者位置不同。与方法返回数据类型无关。

 

18. Interface与abstract类的区别。

abstract抽象类,我们知道在java中,所有的对象都是通过类来描述,但是不是所有的类都来描述对象,对于一个没有足够信息来描述一个具体的对象,而需要更加具体的类来支撑和补充,那么这样的类我们称之为抽象类。

Interface接口,是定义的某一个领域的一种规则或者协议,所有实现该接口的类都必须遵循这些协议并实现他们。它是一种形式,是抽象类的延伸和抽象化,一个类可以同时实现多个接口使用关键值inplements标识。

两者都是不可以直接实例化,而需其子类或者实现类来完成

 

19. Static class 与non static class的区别。

static class内部静态类,non static class非静态内部类。

内部静态类不需要有指向外部类的引用,不能够访问外部类的非静态成员,

但非静态内部类需要有对外部类的引用,即不能脱离外部类实例被创建,能够访问外部类的静态和非静态成员。

nested class are devided into two categories: static and non-static. Nested classed that are declared static are called static nested classes, non-static nested classed are called inner class.

内部静态类是称为内部嵌套类,非静态内部类称为内部类。

嵌套:自己完全独立,就是借用壳而隐藏自己

内部类:是一部分,了解你并知道全部,没有外部类就不存在内部类。

 

20. java多态的实现原理。

java多态,就是同一个操作作用于不同的对象,却有不同的方法逻辑和执行结果,父类的引用指向子类的对象实例。它允许基类的引用指向派生类的对象,在具体访问时实现方法的动态绑定。

 

21. 实现多线程的两种方法:Thread与Runable。

线程接口是Runable,java也提供了一个实现类Thread,我们初始化一个线程对象,我们既可以继承线程类Thread也可以实现Runable接口实现run方法。

Thread th = new Thread(new Runable(override run()));

th.start();

使用实现方式,能够避免单继承而导致的某些局限性。

 

22. 线程同步的方法:sychronized、lock、reentrantLock等。

何为同步?

我们使用一个变量,这个变量在第一个线程中进行读写操作,第二个线程同时访问该变量,可能会导致第一个线程读取的该变量的值是第二个线程改变的,反之亦然。这样一个变量在并发情况下值不能保证“一致性”的情况,我们称之为非线程安全。

synchronzied关键字,是java提供的最基础的用于线程安全锁。用于修饰类,方法,代码块。在修饰代码块时候,必须绑定一个reference对象作为锁对象,我们可以使用this当前对象。在修饰方法时候默认就是当前对象。修饰类时候默认当前类的class对象作为锁对象。

synchronzied的锁机制是使用monitorenter和monitorexit字节码指令,在每次进入代码块时候执行monitorenter获取对象锁,如果对象没有被锁或者已经是当前对象锁定,那么锁计数器加一,退出同步块monitorexit减1、直到0主动释放该对象的锁。因此synchronzied是可重入得,不会出现自己把自己锁死的。

在Java1.5以后,增加了reentrantLock和Atomic:

ReentrantLock,以对象的方式操作对象锁,相对于synchronzied需要手动finally释放锁,并且多了其他功能:

1.等待可中断:在持有锁的线程长时间无法释放锁时候,等待的线程可以选择主动放弃,tryLock(long timeout, TimeoUnit unit)

2.公平锁:所有的线程是按照申请的顺序来获取锁称之为公平锁。synchronzied是非公平的,线程的优先级越高,获取锁越高。new ReentrantLock(boolean fair)

3.绑定多个condition:通过多次new Condition可以获取多个condition对象,可以简单实现比较复杂的线程同步,通过awati(), signal()

 

相对于ReentrantLock,synchronzied是直接在JVM层面上实现的,不但可以通过监控工具监控synchronzied锁定,而且在程序出现异常JVM会自动释放锁对象,但是Lock不行,它是通过代码实现的,必须保证锁释放,unLock()放到finally{}中。

在资源竞争不激烈的情况下,synchronzied性能优于ReentrantLock,但是竞争激烈时,synchronzied性能会下降,但是ReentrantLock不变化。

 

23. 锁的等级:方法锁、对象锁、类锁。

方法锁和对象锁是一样的。只有方法锁和类锁两种。都是在java中synchronzied关键字时候,涉及到锁的问题。

java内置锁,每个java对象都可以用作一个实现同步的锁,这些所称之为内置锁。线程进入同步代码块或者方法时候会自动获得锁对象,在退出同步代码块时候释放。触发内置锁,就是程序调用了synchronzied修饰的方法或者代码块。该内置锁是一个互斥锁,一个线程获得锁后,其他线程只能在该线程释放锁之前等待或者阻塞,直到释放。

java的对象锁和类锁:对象锁使用与对象的实例方法,或者一个对象实例,类锁则是用于类的静态成员变量或者类的class上。类的实例对象可以有很多歌,但是每个类只有一个class,所以不同对象锁是互不干扰,但是类锁只有一个。类锁是一个概念,并不真实存在,我们在使用类的静态成员变量时候永远获取的只有一个,就是可以理解为该类锁。

 

分享到:
评论

相关推荐

    Core-Java-Interview-Questions.rar_core java interview

    "Core Java Interview Questions"这个资源集锦了面试中可能会遇到的一些关键问题,旨在帮助求职者更好地准备Java核心技术的面试。以下是根据描述和标签提炼出的一些核心Java知识点: 1. **Java基础** - 类与对象:...

    Core Java Interview Question Page 1.doc

    Core Java Interview Question Page 1

    Top 20 Core Java Interview Questions and Answers

    从国外网站上下载的Java面试题。可以看看国外公司的Java面试常用题,以及如何用英文回答。

    Core Java Interview

    这本书名为《Core Java Interview》,其内容是关于Java面试的,英文版本,是一本适合想要面试Java职位的求职者的实用指南。它由Sam Atkinson撰写,并在Leanpub网站上出售,于2016年5月21日发布。Leanpub是一种轻量级...

    CoreJava全套详细笔记资料.pdf

    CoreJava全套详细笔记资料.pdf CoreJava是Java编程语言的核心部分,涵盖了Java语言的基础知识和高级应用。以下是对给定文件的详细解读和知识点总结: 一、原码、反码、补码 * 原码是指一个数的二进制表示形式,...

    core java1&2

    《Core Java 1&2》是Java编程领域中两本非常经典的教材,分别对应于卷1和卷2,英文版提供了全面且深入的Java学习资源。这两本书由Cay S. Horstmann和Gary Cornell撰写,是许多程序员入门和进阶Java技术的重要参考书...

    Core Java

    【Core Java】是Java编程的基础教程,主要涵盖了Java语言的核心概念和使用方法。在学习Core Java时,首先要理解以下几个关键知识点: 1. **类与对象**:类是面向对象编程的基础,是描述某一类事物共性的抽象,而...

    Java.Interview.Guide.How.to.Build.Confidence.With.pdf

    Java.Interview.Guide.How.to.Build.Confidence.With.a.Solid.Understanding.of.Core.Java.Principles.B015HF9SJQ.pdf Java.Interview.Guide.How.to.Build.Confidence.With.a.Solid.Understanding.of.Core.Java....

    Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】

    Java 核心技术 第八版-第1和2卷+源代码【Core Java 8th Edition】内附资源: Core Java. Volume I. Fundamentals, 8th Edition.pdf ; Core Java. Volume II. Advanced Features, 8th Edition.chm ; Core Java 8th ...

    java\CoreJava笔记\CoreJAVA_day01

    2. **Java特性**: - 夸平台性:通过Java虚拟机(JVM),Java程序可以在不同的操作系统上运行,实现"Write Once, Run Anywhere"。 - 内存管理:Java自动进行内存管理,包括垃圾回收机制(GC),程序员无需手动释放...

    达内Java培训-CoreJava全程笔记(WORD唐亮版)

    CoreJava DAY01 Java概述 1 CoreJava DAY02 数据类型和控制结构 6 CoreJava DAY03 数组 11 CoreJava DAY04 15 CoreJava DAY05 面向对象 17 CoreJava DAY06 类的加载过程、实例化、继承、多态 20 CoreJava DAY07修饰...

    corejava,java核心编程

    【标题】:“Core Java,Java核心编程” 【描述】:“Java语法基础,Java面向对象编程,图形用户界面(GUI)编程,Java网络编程:Socket编程” 【标签】:“corejava” 在计算机编程领域,Core Java是指Java的...

    Interview Questions in Core Java

    Interview Questions in Core Java 1.what is a transient variable? A transient variable is a variable that may not be serialized.

    core java 2 volume i

    《Core Java 2 Volume I》是一本专注于Java编程语言核心概念和技术的经典教程,适用于初学者和有经验的开发者。这本书全面地介绍了Java编程的基础和高级特性,为读者提供了深入理解Java平台的核心知识。 首先,书中...

    Core Java for the Impatient azw3

    Core Java for the Impatient 英文azw3 本资源转载自网络,如有侵权,请联系上传者或csdn删除 本资源转载自网络,如有侵权,请联系上传者或csdn删除

    Core Java.JAVA核心技术(中文版)

    《Core Java.JAVA核心技术(中文版)》是学习Java编程的重要参考资料,主要涵盖了Java语言的基础以及进阶知识。这本书深入浅出地讲解了Java的核心概念和技术,为读者提供了全面而细致的学习路径。以下是对该书内容的...

    corejava核心技术分卷压缩2

    corejava核心技术分卷压缩2corejava核心技术分卷压缩2

    Core Java 学习必备PPT(CoreJava教案)

    Core Java 学习必备PPT(CoreJava教案)

Global site tag (gtag.js) - Google Analytics