Java基础语法:从面向对象到数据类型等多方面知识解读
java基础语法

1.面向对象和面向过程的区别?
2. Java 语言有哪些特点
3. 关于 JVM JDK 和 JRE 最详细通俗的解答
4. Oracle JDK 和 OpenJDK 的对比
5. Java 和 C++的区别
什么是 Java 程序的主类呢?应用程序的主类和小程序的主类有哪些不同之处呢?
7. Java 应用程序与小程序之间有那些差别
8. 字符型常量和字符串常量的区别
构造器 Constructor 能否被 override 呢? 构造器的 override 情况是怎样的呢? 关于构造器 Constructor 是否可被 override 这个问题,具体情况是怎样的呢?
10. 重载和重写的区别
11. Java 面向对象编程三大特性: 封装 继承 多态
String、StringBuffer 和 StringBuilder 的区别分别是什么?为什么 String 是不可变的?
13. 自动装箱与拆箱
14. 在一个静态方法内调用一个非静态成员为什么是非法的
在 Java 中定义一个构造方法的作用,这个构造方法不做事且没有参数。
16. import java 和 javax 有什么区别
17. 接口和抽象类的区别是什么
18. 成员变量与局部变量的区别有那些
创建一个对象使用什么运算符呢?对象实体与对象引用之间存在怎样的不同呢?
返回值在类的方法里起到怎样的作用?
一个类的构造方法的作用是什么呢?如果一个类没有声明构造方法,那么这个程序能正确执行吗?为什么会这样呢?
22. 构造方法有哪些特性
23. 静态方法和实例方法有何不同
24. 对象的相等与指向他们的引用相等,两者有什么
在调用子类的构造方法之前,会首先去调用父类没有参数的构造方法。这样做的目的是什么呢?是为了进行某些初始化操作或者满足特定的编程需求等。它与其他情况有所不同,有着特定的作用和意义。
26. == 与 equals(重要)
27. hashCode 与 equals(重要)
28. 为什么 Java 中只有值传递
简述线程的基本概念,简述程序的基本概念,简述进程的基本概念。以及说明它们之间的关系是什么。
30. 线程有哪些基本状态?
31 关于 final 关键字的一些总结
32 Java 中的异常处理
33 Java 序列化中如果有些字段不想进行序列化 怎么办
34 获取用键盘输入常用的的两种方法
java集合
1. ArrayList 和 Vector 的区别。
说一说 ArrayList 的存储性能和特性。说一说 Vector 的存储性能和特性。说一说 LinkedList 的存储性能和特性。
快速失败和安全失败的区别究竟是什么呢?
4. hashmap 的数据结构。
5. HashMap 的工作原理是什么?
6. Hashmap 什么时候进行扩容呢?
List 接口在存取元素时,具有有序可重复的特点;Map 接口在存取元素时,具有键值对结构、键不可重复值可重复的特点;Set 接口在存取元素时,具有元素不可重复的特点。
Set 中的元素不能重复。那么,用什么方法来区分元素是否重复呢?是使用 == 还是 equals() 呢?它们之间有什么区别呢?
两个对象的值相同,即 x.equals(y) 的结果为 true,但它们的 hash code 却可以不同,这句话对不对?
10. heap 和 stack 有什么区别。
11. Java 集合类框架的基本接口有哪些?
12. HashSet 和 TreeSet 有什么区别?
13. HashSet 的底层实现是什么?
14. LinkedHashMap 的实现原理?
为什么集合类没有达成 Cloneable 接口以及 Serializable 接口的实现呢? 为什么集合类没有把 Cloneable 接口和 Serializable 接口给实现出来呢? 为什么集合类没有让 Cloneable 接口和 Serializable 接口得以实现呢?
16. 什么是迭代器 (Iterator)?
Iterator 和 ListIterator 具体的区别在哪里?
数组 (Array) 与列表 (ArrayList) 存在哪些区别?在何种情况下应当使用 Array 而非 ArrayList 呢?
19. Java 集合类框架的最佳实践有哪些?
Set 中的元素不能重复。那么,用何种方法来区分元素是否重复呢?是使用 == 还是 equals()呢?它们之间有什么区别?
列出 Comparable 和 Comparator 接口的区别。
Collection 与 Collections 的区别在于:Collection 通常指单个的集合对象,是集合的基本概念;而 Collections 则是集合类的工具类,提供了一系列用于操作集合的静态方法,如排序、查找、同步等。
并发编程面试题
Synchronized 相 关 问 题
问 题 一 :是否使用过 Synchronized ?它的原理是什么?
问题二:刚才你提到获取对象的锁,那这个“锁”究竟是什么呢?怎样去确定对象的锁呢?
问题三:什么是可重入性?为什么说 Synchronized 是可重入锁?
JVM 针对 Java 的原生锁做出了一系列的优化举措。
问题五:为何称 Synchronized 为非公平锁?
问 题 六 :什 么 是 锁 消 除 和 锁 粗 化 ?
问题七:为何说 Synchronized 是一个悲观锁?乐观锁的实现原理是什么?什么是 CAS?它有哪些特性?
问 题 八 :乐 观 锁 一 定 就 是 好 的 吗 ?
可重入锁 ReentrantLock 以及其他与显式锁相关的问题
问题一:与 Synchronized 相比,可重入锁 ReentrantLock 的实现原理有哪些不同之处?
问题二:请谈谈 AQS 框架是怎样的情况呢?
问题三:请详细对比 Synchronized 和 ReentrantLock 的不同之处,要尽可能详尽。请详细对比 Synchronized 和 ReentrantLock 的相同之处,要尽可能详尽。
问题四:ReentrantLock 是怎样实现可重入性的呢?
问题五:除了 ReentrantLock 之外,你还接触过 JUC 中的哪些并发工具?
请谈谈 StampedLock 是什么。
问题七:怎样使 Java 的线程彼此实现同步?你了解过哪些同步器?请分别进行介绍。
问题八:CyclicBarrier 和 CountDownLatch 看起来较为相似,那它们有哪些不同呢?CyclicBarrier 是用于协调多个线程同步到达某个点,然后继续执行;而 CountDownLatch 主要是用于等待一组线程完成任务后再继续执行。
Java 线 程 池 相 关 问 题
Java 中的线程池是怎样实现的呢? 它通过特定的机制和方式来达成线程的管理和复用等功能。 具体来说,是利用一些相关的类和方法来构建和操作线程池,以满足不同的并发需求。 这些类和方法在 Java 的库中被定义和提供,开发者可以根据具体情况使用它们来创建和控制线程池。
问题二:创建线程池的核心构造参数有哪些?
问题三:线程池中的线程是如何创建的?是一开始就随着线程池的启动而创建好的吗?
问题四:提到可以通过配置不同参数创建出不同的线程池,那么在 Java 中默认实现好的线程池有哪些呢?请比较它们的异同。
问题六:在 Java 线程池中怎样提交线程呢? 或者 问题六:如何在 Java 线程池中把线程给提交出去呢? 或者 问题六:怎样在 Java 线程池中提交线程呀?
Java 内 存 模 型 相 关 问 题
问题一:Java 的内存模型是什么?在 Java 中,各个线程是如何彼此看到对方的变量的?
问题二:谈谈 volatile 的特点是什么,以及它为何能保证变量对所有线程的可见性?
问题三:volatile 能够保证线程间的变量可见性,这是否意味着基于 volatile 变量的运算就是并发安全的?
4. 不同点方面:volatile 主要侧重于变量的可见性,而 Synchronized 侧重于线程的同步和互斥;volatile 不会造成线程阻塞,而 Synchronized 可能会导致线程阻塞;volatile 不能替代 Synchronized 来实现复杂的同步逻辑,而 Synchronized 可以实现更复杂的同步机制。
问题五:请说一说 ThreadLocal 是怎样实现解决并发安全的呢?
很多人都说要谨慎使用 ThreadLocal 。谈谈你的理解,使用 ThreadLocal 需要注意哪些方面呢?
并发编程面试题
现在存在 T1、T2、T3 这三个线程。你要如何确保 T2 是在 T1 执行完毕之后才开始执行呢?同时,又要怎样保证 T3 是在 T2 执行完毕之后才开始执行呢?
在 Java 里,Lock 接口相较于 synchronized 块有哪些优势呢?如果要实现一个高效的缓存,这个缓存要允许多个用户进行读取,同时只允许一个用户进行写入,以此来维持它的完整性,那么应该怎样去实现它呢?
sleep 方法则是让线程暂停执行一段时间,不会释放锁。
4)用 Java 实现阻塞队列。
5)用 Java 写代码来解决生产者——消费者问题。
6)用 Java 编程一个会导致死锁的程序,你将怎么解决?
7) 什么是原子操作,Java 中的原子操作是什么?
Java 中的 volatile 关键的作用是什么?它是如何被使用的?在 Java 中它与 synchronized 方法有哪些不同之处?
9) 什么是竞争条件?你怎样发现和解决竞争?
你将怎样去使用 threaddump 呢?你将怎样去分析 Thread dump 呢?
为什么在调用 start()方法时会执行 run()方法呢?为什么我们不能直接去调用 run()方法呢?
12) Java 中你怎样唤醒一个阻塞的线程?
在 Java 中,CycliBarriar 与 CountdownLatch 存在哪些区别?
14) 什么是不可变对象,它对写并发应用有什么帮助?
你在多线程环境中遇到的常见问题有哪些?你又是怎样去解决这些问题的呢?
JVM面试题
1. 内存模型以及分区,需要详细到每个区放什么。
堆里面有不同的分区,包括 Eden 分区,还有 survival 分区(其范围是 from 到 to),以及老年代,它们各自有着不同的特点。
3. 对象创建方法,对象的内存分配,对象的访问定位。
4. GC 的两种判定方法:
5. SafePoint 是什么
GC 的三种收集方法分别是标记清除、标记整理和复制算法。标记清除的原理是标记出需要被清除的对象,然后清除这些对象;标记整理的原理是标记出需要移动的对象,然后将这些对象整理到一起;复制算法的原理是将存活的对象复制到另一个区域,然后清除原来的区域。标记清除通常用于老年代,标记整理通常用于新生代,复制算法通常用于新生代。如果要优化收集方法,可以考虑结合多种算法的优点,或者根据不同的场景选择合适的算法。
GC 收集器包含哪些种类?CMS 收集器具有哪些特点?G1 收集器又有哪些特点?
Minor GC 在什么时候发生?Full GC 在什么时候发生?
常用的几种内存调试工具分别是:jmap、jstack、jconsole、jhat
10. 类加载的几个过程:
11.JVM 内存分哪几个区,每个区的作用是什么?
如何去判断一个对象是否处于存活状态呢?(或者是关于 GC 对象的判定方式是怎样的呢?)
13.简述 java 垃圾回收机制?
14.java 中垃圾收集的方法有哪些?
15.java 内存模型
16.java 类加载过程?
17. 简述 java 类加载机制?
18. 类加载器双亲委派模型机制?
19.什么是类加载器,类加载器有哪些?
简述 Major GC 的相关内容。
jvm面试题
一.Java 类加载过程?
二.描述一下 JVM 加载 Class 文件的原理机制?
三 Java 内存分配。
四.GC 是什么? 为什么要有 GC?
五. 简述 Java 垃圾回收机制。
如何去判断一个对象是否处于存活状态呢?(亦或是关于 GC 对象的判定方式)
七. 垃圾回收的优点和原理。并考虑 2 种回收机制。
有哪些办法可以主动通知虚拟机进行垃圾回收?
九. Java 中会存在内存泄漏吗,请简单描述。
十. 深拷贝和浅拷贝。
System.gc() 会做什么事情?Runtime.gc() 会做什么事情?
十二. finalize() 方法在何时被调用呢?析构函数(finalization)的目的究竟是什么呀?
如果对象的引用被设置为 null,那么垃圾收集器是否会立刻释放该对象所占用的内存呢?
十四. 什么是分布式垃圾回收(DGC)?它是如何工作的?
吞吐量收集器则更注重系统的吞吐量,它可以在后台并行地进行垃圾收集,尽量减少对应用程序的停顿时间,同时提高垃圾收集的效率,以达到更高的吞吐量。
十六. 在 Java 中,对象什么时候可以被垃圾回收?
简述 Java 内存分配的相关情况,包括其分配策略等;简述 Java 内存回收的相关情况,包括其回收策略等;阐述 Minor GC 的相关内容;阐述 MajorGC 的相关内容。
十八. JVM 的永久代中会发生垃圾回收么?
十九. Java 中垃圾收集的方法有哪些?
二十. 什么是类加载器,类加载器有哪些?
二十一. 类加载器双亲委派模型机制?
阿里java实习岗面试题
List和Set的区别
HashSet是如何保证不重复的
HashMap 是否是线程安全的呢?为什么它不是线程安全的呢?(最好能通过画图来展示在多线程环境下它为何不安全。)
HashMap的扩容过程
HashMap1.7 和 1.8 的区别是什么,要说明 1.8 进行了哪些优化,以及是如何进行优化的。
对象的四种引用
Java获取反射的三种方法
Java反射机制
Arrays.sort 的实现原理与 Collections.sort 的实现原理不同,它们之间存在着区别。Arrays.sort 主要是通过调用底层的排序算法来对数组进行排序,而 Collections.sort 则是基于 Arrays.sort 实现的,它会将集合转换为数组,然后调用 Arrays.sort 进行排序。在使用上,Arrays.sort 适用于对数组进行排序,而 Collections.sort 适用于对集合进行排序。它们在排序的效率和适用场景上也有所不同。Arrays.sort 在排序基本数据类型数组时效率较高,而 Collections.sort 在排序对象数组时更加灵活。
LinkedHashMap的应用
Cloneable接口实现原理
异常分类以及处理机制
wait和sleep的区别
数组在内存中如何分配
蚂蚁金服java高级面试题
jdk1.7 到 jdk1.8 时,Map 在底层发生了怎样的变化?
2. ConcurrentHashMap
3. 并行跟并发有什么区别?
jdk1.7 到 jdk1.8 期间,java 虚拟机有哪些变化?
5. 如果叫你自己设计一个中间件,你会如何设计?
6. 什么是中间件?
7. ThreadLock 用过没有,说说它的作用?
8. Hashcode()和 equals()和==区别?
在 mysql 数据库中,在哪些情况下设置了索引却无法被使用呢?
mysql 优化是否会涉及到 mycat 分库呢?包括垂直分库和水平分库。
11. 分布式事务解决方案?
12. sql 语句优化会不会,说出你知道的?
13. mysql 的存储引擎了解过没有?
14. 红黑树原理?
蚂蚁金服资深工程师面试题
蚂蚁 Java 一面
二叉搜索树与平衡二叉树存在怎样的关系呢?强平衡二叉树(AVL 树)和弱平衡二叉树(红黑树)又有哪些区别呢?
MySQL 使用 B+树主要有以下原因:B+树的叶子节点形成有序链表,便于范围查询;B+树的非叶子节点存储的索引相对较少,能提高查询效率;B+树的高度相对较低,可减少磁盘 I/O 次数,从而提升查询性能。
3. HashMap 如何解决 Hash 冲突
4. epoll 和 poll 的区别,及其应用场景
简述线程池的原理。FixedThreadPool 使用的阻塞队列是什么?
sychronized 的特点是隐式获取和释放锁,在代码块中自动进行加锁和解锁操作,相对简单直接,但在复杂的多线程场景下可能会导致死锁等问题。ReentrantLock 则是显式地获取和释放锁,需要通过 lock() 和 unlock() 方法来手动控制锁的获取和释放,它提供了更多的高级功能,如可中断的获取锁、尝试获取锁等,在一些特定的多线程场景下更加灵活和可控。
介绍并联系 sychronized 的自旋锁、偏向锁、轻量级锁、重量级锁。分别阐述它们各自的特点与相互之间的联系。