Java面试真就老八股文了。我光是整理题目就理了半天,答案背也背不完,在我快要放弃的时候,死马当活马医的听了阿里P8杨逍的讲座《大厂Java高级工程师的求职秘诀》(白嫖的试听章节),不愧是大厂的高职级大佬,把Java面试题和所有知识点都讲得很通透,感兴趣的话,大家也可以去免费试听一下。
当然,也可以往下看我整理的Java面试题,做个白嫖党,嘿嘿。
1、JVM、JRE和JDK的区别:
JVM(Java Virtual Machine):java虚拟机,用于保证java的跨平台的特性。java语言是跨平台,jvm不是跨平台的。JRE(Java Runtime Environment):java的运行环境,包括jvm+java的核心类库。JDK(Java Development Kit):java的开发工具,包括jre+开发工具。
2、环境变量path和classpath的作用是什么?
C:Program Files (x86)Javajre7in;C:Program Files (x86)Javajdk1.7.0_72in(1)path是配置Windows可执行文件的搜索路径,即扩展名为.exe的程序文件所在的目www.jiuzhang.com 2录,用于指定DOS窗口命令的路径。(2)Classpath是配置class文件所在的目录,用于指定类搜索路径,JVM就是通过它来寻找该类的class类文件的。
3、变量有什么用?为什么要定义变量?什么时候用?
答:变量的作用:用来存储数据。为什么要定义变量:用来不断的存放同一类型的常量,并可以重复使用
4、final 在java 中有什么作用?
final 修饰的类叫最终类,该类不能被继承。
final 修饰的方法不能被重写。
final 修饰的变量叫常量,常量必须初始化,初始化之后值就不能被修改。
5. java 中的Math.round(-1.5) 等于多少?
等于-1,因为在数轴上取值时,中间值(0.5)向右取整,所以正0.5 是往上取整,负0.5 是直接舍弃。
6、标示符命名规则
由数字(0-9),大小写英文字母,以及_和$组成。不能以数字开头。不能使用关键字来自定义命名。
7. String 属于基础的数据类型吗? String 不属于基础类型,基础类型有8 种:byte、boolean、char、short、int、float、long、double,而String 属于对象。
8、数据类型:
(1)基本数据类型(4类8种):整数类型:byte、short、int、long浮点数类型:float、double字符类型:char布尔类型:boolean(ture false)(2)引用数据类型:类接口数组7、类型转换精度从高到低double float long int short(char) byte(1)自动类型转换将一个低精度—高精度(2)强制类型转换将一个高精度—低精度(精度会下降)8、java语言的三种技术架构J2EE:企业版是为开发企业环境下的应用程序提供的一套解决方案。该技术体系中包含的技术如Servlet、Jsp等,主要针对于Web应用程序开发。J2SE:标准版是为开发普通桌面和商务应用程序提供的解决方案。该技术体系是其他两者的基础,可以完成一些桌面应用程序的开发。
9. java 中操作字符串都有哪些类?它们之间有什么区别?
操作字符串的类有:String、StringBuffer、StringBuilder。String 和StringBuffer、StringBuilder 的区别在于String 声明的是不可变的对象,每次操作都会生成新的String 对象,然后将指针指向新的String 对象,而StringBuffer、StringBuilder可以在原有对象的基础上进行操作,所以在经常改变字符串内容的情况下最好不要使用String。StringBuffer 和StringBuilder 最大的区别在于,StringBuffer 是线程安全的,而StringBuilder 是非线程安全的,但StringBuilder 的性能却高于StringBuffer,所以在单线程环境下推荐使用StringBuilder,多线程环境下推荐使用StringBuffer。
10.String str="i"与String str=new String(“i”)一样吗?
不一样,因为内存的分配方式不一样。String str="i"的方式,java 虚拟机会将其分配到常量池中;而String str=new String(“i”) 则会被分到堆内存中。
11.java的跨平台性
通过Java语言编写的应用程序在不同的系统平台上都可以运行。跨平台的原因:只要在需要运行java应用程序的操作系统上,先安装一个Java虚拟机(JVM Java VirtualMachine)即可。由JVM来负责Java程序在该系统中的运行。
12、有符号数据的表示法
(次重点)原码,反码(原码取反),补码(反码+1)。
13、函数
定义:函数就是定义在类中的具有特定功能的一段独立小程序。
特点:定义函数可以将功能代码进行封装便于对该功能进行复用函数只有被调用才会被执行函数的出现提高了代码的复用性对于函数没有具体返回值的情况,返回值类型用关键字void表示,那么该函数中的return语句如果在最后一行可以省略不写。
函数的应用两个明确:明确要定义的功能最后的结果是什么?明确在定义该功能的过程中,是否需要未知内容参与运算
14、重载:
概念:在同一个类中,允许存在一个以上的同名函数,只要它们的参数个数或者参数类型不同即可。
特点:与返回值类型无关,只看参数列表(参数类型以及参数个数)。
好处:方便于阅读,优化了程序设计。
15、数组
概念:同一种数据类型的集合。好处:可以自动给数组中的元素从0开始编号,方便操作这些元素。
16、内存结构
栈内存:用于存储局部变量,当数据使用完,所占空间会自动释放。堆内存:数组和对象,通过new建立的实例都存放在堆内存中。方法区:静态成员、构造函数、常量池、线程池本地方法区:window系统占用寄存器:
17.String 类的常用方法都有那些?
indexOf():返回指定字符的索引。
charAt():返回指定索引处的字符。
replace():字符串替换。
trim():去除字符串两端空白。
split():分割字符串,返回一个分割后的字符串数组。
getBytes():返回字符串的byte 类型数组。
length():返回字符串长度。
toLowerCase():将字符串转成小写字母。
toUpperCase():将字符串转成大写字符。
substring():截取字符串。
equals():字符串比较。
18.抽象类必须要有抽象方法吗?
不需要,抽象类不一定非要有抽象方法。
示例代码:
abstract class Cat {
public static void sayHi() {
System.out.println("hi~");
}
}
上面代码,抽象类并没有抽象方法但完全可以正常运行。
19.普通类和抽象类有哪些区别?
普通类不能包含抽象方法,抽象类可以包含抽象方法。
抽象类不能直接实例化,普通类可以直接实例化。
20.类和对象:
类:对现实世界中某类事物的描述,是抽象的,概念上的定义。
对象:事物具体存在的个体。
21.成员变量和局部变量的区别(重点)
(1)作用域成员变量:针对整个类有效。局部变量:只在某个范围内有效。(一般指的就是方法,语句体内)
(2)存储位置成员变量:随着对象的创建而存在,随着对象的消失而消失,存储在堆内存中。局部变量:在方法被调用,或者语句被执行的时候存在,存储在栈内存中。当方法调用完,或者语句结束后,就自动释放。
(3)初始值成员变量:有默认初始值。局部变量:没有默认初始值,使用前必须赋值。
21.匿名对象
(1)匿名对象就是没有名字的对象。是对象的一种简写形式。
(2)应用场景
A:只调用一次类中的方法。
B:可以作为实际参数在方法传递中使用
22.封装
指隐藏对象的属性和实现细节,仅对外提供公共访问方式;比如电脑机箱、笔记本等好处:将变化隔离;方便使用;提高复用性;提高安全性
23.this关键字
(1)this关键字代表本类对象的一个引用,谁调用this所在的方法,this就代表谁
(2)this的使用场景
A:用于区分同名成员变量和局部变量;
B:在定义函数时,该函数内部要用到调用该函数的对象时,因为此时对象还没建立,故this代表此对象B:构造函数间调用**这个时候,this(参数)必须作为第一条语句存在。
24.Person p = new Person();在内存中做了哪些事情。
(1)将Person.class文件加载进内存中。
(2)如果p定义在主方法中,那么,就会在栈空间开辟一个变量空间p。
(3)在堆内存给对象分配空间。
(4)对对象中的成员进行默认初始化。
(5)对对象中的成员进行显示初始化。
(6)调用构造代码块对对象进行初始化。(如果没有就不执行)
(7)调用构造方法对对象进行初始化。对象初始化完毕。
(8)将对象的内存地址赋值给p变量,让p变量指向该对象。
25.制作API(次重点)
API(全拼):Application Program Interface 应用程序编程接口。
(1)类中的内容需要用文档注释。
(2)使用JDKin目录下的javadoc工具。格式:javadoc -d 目录-author -version ArrayTool.java
26.Random类的使用(重点)
(1)产生随机数的类
(2)掌握内容
A:构造方法**Random() 创建一个新的随机数生成器。**Random(long seed) 使用单个long 种子创建一个新的随机数生成器。
B:成员方法**int nextInt() 返回下一个伪随机数,它是此随机数生成器的序列中均匀分布的int 值。**int nextInt(int n) 返回一个伪随机数,它是取自此随机数生成器序列的、在0(包括)和指定值(不包括)之间均匀分布的int 值。
27.final关键字(重点)
(1)最终的意思,可以用于修饰类,方法,变量。
(2)final修饰的类不能被继承。final修饰的方法不能被重写。final修饰的变量是一个常量。只能被赋值一次。内部类只能访问被final修饰的局部变量。
28.抽象类(重点)
(1)多个类有相同的方法声明,但是方法体不一样。这个时候,我们考虑把方法声明进行抽取。让子类继承后,自己去实现方法体。没有方法体的方法,我们需要用抽象标志下。抽象的关键字是:abstract。
(2)抽象类:该方法称为抽象方法,包含抽象方法的类就是抽象类。
(3)抽象类的特点:
A:抽象类和抽象方法都要用abstract进行修饰
B:抽象类不能被实例化
C:抽象类中不一定有抽象方法,但是,有抽象方法的类一定是抽象类。
(4)抽象类中数据的特点
A:成员变量抽象类中可以有变量,也可以有常量。
B:成员方法抽象类中可以有抽象方法,也可以有非抽象方法。
C:构造方法抽象类是一个类,所以,它有构造方法。虽然本身不能实例化。但是可以给子类实例化使用。
(5)抽象类中的问题
A:抽象类中是否有构造方法?能不能被实例化?如果不能,为什么有构造方法?
抽象类有构造方法。抽象类不能被实例化。抽象类中的构造方法供子类实例化调用。
B:抽象关键字abstract不可以和哪些关键字共存?
**private:私有内容子类继承不到,所以,不能重写。但是abstract修饰的方法,要求被重写。两者冲突。**finalfinal修饰的方法不能被重写。而abstract修饰的方法,要求被重写。两者冲突。**static假如一个抽象方法能通过static修饰,那么这个方法,就可以直接通过类名调用。而抽象方法是没有方法体的,这样的调用无意义。所以,不能用static修饰。
C:抽象类中可不可以没有抽象方法?如果可以,这样的类有什么用吗?抽象类可以没有抽象方法。抽象类中没有抽象方法的作用,只是为了不让别的类建立该抽象类对象。这个在awt中有体现。
29.多态:
(1)同一个对象,在程序不同时刻的多种运行状态。举例:动物,狗是狗,狗是动物。水(气态,液态,固态)
(2)多态前提
A:存在着继承或者实现关系
B:有方法的重写
C:父类(接口)引用指向子类(实现)对象
(3)多态的好处和弊端:
好处:多态的存在提高了程序的扩展性和后期可维护性弊端:虽然可以预先使用,但是只能访问父类中已有的功能,运行的是后期子类的功能内容。不能预先使用子类中定义的特有功能。(4)多态中对象调用成员的特点
Fu f = new Zi();A:成员变量编译看左边,运行看左边B:成员方法编译看左边,运行看右边C:静态方法编译看左边,运行看左边
(5)多态的思想指挥同一批对象做事情。举例:带兵打仗,下课等。
30.模板设计模式:
在定义功能时,功能的一部分是确定的,有一部分是不确定的,而且确定的部分在使用不确定的部分,可将不确定的部分暴露出去,由该类的子类去完成。如:求一段程序的运行时间例子。
以上只是Java面试的冰山一角,感兴趣的话也可以移步杨逍老师的Java面试技巧讲座,这门课程非常看重实用性,设计理念就是**“通过真题搞定BATJ大厂面试”**,通过40天有计划的训练,带你进阶到阿里 P6+级别。