MiniMax - 服务端研发 - 一面(春招第二面)
全程问的比较基础,简单聊了聊项目,到处问点基础八股,最后一个场景题和一个算法题,整体难度不大。自己好久没刷算法题了,只会一种堆解法,硬让我写快排,也是吭吃瘪肚。整体面试过程比较愉快,体验极好,最后反问工作时间,早 10,晚上不确定,一周大部分都是六天,一个月有一周可以双休,给我吓坏了。
技术面经
Intern:
- jiyun-ns 项目你做了哪些优化
- dag-engine 为什么需要使用 Redis 分布式锁
Webserver:
- poll 和 Epoll 有什么区别
- 水平触发和边沿触发有什么不同
MySQL:
- 如何优化一条 SQL 语句
- 事务隔离级别有哪些
- 可重复读会造成什么问题
- 如何解决幻读
- 为什么 InnoDB 底层使用 B+ 树
Redis:
- 基础数据类型有哪些
- ZSet 底层实现、为什么更高性能
- ZSet 底层为什么不使用树结构
- Redis 如何实现高可用
- Redis Cluster 如何实现数据分片
- Redis Cluster 中谁负责切换机器
Scene Problem:
- 现在有一个爬虫程序已经爬取了几亿条网页信息,如何保证在下一次爬取,可以跳过已经爬取过的网页,如果网页量达到千亿级别怎么办?
LeetCode:
- 输出数组中第 K 大的数(提示:借用快速排序思想)
#include <iostream> #include <vector> using namespace std; void quick_sort(std::vector<int>& nums, int start, int end, int k) { if (start >= end) { return; } int pivot = nums[start]; int i = start, j = end; while (i < j) { while (i < j && nums[j] >= pivot) { j--; } swap(nums[i], nums[j]); while (i < j && nums[i] <= pivot) { i++; } swap(nums[i], nums[j]); } // 在快速排序基础上增加了对于 pivot 右侧数组元素个数的判断 (其余与快排相同) if (nums.size() - i < k) { quick_sort(nums, start, i - 1, k); } quick_sort(nums, i + 1, end, k); } int main() { std::vector<int> nums = {1, 5, 9, 2, 3, 1, 4}; int k = 3; int n = nums.size(); quick_sort(nums, 0, n - 1, k); std::cout << nums[n - k] << std::endl; // 4 return 0; }#春招##软件开发2024笔面经#