JAVA总结知识点(一)

来源:互联网 发布:英语四级词汇软件 编辑:程序博客网 时间:2024/05/16 05:31

01. 什么是迭代器(Iterator)

 Iterator接口提供了很多对集合元素进行迭代的方法。每一个集合类都包含了可以返回迭代器实例的迭代方法iterator()。但是要注意的一点是,在迭代元素的时候不能通过集合的方法删除元素。但可以用Iterator接口的remove()方法删除。

 

 

02. 为什么集合类没有实现CloneableSerializable接口?

克隆(cloning)或者是序列化(serialization)的语义和含义是跟具体的实现相关的。因此,应该由集合类的具体实现来决定如何被克隆或者是序列化。

实现Serializable序列化的作用

1.    将对象的状态保存在存储媒体中以便可以在以后重写创建出完全相同的副本;

2.    按值将对象从一个从一个应用程序域发向另一个应用程序域。

实现 Serializable接口的作用就是可以把对象存到字节流,然后可以恢复。所以你想如果你的对象没有序列化,怎么才能进行网络传输呢?要网络传输就得转为字节流,所以在分布式应用中,你就得实现序列化。如果你不需要分布式应用,那就没必要实现实现序列化。

 

03. Java集合类框架的基本接口有哪些?

集合类接口指定了一组叫做元素的对象。集合类接口的每一种具体的事项类都可以选择以它自己的方式对元素进行保存和排序。有的集合类允许重复的键,有些不允许。

Java集合类提供了一套设计良好的支持对一组对象进行操作的接口和类。Java集合类中最基本的接口有:Colleciton:代表一组对象,每一个对象都是它的子元素。

Set:不包含重复元素的Collection.

List:有顺序的Collection,并且可以包含重复元素。

Map:可以把键(key)映射到值(value)的对象,键不能重复。

 

04. 如何确保N个线程可以访问N个资源同时又不导致死锁?

多线程产生死锁的四个必要条件:

1.    互斥条件:一个资源每次只能被一个进程使用。

2.    保持和请求条件:一个进程因请求资源而阻塞时,对已获得资源保持不放。

3.    不可剥夺调教:进程已获得资源,在未使用完成前,不能被剥夺。

4.    循环等待条件:若干进程之间形成一种头尾相接的循环等待资源关系。

只要破坏其中任意一个条件,就可以避免死锁,其中最简单的就是破环循环等待条件。按同一顺序访问对象,加载锁,释放锁。

 

05. 什么是死锁(deadlock)

两个或两个以上的进程,由于竞争资源或彼此通信而造成的一种相互阻塞的现象。

若无外力作用,它们将无法推进下去。

 

 

06. 在监视器(Monitor)内部,是如何做线程同步的?程序应该做哪种级别的同步?

java虚拟机jvm中,每个对象通过某中逻辑关联监视器,每个监视器都和一个对象引用相关联。

方法一旦被synchronized修饰,那么久放入监视器的监视区域,确保一次只有一个线程执行同步代码块。

 

 

07. 同步方法和同步代码块的区别是什么?

为何使用同步? 

java允许多线程并发控制,当多个线程同时操作一个可共享的资源变量时(增删改查),将会导致数据的不准确,相互之间产生冲突。类似于在atm取钱,银行数据确没有变,这是不行的,要存在于一个事务中。因此加入了同步锁,以避免在该线程没有结束前,调用其他线程。从而保证了变量的唯一性,准确性。

1.同步方法:

