面试-公共
2024-01-09 14:11:44 5 举报
AI智能生成
在面试-公共环节中,面试官将评估候选人的沟通能力、团队协作能力、解决问题能力和领导力等方面。这个环节通常包含自我介绍、提问和回答等环节。候选人需要准备好如何展示自己的优势,同时应对面试官可能提出的各种问题。面试-公共环节是展示个人能力和魅力的重要机会,候选人需要充分准备,以获得面试官的认可。
作者其他创作
大纲/内容
面试技巧
特质
诚实
积极/主动
责任心
良好的沟通能力
良好的解决问题能力
良好的汇报结果能力
《金字塔原理》
结论先行
提早的暴露问题,不要藏起来
自我驱动
有没有系统的学习知识
你最近有没有完整的看过一本书
《大话数据结构》《大话设计模式》
极客时间
有没有完整的看过一套教学视频
K8s,docker、spring源码、JUC、JVM
考察的是你的知识是成体系的还是碎片化
场景题
分析面试官到底想问的是啥
考察的是综合能力
良好的解决问题的能力
沟通表达能力
逻辑思维能力
技术实践能力
工作效率能力
不管武功好不好看,好用就行
不管黑猫白猫,抓到耗子就是好猫
实践一下
聊一聊什么是Hashmap?
1、数据结构
数组+链表/红黑树组成
当链表长度大于等于8并且数组容量大于64时,链表转红黑树
当长度小于等于6时,红黑树转链表
数据结构(时间复杂度、空间复杂度)
数组(一段连续的内存空间,存储的是相同类型的数据)
O(1)
链表(不连续的内存空间)
O(n)
红黑树
O(logn)
2、使用方式
put时计算hashcode值,得出数组下角标,找到数组存放位置
get时计算hashcode值,得出数据下角标,找到数组存放位置,链表内数据用equals对比取出,红黑树用getTreeNode()取出
能不能被优化呢?
Hash算法优化
1、用高16位字节码 和 低16位字节码 异或 得出结果(保留了高16位和低16位的特佂)
2、只需要对比低16位字节码即可,就可以避免大部分的hash冲突
寻址算法优化
用与运算
公式:(hash & (n-1) == > 用 hash取模 %)
因为与运算,在计算机底层性能更好
2a + 2b = 2(a+b)
3、hash冲突
底层是链表/红黑树组成
数据结构/时间复杂度
4、扩容机制
负载因子 0.75 * 数组容量 = 阀值
当达到阀值的时候,会自动扩容 为当前数组容量的2倍大小
底层原理,优化后逻辑
新问题,数据迁移,数据新节点寻址的问题
用与运算
公式:(hash & (n-1) == > 用 hash取模 %)
对比公式得出,与运算 不需要取模,性能更高
例子:
原数组容量是16,array[5]=key1,array[5]=key2,
当保存了12个数据后,开始扩容至容量32,开始数据迁移,
迁移后数据位置为:array[5] = key1, array[21]=key2;
有一个规律:newIndex = oldIndex + oldMapCapacity
21 = 5 +16
原数组容量是16,array[5]=key1,array[5]=key2,
当保存了12个数据后,开始扩容至容量32,开始数据迁移,
迁移后数据位置为:array[5] = key1, array[21]=key2;
有一个规律:newIndex = oldIndex + oldMapCapacity
21 = 5 +16
扩充HashMap时,不需要重新计算hash。只需要看原来的hash值新增bit是1还是0就
可以了!
1.是0索引没变
2.是1索引变成“原索引+oldCap(原位置+旧容量)”。
可以了!
1.是0索引没变
2.是1索引变成“原索引+oldCap(原位置+旧容量)”。
使用技巧
设置初始化容量:new HashMap(256)
数组长度是2的n次幂。引申到代码优化能力
有一个场景是分页查询100条数据,所以初始化容量应该是(100/0.75)+1=134,134经过jdk处理后【2的n次幂】,集合初始容量会被设置成256
引入线程安全概念:concurrentHashMap
分段锁
cas+volatile/synchronized
0 条评论
下一页