Java基础易错面试题,初级程序员面试必看!(会不断更新)

写在前面: 我是「扬帆向海」,这个昵称来源于我的名字以及女朋友的名字。我热爱技术、热爱开源、热爱编程。技术是开源的、知识是共享的

这博客是对自己学习的一点点总结及记录,如果您对 Java算法 感兴趣,可以关注我的动态,我们一起学习。

用知识改变命运,让我们的家人过上更好的生活

相关文章:

20道你必须要背会的微服务面试题


1、& 和 && 的区别

&:按位与,不管左边是true或false,右边都进行运算,不会短路;

&&:逻辑与,如果左边为true,右边参与运算,如果左边为false,那么右边不参与运算,具有短路的功能 。

2、重载和重写的区别

重载:同一个类中的方法名相同而参数列表不同,与方法的修饰符、返回值类型没有关系

重写:需要遵循“两同两小一大”的原则。

  • 两同:子类重写的方法 必须 和父类被重写的方法 方法名相同、参数列表相同

  • 两小:子类的返回值类型小于等于父类的返回值类型,子类抛出的异常小于等于父类抛出的异常。

  • 一大:子类重写的方法使用的访问权限大于父类被重写的方法的访问权限。

注意:子类不能重写父类中声明为 private 权限的方法

3、== 和 equals 的区别

== 既可以比较基本类型也可以比较引用类型。对于基本类型比较的是值,对于引用类型比较的是内存地址。

equals ,它是属于 java.lang.Object 类里面的方法,如果该方法没有被重写过默认也是==;通常情况下,重写 equals 方法,会比较类中的相应属性是否都相等。

更详细的解释请参考下面的博文

深入理解 equals() 方法以及与 == 的区别

4、final、finally、finalize 的区别

  • final:用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,被其修饰的类不可继承。
  • finally:异常处理语句结构的一部分,表示总是执行。
  • finalize:Object 类的一个方法,在垃圾回收器执行的时候会调用被回收对象的此方法,可以覆盖此方法

5、接口和抽象类

相同点

  • 接口和抽象类都不能被实例化,它们都位于继承树的顶端,用于被其他类实现和继承
  • 可以将抽象类和接口类型作为引用类型
  • 接口和抽象类都包含抽象方法
  • 一个类如果继承了某个抽象类或者实现了某个接口都需要对其中的抽象方法全部进行实现,否则该类仍然需要被声明为抽象类

