天天看點

每日 CRUD?兩年滴滴和入職頭條的後端開發經驗分享!共勉!

點選上方“Java精選”,選擇“設為星标”

别問别人為什麼,多問自己憑什麼!

下方留言必回,有問必答!

每天 08:00 更新文章,每天進步一點點...

先簡單交代一下背景吧,某不知名985的本碩,17年畢業加入滴滴,當時找工作時候也是在牛客這裡跟大家一起奮戰的。

今年下半年(2019年)跳槽到了頭條,一直從事後端研發相關的工作。之前沒有實習經曆,算是兩年半的工作經驗吧。

這兩年半之間完成了一次晉升,換了一家公司,有過開心滿足的時光,也有過迷茫掙紮的日子,不過還算順利地從一隻職場小菜鳥轉變為了一名資深劃水員。

在這個過程中,總結出了一些還算實用的劃水經驗,有些是自己領悟到的,有些是跟别人交流學到的,在這裡跟大家分享一下。

學會深入思考,總結沉澱

我想說的第一條就是要學會深入思考,總結沉澱,這是我覺得最重要也是最有意義的一件事。

先來說深入思考。在程式員這個圈子裡,常能聽到一些言論:我這個工作一點技術含量都沒有,每天就CRUD,再寫寫if-else,這TM能讓我學到什麼東西?抛開一部分調侃和戲谑的論調不談,這可能确實是一部分同學的真實想法,至少曾經的我,就這麼認為過。後來随着工作經驗的積累,加上和一些高level的同學交流探讨之後,我發現這個想法其實是非常錯誤的。之是以出現沒什麼可學的這樣的看法,基本上是思維懶惰的結果。任何一件看起來很不起眼的小事,隻要進行深入思考,稍微縱向挖深或者橫向拓寬一下,都是足以讓人沉溺的知識海洋。

舉一個例子。某次有個同學跟我說,這周有個服務OOM了,查了一周發現有個地方defer寫的有問題,改了幾行代碼上線修複了,周報都沒法寫。可能大家也遇到過這樣的場景,還算是有一定的代表性。其實就查bug這件事來說,是一個發現問題,排查問題,解決問題的過程,包含了觸發、定位、複現、根因、修複、複盤等諸多步驟,花了一周來做這件事,一定有不斷嘗試與糾錯的過程,這裡面其實就有很多思考的空間。比如說定位,如何縮小範圍的?走了哪些彎路?用了哪些分析工具?比如說根因,可以研究的點起碼有linux的OOM,k8s的OOM,go的記憶體管理,defer機制,函數閉包的原理等等。如果這些真的都不涉及,仍然花了一周時間做這件事,那複盤應該會有很多思考,提出來幾十個WHY沒問題吧...

再來說下總結沉澱。這個我覺得也是大多數程式員比較欠缺的地方,隻顧埋頭幹活,可以把一件事做的很好。但是幾乎從來不做抽象總結,以至于工作好幾年了,所掌握的知識還是零星的幾點,不成體系,不僅容易遺忘,而且造成自己視野比較窄,看問題比較局限。适時地做一些總結沉澱是很重要的,這是一個從術到道的過程,會讓自己看問題的角度更廣,層次更高。遇到同類型的問題,可以按照總結好的方法論,系統化、階層化地推進和解決。

還是舉一個例子。做背景服務,今天優化了1G記憶體,明天優化了50%的讀寫耗時,是不是可以做一下性能優化的總結?比如說在應用層,可以管理服務對接的應用方,梳理他們通路的合理性;在架構層,可以做緩存、預處理、讀寫分離、異步、并行等等;在代碼層,可以做的事情更多了,資源池化、對象複用、無鎖化設計、大key拆分、延遲處理、編碼壓縮、gc調優還有各種語言相關的高性能實踐...等下次再遇到需要性能優化的場景,一整套思路立馬就能套用過來了,剩下的就是工具和實操的事兒了。

