2024/7/3
1.hashmap的实现原理、数据结构、扩容机制、数组多大会变成树
实现原理:HashMap 是基于哈希表的 Map 接口的实现,它使用散列算法将键(Key)映射到特定的桶(数组索引)中。每个桶可以链接一个键值对的链表(在Java 8及以上版本中,当链表长度超过一定阈值时会转换为红黑树以提高查询效率)。
数据结构:在Java 8以前,HashMap的主要数据结构是数组+链表。从Java 8开始,引入了红黑树,当链表长度超过8时,该链会被转换成红黑树,以减少在链表过长时的查询时间复杂度。
扩容机制:当HashMap中的元素数量超过其容量与负载因子的乘积时,HashMap会进行扩容。扩容操作会创建一个新的、容量更大的数组,并将原数组中的所有元素重新哈希并放入新数组中。扩容后的容量是原容量的两倍。
数组多大会变成树:在Java 8及以上版本中,当链表的长度达到8并且数组的长度大于等于64时,该链表会被转换为红黑树。如果在树化后,树中的节点数降到6以下,则树又会退化回链表。
2.concurrenthashmap了解吗
- ConcurrentHashMap 是 Java 并发包(
java.util.concurrent
)下的一个线程安全的 HashMap 实现。在 Java 7 中,它通过分段锁(Segment)技术实现,即将整个哈希表分成多个片段,每个片段配有一把锁,从而允许多个线程同时访问不同片段的数据。而在 Java 8 中,它采用了更为精细的锁粒度——CAS(Compare-and-Swap)操作加上部分桶的锁,以及红黑树的结构,进一步提高了并发性能。
3.vue了解吗?uni-app了解吗?
Vue.js 是一种用于构建用户界面的渐进式JavaScript框架,它允许开发者声明式地描述应用状态和界面,易于理解和维护。Vue的核心库专注于视图层,易于与其他库或现有项目集成。
Uni-app 是一个使用 Vue.js 开发所有前端应用的框架,支持一次编写,跨平台编译到iOS、Android原生应用、各种小程序(微信/支付宝/百度/头条/QQ等)、H5网页等,大大提高了开发效率和代码复用率。
4.说说你的项目
5.事务的几种隔离机制
- 读未提交(Read Uncommitted):事务可以看到其他未提交事务的修改。
- 读已提交(Read Committed):事务只能看到已经提交的事务所做的更改。
- 可重复读(Repeatable Read):在一个事务内多次读取同一数据都是一致的,不会受到其他事务影响。
- 串行化(Serializable):最高隔离级别,强制事务串行执行,避免了幻读、脏读、不可重复读的问题。
6.索引了解多少
- B-Tree索引:最常见的索引类型,适用于范围查询和排序。
- 位图索引:适用于低基数字段(即值种类很少的字段)。
- 全文索引:用于全文本搜索。
- 覆盖索引:索引包含了查询所需的所有数据,无需回表查询。
- 唯一索引:保证索引列的值唯一。
7.分库分表了解吗
分库分表是数据库水平扩展的一种策略,用于解决单个数据库处理能力和存储空间的限制问题。分库是指将数据分布在不同的数据库服务器上,分表则是将一张大表的数据按照某种规则(如哈希、范围等)分散到多个表中。这样可以提高数据处理能力和系统的整体性能,同时还能降低单点故障风险。
8.redis用过哪些
Redis 是一个开源的、内存中的数据结构存储系统,常用于缓存、消息队列、分布式锁等场景。具体使用包括但不限于:
- 字符串(Strings):最基本的数据类型,可以存储任何类型的数据。
- 哈希(Hashes):用于存储对象,每个哈希可以存储多个键值对。
- 列表(Lists):有序的数据结构,可以做栈、队列操作。
- 集合(Sets):无序不重复的数据集合。
- 有序集合(Sorted Sets):类似于集合,但每个成员都有一个分数,用于排序。
- 发布/订阅(Pub/Sub):消息模式,可以发送消息到频道,让多个订阅者接收。
9.redis分布式锁用过吗
Redis分布式锁是一种利用Redis命令(如 SETNX、GETSET、EVAL 等)实现的简单而高效的分布式锁机制。基本思路是客户端在执行某个操作前,先在Redis中尝试设置一个唯一的锁标识,如果设置成功表示获取锁,执行完操作后再释放锁。这种方式可以防止多个客户端同时操作共享资源,保证并发安全。常用的实现有SET resource_name lock_value NX PX milliseconds
命令来实现带超时的锁,以及使用Lua脚本来确保释放锁的操作是原子性的。
10.springcloud组件了解哪些
Eureka: 服务注册与发现组件。Eureka 作为一个服务注册中心,负责管理微服务实例的状态信息,如 IP 地址、端口号等。服务提供者向 Eureka 注册自己的信息,服务消费者则从 Eureka 获取服务提供者的地址列表,实现服务间的动态发现与路由。