当前位置: 首页 > article >正文

Java企业面试题5

1. Java 的泛型是什么?有什么好处和优点?JDK 不同版本的泛型有什么区别?(软*动力)

  • 泛型是 Java 语言中引入的一种特性,允许在定义类、接口和方法时使用类型参数(Type Parameters)。它提供了编译时类型安全检查机制,允许程序员在使用集合类时不必进行显式的类型转换。
  • 好处和优点
    • 类型安全:泛型增强了代码的可读性和安全性,避免了类型转换错误。
    • 代码复用:泛型允许编写通用的代码,适用于多种数据类型。
    • 减少强制类型转换:使用泛型后,集合操作时不需要手动转换类型。
  • JDK 不同版本的泛型区别
    • JDK 5 引入了泛型,之前的版本不支持泛型。
    • JDK 7 引入了菱形语法,简化了泛型实例化。
    • JDK 8 引入了类型推断,进一步简化了泛型代码。

2. 说说你对泛型的了解(*软国际)

  • 泛型是 Java 中用于实现类型参数化的一种机制,它允许在类、接口和方法中使用类型变量。泛型的主要目的是提供编译时的类型检查和消除类型转换。

3. 链表和数组有什么区别?(腾*)

  • 数组是固定大小的数据结构,一旦创建,大小不可变。数组中的元素通过索引直接访问,访问速度快,但插入和删除操作效率较低。
  • 链表是一种动态的数据结构,大小可变。链表中的元素通过指针连接,插入和删除操作效率高,但访问元素需要遍历链表,速度较慢。

4. 栈是如何运行的?(西*信息技术)

  • 栈是一种后进先出(LIFO)的数据结构,只允许在一端进行插入(push)和删除(pop)操作。栈的操作类似于一叠盘子,最后放上去的盘子必须是第一个被取走的。

5. ArrayList的默认大小是多少,以及扩容机制(顺*、凡*科技)

  • 默认大小为 10。
  • 当 ArrayList 达到容量限制时,会自动扩容,通常是当前容量的1.5倍。

6. ArrayList的底层是怎么实现的?(腾*)

  • ArrayList 底层是基于动态数组实现的,它封装了一个 Object[] 数组来存储元素。
  • 数组在初始化时具有一定的容量,当容量不足以容纳更多的元素时,数组会被重新创建并复制原有的元素。

7.在ArrayList中remove后面几个元素该怎么做?(惠*、中*亿达)

  • ArrayList 没有直接的方法来移除后面几个元素,但可以通过循环调用 remove(index) 方法来逐个移除。

8.ArrayList1.7和1.8的区别(拓*思)

  • 主要区别在于 1.8 引入了对 Lambda 表达式和 Stream API 的支持,以及一些性能优化。

9.数组和 ArrayList 的区别(阿*、*科软)

  • 数组是固定大小的,而 ArrayList 可动态调整大小。
  • 数组可以是基本类型,而 ArrayList 只能存储对象。
  • ArrayList 提供了更多便捷的方法,如自动扩容。

10.什么是线程安全的List?(平*金服)

  • 线程安全的List是指多个线程可以并发访问而不出现数据一致性问题的List。例如,Vector和Collections.synchronizedList(new ArrayList<>())都是线程安全的实现。

11.说说HahMap底层实现(新*股份、顺*、猫*娱乐)

  • HashMap使用了数组+链表/红黑树的数据结构。每个元素的键通过哈希函数计算得到一个索引,相同索引的元素形成一个链表或者红黑树。

12.HashMap初始值16,临界值12是怎么算的(软**力)

  • 初始容量为16是因为这是一个2的幂,可以优化哈希函数的性能。临界值12是基于负载因子(默认0.75)计算得出的,即16 * 0.75 = 12。

13.HashMap长度为什么是2的幂次方(国*时代)

  • 当HashMap的容量是2的幂次方时,可以通过位运算来计算索引,这比使用取模运算更快。

14.HashMap怎么计算哈希值和索引?扩容机制?怎么解决hash冲突?(*软国际、中软*腾)

  • 哈希值由键对象的hashCode()方法返回,索引通过哈希值与数组长度的掩码计算得出。当达到阈值时,HashMap会自动扩容,通常是原容量的两倍,并且重新计算每个键的哈希值。解决hash冲突的方法包括链地址法(使用链表或红黑树存储相同索引的键值对)。

