2020年4月,由於公司變動,投了簡歷出來看看機會。這期間面試了好幾家公司,在面試過程中發現了自己的很多不足,這裏總結一下,算是對自己工作四年的一點反思。
關於表達能力
表達能力這一塊,一直知道自己不擅長。但是經過這幾次面試更加認識到,清晰和流暢的表達是非常重要的。在面試中,需要向面試官表達清楚你做的項目;在回答面試官的問題時,也需要有條理的表達。而我這的不足表現在,有時候自己腦子裏是知道一件事的,但是表達的時候,條理和邏輯就不夠清晰,雖然自己知道一個問題的答案,但是自己說完之後,自己能意識到自己剛纔說的亂糟糟的。
關於如何提升表達能力,我認爲還是要平時多溝通。所以我接下來應該多說說話,可以經常加入同事們之間argue一個問題。和產品同事多多交流,產品同事一般來說表達能力還是不錯的。另外,可能溝通還有一些技巧吧,可以找一些書看看,但最重要的還是實踐。
接下來自己要主要注意以下幾個點,針對性的刻意練習:
- 仔細聆聽對方的問題,搞清楚對方想問的是什麼;
- 清晰、流暢、有條理的表達;
- 自己的項目和用到的技術要非常熟悉,自己吃飯的傢伙都不熟悉的話,就甭談什麼清晰表達了;
在下次面試的時候,希望自己的表達能力有較大的進步,不拖面試的後腿。
關於技術
技術這一塊,自己用到的技術自己要熟悉,這是最基本的。此外,最好能熟悉一些相關的技術,比如自己所在的公司消息隊列用的是RabbitMQ,那就要思考一下,爲何選擇RabbitMQ?還有其他哪些消息隊列產品?和RabbitMQ的區別在哪裏?總之,就是在自己用到的技術方面,多思考爲什麼,而這個思考的過程,會帶你去了解相關技術。
此外,要深入學習一些技術,不能停留在表面。這個月面試下來,發覺自己只是什麼技術都會一點,但技術深度很不夠,這是接下來需要重點改進的。
技術的應用場景
另外,就是思考技術的應用場景。比如:
- 多線程,在項目裏哪些地方用到了多線程?
- 分佈式鎖,自己的項目裏哪些地方用到了分佈式鎖?用的什麼方案?會不會帶來哪些問題?
- Java裏的AtomicInteger,項目裏哪些地方用到了?
- ....
對應用場景的思考,會進一步讓你思考爲何選擇該技術。對於工作經驗更豐富的工程師,知道的不應該只是一些技術本身,而是清晰的認識到其應用場景和侷限性。
技術的總結 & 思考
最後,就是對技術的總結,並形成自己的理解。比如:
重構 / 設計模式;
你在項目中也不斷重構過,那麼你對重構有什麼自己的理解嗎?該怎麼去進行重構?
併發
如果系統併發量比較高,該從哪些地方去做優化?這是一個比較大的話題,能反映出一個工程師對系統的整體理解,而不只是知道緩存、消息隊列這些零散的知識點就夠了,需要把這些知識整合起來。
XX 出問題了,如何排查
這些問題看似又空又大,但是能看出來一個工程師對技術的整體有沒有形成自己的理解。此外,當面試官提出這類問題的時候,要意識到他不是在問你某個具體的知識點,而是考察你在項目中有沒有思考和總結,以及對系統的整體把握。這部分問題尤其需要清晰且有邏輯的表達。
關於數據結構和算法
這部分從技術中提出來了,想單獨說說。
其實對於大部分的公司而言,招聘時候考察算法主要還是爲了篩人。所以如果你還在做軟件這個行業,還要換工作,那最好是平時就鞏固一下算法知識。臨時抱佛腳不一定來得及。
個人認爲,算法還是要多練習,三分學習七分練習,就和編程語言差不多。
我第一次接觸C語言,也覺得很難,甚至畢業了也寫不出工程化的代碼,但是只要在公司裏,在實際項目裏用個三五個月,就很熟練了。唯手熟爾。
算法也是,做題的過程就是練習的過程,對我這這樣資質普通的人,看了一兩遍算法書後,寫不出來算法題,是很正常的,不要沮喪,多練習。
總結
希望自己今後能在以上這些方面不斷提升自己,不要只埋着頭學技術、做項目,在關注技術細節的同時,也多從宏觀進行思考。