第1轮:
- 从给定链表的末尾删除第 N 个节点。
我给出了直接的解决方案并在代码中对其进行了测试。先遍历得到链表的长度,然后再次遍历到达需要删除的第nk个元素。他寻求更好的解决方案。即使我想不出来,他也只解释了方法(2个指针)。
然后我们对 https://leetcode.com/problems/fizz-buzz-multithreaded/ 进行了一些讨论。我没有给出完整的解释,我讲了如何使用信号量和锁的概念来解决它。
Round 2:面试官很友好,他明确告诉期望的不是语法正确的代码,而是结构和逻辑。他一开始让我写很小的方法,最后我写了下面的代码。
MyClass maxValue(List arr){
MyClass max = arr[0];
for(int i=1;i arr){
MyClass min = arr[0];
for(int i=1;i arr){
MyClass max = arr[0];
MyClass min = arr[0];
List maxList = new ArrayList();
List minList = new ArrayList();
for(int i=0;i
然后我们讨论了如何改进“bothValues”方法。方法是获取每对的最小值和最大值,然后分别在所有最大值和最小值上调用 maxValue 、 minValue 方法。这样我们就可以减少对greaterThan 方法的调用次数。
第 3 轮:
- 以螺旋形式打印给定矩阵
- 两个大数之和
在代码之后,他问它是否适用于非整数的数字。那么这可以用来做乘法吗?
先输入单词然后输入句子的建议讨论。
如何设计多人同时编辑的Google Docs,他在多线程方面寻找答案。更多与系统设计概念相关的随机问题
第 4 轮:这是招聘经理轮。前 3 轮比赛发生在星期六。本轮比赛定于下周二举行。有一些行为问题。
- 如果其他人因您的工作而受到赞扬,您会怎么做?
- 您将如何向团队传达您想要从事某个特定项目的信息?
然后他让我决定一个简单的 API 速率限制器。经过对问题范围的大量讨论,我给出了一个基于队列的方法,并写了一小段代码。
我被问到我目前的工资和工作地点,如果他们提供报价,我是否有兴趣。才知道当天就拿到了offer。在进一步的过程中有很多延迟。
不过是一次很好的体验,面试官很讲道理。