2020 軟體工程師 面試心得-日本PayPay

這篇感謝幫忙內推的好友,當時碰上疫情慘重,軟體工程師想去的幾家日本公司都不發簽證,好友主動告訴我PayPay當時剛好釋出職缺了,幫忙問了她在日本東京工作認識的Paypay朋友內推,小的我才有面試機會( •̥́ ˍ •̀ू )

當時查了一下,日本PayPay是日本Yahoo旗下的一家電子支付公司,至2019年8月的新聞顯示,成立快一年,用戶數量有1千多萬。

到2019年二月為止,Line 在日本的用戶高達八千萬,使用 Line Pay 作為支付工具的用戶達 3200 萬。其他的競爭對手還有樂天 Pay、Origami Pay、Merpay 及西瓜卡 Suica等。詳細背景介紹可以看這篇👉https://www.kocpc.com.tw/archives/273639

從內推成功,收到公司自動發來的信,到收到面試通知,大約過了2週。

第一關是線上程式測驗,當時我正邊準備Google on site interview,但寫題目時還是會緊張😓

總共2題,題目忘了,只記得每題我都提早5分鐘交卷,全部測資都有過,難度落在LeetCode medium。

再過兩天,就收到進入下一關的視訊面試,不得不說感覺神速呀(੭ु´͈ ᐜ `͈)੭ु⁾⁾

而且面試時間剛好是面試完Google on site interview的隔天٩◔̯◔۶

視訊面試的第一關,面試官會先解說,總共有3場視訊面試,這關過了的話,後面還有2場。一開始都是用英文,後來面試官忽然問我

「Are you good at Mandarin or English?」

我意外了一下,回「both」

結果面試官開始講中文了⋯也讓我鬆了一口氣ಠ_ಠ

下面是印象中,前半小時照順序被問到的問題,

1.自我介紹

2.有沒有碰過微服務

3.說明什麼是indexing

我說了primary key, unique key都屬於indexing範圍,介紹了下這兩個是甚麼

4.一張table有name, age, sex欄位,問你怎麼選哪些欄位做indexing,指令怎麼下

我說了不會,我說之前的project雖然會碰到設定db,但這一塊我比較沒有深入探究。也因這場面試,我結束後回去看起了大神朋友推薦的SQL Performance Enhancement 的書📖 (˶‾᷄ །། ‾᷅˵)

5.unit test都怎麼寫的

我說了包括JUnit和Spock的差別與優缺點,還有當時我參與過的一個project,我看到同事怎麼用mybatis去模擬實際db塞資料的方式,還有怎麼決定哪種資料何時要做mock。

6.介紹一下你所理解的Restful API

講述了我做過的sharing, 在前公司時候兩個部門對於Restful API設計觀念的不同,各自的出發點,實務上我們怎麼讓API設計結合OWASP。

7.問以前你CI/CD的project

我講述在新創公司時候怎麼幫產品線用Jenkins做的CI/CD,還有怎麼做的auto deployment,講述方法與scope範圍。

後半小時,來到Coding題:

給一個陣列,例如[1,2,2,3,5],找出前k個大的數字

我第一步先問要return的是要Integer List Array, 還是Integer Array

第二步問input會不會有小數點

我先說了最直覺就是先sort,然後loop整個array,每次都k – ,找到前k個小的數字,但時間複雜度是O(nlogn),我問面試官是要這個解法嗎,他當然爾問說有沒有更好的解法,並給我提示說可以想成輸入都不重複的試看看。

我當下腦門已經想到了O(n)的解法,我說我已經想到了這樣的解法去解決有重複的狀況,可不可以直接回答,面試官說可以,於是我說是用heap解法。

java有priority queue,指定好comparator,放進去的pair可以依照我們想要的就做好由大到小的排序,在放入時候時間複雜度只要O(logn),因為它底層是heap的架構,然後整體程式的時間複雜度是O(n) + O(logn) + O(k),但n一定大於等於k,所以就是O(n)

面試官就說想看我寫寫看,我就快速的邊寫code邊說想法給面試官聽,包括怎麼在宣告時定義comparator,讓放進去的pair可以由大到小排序,也說了這方法會用到額外O(k)的空間複雜度。

最後我是選擇return List Integer,面試官問我說,知不知道ArrayList與LinkedList差別,問我在這邊為何用ArrayList,我直接回答,如果是從第i個位置新增元素,確實LinkedList比較快,因為底層資料結構有兩個pointer,一個指向前一個node,一個指向後一個node,所以時間複雜度只要O(1),但ArrayList要O(n),因為還要更新其他現有元素的順序,但我最後一行程式是直接把元素新增在尾端,此時你用兩種資料結構,速度都是O(1)。

最後,這關被刷了,我本來有點沮喪吧,後來才知道這是SRE的缺…那當然不會上啊哈哈哈哈,我對於系統架構以及DB設定部分,畢竟沒有很熟,skillset專精更多是在別的部分…早知道聽朋友的話,不要亂投履歷QwQ

不過這邊大概可以理解為何,當時面試官並不知道priority queue這個heap的資料結構處理方式…當然這部分我認為沒有一定,再來重點是,我後來發現我這解法的時間複雜度其實還是O(nlogn)……(⑉・̆⌓・̆⑉)

後來找到O(n)解法後⋯直覺現場面試想不到這解法啊啊啊⋯

現在寫著回顧,總感覺找工作都挺緣份的,這次經驗讓我謹記

1.不要亂投履歷⋯當時明明有backend的缺可以投,應該專注投1個就好。

2.再次被問到我沒碰過的微服務架構⋯跟阿里巴巴支付寶的面試官表示的一樣「流量太大的時候,一定會想往微服務的架構去做」,那天結束後,也因此翻了一下相關的書📖

3.最後發問可以把握機會認識公司文化,團隊人數,工作模式,跟上下班生活,像面試官跟我聊到他之前是在日本line待了一陣子才跳過來,有說Paypay的工作時程非常緊繃,並把他在日本這2家公司的工作感覺分享給我聽,我覺得還蠻有趣的(。・ω・。)ノ♡

這波面試的準備方式& 工作經歷5–6年,在台灣年薪170萬以上的公司參考,可以看第一篇👉 https://link.medium.com/ivQg2gFnx9

同場加映 2020 LinePay面試心得分享👉 https://link.medium.com/fT8i2nIgC9

延伸閱讀

JAVA Priority Queue 簡易用法分享

為何Priority Queue運用Heap概念實作sorting,時間複雜度是O(logn)?

There are a thousand Angels in a thousand people's eyes. 一千個人有一千個Angel.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store