最近收到好多正在找工作的同学的诉苦,辛辛苦苦准备了十多天,终于有了一个面试的机会,却折在了“八大基本数据类型都有什么?”这种最基础的问题上,因而痛失offer,错失机会。
What?八大基本数据类型都回答不上来?同学你这基础可得好好复习一下了。
Java基础教程_初学者入门_基础巩固 ☚点击开始学习
面试官的心思难以捉摸,鬼知道会问什么奇葩问题,可能很多同学都把精力用在了IOC,AOP,数据库调优以及各种框架原理的准备上,而忽略了那些最简单,最基础的问题。
有了前车之鉴,为了避免其他同学也遇到这种情况。UP特意整理了一些在面试中出现频率比较高的Java基础的问题,希望能帮助各位同学快速回忆起Java中基础的知识点,顺利拿到offer,找到自己满意的工作。
以下总结的问题,全都来自Java300集,基础不太扎实的同学,一定要再好好学一下哦~
1、什么是JVM?什么是JDK? 什么是JRE?
- JVM :JVM是Java Virtual Machine(Java虚拟机)的缩写,它是整个java实现跨平台的最核心的部分,所有的java程序会首先被编译为.class的类文件,这种类文件可以在虚拟机上执行。
- JRE:JRE是java runtime environment(java运行环境)的缩写。光有JVM还不能让class文件执行,因为在解释class的时候JVM需要调用解释所需要的类库lib。在JDK的安装目录里你可以找到jre目录,里面有两个文件夹bin和lib,在这里可以认为bin里的就是jvm,lib中则是jvm工作所需要的类库,而jvm和lib和起来就称为jre。
- JDK:JDK是java development kit(java开发工具包)的缩写。每个学java的人都会先在机器上装一个JDK,那 让我们看一下JDK的安装目录。在目录下面有六个文件夹、一个src类库源码压缩包、和其他几个声明文件。其中,真正在运行java时起作用的是以下四个文件夹:bin、include、lib、jre。
现在我们可以看出这样一个关系,JDK包含JRE,而JRE包含JVM。
JDK,JRE,JVM三者关系概括如下:
JDK是Java程序开发时用的开发工具包,其内部也有Java运行环境JRE。JRE是Java程序运行时需要的运行环境,就是说如果你光是运行JAVA程序而不是去搞开发的话,只安装JRE就能运行已经存在的Java程序了。JDk、JRE内部都包含Java虚拟机JVM,JAVA虚拟机内部包含许多应用程序的类的解释器和类加载器等等。
2、Java三种注释类型
1)单行注释,采用“//”方式.只能注释一行代码。
//类成员变量
2)多行注释,采用“/*...*/”方式,可注释多行代码,其中不允许出现嵌套。
/*System.out.println("a");
System.out.println("b");
System.out.println("c");*/
3)文档注释,采用“/**...*/”方式。
/**
* 子类 Dog
* @author Administrator
**/
public class Dog extends Animal{}
3、8种基本数据类型及其字节数
数据类型 | 关键字 | 字节数 | |
数值型 | 整数型 | byte | 1 |
short | 2 | ||
int | 4 | ||
浮点型 | long | 8 | |
float | 4 | ||
double | 8 | ||
布尔型 | boolean | 1(位) | |
字符型 | char | 2 |
4、i++和++i的异同之处
共同点:
- i++和++i都是变量自增1,都等价于i=i+1
- 如果i++,++i是一条单独的语句,两者没有任何区别
- i++和++i的使用仅仅针对变量。 5++和++5会报错,因为5不是变量。
不同点:
如果i++,++i不是一条单独的语句,他们就有区别。
i++ :先运算后增1。如:
int x=5;
int y=x++;
System.out.println("x="+x+", y="+y);
//以上代码运行后输出结果为:x=6, y=5
++i : 先增1后运算。如:
int x=5;
int y=++x;
System.out.println("x="+x+", y="+y);
//以上代码运行后输出结果为:x=6, y=6
5、if多分支语句和switch多分支语句的异同之处
相同之处:
都是分支语句,对超过一种的情况进行判断处理。
不同之处:
switch更适合用于多分支情况,就是有很多种情况需要判断处理,判断条件类型单一,只有一个入口,在分支执行完后(如果没有break跳出),不加判断地执行下去;
而if—elseif---else多分枝主要适用于分支较少的分支结构,判断类型不是单一,只要一个分支被执行后,后边的分支不再执行。
switch为等值判断(不允许比如>= <=),而if为等值和区间都可以,if的使用范围大。
6、while和do-while循环的区别
while先判断后执行,第一次判断为false,循环体一次都不执行
do while先执行 后判断,最少执行1次。
如果while循环第一次判断为true, 则两种循环没有区别。
7、break和continue的作用
break: 结束当前循环并退出当前循环体。
break还可以退出switch语句
continue: 循环体中后续的语句不执行,但是循环没有结束,继续进行循环条件的判断(for循环还会i++)。continue只是结束本次循环。
8、类和对象的关系
类是对象的抽象,而对象是类的具体实例。类是抽象的,不占用内存,而对象是具体的,占用存储空间。类是用于创建对象的蓝图,它是一个定义包括在特定类型的对象中的方法和变量的软件模板。
类和对象好比图纸和实物的关系,模具和铸件的关系。
比如人类就是一个概念,人类具有身高,体重等属性。人类可以做吃饭、说话等方法。
小明就是一个具体的人,也就是实例,他的属性是具体的身高200cm,体重180kg,他做的方法是具体的吃了一碗白米饭,说了“12345”这样一句话。
9、面向过程和面向对象的区别
面向过程 | 面向对象 | |
区别 | 事务比较简单,可以用线性的思维去解决。 | 事务比较复杂,使用简单的线性思想无法解决。 |
共同点 | 面向过程和面向对象都是解决实际问题的一种思维方式 | |
二者相辅相成,并不是对立的。 解决复杂问题,通过面向对象的方式便于我们从宏观上把握事务之间的复杂关系、方便我们分析整个系统;具体到微观操作,仍然使用面向过程的方式来处理 |
比喻
面向过程是蛋炒饭,面向对象是盖浇饭。盖浇饭的好处就是“饭”“菜”分离,从而提高了制作盖浇饭的灵活性。饭不满意就换饭,菜不满意换菜。用软件工程的专业术语就是“可维护性”比较好,“饭” 和“菜”的耦合度比较低。
区别
编程思路不同:面向过程以实现功能的函数开发为主,而面向对象要首先抽象出类、属性及其方法,然后通过实例化类、执行方法来完成功能。
封装性:都具有封装性,但是面向过程是封装的是功能,而面向对象封装的是数据和功能。
面向对象具有继承性和多态性,而面向过程没有继承性和多态性,所以面向对象优势是明显。
10、方法重载和方法重写(覆盖)的区别
英文 | 位置 | 作用 | 修饰符 | 返回值 | 方法名 | 参数 | 抛出异常 | |
重载 | overload | 同一个类中 | 在一个类里面为一种行为提供多种实现方式并提高可读性 | 无关 | 无关 | 相同 | 不同 | 无关 |
重写 | override | 子类和父类之间 | 父类方法无法满足子类的要求,子类通过方法重写满足要求 | 大于等于 | 小于等于 | 相同 | 相同 | 小于等于 |
以上这十道面试题UP认为还是很重要的,UP一共整理了600多道面试题,包括java的各个方面。光基础部分就有300多,占了一半。所以,基础很重要啊同学们。把基础部分再好好学一下吧。