Java高频面试基础问题与知识点整理

目录

(一)Java基础高频知识考点

1.基本类型和包装类区别

2.实例方法和静态方法有什么不一样?

3.Java指向的是引用还是地址?怎么理解?(高频考点)

4.Object类内的方法(高频考点)

5.hashCode方法的作用?

6.Java中一个字符占多少个字节,扩展再问int、 long、double占多少字节?

7.Boolean占几个字节?

8.Exception和Error

9.==和equals的区别?

10.String str="hello world"和String str=new String("hello world")的区别?(高频考点)

11.StringBuffer和StringBuilder的区别是什么?性能对比?如何鉴定线程安全?(高频考点)

12.StringBuffer 和 StringBuilder 底层怎么实现的?(高频考点)

13.switch支持哪些数据类型?支持long么?(高频考点)

14.创建一个类的实例都有哪些办法?(高频考点)

15.final、finnally、finalize的区别是什么?

16.Jdk1.8/Jdk1.7都分别新增了哪些特性?其他版本呢?(高频考点)

17.简单说下Lambda表达式,其解决了什么,相比java7的处理优化了什么?

18.有人说“Lambda能让Java程序慢30倍”,你怎么看?

19.SpI和API区别是什么?SpI底层实现是什么?

20.深克隆和浅克隆?(考频不多)

21.伪共享机制简述分析

22.假设引用了一个第三方的jar 有个类和我自己写的代码类一样,那么在类加载机制过程中是如何处理的?(高频考点)

23.Java提供了哪些IO方式? NIO如何实现多路复用?

24.谈谈接口和抽象类有什么区别?

(二)Java集合框架高频知识考点(高频考点集中地)

1.HashMap相关put操作,get操作等流程?(高频考点)

2.Hash为啥要扩容

3.HashMap如果我想要让自己的Object作为K应该怎么办?

4.Hashmap 线程不安全的原因(高频考点)

 5.HashMap1.7与HashMap1.8的区别,从数据结构上、Hash值的计算上、链表数据的插入方法、内部Entry类的实现上分析?

6.HashSet和HashMap区别

7.Hash1.7是基于数组和链表实现的,为什么不用双链表?HashMap1.8中引入红黑树的原因是?为什么要用红黑树而不是平衡二叉树?(高频考点)

8.HashMap、HashTable、ConcurrentHashMap的原理与区别?

9.HashMap和ConcurrentHashMap区别(高频考点)

10. ConcurrentHashMap的数据结构(高频考点)

11.高并发HashMap的环是如何产生的(高频考点)

12.哪些集合是线程安全的?

13.Collections.SynchronizedCollection方法实现原理是什么?

14.Array和ArrayList有什么区别?使用时注意事项有哪些?

15.常用的集合类有哪些?比如List如何排序(最好说下底层上的实现)?(高频考点)

16.ArrayList和LinkedList内部的实现大致是怎样的?他们之间的区别和各自适应的场景是什么?

(三)多线程与并发编程高频知识考点(高频考点集中地)

1.进程和线程的区别,进程间如何通讯,线程间如何通讯?

2.Java中线程之间如何通信

3.并发和并行的区别

4.Java线程的状态?细说一下BLOCKED和WAITING有什么区别?(高频考点)

5.Java实现多线程的方式有哪些?(高频考点)

6.Java处理多线程的方式有哪些?

7.Java程序中启动一个线程是用run()还是start()?

8.Thread的start方法调用两次会怎么样?Thread是如何保证start方法调用只有一次生效?(高频考点)

9.什么是守护线程?有什么用?

10.两个线程如何串行执行?

11.可以运行时kill掉一个线程吗?

12.Synchronized的实现原理(高频考点)

基于对象头的 Mark Word

Monitor(监视器)

Synchronized 实现原理

13.volatile与synchronized的区别是什么?volatile作用(高频考点)

14.synchronized和Lock的区别(高频考点)

15.Atomic类如何保证原子性(CAS操作)(高频考点)

16.AtomicInteger、AtomicBoolean这些类之所以在高并发时高效,共同的原因是?

