0%

Hulu实习面试经历

蹭着2系就业部的光去hulu参观了一波,本来想问问明年暑期的事的结果听hr小姐姐说现在投实习比较容易进,回来路上纠结了一会感觉好像也不损失啥就直接找师兄投了简历


更新:现场面完居然发了offer,本来以为肯定没戏了,不过听说表现是处于过与不过之间,可能是看人少就给过了,某种意义上算是捡了个漏emmm。

Phone Interview

不得不说hulu效率真的很高,第二天就联系安排电面的事了

简历

开场自我介绍,然后对着简历问了大概十五分钟的样子,然后开始项目轮着问。

  • 跨链部分怎么实现的,具体细节是什么,身份验证是什么样的
  • 讲讲goroutine
  • 讲讲Nginx
  • SM3怎么实现的,是怎么保证他的哈希性质的
  • Raft的共识算法是什么意思,leader机制之类的
  • 哪个项目给你的帮助最大,收获了什么

标粗的基本是以后要补的,尤其需要重点看一些go的知识了。

算法

Q1:给一个形如{[[{abc(d)}]a[]]()}的字符串,一对括号表示一个节点,中间均为其子节点,把这样的一棵树构造出来

写的时候挺慌的刚开始,没啥状态想了半天,最后干脆先硬着头写了核心部分,写的时候思路逐渐清晰了起来把剩下的写完了。感觉写的时候沟通还是太少导致面试官没太看懂我的代码,写完在跟面试官讲思路的时候还跟她重新解释了一下,中途发现了一个bug补了上去。写了大概20分钟

面试完跑了跑万幸没什么bug直接就能跑通。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
#include<bits/stdc++.h>
using namespace std;
// {[[{abc(d)}]a[]]()}
// {abc} [(((((])))) dp[i][j]= min(dp[i+1][j-1]+2/0 dp[i+1][j]+1 dp[i][j-1]+1)
struct TreeNode {
char val;
vector<TreeNode*> child;
TreeNode(char x): val(x), child(vector<TreeNode*>()) {};
}

TreeNode* Solution(string s) {
if (s=="")
return NULL;

TreeNode* root=new TreeNode(s[0]);

if (s.length()==1)
return root;

stack<char> sta;
// sta.push(0);

for (int i=1;i<s.length()-1;i++) {
if (s[i]=='(' || s[i]=='[' || s[i]=='{') {
sta.push(i);
}
if (s[i]==')' || s[i]==']' || s[i]=='}') {
int t=sta.top();
sta.pop();
if (sta.empty()) {
root->child.push_back(Solution(s.substr(t, i-t+1)));
}
}
if (sta.empty() && s[i]<='z' && s[i]>='a')
root->child.push_back(Solution(s.substr(i,1)));
}

return root;
}

int main() {
string s;
cin>>s;
TreeNode* root= Solution(s);
return 0;
}

Q2Q3没有写代码只是说了说思路

Q2:如果字符串中括号存在多余或缺失情况怎么补全

这个如果只有一个括号还好说,但是3种括号实在是emmm一时间不知道怎么处理。想了一会给了一个暴力一点的思路:按种类统计栈中左括号个数,当遇到一个右括号的时候,首先查看栈中是否有能与他匹配的左括号,如果有就一直出栈直到匹配为止;没有就意味着这个右括号多余删掉他自己就行了。

说完之后感觉面试官并不是很满意这个答案,表示太暴力了于是又加了一个条件:

Q3:要求最少的增删次数

这个因为时间不多了就直接给了个dp思路来算最少次数,只想到了$O(n^2)$的区间dp思路跟她说了一下,不知道有没有更好的。

这个现在想了想可能有点没领会到意思,如果她是说不仅要最少次数并且还要给出一个方案的话,我这个答案明显是不太合格的。

最后问我有什么问题,我就大概问了下进去会干什么以及有没有分布式相关的工作,她表示他们分布式也不是很深入的只是再用。时间基本正好卡在了1小时。

Onsite

慌成一匹野马。。当年没学好还瞎吹的牛都是要还的,写上分布式被一顿问成傻子,,

邮件里hulu建议提前15分钟到,结果我提前半小时到了就在楼下坐了一会才上去。就记得当时看着各路人来人往心里不停安慰自己到现场面就达到目标了剩下无所谓了之类的,手机里刷的基础知识也没怎么看进去的样子。

一面

上去之后联系了hr被领到了一个小屋子里,给了个mbp让我等一会面试官来。结果一面面试官迟到了10分钟的样子,我在那里没什么事就研究了一会他那个网页ide,顺便找的了他的括号补全选项打开了2333,本来还在想这个ide不好用怎么办的问题。另外随便敲了点做题模版上去。