還有的同學說了,我就每天跟PM撕撕逼,做做需求,也不做性能優化啊。先不讨論是否可以搞性能優化,單就做業務需求來講,也有可以總結的地方。比如說,如何做系統建設?系統核心能力,系統邊界,系統瓶頸,服務分層拆分,服務治理這些問題有思考過嗎?每天跟PM讨論需求,那作為技術同學該如何培養産品思維,引導産品走向,如何做到架構先行于業務,這些問題也是可以思考和總結的吧。就想一下,連接配接手維護别人爛代碼這種蛋疼的事情,都能讓Martin Fowler整出來一套重構理論,還顯得那麼高大上,我們确實也沒啥必要對自己的工作妄自菲薄...

是以說學習和成長是一個自驅的過程,如果覺得沒什麼可學的,大機率并不是真的沒什麼可學的,而是因為自己太懶了,不僅是行動上太懶了,思維上也太懶了。

可以多寫技術文章,多分享,強迫自己去思考和總結,畢竟如果文章深度不夠,大家也不好意思公開分享。

積極學習,保持技術熱情

最近兩年在網際網路圈裡廣泛傳播的一種焦慮論叫做35歲程式員現象,大意是說程式員這個行業幹到35歲就基本等着被裁員了。不可否認,網際網路行業在這一點上确實不如公務員等體制内職業。但是這個問題裡35歲程式員并不是絕對生理意義上的35歲,應該是指那些工作十幾年和工作兩三年沒什麼太大差別的程式員。後面的工作基本是在吃老本,沒有主動學習與充電,35歲和25歲差不多,而且沒有了25歲時對學習成長的渴望,反而添了家庭生活的諸多瑣事,薪資要求往往也較高,在企業看來這确實是沒什麼競争力。

而如果我們積極學習,保持技術能力、知識儲備與工作年限成正比,這到了35歲哪還有什麼焦慮呢,這樣的大牛我覺得應該也是各大公司搶着要吧?但是學習這件事,其實是一個反人類的過程,這就需要我們強迫自己跳出自己的安逸區,主動學習,保持技術熱情。在滴滴時有一句話大概是,主動跳出自己的舒适區,感到掙紮與壓力的時候,往往是黎明前的黑暗,那才是成長最快的時候。相反如果感覺自己每天都過得很安逸,工作隻是在混時長,那可能真的是溫水煮青蛙了。

剛畢業的這段時間,往往空閑時間還比較多,正是努力學習技術的好時候。借助這段時間夯實基礎,培養出良好的學習習慣,保持積極的學習态度,應該是受益終身的。至于如何高效率學習,網上有很多大牛寫這樣的文章,到了公司後内網也能找到很多這樣的分享,我就不多談了。

可以加入學習小組和技術社群,公司内和公司外的都可以,關注前沿技術。

主動承擔,及時交流回報

前兩條還是從個人的角度出發來說的,希望大家可以提升個人能力,保持核心競争力,但從公司角度來講,公司招聘員工入職,最重要的是讓員工創造出業務價值,為公司服務。雖然對于校招生一般都會有一定的培養體系,但實際上公司确實沒有幫助我們成長的義務。而在能為公司辦成事,創造價值這一點上,我覺得最重要的兩個字就是主動,主動承擔任務,主動溝通交流,主動推動項目進展,主動協調資源,主動向上回報,主動創造影響力等等。我當初剛入職的時候,基本就是leader給配置設定什麼任務就把本職工作做好,然後就幹自己的事了,幾乎從來不主動去跟别人交流或者主動去思考些能幫助項目發展的點子。自以為把本職工作保質保量完成就行了,後來發現這麼做其實是非常不夠的,這隻是最基本的要求。而有些同學的做法則是leader隻需要同步一下最近要做什麼方向,下面的一系列事情基本不需要leader操心了 ,這樣的同學我是leader我也喜歡啊。入職後經常會聽到的一個詞叫owner意識,大概就是這個意思吧。

在這個過程中,另外很重要的一點就是及時向上溝通回報。項目進展不順利,遇到什麼問題,及時跟leader同步,技術方案拿捏不準可以跟leader探讨,一些資源協調不了可以找leader幫忙,不要有太多顧忌,認為這些會太麻煩,leader其實就是幹這個事的。。如果項目進展比較順利,确實也不需要leader介入,那也需要及時把項目的進度,取得的收益及時回報,自己有什麼想法也提出來探讨,問問leader對目前進展的建議,還有哪些地方需要改進,消除資訊誤差。做這些事一方面是合理利用leader的各種資源,另一方面也可以讓leader了解到自己的工作量,對項目整體有所把控,畢竟leader也有leader,也是要彙報的。可能算是大家比較反感的向上管理吧,有内味了,這個其實我也做得不好。但是最基本的一點,不要接了一個任務悶着頭幹活甚至與世隔絕了,一個月了也沒跟leader同步過,想着憋個大招之類的,那基本涼涼。

