#軟體工程師面試 #文長慎入
面試問題好像一直以來都是一個很多人關切的環節,在各大版上也一直有人會詢問。因為之前有幫公司面試一些人,還有加上從朋友那邊搜刮來的經驗,概括分享一下。
這邊感覺可以分成幾個部分:
1. 面試的題目是否都是演算法相關題目?
2. 是為什麼實際工作內容通常都和面試考的沒有相關?
3. 我現在學的東西對找工作是否有幫助?
4. 公司招募看的到底是這個人的學經歷,能力,個性,還是什麼,為什麼有些人很感覺很厲害卻一直無法拿到offer?
其實用FB排版不太容易,但因為懶得登入部落格,想說快速地打一打,所以也請各位見諒。
#面試的題目是否都是演算法相關題目
如果是投FANG之類的,Facebook Amazon, Neflix, Google (沒記錯應該是這幾間),反正就是這些有名的大廠,除了Netflix目前沒有遇到認識的聊過,其他都是考演算法沒錯。
當然也不只有會考演算法,根據你申請的職缺,可能也會加考一些其他的東西。
那其公司是怎樣呢?其實還是有很多公司會考演算法相關的,尤其是線上面試。
雖然在疫情下全都是線上,但一般來說,還是會有分兩種,一種是沒有真人的狀況下,就是給你像是HackRank這種網站,你點開可能有六十分鐘讓你做兩題。
做完以後你提交,你也不會知道你的分數跟分析結果之類的,看公司怎麼做設定,而且除了演算法相關題目,也可以設定選擇題之類的。
另一種就是真人面試,通常電腦自動面完以後,你可能會跟真人線上面試,真人也是會給你類似所謂的白板題,就是出一個題目讓你現場解題,然後中間可能有的會要你跟他討論,當然看面試官拉!
比較加分的還是,你編寫的時候可以邊闡述自己的想法,而不是低頭默默寫完,這樣也是有點尷尬。如果你編寫邊闡述的話,或者是少有點互動,也是展現你的溝通能力以及你對於題目的掌握能力,就像是你看到一個很簡單的題目 (2+3)*5 之類的,你可以很有自信的說,喔因為2+3在括弧裡面,所以要先算,然後再乘以5,展現底是真的有理解,而不是就是背題目之類的。
有些公司也可能是給你回家作業,叫你做一個小專案之類的,看你應徵的職缺,可能是叫你做一個UI 或者叫你建一個API 也可能叫你做一整個比較完整的東西出來。如果你是面試架構師的話,可能會叫你建一個架構,或設計一個架構出來。
然後也有的公司(像我們公司)就是需要pair programming 所以在線上面試的階段就是會有,真人跟你一起寫程式這樣。
#為什麼實際工作內容通常都和面試考的沒有相關
這個部分一直以來都是一個難解的謎題。像是Google Facebook這種大公司其實不難理解,畢竟他們是比較類似General 的招募,不是一開始就決定好你就是要去某個Team然後永遠讓你待在那個Team。就他們招募的是他們覺得,有潛力的人才,這樣不管需要做什麼都可以自由移動他們,給他們training就可以變得很好用。加上他們一次招募的數量也是相當龐大,考演算法相關的話,可以快速篩選,也更有機會找到他們需要的人才。
因為像是Facebook或Google這種有自己開發框架,開發技術的公司,他們的確有很多時候需要寫演算法或者系統優化的工作。
那像是普通的中小企業或新創,說真的,其實就是跟風。因為覺得人家Google Facebook都是這樣找到優秀人才,那我們也要依樣畫葫蘆,這樣鐵定也能找到厲害的人。
可是這樣找到的人進去以後,發現公司好像也是不知道在幹嘛,最後可能也會待不下去。所以這個部分,近年來也越來越多公司開始改進,開始思考什麼樣的招募流程最適合自己公司。
像是pair programming也開始成為近年來的一個流行的面試,有的公司並不是真的pair 但就是你要跟他們一起工作,了解他們公司的文化,或者跟他們的工程師進行一些深度討論。或者會問你說,假設給你設計一個系統,你要怎麼做之類的。
當然,面試問題跟流程都是每間公司各有不同,不是說你現在準備一種就萬無一失。所以說最好還是盡可能的,提升自己的基礎能力。
如果真的就是打算以FANG為目標的話,就可以從刷題開始,像是Leetcode, Hackrank, codewars之類的都不錯。之前有看到一篇文章,他刷了幾百題,而且每題刷了三次以上,真的很有毅力。刷題的重點就是在於熟練那些題目,可是也不要硬背,你練習是要練那個速度感。可是該理解的還是要理解。
因為你進公司以後,你還是需要使用那些東西來工作,不是只是為了刷題而刷題,而且面試官可能也會考你變形題之類的,或者問你一些記憶體相關的問題,或者是系統設計的問題,或者單純想知道,你是怎麼想出解法的,所以硬背題目跟答案其實也是不太行。
目前我的了解是,大部分中小型企業或者新創,很多時候你學習新東西的能力是比演算法更重要的,尤其是新創你什麼都要會,假設公司是剛起步的新創,你就要變成公司主要的技術專家,什麼東西不太會也要馬上現學現賣,也不要期望公司可能會給你什麼Training 或者有人給你依靠,可能同事還要依靠你。
中型或者普通大型企業,假設公司已經有產品的話,大部分的時候可能是既有產品維護,除非你剛好很幸運地在新產品開發的Team,這樣就有機會學到很多東西,不然維護的話,很多時候只是在了解產品本身是否有Bug,改善code品質之類,也要看公司是否有想花成本在維護上面。如果公司就是打算一個產品,改一點東西就繼續賣錢,那樣好像也不太需要一直去migrate 或者搞新東西上去。
如果你剛好很幸運在獨角獸新創,那你不但可以學到很多東西,還可以用最新科技,可能還有機會遇到大神帶你。
所以說選公司其實也是有點重要,面試的時候,可以問問他們說,那你平常的daily work是怎麼樣的,公司有沒有走敏捷開發,公司有沒有用雲端,公司一個Team的規模之類,以及公司會不會提供訓練。
#我現在學的東西對找工作是否有幫助
其實這個就要看你的未來三年五年十年規劃。
假設你就是都在寫前端,你也覺得我要寫前端寫一輩子,那好像就可以繼續一直focus在前端。如果你擔心自己會丟飯碗,是不是要學點後端,其實也是可以學,可是學了以後,你打算學得多專精?後端的東西也是會一直更新,一直進步。可能Restful API 也可能不是,DB也有好多種DB, 後端語言也很多種,所以你是想要學個大概,還是是希望,後端也問題的時候,自己可以去看code也看得懂?
前一個專案,公司有一個前端,他就是因為自己做的ticket幾乎都會碰到後端,就乾脆把整個後端也寫一寫,就變成fullstack,雖然他主要還是算前端。但也因為是.NET 所以前端跟後端可能沒有太明顯的分界,至少我相信他本來就會寫.NET了,因為幾乎有一半以上的controller都是他寫的。
如果你是寫react SPA,就是跟後端完全分開,你就只要寫到send http request 那邊的話,那好像也不太需要去了解到後端的架構,就是大概知道後端的endpoint 長什麼樣子就好,他們需要提供的文件就是需要提供。
如果說你是怕以後失業,怕公司可能覺得請全端比較划算,那的確還是多學一點好,反正多學也是投資自己。還能順便展現自己的上進心以及學習能力。
以consultancy來說好了,感覺是什麼都要學,像是公司可能就會說,啊最近我們的客人都要求要會什麼什麼,那你就趕快學一下。當然公司也不是很壞心的就叫你要馬上學會,公司最近也是有開始提供一大堆Training 之類的,還給你錢讓你去考一些證照。
目前我使用的語言主要還是Javascript 和 C#這樣,然後公司有希望我可以好好學學Java。其實也不是不會寫Java,如果有發漏我其他文章的話就知道,其實我最一開始學的時候,第一個語言就是Java。
在台大資訊系統訓練班的時候,我就上了Java和PHP的課程,為自己來英國念研究所做準備,一年的master course也都是Java 跟PHP為主,然後有用了一點Python這樣。可是工作以後就只有使用C#和Javascript 而已,所以說,學校學了也不一定會用到。
很多東西都是工作以後才學的,然後Python是平常自己刷題的時候會用,因為覺得不錯用。
其他的話,我覺得雲端相關的東西滿實用的,像是AWS或Azure 或GCP 有機會的話是可以自己摸摸。我自己是滿幸運的在工作上一直都有用到雲端產品,主要是AWS,前一個專案有用Azure 這樣。
DB的話,就是SQL和NoSQL可以個學一個,應該就滿好用的了,目前最流行的應該就是PostgreSQL和MongoDB 。如果對於Graphic Database有興趣也可以稍微看一下像是Neo4J之類的吧!
前端框架的話,就是React, Angular, Vue.js選一個吧!學會一個以後再去學其他的也不難,這三個我是剛好工作上都有用到,我自己是覺得Vue和React應該是比較好上手的,入門門檻比較低,Angular就一定要寫Typescript.
後端框架的話,看你用什麼語言,Java就學spring boot,
C#就是.NET,JS的話應該是Express,Python就Django,PHP就Laravel 。
Mobile的話我沒有寫過也不知道。
如果是平常想要補充知識的話,可以多念一些像是security 相關的東西,或者是Oauth那類的,也可以看一下架構之類的。像是Microservices, microfrontend, Domain Driven Development 這些概念性的東西。
也可以看一些像是Clean Code相關的書,怎樣重構原本的爛Code或者TDD相關的書。
反正前一篇文章就說了,這個職業就是要一直學,活到老學到老,如果打算做到老的話。
#公司招募看的到底是這個人的什麼
其實每個公司應該都不太相同。有的公司就是要招募他們覺得最聰明的人,所以就是一直問你一些很難的東西。或者就是只要找那種名校出來的人,最好有什麼數學物理奧林匹亞的。
有些公司看的是你的個性,符不符合公司文化,或者同事喜不喜歡你之類的。
有些公司就是很缺人,看你能不能馬上上工之類的。能的話就馬上錄取你之類。但通常那個可能是很雷的缺,例如公司找人找很久都找不到,終於看到一線希望。然後為什麼找不到人,可能是薪水開的偏低,或者公司名聲不好,上Glassdoor就可以查看公司的評價。也可能是職缺本身很雷,例如看起來就是個打雜缺。或者是前人都做不久就離開,所以需要一直找人。
有些公司是看你寫的code 例如看你的code乾不乾淨,可能你寫出來的code都很乾淨,設計也很好,思路也很清晰,他們就會錄取你。
有些公司看的是你有沒有某些特定的經驗,例如公司開那個缺剛好就是要找有AWS經驗的人,所以可能就是會錄取他們覺得AWS經驗比較多的人。或者是剛好想找之前有做過Serverless架構的人,或者是有碰過Kubernetes的人,這個時候真的就是靠經驗了。
也有的公司就是,他們也懶得找人,HR給他們面試的第一個人就會錄取,這個完全靠運氣。這件事情真的發生在我第一間公司的另外一個Team,主管非常不喜歡面試人,也覺得我工作都沒時間還要面試。所以就是隨便問問之類的,然後就跟HR說好。
--------------------------------------
以上就是我目前經歷過以及別人分享給我的經驗。我覺得面試的話,運氣真的也是佔滿大的比例,尤其是遇到像第一間公司那種狀況的。
當然年輕的時候可能會比較急躁,也很擔心自己找不到工作,考量到的還有金錢跟公司名聲,所以學不學得到東西也可能是其次。
選offer的時候,也可能就是可以分析一下,自己想要的到底是什麼,是金錢,是做得開心,還是想要可以做的久(這個也要看公司可以活多久),除了看Glassdoor也可以上網看一下公司財報。
最近的疫情衝擊下,有很多新創或中小企業也開始裁員跟減薪,所以公司平常的財務狀況和經營方針也是很重要的。即使公司可能一直都有收入,也可能因為現金管理問題,導致沒有足夠現金需要裁員。
「laravel書」的推薦目錄:
- 關於laravel書 在 小吃貨的英國生活日記 Facebook 的最讚貼文
- 關於laravel書 在 91 敏捷開發之路 Facebook 的精選貼文
- 關於laravel書 在 Y道理 Facebook 的最讚貼文
- 關於laravel書 在 [閒聊] 新手學PHP 不要從Laravel 開始 的評價
- 關於laravel書 在 laravel 8書的推薦與評價,PTT和網紅們這樣回答 的評價
- 關於laravel書 在 好書推薦- Laravel與其他的PHP... | Facebook 的評價
- 關於laravel書 在 Laravel 5 for beginner 新手道場:優雅運用框架快速開發PHP ... 的評價
- 關於laravel書 在 使用Laravel 8 PHP主流框架打造RESTful API(iT邦 ... - YouTube 的評價
- 關於laravel書 在 [請益] 新手學習laravel推薦書籍or線上- 看板PHP | PTT數位生活區 的評價
laravel書 在 91 敏捷開發之路 Facebook 的精選貼文
使用者見證,還是最真實的 ❤️
#專業點火師
自己已經很久沒有因為練習寫程式寫到有點 "忘我" 而熬夜這種事了(平時寫程式可能2,3個小時就想睡了這樣),因此想分享這一陣子在 91 敏捷開發之路 極速開發 和 單元測試實戰 的上課緣由和心得。
印象中,起初接觸 Joey Chen 91哥 課程資訊的緣由是去年 #LaraDebut 的 PHPUnit 入門教學, 講者是 Winnie Lin,教學結束後上去請教了幾個問題,她 和 Duncan Huang 顏永富 (Yen YungFu)幾個PHP社群的前輩 都介紹了 91哥 的課程 極速開發、單元測試等課程,當下覺得很心動,於是後來陸續報名 91哥 的課程 重構與TDD,再來是最近的極速開發、單元測試實戰等課程。
每次課後收穫都出乎意料的多,若要分享各堂課的心得唯恐自己吸收不夠好,很難把課程精華介紹的鉅細靡遺,所以這篇只分享 極速開發 的心得,上完後的感觸是:從沒想過可以這樣用 IDE 和 Vim 寫程式,Tennis Kata 剛開始至少得花一小時以上完成,經過這幾天練習後已經能濃縮到14分鐘內,這幾個課程還有個很好的優點在於,不論是寫 PHP、Java、C#、js、哪一種語言都有範例,這些技巧和觀念都適用。
特別想提的是,在這些"具體"的技巧之外,覺得最有收穫的反而是"抽象"的心法,課程所分享的思考脈絡對我而言才是這堂課程背後收穫最大的,"刻意練習"這四個字已經不只1次2次聽到 91哥 提到,畢業後從事程式開發2年多,從沒想過要把自己寫程式的過程"錄下來"看這種事,從開始觀察自己平常開發的壞習慣和步驟,針對這些部分不斷思考調整,再透過刻意練習來訓練自己,直到能夠不加思索的做出反應,這樣持續的觀察->調整->練習 所帶來的提升特別有感,為此在課程結束後還跑去買了 刻意練習 這本書。
感謝 91哥的 傾囊相授,91哥 的課程不便宜,對我來說還是很非常值得,這篇心得也算是分享給有興趣還在觀望的人可以參考看看。
另外想感謝的是總是無私的分享很多很好資訊的 PHP/Laravel 團隊們,謝謝你們,謝謝。
laravel書 在 Y道理 Facebook 的最讚貼文
/ Y講堂 #02 先趨討論 / 看圖片找線索的小技巧
#早鳥票要結束囉 #有報名的下週見
#但我現場不會講這類太抽象的看展技術啦
.
前幾天在跟朋友談「看照片」。我拿出了一堆「教你讀畫」的書,然後跟朋友聊看畫(or 照片) 有哪些細節能注意,並進而成為分析的參考依據。
.
我的工作有一部份就在做這種事。我必需看懂圖片、影片背後的明喻或者隱喻,瞭解企業或者特定事件背後想要幹什麼。要試著從圖片資訊裡的架構 (或者沒有架構),去讀出背後的資訊、高人操盤的企圖 ... (如:如果一家公司的佈局很差,就可以直接推論這家公司沒有高人操盤啊 ...)
.
請你先放下「陰謀論」這種論調。調整成,由於圖片或影片資訊是缺乏文字或語言論述的,所以他的畫面構成或運鏡非常重要,必需讓讀者在不知不覺間接受畫面想講的重點。拍照達人常會問說:「你的畫面想要表達什麼重點?」
.
我們只要延著這個脈絡去思考,「高手的佈局都是有意義的」,經常會得到很多有價值的資料。
.
為什麼我會介紹《這幅畫》這本書?他想跟你說的事情是,某些西洋各時代的油畫,畫裡都有一個歷史、聖經或什麼的故事背景;又或者有一些時代的象徵物,你要看懂才能理解畫面裡的人的關係、身份、行為 ... 等。
.
用這種技巧去理解圖畫或影片,其實你常常能夠抓住很多可以觀察的點。當然:這些資訊需要被有基礎的驗證,才能拿出來使用喔!否則充其量就只是一個腦洞大開的推論及假設喔!
--
#Y講堂02
https://laravel-dojo.kktix.cc/events/xytalk02
laravel書 在 好書推薦- Laravel與其他的PHP... | Facebook 的美食出口停車場
Laravel 與其他的PHP web框架有什麼不同?對初學者來說,不同之處在於它的速度與簡單程度。這個快速的應用程式開發框架及其廣泛的工具系統,可讓你快速地使用簡潔、易讀 ... ... <看更多>
laravel書 在 Laravel 5 for beginner 新手道場:優雅運用框架快速開發PHP ... 的美食出口停車場
Apr 1, 2019 - 在Kobo 閱讀洪可郡(KeJyun) 的《Laravel 5 for beginner 新手道場:優雅運用框架快速開發PHP 網站》。○適用最新版的Laravel 5。 ... <看更多>
laravel書 在 [閒聊] 新手學PHP 不要從Laravel 開始 的美食出口停車場
這是前天晚上在 LaravelConf 跟人聊到的,不熟寫程式的人應該怎麼學 PHP 網站開發
重新整理一下貼上來
這年頭的高大上 PHP 網站開發其實要掌握的技能相當多
- 會用 composer
- 搞懂 MVC
- 搞懂 autoloading,或至少知道 autoloading
- 有能力寫物件導向程式
- 要會資料庫
- 要會 html/css/js[B
- 要搞定 web server
- 最重要的,會寫 PHP
這些項目每一個對於白紙等級的新手來說都是一堵高牆
尤其是,整份 PHP 現代工程都是疊在 OOP 上面,這並不是大部分新手三個月就能掌握的東西
如果直接叫白紙新手從 Laravel framework 開始,那等於是把小學生丟去打天下第一武道會
就算形式學起來了,那也只是不明就裡
從這個角度來說,我認為那些古代 PHP 寫法可能更適合純粹新手上手
在學習 OOP 之前,先讓他學會
<h1>你好,<?=$_GET['name']?></h1>
從這邊開始,漸漸長出一堆麵條一般交疊的 html 跟 php 之後
再讓他看到邏輯跟 html 可以分開
<?php
$name = isset($_GET['name']) ? $_GET['name'] : "無名氏";
// 三百行邏輯
?>
<h1>你好,<?=$name?></h1>
<!-- 三百行 html -->
這樣新手不但能看懂你教了什麼,又能在一瞬間理解「邏輯跟呈現分開很重要」
等到這種等級熟悉了,然後可以開始專心教 namespace/autoloading/class 這些東西
或是帶入 template engine
更甚至, PHP 在 cli 上面也是充分好用的工具
撇開網頁不管,PHP 就是個 scripting language
所以我在想,甚至根本可以(甚至是應該)把「網頁」跟「PHP」分開來教
印星星也好,印聖誕樹也好,掌握寫程式跟掌握網站開發那一大包根本可以分開處理。
沒有必要綁架起來放在一起。
人家怎麼學 python,就教新手怎麼學 PHP
這年頭一堆人推崇 python 寫工具管系統做爬蟲,但是有什麼是 python 能做 PHP 卻不能做的嗎?
沒有,我照樣可以用 PHP 爬 Log 寫 git hook 甚至寫爬蟲抓檔案
新版 PHP 的效能還比 python 好(雖然這通常不重要,通常)
而且比起 python,PHP 有個壓倒性的好處
PHP 有大括號
--
不可以!那是黑鷹族的精神象徵!
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 60.248.122.205
※ 文章網址: https://www.ptt.cc/bbs/PHP/M.1499060668.A.A32.html
- array 系列 function 不查文件永遠不知道誰該在前面誰該在後面。
- 對於多 byte 字串的支援要另外處理
(不能用str*要用mb*,非英文使用者表示靠北)
- 一般來說依照 namespace 自動載入檔案是語言特性,Java 如此 python 如此
只有 PHP 還得自己寫。大家用 composer 有很大一部分是因為不用自己寫
符合規範的 autoloader...
- 自動轉型就是會給你驚喜(這點 js 也差不多)
而且有時候不需要用到兩個等號,而是放進 function 參數就會出事
- PHP 對於 namespace 下的 function 沒有好的自動載入方案
- 非同步/多 Process 寫起來是一屁股痛,fork是相當原始粗暴的做法
自幹 fork 沒寫出 fork bomb 把系統弄爛者,幾稀矣。
- PHP 自己就是個 template engine [by Rasmus],但是為了讓 code 乾淨好讀
你通常會想引入寫在 template engine 裡面的 template engine,簡直是夢中夢...
- 上面有幾點很可能為了相容性而永遠不會修掉。
好吧我對 PHP 的愛可能有點太多,寫不到五百字...
但就算問題這麼多,他能做的事情並不比 python 與 ruby 少
有好好規劃的話 code 也不會難看到哪裡。
大家還在用 python 說穿了就是因為 Google 喜歡 python 的人很多...
光 Tensorflow 就不知道增加了多少 python 使用者
PHP 因為 Facebook 力挺(雖然不知道還有幾年),所以也還不會太糟
Ruby 後面沒有大公司撐腰,只能凋零了。
另,雖然我常常靠北 Python,但我其實也不覺得 python 比 PHP 差(當然的)
我只是覺得 PHP 有了 composer 跟 phar 之後這明明可以跟 python 平起平坐...
其實看板上的文章有時候也會這種感覺。明顯看起來就是不太會寫程式的新人
拿著(有點老的)書上的範例來問,然後換來「千萬不要這樣寫」的回答
作為工作,我舉雙手贊同。
但是作為學習,我總覺得那些「應該這樣寫」的東西新人吃得下去也是很厲害
更何況 Personal Home Page 工具包(笑)一開始根本不是個語言
但有就算很多缺點,他還是可以做出 Facebook、KKBOX、或 Gameboy 模擬器。
很多缺點跟他不好用根本是兩個獨立命題
我覺得一樣的意思
這年頭不分 class 不用 namespace 不太容易寫出能維護的 code
不是做不到,但能做到的不多而且一定是老手
但是 class / namespace 這是否是好的新手村任務,我懷疑。
我認為這至少是新手村畢業任務甚至是一轉任務之類的...
※ 編輯: GALINE (60.248.122.205), 07/04/2017 13:55:56
... <看更多>