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. 知識復習類
如果你還是不知道該做什么,請參考
下一篇講講如何准備算法吧,算法不是我的強項。其實我感覺我對面試的體會還是更多一些,后續也寫文章講講《如何准備面試》
我是宇宙之一粟,熱愛文學和技術,想文理兼修卻還在探索的人。希望看到這里的同學,點個贊或關注一下,謝謝。