java面试基础-1_1 面试题之java基础

1b886e01fb6cf6771d2069176464ece5.png

大纲:

cf44601dd1feb134a9d81681f1e72478.png

① JDK、JRE、JVM的区别和联系有哪些?

三者的概念如下:

JDK(Java Development Kit)是一个开发工具包,是Java开发环境的核心组件,并且提供编译、调试和运行一个Java程序所需要的所有工具 ;

JRE(Java Runtime Environment)是指Java运行时环境,是JVM的实现,提供了运行Java程序的平台。JRE包含了JVM,但是不包含Java编译器/调试器之类的开发工具 ;

JVM(Java Virtual Machine)是指Java虚拟机,当我们运行一个程序时,JVM负责将字节码转换为特定机器代码,JVM提供了内存管理/垃圾回收和安全机制等 ;

区别与联系:

a34f7607448aa21f981a9bfd96265ae5.png

②基本数据类型及其包装类、装箱拆箱   (待补充)

问题1 :Java中的8种基本数据类型及其取值范围

Java种的8种基本数据类型分别是:byte,short,int,long,float,double,char以及boolean。boolean类型的取值为true和false两种,其余每一种基本类型都占有一定的字节, 其余每一种基本类型都占有一定的字节,并且拥有着最大值和最小值。比如int的取值范围为 Integer.MIN_VALUE 到 Integer.MAX_VALUE。 这里给出每种基本类型所占用的字节数:

2ed3d2295c6641b32e17b7f470600932.png

解析:

这是一个特别基础的题目,面试时候基本会考察各个基本类型所占的字节数,需要准确记忆与理解。关于取值范围,如果实在记忆有点缺失,可以和面试官说通过哪个字段可以获取到其取值范围也算尚可。

问题2 :int和integer的区别?(原始数据类型和包装类的区别)

问题3:什么是自动拆装箱?

③ java中的值传递和引用传递

值传递,意味着传递了对象的一个副本,即使副本被改变,也不会影响源对象 。

引用传递,意味着传递的并不是实际的对象,而是对象的引用。因此,外部对引用对象的改变会反映到所有的对象上。

一般而言,java内的传递都是值传递。

说明:

如果传递的是基本数据类型,那么是属于值传递的范畴,传递的其实是源对象的一个copy副本,不会影响源对象的值。

如果传递的是引用数据类型,传递的实际是地址值。

④ hashcode、equals和==         (待补充 2 )

1 == 与 equals的区别

06b813fc1e3cd9a09dbd35de9e3ec5a6.png

6a72217068d12a58e85f428925db7d1b.png

2 hashcode与equals(涉及到集合的底层源码)

这两个方法都是Object类中的方法:

hashcode()方法:该方法直接返回对象的内存地址( 它的实现是根据本地机器相关的 )。

equals()方法:上面已经介绍过。

联系:

14a83dad93c5af3938c1de1f4f2c6be1.png

-------------------------------------------------------------------

问题:请你解释下为什么重写equals还有重写hashcode?

答:待补充,学到集合的时候

⑤ java中的元注解与注解     (待补充)

元注解:

Java中提供了4个元注解,元注解的作用是负责注解其它注解。

: 说明注解所修饰的对象范围

@Retention:(保留策略) 保留策略定义了该注解被保留的时间长短

其中,SOURCE:表示在源文件中有效(即源文件保留);CLASS:表示在class文件中有效(即class保留);RUNTIME:表示在运行时有效(即运行时保留)。例如,@Retention(RetentionPolicy.RUNTIME)标注表示该注解在运行时有效。

@Documented: 该注解用于描述其它类型的annotation应该被作为被标注的程序成员的公共API,因此可以被javadoc此类的工具文档化。Documented是一个标记注解,没有成员

@Inherited: 该注解是一个标记注解,@Inherited阐述了某个被标注的类型是被继承的。如果一个使用了@Inherited修饰的annotation类型被用于一个class,则这个annotation将被用于该class的子类

2567fb7e2e0fe05b33c11523816b9493.png

注解:

⑥ java基础语法

q1:java如何跳出当前的多重嵌套循环?

在最外层循环前加一个标记如A,然后用break A,可以填出多重循环;

注:实际上这种方式不怎么用,实际效果不好;

q2:&和&&的区别

&(逻辑与):会计算&两边的表达式,只有都是true时,整体才会返回true;

&&(短路与):如果&&左边的表达式为false,右边的表达式就会直接短路掉,不会进行运算,返回false;

案例:例如在验证用户登录时判定用户名既不是null也不是空字符串,应当写为:username != null && username.equals(""),二者顺序不能交换,更不能用&运算符,

因为第一个条件如果不成立,根本不能进行字符串的equals比较,否则会出现NullPointerException异常。

⑦ java8 新特性   (待补充)

⑧ 数组和集合的联系

问题:数组(Array)和列表(ArrayList)的区别?什么时候该使用Array而不是ArrayList?

区别:

1 Array可以包含基本数据类型和对象类型,ArrayList只能包含对象类型;

2 Array大小是固定的,ArrayList大小是动态变化的;

3 ArrayList提供了更多的方法和特性,比如:addAll(),removeAll(),iterator()等等;

Array使用情形:

对于基本数据类型,集合使用自动装箱来减少编码工作量。但是,当处理固定大小的基本数据类型的时候,这种方式相对较慢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值