17.关于 Atomic 类中的主要变量如下,其使用了 volatile 关键字进行修饰。你知道它在源码中的主要意义是?(高频考点)

18.CAS?CAS 有什么缺陷,如何解决?(高频考点)

19.比较和替换是两个动作,CAS 是如何保证这两个操作的原子性呢?

Java 层次

JVM 层次

硬件层次

总结

20.Java不可重入锁与可重入锁的区别如何理解?

21.无锁 VS 偏向锁 VS 轻量级锁 VS 重量级锁,解释锁升级?(高频考点)

22.乐观锁 VS 悲观锁?公平锁 VS 非公平锁?独享锁 VS 共享锁?

23.自旋锁 VS 适应性自旋锁,简单介绍

24.为什么读多写少的情况,就适合使用乐观锁呢?悲观锁在读多写少的情况下,不也是有很少的冲突吗?(高频考点)

25.死锁发生的原因

26.用java 代码实现一个死锁用例,说说怎么解决死锁问题?回到用例代码下,如何解决死锁问题呢?(高频考点)

27.请实现让10个任务同时并发启动?

28.AQS理论的数据结构是什么样的?(高频考点)

29.ReentrantLock底层公平锁和非公平锁的原理(高频考点)

非公平锁(默认)

公平锁

同步器的基础

30.多线程中sleep与wait的区别是什么?

31.notify和notifyAll区别?

32.除了用Object.wait和Object.notifyAll来实现线程间的交互外,你还会常用哪些来实现?

33.ThreadLocal的原理和实现(高频考点)

34.ThreadLocal为什么要使用弱引用和内存泄露问题(高频考点)

内存泄漏场景

弱引用的解决方案

35.ThreadLocal怎么解决内存泄露的问题?(高频考点)

36.为什么要使用线程池?

37.线程池的线程数量确定?状态分析?关闭方式?

38.如何控制线程池线程的优先级

39.核心线程池ThreadPoolExecutor的参数/常见线程池的创建参数是什么样的?(高频考点)

40.new ThreadPoolExecutor(10,100,10,TimeUnit.MILLISECONDS,new LinkedBlockingQueue(10));一个这样创建的线程池,当已经有10个任务在运行时,第11个任务提交到此线程池执行的时候会发生什么,为什么?

41.实现一个自定义的ThreadFactory的作用通常是?

42.常见的线程池创建和参数分析?(高频考点)

43.ThreadPoolExecutor的工作流程(高频考点)

44.ScheduledThreadPoolExecutor中的使用的是什么队列?内部如何实现任务排序的?

45.线程池的运行逻辑,FixedThreadPool、CachedThreadPool的原理(高频考点)

46.用Executors.newCachedThreadPool创建的线程池,在运行的过程中有可能产生的风险是?

47.阻塞队列ArrayBlockingQueue、LinkedBlockingQueue分析(高频考点)

48.请合理的使用Queue来实现一个高并发的生产/消费的场景,给些核心的代码片段。

49.线程池关闭原理

50.JUC下的常见类的使用,take、poll的区别,put、offer的区别?

51.Future原理,其局限性是什么?并说说CompletableFuture核心原理?

52.你是否了解fork/join(基本思想)?在工作中是如何使用的?说说他们的优势是什么?(高频考点)

53.Java线程池的调优经验有哪些?(线程池的合理配置)(高频考点)

54.一个请求中,计算操作需要50ms,db操作需要100ms,对于一台8核的机器来说,如果要求cpu利用率达到100%,如何设置线程数?(高频考点)

55.如果系统中不同的请求对应的cpu时间和io时间都不同,那怎么设置线程数量?(高频考点)

56.线程池核心数20,最大600,阻塞队列200,当QPS200(注意是qps)的时候,请求是调第三方阻塞超时,请问怎么提高它的吞吐量(注意不能加机器)?(高频考点)

57.当前线程池是200,线程单次处理请求20ms,那么理论上单节点的qps 是多少呢?

58.多线程对Long数据进行加和会存在什么问题?如何解决?

59.Netty 的线程机制是什么样的?

