Java八股文之基础篇
帮助大家理解掌握八股文,更好的应对面试。
失败尽是常态Zzz(热爱、专注、坚持)
主观能动性,复盘总结者,快速学习者。
展开
-
八股文之接口和抽象类的区别
(3)抽象类中的成员属性可以是各种类型的,接口的成员属性只能是 public static final 类型的,并且必须赋值(这个赋值是在声明变量时进行的,而不是在接口的构造方法中进行的)(4)定义关键字不同,接口使用关键字 interface 来定义,抽象类使用关键字 abstract 来定义。(1)抽象类可以包含普通方法和代码块,接口里只能包含抽象方法,静态方法和默认方法,(2)实现接口或继承抽象类的普通子类都必须实现这些抽象方法。(2)抽象类可以有构造方法,而接口没有。(1)接口和抽象类都。原创 2023-04-21 23:45:25 · 52 阅读 · 0 评论 -
八股文之多态的作用
这样,我们就可以通过一个Shape类型的变量r、c、t动态地调用它所关联的Rectangle、Circle、Triangle对应的getArea方法,分别计算出不同图形的面积。这样做,代码看起来更加简洁清晰,扩展性也更好,而且减少了重复的代码,提高了代码的可读性。可替代性:使用多态使得同样的操作可以被不同类型的对象所执行,这也就提高了代码的可替代性。简化代码:使用多态能够减少代码量,因为需要写的代码更少,而且代码更加简洁、清晰。代码可读性:使用多态可以降低代码的复杂性,提高代码的可读性。原创 2023-04-20 19:28:54 · 171 阅读 · 0 评论 -
八股文之HashMap原理
(2)如果这个位置有值,先进性equals比较,若结果为true则取代该元素,若结果为false,就使用高低位平移法将节点插入链表(JDK8以前使用头插法,但是头插法在并发扩容时可能会造成环形链表或数据丢失,而高低位平移发会发生数据覆盖的情况)HashMap的默认容量为16,默认的负载因子为0.75,当HashMap中元素个数超过容量乘以负载因子的个数时,就创建一个大小为前一次两倍的新数组,再将原来数组中的数据复制到新数组中。当数组长度到达64且链表长度大于8时,链表转为红黑树。原创 2023-04-22 14:11:44 · 60 阅读 · 0 评论 -
八股文之面向对象和面向过程的区别
相比之下,面向过程的编程思想简单直接,更适合偏向于计算机底层的操作。但随着软件开发需求的不断增加,面向对象的编程思想因其更好的复用、扩展和维护性,越来越受到人们的青睐。,将程序设计成由一些相互独立的对象组成的集合,每个对象都包含数据以及对数据的操作,即方法。面向对象(Object-Oriented)和面向过程(Procedural)是两种不同的编程思想。:同一种类型的对象可以执行多种不同的操作,从而提高代码的灵活性和可扩展性。:将数据和操作数据的方法封装在一起,以便实现信息隐藏和保护数据的安全性。原创 2023-04-19 11:54:51 · 346 阅读 · 0 评论 -
八股文之sleep和wait方法的区别
在以上示例代码中,SleepDemo类使用sleep()方法暂停了当前线程一段时间,WaitDemo类使用wait()方法来进行线程间的通信。3、 锁的持有:sleep()方法不会释放锁,即使当前线程持有某个对象的锁,调用该对象的sleep()方法也不会导致这个锁被释放掉。4、异常处理:sleep()方法会休眠指定时间后自动恢复执行,而wait()方法最好要结合notify()或notifyAll()使用,否则可能会因为死锁、饿死等问题一直处于等待状态。原创 2023-04-16 13:12:22 · 47 阅读 · 0 评论 -
八股文之Java中的线程状态、实现方式、停止方式
2. 可能导致死锁:如果一个线程占用了某一资源,在该线程被stop()方法强制停止时,该线程持有的锁可能会永远不会被释放,导致其他线程永久等待。调用interrupt()方法会将中断标志位设置为true,线程需要主动处理中断标志位,当中断标志位为true时,线程自行退出运行。1. 无法保证线程安全退出:stop()方法会随机终止线程,因此有可能在一个关键点上终止线程,导致数据不一致。线程调用了wait()、join()等方法,进入到该状态,表示线程需要等待其他线程的通知或者状态改变。原创 2023-04-16 12:57:49 · 61 阅读 · 0 评论 -
八股文之什么是反射
在上面的代码中,我们首先通过`Person.class`来获取`Person`类的`Class`对象,然后使用`getDeclaredField()`方法来获取`name`属性的`Field`对象,并使用`getDeclaredMethod()`方法来获取`sayHello()`方法。简单来说,就是通过调用Java API中的一些特定的方法,来查看、修改类的属性和方法,而不需要直接使用该类的代码。总之,反射提供了一种动态获取和操作类的成员变量和方法的方式,可以极大地扩展Java语言的能力。原创 2023-04-16 10:42:59 · 59 阅读 · 0 评论 -
八股文之深拷贝和浅拷贝
在上面的例子中,我们把`person1`和`person2`都设置成`Person(18, "Alice")`,然后通过浅拷贝将`age`和`name`的值复制到了`person2`中。需要注意的是,在使用Java自带的浅拷贝方法`clone()`时,其中包含的引用类型数据会被复制其引用地址而非数据本身,因此需要特别注意在使用`clone()`方法进行拷贝时处理好有引用类型的数据。在上面的例子中,我们通过在`Person`类中实现`Cloneable`接口并重写其`clone()`方法来实现深拷贝。原创 2023-04-16 10:30:29 · 34 阅读 · 0 评论 -
八股文之ArrayList和LinkedList的区别
在这个例子中,我们分别创建了一个ArrayList类型的arrayList和一个LinkedList类型的linkedList,然后往它们中添加了一些元素,对它们进行访问、修改、删除等基本操作。从输出结果可以看出,在相同的操作下,ArrayList通常比LinkedList运行更快,但是在某些特定场景下(如频繁插入删除元素时),LinkedList的效率更高。运行一下代码,就可以看到在删除元素的操作中,ArrayList确实要进行大量的数组元素移动,因此删除的时间代价较高。LinkedList以。原创 2023-04-16 09:52:10 · 70 阅读 · 0 评论 -
八股文之List和set的区别
在这个例子中,我们首先定义了一个List类型的fruitList和一个Set类型的fruitSet,分别往它们中添加了相同的元素。然后,我们对它们进行一些基本的操作,比如访问、修改、删除等。从输出结果可以看出,List是有序的,而且可以包含重复元素;Set是无序的,不能包含重复元素。- List是有序的集合,可以包含重复元素,允许通过索引来访问、插入、修改和删除元素;- Set是无序的集合,不允许包含重复元素,只能判断集合中是否包含某个元素。原创 2023-04-16 09:19:17 · 38 阅读 · 0 评论 -
八股文之重载和重写的区别
在这个例子中,Demo类定义了两个名称相同但参数列表不同的test方法,当我们调用test方法时,编译器会根据传入参数的类型来选择使用哪个test方法。它们都与方法有关,但它们的作用和实现方式是不同的。在这个例子中,Dog类继承自Animal类并重写了它的move方法,通过调用Dog类的move方法,父类Animal中的move方法就被覆盖掉了。总的来说,重载和重写都是Java面向对象编程中的重要概念,它们都涉及到方法的定义和使用,但它们关注的方面不同,具体实现形式也不同。原创 2023-04-15 23:46:07 · 56 阅读 · 0 评论 -
八股文之JDK、JRE、JVM之间的区别
简单来说,JDK主要是开发Java应用程序所需的最小安装包,包含一个用于开发的Java编译器和各种工具;JRE则是部署Java应用程序必须的基础组件,包括Java虚拟机和Java类库;JRE中只包含用于运行Java应用程序的组件,而没有用于开发Java应用程序的工具。它是一个抽象的计算机模型,负责将Java字节码解释为机器指令,从而实现跨平台的Java应用程序执行。它包含了一组开发工具(javac、java、javadoc等)、一系列Java基础类库、以及Java运行时环境等组件。原创 2023-04-15 23:36:16 · 117 阅读 · 0 评论 -
八股文之==和equals方法的区别
所以可以看出,`==`比较的是两个对象的引用是否一致,而`equals`方法比较的是两个对象的内容是否相同。但是,在某些情况下,也需要使用`==`来比较两个对象的引用是否一致,比如判断两个引用是否指向同一个对象实例。- `equals`: 是Object类定义的一个方法,在默认情况下,`equals`方法会调用`==`运算符进行比较,即比较两个对象的内存地址是否相同。在Java中,`==`和`equals`方法都可以用来比较两个对象是否相等,但它们的意义和作用是不同的。原创 2023-04-15 23:29:56 · 48 阅读 · 0 评论 -
八股文之泛型中extends和super的区别
extends: 用于声明一个类型参数上界,限定传入的类型必须是该类型或其子类。- super: 用于声明一个类型参数下界,限制传入的类型必须是该类型或其父类。简单来说,extends用于限定范围,使得当前类或方法只能接受某个特定的类型及其子类型作为参数;- 在泛型方法中,类型参数可以使用extends或super限定,但不能两者都用。在Java中,泛型中的extends和super是用于限定泛型类型参数的关键字。- 在泛型类中,类型参数不能同时使用extends和super限定;原创 2023-04-15 23:15:56 · 796 阅读 · 0 评论 -
八股文之String、StringBuffer、StringBuild的区别
2、StringBuffer 也是字符串类型,相比String更加灵活,并且允许修改字符串的内容,是可变的(mutable),线程安全的类,适合多线程环境下使用,它的方法都带有 synchronized 关键字。3、StringBuilder 与 StringBuffer 类似,是可变的字符序列,但线程不安全,只适用于单线程下的字符串操作。String、StringBuffer 和 StringBuilder 都是 Java 中处理字符串的类,它们之间主要的区别在于安全性、可变性和性能。原创 2023-04-15 20:50:59 · 448 阅读 · 0 评论