4.26 快手暑期实习测开一面(约50min)

  1. == 和 equals() 的区别

  2. String 中 equals() 的实现

  3. 介绍 HashMap 的底层实现

  4. HashMap 的扩容机制,当数组的长度达到多少时会进行扩容,长度的单位是什么

  5. JDK1.8 之前 HashMap 是怎么用数组和链表组成的

    原来是用数组作为主体,链表主要是为了解决哈希冲突(用拉链法解决冲突),

    我说成数组存键,链表存值了。。我是傻呗。。

  6. 红黑树的结构

  7. 为什么要在 JDK1.8 的 HashMap 中引入红黑树(减少搜索时间)

  8. 为什么用红黑树,B+树的高度很矮,查询速度也很快,为什么不用 B+树呢

  9. 你了解线程吗?知道线程池吗?

  10. 线程的创建方式

  11. 什么是线程池?

  12. 为什么要用线程池?

  13. 如何创建线程池?

  14. 线程池处理任务的流程

  15. 当任务数很少而线程池中的线程很多怎么办?

  16. 介绍几种你了解的排序算法

  17. 快排的实现原理

  18. 树的遍历方法?除了递归遍历还有别的吗?

  19. 树的存储结构

  20. 算法题:力扣原题--合并两个有序链表(输入输出要自己写,难受)

    最后是写了核心代码,跟面试官讲自己的思路,输入不太熟练

  21. 反问环节:

    a. 一共有几轮?三轮,两轮技术,一轮 HR

    b. 多久出结果?不确定,看 HR 那边反馈

    c. 这是测开岗吧?(没错,面的我都怀疑是不是测开岗了)部门的业务方向是?

真的是头大,问了好多数据结构和算法

我看牛客上的大佬们都说是问项目和测试方法啊,怎么到我这变数据结构了?