一定要主動,可以先從強迫自己在各種公開場合發言開始,有問題或想法及時one-one

除了以上幾點,還有一些小點我覺得也是比較重要的,列在下面

第一件事建立信任

無論是校招還是社招,剛入職的第一件事是非常重要的,直接決定了leader和同僚對自己的第一印象。入職後要做的第一件事一定要做好,最起碼的要順利完成而且不能出線上事故。這件事的目的就是為了建立信任,讓團隊覺得自己起碼是靠譜的。如果這件事做得比較好,後面一路都會比較順利。如果這件事就搞雜了,可能有的leader還會給第二次機會,再搞不好,後面就很難了,這一條對于社招來說更為重要。

而剛入職,公司技術棧不熟練,業務繁雜很難理清什麼頭緒,壓力确實比較大。這時候一方面需要自己投入更多的精力,另一方面要多跟組内的同學交流,不懂就問。最有效率的學習方式,我覺得不是什麼看書啊學習視訊啊,而是直接去找對應的人聊,讓别人講一遍自己基本就全懂了,這效率比看文檔看代碼快多了,不僅省去了過濾無用資訊的過程,還了解到了業務的演變曆史。當然,這需要一定的溝通技巧,畢竟同僚們也都很忙。

臉皮要厚一點,多找人聊,快速融入,最忌諱有問題也不說,自己把自己孤立起來。

超出預期

超出預期這個詞的外延範圍很廣,比如leader讓去做個值周,解答使用者群裡大家的問題,結果不僅解答了大家的問題,還收集了這些問題進行分類,進而做了一個智能問答機器人解放了值周的人力,這可以算超出預期。比如leader讓給營運做一個小工具,結果建設了一系列的工具甚至發展成了一個平台,成為了一個完整的項目,這也算超出預期。超出預期要求我們有把事情做大的能力,也就是想到了leader沒想到的地方,并且創造了實際價值,拿到了業務收益。這個能力其實也比較重要,在工作中發現,有的人能把一個小盤子越做越大,而有的人恰好反之,那麼那些有創新能力,經常超出預期的同學發展空間顯然就更大一點。

這塊其實比較看個人能力,暫時沒想到什麼太好的捷徑,多想一步吧。

體系化思考,系統化建設

這句話是晉升時候總結出來的,大意就是做系統建設要有全局視野,不要局限于某一個小點,應該有良好的規劃能力和清晰的演進藍圖。比如,今天加了一個監控,明天加一個報警,這些事不應該成為一個個孤島,而是屬于穩定性建設一期其中的一小步。這一期穩定性建設要做的工作是報警配置和監控梳理,包括機器監控、系統監控、業務監控、資料監控等,預期能拿到XXX的收益。這個工作還有後續的roadmap,穩定性建設二期要做容量規劃,接入壓測,三期要做降級演練,多活容災,四期要做...給人的感覺就是這個人思考非常全面,辦事有體系有規劃。

平時積極總結沉澱,多跟别人交流,形成方法論。

提升自己的軟素質能力

這裡的軟素質能力其實想說的就是PPT、溝通、表達、時間管理、設計、文檔等方面的能力。說實話,我覺得我當時能晉升就是因為PPT做的好了一點...可能大家平時對這些能力都不怎麼關注,以前我也不重視,覺得比較簡單,用時候直接上就行了,但事實可能并不像想象得那樣簡單。比如晉升時候PPT+演講+答辯這個工作,其實有很多細節的思考在裡面,内容如何選取,排版怎麼設計,怎樣引導聽衆的情緒,如何回答評委的問題等等。晉升時候我見過很多同學PPT内容編排雜亂無章,演講過程也不流暢自然,雖然确實做了很多實際工作,但在表達上欠缺了很多,屬于會做不會說,如果再遇到不了解實際情況的外部門評委,吃虧是可以預見的。