一面面试官应该是个对分布式很有理解的大佬,自我介绍介绍完之后就对着raft开始问理论我就有点慌(当时就写了个实现实在是对理论没去研究)。先问对raft和paxos的理解,确实没看过paxos只好说paxos没看懂,然后问我说你看过raft论文是吧,答了一句看过(以为是要问算法逻辑,可能是说的最错的一句话),然后大佬就顺口“那你说下raft安全性证明吧”emmm,当时就感觉不太妙支支吾吾说自己知道实现但不清楚背后理论。然后甩给我一个词“Linearizability”让查资料给他解释一下,当时就开始慌了,查了一圈还查偏了不知道查了个啥玩意就说回去了,然后对应的题也就解释错了emmm。感觉面试官看不下去了有点失望给我重新解释了一遍,当时就觉得自己应该是凉了。

之后又对着公私钥加密问了一些,比如为什么有公私钥加密还要有对称加密之类的。本来以为自己这方面没问题的结果面试官特别喜欢问“一定是么”,一被问就开始慌。。还是基础太不熟了。这时候已经有点头大了以至于听到说做题吧的时候甚至舒了口气。。。

题倒是没啥难的,除了面试官不让我调试,倒是开始前随便写的代码让面试官楞了一下(然后就给全注释掉了- -)感觉他可能知道我做题比较好,看着题库一直念叨这个太简单太简单之类的搞的有点慌。结果最后给了我一个lower_bound让我实现,虽然二分搞定了但是对左闭右开的写法一直不是很能理清楚,求稳就改了一下在结尾加了个if判断。没有调试写二分实在是有点虚,被之前搞的有点怕每次面试官问我是对的么我都要重新算一遍。。。所幸结果还是对的。

然后看还有时间就又问了一个set的问题,问我怎么用$O(1)$的时间复杂度实现set.clear(),刚开始还没啥思路想尝试直接用指针来做,结果被提示说开内存也不是$O(1)$。愣了一会突然想到了加一个count计数就行了,不算难。写出来之后面试官看时间差不多了就撤了让我等第二个,其实这时候就感觉已经凉了emmm,心里想的都是重在参与,回去要对简历尤其分布式的多看看之类的。

二面

二面顺利多了,二面面试官倒是挺帅的嗯2333,一看就是健身的,似乎是被拉过来的表示自己正在回邮件没回完。也是先来了个自我介绍,然后让我介绍一下实验室的项目。开始之前我问对区块链了解的多么,结果面试官表示不是很了解然后反问这时候我该怎么办emmm。于是就重点解释了一下背景,整体来说感觉面试官对这个还是比较满意的。

然后做题就好多了,这个倒是让调试出来的。上来一道leetcode原题,想了一下直接秒了,感觉面试官有点没反应过来。但看起来应该我的解法还不是最优,和他想的不太一样,就一直在问我怎么再优化。这个当时有点卡住了没啥思路,面试官提示了一下就有思路了,梳理了一下思路讲了讲表示满意。做完这个面试官看了看时间还早,然后似乎心里还惦记着他的邮件emmm,感觉他看了看题库里没啥好题的样子(可能因为是平常实习不是校招没有拉满难度),问我知道拓扑排序么我表示知道,他就说行你写一个吧剩下时间都可以用来写这个,我回邮件去了233。也没太多要说的裸的算法,环的事情也跟他解释了一下就完事了。

二面整体很顺利了,面试官口气都感觉我已经过了的样子,然而我知道我一面什么吊样所以emmm。最后面试官问我有什么想问的,我就先问了问技术栈,他虽然讲了一下但表示这不是我需要考虑的需要啥学啥就是了。后面就在瞎聊了问了问hulu和Netflix竞争为啥都不知道hulu之类的他表示Netflix是大厂23333,看时间差不多了把我送到电梯口,表示hr会很快给结果就回去了。

总结

没问难题是个很大的因素。现场的一面暴露出来的问题太多了,自己思考深度确实不够,如果说分布式说不清还情有可原的话那密码学就是本职工作了。raft也得正经看完一遍,不然遇见懂行的暴露实在太惨。

hulu效率高的吓人,3点完事刚回实验室hr就来加微信表示发offer了整个人都是懵的,路上还在跟wl说一面那个样子估计凉了。只能说真就靠面试官抬一手了

hr小姐姐倒是很亲切23333还跟我解释为什么会这么快给offer,当时听着说面试官都给hire意见了我还没敢说话,我自己都觉得自己的现场一面有点看不下去,,,