Java面试题之七

1、编写多线程程序的几种实现方式?
Java5以前,继承Thread类和实现Runnable接口,两种方式都要通过重写run()方法定义线程的行为。推荐后者,因为Java的继承是单继承,使用Runnable接口更为灵活。
Java5以后还有第三种方式,实现Callable接口。
2、synchronized关键字的用法?
将对象或方法标记为同步,实现对对象和方法的互斥访问。
3、同步和异步?
系统中存在临界资源时,例如正在写的数据以后可能被另一个线程读到,这些数据必须进行同步存取,例如数据库中的排它锁;
异步就是非阻塞式操作,同步就是阻塞式操作;
4、启动线程是run()方法还是start()方法?
调用start()方法,线程处于可运行状态,并不意味着会立即执行;run()方法是启动后进行回调的方法。
5、什么是线程池(thread pool)?
面向对象编程中,创建和销毁对象是很费时间的,每个对象都要获取内存资源或其他更多资源,所以为了提高程序效率就是尽可能减少创建和销毁对象的次数,就产生了线程池的概念。事先创建好了若干可执行的线程在一个池(容器)中,需要的时候从池中获取,使用完毕放回池中即可,减小频繁创建和销毁的开销。
6、线程的基本状态和状态之间的关系?

Running表示运行状态,Runnable表示就绪状态(万事俱备,只欠CPU),Blocked表示阻塞状态;
7、synchronized和java.util.concurrent.locks.Lock的异同?
Lock能够完成synchronized所实现的所有功能,而且比synchronized具有更精确的线程语义和更好的性能,而且不强制要求一定要获得锁。synchronized会自动释放锁,Lock一定要求程序员手工释放,最好是在finally快中释放。
8、Java中如何实现序列化,有什么意义?
序列化是处理对象流的机制,所谓的对象流将对象的内容进行流化。序列化是为了解决对象流读写操作时可能引发的问题,不进行序列化可能存在数据乱序的问题。序列化需要让一个类实现Serializable接口,可以实现对象的持久化,还可以用于对象的深度克隆。
9、Java中有几种类型的流?
字节流:继承于InputStream、OutputStream;
字符流:继承于Reader、Writer;
Java中的IO需要注意两点:输入输出对称性、字节和字符的对称性;适配器模式和装潢模式;
10、写一个方法,输入一个文件名和一个字符串,统计这个字符串在文件中出现的次数?
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值