每日面经02

1.用过哪些集合?hashmap扩容?如果<string>如何查找?散列函数用什么散列为什么大小是2的幂次?如果是key 为abc怎么散列?如何知道key不存在?默认大小是否可以修改 ,改为30 、32 可以不?是否看过源码?hashmap查找时间复杂度?arrayList查找时间复杂度?

1.Java 提供了一系列的集合框架,常用的包括 ArrayList, LinkedList, HashMap, TreeMap, HashSet, TreeSet 等。

2.在添加元素或初始化的时候需要调用resize方法进行扩容,第一次添加数据初始化数组长度为16,以后每次扩容都是达到了扩容阈值(数组长度 * 0.75),每次扩容的时候,都是扩容之前容量的2倍;扩容之后,会新创建一个数组,需要把老数组中的数据挪动到新的数组中,没有hash冲突的节点,则直接使用 e.hash & (newCap - 1) 计算新数组的索引位置。如果是红黑树,走红黑树的添加。如果是链表,则需要遍历链表,可能需要拆分链表,判断(e.hash & oldCap)是否为0,该元素的位置要么停留在原始位置,要么移动到原始位置+增加的数组大小这个位置上。

3.先计算出key的哈希值,然后直接使用 e.hash & (newCap - 1) 计算新数组的索引位置,从而查找到对应的元素。

4.在Java的HashMap中,容量是2的幂次方(比如16、32、64等),这样设计的主要目的是为了让散列值的分布更加均匀,并且能够利用位运算来代替模运算,以提高计算索引位置的效率。当使用2的幂次作为数组的大小时,计算索引的模运算(通常是hashCode % arraySize)可以被转换为位运算(hashCode & (arraySize - 1)),这是因为arraySize是2的幂次方,所以arraySize - 1将是一个所有位都是1的数字,这样就可以保证散列值均匀分布在数组的各个位置上。

为什么位运算比模运算要快

位运算(如与运算&)直接操作数字的二进制位,而不需要执行除法运算。在计算机处理中,位运算是非常快的,因为它们直接在CPU级别上进行操作,而不涉及更复杂的数学运算。相比之下,模运算(%)通常需要执行除法操作,除法是CPU中较慢的操作之一,尤其是当除数是变量而不是常数时。

如何计算取模

当我们说HashMap的索引位置计算时使用位运算代替模运算,实际上是这样操作的:

  1. 计算hashCode:首先计算键的hashCode()方法返回的散列码。
  2. 高位运算:在某些实现中,可能会对hashCode进行进一步的处理,如右移和异或操作,以减少高位不变时低位变化不足的问题,这步骤可以提高散列的均匀性。
  3. 计算索引位置:最后,使用hashCode & (n - 1)计算这个键应该存放的数组索引,其中n是数组的大小,且为2的幂次方。这里的&操作实际上是取模的一个快速操作,能够确保计算出的索引位置不会超过数组的最大索引。

例如,如果数组大小是16(n = 16),则n - 1 = 15,二进制为1111。任何数与1111进行与运算,都会得到一个0到15之间的数,等同于这个数对16取模的结果,但速度更快。

第一:
计算索引时效率更高:如果是 2 的 n 次幂可以使用位与运算代替取模
第二:
扩容时重新计算索引效率更高:在进行扩容是会进行判断 ((e.hash & oldCap))hash值按位与运算旧数组长租是否 == 0。如果等于0,则把元素留在原来位置 ,否则新位置是等于旧位置的下标+旧数组长度

5.如果键不存在,通过键的哈希值找到的数组位置将是null或者该位置的链表(或红黑树)中没有与该键相匹配的节点。

6.HashMap的初始大小可以通过构造函数指定,但它总是会被转换成2的幂次方。如果尝试设置为30,实际会被调整为32,因为32是大于30的最小的2的幂次方。

7.

  • HashMap的查找时间复杂度在最佳情况下是O(1)。但在最坏的情况下,如果所有的元素都被映射到同一个桶(哈希冲突),时间复杂度会退化到O(n)。自Java 8起,当链表长度大于阈值(默认为8)时,链表会转换成红黑树,这样即使在最坏的情况下时间复杂度也是O(log n)。
  • ArrayList的查找时间复杂度是O(n),因为需要从头到尾遍历列表来查找元素。

