1. 程式人生 > >最近一段時間要做的事情就是它了——Java伺服器端的相關技術

最近一段時間要做的事情就是它了——Java伺服器端的相關技術


畫個圖很重要


伺服器端開發是開發者中技術性偏強,對邏輯思維要求更高的一個細分方向,不同於前端,移動端等等,後者很多在做偏UI的事情,而伺服器端處理的只有邏輯和業務。所以從長遠的職業規劃來講,從事服務端開發作為技術道路的起點對長期是很有利的。

web伺服器端根據服務的種類會逐漸細分:小型公司小型業務一般是簡單工程化,簡單部署,開發選型多種多樣(php,Java,Python,Node.js...)這時候招的服務端主要還是看對語言的熟悉程度,一般要求是快速搞定。

中到大型公司隨著業務複雜度上升開始進行架構上的拆分,做一些服務化,中介軟體,近些年又有專門做資料分析(大資料,機器學習)的資料分析師,其實也是從伺服器端演化出來的。在一些公司中甚至web容器的業務邏輯開發(本人做的事情)被稱為前端,而真正的後端是做資料分析、推薦系統、演算法支援等等。這時候招聘web服務端往往要求業務架構能力,如何解耦和模組化一個工程,如何做分散式。


內功篇

實際上普通的web服務端開發掌握個語言,學兩個框架基本就可以上手了,但是後續提高必須很好的掌握所有相關基礎,這個基礎就包括了協議層(TCP/IP),作業系統知識。

比如大流量下如何配置nginx伺服器引數? 流量進來伺服器會有各種各樣的問題:連線恢復的連線風暴、高併發秒殺型應用如何做限流、記憶體吃緊如何優化、連線數cpu記憶體各種被佔滿如何分析瓶頸在哪?這時候只知道幾個框架的人完全是一頭霧水,必須從計算機的更底層去分析原因。

初入職場先只能面試普通伺服器端開發(非資深)攢點專案經驗,形成自己的一套分析問題的方法論,設計和架構一個複雜系統的經驗。

內功包括:

某一方向的伺服器端語言和成熟框架:

建議傳統一點的,比如Java,PHP。一些前沿的還不穩定不適合你玩,比如Python、Node.js(Javascript)、GO、scala。必須精通,沒得商量。
常用框架需要精通,否則招你進去沒法快速上手幹活也不會招你。
如Java棧的需要了解Spring, MyBatis, 容器Tomcat,Jetty

擴充套件
分散式RabbitMQ(ActiveMQ), zookeeper ,hadoop目測以後會成為必備技能,做了解。工具類jar包apache系列:common-lang.jar, common-io.jar, common-bean.jar。搜尋ElasticSearch(lucene, solr)
Python棧的需要了解django, Flask 至少其一
PHP棧我只知道一個Lavarel,囧

適當的全棧全棧是趨勢,起碼要懂一點頁面的東西,包括html, Javascript, css
常用的JavaScript框架和標準:CommonJs, jQuery, Bootstrap
擴充套件(選擇性瞭解):Angular, React, vue, Backbone, zepto (適可而止,一入前端深似海)

相關工具

協作:Git使用

資料庫

MySQL必須精通,沒得商量。nosql需要了解:MongoDB, Redis, Memcached 原理和基本部署方式和使用方式。

複習資料結構和基本演算法

這個程度的面試是會考連結串列、棧、二叉樹、B+樹、快速排序的,不能答不出來。

設計模式

需要精通常用幾個,瞭解大部分。比如工廠模式、狀態模式、命令模式、裝飾模式……

網路基礎和作業系統

TCP/IP協議,unix系統使用經驗,shell程式設計等等。。如果你能說出unix的基本啟動過程,還有常見的分析問題所用的一些命令,如sar,free,du,top,awk,sed等,Java棧的有jmap,jstat,jstack等應該有加分。


應聘技巧-簡歷篇

  1. 專業名詞的拼寫不要出錯,不要寫java,要寫Java。不要寫mysql,要寫MySQL。

  2. 不要一大堆精通xx。看到這種簡歷我直接pass,摸不清他的底,還得面試好好問問,簡歷沒方向還不知道怎麼問。精通什麼就是什麼,可以寫具體一點,比如精通Java可以寫精通哪一部分,是socket還是多執行緒?不瞭解的就不要寫上去了。

  3. 簡歷中做足對對方公司的準備。你可以詳細瞭解你要去那個部門是做什麼的,當前有哪些產品,產品有什麼缺陷,技術的核心價值在哪,技術難點在哪,你在這上面有什麼優勢。技術一樣的情況下,hr喜歡準備充分的人。

  4. 還是把基礎先鞏固了再去面試,前面提到幾個基礎知識不掌握,一般面試都會掛,除非面試官是瞎子。

先寫這麼多,未來會寫寫開發面試技巧。