公司内網一般都會有一些軟素質教育訓練課程,可以找一些場合刻意訓練。微信搜尋小程式Java精選面試題,内涵非技術面試題,說白了就是針對面試官面試非技術問題的時候的回答,其他也含有大量技術面試題,沒事地鐵或回家路上看看都很友善。

以上都是這些分享還都算比較偉光正,但是社會吧也不全是那麼美好的。。下面這些内容有負能量傾向,三觀特别正的同學以及觀感不适者建議跳過。

拍馬屁是真的香

拍馬屁這東西入職前我是很反感的,我最初想加入網際網路公司的原因就是覺得網際網路公司的人情世故沒那麼多,事實證明,我錯了...入職前幾天,部門群裡大leader發了一條消息,後面幾十條帶着大拇指的消息立馬跟上,學習了,點贊,真不錯,優秀,那場面,說是紅旗招展鑼鼓喧天鞭炮齊鳴一點也不過分。除了驚歎大家超強的資訊接收能力和處理速度外,更進一步我還發現,連拍馬屁都是有隊形的,一級部門leader發消息,幾個二級部門leader跟上,後面各組長跟上,最後是大家的狂歡,讓我一度懷疑拍馬屁的速度就決定了職業生涯的發展前景(沒錯,現在我已經不懷疑了)。

坦誠地說,我到現在也沒習慣在群裡拍馬屁,但也不反感了,可以說把這個事當成一樂了。倒不是說我沒有那個口才和能力(事實上也不需要什麼口才,大家都簡單直接),在某些場合,為活躍氣氛的需要,我也能小嘴兒抹了蜜,甚至能把古詩文彩虹屁給leader安排上。而是我發現我的直屬leader也不怎麼在群裡拍馬屁,是以我表面上不公開拍馬屁其實屬于暗地裡事實上迎合了leader的喜好...

但是拍馬屁這個事隻要掌握好度,整體來說還是香的,最多是沒用,至少不會有什麼壞處嘛。大家能力都差不多,每一次在群裡拍馬屁的機會就是一次露臉的機會,按某個同僚的說法,這就叫打造個人技術影響力...

想舔就舔,不想舔也沒必要酸别人,Respect Greatness。

永不缺席的撕逼甩鍋實戰 ‌ 有人的地方,就有江湖。雖然搞技術的大多城府也不深,但撕逼甩鍋邀功搶活這些鬧心的事兒基本也不會缺席,甚至我還見到過公開群發郵件撕逼的...這部分話題涉及到一些敏感資訊就不多說了,而且我們低職級的遇到這些事兒的機會也不會太多。隻是給大家提個醒,在工作的時候遲早都會吃到這方面的瓜,到時候留個心眼。

稍微注意一下,咱不會去欺負别人,但也不能輕易讓别人給欺負了。

不要被畫餅蒙蔽了雙眼

說實話,我個人是比較反感灌雞湯、打雞血、談夢想、講奮鬥這一類行為的,9102年都快過完了,這一套*** 治還在大行其道,真不知道是該可笑還是可悲。當然,這些詞本身并沒有什麼問題,但是這些東西應該是自驅的,而不應該成為外界的一種強push。『我必須努力奮鬥』這個句式我覺得是正常的,但是『你必須努力奮鬥』這種話多少感覺有點詭異,努力奮鬥是以讓公司的股東們發家緻富?尤其在錢沒給夠的情況下,這些行為無異于耍流氓。我們需要對leader的這些畫餅操作保持清醒的認知,理性分析,作出決策。比如感覺錢沒給夠(或者職級太低,同理)的時候,可能有以下幾種情況:

•leader并沒有注意到你薪資較低這一事實•leader知道這個事實,但是不知道你有多強烈的漲薪需求•leader知道你有漲薪的需求,但他覺得你能力還不夠•eader知道你有漲薪的需求,能力也夠,但是他不想給你漲•leader想給你漲,也向上回報和争取了,但是沒有資源

這時候我們需要做的是向上回報,跟leader溝通确認。如果是1和2,那麼通過溝通可以消除資訊誤差。如果是3,需要分情況讨論。如果是4和5,已經可以考慮撤退了。對于這些事兒,也沒必要抱怨,抱怨解決不了任何問題。我們要做的就是努力提升好個人能力,保持個人競争力,等一個合适的時機,跳槽就完事了。

