广告
返回顶部
首页 > 资讯 > 精选 >Java面试问题知识点总结
  • 220
分享到

Java面试问题知识点总结

java面试ava 2023-05-31 16:05:40 220人浏览 薄情痞子
摘要

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下。1. Java中的原

本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下。

1. Java中的原始数据类型都有哪些,它们的大小及对应的封装类是什么?

(1)boolean

   boolean数据类型非true即false。这个数据类型表示1 bit的信息,但是它的大小并没有精确定义。

   《Java虚拟机规范》中如是说:“虽然定义了boolean这种数据类型,但是只对它提供了非常有限的支持。在Java虚拟机中没有任何供boolean值专用的字节码指令,Java语言表达式所操作的boolean值,在编译之后都使用Java虚拟机中的int数据类型来代替,而boolean数组将会被编码成Java虚拟机的byte数组,每个元素boolean元素占8位”。这样我们可以得出boolean类型单独使用是4个字节,在数组中又是1个字节。那虚拟机为什么要用int来代替boolean呢?为什么不用byte或short,这样不是更节省内存空间吗?实际上,使用int的原因是,对于当下32位的CPU来说,一次进行32位的数据交换更加高效。

    综上,我们可以知道:官方文档对boolean类型没有给出精确的定义,《Java虚拟机规范》给出了“单独时使用4个字节,boolean数组时1个字节”的定义,具体还要看虚拟机实现是否按照规范来,所以1个字节、4个字节都是有可能的。这其实是一种时空权衡。

    boolean类型的封装类是Boolean。

(2)byte——1 byte——Byte

(3)short——2 bytes——Short

(4)int——4 bytes——Integer

(5)long——8 bytes——Long

(6)float——4 bytes——Float

(7)double——8 bytes——Double

(8)char——2 bytes——Character

2. 谈一谈”==“与”equals()"的区别。

    《Think in Java》中说:“关系操作符生成的是一个boolean结果,它们计算的是操作数的值之间的关系”。

    "=="判断的是两个对象的内存地址是否一样,适用于原始数据类型和枚举类型(它们的变量存储的是值本身,而引用类型变量存储的是引用);equals是Object类的方法,Object对它的实现是比较内存地址,我们可以重写这个方法来自定义“相等”这个概念。比如类库中的String、Date等类就对这个方法进行了重写。

    综上,对于枚举类型和原始数据类型的相等性比较,应该使用"==";对于引用类型的相等性比较,应该使用equals方法。

3. Java中的四种引用及其应用场景是什么?

强引用: 通常我们使用new操作符创建一个对象时所返回的引用即为强引用

软引用: 若一个对象只能通过软引用到达,那么这个对象在内存不足时会被回收,可用于图片缓存中,内存不足时系统会自动回收不再使用的Bitmap

弱引用: 若一个对象只能通过弱引用到达,那么它就会被回收(即使内存充足),同样可用于图片缓存中,这时候只要Bitmap不再使用就会被回收

虚引用: 虚引用是Java中最“弱”的引用,通过它甚至无法获取被引用的对象,它存在的唯一作用就是当它指向的对象回收时,它本身会被加入到引用队列中,这样我们可以知道它指向的对象何时被销毁。

4. object中定义了哪些方法?

    clone(), equals(), hashCode(), toString(), notify(), notifyAll(), wait(), finalize(), getClass()

5. hashCode的作用是什么?

    请参见散列表的基本原理与实现

6. ArrayList, LinkedList, Vector的区别是什么?

ArrayList: 内部采用数组存储元素,支持高效随机访问,支持动态调整大小

LinkedList: 内部采用链表来存储元素,支持快速插入/删除元素,但不支持高效地随机访问

Vector: 可以看作线程安全版的ArrayList

7. String, StringBuilder, StringBuffer的区别是什么?

String: 不可变的字符序列,若要向其中添加新字符需要创建一个新的String对象

StringBuilder: 可变字符序列,支持向其中添加新字符(无需创建新对象)

StringBuffer: 可以看作线程安全版的StringBuilder

8. Map, Set, List, Queue、Stack的特点及用法。

Map<K, V>:  Java中存储键值对的数据类型都实现了这个接口,表示“映射表”。支持的两个核心操作是get(Object key)以及put(K key, V value),分别用来获取键对应的值以及向映射表中插入键值对。

