1. 雙非碩士的辛酸求職之旅--第3篇:談談如何準備開發專案的
在上一篇文章《雙非碩士的辛酸求職之旅--談談我是如何同時找到 Java、Python、Go 等開發崗和國企銀行的科技崗位Offer》的最後。
我最終是拿到了一家小公司的實習 offer,畢竟準備得晚,只能認了。
作為老學長,我的建議是 3、4 月的時候最好是要有知名公司的實習,這樣在正式秋招為自己增加很多籌碼。可能其他公司一看你的實習經歷,可能就願意給你機會讓你進面試了,甚至直接免筆試,畢竟大廠 buffer 加持,人家就很想了解你在大公司的實習情況。
如果你也像我一樣小公司實習,甚至說你沒找實習。那也不意味著你沒有了機會,我認為暑假這段時間一定要好好把握,做兩個不錯的專案,然後吃透一個!這裡強調一下是吃透 1 個專案,為什麼呢?
下文再解答...
1.1. 無論我們做什麼專案,在面試官眼裡都可能是 Low 的?
先說一個可能的殘酷現實:無論我們做什麼專案,在面試官眼裡都可能是 Low 的。
你可能會反駁我,如果想。我承認你對...
比如秒殺系統,這幾年都強調高併發的經驗,所以大家都做,那些相關技術棧都快成八股文了,網上相關文章也一堆,你會覺得高大上,但是面試官如果問:
- 你專案上線了嗎?真實情況有人用嗎?沒人用你做成這樣幹嘛?
- 為什麼選 Redis 不選 Memcache?
- 為什麼訊息佇列選 RabbitMQ,不是其他?
- 等等一堆你可能想不到的問題
其他專案就更別說了:部落格系統、線上聊天工具、XX 爬蟲系統、XX 管理系統...
有些讀者可能會問了:我作為一個學生,那我要是能做出微信、頭條、淘寶這樣的專案,我還用得著來這公司上班?下一個祖克伯怕不就是我了?
問的好,其實很多企業級專案歸根結底,本質也是這些專案。那為什麼我們做不太行呢?
總而言之,我說的 "Low" 不是說專案真的不好,而是想表達專案難做。什麼叫難做?
1.2. 做專案不是跟著開原始碼/視訊敲一遍
作為學生,本來大家就不可能做的是企業級專案,所以沒辦法。大家都會選擇一些常見的容易上手的專案來做,這些專案不是不能做,但絕對不會是你跟著開原始碼或者看視訊跟著敲了一遍,就說你做了這個專案。
好好思考一下。你是真的懂背後的原理嗎?比如:
- 你的專案架構是啥,瞭解嗎?(我記得面試的時候好多面試官喜歡問,還有線下讓我畫架構圖)
- 為什麼要做這個專案?問對業務邏輯的認識?
- 專案用的什麼資料庫?問 ORM、MyBatis,或者繼續深挖資料庫的知識點
- 上 Spring 的,問 AOP、IOC;問對 servlet 的理解?
- 上前後端分離的,問如何解決跨域請求?問 session?
- 上高併發的,問如何優化使得併發量有提升?
- 上微服務的,問你微服務怎樣設計?
- 專案出現什麼,就看你會被問什麼?
有時候最怕顧此失彼,為了追最新框架、最新技術,往往忘記了對核心的技術原理的理解。
所以專案難做就在於此,你用舊技術他會覺得 low,你用新技術他會覺得你只是單純的套用,又不是真正的懂。
所以針對這樣的情況,我的看法:雖然事實是我的專案其實做的是有點 low,但是小專案也要展現出它的高大上。
那麼,如何展現出高大上?
1.3. 讓專案的來源上高大上
專案的來源無非幾個:學校;企業(有實習的同學);網上(開源 or 付費)
1.3.1. 學校或企業做的專案
珍惜每一次鍛鍊的機會,用心做好每一次的專案:
- 課程設計/畢業設計中:雖然我是小 demo ,但是我拿到優秀的專案哦(展現拿到優秀的點)
- 比賽專案:ACM、網際網路+、挑戰杯、藍橋杯(我這個專案獲獎了,專家評審認可的;沒獲獎也可以高大上,比沒有好對吧)
- 實習專案:如果這是 BAT 的實習專案呢?(大廠實習雖然可能只是簡單 CRUD,但至少來源就高大上了。)
在 2017 年本科那會,有門課需要做 Java 課程設計,我們大家都做的管理系統,全班只有一個同學做了坦克大戰,然後還可以讓老師體驗玩一下。
你體會一下,如果是你是那門課的老師,你喜歡哪個專案?
1.3.2. 網上學來的、或開源專案達到高大上的效果
如果你覺得學校的課程設計不夠好,免費的專案 GitHub 和 Gitee 上的優秀開源專案很多;付費的牛客和慕課上的針對性專案也挺高大上的。推薦大家學習:
你學了後如何體現你的專案高大上呢?
- 比如你做的專案開源,得到了2k 以上 star ,高大上吧
- 你對某個大牛專案有自己的貢獻,發現了啥 bug 也挺高大上
- 你的專案跟著 mou 前阿里/位元組架構師/工程師學的(這個 title 的付費專案一大堆,跟著學比自己亂寫的的確要高大上吧)
或者大家都是本地專案,你的專案部署上線了,然後面試官可以直接訪問,看到你做的專案;比如你做了小程式的專案,開啟微信就能體驗,哪個專案高大上?
1.3.3. 對專案的思考要多一點,也很高大上
優秀又好做的專案好多人推薦,那麼就有可能大家都做同一個專案(比如秒殺),但是你對專案有自己的思考,就很不一樣的。
如何展示給面試官你的與眾不同?
- 大家都用 Java 做高併發,你來一個 Go 語言版本的。大家都上框架做 Web 開發,你自己寫了一個 MVC 框架, RPC 框架等等。
- 之前還看到一本書中的一個觀點,做一些有工具也很有亮點。比如我們每天在 Linux 中都在用的
cat
命令,你有沒有研究過這個命令的實現演算法,你來做會怎麼做? - 程式碼重構,專案優化也是很多人不會想的點,極少人做那就是高大上
- 其他可以思考的點,大家多去網上找找。
最後,做“高大上”只是我的一個技巧而已,而且只是提供一個思路,希望大家都要好好準備一個專案,讓自己吃透,這一點就足夠高大上了。
1.4. 為什麼我建議你做兩個專案比較好
以我的經歷來說,2020 年 6 月之前,簡歷上只做了 Python 的專案:一個線上教育平臺和一個上線的個人部落格。
所以只能投 Python 的崗位,根本不敢去找其他如 Java 的工作,而且投了也沒有什麼回饋。為什麼呢?
首先,Python 不是一門企業級應用首選的語言,據說是會有一些坑和效能瓶頸,導致用 Python 做後端開發的公司較少。以前用 Python 的公司也都轉 Go 語言了,貌似知乎、位元組都是如此。
其次,Python 更多是作為機器學習和資料分析的首先的語言,讀研期間會使用到的框架基本都和 Python 聯絡密切,所以找演算法和資料崗可能更好一點,所以我拿著 Python 在後端開發方向( Java 和 Go )的簡歷中沒有一點優勢可言。
最後,Python 作為一門簡單的解釋性語言,入門時大多人都會選 Python。隨著學習的深入,個人體會卻是 Python 易學難精,但作為第二語言真的不錯。
所以在 7 月和 8 月份的時候,每天就是惡補 Java 專案。因為感覺再做秒殺系統,我玩不出新花樣了。我選擇了校園微商城專案,而且小程式在那會也不算過時,畢竟時至今日,小程式開發還是很有市場的。
人真的是被逼出來的,如果不逼自己一把,就永遠不知道自己什麼時候可以做好。
1.5. Java 和 Python 雙專案真的讓我受益頗多
正因為有 Java + Python,我可以投網際網路公司,可以投銀行,可以投國企。
我還記得有面試官問我對這兩門語言的看法?
(我在想這不是正中下懷嗎?就等你問了)大概是這樣答得:
- 因為這兩門語言都挺火的,Tiobe 排行都是前幾名,所以我想都學習一下。
- 再者,就像好的工程師知道用更適合的工具擰相應的螺絲。開發也是如此,程式語言也是工具,有優有劣,用不同的語言做更適合它的專案罷了。
- 我本科學的就是 Java 做 Web 開發,Python 是在讀研期間學會的。因為機器學習的課程使用,而且好用的機器學習庫都離不開 Python,這時候更適合我的工具就是 Python 了。後面在這個基礎上接觸了 Python 的 Web 開發框架 Django,由此做了我簡歷上的這個專案。
大概就是這樣,吹水還是要會的。
最後我在秋招中,也不限定只投某個具體的程式語言。憑著 Java + Python 的雙專案拿到了 Java 開發工程師、Python 開發、C++ 遊戲開發、Go 後端開發工程師的 offer...
C++ 開發那個我是說自己本科學過,但是不咋會;Golang 提的也是我正在學;離譜的是也進入了 Erlang 開發的面試,面試官說如果拿到 offer 可以培養的。
所以,這也是為什麼校招中很多公司要求至少一門程式語言但不限於 C/C++、Java、Python、C#、javascript... 的原因吧。
1.6. 總結
關於如何做專案的幾個點終於說完了,也不知道對大家有沒有一點幫助。最後推薦幾個我覺得還不錯的開源專案吧:
1.6.1. 開發專案類
Java 的專案推薦:
Go 的專案推薦:
1.6.2. 知識複習類
如果你還是不知道該做什麼,請參考
下一篇講講如何準備演算法吧,演算法不是我的強項。其實我感覺我對面試的體會還是更多一些,後續也寫文章講講《如何準備面試》
我是宇宙之一粟,熱愛文學和技術,想文理兼修卻還在探索的人。希望看到這裡的同學,點個贊或關注一下,謝謝。