2.varchar(50)和varchar(500)有什么区别?内存空间都一样的话,我为什么不都用varchar(500)呢?

  1. 数据完整性:字段长度应该根据实际的业务规则来设定。例如,如果一个字段用来存储用户的名字,那么 VARCHAR(50) 通常就足够了。设置适当的长度可以帮助维护数据的完整性,避免不必要的数据错误。

  2. 性能考虑:尽管 VARCHAR 类型字段存储实际所用空间加上一个长度标识,并不会因为声明的最大长度而占用更多的物理存储空间,但是在某些操作中,如排序或建立索引时,过长的字段可能会导致性能下降。这是因为数据库可能需要为这些操作分配更多的内存空间,尤其是当这些字段中存储了接近其最大长度的数据时。

  3. 存储效率:在设计数据库时,考虑存储效率是很重要的。虽然磁盘空间相对便宜,但是优化存储结构可以提高查询效率,减少IO操作。此外,更高效的存储也意味着更好的缓存利用率和更快的数据访问速度。

  4. 应用层验证:在应用层设置字段长度限制也是确保数据质量的一个重要手段。使用 VARCHAR(500) 而非 VARCHAR(50) 意味着在应用层也需要相应地处理更长的字符串输入,这可能会增加数据验证的复杂度。

3.查看一下这两段代码有什么区别?

public class Test {
    private double result = 0.0D;

    public  void addAll(double[] values){
        for (double value : values) {
            result+=value;
        }
        System.out.println(result);
    }

    public void addAll01(double[] values){
        double sum = 0.0D;
        for (double value : values) {
            sum += value;
        }
        result += sum;
        System.out.println(result);
    }

}

这两种实现在功能上是相似的,但第二种实现(下部分)使用了一个额外的局部变量 sum 来存储中间累加结果,这在某些情况下可以避免多线程环境下的竞态条件(race condition),因为修改局部变量不会影响到类的状态,直到最后将累加结果赋给 result。然而,如果 Accumulator 类的实例不是被多个线程共享的,那么这种额外的预防措施可能是不必要的。

4.mysql版本?数据库隔离级别用的哪个?

在我的最近一个项目中,我使用的是MySQL 8.0,这是目前的一个稳定版本,它提供了许多改进的功能和性能优化,比如更好的JSON支持、窗口函数、公共表表达式(CTEs)、提高了索引的效率等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/404794.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【MySQL初阶】索引与事务

1. 索引 1.1 索引基本概念 1.1.1 索引介绍 索引(index)&#xff1a;是一种特殊的文件&#xff0c;包含着对数据表里所有记录的引用指针。可以对表中的一列或者多列创建索引&#xff0c;并指定索引的类型&#xff0c;各类索引有各自的数据结构实现。&#xff08;具体细节在My…

蓝桥杯DP算法——区间DP(C++)

根据题意要求的是将石子合并的最小权值&#xff0c;我们可以根据DP思想使用二维数组f[i,j]来存放所有从第i堆石子到第j堆石子合并成一堆石子的合并方式。 然后由第二个图所示&#xff0c;我们可以将i到j区间分成两个区间&#xff0c;因为将i到j合并成一个区间的前一步一定是合…

DecBBox(Decode Bounding Box)的软件实现

在深度学习中&#xff0c;"decbbox" 通常指的是 "Decode Bounding Box"&#xff0c;即解码边界框。这是在目标检测任务中常见的一个步骤&#xff0c;用于将网络输出的边界框参数&#xff08;通常是相对于某种参考框的偏移量或者缩放参数&#xff09;转换为…

ico图标是什么意思?ico图标怎么生成?如何在线制作ico图标?

我们在浏览器浏览网页时或收藏某网页时&#xff0c;经常看到有些网页标题前面有一个图标&#xff0c;有些是logo&#xff0c;有些是其他图标&#xff0c;其实这种图标就是网站的favicon.ico图标&#xff0c;也就是我们平时大家所说ico图标。 什么是favicon.ico图标&#xff1f…

贪心/树形dp

思路&#xff1a; 因为如果红色节点的子树中如果有红色节点的话&#xff0c;那么该子树对其不会造成影响&#xff0c;不用考虑&#xff0c;因此我们在考虑每个红色节点时&#xff0c;不考虑其红色子树。那么如图&#xff0c;对每个红色节点答案有贡献的就是其所有非红色子节点…

一个project作为另一个project的Module

android如何引入另一个工程,Android studio 一个项目引入另一个项目作为Libary-CSDN博客 1.file-new-import module 2.

mysql 分表实战

本文主要介绍基于range分区的相关 1、业务需求&#xff0c;每日160w数据&#xff0c;每月2000w;解决大表数据读写性能问题。 2、数据库mysql 8.0.34&#xff0c;默认innerDB;mysql自带的逻辑分表 3、分表的目的:解决大表性能差&#xff0c;小表缩小查询单位的特点(其实优化的精…

不做内容引流,你凭什么在互联网上赚钱?

孩子们放寒假了&#xff0c;待在家里不是看电视&#xff0c;就是拿着手机刷视频&#xff0c;脸上是各种欢快和满足。只是一切换到写作业模式&#xff0c;孩子是各种痛苦表情包&#xff0c;家长则是使出浑身解数&#xff0c;上演亲子大战。可见娱乐常常让人愉悦&#xff0c;而学…

MongoDB从入门到实战之.NET Core使用MongoDB开发ToDoList系统(4)-Mongo数据仓储和工作单元模式封装