Set<E>: 实现了这个接口的集合类型中不允许存在重复的元素,代表数学意义上的“集合”。它所支持的核心操作有add(E e),remove(Object o), contains(Object o),分别用于添加元素,删除元素以及判断给定元素是否存在于集中。

List<E>: Java中集合框架中的列表类型都实现了这个接口,表示一种有序序列。支持get(int index), add(E e)等操作。

Queue<E>: Java集合框架中的队列接口,代表了“先进先出”队列。支持add(E element), remove()等操作。

Stack<E>: Java集合框架中表示堆栈的数据类型,堆栈是一种“后进先出”的数据结构。支持push(E item), pop()等操作。

    更详细的说明请参考官方文档,对相关数据结构不太熟悉的同学可以参考《算法导论》或其他相关书籍。

9. HashMap和HashTable的区别

HashTable是线程安全的,而HashMap不是

HashMap中允许存在null键和null值,而HashTable中不允许

    更加详细的分析请参考深入解析HashMap、HashTable 

10. HashMap的实现原理

    简单的说,HashMap的底层实现是“基于拉链法的散列表”。详细分析请参考深入解析HashMap、HashTable

11. ConcurrentHashMap的实现原理

    ConcurrentHashMap是支持并发读写的HashMap,它的特点是读取数据时无需加,写数据时可以保证加锁粒度尽可能的小。由于其内部采用“分段存储”,只需对要进行写操作的数据所在的“段”进行加锁。关于ConcurrentHashMap底层实现的详细分析请参考Java并发编程:并发容器之ConcurrentHashMap

12. TreeMap, LinkedHashMap, HashMap的区别是什么?

HashMap的底层实现是散列表,因此它内部存储的元素是无序的;

TreeMap的底层实现是红黑树,所以它内部的元素的有序的。排序的依据是自然序或者是创建TreeMap时所提供的比较器(Comparator)对象。

LinkedHashMap能够记住插入元素的顺序。

更加详细的说明请参考HashMap,LinkedMap,TreeMap的区别

13. Collection与Collections的区别是什么?

    Collection<E>是Java集合框架中的基本接口;Collections是Java集合框架提供的一个工具类,其中包含了大量用于操作或返回集合的静态方法。

    对Java集合框架还不太熟悉的小伙伴请参考Java核心技术点之集合框架

14. 对于“try-catch-finally”,若try语句块中包含“return”语句,finally语句块会执行吗?

    答案是会执行。只有两种情况finally块中的语句不会被执行:

调用了System.exit()方法;

JVM“崩溃”了。 

15. Java中的异常层次结构

    Java中的异常层次结构如下图所示:

 Java面试问题知识点总结

    我们可以看到Throwable类是异常层级中的基类。Error类表示内部错误,这类错误使我们无法控制的;Exception表示异常,RuntimeException及其子类属于未检查异常,这类异常包括ArrayIndexOutOfBoundsException、NullPointerException等,我们应该通过条件判断等方式语句避免未检查异常的发生。IOException及其子类属于已检查异常,编译器会检查我们是否为所有可能抛出的已检查异常提供了异常处理器,若没有则会报错。对于未检查异常,我们无需捕获(当然Java也允许我们捕获,但我们应该做的事避免未检查异常的发生)。

16. Java面向对象的三个特征与含义

     三大特征:封装、继承、多态。详细介绍请戳Java面向对象三大特性

17. Override, Overload的含义与区别

Override表示“重写”,是子类对父类中同一方法的重新定义

Overload表示“重载”,也就是定义一个与已定义方法名称相同但签名不同的新方法

18. 接口与抽象类的区别

    接口是一种约定,实现接口的类要遵循这个约定;抽象类本质上是一个类,使用抽象类的代价要比接口大。接口与抽象类的对比如下:

抽象类中可以包含属性,方法(包含抽象方法与有着具体实现的方法),常量;接口只能包含常量和方法声明。

抽象类中的方法和成员变量可以定义可见性(比如public、private等);而接口中的方法只能为public(缺省为public)。

一个子类只能有一个父类(具体类或抽象类);而一个接口可以继承一个多个接口,一个类也可以实现多个接口。

子类中实现父类中的抽象方法时,可见性可以大于等于父类中的;而接口实现类中的接口 方法的可见性只能与接口中相同(public)。