#快手##暑期实习##测开#
全部评论
你这个完全是八股轰炸
1
送花
回复
分享
发布于 04-27 14:23 北京
假设我们有一个 HashMap,初始大小为 16,加载因子为 0.75。现在我们要往这个 HashMap 中插入一些键值对。 初始状态下,HashMap 中有一个大小为 16 的数组,每个数组元素都是一个桶。 我们插入一些键值对,根据键的哈希值确定它们应该放置在数组的哪个位置。 当某个位置的桶中出现了多个键值对,发生了哈希冲突,这时就会形成链表。 如果链表的长度超过了阈值(默认为 8),则该链表会被转换为一棵红黑树,以加快检索操作的效率。 如果插入的键值对数量超过了当前数组大小乘以加载因子(即 size > capacity * loadFactor),HashMap 会自动进行扩容操作,将数组大小翻倍,并重新计算每个键值对应的位置。
点赞
送花
回复
分享
发布于 04-27 11:14 广东
滴滴
校招火热招聘中
官网直投
假设我们的系统有 4 个 CPU 核心,并且我们希望任务的平均响应时间在 100 毫秒以内。我们可以按照以下步骤来设置线程池大小: 确定 CPU 核心数:系统有 4 个 CPU 核心。 确定任务特性:任务是 I/O 密集型的。 设置线程数:根据公式 线程数 = CPU 核心数 * (1 + 等待时间 / 计算时间) 来计算。假设等待时间是任务响应时间的 90%,计算时间是任务响应时间的 10%。因此,线程数 = 4 * (1 + 0.9 / 0.1)= 40。这是一个初始值,稍后我们可以根据实际情况进行调整。
点赞
送花
回复
分享
发布于 04-27 11:19 广东
红黑树是一种自平衡的二叉查找树,它具有以下特性: 每个节点要么是红色,要么是黑色。 根节点是黑色的。 每个叶子节点(NIL 节点,空节点)是黑色的。 如果一个节点是红色的,则其子节点必须是黑色的(不能有两个相邻的红色节点)。 从任意节点到其每个叶子节点的所有路径都包含相同数量的黑色节点(即,黑色节点的高度相同)。
点赞
送花
回复
分享
发布于 04-27 11:20 广东
B+树和红黑树是两种不同的数据结构,各自适用于不同的场景和应用需求。虽然 B+树在某些方面有其优势,但在 HashMap 中使用红黑树而不是 B+树可能是出于以下考虑: 1. **内存占用和指针开销**:B+树通常需要更多的指针来维护节点之间的连接关系,这可能会增加内存占用和访问时间。相比之下,红黑树的节点结构相对简单,只需要保存左右子节点的指针、键和值。 2. **实现复杂度**:B+树的实现相对复杂,包括节点分裂、合并、移动等操作,而红黑树的实现相对简单,更易于理解和维护。 3. **数据分布的特点**:HashMap 中的元素是通过哈希函数进行分布的,而 B+树是一种有序的树结构,适合于有序数据的存储和检索。在 HashMap 中,元素的分布可能是不均匀的,因此红黑树更适合用于处理这种不确定的、哈希碰撞导致的链表长度过长的情况。 4. **查询操作的频率和效率**:虽然 B+树在范围查询等场景下具有较好的性能,但在 HashMap 中,主要的操作是根据键进行查找,而不是范围查询。在这种情况下,红黑树的查找操作可能会更加高效。
点赞
送花
回复
分享
发布于 04-27 11:23 广东
来合并两个有序链表。具体步骤如下: 1. 创建一个虚拟头节点 `dummy`,以及一个指针 `current` 指向 `dummy`。 2. 使用 `while` 循环,遍历两个链表 `l1` 和 `l2`,直到其中一个链表为空。 3. 在循环中,比较 `l1` 和 `l2` 当前节点的值,将较小的节点连接到 `current` 的下一个节点,并将相应链表的指针向后移动。 4. 当其中一个链表遍历完成后,将剩余链表的部分直接连接到 `current` 的下一个节点。 5. 返回虚拟头节点的下一个节点,即合并后的链表的头节点。 这样就完成了两个有序链表的合并。
点赞
送花
回复
分享
发布于 04-27 13:27 广东
挂掉啦,很快啊😅就是故意来刁难人的
点赞
送花
回复
分享
发布于 04-28 11:27 江西
而且我这还只是暑期实习真无语
点赞
送花
回复
分享
发布于 04-28 11:28 江西

相关推荐

没及时写已经有点忘了,写写想得起来的orz...一面(35min):1. 自我介绍2. python的内存管理机制,和c有什么区别3. 链表和数组的区别4. 关于几个常用数据库,redis了解吗5. 讲一下数据库索引,redis的索引机制6. 项目里是怎么做测试的(简单说了一些流程和用到的测试方法)7. 入职时间,实习时长8. 反问(没问什么)手撕代码:最长回文子串,sql题:一个很简单的笛卡尔积select(手撕代码限时10-15分钟左右,用中心扩展写的,代码过了会让讲一下思路)(一面之后两小时就打电话约二面了,流程真的很快)二面(15min):1. 自我介绍2. 顺着自我介绍问,项目里的测试经历,怎么测试的,发现了什么bug,怎么解决的(回答得比较多,因为项目里测试做得多,讲了讲项目的测试安排,测试大纲怎么写的,以及顺带提了些自己懂的测试知识和测试工具)3. 讲讲对测试开发的理解(讲了一些关于自动化测试的)4. 职业规划5. 针对一面写的代码写写测试用例(讲了下设计思路,然后分了正常、各类异常情况之类的)6. 根据你设计的测试,一面的代码有什么问题吗(回答了没考虑输入检查,错误处理,毕竟是个算法题,直接假设输入规范了)7. 确认入职时间,实习时长8. 反问(技术栈要求,自己有什么需要提升的点)二面后第二天打电话oc,無hr面,隔天收到offer祝大家暑期顺利!
点赞 评论 收藏
转发
5 17 评论
分享
牛客网
牛客企业服务