📜 [專欄新文章] [ZKP 讀書會] Tornado Cash
✍️ Jerry Ho
📥 歡迎投稿: https://medium.com/taipei-ethereum-meetup #徵技術分享文 #使用心得 #教學文 #medium
Disclaimer: 本人與Tornade Cash專案及其員工無任何利益往來。
Tornado Cash是一個Ethereum上的原生隱私轉帳解決方案,使用zk-SNARK+Merkle Tree的路徑證明作為其核心隱私保護機制。
你知我知,Ethereum上的交易記錄是公開的,這使得任何一個人只要知道你的address,便可以在https://etherscan.io/ 之類的網站上查出有多少人和這個位置進行過交易,你做過什麼消費行為或是交易行為等。
或許這聽來不像是個問題,而想要隱藏自己的交易記錄甚至聽起來反而像是不法分子的銷贓行為。
但試想下開情境:因為我曾經使用ethereum捐款給一個政治不正確的專案/組織,而我在接受dd/kyc/reference check的時候因為我的ethereum address就寫在自己的blog上而被查了個底朝天,因而被拒絕入職/拒絕開戶/拒絕服務。
這並不是一個很遙遠的情境…
Tl;dr
解決交易隱私問題分為兩個層次,Assuming你的目的是讓自己的金錢流向無法被追蹤。
層次一:我的錢「丟進了」Tornado Cash的contract,我要如何在不使用與轉入時同一個address的情況下— 若是同一個address就沒有隱私可言了 — 取出我的錢?contract如何知道我存過錢,餘額還夠,所以現在我來領錢了他讓我領?
層次二:就算層次一成立,我的隱私如何達成?到底有多隱私?到底有多不隱私?
技術上來說(細節下文詳談),層次一使用zero-knowledge的set-membership proof來證明,透過預先在Merkle Tree中「登記」一個自己的entry/leaf,tornado cash稱為note,爾後在提款時提出該leaf之zk proof,來解決這個提款時的認證問題。
層次二則是所謂的藏樹於林。既然轉出和轉入無法被連結在一起,那麼只要使用Tornado Cash的人數夠多,總轉出和總轉入的交易總筆數就會太多,以致無法輕易重新關聯轉入與轉出地址背後的真人。
使用界面
https://tornado.cash/
當然你也可以直接和合約地址互動啦
上圖左方紅框為存入幣種與金額大小,右方紅框為該額度對應之帳戶內有多少顆「樹」。
記得藏樹於林嗎?右方的 Anonymity set 就是告訴你現在森林的規模有多大。數量一大,跑資料分析試圖重新關聯某筆特定存款到某筆特定提款就變得更為困難。
提款界面如上。
值得注意的是,提款時的以上兩個選項(Wallet/Relayer),是在目前Account Abstraction尚未實現時的一個折衷方案。
這裡有個死循環:既然我提款的時候需要支付gas,那麼我的gas從哪裡來?是不是勢必得從交易所或是其他帳號來?簡言之,若是無法直接新建立一個地址然後直接將其作為Tornado Cash提款用,達到的隱私強度就大打折扣。
Relayer就是針對這個問題所設計的。透過付出一些手續費來提供社群架設relayer node的誘因,提款時該筆轉帳的gas費用,便可以讓relayer node來負責先出。relayer node收到使用者的zk proof後將其轉交給tornado cash的合約,合約就會會將應有的relayer手續費與扣除手續費+gas後的款項分別轉給relayer與使用者。
社群治理
Tornado Cash天生是一個比較沒有銅臭味的專案 — 社群治理和funded的味道相當強烈。
透過預先設計好的proxy contract與staking/locking機制,任何一個Tornado Cash的使用者都能夠提出對合約實行的改動建議,並交由社群來投票決定是否要執行該改動。
技術細節可以參照此篇,同時Tornado Cash的第一輪社群治理提案也剛投票過關,回顧可參考此處之討論。
誘因設計
本文作者比較任性不在意錢,請移駕此處閱讀官方如何設計Anonymity Mining來確保以下兩點:
機制能讓使用者願意加入存錢,提供流動性同時也讓樹林變大,增加隱私程度。
產生TORN(ERC20 token)與領取TORN的機制,透過在原本的tornado cash上面再加一層,來避免TORN激勵層錯誤的設計導致下一層之隱私洩漏(激勵層出事不影響核心隱私之意)。
技術細節
首先本文不打算解釋何為zero-knowledge proof,請接受以下描述:
若有一NP statement分類上是satisfiability problem(例:merkle tree中的hash chaining H(H(H(a,b),c),d) ),則我們可以設計出一個arithmetic circuit來確保能夠有效率的產生proof, 有效率的驗證, 無法產生假的且能說服人的proof…且其電路驗證的statement是我們想要的,像是此例中的merkle tree opening.
存款
存款者透過送出C = H(k, r) 以及存入之數額給tornado cash的合約來進行存款的動作。其中k在之後會成為存款者領錢的憑證,稱為nullifier,r則是增加randomness而已,此二值需要記下。此時合約端會將這個C(commitment)丟入Merkle Tree上其中一個空的leaf,並更新root hash。存款者還需要記下自己的C對應之leaf index。
產生proof,用此proof作為提款憑證
用一段話來概括,若是我
知道Merkle Tree上某個leaf的commitment的preimage, 代表我能在電路中證明我知道H(k, r) 中的 k, r, 同時不洩漏k, r到底是多少(zk特性, magic)。
我知道該leaf至root的路徑上會經過哪些點,我也提供了一個可以讓電路驗證root hash的hash chaining過程,代表我知道他是從哪個leaf開始走的。因而,這證明了我提出的1.中的commitment確實屬於某顆公開的、大家都知道的merkle tree中的特定leaf(就是我之前存款對應到的leaf)。
就可以在不需要提供像是原本存款地址的簽章之類的驗證機制情況下,透過zk proof,亦能正確做permission control讓unlinkable的提款能夠成真。
另,讀者可以看到在proof中已然預設了relayer的存在。這使得上開所提到之「使用者提款, 拜託relayer執行=>relayer預付gas發起transaction,將內容送給tornado cash合約=>合約處理proof並將款項拆成兩份給relayer與使用者」這個行為得以成立,且relayer無法得知或假造proof內容。
提款流程
基本上在上方的產生證明都講過一次了,這邊就是pseudo code順過一次提款流程而已,大家自己看啊。
值得一提的是,使用者除了需要提出上一部分提到的證明之外,還需要將k的部分額外拿出來再做一次H(k),將值一併傳給contract。
這裡的設計哲學,簡單來講是這樣的:zero-knowledge太強了,強到就算證明了我知道H(k, r)的k跟r, 收到的驗證者並沒有辦法知道H(k)是什麼東西。為了讓同一筆款項不會被提領兩次,在提款流程中合約會將「每一筆成功提款中的H(k)」記錄下來,另外開個表存著。爾後若是其他提款交易中的H(k)與表中的重複了,這就代表有人試圖想要騙合約重複提款,自然該提款嘗試就不會成立。
洗錢失敗例
工程師都知道使用者從來不看說明書,看了可能也不會懂。
Koh Wei Jie分析了Kucoin的駭客事件。Kucoin的駭客使用Tornado Cash來洗錢,但忽略了Tornado Cash官方一直三令五申的使用需知,因而讓款項在進入Tornado Cash跑了一輪之後還是能夠被追蹤,哈哈UCCU。
簡單來說,hacker為了節省多次使用relayer的手續費,而將大多數的提領過程都變成直接提領到wallet。雖然該wallet的位置是全新產生的沒有gas,但是透過只讓第一次的提款使用relayer,hacker便能從第一次提款中取得手續費並分發給其他全新產生的wallet address。
那問題在哪?還要問?
要達到隱私需要保持藏樹於林原則,同時使用者不應自己破壞tornado cash幫你達成的address unlinkability。這位hacker因為愛省手續費,所以違背了後者;同時他因為太心急又愛省手續費,太快、分太少次提領、每次提領的數額又太大了,所以side-channel去給他做簡單的traffic analysis就能夠用虛無假設推出:「綜觀歷史上所有的存款位置與數額,扣掉駭客存錢的那些位址之後,我們還需要14個unique address/user共謀,才能有能力一次提這麼多錢。」
這看起來可能嗎?自然是不可能的。
所以這位駭客就是錯誤的沒有遵守藏樹於林的原則,才導致自己的金流重新被和帳號聯繫在一起。
提供一些延伸閱讀,圈子內的”名人”對這種不看說明書的使用者的看法:
tornado * Gavin Andresen
如何避免洗錢失敗
我自己的投影片,我自己翻譯:
打開你的VPN 打開你的TOR 打開你的無痕瀏覽器分頁 用上你全新的VM PC VPS instance 最好連data-link layer安全都顧到 產生全新的地址不要懶惰 自己跑一個fullnode 乖乖用relayer付手續費提款 領錢之後記得把C(k,r)的記錄刪掉 不要急一次存或提領大額 時間拉長數目減少…..
簡而言之:要設計相對安全但又讓使用者可以直覺上手的安全系統真的很他媽難 - 使用者永遠會想辦法抄近路,然後系統的security assumption就爆炸了。
結論上來講,你想要多安全取決於你在臺大水源校區的腳踏車平常都上幾個大鎖=想付出多少成本。只要不要學Kucoin Hacker那樣連鎖都不鎖車還是新的,大部分時間都沒啥問題 lol。
參考資料與文中出現過的連結,不按先後順序:
https://tornado.cash/Tornado.cash_whitepaper_v1.4.pdf
https://tornado.cash/audits/TornadoCash_cryptographic_review_ABDK.pdf
https://tornado.cash/audits/TornadoCash_circuit_audit_ABDK.pdf
https://torn.community/t/whats-next-for-tornado-cash-governance/250
https://weijiek.medium.com/deanonymising-the-kucoin-hacker-418fa5e9911d
https://tornado-cash.medium.com/tornado-cash-governance-proposal-a55c5c7d0703#2084
https://eips.ethereum.org/EIPS/eip-2938
http://gavinandresen.ninja/private-thoughts
[ZKP 讀書會] Tornado Cash was originally published in Taipei Ethereum Meetup on Medium, where people are continuing the conversation by highlighting and responding to this story.
👏 歡迎轉載分享鼓掌
同時也有1部Youtube影片,追蹤數超過24萬的網紅暗網仔 2.0,也在其Youtube影片中提到,Payme [捐款]: https://payme.hsbc/deepwebkid Instagram: https://www.instagram.com/dw_kid12/ Facebook: https://www.facebook.com/deepwebkid/?modal=adm...
「proxy要開嗎」的推薦目錄:
- 關於proxy要開嗎 在 Taipei Ethereum Meetup Facebook 的精選貼文
- 關於proxy要開嗎 在 91 敏捷開發之路 Facebook 的最佳貼文
- 關於proxy要開嗎 在 矽谷輕鬆談 Just Kidding Tech Facebook 的最讚貼文
- 關於proxy要開嗎 在 暗網仔 2.0 Youtube 的最讚貼文
- 關於proxy要開嗎 在 [請問] 網路問題- 看板ask - 批踢踢實業坊 的評價
- 關於proxy要開嗎 在 【無法順利上網?小編教你如何調整Proxy設定】 中華電信Hinet ... 的評價
- 關於proxy要開嗎 在 用a7s3直接幫你錄製proxy代理讓你剪的動又不浪費時間!! 的評價
- 關於proxy要開嗎 在 hinet proxy替代-推薦/討論/評價在PTT、Dcard、IG整理一次看 的評價
- 關於proxy要開嗎 在 hinet proxy替代-推薦/討論/評價在PTT、Dcard、IG整理一次看 的評價
- 關於proxy要開嗎 在 VPN在甚麼時候需要開啟或關閉? - Mobile01 的評價
- 關於proxy要開嗎 在 翻牆軟體下載youtube - 2023 的評價
proxy要開嗎 在 91 敏捷開發之路 Facebook 的最佳貼文
新加坡商鈦坦科技 高雄辦公室正式落腳高雄三民區囉,一些北漂到台北奮鬥的鈦坦PD們,現在要回鄉打拼,而且正在招兵買馬中。
如照片中所說,他們第一波回去高雄的先鋒部隊,都是參加過我所有公開課,而且在 coaching 時一直被我「盯」到大的一群支柱。
看到第一波回去高雄辦公室的名單,我整個就不擔心他們新的 team 會有什麼問題了,都是一時之選,非常適合團隊作戰,技術、產品、協作能力都很好的一群人。
這樣說好了,他們團隊基本款就是會寫單元測試、會重構,真的會在產品開發過程中 TDD 完成功能的。
會有 code review, pair programming 甚至 mob-programming 整組人一起開發一個 feature 的。
版控用 git,分支策略正往 trunk-based 走,且團隊有能力在設計上搭配 feature toggle/flags 來做到持續部署,當然就更別說 CI 做持續整合了。
架構能力基本的 DI/AOP, decorator, Adapter, proxy 的使用都是基本規範。
這些對很多 modern development 公司的基本功,這群人都有能力也都能這麼做。
順便講一下,他們先鋒 team 也是全員用極速開發的方式在使用 IDE+vim 做開發、測試跟重構的,新人進去多 pair 幾次,就會對這種正規作戰、扎實基本功的戰技趨之若鶩。
沒見過時,你都覺得是烏托邦、天方夜譚,真的在產品開發時,團隊成員每個都這樣搞,而且覺得這不是很自然、很正常的事嗎?
嗯,這群人都是從高雄帶到台北再一路帶大,現在再把這整套開發方式帶回高雄的先驅部隊。
如果你有興趣,不要錯過這機會啦,高雄能有這種扎實開發方式的公司,能把敏捷搞進骨子裡的公司,能真的全員背靠背互相支援的團隊,寥寥可數。
#該煩惱的應該是台北辦公室怎麼補回這些柱的戰力
所以尤其是上過我的課,而且無法在現在工作上發揮技能、一展身手,且你又覺得到/回高雄工作很不錯的,不要錯過一開始招兵買馬的機會啦,機會是不等人滴!
—
From @李境展 Tomas:
Scrum 是個照妖鏡,「沒有人能閃躲,問題全跑出來。」
「敏捷思維 (Agile Mindset),必須建立在學習型組織 (Learning Organization)、持續進步 (Never stop improving)、不貼標籤減少預設立場 (No labelling)。敏捷在鈦坦的環境裡,並非只是一味求取快速,而是如同呼吸般的存在,既自然又無所不在。能夠做到此地步,究竟鈦坦做了什麼改變呢?」謝謝 #MOPCON 和 KM 曹凱閔的邀請採訪,讓更多朋友們認識敏捷管理與實踐。
同時也在這裡大聲分享「#鈦坦科技正式擴點高雄」(灑花)
🎉🎉🎉🎉🎉🎉🎉🎉🎉
在過去幾個月的準備,和許多 MOPCON 好友們的協助下,鈦坦科技高雄辦公室正式落腳在高雄三民區。接下來可以和高雄社群朋友有更多的交流和學習,先感謝一波。
更重要的是,現在開始,正式廣邀南臺灣的人才,也歡迎各界好友們推薦人才加入,共創鈦坦科技高雄辦公室!
🌳🌳🌳🌳🌳🌳🌳🌳🌳
🧲 Software Engineer/Programmer #軟體工程師(高雄)
🧲 Product Owner #產品負責人(高雄)
🧲 User Experience Researcher #使用者體驗研究員 (高雄)
🧲 UI Designer / #網頁設計師 (高雄)
🧲 HR&Admin Specialist #人資行政管理師 (高雄)
https://www.titansoft.com/tw/career/current-openings?country=taiwan
https://medium.com/mopcon-%E5%B7%A5%E4%BA%BA%E6%99%BA%E6%85%A7%E8%A8%98%E4%BA%8B%E6%9C%AC/2020mopcon-titansoft-bc49620248d5
proxy要開嗎 在 矽谷輕鬆談 Just Kidding Tech Facebook 的最讚貼文
S1E38 矽谷資深軟體工程師後疫情時代面試心得 Facebook/Robinhood/Coinbase/DoorDash
2020 年是個動蕩不安的一年,因為疫情的關係,很多公司都在年中進行了規模不小的裁員,包含大家耳熟能詳的 Airbnb、Uber、Lyft、Yelp、LinkedIn、Mozilla、Intuit、Salesforce 以及 WeWork 等等族繁不及備載。根據 layoffs.fyi 的統計,這波裁員潮集中在今年的 3 月到 7 月,8 月以後逐漸趨緩。
這對於在這段期間要找工作的絕對不是件好事,因為很多人被裁員,意味著同樣的職缺會有更多競爭者,也因為景氣不好以及疫情不確定性的關係,很多公司開始減緩招人的腳步。不過 7、8 月以後情況逐漸好轉,隨著美國各大城市解除封城,人們意識到必須跟疫情共存好一陣子,於是實體經濟活動恢復了,美國人畢竟是擁有自由的靈魂不能隨便被囚禁的呀!最近是美國各公司的財報季,各大科技公司紛紛發布第 3 季的財報,表現都非常好,也應證了在疫情下經濟轉好的事實。
我在 8 月下旬的時候開始投遞履歷,9 月初開始電話面試,10 月中結束 Onsite 面試 (都是線上進行),面試了四間公司:Facebook、Robinhood、Coinbase 以及 DoorDash,最後拿了前三間公司的 Offer,級別都是資深工程師。在這篇文章我會分享各公司的面試流程以及體驗、我做了什麼準備、怎麼談薪水以及我最後的決定,希望可以對在美國求職的人有幫助!由於有簽保密協定的關係,我只會提到面試的流程,不會提到具體的題目以及 Offer 數字。
Medium 文章好讀版 https://bit.ly/2Ii9vLc
Apple Podcasts https://apple.co/36fLCMh
Spotify https://spoti.fi/2IcyJdv
#面試的動機
蛤!?面試不就是為了換工作嗎?對大部分的人或許是如此,但對我而言這次並沒有非換工作不可的理由。我在 Square 待了三年多,整體的滿意度一直都很好,公司的股票從我加入以後基本上都是一個上漲的趨勢,最近也來到歷史新高。一年多前從 Android 開發換到後端的 Traffic Infrastructure 組以後,更是一直處在學習的狀態,了解怎麼規模化公司的後端架構,支援更多的應用場景,工作上也需要一直動腦,思考各種方法的優缺點、我們為什麼要這樣做並且撰寫許多技術文件,負責的專案也很有影響力,最近的成果是把公司很重要的 reverse proxy 升級成 Envoy,讓系統的效能更好並且支援更多新的功能。或許因為疫情一直在家工作的關係讓我有點工作倦怠,但這個倦怠並不是源自於工作的不開心,而是真的在家太久了,很需要好好放個長假讓腦袋放空充電一下。
言歸正傳,這次面試的主要目的是測試自己的市場價值,看看自己能否適應資深工程師面試的強度,畢竟上次面試已經是四年前了 (當時的面試心得),很多當時對於面試的理解也需要進行修正,我的心態是保持開放的態度,如果遇到很好的機會,當然可以考慮換工作,沒有的話待在現在的公司也很好!另外我自己過去的主要經驗都是 Android 行動開發,在後端只有一年多的經驗,也很好奇這些公司會不會讓我面資深後端的缺,還是會將我過去經驗打折?事實證明是我多慮了,我面的這幾間公司都有把我在 Android 的年資完整算進去,最後也給了我資深軟體工程師的 Offer,Facebook 甚至幫我安排 E6 (Staff Level) 的面試,只是因為系統設計表現得不夠好,最後給我的是 E5 (Senior Level) 的 Offer。
我還蠻建議大家即便沒有特別想換工作,也可以定期去外面面試看看,在沒有非換不可的情況下,習慣面試的緊張感跟壓力,這樣會讓你以後的面試更自在,跟面試官可以像是在平常工作時一樣互動,發揮自己的實力。一開始會有這個觀念是在幾年前讀 hello, startup 這本書時看到,作者建議大家每一年定期去外面面試,審視自己的能力,進而補足自己不夠好的地方,當然我覺得每一年對一般人來說可能有點難,畢竟邊工作邊準備面試不是易事,而且還得跟公司請假去面試,但至少每兩三年可以去外面看看,避免自己的能力跟求職市場脫勾太久。在矽谷以專門招收資深工程師聞名的 Neflix 甚至在他們的文化守則裡提到:「員工的薪水取決於他們個人最高的市場價值,我們鼓勵員工去外面面試並且跟他們的主管討論,我們認為這是健康的行為。」
#資深工程師的優勢
在一般情況下,5 年以上工作經驗可以面資深工程師 (L5) 的職位,10 年以上工作經驗可以面 Staff level (L6) 以上的職位,我有約 6.5 年的工作經驗 (3 年台灣 + 3.5 年美國),所有公司都是讓我面資深工程師以上的職缺。
這次找工作我感受最深刻的事情就是:我再也不用海投一大堆公司了!四年前當我還是求職市場裡的菜雞的時候,投了超過 150 間公司,只有 1x 間公司回應我,轉換率不到 10%。這次 Facebook 跟 Robinhood 都是 recruiter 主動從 LinkedIn 聯繫我進行面試邀請,Facebook 的 recruiter 更是從 2019 年初就開始定期聯絡我,到後面我真的不好意思持續拒絕她,於是接受了面試的邀請,真的還蠻感謝她不斷地嘗試,讓我定期思考一下要不要面試。Coinbase 跟 DoorDash 我都是從官網直接投履歷,沒有透過內推,一個禮拜內就收到了 recruiter 的來信,而這也是我唯二主動申請的公司,真的從以前我找工作,到現在變成是工作機會找上我了。
另一個很大的改變是:刷題不再是最重要的一環。隨著你越來越資深,系統設計跟行為面試所佔的比例也會越來越高,而且除了年資以外,這兩種面試的表現基本上就決定了你的職等,Facebook 的 recruiter 也在電話中跟我說,針對比較資深的應徵者,Coding 的要求會比較寬容 (lenient),所以建議大家不要對刷題過度著迷,一昧的追求題數不是好事,而是應該重質不重量,題目是無限但觀念是有限的。
最後一個體悟是在拿到 Offer 之後,談判的空間變得很大。美國科技業的求職市場一直是呈現一個兩極化的狀態,對於剛畢業的人來說,競爭者多而且職缺少,公司有較高的話語權。但是當你是資深工程師以上的時候,情況就反過來了,大多數公司不管景氣如何,任何時候都在招有經驗的工程師,職缺一直開在那但總是招不滿。上次找工作的時候,能夠讓公司提高年薪 1 ~ 2 萬美金就歡天喜地了,但是這次有兩家公司給我的初始 Offer 跟最終 Offer 都差了好幾萬美金。
#準備過程
軟體工程師的面試主要分成三種:Coding、系統設計以及行為面試。我自己是花比較多時間在系統設計上面,再來是 Coding,最後是行為面試。
關於系統設計的準備,我在軟體工程師系統設計面試準備指南有比較完整的介紹,這邊補充說明一下,準備系統設計最好的方法是來自於工作,最好你工作上就是要去思考怎麼設計系統,各種方法的優缺點以及思考各種 edge case 以及解法,這樣子學到的深度跟廣度都遠多於看那些準備素材。如果工作上沒有碰到也沒關係,可以先從 system design primer 看起,理解系統設計的各種面向。另外我推薦看一些公司的 Tech talk 來了解他們實際上怎麼設計系統,為什麼要這樣做以及不同方法的 Trade-off 又是什麼,理解為什麼要做這個決定是最重要的。如果已經接近面試了,建議可以看 InterviewBit 的系統設計篇,總共有八題,我認為寫的還蠻好的,比 Grokking the System Design Interview 還深入,看個兩次完整理解以後對面試很有幫助。
Coding 的部分我還是要再強調一次,不要過度迷信刷題的數量,應該要重質不重量,重點放在在訓練你的解題思維以及邏輯思考,練習使用常見的資料結構並且把想法轉成可以執行的程式碼。剛開始寫題目的朋友,我會建議相同的題型一起刷,培養對同類型題目的敏銳度,題目難度主要以 Medium 為主,搭配少量的 Hard 題。
很多題目一開始寫不出來,或是寫不出最佳解是很正常的,如果一題你卡超過一個小時,建議可以參考討論區的最佳解,但是切忌直接照抄別人的解答,因為那可能不是最適合你的方式,比較推薦的方式是你去理解背後的演算法,清楚地知道每一個步驟,再用你自己方式寫出來,這樣即使換了一個程式語言,你應該也可以寫得出來。當你開始發現沒看過的題目你也可以自己想出最佳解,並且實作出來,程式碼也很精簡,那代表你已經成功培養出解題的思維了。
我自己還會做一件事,就是想辦法分辨好的題目跟壞的題目,有一些題目的答案很明顯就只適用於這一題,用一些很特殊且不好理解的方法、實際上工作也不可能用到,這類型的題目我就不會花太多心思在上面,如果真的被考到,我會認為這是面試官的不用心。相反地,有一些好的題目:在觀念上很實用、有好幾種解法、工作上有機會用到或是系列題,這種就很值得練習,比方說 Graph 或是 Design 題就是我很喜歡的類型。
雖然說題數不重要,還是提供我的數據給大家參考,我在寫了 50 題的時候開始安排電話面試,最後一個 Onsite 結束時寫了約 120 題,我是以比較新的題目以及高頻題為主。
最後是行為面試,要再細分的話可以分成兩種,一種是 Project Deep Dive,你選一個你最近做過的專案,解釋一下專案內容、解決了什麼樣的問題、你的角色是什麼、最後的成果以及中間遇到的困難,另一種面試是來判斷你是否符合公司的文化以及價值,衡量你過去解決衝突跟溝通的能力。不管是哪一種面試,只要你好好回顧你過去做過的事情,能夠完整講述前因後果,把自己的故事清楚地講給面試官聽,輔佐一些例子,基本上就不會有太大的問題。
#遠距面試 #VirtualOnsite
因為疫情的關係,大家都在家工作,所以所有的面試包含電話面試都改成線上視訊進行,這個情況至少要到 2021 年的夏天。遠端面試的好處就是你不需要舟車勞頓,時間安排上也比較彈性,但是壞處是跟面試官的溝通比較沒那麼順暢,線上的交流絕對是沒有實體見面來得好,而且有的面試官網路很差,我甚至有遇到差到面試官需要把影像關掉的情況。
另一個要注意的點是,系統設計的面試會需要用到線上白板來畫圖,我自己覺得沒有實體的白板順暢,主要有兩種方法,你可以使用 iPad 搭配 Apple pen,或是用鍵盤滑鼠直接拉,選一個自己習慣的方式,面試前稍微熟悉一下白板軟體的使用,面試也會比較順利。
#DoorDash
第一輪是一個小時的電話面試,前 20 分鐘聊過去的工作經驗以及這個組在做的事,後 40 分鐘 Coding。題目是一道經典的 Hard 題,我對於該題印象很模糊,於是在面試中慢慢想,最後是有跌跌撞撞的寫出來,當時自我感覺良好,面試官給我的感覺也蠻算滿意的,但是隔天還是收到了拒信。事後回想應該是因為這是經典題,所以標準相對高,我並不是一次就寫對,而是慢慢修正,所以相對於其他應徵者表現不算太突出。
#Robinhood
他們家固定有兩輪各一個小時的電話面試,第一輪前 15 分鐘給你一段程式碼,要找到潛在的 bug 並且問你要怎麼修正,後面 45 分鐘 coding,題目比較偏向 Robinhood 工作上會遇到的演算法題。第二輪是系統設計,這是我第一個系統設計面試,微緊張,原本以為表現不夠好,但從 recruiter 那得到的反饋是還蠻好的。
Onsite 出乎我意料只有三輪,一輪 45 分鐘 coding,一輪一小時的系統設計,以及 45 分鐘的 Project Deep Dive,Coding 也比較偏向實作工作上會遇到的問題,面試官提到不用特別在意效能,以實作出來並且跑過測資為主,最後 10 個測資我只過了 9 個,不算完美。接下來兩輪跟面試官都聊得蠻開心的,並且有蠻不錯的討論,最後順利拿到 Offer!面 Project Deep Dive 有個小插曲,面試官到一半網路突然掛了,他後半段只能打電話加入簡直尷尬。
#Coinbase
Coinbase 的面試體驗是所有公司裡最讚的!從面試的流程跟題目都可以感受到他們的用心,面試官的平均素質也很好,你可以感受到他們是真心想要認識你這個人,面試過程中對於很多問題都有深入地討論,對於我問的問題他們往往也能給出很好很真誠的答案。
不過他們的面試過程也是最累的,電面是一小時的 Coding,Onsite 總共有五輪,其中居然有兩輪各 90 分鐘的 Coding!你可以在自己的電腦使用平常的開發環境,並且分享螢幕,題目不是傳統的演算法題,而是要你實作一個小型專案,其中一輪是實作一個小遊戲,另一輪則是實作一個系統,最後要 call Coinbase 的 API,所以對於送出網路請求並且處理 JSON 要有一定的熟悉度才行。整體的面試過程還蠻好玩的,面試官也會幫你,但一輪 90 分鐘真的有點太久。另外有一輪一小時的系統設計,以及各 30 分鐘的行為面試跟 Hiring Manager 面試。總共五輪五小時,中間休息一小時,面完真的氣力放盡了。我對整體的表現還算滿意,沒有一輪有感覺明顯不好,最後順利拿到了 Offer。
#Facebook
雖然 Facebook 都是進去以後再經過 Bootcamp 新生訓練選組,但是應徵的時候就要分不同的 Track,主要的分類有 Product、Infrastructure、Android、iOS 以及 Machine learning,Coding 的部分應該都差不多,而系統設計會根據你選的 Track 而有所不同。recruiter 一直建議我選 Android ,畢竟我的履歷上 Android 還是佔了一大部分,她提到 Facebook 現階段非常缺 Android 的人,不過她也補充說明這不代表面試的標準會比較低就是了。我最後還是堅持選擇面 Infrastructure,這樣對我來說準備起來比較方便,不用再額外花心思準備 Android。
我的 recruiter 覺得我可能也適合面另一個職缺 Production Engineer,於是就介紹了另一個 recruiter 給我,我可以選擇同時面兩個缺,最後如果拿到兩個 Offer 可以到時候再決定。實際聊過以後我還是婉拒了,因為不想花時間準備 Linux System 面試。
我們也聊到了預期的級別,她說以我的經驗我可以選擇面 E5 或 E6,這讓我感到蠻意外的啦,平心而論我認為不管是年資和能力我都還沒有到 Staff Engineer 的水準,不過既然 E6 只比 E5 多一輪系統設計面試,我就大膽地挑戰 E6 了!
Facebook 除了系統設計是一小時以外,其餘的面試都是 45 分鐘,電話面試是一輪 coding,Onsite 總共有五輪,兩輪 coding、兩輪系統設計以及一輪的行為面試。最後 Facebook 給了我 E5 的 Offer,原因是兩輪系統設計一輪還不錯另外一輪普普,沒有達到 E6 的標準。
雖然我最後有拿到 Offer,但我還是必須說 Facebook 的面試體驗蠻差的,面試官給我的感覺是他們不在乎我這個人,只想趕快在有限的時間內盡可能地蒐集一些訊號來判斷我有沒有通過,我並不反對有效率地蒐集一些訊號,但是面試是雙向的,作為應徵者的我們同樣也在面試這間公司,面試時我也在看未來我會不會想要跟這個面試官一起工作?而 Facebook 在我的標準裡顯然是不及格的。當然也有可能是我運氣不好,剛好遇到這樣子的面試官,但這也代表 Facebook 對於面試官的訓練不夠嚴謹,導致素質參差不齊,又或者是面試體驗並不在 Facebook 優先考慮的事情,不管是什麼原因,這都是一個警訊。
這個現象在 Coding 面試尤其明顯,面試官就是在看你能不能在有限的時間快速寫出最佳解。不過我倒是沒想到在行為面試也會遇到一樣的問題,我的面試官就按著他預先準備好的問題一個一個問,大部分的時間他的眼睛都盯著螢幕在做筆記,我實在是不確定他有沒有在聽我說話,有時甚至還會問我剛剛已經回答過的內容。
除此之外,Facebook 要求在 45 分鐘內解出兩道程式題,通常都是 LeetCode 原題並且要求最佳解,即使這種面試或許對我是有利的 (其中一輪我只花了 30 分鐘就寫出兩題的最佳解,然後我們閒聊了 15 分鐘),但我認為這種填鴨式的面試方式完全不能反應一個人的工作表現,這或許可以招到一定聰明程度以上的人,但是他們不一定是個好的工程師或是很好合作的人。我認為維持這種大考式的 Coding 面試也是一種偷懶的表現,但這個面試形式卻會深深地影響招進去的人的類型,是我的話我會盡量避免跟這類型的人合作,因為我認為思考過程跟溝通比你能不能快速寫出最佳解還要重要。
如果這段文字有冒犯到在 Facebook 工作的朋友的話,我在這邊先說聲抱歉,但這確實是我面試完以後真實的感受。
#談薪水
近年來由於 levels.fyi 的關係薪水變得越來越透明,這對求職者來說是個好事,你可以知道某公司的某個級別合理的薪資範圍在哪裡。如果你對談薪水這個主題有興趣的話,可以參考這兩篇經典文章:
1. Ten Rules for Negotiating a Job Offer https://haseebq.com/my-ten-rules-for-negotiating-a-job-offer/
2. How Not to Bomb Your Offer Negotiation https://haseebq.com/how-not-to-bomb-your-offer-negotiation/
我自己談薪水的策略沒有那兩篇文章寫得那麼複雜,我認為最重要的原則是誠實,不要假裝你拿到其他公司的 Offer,也不要虛報你其他 Offer 的數字 (即便這個數字是合理的),你可以選擇性揭露你的資訊,對方問到你不想揭露的資訊時,你可以禮貌地說你不方便透露,但絕對不要說謊。
公司在給你 Offer 的時候會考慮到很多因素:年資、面試表現、現在的薪水以及職等、其他公司 Offer 以及其他的面試者等等。這其中大部分資訊我們是不會知道的,比如說每個因素佔的比重、總共有多少面試者、我們在所有面試者裡面的表現如何,而且年資跟面試表現基本上已經確定了,所以實際上你能夠用的資訊就是其他公司的 Offer 或是你現在的薪水以及職等 (當然是要比較高才有用)。
當然最有用的談判手段,就是你拒絕掉這個 Offer 也沒關係。公司招人需要成本,從一開始收履歷、電話面試到 Onsite 面試,他們已經在你身上花了這麼多時間,也給你 Offer 了,所以在這個階段公司也很希望你能加入,除非這是你夢想中的公司,你很怕談薪水所帶來的風險,不然一般來說求職者在這個階段是有比較大的話語權。
另一個建議是請把 recruiter 當成你的夥伴,通常他們是要看業績給獎金的,所以她是跟你站在同一陣線,要幫助你跟公司談出更好的薪水說服你加入。Facebook 的 recruiter 這方面做得很好,她很多資訊都很透明地分享給我,包含這個級別可以拿到最好的 Offer 以及我的面試表現,一開始給我初始 Offer 的時候還告訴我這只是標準包裹,她不預期我會接,整個很 Real!後來給我的 Offer 也比原來的高出了不少,並且我如果下定決心要加入 Facebook 的話,她可以幫我要到這個級別的頂包。
Robinhood 也對我蠻有誠意的,在過程中不斷溝通,安排我跟主管以及同事聊天,有必要的話還可以讓我跟上面的 VP 聊聊,解答我對於 Robinhood 所有的疑惑。後來在得知我有 Facebook 跟 Coinbase 的 Offer 以後,給了一個很有誠意而且超過 Facebook 的 Offer,真的是受寵若驚。Coinbase 給的 Offer 相對前兩家低了不少,而且往上談的空間不高,他們給的理由是他們現在使用的估值是兩年前募資的數字,所以實際上的股票價值遠高於那個數字,而且他們 Refresh 也會給的比較大方,讓你在四年以後薪水不會降。
#最後的決定
我在選擇公司時,通常會考慮三個點,第一個是這個職位本身,我在什麼組、負責的產品、使用的技術、發展的機會以及同事跟主管的做事風格等等,盡可能知道每天工作的樣貌,判斷自己未來的開心程度。第二個是關於公司,我會問自己兩個問題:
1. 公司的文化跟價值我是否認同?人生很短,千萬不要浪費時間在幫跟自己核心價值不合的公司賣命。
2. 我是否相信公司所描述的願景,公司在未來的 5 ~ 10 年內能持續成長並且有好的發展嗎?
第三個是薪資結構,包含了底薪、股票、簽約金、獎金以及 Refresh 等等,來預期未來幾年的薪資。
除了以上三點以外,還得考量到現在都是遠距上工,跟同事以及主管建立感情也相對比較困難,所以在新公司的適應難易度也得列入考慮。在綜合考量之下,我這次還是選擇先留在 Square,或許明年再看看有沒有更好的機會!
如果這篇文章有幫助到你,歡迎按讚拍手,有任何問題也可以在底下留言,或是私訊給我們也行!
proxy要開嗎 在 暗網仔 2.0 Youtube 的最讚貼文
Payme [捐款]: https://payme.hsbc/deepwebkid
Instagram: https://www.instagram.com/dw_kid12/
Facebook: https://www.facebook.com/deepwebkid/?modal=admin_todo_tour
Spotify: https://open.spotify.com/album/2LjUOH9T9j21GiX8jzytu6
訂閱: https://www.youtube.com/channel/UC8vabPSRIBpwSJEMAPCnzVQ?sub_confirmation=1
我最高觀看次數的影片 (我為何不再拍暗網? 只說一次): https://www.youtube.com/watch?v=jbihKaqEEQw&t=127s
首支單曲: https://www.youtube.com/watch?v=UASHWB6Ai9Y
我的成長故事: https://www.youtube.com/watch?v=Kdhtp6A6YJE
這位才是真正的網絡垃圾: https://www.youtube.com/watch?v=jlJYDx1GP-U&t=263s
Billie Eilish出賣靈魂的方法: https://www.youtube.com/watch?v=pfB1S2uy5Po&t=115s
日本最殘酷的直播節目: https://www.youtube.com/watch?v=7E81OKVX7wc
我受夠了, 我的精神困擾: https://www.youtube.com/watch?v=aQ6uxaQhiS4&t=7s
[警告]史上最危險IG Story限時動態| 會導致你手機死亡
[警告]史上最危險IG Story限時動態| 會導致你手機死亡
破解會導致你手機死亡的阿拉伯IG Story限時動態
破解會導致你iPhone死亡的IG Story限時動態
[警告!!!] 破解導致你iPhone死亡的IG Story限時動態
Instagram story that kills your phone-pgtalal
之前我第一次在Instagram stories做了一part Q&A, 大家的反應數量和問題可以說是驚人.
那試想想如果當天你按進去我story後, 你電話突然這樣...
如何想打開都打不開, 再用另一部電按進我story, 結果又是一樣. 之後所有千千萬萬的暗友做同一件事結果又是這樣.
你應該會覺得我是創造了什麼詛咒限時動態 ..可能我會從你的電話爬出嚟, 對嗎?
那如果我告訴你這個星期外國發現了一個IG網頁你一按進去他的story你的電話真的馬上會動不到, 甚至有機會之後還有後遺症, 你除了想到被詛咒的限時動態外, 還會有什麼其他解釋呢?
我們今天的影片就是會有答案.
大家好又是我暗網仔! 一起破解IG史上最恐怖的 限時動態!
告訴大家這個IG 帳號名字前, 我先想提醒大家千祈唔好按進去亂試. I do not encourage doing that.
名pgtalal的IG頁有一個令人電話動不了(俗稱 “crash” )的IG story. 這事件得到多個網路新聞網站報道. 令人百思不得其解.
亦同時令到 pgtalal成為近日受到最多關注和追除人數上升得最快的IG網頁.
奇怪的地方是如果你是用一部 ‘android’ 電話按進這個Instagram story這個紫色畫面會出現. 同時會播著一首名 ‘your love’ 的歌曲. 唯一奇怪的地方是不像其他的IG story, 你按電話畫面不能讓他暫停.
但如果你用iphone按進去這個Instagram story, 你的iPhone是會完全動不了. 會crash.
我試過用iPhone, macbook不同電器看IG, Facebook, Youtube. 東西都是大同小異.
那為何在這個情況下, 同一個story用不同電話看, 會看到不同的東西? 不同的畫面呢?
而為什麼簡單一個IG story會好像能完全控制你的電話呢?
是黑客入侵Instagram? Nordvpn又能幫到手嗎?
(題外話: 今天的影片不是由Nordvpn贊助的. 今天沒有贊助. 但如果你想贊助暗網仔以後拍多點好影片, 這是我的payme, 暗網仔donation, 下面也有link.多多益善少少無拘! 大家可能有看片知道我之前搬咗屋. 多謝大家繼續支持)
看完所有關資料. Pgtalal 帳號沒有頭像. 有一個7000多follower的私人帳號.
之前Pgtalal有一名電視劇friends女演員的post, 亦曾有3個不同會令到你電話crash的IG story, 現在看這個page, story 只有兩個, friends 女演員個post 亦消失了。
最後他還有一個douyin帳號. 只是長期在拍一個 ‘N’ 字. 到底什麼意思?
他帳號所有的字體都是阿拉伯字. 翻譯成英文後都是好像沒什麼意思.
其實整件事件都不像是靈異東西. 而係似某一個一個聰明人做的一種實驗.
這個出現在私人頁面簡介的”full stack developer” 這個職業就是證據. 電腦專家full stack developer精通前端和後端開發軟件.
什麼意思?
這是個很懂電腦的人在玩一個遊戲. 或是想prove一個point.
英國Youtuber Mrwhosetheboss用了一大dung電話逐一去這個IG網頁時發現不是每一部android電話都能夠避免 ‘死機’ 這個情況.
越舊的電話 被story搞死的機會率越大.
去到某一些舊年份的電話根本完全打不開那個story.
這是代表什麼? 代表越新越多 RAM 越多處理能力的機器越能對付這個story. 亦解釋到為何最高只有6GB RAM的iPhone會不停死機.
唯一的解釋就是因為這個story是比一般story大, 所以需要多點RAM去處理. 可以這樣搞大一個Instagram story的嗎?
最後互聯網找出的答案非常神奇! 網上專家用metadata對比一個普通ig story的尺寸和這個放大story的尺寸 , 放大story大約比正常大18個數位那麼多! 即是0.5和180,000,000,000,000,000的對比. 想像一下, 一個capacity只能裝落 ‘零點幾’ 的iPhone 要面對18個 零的放大IG story時, 如何能不crash呢?
最後證實我們看到的只是一個IG 投票poll和計時器. 放大了的某一個角落. 所以怎麼按也沒有反應。
技術上的結論就是Pgtalal用了一個叫 http proxy的濾器, 有一點像Nordvpn, 讓他send data給Instagram 的server前能任意改變當中的data. 主要是誇大個story的size.
而IG 就這樣超超超超超大這樣 send給你電話讓你死機.
很多網上專家相信Pgtalal 這樣做是想make a statement看看IG security有多yuek!
人類安全要緊!!!
但....最後好像證明了這個pgtalal只有14歲...
所以他應該不是這麼偉大.
如果我14歲是這樣做只會是因為貪玩.
![post-title](https://i.ytimg.com/vi/fqy6AX3v6Xg/hqdefault.jpg)
proxy要開嗎 在 【無法順利上網?小編教你如何調整Proxy設定】 中華電信Hinet ... 的推薦與評價
1.在Windows 10中開啟「設定」頁面 · 2.請選擇「網路和網際網路」 · 3.在「網路和網際網路」中,點選左側最底下的「Proxy」 · 4.在「Proxy」頁面中的「手動Proxy設定」中直接 ... ... <看更多>
proxy要開嗎 在 用a7s3直接幫你錄製proxy代理讓你剪的動又不浪費時間!! 的推薦與評價
![影片讀取中](/images/youtube.png)
用 proxy 代理就沒問題!!a7s3還直接幫你把代理就先錄好更省時又方便小弟一直 ... 都一定要用 proxy 代理才能剪得動了所以善用a7s3可以在機內直接錄製 proxy ... ... <看更多>
proxy要開嗎 在 [請問] 網路問題- 看板ask - 批踢踢實業坊 的推薦與評價
不好意思請教一下
我的電腦自下午起連fb、youtube就會有問題
完全無法連進去
打電話跟網路公司問他們說訊號是沒問題的
室友們的網路也很正常
因此我想問題就出在我的電腦
剛剛用windows的網路檢測說是什麼8080的問題
不知有版友知道如何解嗎?
或是該是哪個專版問?
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 150.117.237.189
※ 文章網址: https://www.ptt.cc/bbs/ask/M.1511360282.A.6A6.html
※ 編輯: k04121226 (150.117.237.189), 11/22/2017 22:18:25
... <看更多>