即有synchronized    (同步,美 ['sɪŋkrənaɪzd] )修饰符修饰的方法。

由于java的每个对象都有一个内置锁,当用此关键字修饰方法时,内置锁会保护整个方法。在调用给方法前,要获取内置锁,否则处于阻塞状态。

例:public synchronized getMoney(){}

注:synchronized修饰静态方法,如果调用该静态方法,将锁住整个类。

 

2.同步代码块

即有synchronized修饰符修饰的语句块,被该关键词修饰的语句块,将加上内置锁。实现同步。

例:synchronized(Object o ){}

 

同步是高开销的操作,因此尽量减少同步的内容。通常没有必要同步整个方法,同步部分代码块即可。

同步方法默认用this或者当前类class对象作为锁。

同步代码块可以选择以什么来加锁,比同步方法要更颗粒化,我们可以选择只同步会发生问题的部分代码而不是整个方法。

 

08. 概括的解释下线程的几种可用状态。

1. 新建( new ):新创建了一个线程对象。

2. 可运行( runnable ):线程对象创建后,其他线程(比如 main 线程)调用了该对象 start ()方法。该状态的线程位于可运行线程池中,等待被线程调度选中,获 cpu  的使用权 

3. 运行( running ):可运行状态( runnable )的线程获得了 cpu  时间片( timeslice   ,执行程序代码。

4. 阻塞( block ):阻塞状态是指线程因为某种原因放弃了 cpu  使用权,也即让出了  cpu timeslice ,暂时停止运行。直到线程进入可运行( runnable )状态,才有机会再次获得 cputimeslice  转到运行( running )状态。阻塞的情况分三种:

(). 等待阻塞:运行( running )的线程执行 o . wait ()方法, JVM 会把该线程放入等待队列( waitting queue )中。

(). 同步阻塞:运行( running )的线程在获取对象的同步锁时,若该同步锁被别的线程占用,则 JVM 会把该线程放入锁池( lock pool )中。

(). 其他阻塞:运行( running )的线程执行 Thread . sleep ( long ms ) t . join  ()方法,或者发出了 I / O 请求时, JVM 会把该线程置为阻塞状态。             sleep ()状态超时、 join ()等待线程终止或者超时、或者 I / O 处理完毕时,线程重新转入可运行( runnable )状态。

5. 死亡( dead ):线程 run () main () 方法执行结束,或者因异常退出了 run ()方法,则该线程结束生命周期。死亡的线程不可再次复生。

 

可以用早起坐地铁来比喻这个过程:

还没起床:sleeping

起床收拾好了,随时可以坐地铁出发:Runnable

等地铁来:Waiting

地铁来了,但要排队上地铁:I/O阻塞

上了地铁,发现暂时没座位:synchronized阻塞

地铁上找到座位:Running

到达目的地:Dead

 

 

09. 创建线程有几种不同的方式?你喜欢哪一种?为什么?

三种创建线程的方式:

1.    继承thread

2.    实现runnable接口

3.    应用程序可以使用Executor框架来创建线程池

实现runnable接口这种方式更受到欢迎,因为这不需要基础thread类。在应用设计中已经继承了别的对象的情况下,这需要多继承(java不支持多继承),只能实现接口。线程池也是非常高效的,很容易实现和使用。

 

10. 进程和线程的区别是什么?

进程时执行着的应用程序,而线程时进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。

 

11. 什么是值传递和引用传递?

java中对象作为参数传递给一个方法,到底是值传递,还是引用传递?

   值传递!Java中只有按值传递,没有按引用传递!

   这个解释不是一两句话能够清晰解释的。

 

12. 接口和抽象类的区别是什么?

1.    接口中所有方法隐含的都是抽象的。而抽象类则可有抽象和非抽象的方法。

2.    接口中声明的变量默认都是final的。抽象类可以包含非final的变量。

3.    类可以实现很多接口。但只能继承一个抽象类。

4.    实现接口,必须实现接口的所有方法。继承抽象类可仅实现部分抽象方法。

 

13. Java支持多继承么?

Java中类不支持多继承,之支持单继承,即一个类只有一个父类。

但是接口支持多继承,即一个子接口可有多个父接口。

接口的作用是用来扩展对象功能的,一个子接口,继承多个父接口,说明子接口扩展了多个功能,当类实现接口时,类酒实现了对应的功能。

 

14. Java中,什么是构造函数?什么是构造函数重载?什么是复制构造函数?

在你没有给类提供构造函数的情况下,java编译器会为这个累创建一个默认的无参构造函数。

当新对象被创建的时候,这个无参构造函数久会被调用。 User user = new User();

构造函数的重载和方法的重载基本一样。

你可以为一个为创建多个构造函数,但是每一个构造函数必须有他自己唯一的参数列表。即参数不能相同。

 

15. Java中的方法覆盖(Overriding)和方法重载(Overloading)是什么意思?

方法重载发生在同一个类里面两个或者是多个方法的方法名相同但是参数不同的情况。

方法覆盖是说子类 重新定义 了父类的方法。 方法覆盖必须有相同的方法名,参数列表和返回类型。覆盖者可能不会限制它所覆盖的方法的访问。

解答已经很精辟了重载overload  方法名相同,参数不同。重写override方法名,参数,返回类型都相同。

要注意重载的返回类型也可以不同。

 

16. Java支持的数据类型有哪些?什么是自动拆装箱?

java支持的8中数据类型 int, char ,byte, boolean, double, float,long, short

 自动装箱是java编译器在基本数据类型和对应的对席那个包装类型之间做的一个转化。比如:把int转化成Integer,double转化成double。等等。反之就是自动拆箱。

 

17. ”static”关键字是什么意思?Java中是否可以覆盖(override)一个private或者是static的方法?

 

static修饰符修饰的变量,和方法,使得该变量和方法可以在类没有实例化的情况下调用。方法不能被重载,static修饰的方法是编译时静态绑定的,尽量少用,会增加内存负担。小程序中可以使用,对于高并发的程序,少量使用

 

18. JDKJRE的区别是什么?

java运行时环境jre包括java运行所需要的类库和jvmjdkjava的开发和运行环境。

jdk包含了jre,包括java的开发工具和jre

 

19. 什么是Java虚拟机?为什么Java被称作是平台无关的编程语言

java虚拟机事可以执行java字节码的虚拟机进程,java源文件被编译成可以背java虚拟机执行的字节码文件,java语言跨平台,不需要程序员为么一个平台重写货重新编译,java虚拟机让这个得以实现。java可以在任意平台运行,因为java虚拟机将java编译成01机器码执行,机器码在任意平台都可运行。

0 0
原创粉丝点击