java面试题复习(六)

Posted on 2018-02-10 11:08  菜不是假的菜  阅读(94)  评论(0编辑  收藏  举报

51、实现多线程的方法

一种是继承Thread类;另一种是实现Runnable接口。两种方式都要通过重写run()方法来定义线程的行为,推荐使用后者,因为Java中的继承是单继承,一个类有一个父类,如果继承了Thread类就无法再继承其他类了,显然使用Runnable接口更为灵活。5以后还有Callable接口,该接口的call方法在线程结束时产生一个返回值。

52、举例说明同步和异步
答:如果系统中存在临界资源(资源数量少于竞争资源的线程数量的资源),例如正在写的数据以后可能被另一个线程读到,或者正在读的数据可能已经被另一个线程写过了,那么这些数据就必须进行同步存取(数据库操作中的排他锁就是最好的例子)。当应用程序在对象上调用了一个需要花费很长时间来执行的方法,并且不希望让程序等待方法的返回时,就应该使用异步编程,在很多情况下采用异步途径往往更有效率。事实上,所谓的同步就是指阻塞式操作,而异步就是非阻塞式操作。

53、启动一个线程是调用run()还是start()方法

启动一个线程是调用start()方法,使线程所代表的虚拟处理机处于可运行状态,这意味着它可以由JVM 调度并执行,这并不意味着线程就会立即运行。run()方法是线程启动后要进行回调的方法。

54、线程池和其他池的作用

在面向对象编程中,创建和销毁对象是很费时间的,因为创建一个对象要获取内存资源或者其它更多资源。在Java中更是如此,虚拟机将试图跟踪每一个对象,以便能够在对象销毁后进行垃圾回收。所以提高服务程序效率的一个手段就是尽可能减少创建和销毁对象的次数,特别是一些很耗资源的对象创建和销毁,这就是”池化资源”技术产生的原因。线程池顾名思义就是事先创建若干个可执行的线程放入一个池(容器)中,需要的时候从池中获取线程不用自行创建,使用完毕不需要销毁线程而是放回池中,从而减少创建和销毁线程对象的开销。

55、线程的运行状态及他们的关系

56、简述synchronized 和lock()的异同

lock具有synchronzed的全部功能,但lock比synchronized有更好的线程安全和语义synchronized会自动释放锁,而lock必须手动释放锁,而且必须在finally内释放。snchronized是jvm级别的,而lock是类级别的。在synchronized如果A线程获得锁,b线程会一直等待,在lock情况下,b可以尝试获得锁。snchronized无法判断锁状态,lock可以判断。lock用于大量同步,二synchronized用于少量同步。

57、Java中如何实现序列化,有什么意义
序列化就是一种用来处理对象流的机制,所谓对象流也就是将对象的内容进行流化。可以对流化后的对象进行读写操作,也可将流化后的对象传输于网络之间。序列化是为了解决对象流读写操作时可能引发的问题(如果不进行序列化可能会存在数据乱序的问题)。
要实现序列化,需要让一个类实现Serializable接口,该接口是一个标识性接口,标注该类对象是可被序列化的,然后使用一个输出流来构造一个对象输出流并通过writeObject(Object)方法就可以将实现对象写出(即保存其状态);如果需要反序列化则可以用一个输入流建立对象输入流,然后通过readObject方法从流中读取对象。序列化除了能够实现对象的持久化之外,还能够用于对象的深度克隆

58、Java中有几种类型的流
字节流和字符流。字节流继承于InputStream、OutputStream,字符流继承于Reader、Writer。输出流输入流

59、 XML文档定义有几种形式,它们之间有何本质区别,解析XML文档有哪几种方式
XML文档定义分为DTD和Schema两种形式,二者都是对XML语法的约束,其本质区别在于Schema本身也是一个XML文件,可以被XML解析器解析,而且可以为XML承载的数据定义类型,约束能力较之DTD更强大。对XML的解析主要有DOM、SAX和StAX

60、你在项目中哪些地方用到了XML

XML的主要作用有两个方面:数据交换和信息配置。在做数据交换时,XML将数据用标签组装成起来,然后压缩打包加密后通过网络传送给接收者,接收解密与解压缩后再从XML文件中还原相关信息进行处理;配置web.xml信息和java框架的配置信息

 

 

Copyright © 2024 菜不是假的菜
Powered by .NET 9.0 on Kubernetes