前言 上一章我们把系统所需要的MongoDB集合设计好了&#xff0c;这一章我们的主要任务是使用.NET Core应用程序连接MongoDB并且封装MongoDB数据仓储和工作单元模式&#xff0c;因为本章内容涵盖的有点多关于仓储和工作单元的使用就放到下一章节中讲解了。仓储模式&#xff08;R…

(done) 什么是特征值和特征向量?如何求特征值的特征向量 ?如何判断一个矩阵能否相似对角化?

什么是齐次方程&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198159 行列式和是否有解的关系&#xff1f; https://blog.csdn.net/shimly123456/article/details/136198215 特征值和特征向量 参考视频&#xff1a;https://www.bilibili.com/video/BV…

基于springboot+vue的在线宠物用品交易网站(前后端分离)

博主主页&#xff1a;猫头鹰源码 博主简介&#xff1a;Java领域优质创作者、CSDN博客专家、阿里云专家博主、公司架构师、全网粉丝5万、专注Java技术领域和毕业设计项目实战&#xff0c;欢迎高校老师\讲师\同行交流合作 ​主要内容&#xff1a;毕业设计(Javaweb项目|小程序|Pyt…

uni-app 经验分享,从入门到离职(五)——由浅入深 uni-app 数据缓存

文章目录 &#x1f4cb;前言⏬关于专栏 &#x1f3af;什么是数据存储&#x1f9e9;数据存储——存储&#x1f4cc; uni.setStorage(OBJECT)&#x1f4cc; uni.setStorageSync(KEY,DATA) &#x1f9e9;数据存储——获取&#x1f4cc; uni.getStorage(OBJECT)&#x1f4cc; uni.g…

学会如何打印菱形

打印菱形 题目描述&#xff1a;解法思路&#xff1a;解法代码运行结果&#xff1a; 题目描述&#xff1a; 输入⼀个整数n&#xff0c;打印对应2*n-1行的菱形图案&#xff0c;比如&#xff0c;输入7&#xff0c;输出如下图案&#xff0c;图案总共13行 解法思路&#xff1a; …

企业计算机服务器中了crypt勒索病毒怎么办,crypt勒索病毒解密数据恢复

计算机服务器设备为企业的生产运营提供了极大便利&#xff0c;企业的重要核心数据大多都存储在计算机服务器中&#xff0c;保护企业计算机服务器免遭勒索病毒攻击&#xff0c;是一项艰巨的工作任务。但即便很多企业都做好的了安全运维工作&#xff0c;依旧免不了被勒索病毒攻击…

队列的基本操作——常见队列的对比分析(c语言完整代码包含注释)

目录 一、队列 1.1基本概念 1.2基本操作 1.3 队列分类 1.3.1带头队列 1.3.2不带头队列 1.3.3 循环带头队列 1.3.4 循环不带头队列 1.3.5 总结 二、代码实现 2.1带头队列 2.2不带头队列 2.3循环带头队列 2.4循环不带头队列 一、队列 1.1基本概念 队列&#xff08…

RAW 编程接口 TCP 简介

一、LWIP 中 中 RAW API 编程接口中与 TCP 相关的函数 二、LWIP TCP RAW API 函数 三、LwIP_Periodic_Handle函数 LwIP_Periodic_Handle 函数是一个必须被无限循环调用的 LwIP支持函数&#xff0c;一般在 main函数的无限循环中调用&#xff0c;主要功能是为 LwIP各个模块提供…

由于找不到d3dx9_43.dll无法继续执行的解决方法,5种有效的方法

丢失d3dx9_43.dll文件可能会引发一系列运行问题&#xff0c;具体表现在哪些方面呢&#xff1f;首先&#xff0c;它是DirectX 9.0c的一个重要动态链接库文件&#xff0c;对于许多基于此版本DirectX开发的老旧或经典PC游戏至关重要。一旦缺失&#xff0c;可能导致这些游戏无法启动…

element ui 安装 简易过程 已解决

我之所以将Element归类为Vue.js&#xff0c;其主要原因是Element是&#xff08;饿了么团队&#xff09;基于MVVM框架Vue开源出来的一套前端ui组件。我最爱的就是它的布局容器&#xff01;&#xff01;&#xff01; 下面进入正题&#xff1a; 1、Element的安装 首先你需要创建…

基于Java+Selenium的WebUI自动化测试框架(一)---页面元素定位器

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

糖尿病性视网膜病变(DR)的自动化检测和分期

糖尿病性视网膜病变&#xff08;DR&#xff09;的自动化检测和分期 提出背景DR的阶段及其特征 历年解法计算机视觉方法多分类方法 新的解法深度学习方法迁移学习大模型多模型集成全流程分析 总结特征1&#xff1a;图像分割特征2&#xff1a;疾病分级特征3&#xff1a;治疗建议生…