時刻準備着,技術在手就沒什麼可怕的,哪天幹得不爽了直接跳槽。

學會包裝

這一條說白了就是,要會吹。忘了從哪兒看到的了,能說、會寫、善做是對職場人的三大要求。能說是很重要的,能說才能要來項目,拉來資源,招來人。同樣一件事,不同的人能說出來完全不一樣的效果。比如我做了個小工具上線了,我就隻能說出來基本事實,而讓leader描述一下,這就成了,打造了XXX的工具抓手,改進了XXX的完整生态,形成了XXX的業務閉環。老哥,我服了,硬币全給你還不行嘛。據我的觀察,每個網際網路公司都有這麼幾個詞,抓手、生态、閉環、拉齊、梳理、疊代、owner意識等等等等,我們需要做的就是熟讀并背誦全文,啊不,是牢記并熟練使用。如果面試題掌握的并不牢靠的話,建議多看看Java精選公衆号,回複Java面試,最新最全面試題,内涵近3000道國中進階面試題,支援線上刷題。

這是對事情的包裝,對人的包裝也是一樣的,尤其是在晉升和面試這樣的應試型場合,特點是流程短一錘子買賣,包裝顯得尤為重要。晉升和面試這裡就不展開說了,這裡面的道和術太多了。。下面的場景提煉自面試過程中和某公司面試官的談話,大家可以感受一下:

我們背後是一個四五百億美金的市場...

我負責過每天千億級别通路量的系統...

工作兩年能達到這個程度挺不錯的...

貴司技術氛圍挺好的,業務發展前景也很廣闊...

啊,彼此彼此...

嗯,久仰久仰...

人生如戲,全靠演技。

可以多看leader的PPT,多聽老闆的向上彙報和宣講會。

選擇和努力哪個更重要?

這還用問麼,當然是選擇。在完美的選擇面前,努力顯得一文不值,我有個多年沒聯系的高中同學今年已經在時代廣場敲鐘了...但是這樣的案例太少了,做出完美選擇的随機成本太高,不确定性太大。對于大多數剛畢業的同學,對行業的判斷力還不夠成熟,對自身能力和創業難度把握得也不夠精準,此時拉幾個人去創業,顯得風險太高。我覺得更為穩妥的一條路是,先加入規模稍大一點的公司,找一個好leader,抱好大腿,提升自己的個人能力。好平台加上大腿,再加上個人努力,這個起飛速度已經可以了。等後面積累了一定人脈和資金,深刻了解了市場和需求,對自己有信心了,可以再去考慮創業的事。

本來還想分享一些生活方面的故事,發現已經這麼長了,那就先這樣叭。上面寫的一些總結和建議我自己做的也不是很好,還需要繼續加油,和大家共勉。另外,其中某些觀點,由于個人視角的局限性也不保證是普适和正确的,可能再工作幾年這些觀點也會發生改變,歡迎大家跟我交流~(甩鍋成功)

最後祝大家都能找到心儀的工作,快樂工作,幸福生活,廣闊天地,大有作為。

作者:syntax_error

www.nowcoder.com/discuss/351805

精品資料,超贊福利!

>>Java精選面試題<< - 小程式,3000+ 道面試題線上刷,最新、最全 Java 面試題!

每日 CRUD?兩年滴滴和入職頭條的後端開發經驗分享!共勉!

期往精選  點選标題可跳轉

幹掉 SQL 中的 like,我用 ES 後營運小姐姐們都說好快!

抖音伺服器究竟有多大,為什麼能夠供那麼多人同時刷?

每月 5 号發工資和 25 号發工資,真能看出公司是否靠譜?

JDK 17 正式釋出,Oracle 官宣免費提供!“新版任你發,我用JDK 8”或成曆史?

如何寫出别人無法維護的代碼?走自己的路讓别人無路可走,還不會被“打死”!

分布式事務最經典的 7 種解決方案,一文徹底搞懂!!

螞蟻 4 面和體檢都過了,最後卻因背調挂了導緻無業,網友:沒養個“備胎”?

笑出腹肌的注釋,都是被代碼耽誤的詩人!

想自己搭建個人伺服器,永久運作網站?一個 U 盤就夠了!

文章有幫助的話,在看,轉發吧!