Java面试题基础篇(一)

2021/12/14 20:19:11

本文主要是介绍Java面试题基础篇(一),对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

Java面试题基础篇(一)

  • Java面试题基础篇(一)
    • 1.jre和jdk有什么区别?
    • 2.==与equals的区别?
    • 3.接口和抽象类的共同点和不同点?
    • 4.lamda表达式的优缺点?
    • 5.String,StringBuilder,StringBuffer的区别?
    • 6.Java并发控制的三种方式
    • 7.怎么防止前端重复提交?
    • 8.Java异常的类型?
    • 9.MD5 16位加密和32位加密有什么区别?
    • 10.Java 中有几种引用?
    • 11.什么是java虚拟机?
    • 12.面向对象的三大基本特征和五大基本原则。
    • 13.多态的优点?
    • 14.Java如何保证线程安全?
    • 15.JVM有哪些组件?

Java面试题基础篇(一)

1.jre和jdk有什么区别?

    (1)jre是java的运行环境,包含了jvm和java的类库。
    (2)jdk是java开发工具包,是程序员使用java语言编程java程序时所用到的开发包。
    (3)jdk和jre一个用于开发一个用于执行

2.==与equals的区别?

    (1)==是一个比较运算符,基本类型比较的时值,引用类型比较的时地址。
    (2)equals是一个方法,只能比较引用数据类型,重写前比较的是地址,重写后比较的是属性的值。

3.接口和抽象类的共同点和不同点?

共同点:
(1)都不能被实例化
(2)都包含抽象方法
不同点:
(1)接口只能存在抽象方法,静态方法和默认方法,不能有普通方法,而抽象类可以有普通方法。
(2)接口中只能定义静态常量,不能定义普通成员变量,抽象类既可以有普通成员变量,又可以定义静态常量。
(3)接口中不包含构造器,抽象类可以有构造器,抽象类中的构造器并不是构造对象的,而是用来给子类调用的。
(4)接口不能包含初始化块,而抽象类可以。
(5)一个类最多只有一个父类,包括抽象类,但是可以实现多个接口。
(6)子类和抽象类是从属关系(IS-A),而接口是组合、调用的关系。(这也是为什么大多数调用都需要–able的接口)

4.lamda表达式的优缺点?

(1)Lamda可以捕捉外围变量,而方法引用不行
    ①优点:
        1)使代码更整洁清楚。
        2)非常容易并行计算。
    ②缺点:
        1)若不用并行计算,很多时候计算速度没有比传统的for循环快(并行计算有时需要预热才显示出效率优势)
        2)不容易调试
        3)若其他程序员没有学过 lambda 表达式,代码不容易让其他语言的程序员看懂。

5.String,StringBuilder,StringBuffer的区别?

    (1)String是不可变的:适用于少量的字符串操作
    (2)StringBuffer:是线程安全的:适用于多线程下在字符串缓冲区进行大量操作。
    (3)StringBuilder:是非线程安全的:使用与单线程下在字符串缓冲区进行大量操作,速度是最快的。

6.Java并发控制的三种方式

    (1)同步方法Synchronized
    (2)同步代码块Synchronized
    (3)重入锁ReentrantLock

7.怎么防止前端重复提交?

    (1)提交后屏蔽提交按钮?(通过js控制)
    (2)前端生成唯一id,后端通过唯一索引
    (3)利用Session防止表当重复提交

8.Java异常的类型?

(1)Java中包含了两种异常
    ①未检查(unchecked)异常
        1)可以不必捕获或抛出
    ②检查异常(checked)异常
        1)必须被显示的捕获或传递
        2)继承自java.langRuntimeException或java.lang.Error类。

9.MD5 16位加密和32位加密有什么区别?

    (1)16位加密就是从32位MD5散列中把中间16位提取出来!
    (2)其实破解16位MD5散列要比破解32位MD5散列还慢
    (3)因为他多了一个步骤,就是使用32位加密后再把中间16位提取出来, 然后再进行对比
    (4)而破解32位的则不需要,加密后直接对比就可以了

10.Java 中有几种引用?

    无论是通过引用计算法判断对象的引用数量,还是通过可达性分析算法判断对象的引用链是否可达,判定对象是否存活都与“引用“有关。在Java语言钟,将引用又分为强引用、软引用、弱引用、虚引用4种,这四种引用强度一次逐渐减弱。
