华润建材一面

时间

2024.05.31

内容

  1. 自我介绍

  2. 在进行微服务拆分时,你是如何界定和拆分服务的?拆分的原则是什么?

    1. 基于业务功能进行拆分,拆分原则主要是保证每个服务的独立性和功能的单一性,尽量减少服务间的耦合度,同时增强扩展性和可维护性。
  3. 你了解es的存储结构是怎样的吗?

    1. Elasticsearch的存储结构主要是基于倒排索引的形式。每个文档都会生成一个倒排索引,用于存储词语在文档中的位置,以便快速查询。
    2. 索引数据存储在磁盘上,并加载到内存中进行快速访问。倒排索引允许Elasticsearch实现高效的全文搜索功能。
  4. 你是否有研究过开源项目或中间件的底层源码和实现?

    1. 对HashMap、ArrayList等数据结构进行过研究,其他研究比较少,主要是优先使用和集成这些项目。
  5. 你对Java从1.7到1.8的升级了解多少?特别是在集合框架方面的优化和改进。

    1. ConcurrentHashMap:从1.7的分段锁机制改为1.8的CAS(Compare-And-Swap)机制,并引入红黑树来优化哈希冲突。
    2. Stream API:引入了Stream API,允许对集合进行声明性处理,如过滤、排序和映射,简化了集合的操作。
    3. Lambda表达式:引入Lambda表达式,使得可以将代码块作为参数传递,极大简化了代码。
  6. 你能否详细说明1.8版本的ConcurrentHashMap是如何实现的?

在Java 1.8中,ConcurrentHashMap的实现从分段锁改为了使用CAS机制进行无锁操作。具体来说,它采用一种混合了分段锁和节点锁的结构:

  1. CAS:用来保证对某个节点的原子性操作,如插入和删除。
  2. 红黑树:在链表长度超过一定值时(默认是8),链表会转换为红黑树,从而提高查找性能。
  3. 锁:在扩容和某些复杂操作时,仍然需要对整个表或部分表进行锁定,以保证一致性。

7. 请你讲解一下红黑树的结构和应用。

红黑树是一种自平衡二叉搜索树,其节点具有颜色属性(红或黑)。关键规则包括:

  • 每个节点要么是红色,要么是黑色。
  • 根节点必须是黑色。
  • 红色节点不能连续,即红色节点的子节点必须是黑色。
  • 从根节点到叶节点的每条路径都必须包含相同数量的黑色节点。
  • 红黑树主要应用在需要平衡树结构的场景,如Java中的TreeMap和ConcurrentHashMap。它通过保持树的平衡来保证插入、删除和查找操作的时间复杂度为O(log n)。
  1. B+树的结构是怎样的?为什么选择B+树而不是B树?

B+树是一种改进的B树,其特点是所有数据都存储在叶子节点,内节点只存储键。叶子节点之间通过指针相连,形成一个链表,这使得B+树适合范围查询。
选择B+树的原因:

  1. 高效的范围查询:因为叶子节点间有链表连接,B+树在做范围查询时效率更高。
  2. 稳定的插入和删除:B+树的内节点只存储键,使得在插入和删除时调整树结构更加容易。
  3. 减少IO次数:因为数据只存储在叶子节点,B+树减少了IO次数,使得查询更高效。

9. 你了解MySQL有哪些存储引擎?

MySQL主要有以下存储引擎:

  1. InnoDB:支持事务、外键、行级锁,是最常用的存储引擎,适用于大部分OLTP应用。
  2. MyISAM:不支持事务和外键,但性能较好,适用于只读应用或轻量级应用。
  3. Memory:数据存储在内存中,速度快,但数据不持久化,适用于临时数据或缓存。
  4. CSV:以CSV格式存储数据,适用于简单的数据交换。

10. COUNT、COUNT()、COUNT(字段名)三者有什么区别? 6. COUNT():统计所有行的数量,包括NULL。 7. COUNT(字段名):统计指定字段非NULL值的数量。 8. COUNT(DISTINCT 字段名):统计指定字段的不同非NULL值的数量。

#面经##软件开发笔面经#
全部评论

相关推荐

2 2 评论
分享
牛客网
牛客企业服务