转载 : https://mp.weixin.qq.com/s/T4_aNEGZdN7OMcpsexbZew
2.面试官:MySQL数据库中的全局锁、表锁、行级锁三种锁的应用场景有哪些?
我:在MySQL数据库中,全局锁、表锁和行级锁是用于管理并发访问和修改数据的不同锁级别,它们各自适用于不同的应用场景。
全局锁用于锁定整个数据库实例,通常用于数据库备份、维护、升级等操作。在使用全局锁期间,其他用户无法对数据库进行读写操作。
表锁用于锁定整个数据库表。对整个表进行操作,而不需要锁定单独的行时,使用表锁。当需要执行大批量数据的加载、删除或更新操作时,可以使用表锁来防止其他事务同时干扰。
行级锁用于锁定单独的数据行,当多个用户需要同时访问同一表的不同行时,行级锁是必要的,以允许并发访问。
小结:问这个的主要原因是,由于在字节的实习项目主要基于Mysql数据库相关的接口开发,在聊到电商的订单流数据同步的时候进行的提问,算是比较有含金量和难度的题目。
- 请你谈谈分布式系统的设计中的CAP定理是什么?
我:CAP定理是在分布式系统中三个核心属性之间的权衡关系。其定理核心在于一个分布式系统在这三个属性之间无法同时满足,只能选择其中两个。
一致性,在分布式系统中的所有节点上,数据复制必须保持一致。
可用性,分布式系统不能因为某个节点或部分节点的故障而导致整个系统不可用。
分区容忍性,分布式系统中必然会发生网络分区或故障,导致节点之间的通信中断。
4.手写代码实现LeetCode第93题:复原 IP 地址
小结:面试官直接让登录LeetCode网站,选一道你没做过的算法题目,现场要求手撕,回溯法,直接AC了。
面试结果:两天后约了二面…
二面面试过程
- 面试官:同学你好,看了一下,一面面试官的面评还是不错的,我这里有一道场景题:
总共有四亿不重复的int值,假如有源源不断新来的int值,怎么设计数据结构来判断新来的int值是否已存在?
我:使用数据结构布隆过滤器,将已有的四亿不重复的int值插入到布隆过滤器中。为每个值计算多个哈希值,并将对应的位设置为1。
当新的int值到来时,你可以使用布隆过滤器来判断是否已存在。将新值计算多个哈希值,然后检查对应的位是否都为1。如果有任何一个位为0,那么新值肯定不存在。
小结:如果所有位都为1,那么新值可能存在,但也可能是误判。布隆过滤器的一个重要参数是误判率,可以根据需求来调整该参数。增加哈希函数的数量可以降低误判率,但也增加了存储和计算的开销。
2.面试官:Redis数据库支持哪五种数据结构?
我:字符串String,字符串数据结构可以用于缓存、计数器、分布式锁等应用;
列表List,有序的字符串元素集合,支持从两端进行插入和删除操作。它可以用于实现队列、堆栈等数据结构。
集合Set,Redis的集合是无序的字符串元素的集合,不允许重复元素。
有序集合Sorted Set,有序集合是集合的扩展,每个元素都关联一个分数,元素根据分数进行排序。
散列Hash,,它用于存储字段和与字段关联的值的映射关系。
小结:基础的八股文,多解释一下内容进行一下扩展,因为越来越多的面试官,不太喜欢“教科书”式回答的方法。
3.面试官:Redis缓存数据库的数据结构中Sorted Set的底层实现以及使用场景?
我:Redis的有序集合的底层实现主要依赖于跳跃表和哈希表(Hash Table)两种数据结构。Sorted Set的典型应用包括实时排行榜,通过分数排序,可以轻松实现游戏排行榜、社交媒体关注者排名等以及计分系统,用于记录用户分数、评分或评级。
4.InnoDB存储引擎使用的是B+树的索引结构,其叶子节点大小是多少?
我:这个还忘了,随便说了一个4KB… 面试官摇了摇头。
小结:对于InnoDB存储引擎来说,它使用了16KB大小的数据页(page),而叶子节点通常存储在这些数据页中。这并不是说叶子节点的大小限制是16KB,而是说一个数据页的大小是16KB。因此答案应该是16KB。
- 手写代码实现LeetCode第300题:最长递增子序列
小结:动态规划+贪心,不难,直接秒了,以下是Java的解题代码: