大家好,我是青空。
最近又赶上跳槽的高峰期,好多粉丝,都问我要有没有最新面试题,能不能做一些分享,和做一些面试题解析的系列文章。
青空收到消息之后,觉得这个建议挺不错的。那我就计划简单及概念性的面试题就多个面试题汇总成一片文章,比较复杂的面试题就单独拎出来讲讲。
文末领取面试大全
1.Java中实现多态的机制是什么?
Java中的多态靠的是父类或接口定义的引用变量可以指向子类或具体实现类的实例对象,而程序调用的方法在运行期才动态绑定,就是引用变量所指向的具体实例对象的方法,也就是内存里正在运行的那个对象的方法,而不是引用变量的类型中定义的方法。
2.new一个对象的过程和clone一个对象的区别?
new 操作符的本意是分配内存。程序执行到 new 操作符时,首先去看 new 操作符后面的类 型,因为知道了类型,才能知道要分配多大的内存空间。分配完内存之后,再调用构造函数,填充对象的各个域, 这一步叫做对象的初始化,构造方法返回后,一个对象创建完毕,可以把他的引用(地址)发布到外部,在外部就可以使用这个引用操纵这个对象。
clone 在第一步是和 new 相似的,都是分配内存,调用 clone 方法时,分配的内存和原对象 (即调用 clone 方法的对象)相同,然后再使用原对象中对应的各个域,填充新对象的域,填充完成之后, clone方法返回,一个新的相同的对象被创建,同样可以把这个新对象的引用发布到外部。
3.深克隆和浅克隆?
浅克隆:创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向 原有属性所指向的对象的内存地址。
深克隆:创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
4.Java中为什么要用 clone?
在实际编程过程中,我们常常要遇到这种情况:有一个对象 A,在某一时刻 A 中已经包含了一些有效值,此时可能会需要一个和 A 完全相同新对象 B,并且此后对 B 任何改动都不会影响到 A 中的值,也就是说,A 与 B 是两个独立的对象,但 B 的初始值是由 A 对象确定的。在 Java 语言中,用简单的赋值语句是不能满足这种需求的。要满足这种需求虽然有很多途径,但 clone()方法是其中最简单,也是最高效的手段。
5.Java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。
String 和 StringBuffer、StringBuilder 的区别在于 String 声明的是不可变的对象,每次操 作都会生成 新的 String 对象,再将指针指向新的 String 对象,而 StringBuffer 、 StringBuilder 可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用 String。
StringBuffer 和 StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而 StringBuilder 是非线程安全的,但 StringBuilder 的性能却高于 StringBuffer,所以在单线程环境下推荐使用 StringBuilder,多线程环境下推荐使用 StringBuffer。
6.String str = “i” 和String str = new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str = "i"的方式JVM会将其分配到常量池中,而 String str = new String(“i”)JVM会将其分配到堆内存中。
7.final finally finalize的区别
final可以修饰类、变量、方法,修饰类表示该类不能被继承、修饰方法表示该方法不能 被重写、 修饰变量表 示该变量是一个常量不能被重新赋值。finally一般作用在try-catch代码块中,在处理异常的时候,通常我们将一定要执行的代 码方法 finally代码块 中,表示不管是否出现异常,该代码块都会执行,一般用来存放一些关闭资源的代码。
finalize是一个方法,属于Object类的一个方法,而Object类是所有类的父类,该方法一般由垃圾 回收器来调用,当我们调用System.gc() 方法的时候,由垃圾回收器调用finalize(),回收垃圾,一个对象是否可回收的 最后判断。
8.final 有什么用?
用于修饰类、属性和方法:
-
被final修饰的类不可以被继承
-
被final修饰的方法不可以被重写
-
被final修饰的变量不可以被改变,被final修饰不可变的是变量的引用,而不是引用指向的内容,引用指向的内容是可以改变的
9.Java有哪些数据类型
定义:Java语言是强类型语言,对于每一种数据都定义了明确的具体的数据类型,在内存中分配了不同大小的内存空间。基本数据类型
-
数值型
-
整数类型(byte,short,int,long)
-
浮点类型(float,double)
-
字符型(char)
-
布尔型(boolean)
引用数据类型
-
类(class)
-
接口(interface)
-
数组([])
10.什么是Java注释
定义:用于解释说明程序的文字 Java注释的分类
单行注释
-
格式: // 注释文字 多行注释
-
格式: /* 注释文字 */ 文档注释
-
格式:/** 注释文字 */
Java注释的作用
在程序中,尤其是复杂的程序中,适当地加入注释可以增加程序的可读性,有利于程序的修改、调试和交流。注释的内容在程序编译的时候会被忽视,不会产生目标代码,注释的部分不会对程序的执行结果产生任何影响。
注意事项:多行和文档注释都不能嵌套使用。
11.用最有效率的方法计算2乘以8?
2 << 3
12.Math.round(11.5) 等于多少? Math.round(-11.5)等 于多少?
Math.round(11.5)的返回值是12,Math.round(-11.5)的返回值是-11。四舍五入的原理是在 参数上加 0.5然后进行下取整。
13.&和&&的区别?
&运算符有两种用法:(1)按位与;(2)逻辑与。
&&运算符是短路与运算。
逻辑与跟短路与的差别是非常巨大的,虽然二者都要求运算符左右两端的布尔值都是true整个 表达式的 值才是true。&&之所以称为短路运算是因为,如果&&左边的表达式的值是false,右 边的表达式会被直 接短路掉,不会进行运算。很多时候我们可能都需要用&&而不是&,例如在 验证用户登录时判定用户名 不是null而且不是空字符串,应当写为:username != null &&!username.equals(""),二者的顺序不能 交换,更不能用&运算符,因为第一个条件如果 不成立,根本不能进行字符串的equals比较,否则会产 生NullPointerException异常。注 意:逻辑或运算符(|)和短路或运算符(||)的差别也是如此。
14.Java有没有goto?
goto 是Java中的保留字,在目前版本的Java中没有使用。(根据James Gosling(Java之 父)编写的 《The Java Programming Language》一书的附录中给出了一个Java关键字列 表,其中有goto和 const,但是这两个是目前无法使用的关键字,因此有些地方将其称之为保 留字,其实保留字这个词应 该有更广泛的意义,因为熟悉C语言的程序员都知道,在系统类库 中使用过的有特殊意义的单词或单词 的组合都被视为保留字)
15.float f=3.4;是否正确?
不正确。3.4是双精度数,将双精度型(double)赋值给浮点型(float)属于下转型(downcasting,也称为窄化)会造成精度损失,因此需要强制类型转换float f =(float)3.4; 或者写 成float f =3.4F;。
16.访问修饰符public,private,protected,以及不写(默认)时的区别?
修饰符 | 当前类 | 同包 | 子类 | 其他包 |
---|---|---|---|---|
public | √ | √ | √ | √ |
protected | √ | √ | √ | × |
default | √ | √ | × | × |
private | √ | × | × | × |
类的成员不写访问修饰时默认为default。默认对于同一个包中的其他类相当于公开 (public),对于不 是同一个包中的其他类相当于私有(private)。受保护(protected)对 子类相当于公开,对不是同一 包中的没有父子关系的类相当于私有。Java中,外部类的修饰符 只能是public或默认,类的成员(包括 内部类)的修饰符可以是以上四种。
17.Java语言有哪些特点
-
简单易学(Java语言的语法与C语言和C++语言很接近)
-
面向对象(封装,继承,多态)
-
平台无关性(Java虚拟机实现平台无关性)
-
支持网络编程并且很方便(Java语言诞生本身就是为简化网络编程设计的)
-
支持多线程(多线程机制使应用程序在同一时间并行执行多项任)
-
健壮性(Java语言的强类型机制、异常处理、垃圾的自动收集等)
-
安全性
18.什么是Java程序的主类?应用程序和小程序的主类有何不同?
一个程序中可以有多个类,但只能有一个类是主类。在Java应用程序中,这个主类是指包含 main()方法 的类。而在Java小程序中,这个主类是一个继承自系统类JApplet或Applet的子 类。应用程序的主类不一 定要求是public类,但小程序的主类要求必须是public类。主类是 Java程序执行的入口点。
19.说下面向对象四大特性
封装、继承、多态、抽象。
参考资料
《Java核心技术卷一》
面试大全包括:包括 Java 集合、JVM、多线程、并发编程、设计模式、SpringBoot、SpringCloud、Java、MyBatis、ZooKeeper、Dubbo、Elasticsearch、Memcached、MongoDB、Redis、MySQL、RabbitMQ、Kafka、Linux、Netty、Tomcat、Python、HTML、CSS、Vue、React、JavaScript、Android 大数据、阿里巴巴等大厂面试题等、等技术栈!
领取方式:扫描下方公众号【蚂蚁原图】回复【面试题】即可获取