面试Java怎么答?方能一击即中面试官芳心(附带答案)

转眼,求职大军冲向人才市场的毕业季也轰轰烈烈的来到。学好技术实现高薪就业,是我们每个程序员都希望的。更是每个应届生最期望的!

但是,说到实现高薪就业,有了过硬技术战江湖之后,首先要过的是求职面试这一关。怎么把所掌握到的Java技术运用到面试中,去更好的征服面试官呢?

首先,当然是做好充分的准备,从仪表到内在。同时不忘准备好一份全面细致的面试题,提高面试成功几率。

毕业季即将到来,小编特地准备了一份Java面试宝典奉上!助即将面试或者想要换工作的小伙伴们一臂之力!

1.多态的好处

允许不同类对象对同一消息做出响应,即同一消息可以根据发送对象的不同而采用多种不同的行为方式(发送消息就是函数调用)。主要有以下优点:

可替换性:多态对已存在代码具有可替换性
可扩充性:增加新的子类不影响已经存在的类结构
接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。
灵活性
简化性
2.代码中如何实现多态

实现多态主要有以下三种方式:1. 接口实现 2. 继承父类重写方法 3. 同一类中进行方法重载

3.虚拟机是如何实现多态的

动态绑定技术(dynamic binding),执行期间判断所引用对象的实际类型,根据实际类型调用对应的方法。

4.接口的意义

接口的意义用三个词就可以概括:规范,扩展,回调。

5.抽象类的意义

抽象类的意义可以用三句话来概括:

为其他子类提供一个公共的类型
封装子类中重复定义的内容
定义抽象方法,子类虽然有不同的实现,但是定义时一致的
面试Java怎么答?方能一击即中面试官芳心(附带答案)
6.什么是不可变对象

不可变对象指对象一旦被创建,状态就不能再改变。任何修改都会创建一个新的对象,如 String、Integer及其它包装类。

7.静态变量和实例变量的区别

静态变量存储在方法区,属于类所有。实例变量存储在堆当中,其引用存在当前线程栈。

8.能否创建一个包含可变对象的不可变对象

当然可以创建一个包含可变对象的不可变对象的,你只需要谨慎一点,不要共享可变对象的引用就可以了,如果需要变化时,就返回原对象的一个拷贝。最常见的例子就是对象中包含一个日期对象的引用。

9.Java 创建对象的几种方式

采用new
通过反射
采用clone
通过序列化机制
前2者都需要显式地调用构造方法。造成耦合性最高的恰好是第一种,因此你发现无论什么框架,只要涉及到解耦必先减少new的使用。

10.switch中能否使用string做参数

在idk 1.7之前,switch只能支持byte, short, char, int或者其对应的封装类以及Enum类型。从idk 1.7之后switch开始支持String。

11.String s1=”ab”, String s2=”a”+”b”, String s3=”a”, String s4=”b”, s5=s3+s4请问s5==s2返回什么?

返回false。在编译过程中,编译器会将s2直接优化为”ab”,会将其放置在常量池当中,s5则是被创建在堆区,相当于s5=new String(“ab”);

12.你对String对象的intern()熟悉么

intern()方法会首先从常量池中查找是否存在该常量值,如果常量池中不存在则现在常量池中创建,如果已经存在则直接返回。

比如 String s1=”aa”; String s2=s1.intern(); System.out.print(s1==s2);//返回true

13.Object中有哪些公共方法

equals()
clone()
getClass()
notify(),notifyAll(),wait()
toString
14.Java当中的四种引用

强引用,软引用,弱引用,虚引用。

不同的引用类型主要体现在GC上:

强引用:如果一个对象具有强引用,它就不会被垃圾回收器回收。即使当前内存空间不足,JVM也不会回收它,而是抛出 OutOfMemoryError 错误,使程序异常终止。如果想中断强引用和某个对象之间的关联,可以显式地将引用赋值为null,这样一来的话,JVM在合适的时间就会回收该对象。

软引用:在使用软引用时,如果内存的空间足够,软引用就能继续被使用,而不会被垃圾回收器回收,只有在内存不足时,软引用才会被垃圾回收器回收。

弱引用:具有弱引用的对象拥有的生命周期更短暂。因为当 JVM 进行垃圾回收,一旦发现弱引用对象,无论当前内存空间是否充足,都会将弱引用回收。不过由于垃圾回收器是一个优先级较低的线程,所以并不一定能迅速发现弱引用对象。

虚引用:顾名思义,就是形同虚设,如果一个对象仅持有虚引用,那么它相当于没有引用,在任何时候都可能被垃圾回收器回收。

15.WeakReference与SoftReference的区别

这点在四种引用类型中已经做了解释,这里简单说明一下即可:

虽然 WeakReference 与 SoftReference 都有利于提高 GC 和 内存的效率,但是 WeakReference ,一旦失去最后一个强引用,就会被 GC 回收,而软引用虽然不能阻止被回收,但是可以延迟到 JVM 内存不足的时候。

16.Java中==和eqauls()的区别,equals()和`hashcode的区别

==是运算符,用于比较两个变量是否相等,而equals是Object类的方法,用于比较两个对象是否相等。

默认Object类的equals方法是比较两个对象的地址,此时和的结果一样。换句话说:基本类型比较用,比较的是他们的值。

默认下,对象用==比较时,比较的是内存地址,如果需要比较对象内容,需要重写equal方法。

17.equals()和hashcode()的联系

hashCode()是Object类的一个方法,返回一个哈希值。如果两个对象根据equal()方法比较相等,那么调用这两个对象中任意一个对象的hashCode()方法必须产生相同的哈希值。

如果两个对象根据eqaul()方法比较不相等,那么产生的哈希值不一定相等(碰撞的情况下还是会相等的。)

18.怎么唤醒一个阻塞的线程

如果线程是因为调用了wait()、sleep()或者join()方法而导致的阻塞,可以中断线程,并且通过抛出InterruptedException来唤醒它;如果线程遇到了IO阻塞,无能为力,因为IO是操作系统实现的,Java代码并没有办法直接接触到操作系统。

19.什么是多线程的上下文切换

多线程的上下文切换是指CPU控制权由一个已经正在运行的线程切换到另外一个就绪并等待获取CPU执行权的线程的过程。

20.synchronized和ReentrantLock的区别

synchronized是和if、else、for、while一样的关键字,ReentrantLock是类,这是二者的本质区别。

既然ReentrantLock是类,那么它就提供了比synchronized更多更灵活的特性,可以被继承、可以有方法、可以有各种各样的类变量,ReentrantLock比synchronized的扩展性体现在几点上:

ReentrantLock可以对获取锁的等待时间进行设置,这样就避免了死锁
ReentrantLock可以获取各种锁的信息
ReentrantLock可以灵活地实现多路通知
另外,二者的锁机制其实也是不一样的:ReentrantLock底层调用的是Unsafe的park方法加锁,synchronized操作的应该是对象头中mark word。

今天的Java面试题就分享到这里结束啦!

收好这份面试宝典,牢牢将涉及到的知识点记忆牢固。

即将求职面试的小伙伴,最好是不仅能够牢记理论知识,同时做到敲起代码得心应手。这样,技术到家,实战没问题,也能更好去征服面试官,为自己后期谈薪资增加更多砝码!

猜你喜欢

转载自blog.csdn.net/qf2019/article/details/94720338