Java面试题

本文涵盖了Java编程中的基础概念,包括冒泡排序和快速排序的代码实现,ArrayList和LinkedList的区别及其底层实现,HashSet和TreeSet的差异,HashMap的存储机制及减少哈希冲突的方法。此外,还讨论了JVM内存模型,如堆、元空间、本地方法栈等,以及线程安全问题,如HashMap的非线程安全和解决方案。文章还涉及了垃圾回收机制、线程池和并发编程相关知识点,如线程状态、锁的实现等。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.写出冒泡排序的代码?

2.写出快速排序的代码?

3.arraylist和linkedlist有什么区别?它们的底层是什么?

Arraylist 底层是数组结构 增删慢 查改快

​ 数组的默认长度是10,扩容因子是1.5

Linkedlist 底层是链表结构 增删快 查改慢

​ 双向链表

4.hashset和treeset有什么区别?

HashSet底层是HashMap,把数据存储在HashMap的键上,无序唯一

TreeSet底层是TreeMap,把数据存储在TreeMap的键上,有序唯一

5.hashmap底层如何存储数据?

HashMap底层使用数组+链表+红黑树存储数据

​ 数组的默认长度是16,扩容因子0.75,当数组的容量被使用了75%后开始扩容,扩容2倍

​ 当数据的键不同,但hash不同时,转成链表存储

​ 当链表的长度大于8,并且数组的长度大于64时,转红黑树

6.hashmap是如何减少hash冲突的?

当数据的键相同,但hash不同时,使用单向链表存储数据

数据采用的是尾插法

7.hashmap和linkedhashmap有什么区别?

8.collection和collections有什么区别?常用的collections方法有哪些?

9.hashset是如何保证数据不重复的?

1.Hashset使用HashMap的键存储数据

2.HashMap保证键不重复

​ a.比较hashcode,如果要存的数据,hashcode在map中不存在,则存进入

​ 如果hashcode已存在,再调用equals方法比较值在map中是否存在

​ 不存在,则存入

​ 存在,则舍弃

10.hashmap底层数据结构?

11.treeset是如何保证元素有序的?

12.linkedhashset和linkedhashmap是如何维护元素的顺序的?

13.hashmap的扩容机制是什么?

14.hashmap是线程安全吗?如何解决hashmap线程不安全的问题?

15.hashmap出现hash冲突的时候,是怎么解决的?

16.LinkedList 中的 peek() 和 poll() 有什么区别?

17.描述一下JVM的内存模型,以及这些空间存放的内容?

​ 堆:对象 字符串常量池

​ 元空间:class 静态变量 常量

​ 本地方法栈:被native修饰的方法

​ 方法栈:存储自定义方法

​ 方法栈的组成:由一个一个的栈帧组成

18.jvm堆内存如何划分?,如何回收这些内容对象?,有哪些回收算法?

​ 年轻代1/3

​ 新生区

​ 幸存者区域

​ 老年代 2/3

19.如何解决线上GC频繁的问题?

​ 1.堆内存中有大对象,能够被GC,但是堆内存立马有被占满了,这种情况可以把堆内存设大一点

​ 2.堆内存中有大对象,不能够被GC调,这种情况大多是代码问题

20.什么时候会发生FullGc?

21.简述一下内存溢出的原因,如何排查线上问题?

22.jvm有哪些垃圾回收器,实际中如何选择?

23.JVM8为什么要增加元空间,带来什么好处?

24.新生代的对象什么时候进入到老年代

25.堆G1垃圾收集器有了解么?有什么特点?

\26. 谈谈class文件加载过程

\27. 谈谈什么是双亲委派模式?

28.java类的生命周期,如何判断?

29.什么情况下会发生栈溢出(sof),什么时候会发生堆溢出?

30.实战中用如何去分析内存溢出?通过什么工具,如何分析?

31.谈谈java中实现悲观锁的方式有哪些?

Synchronized

ReentrantLock

表锁行锁

32.synchronized和ReentrantLock有什么区别?实际中如何选择?

33.ReentrantLock 是如何实现公平锁的?ReentrantLock 是如何实现非公平锁的?

34.谈谈synchronized锁升级过程?

35.java中乐观锁cas的原理是什么?cas有什么问题?如何解决的?

36.volatile关键字有什么作用?

37.创建一个线程有哪些方式?

38.线程有哪些常用的方法?各有什么作用?

39.线程中的 start() 和 run() 有那些区别?

40.wait() 和 sleep() 有什么区别?

\41. 如何保证一个线程执行完再执行第二个线程?

\42. 守护线程是什么?

\43. 线程有哪些状态?

\44. 如何保证线程安全问题?

\45. 如何预防死锁?

\46. ThreadPoolExecutor线程池有哪些参数?

\47. 如何保证一个线程执行完再执行第二个线程?

\48. 线程池的队列有哪些?拒绝策略有哪些?

\49. 线程池的核心线程数一般如何设置?

\50. ThreadLocal 为什么是线程安全的?

