📅  最后修改于: 2023-12-03 15:05:07.059000             🧑  作者: Mango
本文将介绍我参加 PayPal SDE II 职位的面试经历。在此之前,我已经面试过多家公司,有些成功有些失败。本次面试我成功进入了 PayPal,并且获得了一个不错的工资待遇和团队氛围。
我先要说明的是 PayPal 的面试流程与大多数公司的不同。他们的流程主要有以下几个阶段:
在这篇文章中,我将主要介绍视频技术面试和现场面试。其他几个阶段相对较为简单,类似于其他公司的流程。
技术面试时我的面试官是一个非常友好的人。他首先让我介绍我自己并问了一些开放性问题,然后进入了第一轮面试。
第一道题和字符串相关。给定两个字符串 s
和 t
,在 s
中找到一个最短的子串,使得 t
中所有字符都出现在 s
中。在这个问题中,我们可以使用滑动窗口算法。我首先在白板上画了图,以便我更好地指导我的面试官。然后我实现了算法。
def minimum_substring(s, t):
char_count = {}
for char in t:
char_count[char] = char_count.get(char, 0) + 1
left, right = 0, 0
min_length = len(s) + 1
min_start = 0
count = len(char_count)
while right < len(s):
if s[right] in char_count:
char_count[s[right]] -= 1
if char_count[s[right]] == 0:
count -= 1
right += 1
while count == 0:
if right - left < min_length:
min_length = right - left
min_start = left
if s[left] in char_count:
char_count[s[left]] += 1
if char_count[s[left]] > 0:
count += 1
left += 1
return s[min_start:min_start+min_length] if min_length <= len(s) else ""
第二道题是一个经典的题目。给定一个数组,每个元素都表示该位置可以跳跃的最大长度。请问从第一个元素起至最后一个元素,最少要跳几步?
这个问题我们可以用贪心算法来解决。具体来说,我们可以从左到右扫过所有元素。对于每个元素,看看我们能“覆盖”多少步,然后继续向右扫描。当我们达到数组的右侧时,我们答案也就出来了。
def jump(nums):
last_jump_max = 0
current_jump_max = 0
jump_count = 0
for i in range(len(nums)):
if i > current_jump_max:
return -1
if i > last_jump_max:
last_jump_max = current_jump_max
jump_count += 1
current_jump_max = max(current_jump_max, nums[i]+i)
return jump_count
现场面试是一整天的面试。他们会给你一道简单的算法题(在我的情况下是反转链表)然后再进行四轮技术面试。在技术面试中,他们将考察您的软件工程能力、设计系统能力、以及基本的系统原理和算法。
我的面试官非常友好,但它们需要您展示自己的实际经验,并同时对你进行挑战。我被问到了很多算法和数据结构的问题、编程习惯和软件设计的问题。总之,现场面试是一个充满挑战但非常有意义的经历。
在我1个月的时间里经过了此次 PayPal SDE II 的面试,我最终得到了工作机会,这让我感到非常幸运。我的经历告诉我,如果你想做一个好的程序员,你不仅应该在技术上表现出色,还应该具备面试和沟通技巧。这些都是必要的,才能在软件工程领域获得成功。