博客
关于我
Java的面试热点
阅读量:643 次
发布时间:2019-03-14

本文共 1230 字,大约阅读时间需要 4 分钟。

HashMap篇

HashMap的扩容操作是怎么实现的?

在JDK1.8中,HashMap的resize方法在键值对的数量超过阈值时或初始化时会被调用来进行扩容。每次扩展时,HashMap的大小会扩展到原来的两倍,这样可以确保容量的快速增加。当进行扩容时,Node对象的位置有两种情况:要么保持在原来的位置,要么移动到原位置的基础上增加了数组大小的位置。这种机制在JDK1.8中有一个优化,当桶上的元素重新分发时,不需要计算新的哈希值,而是直接根据当前集合的哈希位掩码来判断。

在putVal()方法中,resize()方法会被调用两次。第一次是在初始化时或在实际大小超过临界值时调用,第二次是在元素已被放置到数组中的情况下,检查是否需要扩容。如果需要扩容,就会触发一次数组大小的改变,同时对桶中的元素进行重新计算哈希值并进行重新分发的操作。这个时候,如果桶的位置和哈希位掩码的结果不同时,元素会被移动到新的位置;如果结果相同,元素就会留在原来的位置。

哈希冲突是解决documento冲突而产生的。在解决哈希冲突之前,我们需要了解哈希的概念。Hash(散列)是一种将任意长度的输入通过算法转换为固定长度的输出的函数。这种转换使得不同的输入可能映射到相同的输出,从而产生哈希冲突。解决哈希冲突的常规方法是使用线性探测法。具体来说,当一个哈希表在哈希冲突时,继续在同一个哈希表的下一个位置寻找下一个空槽来存储元素,直到找到为止。

并发编程面试题

并发编程的基础知识

并发编程与并发系统设计有关,它能够充分利用多核CPU的计算能力,提升程序的执行效率。在合理的业务场景下,并发编程能够实现高性能的系统。然而,并发编程也伴随着诸多挑战,如内存泄漏、线程安全、上下文切换等问题。

并发编程的优点主要体现在处理复杂业务模型时的优势,但并非所有情况都适合并发编程。开发高并发系统时,多线程并发编程仍然是基础,能够显著提高系统的并发能力。

关于并发编程

更多关于并发编程的知识,可以参考相关的教学视频内容。

MySQL

数据库的三范式

数据库的三范式是数据库规范化的三种基本要求。

第一范式:确保表中的字段要么不为null,要么具有全素性(不能被进一步分解)。每个字段的值都要是原子性的。

第二范式:满足第一范式的一个表只能表示一个事物,所有非主属性必须完全依赖于主属性,每个主属性都能唯一确定一个记录。

第三范式:满足前两种范式,每个非主属性直接依赖于主属性,不能间接依赖,同时非主属性之间也不能互相依赖。

ACID是数据库事务的四个基本特性。它们保证了事务的原子性、一致性、隔离性和持久性。

原子性:所有事务操作要么全部成功,要么全部失败,确保数据的完整性。

一致性:在事务执行前和执行后系统处于相同的状态,保证数据的一致性。

隔离性:在并发系统中,事务的执行互不影响,保证了高并发环境下的数据安全。

持久性:事务完成后数据修改是永久性的,即便是系统故障也无法丢失数据。

转载地址:http://aproz.baihongyu.com/

你可能感兴趣的文章
mysql 使用sql文件恢复数据库
查看>>
mysql 修改默认字符集为utf8
查看>>
Mysql 共享锁
查看>>
MySQL 内核深度优化
查看>>
mysql 内连接、自然连接、外连接的区别
查看>>
mysql 写入慢优化
查看>>
mysql 分组统计SQL语句
查看>>
Mysql 分页
查看>>
Mysql 分页语句 Limit原理
查看>>
MySql 创建函数 Error Code : 1418
查看>>
MySQL 创建新用户及授予权限的完整流程
查看>>
mysql 创建表,不能包含关键字values 以及 表id自增问题
查看>>
mysql 删除日志文件详解
查看>>
mysql 判断表字段是否存在,然后修改
查看>>
MySQL 到底能不能放到 Docker 里跑?
查看>>
mysql 前缀索引 命令_11 | Mysql怎么给字符串字段加索引?
查看>>
MySQL 加锁处理分析
查看>>
mysql 协议的退出命令包及解析
查看>>
mysql 参数 innodb_flush_log_at_trx_commit
查看>>
mysql 取表中分组之后最新一条数据 分组最新数据 分组取最新数据 分组数据 获取每个分类的最新数据
查看>>