面试经验贴(长期)

发布于:2024-07-04 ⋅ 阅读:(57) ⋅ 点赞:(0)

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组件了解哪些

  1. Eureka: 服务注册与发现组件。Eureka 作为一个服务注册中心,负责管理微服务实例的状态信息,如 IP 地址、端口号等。服务提供者向 Eureka 注册自己的信息,服务消费者则从 Eureka 获取服务提供者的地址列表,实现服务间的动态发现与路由。


网站公告

今日签到

点亮在社区的每一天
去签到