1. 程式人生 > >懂架構-有未來!寫給未來的java架構師

懂架構-有未來!寫給未來的java架構師

  • 分析
    對於企業的開發資格要求:
    經驗足,專案多,自身條件夠硬。
    從技術角度上:
    如果你的建立還只是停留在所謂的SSH技術層次上,那麼這類人基本找不到工作。
    當前的就業環境是需要開發人員掌握大量的架構知識。
    如果你先在不懂分散式開發,那麼也是沒有機會的。
    如果你不具備良好的業務分析能力也是不行的。
    好處:高工資。

  • 對於java學習的幾點概念
    基本概念:JDK,JVM、資料型別、方法、陣列
    面向物件一定要精通:
    抽象類與介面的使用和設計(不是簡單的知道一些概念)
    面向物件裡面的每一個細節,例如:子類物件例項化的過程。
    設計模式(工廠、代理、單例模式),也是後期學習Spring的主要理論。

多執行緒技術:
是否真的清楚多執行緒是什麼?
所謂的高併發指的就是訪問人數。
執行緒池:進行定時排程
同步與死鎖:生產者與消費者問題。(設計四個執行緒,兩個執行緒執行減操作,兩個負責加操作)
就會存在分散式鎖(可以通過Redis/zookepper實現)
反射機制:能否利用反射進行功能類的設計
類集框架::特點以及實現原理、各個子類的區別
JVM實現原理以及GC的處理流程。

  • 技術開發的架構發展
    2000-2003:掌握了MVC架構,充分理解了反射的設計思想,EJB開發理念。
    2003-2009:SSH1的時代,Struts1+Hibernate+Spring
    2009-2013:SSH2:Struts1+Hibernate+Spring為主
    2013-2015:SpringMVC+Mybatis
    2015-現在:SSM:SpringMVC +Shiro +Mybatis
    全棧工程師:可以精通前端開發(非UI)+業務分析+專案開發
    全能工程師:前可做美工,後可做運維, 上可做業務分析, 下可搞定服務架構,有很強的學習能力。

在2015年之前可以憑藉一些簡單的開發框架找到一份合適的工作,但是現在行情變了,也就是說如果你需要找到一份合適的工作,需要的不僅僅是一些簡單的技術,而是技術的全面領會,以及技術的深入思考。

  • *javaWeb開發
    如果只是做Web開發,java沒有什麼優勢!
    在web開發領域上,PHP、Python、NodeJs、Ruby都比java強,但是這些語言有一個問題,從未聽說過在國內有什麼特別龐大的所謂的百萬級別的專案上用這些開發。
    java之所以可以持續發展,主要也是因為各個公司的支援,
    2003以前,從事java開發會覺得沒有意思,整個技術就那麼點內容。
    2005年的時候開源風潮興起。
    2010年Android技術的興起(Android的就業市場已經百分之99飽和,招聘只招聘有經驗的)
    2013年大資料的技術興起
    2016年微雲架構興起

javaWeb開發重點:
MVC設計模式,這個時候一定要掌握的是前端以及業務層的劃分處理。JSP+Servlet+反射+代理設計+工廠設計+Ajax+Jquery+Json
自我檢測標準:單表CURD+分頁+上傳 是需要可以進行重用性設計,要求將面向物件的核心內容全部掌握。

  • 框架開發的興起
    招聘中可能出現的開源技術列表:
    Struts、Hbiernate、MyBatis/Ibatis、Shiro、Spring
    vue.js、Jquery、Zookeeper、Redis、Nginx、MySql、Tomcat、FastDFS….
    基本上大部分的人會蒙,如果說在2015年之前你可以搞自學就業,在2015年之後你不是校招進入的開發崗位,那麼要求是及其變態的。

框架的設計解決了許多設計問題:web的可重用設計,Spring的Bean管理操作以及整合能力,資料層開發的高效問題(MyBatis)

這裡寫圖片描述

在所謂的傳統型的技術開發架構領域上,是受限制的。

  • 傳統企業架構
    不會過多的考慮高併發的問題;
    不會過多的去考慮垂直拆分和水平拆分,不考慮高效能叢集
    不會過多的去考慮所謂的HA的處理機制(很多的網際網路公司也不會考慮它)
    對於資料庫的資料不會太大,幾百萬級別的,也不怕隨時搞一個多表查詢。
    這類的專案往往都出現在內網之中,也就是說單臺伺服器足以搞定,如果想更安全,再搞VPN

傳統專案的架構:如果公司技術部門要求高一些可以搞一些開發框架,也沒有太大的進取心,也就隨意搞一些asp。
如果你一直只是從事於傳統的企業架構,那麼在你沒有經過進一步的學習的情況下,很難出去找到一份合適你的工資待遇更高的工作。
因為已經進入到了網際網路時代。

  • 網際網路架構
    你需要更加深入的去理解javaj基礎,例如:
    java.util.concurrent開發包
    深入理解叢集的產生意義以及實際的應用
    必須擁有良好的Linux使用基礎,這個過程裡面你可能對於Linux核心以及它的執行機制並不是那麼清楚(有多少人清楚windows核心),但是一定要部署出常見的服務。
    充分評估一個專案裡面有可能得到的訪問量級(雲服務降低了成本);
    保證更好的、更安全的處理資料。

分散式、高可用、高效能

  • 常見的架構
    這裡寫圖片描述

Web的高可用牽扯到的問題就是session共享
session資料可以儲存在redis之中
這裡寫圖片描述

這裡寫圖片描述

  • 大資料
    從事軟體行業的人員如果不搞點大資料,會覺得不夠流行。
    規範化的文字時代。
    離線分析:做預測–資料可以不提供實時的統計處理操作,並且可以進行更加詳細的劃分操作,對於這種離線分析有可能分析的資料越來越大。
    這裡寫圖片描述
    所有的資料都是歸總後的處理,而不是簡單的處理。
    伺服器大,有業務就行

實時分析(流式分析):
商品推薦、路況資訊處理。
記憶體大,處理速度快。

這裡寫圖片描述

  • 微架構時代
    阿里推出了很多RPC(遠端過程呼叫)開發框架:
    dubbo、HSF、
    如果是傳統的web開發,涉及到的配置太多了。(SSM、SSH)
    Spring的開發推出了兩個熱門技術,不會沒工作:
    Spring Boot、SpringCloud
    需要非常去感謝Spring推出的了這兩個架構,真的解決了很久以來RPC為我們帶來的痛苦,基於Rest開發技術的很好的推廣

提倡零配置—這是不可能的
Spring Boot技術裡面整合了ThymeLeaf,父pom的統一管理,各個服務的整合。
這裡寫圖片描述

結束語:
以上只是說出了結構設計思想以及架構要解決的問題,但是實際開發之中架構遠遠比我們想象的複雜

未來的發展發向:雲服務+大資料。

別整一堆伺服器做叢集,(分佈各個地方)
未來的開發者都一定是架構師。
如果你的學習只是停留在簡單的程式開發商,那麼未來很可能會被淘汰。

java技術不管未來發展如何,架構思想不變,具有很好的可維護性。