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年的面试者,本部分可部分考察;

在开发基于Java和SpringBoot的Web应用程序时,数据库优化和内存溢出问题的解决是提升系统性能和稳定性的关键。要解决这些问题,你可以参考《软件工程师试用期工作总结:技术提升挑战》这份PPT资料,其中包含了实际工作中遇到的挑战和解决方案。 参考资源链接:[软件工程师试用期工作总结:技术提升挑战](https://wenku.csdn.net/doc/u1bb2eartx?spm=1055.2569.3001.10343) 首先,关于数据库优化,你需要确保数据库的设计合理,索引使用得当,查询效率高,并且合理地处理数据。在实际工作中,你可能需要进行以下步骤: 1. 分析慢查询日志,找出效率低下的SQL语句。 2. 优化查询逻辑,避免不必要的关联查询,合理使用分页。 3. 添加合适的索引来加速数据检索。 4. 规范数据表结构,避免使用过多的JOIN操作。 5. 定期进行数据库维护,比如重建索引,清理无用数据。 其次,对于内存溢出问题,你需要通过以下方法进行排查和解决: 1. 使用JVM监控工具如JVisualVM,监控内存使用情况,定位内存溢出的位置。 2. 分析GC日志,了解垃圾回收的频率和效率。 3. 检查代码中是否存在内存泄漏,比如长生命周期对象的重复创建,静态集合的不断累积等。 4. 优化数据结构和算法,减少内存占用。 5. 使用分批处理数据的方式,避免一次性加载过多数据到内存中。 通过以上方法,结合《软件工程师试用期工作总结:技术提升挑战》中的实际案例,你可以有效地进行数据库优化,并解决内存溢出问题。在实践中不断提升自己的编程基础和解决问题的能力,同时加强团队协作,提高整个项目的稳定性和性能。 参考资源链接:[软件工程师试用期工作总结:技术提升挑战](https://wenku.csdn.net/doc/u1bb2eartx?spm=1055.2569.3001.10343)
评论 1429
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

张彦峰ZYF

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

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

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

打赏作者

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

抵扣说明:

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

余额充值