後端技術討論

這裏有一篇關於後端技術需要學什麼東西的討論。有機會大家去看看吧

 

https://www.zhihu.com/question/26350691

============================以下正文===================================
很榮幸的今年通過了阿里巴巴的實習生招聘!
我把我看過的書羅列一下吧!

  • 《java核心技術:卷一》,這個是我入門java的時候看的,非常適合新手!
  • 《java設計模式》這本書雖然是個外國人寫的,但是感覺不是很好。評價一般。學習設計模式的時候我一般都看大牛的博客。
  • 《深入理解jvm虛擬機》 這本書不用多說,業界非常非常好的一本書!多看幾遍,每一遍都有很多收穫
  • 《深入分析java web 技術內幕》 @君山 山哥,竟然還能@你出來!(不得不說,這本說在各個方面都非常優秀,不愧是偶像寫的書!還求山哥多多照顧。嘿嘿
  • 《Spring技術內幕》在spring源碼講解方面,個人感覺非常不錯。能夠深入理解內部機制,但是需要多看幾遍
  • 《編程之美》業界翹楚,在算法方面終結的非常好,題目也非常有代表性
  • 《劍指offer》不用多說,和上面一樣,可以鍛鍊一些算法能力
  • 《java編程思想》傳說是java行業內的神書,但是目前表示還處於一知半解狀態
  • 《Hadoop技術內幕》這個可以pass掉,學習hadoop的時候看的
  • 《TCP/IP詳解,卷一:協議》可以對tcp有更加深刻的認識
  • 《java網絡編程》,不是很好,將就可以。學學api還是可以的
  • 《大型網站技術架構》 @李智慧 在大型web架構方方面面簡直膜拜,
  • ------------------今天又想起一些------------------------
  • 《分佈式java應用:基礎與實踐》這個是畢玄大大寫的書,非常不錯哦
  • 《how tomcat works》在講解tomcat內部原理方面,個人覺得是非常不錯的書!等級又要上升一個檔次
  • 《java併發編程實戰》對java併發方面,講得還算不錯的書籍
  • 當然還有一些雜七雜八的書(走了不少彎路,你懂的!),我就不列出來了,上訴都是筆者認爲非常不錯的書籍。

最近正在看《算法導論》,和《算法》,md,其實我也想成爲算法狗

當然,上面這些書我表示只懂50%,慚愧。不能完全吸收大牛的精髓啊!

  1. 其他的,數據結構,計算機網絡,操作系統,數據庫都是平時學習的課本,數據庫做項目的時候實踐一下!先學習基礎,在繼續深入
  • 數據結構不用多說,什麼B樹啊、紅黑樹啊、棧、隊列等等,至少保證能夠清楚的說出來,說出他們的原理!具體的應用場景是什麼啊!,當然能寫出來更好(手寫btree會死人,其實還有一個數據結構叫skiplist,逃
  • 算法的話,建議題目多看看算法題目,或者把leetcode上的算法題目刷一遍(目前本人只AC的幾道題,慚愧。知道該資源的時候已經晚了,現在在努力刷刷刷)。另外可以看看july的博客,結構之法 算法之道。目前july已經有自己的網站了,七月問答 ─ 面試·算法·機器學習快速問答平臺 .本人是july的忠實粉絲,在此感謝 @July ,對我在算法方面有很大的幫助,謝謝
  • 數據庫就更多了,索引(結合B+tree,兩個引擎的不同之處,推薦文章:MySQL索引背後的數據結構及算法原理)、存儲過程、引擎、觸發器,事務 @沈詢 實力打廣告,還有沈大大的視頻和博客(http://weibo.com/whisperxd)微博裏面有鏈接哦,ACID等等等等,SQL必須是要熟練的,寫SQL的時候多考慮考慮效率,想想還有沒有其他的語句能完成這個任務,在哪方面提高了,爲何呢?數據庫引擎要了解一下,分佈式數據庫也是,什麼主從分離啊,分庫、分表、分區啊,這些常見的解決方案
  • 操作系統我屬於渣渣,個人就知道一些進程、線程、一些調度算法之類的~~~~(逃
  • 計算機網絡如果是研發崗位得話,TCP/IP這一張需要好好看看,HTTP協議不用多說,常見的狀態碼等等,一次http請求有哪些過程,這個要理解透徹

java:基礎非常重要,當然也要深入理解原理,什麼JVM,JMM,Classloader,還有一些常見類的源碼,自己可以試着分析一遍,現在讓你說出LinkedList的內部實現你能不能說出來,HashMap不用多說了,80%的面試都會問到。還有重要的,多線程,併發,網絡,IO。這些都是要看看看看的!自己多思考!還有樓主說的那些框架,說實話,你要是基礎好了,這些都是能夠學得很快的,很多問題,看一下源碼什麼都就懂了!特別是spring的源碼要好好看看,裏面的架構設計得非常好!各種設計模式滿天飛!
另外,linux要了解一下,至少要回基本命令吧,腳本語言可以學習一個。比如py!前端要了解一下.

關於如何看書:兩個字,思考!三個字,不要臉的思考!…………,書不在多,在於精,選書要慎重!反正題主一本叫做“王者歸來”的書,我看見名字我就不想看!
除了這些然後呢:每天刷幾遍CSDN,平常可以上上oj刷刷題目,國內的牛客網(牛客網-專業IT筆試面試備考平臺,最全求職題庫,全面提升IT編程能力)非常不錯,也可以去leetcode上面把題目刷一遍哦。關注一些好的社區(我一般混跡在CSDN高性能javaweb板塊),睡覺之前看微信公衆號,當然是技術方面的!推送的文章都挺不錯的!
做程序員個人覺得眼界很重要,就算這不是你的領域,但是你也要知道一點,所以經常關注其他的新技術是非常重要的!平常多接觸一點開源技術,多上上github,爭取能在github上面貢獻一點自己的東西!

然後,多看看別人的技術博客。思考自己!
這是我學習路程的經驗和一些資料總結,大家可以看看,鏈接——>技術文字 | 「浮生若夢」可以再評論箱中評論,我會一一回復(下面貼一部分)
我的經驗與分享
關於我的學習方法和麪試經驗的分享

下面是我寫給我現在帶的學弟在學習路線上的一些建議,大家可以參考一下!希望能夠幫助到大家,有寫得不太合適的地方,還請大家指正

一、基礎

  • 主要看《java核心技術:卷一》的重點章節
  • 掌握java常用技術,io、多線程、反射、常用集合框架
  • 數據結構看一遍,作用至少要清楚。如hash衝突解決辦法,常用排序算法的應用場景和空間/時間複雜度等
  • 數據庫,能看懂ER關係,熟悉數據庫三大範式,熟練常用SQL語句
  • 可以掌握一點java網絡編程方面的知識,對tcp/ip有初步的認識
  • 課程不能落下,專業課程(計算機網絡,操作系統,數據結構,數據庫,計算機組成原理)要好好學。不要掛科
  • 學習servlet/jsp,至少能寫簡單的圖書管理系統,熟悉核心api
  • 瞭解前後端交互方式,ajax、json/xml至少知道,會使用jquery,html,css,js最好

二、提高

  • 學習後端框架,SpringMVC/Struts2、Mybatis、Spring,熟悉MVC模式,知道三層架構及每一層之間的關係
  • 會用chrome/firefox瀏覽器分析http請求,解決、定位問題。知道常用http狀態碼,瞭解TCP/IP,知道一次http請求發生了哪些事情
  • 學習設計模式,23種設計模式都需要了解一點,熟悉常用的如:單例,工廠,模板,適配器,代理,責任鏈,構造器,裝飾器,迭代器,策略,命令,觀察者,外觀,享元。理解他們的好處,可以找找在其他框架哪些用了這些設計模式。
  • 可以適當的看一些源碼,Spring的源碼可以着重的看一下。tomcat可以從源碼的角度看看tomcat的整體設計方案,一次請求tomcat如何處理,servlet在tomcat中的加載,編譯過程。tomcat自定義的ClassLoader有什麼作用。
  • 會設計數據庫,多對多,一對多,迭代,會寫複雜的SQL,瞭解SQL調優,會寫存儲過程,觸發器。熟悉索引的使用,瞭解視圖。去了解一些常用NOSQL,比如Redis/mongodb
  • 學習Linux,熟悉基本命令,學習一種腳本語言(shell/python)。會在linux下寫腳本開發

三、深入

  • 算法,可以看看編程之美,算法導論。學習一些算法相關的知識
  • 深入java:理解JVM,JMM,Classloader,GC算法,GC收集器。學會定位OOM問題所在。
  • 源碼分析,常用集合類如:Hashmap,Arraylist,linkedList,HashSet,ConcurrentHashmap等的源碼分析,要非常熟悉java集合框架設計。最好能夠分析一種框架源碼,比如Spring
  • 深入數據庫,理解至少兩種數據庫引擎(Inndb/Mysiam)的差異性,熟悉索引的內部數據結構,熟悉常見的索引方式(Btree,hash),和索引類型(unique,full text,normal),會使用explain分析SQL語句,會優化SQL語句,熟悉一種NOSQL,知道內部實現原理(內部數據結構,在算法優化,內部機制),掌握分佈式數據庫的知識,分表,分庫,分區,分佈式事務等,可以學習一個數據庫中間件(TDDL/COBAR)
  • 架構設計,看看大型高流量/高併發的網站設計(CDN,異步,前端優化),瞭解緩存(分佈式memcached/常用本地緩存),搜索引擎(lucene/solr/elasticSearch),分佈式(負載均衡/分佈式數據庫/分佈式應用集羣),消息隊列(ActiveMQ/Rabbitmq)在大型網站中的作用
  • 還有一些其他的知識,如RPC框架,分佈式服務架構,SOA,REST架構等等
  • 可以接觸一些雲計算方面的知識,如Hadoop/Storm/Spark等,要是再能接觸一點機器學習就更棒啦(反正我是沒有,聽着就嚇人,跑個kmeans算法都要弄死人,(+﹏+)逃

那麼除了看書籍之外還有哪些學習方式呢?下面說說其他的學習方式

  1. 參加開源項目/自己寫點東西放在GITHUB上面,筆者我寫了一個自己的MVC框架(Dreamvc),github地址->Yaccc (Zhaodong Xie) · GitHub.另外可以去fork下其他人的開源項目,如果感興趣就貢獻一下,不感興趣就學習別人的編碼風格,去其糟粕!
  2. 多看看大牛的博客,這裏我列舉一些大牛的博客
  3. 多上一些高質量的網站,下面我列舉一些,每天都最好抽時間去走一遍
  4. 關注一些技術類的微信號(晚上睡覺或者平時雜碎時間看)@Michael282694的知乎|cindy總結的 (๑¯ิε ¯ิ๑),這是原地址

 

 

 

 

---更新在此----

距離發表這個答案到現在, 已經快一個月了.

目前我也只拿到了一家公司的offer, 而且居然是依賴我在學校的online judge網站刷的算法題積累拿到的offer, 想想就覺得這個劇情不可思議, 自己也絕對無法預料到.

實際上寫這篇東西的起因是在微衆銀行二面後等短信等得很焦慮, 於是就決定將當時積累的幾乎所有的經驗都寫下來. 寫完之後就收到了hr面的邀約短信了, 當時開心地直接出宿舍跑了四公里的路, 就像幸福來敲門描述的那種感覺, 然後hr面掛了.

論自己的自信在找工作的過程中如何被消磨殆盡.

看着身邊很多在實習期間就拿到offer然後轉正的同學, 真是羨慕不已.

這幾個月以來, 不斷地學習, 不斷地投簡歷, 不斷地總結, 尤其是在自己身上找各種問題. 這樣子的循環下來, 我變得越來越不自信, 跟面試官們說話都唯唯諾諾的. 找工作本來不應該這麼卑微, 但越來越怕那機會從自己手中溜走. 不被面試官認可, 除了從自己身上找問題以外, 還能怎麼辦呢?

這一個補刀只是想提醒身邊一樣在路上的同仁: 一定要一直保持自信.

想得不可得, 你奈人生何. 願好運降臨給每一個一直努力的人.

--------------------

能收到這麼多贊感覺挺意外的, 粉絲數也從2個漲到了一百來個, 後面乾脆匿名了, 因爲我確確實實不是什麼大神, 只能說是一個普通的還在拼命積累實戰經驗的程序員吧..

發此帖的意圖之一, 是覺得自己在學習過程中踩了很多本不該走的坑. 儘管百度谷歌是好東西, 但有時也會把自己坑到說不出話來.

總之真誠地感謝各位知友的反饋和建議, 此帖會定期更新, 我也會繼續努力達到自己想要的目標

---------------------

針對評論區裏關於列書單的討論, 我還是闡述一下我的觀點吧....

這些書有些本身是需要反覆看的, 有些是屬於工具書(用的時候再去查)....如果我能夠完全讀完並完全理解的話就真的是超級大腦了...我認爲這些書對我有一定的幫助, 質量也不錯, 所以就推薦閱讀了, 也順帶說明了一些讀書的方法之類的, 算是一種分享吧...學校的那些計算機教材也未必把所有章節都要求是考點, 不是嗎?就算忘記了, 或者理解錯了, 起碼有個印象, 知道問題出在哪裏了就去查哪本書, 而不總是把平常遇到的異常信息複製粘貼在百度谷歌上搜索, 也是種能力, 不是嗎?誰百分百能保證百度谷歌搜索到的解決方案是正確的?

此外, 一個人閱讀的過程難免會產生理解上的誤差, 因此我在知乎上纔會去關注大v的回答, 看看人家是怎麼理解的, 再看看自己是怎麼理解的..

讀書對我來說是一種適合我的學習方式, 身邊也有人喜歡泡在牛客網刷題來學習的, 選擇適合自己的就好

 

(今天想了想, 覺得有必要把markdown也添加到基礎上去...做讀書筆記的時候確實很常用啊!!!)

 

近幾個月以來都是在找工作,真心覺得這個過程對我來說很不容易,踩了不少坑,感受也很多。上半年也來過這個帖子看過,從 @謝照東 的答案受益很多,現在是時候寫一些乾貨之類的東西,內容無非是一些書籍、網站、經驗的推薦,算是一種回饋方式吧。

其實我自己水平並不高,可能書看得太多而項目做得相對較少的緣故吧....關於這方面自己也在努力和反思當中。

如果覺得有什麼做得不當的地方務必指出來(比如說引用圖片方面的...話說知乎編輯器不能調字體大小嗎- -),謝謝大家。

(發現不少bug- -罪過罪過,趕緊救急修改中)

以下是原文。



2017年秋招Java後臺的學習與面試經驗

在經歷了這麼多場面試後, 我覺得有以下經驗是可以分享的:

  1. Java後臺開發方向的同學千萬千萬不要把眼光僅僅侷限於三層架構和後臺框架, 而要把目光轉向/分佈式系統/大數據處理/多線程編程/數據庫性能調優/編譯原理等知識, 尤其是分佈式系統,非常重要, 儘管確實有點難以在項目中使用, 但瞭解總比沒了解好(因爲面試可能會問啊, 說多都是眼淚, 真的) 前沿技術那麼多, 趕得上時髦纔是硬道理
  2. 實際上學習後臺開發未必要從Java開始, 使用python或者NodeJs感覺入門更快一些(腳本語言拘束較少), Java入門web開發相對而言很重量級...但是自從有了spring boot後其實感覺沒差, 或者學後臺開發從spring boot開始也是可以的, 未必從坑死無數人的SSH(Struts2, Spring, Hibernate)下手
  3. 後悔9月初懶得刷筆試題, 其實刷筆試題是能對掌握計算機基礎知識有很大的幫助. 勿走前車之鑑, 我9月份投的所有企業只有網易是過了筆試的..
  4. 在線編程題請鎖定leetcode或者lintcode(lintcode有時候需要翻牆, 不過好處是題目是中文版)
  5. 對簡歷上的每一個字負責, 而且最好簡潔明朗, 拒絕囉嗦, 讓面試官的所有問題都針對你的簡歷進行提問, 否則他要是用多年的工作經驗碾壓你就是分分鐘的事了
  6. 確實要看很多很多書, 但是當你懂得了看書的技巧後, 其實閱讀的速度確實會越來越快的
  7. "所有你在書上看到的東西, 都是基礎."(出自某面試官) 做項目纔是吸收知識的最好途徑...作爲工科類的學生, 面試官更注重的是你做出了什麼, 而不僅是你知道什麼...
  8. 對於程序員而言簡歷上的項目經驗是非常重要的, 幾乎所有面試官都會拿項目經驗開始問你問題. 對於你簡歷的所有項目經驗, 它們用到了哪些後臺框架, 不僅要知其然, 還要知其所以然. 不要偷懶, 源碼得讀起來, 一問三不知的時候就真的醉了. 這方面推薦多看博客多看課外書籍
  9. 不要因爲懂得越多就越是持有謙卑的態度, 在面試官面前, 就是表現自己最好的一面, 做最好的自己, 就是幹. 堅持就是勝利, 儘管它來之不易

(我一個0 offer的人扯這些鴨湯其實感覺蠻臉紅的....) 下面列舉一些我覺得對我來說非常有用的書單和網站, 還有推薦使用的工具, 僅供參考, 希望能幫助到跟我一樣找工作的兄弟姐妹們, 還有尚未定位自己的師弟師妹. 以下所有書籍(網站)建議閱讀, 不一定要讀完, 但關鍵和核心得抓住


一、計算機基礎
《深入理解計算機系統》

著名的CSAPP, 這本書沒有作爲教材讓我覺得很驚訝, 從c語言到彙編語言到硬件再到操作系統, 寫得非常好. 雖然是本非常厚的磚頭書, 而且看英文的效果比看中文更好, 但是是一本能幫助深入理解計算機系統的書. 基本上把這本書吃透面試操作系統的大部分問題都不是問題


《具體數學》

讀這本書的前提是大一的微積分, 高能預警. 其實對面試什麼的並沒有特別大的幫助, 但是如果想挑戰思維的話可以看看, 因爲很多解決問題的技巧確實蠻驚豔我的. 實際上我自己也沒有看完, 但是會爭取看下去


《算法導論(第三版)》

被很多acmer coder奉爲學算法的經典之作, 儘管不太適合初學者, 因爲它這本書很多內容只提供了僞代碼, 而沒有具體實現. 但是我建議還是從這本書學數據結構和算法最好, 因爲日後的編程語言對實現而言實際上並沒有特別大的障礙, 只是適合與不適合的選擇罷了, 而把想法轉換成編程語言纔是對算法知識的考驗. 如果不想太過深入的話可以忽略掉 第四部分(高級設計和分析技術) 第五部分(高級數據結構) 和 第七部分(算法問題選編), 你會發現書其實比你想象中薄很多噢!


acm-cheet-sheet

如果你覺得看僞代碼轉換成編程語言這樣的學習方式很吃力, 沒關係, 這個pdf鏈接完全可以滿足你的需求, 裏面把很多常用的算法實現了(c/c++語言), 堅持臨摹(注意不是死記硬背, 是臨摹!)絕對能應對大多數公司的筆試編程題, 附上pdf下載鏈接


《劍指offer》

你未來面試的很多手寫代碼題 源題庫, 你還不看?


《STL源碼剖析》

如果你是經常用c++刷算法題的同學, 那麼一定經常用STL的各種集合, vector, set, stack, queue等等..它們的實現原理, 在源碼面前, 了無祕密


《Linux命令行與shell腳本編程大全》

亞馬遜書店五星推薦噢! 裏面大概講述了很多linux系統的使用和命令行等. linux是Java後臺開發人員必知必會的操作系統, 而命令行是使用linux系統必須要面對的 對於不想裝linux系統的同學其實可以考慮使用騰訊雲學習一些linux相關的命令行知識(沒錯, 不需要圖形界面), 學生價一個月才一塊錢, 跟月餅廠一個月十塊錢比起來也太划算了吧! 而且用linux也蠻酷的啊(.....)再推薦一個神器: GitHub - robbyrussell/oh-my-zsh 具體的好處可以看這則知乎: mac 裝了 oh my zsh 後比用 bash 具體好在哪兒? - 軟件@defcon 的解答.

另外關於linux命令行的詳細使用, 有一個網站也特別好用: Linux命令大全(手冊)_Linux常用命令行實例詳解_Linux命令學習手冊. 將相關命令的功能, 配置項和使用案例講得非常詳盡.

 

VIM

vim編輯器相對其他編輯器來說確實難用了一些, 入門的學習成本也很高, 不過在linux系統中使用vim可以說是必須掌握的技能. 記得我大一的時候程序設計課的TA就開始安利我們使用vim了, 不過當時真的是太愚鈍, 根本就學不會(說得好像現在就學會了一樣...)
網上關於vim的教程很多, 不過有的感覺太專業(比如自定義功能之類的), 我個人認爲只要你安裝了vim後, 命令行輸入vimtutor, 把那個教程過一遍基本就可以了....入門的難點主要是理解vim的三種模式: 編輯/命令/視圖...理解了這個後就順風順水了

至於自定義功能的話, 交給網上的其他大牛來完成吧233333, 這裏強烈推薦 GitHub - spf13/spf13-vim: The ultimate vim distribution . 效果如下, 比以往的效果好了太多:


《計算機網絡: 自頂向下方法》

軟件學院的計算機網絡教材, 裏面將計算機網絡從頂層到底層逐章分析了一遍, 非常適合初學者閱讀, 不過最好能夠結合一些實驗來輔助理解, 因爲裏面的講解確實蠻抽象的


《圖解HTTP》

日本人著的介紹HTTP協議的書, 對理解HTTP協議的一些細節有非常大的幫助, 插畫也很多(日本人的行文風格, 感覺就像看漫畫一樣), 很容易就理解了


《TCP/IP詳解卷一》

覺得上面兩本講解網絡的還不夠深入?我很欽佩這本書的作者, 能把枯燥的知識講得那麼那麼那麼細緻, 非常強烈推薦這一本, 看完相應章節後大概能夠明白爲什麼TCP/IP要這麼設計了. 面試的時候經常問到三次握手和四次揮手, 還有各種狀態的轉移, TIME_WAIT的時間爲什麼是2*MSL...


《UNIX網絡編程卷一: 套接字聯網API(第三版)》

中文版快800頁, 不過我只看了一些章節, 這本書也是把TCP/IP的細節講得很深很深, 此外還有非常重要的基本套接字編程, 就是寫網絡程序的時候那些bind, accept, listen, send, receive函數之類的, 內容非常多, 但是這些是理解多路複用模型所需要掌握的...select/poll/epoll這些系統調用解決了什麼問題? 事件機制能不能理解? 就看這本書的前六章了


《數據庫管理系統(原理與設計)》

這個也是web開發中離不開的東西, 必須劃重點學會的是ER圖/SQL語句/存儲數據(磁盤|文件|RAID|緩衝池等)/三大範式/索引以及相應的數據結構/事務相關的所有概念, 尤其重點學習SQL, 附上學習鏈接 .之後學會使用mysql workbench來進行數據庫建模/逆向工程生成建表語句/根據SQL生成JAVA實體類等就不贅述了, 開發過程中百度谷歌一下就知道啦, 然後如果習慣在windows下開發的同學推薦利用navicat這個好東西, 當然如果說想訓練自己寫sql語句的能力那純粹用命令行也無所謂...


html/css/javascript

這個是做web開發基礎中的基礎, 個人感覺學習難度不大, 但是建議一口氣學完並嘗試利用它們做一個簡單的個人簡歷, 否則學習曲線會比較斷斷續續, 不夠一氣呵成, 具體教程可以參考 html/cssjavascript入門javascript進階Javascript深入淺出


jQuery/Bootstrap/AngularJs

關於javascript, 其實純粹使用原生javascript開發網站的話很麻煩, 所以就萌生出了這麼一些框架: jQuery解決了瀏覽器兼容性的問題(雖然據說要過時了), Bootstrap可以很無腦地開發出看起來蠻好看的網頁(其實還有很重要方面是響應式前端); 而AngularJS主要是有一個很重要的思想:MVVM, 隨後崛起的vue.js也如出一轍而上手更快...對於Java Web開發程序員而言建議剛開始有選擇性地進行學習, 可能真正涉獵深了就可以隨意轉換了. ps: 我的前端基本都是在慕課網學成的, 我覺得這個網站真的業界良心. 去官網搜索吧!


JS的原型鏈與閉包

可能利用上面框架開發的時候會遇到一些很棘手的問題不知道如何解決或理解, 那麼建議先看看王福朋的博客: 《深入理解javascript原型和閉包系列》, 我覺得看完理解了以後定位js的bug應該會更容易一些


SublimeText

一個對於前端開發工程師來說非常強大的編輯器, 可以提供各種各樣的自動補全(必會emmet插件語法), 附上教程 快樂的sublime編輯器 和 前端開發工具技巧介紹—Sublime篇. 自從用了SublimeText, 我再也不畏懼前端編程了...如果覺得教程看得不過癮, 知乎上這幾個帖子可以讓你領略SublimeText的奇淫技巧


WebStorm

Jetbrain旗下的前端IDE, 我覺得相比SublimeText它更好的一點就是不需要你自己去裝插件就已經有了很多方便的功能, 上手比SublimeText快


VSCODE

微軟開源的編輯器, 知乎上也有比較詳細的討論. 個人認爲好看/高雅/好用, 如果習慣SublimeText入手vscode並不難, 反正我現在已經轉戰VSCODE了, 就因爲它可以設置背景爲萌蘿莉喔, 是不是蠻可愛的, 感覺打代碼更有精神了





Github

github列爲基礎可以足以說明它的重要性, 其實主要是理解版本控制與分支協作的概念, 不過使用這個網站之前得先學git, 廖雪峯的博客就介紹得非常到位. 建議剛入門github的時候可以將github當成成雲倉庫(你甚至可以把東京熱的種子放在github裏哈哈哈), 熟悉一些基本命令. 到後面團隊作業的時候強制使用github進行協同合作, 會漸漸發現和理解github的好處的. 除此之外github還是一個搜索開源優質項目的好網站(下圖源於怎樣使用 GitHub? - GitHub@珊姍是個小太陽 的答案)



Markdown
markdown也是很相見恨晚的東西, 我覺得markdown類似於html, 但是比html更簡單簡潔, 對於喜歡做網上筆記或者個人博客的同學而言是值得推薦的工具. 半小時應該就能上手了, 教程在此Markdown——入門指南...附上vscode的markdown筆記截圖(分欄看預覽效果, 感覺高大上了呢), 你會愛上markdown的(雖然我個人筆記整理得很亂- - 等我閒下來再好好整理)

此外我覺得markdown也不止是用來寫筆記的...github上的那些README.md也都是markdown呀....就是做項目的時候大家應該會有一些百度谷歌到一些有用的東西, 但是總是用收藏夾又不是很好處理, 這個時候markdown就起作用啦..就像下圖這樣..把做項目或者小demo時有用的鏈接放在github的README.md上, 之後再看自己做過的項目時覺得有難題的時候就直接點鏈接就好啦


二、Java
《瘋狂Java講義》

個人認爲Java入門最好的書籍, 雖然真的很厚, 不過裏面重複的話會寫很多遍(每天堅持看一點, 一次性讀完, 印象也會很深刻的)...對於這本書而言, 除了圖形界面編程以外, 其他內容最好認真讀完並實踐一遍, 會對理解Java Web有不少的幫助


《Effective Java》

建議有一定項目經驗的人才去看這本書, 裏面列舉了很多開發必須注意的條目. 說實話這本書真的不那麼好看, 但是你會發現在某些筆試題上會出現這本書的很多條目


Intellij IDEA

學習Java怎麼能不知道有這麼個牛逼轟轟的IDE! 可以說徹底提升了我的開發效率, 簡直相見恨晚, 在所有教程中我覺得極客學院做得最爲認真, 附上極客學院的學習地址



Maven

爲什麼我把Maven放在這裏? 因爲它蠻重要的(其實用gradle也可以). 一個解決java web項目開發中所需要的依賴問題, 同樣論工具的使用教程, 極客學院最給力, 附上教程地址


《輕量級Java EE企業應用實戰》

(閱讀此書時建議把基礎部分的全部搞定,)這本書跟《瘋狂Java講義》是配套的, 裏面先講解Servlet/Jsp(Java Server Page)等技術, 然後就是SSH(Struts/Spring/Hibernate)等後臺框架的各種使用, 其實說白了就是把這些技術的官方文檔給翻譯一遍給你而已. 有人覺得struts2都過時了還有沒有學習的必要? 我認爲理解一下也不會花太長時間, 因爲學習任何框架的重點也不僅僅是用而已. 初學者把重點放在一些思想上的東西(儘管很虛, 但是後續的框架基本都會延續這些思想), 比如控制翻轉IoC|面向切面編程AOP|對象關係映射ORM|模型-視圖-控制器MVC等, 把這些弄懂後之後的SpringMVC, mybatis等後臺框架上手會很快的. 這些東西真的太太太太太太基礎了, 搞不懂就要考慮轉行了(= . =) 另外看這本書入門Java web的時候不要對作者那種用記事本編程的方式太較真, 會debug到天昏地暗的, 使用Intellij Idea就好了(如果不懂使用Intellij Idea可以先去慕課網或極客學院或csdn等網站看看別人是怎麼操作的即可). 還有想說的就是, 請務必學會使用maven, 手工導jar包學習Java Web的方式簡直就是弱智行爲, 而我居然堅持了三個月..最後, 把這本書當成工具書比較合適: 初次閱讀理解就好沒必要動手實踐, 等到需要的時候再翻閱查詢


《Spring Boot實戰》

還在用xml配置各種依賴注入/數據源/事務管理器? out啦! 隨着微應用的流行, 以註解替代xml配置的開發方式將越來越流行. 作者汪雲飛沒有講太多廢話, 內容基本都是說Spring Boot的某個特性然後舉個例子實戰, 有利用SSH開發過簡單項目的同學可以嚐嚐先(我去實習的崗位早就開始用了, 覺得蠻新穎的) 實際上學習任何一個框架的時候要先了解這個框架解決了什麼問題, 只有理解了這個後才能更有針對性也更有效率地去進行學習


《Head First 設計模式》

隆重推薦這本神書, 很有趣. 剛開始讀覺得很深, 但是和《輕量級Java EE企業應用實戰》一起看, 思考那些設計模式存在的意義, 會對軟件架構方面的知識豁然開朗...


《兩週自制腳本語言》

一本用Java教你開發腳本語言的教材, 實際上可以把它當做編譯原理的正課來學習. 我之前以爲編譯原理不重要, 沒有認真學, 結果阿里面試官問了我Json字符串如何轉換成一個對象我就懵逼了. : 你知道編譯原理的重要性了嗎? 一個問題答不好可能就斷送了你的求職生涯啊! https://www.infoq.com/articles/HIgh-Performance-Parsers-in-Java-V2 這個鏈接提供了一種巧妙的解決方案, 值得閱讀.

不止是簡單的詞法分析和語法分析, 重排序等編譯器的性能優化方式也最好能理解一番.


《Java併發編程實踐》

又是個歪果仁寫的書, 裏面詳細介紹了Java併發工具包java.util.concurrent的各種工具以及很多的併發編程實踐之道, 是併發編程的入門之作.


《Java併發編程的藝術》

國人寫的書, 也是寫Java併發編程的, 與上一本相比個人認爲比較凝練/乾淨/易懂


三、Java進階
《架構探險: 從零開始寫Java Web框架》

作者叫黃勇, 一本非常讓我拍手叫絕的書....首推! 絕對乾貨! 如果你不想看spring源碼也沒有太大關係, 這本書帶你一步步地開發出一個類似spring mvc的簡單框架, 並且逐步地增加需求和完善, 理解了每個細節對於理解Java Web的開發是很有幫助的


《深入分析Java Web技術內幕》

這本書我覺得是必看的, 可以說是對我幫助最大的一本技術書籍, 覆蓋了Java Web很多方面的知識, 比如計算機網絡|Tomcat結構|Spring架構|SpringMVC原理|模板引擎實現原理等, 絕對很有收貨, 足夠有深度也很有難度


《Spring源碼深度剖析》

一本比較詳細的書, 其實對於閱讀源代碼, 跟着作者的思路讀, 再結合自己的斷點調試進行學習的方式是最好的


《深入理解Java虛擬機-(JVM高級特性與最佳實踐)》

想知道Java虛擬機爲什麼會幫你自動收集垃圾而不需要你管理資源釋放嗎? 想知道Java虛擬機的內存區域是如何劃分的嗎? 想知道Java虛擬機是如何唯一確定一個Java實現類, 並且如何加載類的嗎? 想知道JVM憑什麼能夠將遠程服務器發送的網絡字節加載到JVM內存, 從而實現遠程過程調用的嗎? 這本書你值得擁有!(感謝這本書讓我回答出RPC的實現原理)


500 lines or less

500行代碼! 儘管跟Java沒有太大關係, 強烈推薦, 裏面的程序主要是一些玩具輪子, 都是用python實現的, 學習這個主要是理解別的程序員在開發軟件的時候所做的決策/思路/取捨, 雖然我也沒看完, 但是覺得這個資源很贊!!! 官方網址



《MySQL技術內幕-InnoDB存儲引擎》

其實講道理這種書應該給DBA看纔對, 不知道爲什麼Java Web開發也要看- - 有次面試就問到說對mysql數據庫的性能調優有什麼看法, 所以就列在上面. 不過說真的有點晦澀難懂, 如果想簡單粗暴地應付面試的話就看這個博客 這篇博客應該是我目前看到的對於mysql索引的解釋最最通俗易懂的了

 

四、分佈式系統


《大型網站技術架構: 核心原理與案例分析》

李智慧著, 確實是很好的入門書籍. 實際上如果有操作系統和Web項目後臺開發的基礎話閱讀起來不會特別困難, 主要內容是介紹當今企業應對大型網站高併發請求的種種策略


《分佈式Java應用-基礎與實踐》

這本書比較深, 介紹分佈式Java應用和相應的應用場景, 什麼遠程過程調用(RPC)呀, 基於服務的體系架構呀(SOA)等, 同時也講了很多java比較底層的知識, 最後介紹構建高可用/可伸縮系統的工程經驗

 

《大型分佈式網站架構: 設計與實踐》

與上一本書類似, 不過個人覺得更偏向於"介紹"互聯網安全架構和分佈式系統的各種組件(比如分佈式緩存|消息隊列|搜索引擎等), 目前我只接觸了Redis, 相應的組件實在太多了- - 此外對系統監控和數據分析等也做了相應介紹, 這些我感覺比較偏向運維崗的工作人員

 

《Redis實戰》

Redis的基本用法和在生產環境的應用, 值得擁有, 雖然書籍是用python, 不過官方github也有放java的源碼

 

《Redis設計與實現》

Redis的源碼解讀, 怎麼說呢, 反正比spring源碼好讀太多了....而且作者讀得很用心, 整理出了帶註釋版本的redis源碼, 去讀個痛快吧少年

 

五、博客與網站


博客

這裏再着重推薦兩個大神的博客, 都是歪果仁

  • Jenkov: 丹麥資深Java開發人員, 從事軟件開發十多年, 如果你覺得李剛的教材看膩了, 可以看看他寫的教程, 非常適合初學者, 發現知乎很多Java程序員都是在這裏學併發編程的
  • Baeldung: 這系列教程是我覺得講spring的用法講得最好最全的.. 尤其是講spring security講得真的很詳細...


 

網站

此外還有一些常用的學習網站:

  • 慕課網: 首推, 自己真心感謝這個網站
  • 實驗樓: 地位和慕課網相當, 讓我覺得編程有趣的一個學習網站
  • 天碼營: 裏面有很多Java項目值得臨摹
  • 掘 金: 一個致力於爲廣大程序員推送文章的app(PC端也能看), 乾貨不少
  • 知 乎: 關注幾個大v帶逛, 會拓展不少視野, 列舉一些我覺得不錯的用戶名(括號表示補充說明): @車小胖 (計算機網絡相關知識), @靈劍 (清華數學解題高手, 可以去看看它對於數學題的解決方式, 很受用), @美團點評技術團隊 (目前看不是很懂,感覺很厲害的樣子), @RednaxelaFX (這個大v的研究領域有點深, 但是認真看對理解Java虛擬機是有幫助的), @auxten (面向工資編程, 真的是2333333, 我主要是看他寫的文章), @陳碩 (網絡編程專家, 對於TCP/IP|socket編程的很多問題都比較熱心), @vczh (輪子哥, 擁有輪帶逛的膜法)
  • coursera: 這個不多解釋了, 如果想跟國際接軌(英語授課)的話這個網站很適合你, 裏面有很多全世界優質的課程, 知乎上也有總結得很詳細的課程列表, 適用於任何人(Coursera 上有哪些課程值得推薦? - MOOCs)
  • Quora: 知乎的鼻祖, 但是抖機靈的人比較少, 外國牛人也是很多的, 上了才知道


 

--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

--------------------------------------------------------------------------------------------

 

實際上很多同學可能對項目經驗比較頭疼, 不知道做什麼, 我提供一個最簡單的思路

 

做個人博客|簡歷, 輸入賬號密碼進行校驗(登錄註冊太基本了), 之後就是對文章|簡歷的增刪查改操作, 後臺三層架構(控制層/服務層/數據對象層), 部署到雲服務器上, 這就是你的博客|簡歷v1.0了

 

v2.0就可以考慮多終端, 將服務層從原來的單機抽離出來, 利用hession框架(或者其他RPC框架)讓控制層和服務層服務器進行網絡通信, 從而實現將應用服務部署在獨立的服務器, 這樣假如要面向多終端, 比如現在微信小程序就可以多編寫一個控制層應用, 使用REST風格URL, 與之前思路類似調用統一服務平臺的服務, 這樣就是一個非常簡單的分佈式應用吧


 

之後的版本再慢慢嘗試redis, mongodb之類的分佈式組件, 雖然我自己還沒有實踐過, 不過應該是可行的. 驅動性的做項目的效率和學到的東西還是很高的.

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章