寫在開篇的思路
2020年是多災難的一年,對於我們每個人來說,健康地活著比什麼都重要。受到疫情的影響,很多公司都過得比較艱難,裁員更是普遍,所以對大部分來說保住飯碗就很不錯了,更別說什麼跳槽晉升了。
本文主要分享4個點,可按需來閱讀:
Share1:阿里Java崗面試題Share2:招銀開發三年,我如何積累經驗?Share3:5年開發經驗,如何跳槽阿里?Share4:如何提升阿里社招面試透過率?Share1:阿里Java崗面試題(1)Zookeeper 部分
CAP定理ZAB協議leader選舉演算法和流程(2)Redis 部分
Redis的應用場景Redis支援的資料型別(必考)zset跳錶的資料結構(必考)Redis的資料過期策略(必考)Redis的LRU過期策略的具體實現如何解決Redis快取雪崩,快取穿透問題Redis的持久化機制(必考)Redis的管道pipeline(3)Mysql 部分
事務的基本要素事務隔離級別如何解決事務的併發問題(髒讀,幻讀)?MVCC多版本併發控制?binlog,redolog,undolog都是什麼,起什麼作用?InnoDB的行鎖/表鎖?myisam和innodb的區別,什麼時候選擇myisam?為什麼選擇B+樹作為索引結構?索引B+樹的葉子節點都可以存哪些東西?查詢在什麼時候不走(預期中的)索引?sql如何最佳化?explain是如何解析sql的?order by原理(4)JVM 部分
執行時資料區域(記憶體模型)垃圾回收機制垃圾回收演算法Minor GC和Full GC觸發條件GC中Stop the world各垃圾回收器的特點及區別雙親委派模型JDBC和雙親委派模型關係(5)Java 基礎部分
HashMap和ConcurrentHashMap區別ConcurrentHashMap的資料結構高併發HashMap的環是如何產生的?volatile作用Atomic類如何保證原子性(CAS操作)synchronized和Lock的區別為什麼要使用執行緒池?核心執行緒池ThreadPoolExecutor的引數ThreadPoolExecutor的工作流程如何控制執行緒池執行緒的優先順序執行緒之間如何通訊Boolean佔幾個位元組jdk1.8/jdk1.7都分別新增了哪些特性?Exception和Error(6)Spring 部分
Spring的IOC/AOP的實現動態代理的實現方式Spring如何解決迴圈依賴(三級快取)Spring的後置處理器Spring的@Transactional如何實現的?Spring的事務傳播級別BeanFactory和ApplicationContext的聯絡和區別(7)其他部分
高併發系統的限流如何實現?高併發秒殺系統的設計負載均衡如何設計?Share2:蘇寧開發三年,我如何積累經驗?(1)善於利用碎片時間,學習提升自我
從初級程式設計師升到資深開發,沒有別的捷徑可走,從始至終我都奉信:進步得靠學習,學習得靠時間堆砌。現在網際網路行業基本上都是996趨勢,程式設計師加班情況更為明顯,所以利用碎片時間來學習,才是提升自己最合適的方式。
先算算我個人的學習時間賬(可參考,可借鑑):
每天早上起床後,大概30min(上廁所,吃早餐,通勤等)每天上班時,利用別人划水的時間搜一些技術資料,逛逛技術部落格,約30min。晚上通勤、吃飯(這個階段我一般會休息+娛樂來調整自己狀態,刷刷微博、朋友圈)晚上到家後,不管再累都會抽出1~2個小時來學習,看書+看影片。*這樣計算下來,一天大概平均在2~3小時,一週5天至少10個小時,不包括週末。
(2)解決Bug積累經驗(提升自己最佳化能力)
論壇上流行一種說法:大部分的程式設計師都是透過BUG來積累經驗的,你解決的每一個BUG都是你的經驗。
實際上,這觀點並不在強調BUG的重要性,而是意味著程式設計師可以透過改Bug來提升自己的最佳化能力,但這個“改”就非常關鍵了。
如何“改”?
我在開發過程中,總會遇到大大小小的問題,在遇到問題時,我首先考慮的是憑自己個人的能力去解決,會看一下相關的原始碼,或者Google一下相關的資料或技術部落格。如果問題太大,實在解決不了,就會去請教大佬,不會糾結來糾結去,浪費時間還沒效果,耽誤自己的專案進度。請教大佬也有講究,不是讓他直接幫你解決好問題,而在是建議或思路的基礎上自己去思考。另一層意思則是需要我們主動地去提升自己的最佳化能力了。我在寫程式碼的過程中,會主動地引入面向物件思想和設計模式;會考慮效能最佳化(如何讓sql語句更快,如何讓虛擬機器記憶體效能更好);在“單機版”程式的基礎上問自己,如何搭建叢集?如何利用現有的面向叢集的元件?(比如可以用Eureka搭建服務治理的叢集,在叢集中用Ribbon做負載均衡)最後,技多不壓身,還要學一些redis,訊息中介軟體,JVM調優,MySQL最佳化以及Spring Cloud方面的內容。(3)參與開源專案
其實,在很多面試攻略和分享中,我們都能get到一個資訊:參與過開源專案的面試者往往更吃香,更容易獲得offer。
那麼,為什麼參與過開源專案的程式設計師會更吃香更搶手呢?
大型的開源專案幾乎都是大型團隊構建的,且非常複雜,由此可以推斷出你個人的能力和素質都是過關的;開發開源專案,說明個人的綜合能力得到極大提高,這些能力包括“書面溝通能力”、“瞭解如何挑選和協商要處理的事情”、“完善Git流程/GitLab流程”、“理解語言語法”等等;其他:建立線上聲譽、保持個人的進步的動力等等。(4)提升自己的軟實力,讓自己更專業
按照我個人的理解來說,初級程式設計師更像學生,而高階程式設計師則需要擁有“獨當一面”的能力,而這個過渡是需要時間的,也是我前兩年來努力的方向之一。
提升自己的軟實力,成為更專業的程式設計師:
要學會積極主動溝通;提升自己解決問題(bug)的能力,積累解決問題(bug)的經驗;協調(扯皮)的能力:工作方面積極主動協調部門;學會合作,一起完成一個任務或目標。Share3:5年經驗如何跳槽阿里?Step1:知己知彼(瞭解崗位職責,規劃職業成長路徑)
①崗位職責
求職時,我們往往更注重簡歷,卻忽略了“崗位職責”這個關鍵詞,實際這往往也會影響到我們的面試結果。
俗話說“知己知彼,百戰不殆”,崗位職責非常清晰明確地標註了應該幹什麼,怎麼幹,幹到什麼標準,對於程式設計師來說,技術掌握程度以及之後的開發內容都要了解清楚。
隨便找的公司為例,就更不用說BAT一線大廠了
②成長路徑
在第一次正式工作後,我就非常認真仔細的思考過自己日後的發展方向,實際上程式設計師的成長軌跡(晉升路徑)越早確定越好。程式設計師的方向大致分為技術崗和管理崗,而這兩個方向所看重的能力還是有很大本質區別的。
成長路徑如下:
管理崗:初做者→技術經理→技術總監→副總裁→總裁技術崗:初做者→高階工程師→技術專家→領域專家→領域權威Step2:制定目標(制定明確的、可衡量的、可達到的、有時間限制的目標)
在職場中,一定要制定自己的的目標,這樣才不免被淪為“鹹魚”,想要快速晉升,就得從目標下手,目標需要滿足SMART原則:
具體的(Specific)可以衡量的(Measurable)可以達到的(Attainable)具有相關聯性的(Relevant)有明確的時間截止的(Time-based)簡單來說,我的操作就是將自己的目標進行階段性的拆分,比如我1-3年需要達到一個什麼階段,3-5年要達到什麼階段,然後在這個階段裡繼續進行拆分,樹立一個一個小目標,然後構成一個大目標,總目標,這樣就會容易達到得多了。
Step3:善於思考(培養逆向思維、最佳化思維)
不想機械式的碼程式碼,快速晉升之道首先就要轉變自己的思維,要開始慢慢調整,善於思考一些問題,培養逆向思維和最佳化思維。
所謂的逆向思維,就是要多問自己為什麼?如:
為什麼需要這些資料?為什麼要做這些事?為什麼要做總結?為什麼要做規劃?為什麼要做程式碼稽核?而最佳化思維,則是把事情做得更好,即使是繁瑣雜事,也有最佳化的空間,包括效率和效果,任何事都是有最佳化空間的,缺少的是發現的眼睛。
Share4:如何提升阿里社招面試透過率?(1)準備簡歷
面試是會根據簡歷來進行對你提問的,尤其是對於開發人員來說,看到你的專案經歷後,或多或少都會問相關的問題,甚至一線網際網路公司會針對專案進行提問,所以準備簡歷這一環節就尤為重要。
準備簡歷時,一定要真實,簡歷作假是職場大忌,切記切記。其次,要分清楚“瞭解、熟悉、精通”三詞的區別,對技術棧的掌握程度跟面試題難度密切相關。
(2)儘量找內推
校招容易,社招難。這是一線網際網路的普遍現象,對於應屆生的要求相對來說還是比較寬鬆的,但對於有一定工作年限的人來說,技術要求就比較高了,因此很多中途想要進一線大廠的人都說社招實在太難了,簡歷都過不了。
那其實也是有一些“捷徑”可走的,可以找一些內推機會,相對直接社招來說,機率大大提升了。
(3)對技術要掌握一定的廣度和深度
既然是技術崗,那麼企業對於技術掌握的廣度和深度是有自己相應的要求的,學歷在技術面前都顯得沒那麼重要了,因此努力提升自己的技術水平是程式設計師的首要目標。
那麼,技術要掌握到什麼程度呢?特梳理了一下技術路線,如下圖譜:
對於現在流行的一些技術框架,我又掌握得如何了呢?實際上,我是有一個記錄學習心得,做學習筆記的習慣,所以我對一些技術也有自己的總結和經驗。
Java核心成長筆記:SpringBoot核心技術筆記:SpringMVC開發核心筆記:Spring原始碼深度解析:Redis學習總結(4)面的是什麼部門?面試的時候喜歡問什麼?
在面試前,事先要清楚自己面試的是什麼部門,要做好功課。比如,支付寶、螞蟻金服這類的事業部,專案多與金融相關,淘寶、拼多多則是電商,這些區別也會影響面試的側重點。
至於面試官喜歡問什麼,則需要依靠平時的刷題來積累了,刷刷題,做到舉一反三,對面試還是有很大的幫助的。
寫在文末的箴言讀萬卷書,行萬里路。作為程式設計師,都說職業生涯到35歲就結束了,實際上大可不必相信這種年齡焦慮,35歲上的程式設計師也有不少,要不想被市場淘汰,首先你的有價值,你沒有了價值,無論是什麼職業都被社會淘汰的。
學習,永遠不會辜負你,靠學習得到的,永遠是你最寶貴的財富。