整理此文,献给共同努力的我们,希望大家都能得到一份满意的offer呀!


一、Java概述

1.Java是如何实现跨平台的

通过Java虚拟机也就是JVM来实现的,要实现跨平台只需在不同平台提供不同版本的JVM即可。Java代码首先被编译成字节码文件,再由JVM这一“中间层”将字节码文件翻译成机器语言,从而达到运行Java语言“一处编译,到处运行”的目的。


2.JVM,JRE,JDK的区别

JVM(Java Development Kit)—> java虚拟机

JRE(Java Runtime Environment) —> java运行时环境
JDK(Java Virtual Machine)—> java开发者工具包
JVM:将字节码文件转成具体系统平台的机器指令。
JRE:JVM+Java语言的核心类库。
JDK:JRE+Java的开发工具。

总结:JDK包含了JRE,而JRE又包含了JVM


3.Java中有几种数据类型



Java机试一般 java面试机考_i++

大家可以去验证一下每个数据类型的默认值哦!

注意:基本数据类型和引用数据类型分别有什么特点呢?

它们在虚拟机中存储的位置是不一样的,前者存在于内存栈,后者在内存栈中存放的只是一个地址,这个地址指向的是内存堆的一块空间,值是存在于这个内存堆上的。


4.String是什么数据类型

String是引用数据类型,因为String本身就是一个类。但是它又是被final修饰的类,是不可被改变的。


5.final关键字有什么作用

1.修饰类时,类不可被继承
2.修饰方法时,方法不可被重写(但可被继承)
3.修饰变量时,变量变常量,是不可修改的。

注意:变量的初始化,在类中(成员变量)变量可以在声明时,方法块中,构造方法中这三个地方任一位置初始化;但在方法中(局部变量)变量只能在声明时初始化。

6.关于String的经典面试题

str01=ab;

str01+=“c”;

以上代码创建了几个新对象? 3

Java机试一般 java面试机考_i++_02


7.变量

变量:先声明,再初始化(赋值),才可使用
注意好这一点就可!!!


8.运算符

关于运算符++i和i++的变态问题
i = 1;
i = i++;
i = ?; 大家先自己拿出纸笔计算一下哦

我们平时都知道i++(先用后+),++i(先+后用),现在我们来看这个题。
解题步骤:
1.将i的值作为i++表达式的值 ----> i++=1
2.执行i=i+1 -----> i=2
3.将i++表达式的值赋值给i ----->i=1
虽然第2步进行了,但我们是先用后加,在执行之前i++还是等于1的

i = ++i;
解题步骤:
1.执行i=i+1 ----->i=2;
2.将i的值赋值给++i ----> ++i=2
3.将++i赋值给i ------>i=2


9.数据类型转换

分为两类:
1.基本数据类型转换,分为自动转换(低取值范围—>高)和强制转换,自动转换时要注意是否存在着经度丢失的问题;
2.引用数据类型转换,分为向上转换和向下转换


9.String,StringBuilder,StringBuffer的区别

简单来说,三者都是做字符串的拼接,当有大量字符需要拼接时,StringBuilder性能最高!!!
String本身就是一个类,是不可改变的,可以理解为是线程安全的
StringBuffer是线程安全的,适用于多线程,为了保证数据的一致性
StringBuilder是非线程安全的,适用于单线程

注意:线程安全是什么?
加了同步锁的,操作对象时只能一个线程接一个线程的进行操作。

注意:String的缺点
String在拼接的过程中会创建大量的对象,参考第6题 Str+=“c” 这一句代码就一下子创建了3个对象,可想而知当有大量的字符需要拼接时,有多少对象创建出来。而其余两者都只需要操作一个对象即可。