\51. ThreadLocal 为什么会发生内存泄漏?如何解决?

\52. 多线程中的i++线程安全吗?

\53. new ReentrantLock() 创建的是公平锁还是非公平锁?

\54. 为什么非公平锁吞吐量大于公平锁?

\55. 如何实现对象的浅拷贝和对象的深拷贝?

\56. Stringbuilder和stringbuffer有什么区别?

\57. 初始化一个集合,内含100个元素,需要创建10个线程,每个线程读取集合中固定区间的元素,例如第一个线程读集合中前十个元素,写出代码?

\58. 100个线程同时向一个银行账户中存入1元钱?

\59. IO中字节流和字符流有什么区别?常用的流有哪些?

\60. BIO和NIO有什么区别?

\61. NIO的原理是什么?NIO 有哪些选择器?

\62. 写出单例模式代码,并解决线程安全问题?

\63. 简述http三次握手?

\64. rabbitmq支持批量操作吗?

\65. 开发中遇到的异常有哪些?

\66. nacos和eureka区别?

\67. 什么是uml,实际中有使用过吗?

\68. 如何解决redis缓存和数据库一致性问题?

\69. 浏览器常见状态码有哪些?

\70. 谈谈你在项目中用到的设计模式?

\71. linux常用的命令?

\72. vue常用的命令有哪些?

\73. 谈谈vue的生命周期?

\74. 谈谈Java 中的 ==和equals,以及equals和hashCode 的区别与联系?

\75. springboot配置文件优先级是怎么样?

\76. spring定义单例Bean和多例Bean的场景?

77.数组递归求和?

\78. String类型的2个字符串内部是怎么相加的?

\79. nacos集群宕机,服务是否正常使用?

\80. nacos配置中心一般都会配置什么内容

\81. hashcode是怎么算的?

\82. MySQL的innodb引擎为什么使用b+tree索引,而不是B-tree的索引结构?

\83. mysql的联接有哪些?各有什么特点?

\84. mysql的锁类型有哪些?各有什么特点?

\85. 行锁什么时候会升级为表锁?

\86. 如何实现行锁?

\87. 数据库的三范式有什么特点?

\88. mysql的隔离级别有哪些?如何解决脏读和不可重复读以及幻读问题?

\89. mysql的事务特性有哪些?底层是怎么实现的?

\90. MVCC解决了什么问题?,底层是如何实现的?

\91. mysql中的redo、undo、binlog日志有什么用?

\92. 如何开启慢查询日志?

\93. mysql中的索引是什么?

\94. 索引有哪些分类?索引结构有哪些?

\95. 如何合理创建索引?

\96. 如何分析mysql的性能?

\97. 哪些情况下导致mysql的索引会失效?

\98. mysql中的#和$有什么区别?

\99. 在 MyBatis 中怎么解决实体类属性名和表字段名不一致的问题?

\100. 什么是 MyBatis 的一级缓存和二级缓存?

\101. 如何自定义启动器 Spring Boot 中的 Stater?

\102. 简述springboot启动流程

\103. spring中常用的注解有哪些?

\104. 简述一下 Spring MVC 的执行流程?

\105. 如何实现跨域访问?

\106. forward 和 redirect 有什么区别?

\107. springboot如何实现自定义类型转换?

\108. Spring 通知类型有哪些?

\109. IoC 和 DI 有什么关系?

\110. Spring 注入方式有哪些?

\111. Spring 有几种实现事务的方式?

\112. Spring 中的 AOP 的底层实现原理是什么?

\113. Spring 中的 Bean 是线程安全的吗?

\114. 说一下 Spring 中 Bean 的生命周期?

\115. Spring、SpringBoot、SpringCloud 的区别是什么?

\116. BeanFactory和applicationContext区别

\117. BeanFactory和FactoryBean的区别是什么?

\118. redis基本数据类型有哪些?

\119. redis支持持久化的方式?各有什么优点?实际上如何选择?

\120. redis集群方式有哪些?

\121. springboot整合redis方式?

\122. 消息队列的应用场景有哪些?

\123. 如何保证消息可靠性?

\124. 如何保证消费方正确消息消息?

\125. 什么情况下消息会进入到死信队列?

126.rabbitmq的工作模式有哪些?

127.char和varchar有什么区别?

128.mysql无则插入,有则修改,怎么实现?

129.mysql如何把一个多行数据变成一列

130.mysql如何去重

131.mysql的in和exists有什么区别

132.开发中,mysql有什么规范?

133.开发中,java编码规范有哪些?

134.mysql中,如何实现批量插入?在mybatis里面又是如何实现

135.项目上线报bug,如何解决?

136.spring中的ioc和di有什么区别?

137.springboot和springcloud有什么区别?

138.select * from A for update 这是什么锁?表锁什么时候会升级为行锁?

139.你在项目中做了哪些模块?简述这些模块用到什么技术,如何使用的?

140.maven如何排除依赖

141.maven的聚合和继承分别有什么用?

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值