PayPal实习笔试国外场全解析:HackerRank平台算法与SQL备考指南

发布时间:2026/8/31 7:58:44
PayPal实习笔试国外场全解析:HackerRank平台算法与SQL备考指南 2018年申请PayPal暑期实习那会儿我人还在国外收到笔试邀请邮件时的第一反应不是兴奋而是慌邮件标题写的是“PayPal Internship Online Assessment Invitation”正文里附了一个HackerRank链接打开以后是全英文的考试说明计时两小时。后来和国内同学对了一下题发现国外场和国内场不仅题目不完全一样连考试节奏、发放方式都有些区别。这篇就把我当时参加2018 PayPal实习生招聘在线笔试国外场的完整经过、题目复盘、避坑心得和备考方法整理出来给后面想进外企做技术实习的同学一个参考。如果你正在准备PayPal的在线笔试或者单纯想看看国外场的笔试长什么样这篇内容应该能帮到你。1. 笔试的基本盘平台、时间与考试形式1.1 邮件里的关键信息和考场形式PayPal的实习笔试一般是通过第三方平台进行的我这边收到的是HackerRank链接。国外场和国内场一个很明显的差异是国内场当时很多同学用的是本地化的在线考试系统而国外场几乎统一走HackerRank。HackerRank这个平台的界面比较干净左侧是题目描述右侧是代码编辑器下方可以自己跑测试用例。不要小看这个平台差异因为不同平台的判题规则、代码保存逻辑、是否允许切屏都可能有区别。邮件里通常包含这几个关键信息考试窗口期、考试时长、题目数量、题目类型、语言要求。2018年这次我收到的是“2小时4道题”其中前三道是算法题最后一道是SQL题。你可能会问为什么PayPal的笔试要考SQL因为PayPal是做支付的业务里大量涉及交易流水、用户账户、订单记录考SQL很贴近实际场景。国外场的题面是全英文连输入输出的描述都是英文这要求你不仅会写代码还得能快速读懂题意。另外HackerRank链接基本是私人定制的登录以后会自动绑定你的邮箱。它不需要你额外开摄像头但后台会记录你什么时候进入、什么时候提交、有没有长时间切换浏览器。虽然没有国内某些监考系统那么严格但尽量不要在考试过程中去搜索答案因为一旦平台判定异常对后续招聘流程很不利。1.2 题量和时长怎么分配4道题120分钟平均每题30分钟。听起来时间不紧但实际做起来最后一题往往比较硬核可能花40分钟都不一定写得完。我当时的策略很简单先把4道题都翻一遍快速判断难易程度然后从最简单的开始做。绝大多数情况下第一题是热身题比如数组遍历、字符串处理第二、三题是核心算法涉及滑动窗口、动态规划、二叉树最后一题是压轴题可能是图论或复杂DP也可能是一道带业务场景的SQL题。我的建议是前两道简单的题控制在20分钟以内第三题尽量在30分钟内完成剩下40到50分钟给最后一道题。如果你在某一题卡了超过20分钟赶紧跳到下一题不要恋战。在线笔试的判题规则基本是“跑测试用例得分”你空白的题一定没分但你做出来一部分的题可能还能拿一部分分。宁可做出3.5道题也不要在一道题上钻到底最后连提交都来不及。还有一个很实用的操作在做题之前先把每道题的示例输入输出手动跑一遍确认你理解的题意和示例一致。尤其是英文题面有时候一句话里藏着“非递减”“连续”“至少包含”这类关键词读漏了就是完全不同的答案。2. 核心题型与解题思路复盘2.1 第一类数组与滑动窗口这次笔试里最典型的一道题是字符串去重相关给定一个字符串找出其中不包含重复字符的最长连续子串的长度。这就是LeetCode上的“Longest Substring Without Repeating Characters”属于滑动窗口的经典题。你为什么需要记住这类题因为支付场景里很多数据处理都跟“连续序列”有关比如连续登录天数、一段时间内的交易去重面试官其实是想看你能不能把业务问题抽象成“窗口内满足某个条件”的算法问题。我当时写的解法是维护一个数组记录每个字符最近一次出现的位置然后右指针不断向右扩展左指针根据重复字符的位置向前移动。public int lengthOfLongestSubstring(String s) { int[] lastIndex new int[128]; Arrays.fill(lastIndex, -1); int left 0, ans 0; for (int right 0; right s.length(); right) { char c s.charAt(right); if (lastIndex[c] left) { left lastIndex[c] 1; } lastIndex[c] right; ans Math.max(ans, right - left 1); } return ans; }重点要讲清楚为什么当lastIndex[c] left时才更新左边界。因为如果某个重复字符上次出现的位置已经在当前窗口左边了那它不影响当前窗口只有重复出现在窗口内部才需要收缩。这个边界条件很多人一紧张就会写错建议平时刷题时就养成画图模拟的习惯。这类题还有一些变体比如“最多包含K个不同字符的最长子串”“替换K个字符后的最长重复字符子串”核心思路都是滑动窗口只是窗口的收缩条件不同。如果你能在笔试前把这一类题统一整理一遍遇到类似题型会很有底气。2.2 第二类动态规划与状态转移国外场第二道算法题我印象里是求最大子数组和也就是给定一个整数数组找到连续子数组中和最大的一种情况。这道题可以用Kadane算法做核心思想是每一步都记录“以当前位置结尾的最大子数组和”然后对全局取最大值。动态规划的难点不是代码而是你能不能快速想清楚状态定义和转移方程。我当时在草稿纸上写的是dp[i] max(nums[i], dp[i-1] nums[i])意思是如果前面的累积和对我有正增益就带着前面的走如果前面越加越小那不如从当前位置重新开始。public int maxSubArray(int[] nums) { int cur nums[0], ans nums[0]; for (int i 1; i nums.length; i) { cur Math.max(nums[i], cur nums[i]); ans Math.max(ans, cur); } return ans; }这里有个常见的边界陷阱如果数组全为负数最大子数组和就是最大的那个负数而不是0。很多人在这个测试用例上栽跟头就是因为把ans初始值设成了0。另外笔试的测试数据里经常有长度为1的数组你要保证代码不会越界。PayPal这种公司的笔试很喜欢考这类“看一眼很基础但边界条件特别多”的题。因为真正写业务代码时大部分逻辑都不是复杂算法而是怎么把边界情况处理干净。你如果能在代码里提前判断nums null || nums.length 0或者用第一项的值初始化面试官会觉得你很有工程意识。2.3 第三类二叉树与递归第三题是一道二叉树相关的题当时考的是判断一棵二叉树是否平衡。所谓平衡二叉树就是任意节点的左右子树高度差不超过1。题不难但很考验递归的理解。最直接的自顶向下解法是对每个节点都计算左右子树的高度再判断左右子树是否平衡。这个办法的时间复杂度是O(N^2)因为每个节点都要重复计算高度。但笔试更期待你写出自底向上的解法在递归过程中一旦发现不平衡就提前返回时间复杂度只有O(N)。public boolean isBalanced(TreeNode root) { return height(root) ! -1; } private int height(TreeNode node) { if (node null) return 0; int left height(node.left); if (left -1) return -1; int right height(node.right); if (right -1 || Math.abs(left - right) 1) return -1; return Math.max(left, right) 1; }这个写法里-1同时充当了“高度”和“标记不平衡”的双重角色。你第一次看到可能会觉得别扭但用熟了以后会发现它比单独写一个类去保存“高度和是否平衡”要简洁得多。阅读这类代码时我建议你用一个小例子完整推一遍。比如一个只有三个节点的链式树1-2-3递归到最底层以后层层返回最后在根节点发现左右子树高度差大于1返回-1。这个过程想清楚了树的递归题基本就通了。2.4 SQL题支付场景下的数据统计最后一题是SQL场景大概是有一张交易表transactions包含字段user_id、amount、transaction_time要求统计每个用户的总交易金额和交易次数按总金额降序排列。这个题如果放在国内场的笔试卷里可能只是在牛客网语法框里刷题但国外场更看重你对业务问题的理解。我当时写的是SELECT user_id, COUNT(*) AS transaction_count, SUM(amount) AS total_amount FROM transactions GROUP BY user_id ORDER BY total_amount DESC;看起来简单但有几个细节需要注意如果amount可能是负数比如退款那么SUM(amount)到底要不要包含退款题目里一般会明确说明。如果要求只看成功的交易那你就得加WHERE status success。如果表里存在NULL值COUNT(*)和COUNT(amount)的结果可能不一样因为COUNT(字段)会忽略NULL。这些细节比SQL语法本身更重要因为线上笔试的测试用例往往就是针对这些边界设计的。你多写一个WHERE条件可能就会导致结果集不对。建议在做SQL题时先把题目里的“过滤条件”“排序规则”“分组维度”都用笔圈出来再动手写SQL。3. 国外场的特殊变量时差、网络与考试环境3.1 时区换算与开卷时间国外场在线笔试最容易被忽略的就是时区。PayPal在美国发过来的邮件里写的往往是美国时间比如“October 15, 2018 at 8:00 PM PDT”。很多在国内或欧洲的同学第一反应是“知道了晚上8点”结果打开电脑才发现那是美西时间。这里一定要搞清楚PST和PDT的区别。PST是太平洋标准时间比UTC慢8小时PDT是太平洋夏令时间比UTC慢7小时。2018年10月中旬还在夏令时范围内所以应该按PDT换算。我当时是在欧洲靠Google Calendar直接输入“Oct 15, 2018 8:00 PM PDT”才换算成当地时间。别相信自己手动心算特别是跨几个时区时非常容易出错。我有个朋友就是因为把PDT当成PST提前一小时打开了链接结果发现考试还没开始又不敢退出只能干等。虽然最后也参加了考试但心态已经受了影响。所以收到邮件以后第一件事就是把考试时间换算成自己所在时区的具体时间最好在手机上设两个提醒一个提前一天一个提前30分钟。3.2 网络和代码编辑器的坑在线笔试最大的敌人不是题目难而是网络不稳。如果你人在国外宿舍的网络有时并不像校园网那么稳定。考试那两小时建议优先使用有线网络或者找一个信号强的安静角落。不要用公共Wi-Fi因为你永远不知道它会在你写到一半的时候断掉。我之前就遇到过一次写到第二题时网络闪断HackerRank页面一直在转圈。好在HackerRank有自动保存重新连接后代码还在但那种心跳骤停的感觉真的不想再体验第二次。所以开考之前可以准备一个热点作为备用网络但别把手机放在身边形成干扰。另外HackerRank的在线编辑器没有本地IDE那么强的自动补全虽然代码高亮是有的但括号匹配、import提示这些功能都有限。平时用惯了Intellij的同学到了这个编辑器里可能会疯狂报语法错误。建议你在考试前至少花两天熟悉HackerRank的编辑环境把常用模板手敲一遍比如readLine、split、Integer.parseInt这些。手熟以后才不会在编辑器上浪费时间。3.3 英文题面的阅读技巧国外场题面是全英文这本身就是一个隐形考点。我发现很多同学不是不会写算法而是读不懂题。比如contiguous subarray可能被理解成“任意子数组”non-decreasing可能被理解成“递增”最后写出来的代码牛头不对马嘴。我总结了一个读题顺序先看输入输出示例再回头看题目描述。示例会告诉你最直接的数据格式和边界情况。比如示例里如果输入是空数组输出是0那你的代码就必须处理空数组。如果示例里字符串中间有空格那你就得考虑是不是要保留空格。还有一个技巧是圈出题目里的关键词比如exactly、at most、distinct、ordered。这些词决定了算法的复杂度要求和边界条件。英文题面通常比较啰嗦尤其会给你编一个业务故事但最后几行才是真正的需求。不要被前面的业务故事带偏直接看最后那句“Return ... where ...”会更快。4. 备考路径与应试策略4.1 刷题优先级如果你距离笔试还有两周不建议从零开始漫无目的地刷题。PayPal这种外企笔试的题型相对稳定最值得优先准备的顺序是数组、字符串、哈希表、前缀和、二叉树、DFS/BFS、动态规划、贪心、SQL基础。其中数组和字符串是绝对高频尤其是滑动窗口和双指针几乎每场都会出现。我在笔试前集中刷了LeetCode上的Top 100高频题外加HackerRank官网的算法题。重点不是追求刷题数量而是每道题都做深度总结这道题的暴力解法是什么最优解法是什么边界条件在哪为什么这样写不会超时如果你能做到“讲清楚为什么”笔试时遇到变种题就不会慌。另外因为PayPal笔试平台是HackerRank它的输入输出格式和LeetCode不完全一样。LeetCode通常已经封装好函数你只需要实现方法HackerRank需要你自己处理多行输入然后按行输出。这个差异很关键很多人LeetCode刷得飞起到了HackerRank却被输入解析卡住。所以一定要在HackerRank上做几套真题模拟把Scanner或BufferedReader的用法练熟。4.2 模拟考试的方法刷题和模拟考试是两回事。笔试前一周我建议至少做3次完整的模拟笔试。每次模拟都控制2小时选4道难度按1:2:1分布的中等题全程开着浏览器不使用本地IDE不查资料也不中途休息。模拟完之后不只是对答案还要复盘时间分配哪道题花的时间不合理哪道题是读懂题意浪费了时间哪道题是边界条件漏了导致反复提交我记得第一次模拟时我花了整整45分钟在第一道中等难度的题上后面两道题只能草草写完最后一道SQL都没来得及做。那次模拟给了我很大警示也让我下定决心采用“先选题后做题”的策略。第二次模拟就顺畅多了虽然压轴题只做了一半但前面的题稳住了整体分数反而更高。模拟考试还有一个好处是训练体力。连续两小时高度集中精神真的会累尤其是已经习惯了碎片化刷题的情况下。建议模拟时和真实笔试一样把手机放到另一个房间桌面只留水杯、草稿纸和电脑尽量还原考场的紧张感。4.3 笔试作答时的代码风格笔试题目虽然只要求“通过测试用例”但 PayPal 的HR或者工程师是会回看代码的。我在国外场的笔试里特别注意了三点变量名可读、关键逻辑加注释、处理防御性边界。变量名不要用a、b、tmp否则自己回头看都费劲。用left/right、currentSum、maxLen这类能表达语义的名字代码整体会清爽很多。注释不需要长篇大论在状态转移或者窗口收缩的关键位置写一行“why”就行。比如// 如果当前字符上次出现的位置在窗口内则收缩左边界 if (lastIndex[c] left) { left lastIndex[c] 1; }面试官看到这种注释会觉得你是一个有沟通意识的候选人。另外笔试里如果遇到极端输入比如null、长度为0、负数、超大数一定要在代码开头就处理掉。很多时候测试用例的隐藏分正是在这些边界情况里。如果实在想不出最优解不要空着。先写一个暴力枚举的版本虽然复杂度高但至少在小数据上是正确的。HackerRank的判题规则不会因为你的代码不是最优就扣光分能过几个用例算几个。很多同学觉得自己“必须写出最优解”才配提交结果最后什么都没交上这才是最亏的。5. 实战踩坑与高频问题速查5.1 典型故障与处理办法在线笔试过程中难免遇到技术问题我根据自己和身边同学的实战经历整理了下面这些高频故障和处理方法。故障现象可能原因处理建议点击链接无法进入考试浏览器兼容性问题、邮箱未验证换Chrome浏览器清除缓存重新登录邮箱并点击验证链接页面卡在加载中网络波动、平台临时维护刷新页面检查网络5分钟内解决不了立即截图发邮件给招聘邮箱说明情况代码一直编译失败类名或方法名与题目要求不符HackerRank通常要求提交完整类检查是否有public static void main或指定方法签名运行结果超时算法复杂度过高检查循环里是否有重复遍历或嵌套排序考虑用哈希表、前缀和或双指针优化提交后发现漏了输出换行输出格式问题每题提交前先对照题目要求的输出格式把示例跑一遍和预期输出对比考试中途断网网络不稳定重连后检查代码是否自动保存如果丢失且无法恢复截图当前状态并邮件联系HR遇到问题不要太快去刷新页面HackerRank一般会保留代码。但如果你在浏览器里强制刷新而系统正在保存有可能导致部分内容丢失。正确做法是先等十几秒确认页面是否自动恢复如果不恢复再保存本地备份后刷新。5.2 做不完怎么办这是在线笔试最常见的焦虑源。我的建议是永远不要在最后时刻才开始准备提交。在还剩5分钟时如果你还有没写出来的题应该立刻开始写“思路说明”——用注释或者伪代码形式写下你打算怎么解题比如 “先用哈希表记录每个元素出现次数再按频率排序” 或 “这题可以用DFS枚举所有路径记录最大权重”。如果平台允许甚至可以在输出区域打印一句话解释。虽然这样拿不到满分但至少让面试官看到你不是在乱写。平时练习时也刻意训练“倒计时压力”。我每次模拟到只剩10分钟时会强迫自己做一次“快速收尾”检查一遍所有题目的输出格式和代码缩进确保没有低级错误。最后5分钟绝不改代码除非是改println这种肉眼可见的错误。很多同学就是在最后一刻想“优化一下”结果改出一个编译错误连原本能拿的分都丢了。还有一点不要因为一道题没做出来就在脑子里反复想“这次是不是挂了”。在线笔试只是整个招聘流程的开始PayPal的面试官更看重你的思维过程和潜力。你把能做的做了把不能做的思路写清楚这本身就是很好的信号。5.3 国外场和国内场到底差在哪很多国内同学好奇国外场的题目是不是更简单。根据我和身边参加不同场次朋友的交流结论是核心考点差不太多但风格有差异。国外场题面是全英文国内场可能会提供中文说明国外场更加依赖HackerRank平台国内场可能有自己单独的在线答题系统国外场的SQL题更贴近英文业务表结构比如orders、payments、users国内场有时候会出中文表名或者中文题目背景。从难度上看两家都会遇到“一道热身题两道核心题一道压轴题”的配置。压轴题在哪个场都不轻松因为它本来就是用来区分候选人的。你在国外场最大的挑战不是题目本身而是“在英文环境下两小时内稳定输出高质量代码”。所以备考时要把英文读题、平台操作、时差状态这些细节都当成考试内容的一部分来准备。我后来复盘那次笔试最深的感受是在线笔试不只是在考算法还在考你在意外环境下的稳定性。如果你能把平台、时差、网络这些变量提前解决掉剩下的就是正常发挥。最后再分享一个小技巧收到笔试邮件后第一件事不是马上开刷而是先花20分钟把邮件里所有链接、说明、时间要求读一遍标注出截止时间然后列一个两小时的答题计划。这个习惯帮我拿过好几个外企的笔试关希望也能帮到你。