15.HashMap底层是数组+链表,有数组很快了,为什么加链表?(润*软件)

  • 使用链表是为了处理哈希冲突的情况,当多个键映射到同一个索引时,链表可以保存这些键值对。

16.HashMap为什么长度达到一定的长度要转化为红黑树(*度)

  • 当链表过长时,搜索效率降低,因此当链表达到一定长度时,为了提高查找速度,会转换成红黑树。

17.HashMap什么时候扩充为红黑树,什么时候又返回到链表?(汉*)

  • 当链表长度小于阈值(6)时,红黑树会退化为链表。

18.在 JDK1.8中,HashMap的数据结构与1.7相比有什么变化,这些变化的好处在哪里?(海*科)

  • 引入了红黑树来优化高冲突情况下的性能。
  • 改进的扩容机制和链表与红黑树的转换机制提高了性能。

19.HashMap的get()方法的原理?(顺*)

  • 根据 key 的哈希值计算索引,然后在对应的链表或红黑树中查找元素。

20.hashcode和equals区别?(海*供应链管理)

  • hashCode() 返回对象的哈希码,用于快速查找。
  • equals() 方法用于比较两个对象的内容是否相等。

21.hashCode() 与 equals() 生成算法、方法怎么重写?(阿*校招)

  • 重写时应保证相等的对象返回相同的哈希码,并且在 equals() 中比较所有关键字段。

22.说一下equals和==的区别,然后问equals相等hash值一定相等吗?hash值相等equals一定相等吗?(南*电网、上海*智网络)

  • ==用来比较两个对象的引用是否指向同一个内存地址,而equals()比较的是两个对象的内容是否相等。equals()相等时hashCode()应该相等,但hashCode()相等时equals()不一定相等。

23.HashSet存放数据的方式?(拓*软件)

  • HashSet内部使用HashMap来存储元素,元素作为键(key),值(value)是一个常量。

24.Set是如何实现元素的唯一性?(湖**利软件)

  • Set接口要求所有实现类保证元素的唯一性。通过重写equals()和hashCode()方法来确保没有重复元素。

25.用哪两种方式来实现集合的排序(凡*科技)

  • 可以通过实现Comparable接口来定义自然顺序,或者使用Comparator接口来定义外部排序规则。


http://www.kler.cn/news/316987.html

相关文章:

  • 【网站架构部署与优化】源码编译安装LAMP
  • 博客摘录「 SpringBoot大文件(百M以上)的上传下载实现技术」2024年8月2日
  • 2024年躺平,花大半年的时间,就弄了这一件事儿:《C++面试真题宝典》
  • Python: networkx绘图
  • zabbix入门单机部署
  • tomcat服务搭建部署ujcms网站
  • Flink系列知识之:Checkpoint原理
  • mysql学习教程,从入门到精通,SQL 更新数据(UPDATE 语句)(17)
  • 【赵渝强老师】K8s的DaemonSets控制器
  • Conda虚拟环境配置常见问题记录
  • 提高数据集成稳定性:EMQX Platform 端到端规则调试指南
  • 动态SQL中的foreach标签【后端 21】
  • makefile学习笔记(一)(make架构详解、gcc -o 详解、make构建流程、clean使用、隐式规则和模式规则、自动变量、立即展开和延时展开)
  • Oracle密码过期问题,设置永不过期
  • PCIe进阶之TL:Completion Rules TLP Prefix Rules
  • Tomcat端口号被占用
  • Android使用OpenCV 4.5.0实现扑克牌识别(源码分享)
  • kismet和war driving具体准备(仅供无线安全学习)
  • 【SpringBoot】97、SpringBoot中使用EasyExcel导出/导入数据
  • JAVA并发编程系列之Semaphore信号量剖析
  • Go 1.19.4 路径和目录-Day 15
  • JDK7u21 HashMap版
  • ccfcsp-202112-1、序列查询
  • Python知识点:详细讲解在Python编程中,GIL(全局解释器锁)的影响与规避方法
  • 2024寻找那些能精准修改PDF内容的工具
  • 工控一体机在高精度玻璃检测机中的应用
  • C++11中的可变长模板参数
  • Linux 线程控制
  • 委托的注册及注销+观察者模式
  • C++容器list底层迭代器的实现逻辑~list相关函数模拟实现