(四)其他扩展高频知识考点

1.LRU算法是怎么实现的?大致说明下(高频考点)

具体实现方案:使用LinkedHashMap实现

自编代码:基于 HashMap 和 双向链表实现 LRU

其他相关内容补充:LRU-K

其他相关内容补充:two queue

其他相关内容补充:Multi Queue(MQ)

2.后台服务出现明显“变慢”,谈谈你的诊断思路?(高频考点)

3.你了解Java应用开发中的注入攻击吗?

4.在Java程序运行阶段,可以用什么命令行工具来查看当前Java程序的一些启动参数值,例如Heap Size等。

5.用什么命令行工具可以查看运行的Java程序的GC状况,请具体写出命令行格式。(高频考点)

6.用什么工具,可以在Java程序运行的情况下跟踪某个方法的执行时间,请求参数信息等,并请解释下工具实现的原理。

7.当一个Java程序接收请求,很长时间都没响应的话,通常你会怎么去排查这种问题?

8.NIO(New I/O)用到的组件有哪些?

9.Netty对比Java NIO做了什么优化?(必考)


干货分享,感谢您的阅读!背景互联网大厂高频面试题基本总结回顾(含笔试高频算法整理)

(一)Java基础高频知识考点

针对人员:

1.全部人员都适用;

2.正式员工:针对应届+工作1-3年的面试者,本部分可部分考察;

3.外包员工:本部分一般加大比重。

1.基本类型和包装类区别

数据类型

  • 基本类型:包括byte、short、int、long、float、double、char和boolean等8种基本数据类型。它们是直接存储数据值的,不具有方法和属性。
  • 包装类:对应于每种基本类型,Java提供了相应的包装类,例如Byte、Short、Integer、Long、Float、
08-20
AQS,全称为 AbstractQueuedSynchronizer,是 Java 中 `java.util.concurrent.locks` 包内的一个抽象类,它作为构建锁和其他同步组件的基础框架[^2]。AQS 的核心设计目标是为实现同步机制提供一种通用的、可扩展的结构,支持独占模式(如 ReentrantLock)和共享模式(如 CountDownLatch)两种同步状态的获取方式[^1]。 AQS 通过一个 `int` 类型的成员变量来表示同步状态,用于追踪共享资源的状态(例如锁是否被占用)[^3]。其内部实现依赖于一个 FIFO 的双向队列,也被称为同步队列。该队列是一个双向链表结构,用于管理那些未能成功获取同步状态的线程。当线程尝试获取锁失败时,会被封装成一个节点(Node),并被加入到队列中进行阻塞等待;当资源释放时,会从队列头部开始唤醒等待的线程,使其再次尝试获取同步状态[^4]。 AQS 提供了对同步状态的原子操作方法,包括 `getState()`、`setState(int newState)` 和 `compareAndSetState(int expect, int update)`,这些方法确保了在多线程环境下对同步状态的修改是线程安全的[^3]。此外,AQS 的设计鼓励子类通过继承并实现其抽象方法来定义特定的同步逻辑,从而支持了灵活的同步组件开发。 常见的基于 AQS 构建的同步组件包括 `ReentrantLock`(可重入锁)、`CountDownLatch`(倒计时门闩)、`CyclicBarrier`(循环屏障)和 `Semaphore`(信号量)等。 ```java // 示例:基于 AQS 实现的简单锁 public class SimpleLock extends AbstractQueuedSynchronizer { // 尝试获取锁 protected boolean tryAcquire(int acquires) { if (compareAndSetState(0, 1)) { setExclusiveOwnerThread(Thread.currentThread()); return true; } return false; } // 尝试释放锁 protected boolean tryRelease(int releases) { setState(0); setExclusiveOwnerThread(null); return true; } // 获取锁的方法 public void lock() { acquire(1); } // 释放锁的方法 public void unlock() { release(1); } } ``` 上述代码展示了一个基于 AQS 的简单锁实现,通过重写 `tryAcquire` 和 `tryRelease` 方法来控制同步状态的获取释放。
评论 1489
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

张彦峰ZYF

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值