Java应届⽣⾯试必备考题(附答案)
前⾔
今年收到疫情的影响,导致很多的应届⽣都还没有到⼯作的,那么对于Java应届⽣来说,⼜有那些是必须要要会的呢,那些⼜是必考的呢,今天带着⼤家⼀起来看⼀下!在这⾥整理了100个必备考题,因为篇幅有限只列举了部分出来,需要全部的⼤⼚⾯试题的,,还有优秀的简历模板哟
⾯向对象的特征有哪些⽅⾯?
抽象:抽象是将⼀类对象的共同特征总结出来构造类的过程,包括数据抽象和⾏为抽象两⽅⾯。抽象只关注对象有哪些属性和⾏为,并不关注这些⾏为的细节是什么。
继承:继承是从已有类得到继承信息创建新类的过程。提供继承信息的类称为⽗类(超类,基类);得到继承信息的类被称为⼦类(派⽣类)。继承让变换中的软件系统有了⼀定的延续性。同时继承也是封
装程序中可变因素的重要⼿段。
封装:通常认为封装是把数据和操作数据的⽅法绑定起来,对数据的访问只能通过已定义的接⼝。⾯向对象的本质就是将现实世界描绘称⼀系列的完全⾃治、封闭的对象。我们在类中编写的⽅法就是对实现细节的⼀种封装;我们编写⼀个类就是对数据和数据操作的封装。可以说,封装就是隐藏⼀起可以隐藏的东西,只向外界提供最简单的编程接⼝。
多态性:多态性是允许不同的类型对象对同⼀消息作出不同的响应。简单的说就是⽤同样的对象引⽤调⽤同样的⽅法但是做了不同的事情。多态性分为编译时多态性和运⾏时多态性。如果将对象的⽅法是为对象向外界提供的服务,那么运⾏时的多态性可以解释为:调⽤不同的⼦类对象替换⽗类对象。⽅法重载(overload)实现的是编译时多态性(也成为前绑定),⽽⽅法重写(override)实现的是运⾏时的多态性(也称为后绑定)。运⾏时的多态是⾯向对象最精髓的东西,要实现多态需要做两件事:1⽅法重写(⼦类继承⽗类并重写⽗类中已有的或抽象的⽅法)2对象造型(⽤⽗类引⽤⼦类对象)
访问修饰符权限
权限分为:当前类,同包,⼦类,其他包
public均可;protected其他包不可;default同包下的可以;private只有⾃⼰可以。
String是基本数据类型吗
答:不是。java中8种基本类型:byte,short,int,long,float,double,char,boolean;除了基本类型(primitive type)和枚举类型(enumeration type),剩下的都是引⽤类型(reference type)。
float f=3.4java面试题及答案2020
错误,默认是double的,需要强转,或者f=3.4f;
int和integer
为了将基本数据类型当做对象操作,Integer为包装类(wrapper class)。
Integer缓存为-128到127.所以,这个范围内的Integer对象是同⼀个,==为true。其他为false。
&和&&
&链接的操作符都要计算。&&是短路运算,即当前⾯表达式有错误就停⽌计算。
解释内存中的栈(stack)、堆(heap)、和静态区(static area)的⽤法
答:通常我们定义⼀个基本数据类型的变量,⼀个对象的引⽤,还有就是函数调⽤的现场保存都使⽤内存中的栈空间;⽽通过new关键字和构造器创建的对象放在堆空间;程序中的字⾯量(literal)如直接书写的100、“hello"和常量都是放在静态区中。栈空间操作起来最快但栈很⼩,通常⼤量的对象都是放在堆空间,理论上整个内存没有被其他进程使⽤的空间甚⾄磁盘上的虚拟内存都可以当做堆空间来使⽤。
String str = new String("hello");
上⾯,str放栈,⽤new出来的字符串对象放堆上,⽽“hello”这个字⾯量放在静态区。
java6开始使⽤“逃逸分析”的技术,可以将⼀些局部对象放在栈上提升对象操作性能。
switch是否可以⽤在byte,long,String?
答:java5前置可以:byte、short、char、int。5后增加enum,7后增加String.
最有效率的⽅法计算2乘以8
答:2<<3(左移3相当于乘以2的3次⽅,右移3相当于除以2的3次⽅)
补充:我们为编写的类重写hashCode⽅法时,可能会看到如下所⽰的代码,其实我们不太理解为什么要使⽤这样的乘法运算来产⽣哈希码(散列码),⽽且为什么这个数是个素数,为什么通常选择31这个数?前两个问题的答案你可以⾃⼰百度⼀下,选择31是因为可以⽤移位和减法运算来代替乘法,从⽽得到更好的性能。说到这⾥你可能已经想到了:31
num 等价于(num << 5) - num,左移5位相当于乘以2的5次⽅再减去⾃⾝就相当于乘以31,现在的VM都能⾃动完成这个优化。
关注+私信【⾯试题】即可免费获取
数组有没有length()⽅法,String有没有length()⽅法?
答:数组没有length()⽅法,有length属性。String有length()⽅法。js中字符串是length属性。
构造器constructor是否可以override?
答:构造器不能被继承,因此不能被重写,但可以被重载。
两个对象值相同(x.equals(y)==true),但却可以有不同的hash code,这句话对不对?答:不对。equals的hashcode必须相同。
是否可以继承String类
答:String类是final类,不可以被继承。继承String是个错误的⾏为,应该⽤关联关系(Has-A)和依赖关系(Use A)⽽不是继承关系(Is-A).
当⼀个对象被当作参数传递到⼀个⽅法后,此⽅法可改变这个对象的属性,并可返回变化后的结果,那么这⾥到底是值传递还是引⽤传递?
答:是值传递。Java语⾔的⽅法调⽤只⽀持参数的值传递。当⼀个对象实例作为⼀个参数被传递到⽅法中时,参数的值就是对该对象的引⽤。对象的属性可以在被调⽤过程中被改变,但对对象引⽤的改变是不会影响到调⽤者的。
String
@Test
public void str_c(){
String a = "hehe";
String b = "he"+"he";
String c = new String("hehe");
String d = new String("hehe");
System.out.println(a==b);//true
System.out.println(a==c);//false
System.out.println(a==a.intern());//true
System.out.println(c==d);//false
}
重载(Overload)和重写(Override)的区别。重载的⽅法能否根据返回类型进⾏区分?
答:⽅法的重载和重写都是实现多态的⽅式,区别在于前者实现的是编译时的多态性,⽽后者实现的是运⾏时的多态性。重载发⽣在⼀个类中,同名的⽅法如果有不同的参数列表(参数类型不同、参数个数不同或者⼆者都不同)则视为重载;重写发⽣在⼦类与⽗类之间,重写要求⼦类被重写⽅法与⽗类被重写⽅法有相同的返回类型,⽐⽗类被重写⽅法更好访问,不能⽐⽗类被重写⽅法声明更多的异常(⾥⽒代换原则)。重载对返回类型没有特殊的要求。
char 型变量中能不能存贮⼀个中⽂汉字,为什么?
答:char类型可以存储⼀个中⽂汉字,因为Java中使⽤的编码是Unicode(不选择任何特定的编码,直接使⽤字符在字符集中的编号,这是统⼀的唯⼀⽅法),⼀个char类型占2个字节(16⽐特),所以放⼀个中⽂是没问题的。
抽象类(abstract class)和接⼝(interface)有什么异同?
答:抽象类和接⼝都不能实例化,但可以定义抽象类和接⼝类型的引⽤。⼀个类如果继承了某个抽象类或者实现了某个接⼝都需要对其中的抽象⽅法全部进⾏实现,否则该类仍然需要声明为抽象类。接⼝⽐
抽象类更加抽象,因为抽象类中可以定义构造器,可以有抽象⽅法和具体⽅法,⽽接⼝中不能定义构造器⽽且其中的⽅法全部都是抽象⽅法。抽象类中的成员可以是privae,默认,protected,public,⽽接⼝中的成员变量全部是public。抽象类中可以定义成员变量,⽽接⼝中定义的成员⽩嬢实际上都是常量。有抽象⽅法的类必须被声明为抽象类,抽象类未必有抽象⽅法。
静态嵌套类(Static Nested Class)和内部类(Inner Class)的不同?
答:Static Nested Class是被声明为静态(static)的内部类,它可以不依赖于外部类实例被实例化。⽽通常的内部类需要在外部类实例化后才能实例化。
Java 中会存在内存泄漏吗,请简单描述。
答:理论上Java因为有垃圾回收机制(GC)不会存在内存泄露问题(这也是Java被⼴泛使⽤于服务器端编程的⼀个重要原因);然⽽在实际开发中,可能会存在⽆⽤但可达的对象,这些对象不能被GC回
收,因此也会导致内存泄露的发⽣。例如Hibernate的Session(⼀级缓存)中的对象属于持久态,垃圾回收器是不会回收这些对象的,然⽽这些对象中可能存在⽆⽤的垃圾对象,如果不及时关闭(close)或清空(flush)⼀级缓存就可能导致内存泄露。下⾯例⼦中的代码也会导致内存泄露。
View Code 上⾯的代码实现了⼀个栈(先进后出(FILO))结构,乍看之下似乎没有什么明显的问题,它甚⾄可以通过你编写的各种单元测试。然⽽其中的pop⽅法却存在内存泄露的问题,当我们⽤pop⽅法弹出栈中的对象时,该对象不会被当作垃圾回收,即使使⽤栈的程序不再引⽤这些对象,因为栈内部维护着对这些对象的过期引⽤(obsolete
reference)。在⽀持垃圾回收的语⾔中,内存泄露是很隐蔽的,这种内存泄露其实就是⽆意识的对象保持。如果⼀个对象引⽤被⽆意识的保留起来了,那么垃圾回收器不会处理这个对象,也不会处理该对象引⽤的其他对象,即使这样的对象只有少数⼏个,也可能会导致很多的对象被排除在垃圾回收之外,从⽽对性能造成重⼤影响,极端情况下会引发Disk
Paging(物理内存与硬盘的虚拟内存交换数据),甚⾄造成OutOfMemoryError。
总结
各位刚刚毕业的Java程序员们,都能把握住这⾯试热潮,应聘上合适⾃⼰的⼯作,在这⾥我也整理了⼀些⼤⼚⾯试题,⾯试资料,以及写的好的简历模板,需要的可以,希望能帮到有需要的读者,祝各位能够在下⼀次求职⾯试当中更加顺利。
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论