信盈达—您身边的嵌入式&人工智能专家
全国免费咨询热线:400-8788-909

Java工程师面试题集锦

时间:2018-08-07 00:00:00 来源:信盈达 作者:信盈达

今天要谈的主题是关于求职,求职是在每个技术人员的生涯中都要经历多次。对于我们大部分人而言,在进入自己心仪的公司之前少不了准备工作,有一份全面细致面试题将帮助我们减少许多麻烦。在跳槽季来临之前,特地做这个系列的文章,给大家做一个参考。

相关概念


面向对象的三个特征

封装,继承,多态,这个应该是人人皆知,有时候也会加上抽象。


多态的好处

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

可替换性:多态对已存在代码具有可替换性

可扩充性:增加新的子类不影响已经存在的类结构

接口性:多态是超类通过方法签名,向子类提供一个公共接口,由子类来完善或者重写它来实现的。

灵活性

简化性

代码中如何实现多态


实现多态主要有以下三种方式:

1. 接口实现 

2. 继承父类重写方法 

3. 同一类中进行方法重载


虚拟机是如何实现多态的


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


接口的意义


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


抽象类的意义


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


为其他子类提供一个公共的类型

封装子类中重复定义的内容

定义抽象方法,子类虽然有不同的实现,但是定义时一致的

父类的静态方法能否被子类重写


不能。重写只适用于实例方法,不能用于静态方法,而子类当中含有和父类相同签名的静态方法,我们一般称之为隐藏。


什么是不可变对象


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


静态变量和实例变量的区别?


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


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


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


java 创建对象的几种方式


采用new

通过反射

采用clone

通过序列化机制

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


switch中能否使用string做参数


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


switch能否作用在byte, long上?


可以用在byte上,但是不能用在long上。


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”);


你对String对象的intern()熟悉么?


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

比如 

String s1=”aa”; 

String s2=s1.intern(); 

System.out.print(s1==s2);//返回true


Object中有哪些公共方法?


equals()

clone()

getClass()

notify(),notifyAll(),wait()

toString


java当中的四种引用


强引用,软引用,弱引用,虚引用。不同的引用类型主要体现在GC上:


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

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

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

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

Java工程师面试题集锦

信盈达2008年在深圳特区南山高新科技园成立。自成立至今近九年来专注为企业和个人提供高端方案设计、高端嵌入式/Android培训等服务。公司下设信盈达实训学院、信盈达研发中心、信盈达教学仪器三大业务板块。九年来公司坚持"技术领先、服务领先",以雄厚的实力和专业的品质成为国内唯一有实力从产品最底层研发到系统层开发的嵌入式实训、产品解决方案提供商。为中国IT行业提供最具价值的职业教育服务。专业培训i嵌入式、物联网、人工智能Java、单片机等课程,想了解更多信息点击立马咨询