今天上午 11:00 面试了近 1 个半小时,最后一道算法题 121.买卖股票最佳时机 最后只写了一个 O(n^2) 的算法,之前虽然做过但是当时没有想起来思路,然后下楼吃饭突然又有了思路,真的是。。。,如下是解法:
#include <iostream>
#include <vector>
int main() {
std::vector<int> prices = {7, 1, 5, 2, 6, 4};
int res = 0;
int buymin = prices[0];
for (int i = 1; i < prices.size(); ++i) {
res = std::max(res, prices[i] - buymin);
buymin = std::min(buymin, prices[i]);
}
std::cout << res << std::endl;
return 0;
}之后就是问在工作中的项目经历,问得也很细致,具体到了某个协议的具体字段,具体内容是:
面试的岗位是录制系统开发,之后讨论下 srs 的内容,整体面下来更偏媒体侧,这还没问 ffmpeg 和编解码相关的问题,因为之前在声网是做控制侧开发,SDK 以库的形式提供给我们,所以导致音视频方面的知识有些欠缺,没有办法,只能补了。
虽然面试了 1 个半小时,但过得可能性不是很大。
我主动询问 hr,才被通知一面过了,约的今天上午 11:00 的二面,关于二面问了很多关于优化方面的问题,无论是媒体侧还是 webserver:
epoll_wait 设置的阻塞时长为最先要超时节点的超时时间,当考虑上十万个 client 端连接进来,如果最新超时时间只有几十微秒,epoll_wait 岂不是会被反复触发,也就会造成频繁的用户态和内核态的切换,消耗 cpu 的资源,关于这种情况你会如何优化呢。算法题:盛水最多的容器,因为很长时间没刷了,单调栈的做法没有写出来,就写了一个 O(n^2) 的暴力做法,正确解法如下:
#include <iostream>
#include <vector>
int main() {
std::vector<int> v = {1, 8, 6, 2, 5, 4, 8, 3, 7};
int n = v.size();
int i = 0, j = n - 1, res = 0;
while (i != j) {
res = std::max(res, std::min(v[i], v[j]) * (j - i));
if (v[i] > v[j]) {
--j;
} else {
++i;
}
}
std::cout << res << std::endl;
return 0;
}最后问了下团队那边是否愿意培养控制侧转媒体侧,因为这个岗位更多涉及到媒体方面的技术栈比如 rtp / rtcp / hls / rtmp 协议、srs 以及音视频方面的知识等,面试官给的反馈是需要招有经验的开发人员,该岗位也是急招,能基于现有的录制系统快速做优化改进和架构升级,同时这个项目也是 24 年公司的一个大项目。所以听到这过的可能性也就不是很大,有点遗憾在声网没多看看 ServerSDK2 的源码,掌握一些媒体侧相关的知识。