→ hobnob: 請問貴公司這個職缺開多少錢,面試流程這麼多? 06/01 22:04
→ hobnob: 喔偏好是擇一,我誤會了 06/01 22:05
→ MoMoShota: Junior ~ Mid 是 1M NTD 以下;Mid ~ Senior 是 1.2M 06/01 22:08
→ MoMoShota: 到 1.5M NTD,如果真的超強當然是可以往上談的 06/01 22:08
推 devilkool: 廣告業竟然可以開這麼高薪,滿意外的 06/01 22:29
推 zxc25678: 兩個應徵者選不同的題目 你要怎麼評斷優劣? 06/01 22:35
→ MoMoShota: 咱應該屬於廣義的廣告業,至於薪資水準因為我很久沒出 06/01 22:46
→ MoMoShota: 來找工作了,所以不是很瞭解現在的水準 06/01 22:46
→ MoMoShota: 我們會根據應徵者的回答內容進行評分,然後每個項目會 06/01 22:48
→ MoMoShota: 取平均 06/01 22:48
→ MoMoShota: 舉例來說:問答題表現是 60 分,但實作有 80 分,那就 06/01 22:50
→ MoMoShota: 取平均 70 分(但有時候如果讓人眼睛一亮的回答還會有 06/01 22:50
→ MoMoShota: 些特殊加分) 06/01 22:50
→ MoMoShota: 另外補充一下,我如果時間允許會根據應徵者的履歷或 G 06/01 23:00
→ MoMoShota: itHub 客製化題目,我認為每個人都有自己的特質跟值得 06/01 23:00
→ MoMoShota: 發揮的項目,如果千篇一律問考古題太無聊了 06/01 23:00
→ acgotaku: 這薪水結構還蠻接近 y 社的 06/01 23:21
推 kurtsgm: 廣義的廣告業...字母公司也算是啦 XD 06/01 23:33
→ MoMoShota: G 社也算廣告業,只是我進不去 QQ 06/01 23:39
推 yangs0618: 推 喜歡看這種分享 06/02 00:03
→ layer0930: 好奇問一下,php 沒thread 為什麼要考這個。 06/02 00:10
→ layer0930: 另外php在寫 多執行的時候,相對於其他語言 memory更 06/02 00:10
→ layer0930: 不好控制跟回收。用其他語言寫反而比較穩才對? 06/02 00:10
推 ekids1234: new grad 來應徵後端的話會怎麼考?不會 php 也不會 d 06/02 00:11
→ ekids1234: b ... 06/02 00:11
上述的題目其實是因為本次的應徵者都是有經驗的(至少都有 3 年以上),所以才會選擇這些題目。
如果是資工本科系畢業的話,其實我就會改問一些必修課上會遇到的問題。
舉例來說:請問 C 語言的 qsort ᄄ蝳〞漁伅■亠曮蚻O如何(可以查 Google)
正確答案是,其實 qsort 並沒有指定要用什麼演算法實作(C 語言規格書說的)
但有一些誤人子弟的網站會斬釘截鐵地說它「一定」是用 Quick Sort(包括我的教授也是這樣),那這表示他可能不習慣於看第一手資料
(小聲)之前我問過 ChatGPT 也是唬爛說是 Quick Sort
推 vi000246: 問得好細喔 推 06/02 00:17
→ newhandfun: 同樣好奇貴公司是否需要碰到thread? 06/02 00:37
→ newhandfun: 用的那個extension? 06/02 00:37
關於 Thread 的部份我統一在這邊回覆。
確實,我們的系統目前並沒有在 PHP 上「直接使用」Thread 或 Coroutine 之類的技術。
但是 PHP-fpm 是一個經典的 Parent/Child Process 模型,同時在 Laravel Horizon 也用純 PHP 加 pcntl extension 實作類似的模型。
之前我們團隊在遇到 Laravel Horizon 相關的問題時,如果不理解這種模型實作可能會增加 Debug 的難度。
回到 Thread 的話題,目前我們沒有計畫在 PHP 應用程式上加入任何 Multi-thread 的技術。
誠如版友所述,PHP 在多執行緒的記憶體管理跟控制簡直是災難,而避免災難的方式就是不要用它(?)
近年來因為 Swoole 的出現,讓大家開始思考 PHP 的另一種可能性:Coroutine
然而從我的角度其實我也不是很喜歡 Swoole,一個理由是之前社群的分裂問題,另一個理由是「那我為何不選 Go?」
→ layer0930: 另外1的問題是指生命週期還是程式碼? 06/02 00:53
剛剛有人私信我詢問類似的問題,我直接轉貼我的回覆:
我們知道,PHP 有幾種 SAPI:apache2handler, cli, fpm(這邊僅列舉比較常見的,其實還有很多)
我在這題會期待得到的回應是:當我們啟動 php-fpm 程式(你可以想成直接執行它的執行檔)時,PHP 實際上會做哪些事?
像是 php-fpm 是一個經典的 Parent/Child Process 模型,它會去 fork 出很多的 Child Processes,而實際處理請求的是這些 Child Process(Parent Process 主要是用來監測這些 Child Process 是不是「還活著」)
然後,當我們收到來自 Web Server 的請求時,PHP-fpm 的 Child Processes 又是怎麼去服務這些請求的呢?
我會很樂意看到有人從 source code 的角度去剖析這件事,但我老實說這非常罕見
所以其實只要能夠從外部表現的行為(例如我們可以觀察到出現 Parent/Child Processes),然後結合一些自己的經驗或知識講述它設計的理由,其實在面試就算是過關了
ps. 如果他要講 apache2handler 也是可以的,不一定只能講 php-fpm
ps2. 當然,如果對方要講得很深我也是可以一起聊聊的,雖然我研究 PHP Source Code 是 PHP 7 的時代的事了,但現在有些知識應該是通用的(如果被指出有誤的話,還可以順便學習 XD)
→ devilkool: 沒想到是Y或G這種廣告業XD 想說以前面數位廣代薪水很普 06/02 00:53
推 NTUTM04: 推一下XD 06/02 01:30
推 newhandfun: 剛剛忘了推。現在ptt需要更多這種優質文章 06/02 01:34
推 lalisnive: 推 感謝分享 06/02 01:36
推 Csongs: 蠻有趣的 推一下 06/02 02:35
推 changyuheng: 推 06/02 03:10
※ 編輯: MoMoShota (36.226.47.65 臺灣), 06/02/2023 03:27:15
※ 編輯: MoMoShota (36.226.47.65 臺灣), 06/02/2023 03:46:08
→ Firstshadow: 最近也被同樣行業的找 :OOO 06/02 03:48
※ 編輯: MoMoShota (36.226.47.65 臺灣), 06/02/2023 03:51:34
→ ashlikewing: PHP沒有thread?哪pthread extension放在官網是什麼 06/02 03:59
→ ashlikewing: 作用? 06/02 03:59
php pthread extension 已經在 2019 年初宣告停止維護:https://github.com/krakjoe/pthreads/issues/929
原作者表示在 PHP 8+ 應該使用 parallel 取代之(它們互不相容、也不會相容):https://github.com/krakjoe/parallel
另一方面,pthread 或 parallel 都需要 enable ZTS,而在我的印象中在大部份的發行版這都是預設不啟用,顯見它在社群中並不是一個常用功能
綜上所述,大部份的開發者會誤認為「PHP 沒有 multi-threading」是可以理解的
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 04:52:39
噓 MoonCode: 06/02 05:55
推 Inglenook: 推 06/02 08:19
推 allanh: 推 謝謝分享 06/02 08:22
推 x246libra: 看了想問,薪資多少 06/02 08:29
推 cmmlyc: U文 06/02 08:44
推 jack0204: 不少問題只是問爽的,反而沒問使用情境 06/02 09:13
推 jack0204: 就像問PHP的GC是怎麼判斷的一樣,沒有任何意義 06/02 09:18
我滿認同這位版友的說法的,實際上也曾經有面試者回問我們「問這些內容,實際工作上真的用得到嗎?」
其實這些問答題大多是基於團隊或個人的開發經驗總結出來的一些精華,而不僅僅是抄襲一些中國所謂的「面經」
就拿 GC 的部份來說好了,曾經我們團隊發現大概每幾個小時應用程式會出現較高比例的 HTTP 500
經過分析,當時的應用程式 memory usage 會緩慢遞增,並在某個隨機的時間段突然下滑,而下滑當下的 HTTP 500 機率較其它時間高出幾個百分點
我們推測這是因為 PHP 在 GC 期間引發的暫停服務現象,我們因此查詢了 php.ini memory_limit 的設定是有問題的,再加上 linux memory overcommit 等設定引發一系列的錯誤
雖然高階語言為我們隱藏了很多底層的細節(這也是高階語言被發明的目的之一),但如果不瞭解這些細節就貿然開發,那某天晚上它們就會叫你起床重睡(?)
事實上,問答題這邊僅列出「基礎題目」,我通常都會根據應徵者的回應再深入去詢問。
這是個很有趣的過程,不僅可以更深入瞭解對方的能力,偶爾也能夠學習到新的知識。
推 ian90911: 感謝分享 推精美上色 06/02 09:27
推 arcade0425: 推 菜雞如我又有不少東西可以補了 06/02 09:39
推 richardz: 推 06/02 10:03
推 assembler80: 推 06/02 10:47
推 eric0731: 推 06/02 10:52
推 h88377: 推 感謝分享 06/02 10:54
推 davidpanda: y社比這個高了吧? 06/02 10:58
推 yuinami: 感謝分享 06/02 12:34
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 13:06:48
推 holebro: 第一次遇到面試主持來分享 酷酷酷 06/02 13:11
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 13:29:38
→ realbout: 喜歡白板題~ 06/02 13:35
→ Uzak: 考這麼難但薪水有點少啊... 06/02 14:03
推 gmoz: 問qsort那個才像問好玩的吧 06/02 14:04
很抱歉,因為 qsort 的那個例子是臨時想的,確實可能不夠周延
這個題目的用意在於:確認應徵者是否會查詢第一手資料,抑或是拿 Google 到的熱門資料搪塞。
正如同我寫 PHP 也是一天到晚在看 PHP 官方手冊(甚至有時候還要去看 PHP source code,因為文件有些細節會省略),而不是直接拿網路上的 Code 複製貼上。
註:在其它程式語言或許直接 copy + paste 可能是可行的,但網路上充斥著各種存在漏洞的 PHP Code(甚至包括 GitHub Copilot 都會出現),如果不經思索就貼上甚至有可能危及系統本身
推 freedls: 不同視角,給推 06/02 14:10
推 ybon3: 推 06/02 14:10
推 BigCockman: 難度薪水不成正比 但分享給推 06/02 15:18
→ layer0930: 部分考題,算資深的基本功吧,白板題在早期也很常見, 06/02 15:19
→ layer0930: 不乏要求直接寫踩地雷或是這種黑白棋 06/02 15:19
→ layer0930: 1.2 ,1.5算低了? 06/02 15:23
關於有版友認為題目難度與薪資不成比例的問題,我認為這很值得討論,所以我今天已經將這件事往內部檢討呈報。
剛剛老闆的回覆是其實以前內部就有調整過,但 Cakeresume 上的 JD 一直忘記更新,而且昨天跟我講的數值還是舊的,這邊做一下更正:
Junior - Mid: 840K ~ 1M NTD/year
Mid - Senior: 1.2M ~ 1.8M NTD/year
不過也有可能是因為本篇心得是綜合多位應徵者的題目一次性 PO 上來才讓人產生誤會,事實上不會每一位都被問到所有的題目。
舉例來說:有些非 PHP 背景的應徵者就不會往 PHP 相關的題目去問。因為我認為那只是刁難、不是面試
上面也有提到,我會根據每位應徵者的履歷、GitHub 貢獻、Blog 文章等資訊去設計問答題
註:其實還是有題庫,因為我們資源不夠,真的沒辦法負擔為每一位應徵者重新設計題目的成本
註2:其實我個人非常喜歡暗殺教室殺老師為所有學生個別出一份題目的做法,但現實上我不是黃色的章魚、沒有超音速,我也不是漫畫人物
我也要聲明一下,核薪的部份並非我一人能決定(我僅會提供建議供主管參酌),這邊僅是 PO 出一個範圍,實際上還是會跟據一面、二面的狀況動態調整。
至於具體拿到 Offer 的核薪情況比例我並不是很清楚,但曾經有一個是超過 1.5M (上一版本的核薪上限)的資深工程師,他真的非常優秀且我也向他學習了不少東西
推 inglyth242: 推分享 06/02 15:35
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 16:05:37
→ triplee: 這個分享的敘述有理有據 也清楚說明背後的邏輯思維 我覺 06/02 16:27
→ triplee: 得是很不錯的參考 06/02 16:28
推 bill0205: 推 06/02 16:45
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 17:00:18
→ tomlin121283: 你都說了這些問題chatgpt都能答出來 為什麼要人硬背 06/02 17:15
The most important goal of higher education: it was to ensure that graduates can recognize when "someone is talking rot." -- Jeremy Knowles
時至今日,我認為上述這句話的 "someone" 也可以改成 "ChatGPT",因為現在會告訴你假訊息的不是只有長輩、LINE 群或 Google,還多了 ChatGPT。
我一向認為基礎知識是非常重要的,因為它可以讓人在遇到「胡說八道」的時候還能夠分辨的能力,我也在這篇文章中反覆強調「目前的 ChatGPT 是會唬爛人的,所以我想找的是能夠分辨它是不是在唬爛的人」
推 vi000246: 調整後的薪水滿不錯的 原本也覺得題目偏難 跟薪水不太 06/02 17:27
→ vi000246: 成比例 06/02 17:27
→ DrTech: 真的非常優秀才1.5M… 薪水一般般而已。 06/02 17:29
推 DrTech: 不過你真的很認真,還加了那麼多顏色 06/02 17:32
→ layer0930: 好奇覺得題目偏難, 06/02 17:57
→ layer0930: 那上述問題大部分都能答,應該領多少? 06/02 17:57
事實上,在 PTT po 文之前我有先 po 給幾個比較熟識的朋友。
其中問答題的部份被某朋友吐嘈說:你這題目涵蓋了 Backend, DBA 跟 SRE,這在我們公司是各 1.5M 的三個缺
其實我在設計這些題目的時候,原本就沒有預期會有人全部都能對答如流,畢竟:
1. 面試會緊張,大部份人的表現都無法完全發揮(我絕對不會說我之前面試時連陣列的 mergesort 都寫不出來,笑死)
2. 問題的範圍領域很廣,不是每個人都專精每個領域
3. 真的都能夠答得上來的大神級工程師根本就不會選擇我們這種小公司
設計這些題目的用意在於「我大概想知道應徵者對哪些東西熟悉、哪些不熟悉」,這對未來的工作內容安排有很重要的意義(相信我,你絕對不會想讓一個後端工程師去寫前端,大家都痛苦)
→ qazwsx12: 問的問題真的會用到嗎 06/02 18:40
→ netburst: 比只會考刷題的好一點點了 只是$可以再多些 06/02 18:43
→ netburst: 天花板 06/02 18:43
→ netburst: 上面那個樂譜典藏的後端缺PHP 年薪250+不知道考的多難 06/02 18:47
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 18:58:01
推 steak5566: 考成這樣才這點錢 難怪cs學生寧願去豬屎屋寫韌體 06/02 19:20
推 kasimEnix: 感謝分享,好文章越多越好 06/02 19:21
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 19:31:02
→ jack4160: 回上面 樂譜典藏leetcode hard, 這篇白板題leetcode med 06/02 19:37
→ jack4160: ium 06/02 19:37
→ layer0930: 開的起1.5m算小公司 - -,有些上市上櫃都沒開到1.5m 06/02 19:42
→ layer0930: 甚至封頂才1.5m 06/02 19:42
推 netburst: 何必比爛 06/02 19:45
推 hobnob: 原PO立意良善,但看完我覺得還好我英文過得去可以靠刷題去 06/02 19:55
→ hobnob: 外商,謝謝國中英文老師 06/02 19:55
推 GJ21: 這白板起碼m+ lc很多m的島嶼題都比那題單純 純軟真D捲 06/02 20:15
→ NadiaArwall: 懂這些也用不到 還是無法篩掉寫爛code的工程師 06/02 20:24
欸不是,原來這題目有很卷嗎 XDD
除了我那個比較規格外的轉職學生之外,昨天我把同樣題目丟給今年高二的學生,他大概一小時內就解出來了(Python)
我本來還在想是不是我出得太簡單了說
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/02/2023 20:34:39
→ layer0930: 高二寫的出來- -,他沒google或是靠gpt,是真的蠻強的 06/02 20:37
→ MoMoShota: 他是比較規格外沒錯,好像是想靠 APCS 升學的 06/02 21:06
推 gino0717: 好厲害 06/02 22:04
推 lovetzuyu23: 推一個,白板題還蠻有趣的,薪水也蠻高的,不過沒接 06/02 22:16
→ lovetzuyu23: 觸過圍棋的看到什麼提子的會愣一下 06/02 22:16
推 ckp4131025: 封頂1.5M哪裡高了 06/02 23:06
→ ckp4131025: 1.5M是大通膨前的行情 06/02 23:06
→ ckp4131025: 不過你這篇真的滿認真的再給你個推 06/02 23:08
推 howard50009: 部分題目不錯,但mid-senior 開的比較普通,能順達 06/02 23:10
→ howard50009: 的人,不會預期自己只有這樣的薪水,來了也待不久 06/02 23:10
推 ckp4131025: 補推 06/02 23:11
推 SixC5566: 推推分享 雖然我都不會 06/02 23:13
推 jj0321: 謝謝 QQ 產業決定薪資 06/03 00:00
推 dabiann: 日本上市的A社嗎 06/03 00:01
→ MoMoShota: 不是日本公司哦 06/03 00:11
推 ko363630: 借提問,非本科系想走後段。目前還在學python,是 06/03 00:57
→ ko363630: 不是學錯了 06/03 00:57
認真說,繼續學 Python,千萬不要把路給走窄了。
推 jay123peter: ,推 06/03 01:19
推 tommy88520: 依題目難度 薪水真的有點低 06/03 01:29
→ netburst: 重點是考這些 工作用得到嗎 要下棋嗎 06/03 03:35
→ netburst: 高二寫出來 前三志願嗎 06/03 03:36
中字輩電機,他說他成績沒這麼好能往台清交成
我希望以下言論不要代表我們公司,僅是 furrymosa 前深夜我個人的抒發
考跟公司無關的白板題:這工作用得到嗎 要下棋嗎
考跟公司有關的實作題:你們公司是不是想要白嫖人家做法?
沒辦法,父子騎驢。
我花費大量心力設計各種題型,就是不想浪費任何一個可能的人才。
我過去非常討厭白板題,我的心態就是:啊工作用又不到,我幹嘛要會?
我也非常歧視刷題仔,覺得 Side Project 跟 Open Source 貢獻才是王道。
就算我自己會把 Leetcode 當成開始吃藥之後取代咖啡的醒腦工具;就算我曾經還有去打過 ACM-ICPC;我仍是討厭白板題的。
我知道自己一定不是寂寞的,有很多人有著亮眼的 Side Project 或是很棒的 Contributor,但就是不會白板題所以無緣大廠。
我希望能以這種形式的面試,讓這些人有一個機會。
我知道自己只是一個人、一間公司,沒辦法撼動整個市場,也沒有那個資本跟什麼韌體廠競爭。
但我期許自己的任何一個行為,都能夠為整個產業帶來哪怕一點點的改變,我有能力做所以我去做。
被問倒真的不是任何應徵者的問題,我希望能夠更跟多有熱情的人一起參與改變--即便它的結局可能不盡人意。
看到鼓勵,其實我還是會開心的;看到批評,我還是會想多多檢討的;即便只是酸民,我也認為這些都是自己進步的可能性。
但我必須說,我沒有自己想像中的這麼堅強。
嘛,感謝版友們在在聽一個老人家深夜嘮叨,如果讓你不開心了衝著我來就好。
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 04:11:39
推 holebro: 原po超有心的 幫補血 覺得考題難度跟薪水跟工作內容也都 06/03 05:42
→ holebro: 很match 06/03 05:42
推 jeffrey0401: 推推 做了快7年PHP 看到那些問還真沒辦法馬上反應 X 06/03 07:29
→ jeffrey0401: D 謝謝分享 06/03 07:29
推 abola921: 推回覆,答的出2/3的人,也不會想去小公司 06/03 07:42
推 abola921: 有些領域題目,例如第五容器化在devops是基本常識沒錯 06/03 07:45
→ abola921: 但那來考backend就不是基礎了 06/03 07:46
容器化是因為有位應徵者的 GitHub 上有 Nginx + PHP-fpm 相關的實作,但他並沒有遵循最佳實踐
會問這題是想知道當時他是怎麼想的,是不是有什麼額外的考量
推 abola921: 像5-2設定為中階,我不知道你是不是想問namespace跟 06/03 07:54
→ secrectlife: 非常資深優秀才1.5,現在隨便一個四大畢業碩班去發哥 06/03 07:55
→ secrectlife: 都有 06/03 07:55
→ abola921: cgroup,如果是,devops進階我都不太敢考這個了 06/03 07:55
那題的背景是,問了 Virtualization 跟 Containerization 的差異之後,有位應徵者講出了 Virtualization 是依賴 KVM 達成(雖然不全對),我就順勢問了一下「那你知道 Containerization 是怎麼達成的嗎?」
雖然他沒能答出來,我認為合情合理。所以我在面試結束前也跟他提了 namespace 跟 cgroup 的概念,跟他說有興趣的話可以查一下相關的資料。
推 jeffrey0401: 不過看到考題的類型這麼廣 感覺跟我上一間公司一樣 06/03 08:16
→ jeffrey0401: 除了coding 之外 DBA Nginx參數調整 devops都要全包 06/03 08:16
→ jeffrey0401: 的fu 06/03 08:16
因為應徵者背景各有差異,例如會為具有一些 SRE 背景的人準備伺服器相關的題目;為履歷上寫著「精通」PHP 的人準備底層的問答
再次強調,上面是綜合多位應徵者的考題,不是每個人一進來就從第一題往下問
推 drysor: 感謝分享,但刷題仔錯了嗎QQ 06/03 09:04
刷題仔沒錯,每個人都有自己的選擇,也沒有所謂「正確」或「錯誤」的選擇
我個人的偏好不會影響到實際評分的結果,即便我不喜歡白板題,我仍會喜歡將其作為智力測試或腦力激盪,因為這很「有趣」
推 howard50009: 推新增的回應,其實我也覺得,對有熱情的人來說,這 06/03 09:14
→ howard50009: 些應該都不會是難題 06/03 09:14
推 yyyyyyyv: 推 用心分享 06/03 09:34
推 stepnight: 對工作、code有熱情真的這麼重要嗎? 06/03 10:15
→ stepnight: 如果工作上的要求都能順利完成 06/03 10:15
→ stepnight: 那要求熱情的用意、目的是為了什麼? 06/03 10:15
其實,在本輪面試結束之後,我老闆傳了一篇文章給我
https://www.inside.com.tw/article/4268-coder-hacker-and-architect
他覺得,本次我應該要檢討的是「不是每個人都有志成為 Hacker 或 Geek,大部份的人都只想成為 Coder」
而他們在履歷上寫的「精通」也只是指 Coder 的精通,跟我的定義是有點差距的。
我不能透露太多關於應徵者的事,但其實這次過程中有一位讓我非常期待:
1. 資工本科系畢業
2. 有社群參與,跟我一樣是 SITCON
3. 豐富(多年)的 PHP 工作經驗
4. 自願挑戰比較難的考題
5. (他應該不知道)他曾經兩次從我手上搶走 Offer
雖然最後的結果有點不盡如人意,但我認為只是因為我們領域不同而有所歧異,他仍是很優秀的開發者這點無庸置疑
為什麼我會期待對方 Not only Coder?因為有一個能與人分享、共同學習、保有熱忱的夥伴,是人生中很棒的經驗。
我曾經在上一份工作,又或是大學時在資訊社群中有類似的感覺,而我很喜歡也很嚮往這種感覺。
向錢看齊並沒有什麼錯,認為工作只要完成就好也是一種選擇。
畢竟有人有家累、長輩與子女的期待,但如果可以選擇的話我還是想找個 Hacker 或 Geek 一起創造。
推 chi2chi2chi2: 推分享 要學的還好多QQ 06/03 11:10
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 11:24:05
推 ab07275566: 我只對錢有熱情 06/03 11:15
推 ckp4131025: 對錢有熱情未必會比對工作有熱情差,我的角度是認為進 06/03 11:25
→ ckp4131025: 步的原動力來自於對現況的不滿足,對錢有熱情一樣可以 06/03 11:25
→ ckp4131025: 進步得很快 06/03 11:25
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 11:30:41
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 11:46:09
推 chrischen: 這面試題難度算台灣php業界前5%了 06/03 11:43
那大概就是沒給到 PHP 業界前 5% 才會被批評吧 XD
我自己也是會自嘲「活該 PHP 薪水低」的那種鄙視鍊的一員,但這不應該是常態現象。
我永遠也不會忘記有個遊戲業的朋友在爆肝數十小時之後,問我薪水那種驚恐的神情(我當時也才 65k/月)
如果可以的話,我當然希望所有專業人士都能夠領到合理的報酬
但現實世界不是童話故事,也不是動漫,不公平比比皆是,我能做的只有盡量彌平這種不公平(或是去加劇這種不公平)
我年少輕狂時有想過創業做遊戲,當時跟幾個繪師(兼其它公司的遊戲美術)聊這件事,他問說:
「你覺得一個遊戲美術應該月薪多少」
『至少也要 60k/月 吧?』
「你創業之後請務必第一個找我,拜託。」
時至今日,他見到我還會開玩笑地問說什麼時候要創業。只不過,實際見過遊戲業出來的人(前公司 PM)之後,我只能說
我又不是礦裡有家,創個屁業。
→ loadingN: 大部分人只想成為web仔? 太可悲了吧QQ 06/03 11:44
我其實也做過一段時間的韌體開發,但我老實說我就對那個領域提不起熱情,所以我成為 web 仔。
我能理解你的想法,畢竟我大學教授有一模一樣的思維:
「前陣子,一個你們畢業的學長回來找我,我問他在做什麼工作。」
「你知道他回什麼嗎?他說他在寫 Web!」
「我就問他說『你是怎麼淪落到這種地步的?』」
以當時來看,web 雖然有很多機會,但薪資相對少(其實現在好像也一樣)
而且當時的 web 技術還沒有現在這麼百花齊放,教授會有這種觀念也不是不能理解
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 12:08:07
→ gino0717: 你老闆是對的 06/03 12:04
我也覺得他是對的。
學學某大型 B2C 電商,筆試考卷發一發就好,反正都有標準答案,就算現在還在考 PHP 5 的東西也沒差;
學學一線大廠,白板題直接往上丟,反正 Leetcode 說多難就多難,也不用在那邊自己煩惱這題會不會太難;
反正有熱情的人進來還是有熱情
想跟 Hacker 或 Geek 共事,等他進來再確認也不遲
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 12:20:34
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 12:50:05
→ layer0930: Backend版也在討論 06/03 12:56
→ layer0930: 看完兩邊的留言,我還是把外語補起來好了 06/03 13:06
嘛,還是很感謝我朋友幫我 po 過去啦,不過他好像 po 到自己在那邊森77。
他幫我說話我是很開心啦,但他做人跟講話就比較機車(他自己說的,非詆毀),大家就不要太在意了
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 13:12:32
推 stepnight: backend那邊我看到J開頭的回覆 06/03 13:24
→ stepnight: 其實滿實在的,覺得以那方向去改面試 06/03 13:24
→ stepnight: 可能?會比較容易找到志同道合的夥伴 06/03 13:24
別提了,剛剛他還 7pupu 跑來跟我說歧視啥的 XDDD
其實我們是有架構題的,for senior only,因為我對該職位的需求是「要能夠與架構師討論技術選型,並定義合適的 Interface」
本次有兩題架構題,但我覺得以 PTT 這類文字載體真的很難呈現那個互動感,不過既然有人提了我就稍微說一下,反正這些題目大概不會重複使用
1. Web 版簡訊實聯制服務
題目:
1. 共需要有 2 個 APIs:
(1) 讓商家可以發行商店代碼(需輸入店家地址或經緯度資訊,回傳一個不重複的商店代碼,一個 15 碼的純數字字串)
(2) 讓民眾可以傳送疫調資訊(需輸入一個字串,表示簡訊內容,「可能」存在商店代號,不會回傳或回傳 204)
注意事項:
1. 總商家數量約為數百萬,小於 1000 萬
2. 民眾每天會產生約 1 億筆資訊,需考量後續分析可行性與儲存成本
我通常會問一些問題,視對方的回答再決定要不要繼續問下去:
1. 你會如何產生商店代碼?
(1) 如果用 DB 的 Auto Increment 的話,會不會有偽造的可能性?
(2) 可以加個檢查碼,這樣對於一些不符檢查碼的請求就可以直接忽略?
(3) 會在哪裡儲存這些商店代碼與位置資訊?
2. 你會如何驗疫調資料的正確性?
(1) 如果沒有商店代號,那表示該請求是非法的,直接忽略
(2) 承 1-2,如果檢查碼不對,可以直接忽略,這樣也不用進 DB/Cache 查它是否存在
(3) 假設檢查碼的演算法被破解了,有沒有什麼好的方式更新演算法,還是直接讓它到 DB/Cache 裡查?
3. 那如何保證可以每天接受 1 億筆的記錄,會選擇什麼儲存方式
(1) 如果需要分析 XXXX,那這種儲存方式是合理的嗎?
(2) 如果需要分析 OOOO,那這種儲存方式是可以接受的嗎?
(3) 假設每天確診人數劇增,依你上述的方法在請求報表的時候會很慢,有什麼因應手段呢?
基本上這種題目題很自由發揮的,如果沒什麼想法也可以問問 ChatGPT(不限制),不過也要思考它回覆的合理性。
為什麼會出這題?
因為公司有某個業務會有大量的短的 HTTP 請求訊息,而且我們需要與 Data Team 合作,定義出他們易於分析的資料結構,並且還要注意是否適合儲存載體。
雖然也考量過會不會有點太過「政治」,但我認為技術是中立的,純做技術探討的話其實沒什麼政治問題。
利申
這題實際上提到的傳送資料方式、儲存方式與分析內容與公司主要業務差距甚大。
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 14:13:45
推 scottxxx666: 推分享 06/03 14:09
推 BigCockman: 台灣鄙視web的都差不多悲哀 平常嗆人低薪 聽到比自己 06/03 14:13
→ BigCockman: 高薪就說是特例 聽到美國web薪水就改舉一串美國生活 06/03 14:13
→ BigCockman: 缺點 06/03 14:13
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/03/2023 14:25:46
→ layer0930: 檢查碼這題可以用加解密來做,或是用md5來實現… 06/03 14:26
→ MoMoShota: 思路不錯,但代碼是 15 碼的純數字字串哦 06/03 14:29
→ layer0930: 方法也很多….,但是現代的一些方式可能不會用檢查碼 06/03 14:30
→ layer0930: 如果是純數字…那字典攻擊很容易吧 06/03 14:33
→ MoMoShota: 是的,假設攻擊者已經知道檢查碼的存在,那確實在一些 06/03 14:43
→ MoMoShota: 現代的攻擊手段下防不勝防,所以是否有其它手段可以防 06/03 14:43
→ MoMoShota: 範(至少不要每次都進 DB 查)也是會交流的一部份 06/03 14:43
→ layer0930: 那就是不要純數字會單純點,還是有什麼特別理由 06/03 14:45
→ MoMoShota: 因為當時政府發出來的是 15 碼數字,當然中途改 spec 06/03 14:50
→ MoMoShota: 也是可以討論的,但當時 1999 的考量應該是簡訊有最大 06/03 14:50
→ MoMoShota: 長度限制(太長會被截斷或分成兩則),以及允許在商店 Q 06/03 14:50
→ MoMoShota: R Code 加入其它字元 06/03 14:50
→ layer0930: ..那這樣的話 用md5做驗證也不會超過15碼,因為不會真 06/03 15:06
→ layer0930: 的把md5後的結果都給出去,只是要驗證最後的結果是對 06/03 15:06
→ layer0930: 的 06/03 15:06
→ layer0930: 但是要純數字不能改規則,那只能用數學來計算了 06/03 15:07
推 chrischen: 如果你們的工作內容有勞力密集的部分,就還是需要招初 06/03 15:08
→ chrischen: 中階的所謂coder,這些題目就明顯太難了,也沒有鑑別 06/03 15:08
→ chrischen: 度。一般團隊有個一兩位Geek專門解決難題就可以 06/03 15:08
→ MoMoShota: 上面的題目是混合了所有應徵者的記錄,初階的題目會明 06/03 15:14
→ MoMoShota: 顯輕鬆很多 06/03 15:14
→ layer0930: 問一下,當初此題是用模數來解? 06/03 15:26
→ layer0930: modular arithmetic 06/03 15:27
→ MoMoShota: 此題沒有標準答案,有人說用 DB auto inc、有人說用 b 06/03 15:29
→ MoMoShota: igint 亂數配 hashmap,我的思路可以私信給你,如果你 06/03 15:29
→ MoMoShota: 想要的話 06/03 15:30
→ layer0930: 想知道 06/03 15:32
→ layer0930: 不可能用db吧,重點不是在於要避免直接入sql嗎? 06/03 15:33
推 devilkool: 架構題滿有趣的 06/03 16:44
推 yangs0618: 直接拿經緯度來用最小單位到秒 15位應該也還夠用 06/03 16:55
→ yangs0618: 我想知道思路 06/03 16:56
推 ashlikewing: 個人對上面那個架構題比較中意,有機會也確實會出近 06/03 17:07
→ ashlikewing: 似的題目,比較實際;簡單解關鍵字的話雪花演算法 06/03 17:07
噓 Saaski: ... 06/03 17:12
→ Saaski: 有病就去看病 06/03 17:16
身為一個近十年的焦慮症與恐慌症病患,不必擔心我有定期服藥與就醫,目前病情也尚未影響到生活與工作。
不過仍然很感謝您的關心。
我個人是不太介意這類言論,但期許您可以在發言時多站在對方的角度想一下,我能接受不代表其它人也可以。
→ layer0930: 經緯度可以嗎?是用哪個編碼?另外經緯度只是最近似吧 06/03 17:21
→ layer0930: 應該說經緯度不能當唯一值 06/03 17:25
推 Sunal: 只用經緯度 樓上樓下,分租店面很難區分 06/03 17:37
推 Sunal: 而且要怎麼讓商家取得「正確」的經緯度 終端裝置定位很不 06/03 17:40
→ Sunal: 準的 06/03 17:40
推 yungyuan: 推推 感謝分享 06/03 17:49
推 zegas: 推 06/03 21:23
→ alihue: 覺得 AVL tree 那裡太 tricky 了,不像是一個資深工程師 06/03 23:56
→ alihue: 會知道的東西 06/03 23:56
AVL Tree 確實是較罕見的,它比較像是教材中的範例,畢竟它是最早出現的自平衡樹。
該題其實是因為應徵者提出了「自平衡樹」的說法,所以才想說進一步問「為什麼不採用其它的自平衡樹?」
→ alihue: 應該只有剛畢業才會記得 AVL tree 了吧,反而 B+ tree 還 06/03 23:57
→ alihue: 是資料庫 index 常識範疇 06/03 23:57
推 kurtsgm: XD 真的 我當年考研究所好歹也四大正取+其中一間榜首 06/04 00:04
→ kurtsgm: 不敢說多強但至少該念的也都念了 AVL / RB這種東西現在都 06/04 00:04
→ kurtsgm: 還給老師了 剩下B+ tree還記得而已 06/04 00:05
推 redseye: 問答題那邊我幾乎全部被打倒 看來我這十年是白混的了XD 06/04 02:16
其實這沒有絕對,畢竟每個人的經歷與專業不同。
有些人更熟悉具體業務的 Domain Know-How、設計模式,而有些人則喜歡底層技術,這都沒有對錯。
我時常會告誡自己「要成為一個有十年經驗的資深工程師;而不是有十個一年經驗的資淺工程師」
不過理想豐滿,現實骨感;我覺得自己大概只是個五年經驗的中階工程師吧。
推 single4565: 推 06/04 10:31
推 New1986: 06/04 10:35
推 DNNDNNDNN: 答得出來的人 有更好的選擇 為何要進你們公司要思考一 06/04 13:13
→ DNNDNNDNN: 下 06/04 13:13
推 mozume: 家裡有礦的或是有理想抱負的青年 06/04 13:19
或許我可以聊聊為何我會選擇這間公司。
2017 年左右,我前公司因為一些業務調整的緣故所以我離開了,當時我在求職時的基準就是:年薪至少要大於 1M
我當時面試了很多公司,像是創業家兄弟(生活市集/松果購物)、聯合購物網(好像之後收起來了?)
面試的經歷有好有壞(也有那種我到現在還在嗆他家 CTO 不懂技術的),不過絕大多數公司我都要求要 1M 以上。
只有目前這間公司例外。
當時我很認同它的產品理念與創辦人(目前的老闆)的想法,於是我只為這間開了特例,降了一些標準
其實公司最後也沒讓我失望。
剛入職時,公司還在很初期的階段,還跟別人共用小巨蛋的創業基地辦公室(雖然環境不錯,就是冷氣太冷),那時甚至連獨立的辦公桌都沒有 XD
隨著業務的穩定發展,我們先後搬到了共用辦公室,當時終於有自己的辦公桌了,也不用跟人搶會議室了;
最後,我們現在有一間獨立的辦公室,八樓、視野良好,可以看到台北 101,下班還可以走去吃個五之神再回家,還在捷運站旁邊非常方便。
哦對了,當然最重要的薪水早就遠超過我當時的預期了。
這就是為什麼我喜歡新創,隨時都有挑戰、隨時都有機遇,當然,隨時都有風險。
看著自己的努力發揚光大,具體地感受著自己與公司的進步,這種機遇與經歷絕對是人生中很美妙的一筆。
我承認自己應該是比較幸運的那一批,畢竟不是每一個新創都有這樣順風的經歷,我們「剛好」遇到疫情,又「剛好」業務會因為疫情而增長,又「剛好」遇到有足夠眼光的老闆與能力出眾的同事們。
誠如我一直強調的,不是每個人都有相同的機遇,也不是每個人都願意做出這樣的選擇。
適合我的,不一定適合你。所以我不會、也不可能要求每一個人都應該跟我一樣。
這次的面試型式一直是我想嘗試的方向,說是「對既有面試方式的挑戰」或許有點太自負了,但我真的很想要在尊重雙方的前提下設計一個令雙方都能夠滿意的經驗,所以我在能力允許的範圍下提供了很多選擇。
覺得問答題太難?可以,我們來實作。
覺得實作太無聊?可以,我們來架構。
覺得比較習慣其它公司的做法?可以,我們來白板題。
曾經有應徵者很驚訝,為什麼我們提供這麼多選擇。因為我想尊重每一個應徵者的意願與選擇,我覺得如果我加一點點工作量就可以讓應徵者感到他能夠發揮所長,那也算是值得的。
可能是我見識短淺,但我從畢業到現在幾乎都是遇到那種進門先甩你白板題的公司,其中不乏所謂的「一線大廠」,或許這已成為約定俗成的慣例了吧
還有那種事前從不跟你說要考什麼、要帶什麼,然後一進門就說「蛤?你沒帶筆電哦?」的公司;也有那種白板題考得像是要找人腦 compiler 的公司(但面試者連 C 語言的 sizeof 不是函數都不知道)
不可諱言地,他們(有些)的薪水是真的香,但是對一個你進門就知道面試者沒料的公司,我個人是不能接受:畢竟,面試是雙向的。
→ as30385438: 鄉民真的有夠難搞,考leetcode說只會讓刷題仔進 06/04 13:58
→ as30385438: 問這種問題又說太廣太深$$不夠,阿不然要怎麼面才滿意 06/04 13:59
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/04/2023 15:17:02
推 TheWhack: 題目還不錯,但能完整答完每題的 應該值個1.5~1.8m 06/04 15:07
→ t64141: as 大你不能把兩個立場的人放在一起然後說這"一"群人難搞 06/04 15:17
→ t64141: 阿 06/04 15:17
→ t64141: 難道要鄉民只能有一種立場對你來說才不難搞 06/04 15:18
推 gmoz: 你是分享,沒有義務一一說服或解釋 06/04 15:24
→ gmoz: 如果我的同事都是這種個性 我會很累 06/04 15:26
→ gmoz: 我好奇你足不足夠放手讓人去錯誤學習 還是習慣主動手把手教 06/04 15:27
→ gmoz: 直覺很多有潛力待培養的 會被你刷掉,因為不是你定義的人才 06/04 15:27
→ gmoz: 若其他面試官給高分 但在你這邊技術部分不高 會被你擋嗎? 06/04 15:28
→ gmoz: 畢竟每個人學習跟解決的方式不一定 有時候我覺得不好的 06/04 15:29
→ gmoz: 但成效卻出奇的好 06/04 15:29
我承認,以前我是那種會想辦法說服對方用我的方案的那種人 XD
不過年紀大了之後,我比較傾向讓對方放手去試試看,除非我看出有明顯的問題,不然我不太會阻止他。
舉兩個例子:
1. 同事覺得我們可以在 Laravel 上嘗試用 Pest 框架取代 PHPUnit,當時我覺得這個點子不錯所以讓他放手去改,而直到現在我們公司還是大量用 Pest 框架(寫起來比較不囉嗦)
2. 同事用了原生函式取代我實作的 XML Parser,被我阻止了,因為經過測試它的實作會使用兩倍的記憶體與降低處理速度約 20% ~ 30%
2-1. 他還跑來跟我爭說「原生函式一定比較好」。兄弟,benchmark 就擺在那邊了,你覺得我的實驗有問題你自己設計實驗,不然我就只能阻止他的 PR
2-2. 這個重構是他認為我的實作耗費太多記憶體了,在某個極端情況下會 out of memory,然後他的實作在更多的情況下 out of memory(?)
另一方面,我是很願意培養新人的,我找人來最大的目的是為了把自己給 fire XDD。
之前有個新人(Junior)進來後問我該怎麼快速養成實力,我就把他工作時遇到的盲點分析了一次,認為他的基礎知識不夠紮實(因為是非本科轉職,不能怪他)
當時我就推薦他去看一些資料結構跟作業系統的科普(雖然我更推薦讀教科書,但說真的下班後還要去 K 教科書這種事不太現實),以及一些我覺得還不錯的入門書籍。
通常來說,如果有個人來問我問題,我會先確定他要的是「我認為的解答」還是「思考的方向」
- 如果他要解答,我就跟他講我的思路及我認為要這麼做的理由
- 如果他要思考,我就會給他一些可以嘗試的方向或可以去哪裡找資料
- 如果我也不知道,那我會跟他一起找找看,或是請他實驗看看(甚至是自己接過來做實驗 XD)
推 arcticocean: 回答出來的人會有更好待遇的去處,除非他不缺錢 06/04 15:36
※ 編輯: MoMoShota (36.226.34.224 臺灣), 06/04/2023 16:00:11
→ netburst: 說到底就是$$$$$$$$$$$不夠 06/04 16:14
→ MoMoShota: 你選你的,我選我的,道不同不相為謀 06/04 16:26
推 jj0321: 覺得那個噓文 可以檢舉了吧 有攻擊的意味 06/04 16:59