(1)强引用:在程序代码中普遍存在的,类似Object obj = new Object() 这嘞引用只要强引用还存在,垃圾回收器永远不会回收掉背引用的对象。无论引用计数算法还是可达性分析算法都是基于强引用而言的。
(2)软引用:用来描述一些还有用但并非必须的对象。对于软引用关联着的对象,在系统将要发生内存溢出异常之前,将会把这些对象列进回收范围之中进行第二次回收。如果这次回收之后还没有足够的内存,才会抛出内存溢出异常。
(3)弱引用:也是用来描述非必须对象的,但是它的强度比软引用更弱一些,被弱引用关联的对象只能生存到下一次垃圾收集器发生之前。当垃圾收集器工作时,无论当前内存是否足够,都会回收掉只被弱引用关联的对象。
(4)虚引用:也叫幽灵引用或幻影引用,是最弱的一种引用关系。一个对象是否有虚引用的存在,完全不会对其生存时间构成影响,也无法通过虚引用来取得一个对象的实例。它的作用是能在这个对象被垃圾收集器回收时收到一个系统通知。

11.什么是java虚拟机?

    (1)由java语言编写的程序需要经过编译才能运行,java会将程序编译成平台无关的字节码文件,而这些字节码文件不能之间运行,必须通过解析器来解释执行,而java语言里负责解析执行字节码的就是java虚拟机。
    (2)不同平台的JVM都是不同的,但它们都提供了相同的接口,JVM是java程序跨平台的关键部分,只要为不同的平台实现了相同的虚拟机,编译后的java字节码就可以在该平台上运行,显然,相同的字节码程序需要在不同的平台上运行,几乎是不可能的,只有通过中间转换器才可以实现,JVM就是这个中间转换器。

12.面向对象的三大基本特征和五大基本原则。

(1)抽象:
    ①抽象就是忽略一个主题与当前目标无关的那些方面,以便冲分的注意到与当前目标有关的方面,抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用部分细节。
    ②抽象包括两个方面,一个是过程抽象,一个是数据抽象,过程抽象是指任何一个明确定义功能的操作都可被使用者看作单个实例看待,尽管这个操作实际上可能由一系列更低的操作来完成。数据抽象定义了数据类型和施加于该类型对象上的操作,并限定了对象的值只能通过使用这些操作修改和观察。
(2)封装:
    ①封装就是将类中的属性以及方法行为私有化起来,让其它的类不能直接访问,只能通过指定的接口来操作封装类中的数据。
    ②封装的目的就是增加安全性和简化编程,使用者不需要了解实现的细节,只需要通过外部接口以特定的访问权限来使用类的成员。
(3)继承:
    ①继承是面向对象基本特征之一,继承机制允许创建分等级层次的类,继承就是子类继承父类的特征和行为,使得子类对象(实例)具有父类的实例域和方法,或子类从父类继承方法,使得了子类具有和父类相同的行为。
    ②提高代码的重用性。
    ③代码共享,减少创类的工作量,每个子类都有父类的方法和属性。
(4)多态:
    ①多态就是:同一个行为具有多个不同的表现形式或形态的能力,是指一个类实例(对象)的相同方法在不同的情况有不同的表现形式。多态机制使具有不同内部结构的对象可以共享相同的外部接口,这意味着,虽然针对不同对象的具体操作不同,但是可以通过一个公共的类,使他们可以通过相同的方法给予调用。
    ②多态存在的三个必要条件:
    1)继承
    2)重写(子类继承父类后对父类的方法进行重新定义)
    3)父类引用指向子类实例

13.多态的优点?

    (1)可替换性(substitutability)。多态对已存在代码具有可替换性。例如,多态对圆Circle类工作,对其他任何圆形几何体,如圆环,也同样工作。
    (2)可扩充性(extensibility)。多态对代码具有可扩充性。增加新的子类不影响已存在类的多态性、继承性,以及其他特性的运行和操作。实际上新加子类更容易获得多态功能。例如,在实现了圆锥、半圆锥以及半球体的多态基础上,很容易增添球体类的多态性
    (3)接口性(interface-ability)。多态是超类通过方法签名,向子类提供了一个共同接口,由子类来完善或者覆盖它而实现的。如图8.3 所示。图中超类Shape规定了两个实现多态的接口方法,computeArea()以及computeVolume()。子类,如Circle和Sphere为了实现多态,完善或者覆盖这两个接口方法。
    (4)灵活性(flexibility)。它在应用中体现了灵活多样的操作,提高了使用效率。
    (5)简化性(simplicity)。多态简化对应用软件的代码编写和修改过程,尤其在处理大量对象的运算和操作时,这个特点尤为突出和重要。

14.Java如何保证线程安全?

    (1)原子性:提供互斥访问,同一时刻只能有一个线程对数据进行操作。
    (2)可见性:一个线程对主内存的修改可以及时地被其他线程看到。
    (3)有序性:一个线程观察其他线程中的指令执行顺序,由于指令是重排序的,该观察结果一般杂乱无序。

15.JVM有哪些组件?

(1)类加载器
    (2)运行时数据区(内存模型)
    (3)执行引擎
    (4)本地方法接口



这篇关于Java面试题基础篇(一)的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程