java面试题1:总结
面试1:总结
1.在开发过程中,一个深刻的问题,该问题如何出现的现象,找问题的思路以及对应的解决办法?
2.java如何实现跨平台的机制?
java的跨平台是通过java虚拟机JVM来实现。java的代码不是直接运行在CPU上,而是运行在java虚拟机上的。
java的源代码编译成.class字节码文件,然后字节吗文件在java虚拟机上的运行,因此windows、Linux上只要安装了JVM,就可以实现java的跨平台机制。
3.String、StringBuilder和StringBuffer的区别:
String:字符串常量被存储在字符串常量池中,长度不可变,不适合频繁的进行字符串拼接;StringBuilder和StringBuffer是长度可变的。
StringBuilder是非线程安全的,StringBuffer是线程安全的。
当我们在字符串缓冲去被多个线程使用是,JVM不能保证StringBuilder的操作是安全的,虽然他的速度最快,但是可以保证StringBuffer是可以正确操作的。当然大多数情况下就是我们是在单线程下进行的操作,所以大多数情况下是建议用StringBuilder而不用StringBuffer的,就是速度的原因。
对于三者使用的总结:
(1)如果要操作少量的数据用 = String
(2)单线程操作字符串缓冲区 下操作大量数据 = StringBuilder
(3)多线程操作字符串缓冲区 下操作大量数据 = StringBuffer
4.包装类与基本数据的对比:
5.int和Integer的区别:
(1)Integer是int的包装类,int是基本类型;
(2)Integer必须实例化之后,才可以使用;int不需要进行实例化;、
(3)Integer是对象的引用,int是直接可以存储数据;
(4)Integer的默认值是null,int的默认值为0
6.什么时候用Integer?
如果该属性所对应的数据库的字段是主键/外键时,用Integer(因为Integer的默认值为null,数据库的主键/外键不能为空,但是可以为null)。
7.多线程的实现方式:
(1)继承Thread类,重写run()方法;
(2)实现Runable接口,实现run()方法;
(3)实现Callable接口,重写call方法,可提供返回值
8.线程的start()和run()方法的区别:
start()方法表示启动一个新的线程,在JVM内存中会开启一个新的栈空间;
run()方法是普通方法引用,不会启动新的线程。
9.wait和sleep区别:
sleep是线程类Thread的方法,导致本线程暂停执行指定的时间,执行机会给其他线程,但是依然保持监控的状态,到时会自动恢复,调用sleep方法并不会释放对象锁;
wait方法是Object类的方法,调用wait方法导致本线程放弃对象锁,进入到等待对象的等待锁定池,只有针对此对象发出notify或notifyAll后,本线程才进入到对象的锁定池,准备获得对象锁进入运行状态。
10.聊一下IO流:
按照方向来划分:输入流和输出流
按照读取数据来划分:字节流和字符流
字节流:按照字节的方式读取数据,适合读取普通的文本或者二进制数据,比如:word文件的读取
字符流:一次读取一个字符,汉字的话一次读取一个汉子,比如:txt文件使用字符流读取