19. 静态内部类与非静态内部类的区别

    静态内部类不会持有外围类的引用,而非静态内部类会隐式持有外围类的一个引用。

    欲进一步了解内部类,请戳Java核心技术点之内部类 

20. Java中多态的实现原理

   所谓多态,指的就是父类引用指向子类对象,调用方法时会调用子类的实现而不是父类的实现。多态的实现的关键在于“动态绑定”。详细介绍请戳Java动态绑定的内部实现机制

21. 简述Java中创建新线程的两种方法

继承Thread类(假设子类为MyThread),并重写run()方法,然后new一个MyThread对象并对其调用start()即可启动新线程。

实现Runnable接口(假设实现类为MyRunnable),而后将MyRunnable对象作为参数传入Thread构造器,在得到的Thread对象上调用start()方法即可。

22. 简述Java中进行线程同步的方法

volatile: Java Memory Model保证了对同一个volatile变量的写happens before对它的读;

synchronized: 可以来对一个代码块或是对一个方法上锁,被“锁住”的地方称为临界区,进入临界区的线程会获取对象的monitor,这样其他尝试进入临界区的线程会因无法获取monitor而被阻塞。由于等待另一个线程释放monitor而被阻塞的线程无法被中断。

ReentrantLock:  尝试获取锁的线程可以被中断并可以设置超时参数。

    更加详细的介绍请戳Java核心技术点之多线程

23. 简述Java中具有哪几种粒度的锁

    Java中可以对类、对象、方法或是代码块上锁。更加详细的介绍请戳Java核心技术点之多线程

24. 给出“生产者-消费者”问题的一种解决方案

    使用阻塞队列:

public class BlockingQueueTest { private int size = 20; private ArrayBlockingQueue<Integer> blockingQueue = new ArrayBlockingQueue<>(size);  public static void main(String[] args) { BlockingQueueTest test = new BlockingQueueTest(); Producer producer = test.new Producer(); Consumer consumer = test.new Consumer();  producer.start(); consumer.start(); }  class Consumer extends Thread{ @Override public void run() { while(true){ try { //从阻塞队列中取出一个元素 queue.take(); System.out.println("队列剩余" + queue.size() + "个元素"); } catch (InterruptedException e) {  } } } }  class Producer extends Thread{  @Override public void run() { while (true) { try { //向阻塞队列中插入一个元素 queue.put(1); System.out.println("队列剩余空间:" + (size - queue.size())); } catch (InterruptedException e) {  } } } }}

--结束END--

本文标题: Java面试问题知识点总结

本文链接: https://www.lsjlt.com/news/226955.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • Java面试问题知识点总结
    本篇文章会对面试中常遇到的Java技术点进行全面深入的总结(阅读本文需要有一定的Java基础;若您初涉Java,可以通过这些问题建立起对Java初步的印象,待有了一定基础后再后过头来看收获会更大),喜欢的朋友可以参考下。1. Java中的原...
    99+
    2023-05-31
    java 面试 ava
  • Java基础面试题&知识点总结(上篇)
    大家好,我是栗筝i,从 2022 年 10 月份开始,我持续梳理出了全面的 Java 技术栈内容,一方面是对自己学习内容进行整合梳理,另一方面是希望对大家有所帮助,使我们一同进步。得到了很多读者的...
    99+
    2023-10-25
    Java面试题 Java知识点 Java基础面试题
  • mysql知识点+面试总结
    目录 1 mysql介绍 2 数据库常见语法 3 数据库表的常见语法 4 其他常见语法(日期,查询表字段) 5 JDBC开发步骤 6 索引 6.1 索引常见语法 7 常见面试总结 8 java集成数据库监控页面 1 mysql介绍 ...
    99+
    2023-09-04
    mysql 面试 数据库
  • Java多线程知识点全面总结
    目录Java多线程知识点总结(1)什么是进程什么是线程?(2)多线程的运行状态(3)线程的创建和使用(4)Runnable 接口实现多线程(5)Callable接口实现多线程多线程常...
    99+
    2022-11-13
  • Java线程池全面知识点总结
    本篇内容介绍了“Java线程池全面知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!原理线程池的原理非常简单,这里用处理流程来概括:线...
    99+
    2023-06-25
  • java面试知识点
    Java文件经过JVM编译成字节码文件,即.class文件,将字节码文件在不同的操作系统中运行时,操作系统再将字节码文件编译成机器码文件。这就是Java跨平台首先明确一点,java 的 GC 回收是完全自动的,没有提供相关 api 手动回收...
    99+
    2020-03-24
    java教程 java 面试
  • java中Supplier知识点总结
    1、说明 这个接口是提供者的意思,只有一个抽象的get,没有默认的方法和静态的方法,导入一个泛T,get方法,返回一个泛T。 supplier也用于创建对象,但与传统的创建对象语法不...
    99+
    2022-11-12
  • JAVA基础知识点总结
    文章目录 前言一、JAVA简介二、基础语法面向对象StringIntegerObject异常IO序列化Java 泛型注解反射 前言 一、JAVA简介 Java 是一门面向对象的编程语言。 语言特点:面向对象,平台无关性,支持多...
    99+
    2023-08-18
    java jvm 开发语言
  • H3C NE 题库知识点总结
    ①启动或关闭Windows功能  :控制面板-----程序-------启动或关闭Windows功能②TFTP 与FTPTFTP是一个传输文件的简单协议,它其于UDP协议而实现,但是我们也不能确定...
    99+
    2022-10-18
  • 接口测试的知识点总结
    这篇文章主要介绍“接口测试的知识点总结”,在日常操作中,相信很多人在接口测试的知识点总结问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”接口测试的知识点总结”的疑惑有所帮助!接...
    99+
    2022-10-19
  • Java运算符知识点总结
    本篇内容介绍了“Java运算符知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Java 运算符计算机的最基本用途之一就是执行数学运算...
    99+
    2023-06-02
  • JAVA IO流知识点全总结
    文件的创建方式 首先查看File类的构造器,得出有三种常见的创建方式 直接传入构建的文件路径,通过构造器 File(String pathname),直接传入文件路径,以下为演示代码(在IO流的操作中总是伴随着编译时异常,可使用Alt+E...
    99+
    2023-08-16
    java intellij-idea
  • React-hooks面试考察知识点汇总小结(推荐)
    目录什么是hooks?解决了什么问题?Hook 简介Hook APIuseState指定初始 state惰性初始化自定义 Hook什么是hooks?解决了什么问题? Hooks 是r...
    99+
    2022-11-13
  • 可能是全网最好的MySQL重要知识点/面试题总结
    文末有公众号二维码,欢迎关注获取笔主最新更新文章,并可免费获取笔主总结的《Java面试突击》以及Java工程师必备学习资源。 @[toc] 什么是MySQL MySQL 是一种关系型数据库,在Java企业级开发中非常常用,因为 MyS...
    99+
    2022-02-17
    可能是全网最好的MySQL重要知识点/面试题总结
  • 面试题总结:可能是全网最好的MySQL重要知识点
    作者:Snailclimb 整理编辑:SegmentFault本文原载于SegmentFault专栏JavaGuide,如侵删。标题有点标题党的意思,但希望你在看了文章之后不会有这个想法——这篇文...
    99+
    2022-10-18
  • JAVA JVM面试题总结
    目录JVM 的主要作用是什么?请你描述一下 Java 的内存区域?请你描述一下 Java 中的类加载机制?加载验证文件格式验证元数据验证字节码验证符号引用验证准备解析初始化使用卸载在...
    99+
    2022-11-12
  • Java中的引用知识点总结
    本篇内容介绍了“Java中的引用知识点总结”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!强引用:默认情况下,对象采用的均为强引用(这个对象的...
    99+
    2023-06-05
  • 详解Java泛型(知识点总结)
    概念来源:Java在设计开始之前不是通用的,直到它在JDK 1.5中被引入。Java泛型是通过擦除实现的。你知道什么是擦除吗?往下看。概念:常规类和方法只能使用特定类型;基本类型或自定义类。如果要编写可应用于多种类型代码的代码,这种严格的限...
    99+
    2021-05-06
    java入门 Java 泛型
  • python 知识点/面试题目总结(八股文)算法工程师必备
    python 知识点/面试题目总结(八股文)算法工程师必备 1. python的内存管理以及垃圾回收机制2. python中的pass有什么作用3. python的strip4. python...
    99+
    2023-09-09
    面试 python 算法
  • Java线程面试题的知识点有哪些
    本篇内容主要讲解“Java线程面试题的知识点有哪些”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Java线程面试题的知识点有哪些”吧!一、sychronied 修饰普通方法和静态方法的区别?什么...
    99+
    2023-07-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作