不同点

  • 一个类可以实现多个接口,一个类只能继承一个抽象类;
  • .接口中不能定义构造器,抽象类中可以定义构造器;抽象类的构造器不是用来创建对象,而是让其子类调用完成抽象类的初始化操作;
  • 接口中的方法全部都是抽象方法,抽象类中可以有抽象方法和具体方法;
  • 接口中的成员全都是public 的,抽象类中的成员可以是 private、默认、protected、public;
  • 接口中定义的成员变量实际上都是常量,抽象类中可以定义成员变量;
  • 接口中不能有静态方法,抽象类中可以包含静态方法;(注意:JDK1.8之后接口中可以有静态方法

6、error 和exception 的区别

相同点

Error 类和Exception 类的父类都是Throwable 类

不同点

Error 类一般是指Java 虚拟机无法解决的严重问题,如系统崩溃,虚拟机错误,内存空间不足,方法调用栈溢出等。
Exception 类表示其它因编程错误或偶然的外在因素导致的一般性问题,程序可以处理的异常,可以捕获且可能恢复。

关于异常的问题请参考下面的博文

Java里面的异常

7、throw 和 throws 的区别

throw

  • throw 语句用在方法体内,表示抛出异常,由方法体内的语句处理。
  • throw 是具体向外抛出异常的动作,所以它抛出的是一个异常实例,执行throw 一定是抛出了某种异常。

throws

  • throws 语句是用在方法声明后面,表示如果抛出异常,由该方法的调用者来进行异常的处理。
  • throws 主要是声明这个方法会抛出某种类型的异常,让它的使用者要知道需要捕获的异常的类型。
  • throws 表示出现异常的一种可能性,并不一定会发生这种异常。

8、String 、StringBuilder 、StringBuffer 的区别

  • String 由final修饰,是不可变字符序列
  • StringBuffer 可变字符序列,其效率低,但是线程安全
  • StringBuilder 可变字符序列,其效率高,但是线程不安全

更详细的解释请参考下面的博文

聊聊 StringBuffer 与 StringBuilder

9、ArrayList 和Linkedlist 区别

二者都线程不安全,但是效率比 Vector 的高

  • ArrayList 底层是以 数组 的形式保存数据,随机访问集合中的元素比LinkedList 快(原因是 LinkedList 要移动指针);
  • LinkedList 内部以 链表 的形式保存集合里面数据,它随机访问集合中的元素性能比较慢,但是新增和删除时速度比 ArrayList 快(原因是 ArrayList 要移动数据)。

更详细的解释请参考下面的博文

聊聊 ArrayList 与 LinkedList

10、Comparable 和 Comparator 的区别

ComparableComparator 都是用来实现集合中元素的比较、排序的,只是 Comparable 是在集合内部定义的方法实现的排序,Comparator 是在集合外部实现的排序,所以,如想实现排序,就需要在集合外定义 Comparator 接口的方法或在集合内实现 Comparable 接口的方法。

更详细的解释请参考下面的博文

比较器(Comparable和Comparator)

11、equals 和 hashcode 的区别

  • 如果两个对象equals相等,Java运行时环境会认为他们的hashcode一定相等。
  • 如果两个对象equals不相等,他们的hashcode有可能相等。
  • 如果两个对象hashcode相等,他们的equals不一定相等。
  • 如果两个对象hashcode不相等,他们的equals不一定相等。

由于水平有限,本博客难免有不足,恳请各位大佬不吝赐教!

已标记关键词 清除标记
1.算法是程序的灵魂,优秀的程序在对海量数据处理时,依然保持高速计算,就需要高效的数据结构和算法支撑。2.网上数据结构和算法的课程不少,但存在两个问题:1)授课方式单一,大多是照着代码念一遍,数据结构和算法本身就比较难理解,对基础好的学员来说,还好一点,对基础不好的学生来说,基本上就是听天书了2)说是讲数据结构和算法,但大多是挂羊头卖狗肉,算法讲的很少。 本课程针对上述问题,有针对性的进行了升级 3)授课方式采用图解+算法游戏的方式,让课程生动有趣好理解 4)系统全面的讲解了数据结构和算法, 除常用数据结构和算法外,还包括程序员常用10大算法:二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法、马踏棋盘算法。可以解决面试遇到的最短路径、最小生成树、最小连通图、动态规划等问题及衍生出的面试题,让你秒杀其他面试小伙伴3.如果你不想永远都是代码工人,就需要花时间来研究下数据结构和算法。教程内容:本教程是使用Java来讲解数据结构和算法,考虑到数据结构和算法较难,授课采用图解加算法游戏的方式。内容包括: 稀疏数组、单向队列、环形队列、单向链表、双向链表、环形链表、约瑟夫问题、栈、前缀、中缀、后缀表达式、中缀表达式转换为后缀表达式、递归与回溯、迷宫问题、八皇后问题、算法的时间复杂度、冒泡排序、选择排序、插入排序、快速排序、归并排序、希尔排序、基数排序(桶排序)、堆排序、排序速度分析、二分查找、插值查找、斐波那契查找、散列、哈希表、二叉树、二叉树与数组转换、二叉排序树(BST)、AVL树、线索二叉树、赫夫曼树、赫夫曼编码、多路查找树(B树B+树和B*树)、图、图的DFS算法和BFS、程序员常用10大算法、二分查找算法(非递归)、分治算法、动态规划算法、KMP算法、贪心算法、普里姆算法、克鲁斯卡尔算法、迪杰斯特拉算法、弗洛伊德算法马踏棋盘算法。学习目标:通过学习,学员能掌握主流数据结构和算法的实现机制,开阔编程思路,提高优化程序的能力。
相关推荐
©️2020 CSDN 皮肤主题: 代码科技 设计师:Amelia_0503 返回首页