㈠ 如何從程序員走向架構師
如何從程序員走向架構師。首先,作為程序員,必須熟練使用各種框架,了解其實際安裝的原理、jvm虛擬機原理,雲南昆明電腦培訓認為了解jvm能夠讓您編寫性能更好的代碼。
技術歸納
熟悉tcp協議,為了創建三握手連接和斷開四次握手的整個過程,不能優化高並發的網路應用;熟悉http協議,特別是http頭,電腦培訓認為沒有五年多的大量工作無法理解session和cookie的生命周期以及它們之間的關系。
系統集群;負載均衡;反向代理;靜態與動態分離;靜態網站。
分布式緩存技術memcached,redis,是提高系統性能所必需的。總之,昆明北大青鳥發現把硬碟的內容放入內存提高速度,順便演算法的整合性hash。
資料庫設計能力,必不可少的是mysql,最基本的資料庫工具易於使用,它的基本參數優化,緩慢的查詢日誌分析,主從副本配置,至少成為半mysqdba。其他nosql資料庫,如mongodb。
成為架構師不是了解很多技術就行了,這些都是解決問題的基礎和工具,不懂這些知識是無法提出解決方案的,雲南計算機學習認為這是成為一名架構師所必備的。
㈡ 如何成為架構師 7個關鍵的思考 習慣和經驗
工作了挺久,發現有個挺有意思的現象,從程序員、高級程序員,到現在掛著架構師、專家之類的頭銜,伴隨著技術和能力的提高,想不明白的事情反而越來越多了。這些疑問有些來自於跟小夥伴交流,有些是我的自問自答,有些到現在也想不清楚,這篇文章就來寫一寫這些問題。
如何更高效的學習?
很多新人程序員一開始在學習上找不到方向,但我想在渡過了一段時間的新手期之後這類問題大多都會變得不再那麼明顯,工作的方向也會逐漸變得清晰起來。
但是沒過多久,能了解到的資料就開始超過每天學習的能力,像是買了沒看的書、收藏沒讀的貼、mark了之後再也沒有關注過的文章越積越多,更別提每天面對各種技術分享或者微博里的新鮮玩意了。
大多數人每天能留給自己學習的時間有限,這個階段如何提升學習效率就成了要解決的重點。
說說自己提升學習效率的心得,其實非常簡單:體系化的學習。
我曾經很喜歡看一些博客或者是一些「看起來」比較通俗易懂的文章,每天在微博微信里刷到什麼技術文章就mark下來,基本上幾分鍾就能讀完。可一段時間下來,雖然讀了不少東西,但是還是有種在原地打轉的狀態,並沒有感受到有什麼實際的提高。
最後實在忍不住,抱著厚書硬啃了一遍,突然有種豁然開朗的感覺:讀書時自己學到的是一張完整的知識網路,每個知識點和其它內容相互聯系和區別。這種全方位的理解比起一篇篇獨立的文章,不知要高到哪裡去了。
而讀了一段時間書之後,漸漸原本不在一個體系之內的知識也會慢慢聯系起來,比如說後端服務的開發,簡單梳理一下,就成了這樣:
在重復了幾次痛苦的學習-梳理過程後,再去看一些獨立的文章或者資料往往會事半功倍,因為能在體系內找到相對應的知識,甚至有時候一本書里一頁只需要看一句話,點破那層窗戶紙,就可以掌握新的知識。
你是怎麼知道這些的?
工作中總是會遇到各種各樣的問題,有幾次把問題處理過程總結了一下,發了出來,之後就像滾雪球一樣,有越來越多的小夥伴來咨詢問題,比如說:
前一陣幫忙排查一個性能問題,系統壓力稍微一大就會頻繁Full GC,壓力降低之後又恢復了。
某個小夥伴接入代碼質量檢查系統之後發現每次構建會報一個莫名其妙的錯誤,打不了包。
某次代碼有bug,小夥伴跑來來問我git怎麼才能回滾代碼。
每次查完這種問題的時候,一些剛畢業沒多久小夥伴們就會用一種崇拜的眼神看著我,然後大多會問:「你是怎麼知道這些的?」
實際上,雖然我一直在不斷的學習,但是面對工作中無窮無盡的新問題,大部分問題還是會命中我沒有掌握的那部分區域。每次有人問到我不了解的知識時我都會非常開心:還有什麼比帶著問題學習更有效率的學習方法呢?
而且幸運的是,在建立了自己的知識體系的基礎上,學習新的知識通常都能很快的上手,解決一個問題往往只需要多了解一個知識點而已。
舉個例子,頻繁Full GC的問題,以前查過很多次GC的問題,大多數是java程序或JVM內存泄露問題,而這次內存沒有泄露,GC吞吐量也正常,那麼我只需要查一下如何查看一段時間內創建的最多的對象的方法就可以了。
回到剛才的問題,小夥伴們問我:「你是怎麼學到這些的知識的?」
答案是:在你問我問題之後現學的。
架構師應不應該寫代碼?
似乎隔三差五就能看到一些關於架構師應不應該寫代碼的文章。我是屬於寫代碼派,因為我本身就喜歡寫代碼。但是,當工作職責發生變化之後,如何保持寫代碼和其它工作之間的平衡就成了問題。
從個體效率上來看,我自己親自寫代碼,和很多人相比沒有什麼絕對優勢,甚至有些人碼代碼的速度比我還快一些。
但作為架構師,參與寫代碼還是會有一些不大不小的收益。
一般來說合格的程序員對於明確分配的任務會完成的很好,但是大部分情況下「架構」這個詞意味著架構師並不會涉及太多細節,架構圖和代碼實現之間總還是有些距離,你無法保證所有人都會正確的理解你的設計,或者是程序員寫代碼時遇到障礙時會立刻想出足夠優雅的解決方案。
之前寫過一篇關於爛代碼的文章 ,大部分爛代碼並不是架構師的設計問題,如果程序員沒能很好的理解設計或者是經驗不足,往往會做出一些非常匪夷所思的東西。比如我見過剛畢業的程序員為了防止模塊耦合而將耦合的代碼又拷貝了一份,或者為了「優化性能」而盡量把所有邏輯寫在一個函數里。
如果不能及時發現並改正這些問題,那麼這些地方就會變成「正確的錯誤代碼」,或者」不是我寫的「代碼,或者」我靠我也看過那段代碼「之類足以被掛上恥辱柱的玩意。這種問題算是架構師的責任嗎?作為一個視名聲如命的架構師,我認為是的。
在我看來,寫代碼的架構師更像是在做後勤保障的工作:在代碼中第一時間發現可能存在的問題,向其他人提出警告,或是給予其他人改進的意見,必要的時候或是給其他人演示一下正確的姿勢。
大部分情況下我作為架構師並不需要攬下「核心模塊」開發這種工作,畢竟我能調配的時間太零散了,效率難以保證,很多人在專注的情況下比我做的好很多,我只需要保持大局觀需要適度參與就可以了。
總的來說,架構師和程序員在某些方面上有點像產品經理和用戶的關系,大部分程序員並不會主動告訴你他們想要什麼、哪裡需要優化,甚至自己也不知道這些。想要做出好的產品,捷徑之一就是跟用戶做同樣的事情。
實踐:開會是個技術活嗎?
我覺得應該沒有人喜歡開會,身為一個程序員,沒有幾個人的志向是當什麼職場交際花。
但是會議邀請就這么一個個的跳了出來:開發需求要跟產品開會、項目方案要跟技術開會、新人轉正要去開評審會、別的公司來了幾個大牛正在開分享會、出了故障要開總結會、小組有周會、部門有周會,大項目每周開兩次碰頭會不過分吧?小項目啟動的時候開個會不過分吧?調試的時候發現有個坑大家趕緊討論討論吧?
有時候參加的會議整場下來跟我毛關系都沒有,全程神遊倆鍾頭,最後突然有人一拍桌子:」還有問題沒?好,散了!「
也有可能有個什麼會沒叫你,過了倆禮拜突然收到封郵件催開發進度,」當時那個會你沒參加,大家都說應該是你們做……你沒看會議紀要嗎?「
吐槽了這么多,但我還是認為開會是個技術活,對於架構師來說尤其如此。
大多數技術人員開會並不是那種新聞里的工作匯報或者長者們的會議,他們真的需要通過開會討論一個具體方案,或者解決什麼具體問題。可惜的是我參加過很多會議,大多數的會議都是在毫無意義的交流中浪費時間:幾方人坐在一個屋裡互相說一些對方理解不了的話,最後得出一個」我們會後再捋一捋「之類的結論。
這並不是會議才有的問題,在程序員日常的溝通中,也有很多人並不懂得如何交流,比如偶爾會收到一些寫的非常認真的郵件,打開之後是密密麻麻的一屏幕文字,但是從第一句開始就不知道他在說什麼,後面的東西連看的動力都沒有了。
大多數時候,溝通的核心不是你說了什麼,而是你想要讓對方了解什麼、讓他做什麼。良好的溝通能在工作中顯著提升效率,但很多人忽略了這個事情。
想要恰到好處的進行溝通是一件不那麼輕松的事情,但是簡單來說有幾條原則:
確保各方對背景的理解一致,比如開會之前先簡單通過郵件交流一下,對新加入會議的人花個30秒鍾做個前情提要,或者在討論過程中讓對方說一下他的理解。
去掉對方不能/不需要理解的內容,比如跟產品說「這個隊列在高並發下因為鎖的實現有問題導致CPU性能瓶頸」不如改成「我們發現了性能問題,持續10分鍾了,10萬用戶收不到運營發的無節操廣告,大概5分鍾後擴容解決」。
確保在對方失去注意力前盡快說出重點,比如排查問題的總結郵件,如果第一段是這樣:「某某框架內部使用的是xxx技術,這個技術的架構是這樣:blabla」,那麼對方可能完全不知道你在講什麼。可以換成這樣:「我發現了某某框架的bug,需要盡快升級,否則在xxx情況下有可能會出現yyy問題,具體排查過程如下:blabla」。
不要說沒有意義的內容浪費其他人的時間,比如」這需求做不了「或者」這里不可能出bug「,沒有人想聽到這些廢話。
為什麼別人的系統總是那麼爛?
很多程序員解決問題的能力很強,說要解決一個什麼問題,下午就能寫出幾百行代碼把功能實現了。但是做出來的東西有種少考慮了什麼東西的感覺,我花了挺久去想一個詞去形容「這個東西」,最後想出了個勉強可以表達的詞:程序的生命力。
大部分程序都能實現功能,但是如果把「時間」這個也作為一個考慮的維度的話,就會意識到一個合格的項目需要考慮更多的東西:更通用的使用方式、易於理解的文檔、簡單而易於擴展的設計,等等。而想要毀掉程序的生命力也很簡單:做的更復雜,更定製化,讓更少的人參與。
我跟很多程序員提過程序的生命力,比如說要讓自己寫的工具的操作方式跟其它Linux命令類似,或者要用一些更容易理解但不是性能最優的設計方式,又或者要他去參考現在業界主流的做法,很多人認為提這種需求的意義不大,我覺得這里還是舉個例子吧。
很多公司應該都會有一些遺留系統,它們龐大、笨重、難用、幾乎無法維護,所有人都在抱怨這些系統,並且每天都在想方設法換掉那些遺留系統。但是一段時間過去之後,又會發現身邊的新人又開始吐槽當時替代遺留系統的那個系統了。
「大多數系統當初都很好使,功能當時夠用,擴展性看起來也可以,但是這些系統都是開發的人離職之後變壞的。」
還有更好的辦法嗎?
成為技術專家之後的工作可以說是痛並快樂著,會有很多人找你咨詢問題,另一方面,會有太多人找你咨詢問題。
甚至有一段時間我每天的工作就是解答問題,小到工具使用中到疑難bug,大到架構設計,從早上到晚上基本都是在給各種各樣的小夥伴提供咨詢服務。
我很快發現有些地方不對頭:有些問題實在是太簡單了,以至於我甚至都不用思考就可以給出答案,為什麼會有這種問題?
後來我在每次回答之前先問一句:
「你還有更好的辦法嗎?」
一小部分人立刻能給出優化後的版本,甚至我連續問幾次之後,他能給出好幾個優化後的版本;另小一部分人會斬釘截鐵的說優化不了了,就這樣了。但是大部分人會猶猶豫豫的說出一些完全不著調的回答。
後來我改成在每次回答之前先問兩句:
「你要解決什麼問題?」
「還有更好的辦法嗎?」
效果好了很多,很多小夥伴發現要解決的問題並不復雜,只是做法跑偏了。
再後來我改成了在每次回答之前先問三句:
「他們要你解決什麼問題?」
「你解決的是什麼問題?「
」還有更好的辦法嗎?「
現在第三句已經很少問到了。
成為架構師最困難的門檻是什麼?
跟一些程序員交流的過程中,有不少人問我要怎麼成為一名牛逼的架構師。
我最近幾年面試的人挺多,發現一個有意思的現象:很多人自稱架構師的人跟你講一個架構時簡直滔滔不絕,各種技術名詞像是說相聲一樣從他嘴裡說出來,三句話不離高並發大數據,但是稍微追問一下,就會發現很多基本概念的缺失,例如自稱精通高並發的人說不清楚他所謂的高並發系統的瓶頸在哪裡,自稱精通架構設計的人說不明白他的系統怎麼保證高可用,自稱超大數據量的系統實際上只有不到100萬條數據,等等。
架構師雖然聽起來很高大上,但本質上仍然是工程師,不是科學家,也不是忽悠人的江湖騙子。學習再多,也需要實踐落地。設計架構方案更多的是在做一些抽象和權衡:把復雜的需求抽象成簡單的模型,從功能、性能、可用性、研發成本等等方面規劃如何構建一個系統,這些內容需要更多的實踐練習。
很多人沒有工作在類似微博平台這種天天需要接觸架構設計的地方,而很多公司沒有架構方面的工作可供他們練級,於是就想辦法從理論上下功夫,這類人的特徵非常明顯:在信息不足,甚至不了解實際場景的情況下就開始做架構設計,這種所謂的架構往往理解比較膚淺,經不住推敲。
每年招人之後我們都會做一些針對新人的架構方面的培訓,課程材料基本上包括了高可用架構相關的主要方面,但是學完這些材料之後就能成為獨當一面的架構師了嗎?並沒有。相反,這僅僅是開始,新人真正做了幾個並發量上萬的系統之後才算是正式入門:面對壓力時才會懂得權衡,走過彎路之後才會尋找捷徑。
所以我認為在架構師(和其它很多)的工作中最重要的部分是實踐,誇誇其談很容易,與其拽一些技術名詞,不如把你正在做的系統真正的做好。
我和大牛之間有多少距離?
跟很多人一樣,剛畢業時我覺得作為程序員,只要努力,加上少許天賦便可以獲得一些成績。
工作一段時間後,對自己和其他人的認識也越來越清晰,逐漸的發現程序員之間的差距或許比人和猴子之間的差距還大,接受這個事實這讓我郁悶了很久。
再過一段時間,發現自己已經能夠客觀的評價自己的能力,也意識到了距離並不是那麼重要,只要想辦法跑的更快,就足夠了。
㈢ 作為一個JAVA程序員, 應該掌握哪些知識, 目前, 比較流行的java開發框架有哪些,
java基礎,三大主流資料庫mysql,orcale,sql server;然後是j2ee的相關知識,也就是java開發框架。
Spring Framework 【Java 開源JEE框架】
Spring是一個解決了許多在J2EE開發中常見的問題的強大框架。
Spring提供了管理業務對象的一致方法並且鼓勵了注入對介面編程而不是對類編程的良好習慣。Spring的架構基礎是基於使用JavaBean屬性的
Inversion of
Control容器。然而,這僅僅是完整圖景中的一部分:Spring在使用IoC容器作為構建完關注所有架構層的完整解決方案方面是獨一無二的。
Spring提供了唯一的數據訪問抽象,包括簡單和有效率的JDBC框架,極大的改進了效率並且減少了可能的錯誤。Spring的數據訪問架構還集成了
Hibernate和其他O/R mapping解決方案。Spring還提供了唯一的事務管理抽象,它能夠在各種底層事務管理技術,例如JTA或者
JDBC事務提供一個一致的編程模型。Spring提供了一個用標准Java語言編寫的AOP框架,它給POJOs提供了聲明式的事務管理和其他企業事務
--如果你需要--還能實現你自己的aspects。這個框架足夠強大,使得應用程序能夠拋開EJB的復雜性,同時享受著和傳統EJB相關的關鍵服務。
Spring還提供了可以和IoC容器集成的強大而靈活的MVC Web框架。【SpringIDE:Eclipse平台下一個輔助開發插件】.
WebWork 【Java開源Web開發框架】
WebWork是由OpenSymphony組織開發的,致力於組件化和代碼重用的拉出式MVC模式J2EE
Web框架。WebWork目前最新版本是2.1,現在的WebWork2.x前身是Rickard
Oberg開發的WebWork,但現在WebWork已經被拆分成了Xwork1和WebWork2兩個項目。
Xwork簡潔、靈活功能強大,它是一個標準的Command模式實現,並且完全從web層脫離出來。
Xwork提供了很多核心功能:前端攔截機(interceptor),運行時表單屬性驗證,類型轉換,強大的表達式語言(OGNL – the
Object Graph Notation Language),IoC(Inversion of Control倒置控制)容器等。
WebWork2建立在Xwork之上,處理HTTP的響應和請求。WebWork2使用ServletDispatcher將HTTP請求的變成
Action(業務層Action類),
session(會話)application(應用程序)范圍的映射,request請求參數映射。WebWork2支持多視圖表示,視圖部分可以使用
JSP, Velocity, FreeMarker,
JasperReports,XML等。在WebWork2.2中添加了對AJAX的支持,這支持是構建在DWR與Dojo這兩個框架的基礎之上.
【EclipseWork:用於WebWork輔助開發的一個Eclipse插件】
Struts 【Java開源Web開發框架】
Struts是一個基於Sun
J2EE平台的MVC框架,主要是採用Servlet和JSP技術來實現的。由於Struts能充分滿足應用開發的需求,簡單易用,敏捷迅速,在過去的一年中頗受關注。Struts把Servlet、JSP、自定義標簽和信息資源(message
resources)整合到一個統一的框架中,開發人員利用其進行開發時不用再自己編碼實現全套MVC模式,極大的節省了時間,所以說Struts是一個非常不錯的應用框架。【StrutsIDE:用於Struts輔助開發的一個Eclipse插件】
Hibernate 【Java開源持久層框架】
Hibernate是一個開放源代碼的對象關系映射框架,它對JDBC進行了非常輕量級的對象封裝,使得Java程序員可以隨心所欲的使用對象編程思維來操縱資料庫。
Hibernate可以應用在任何使用JDBC的場合,既可以在Java的客戶端程序實用,也可以在Servlet/JSP的Web應用中使用,最具革命意義的是,Hibernate可以在應用EJB的J2EE架構中取代CMP,完成數據持久化的重任。Eclipse平台下的Hibernate輔助開發工具:【Hibernate
Synchronizer】【MiddlegenIDE】
Quartz 【Java開源調度框架】
Quartz是OpenSymphony開源組織在Job
scheling領域又一個開源項目,它可以與J2EE與J2SE應用程序相結合也可以單獨使用。Quartz可以用來創建簡單或為運行十個,百個,甚至是好幾萬個Jobs這樣復雜的日程序表。Jobs可以做成標準的Java組件或
EJBs。Quartz的最新版本為Quartz 1.5.0。
Velocity 【Java開源模板引擎】
Velocity是一個基於java的模板引擎(template engine)。它允許任何人僅僅簡單的使用模板語言(template
language)來引用由java代碼定義的對象。當Velocity應用於web開發時,界面設計人員可以和java程序開發人員同步開發一個遵循MVC架構的web站點,也就是說,頁面設計人員可以只關注頁面的顯示效果,而由java程序開發人員關注業務邏輯編碼。Velocity將java代碼從web頁面中分離出來,這樣為web站點的長期維護提供了便利,同時也為我們在JSP和PHP之外又提供了一種可選的方案。
Velocity的能力遠不止web站點開發這個領域,例如,它可以從模板(template)產生SQL和PostScript、XML,它也可以被當作一個獨立工具來產生源代碼和報告,或者作為其他系統的集成組件使用。Velocity也可以為Turbine
web開發架構提供模板服務(template
service)。Velocity+Turbine提供一個模板服務的方式允許一個web應用以一個真正的MVC模型進行開發。【VeloEclipse
:Velocity在Eclipse平台下的一個輔助開發插件】
IBATIS 【Java開源持久層框架】
使用ibatis 提供的ORM機制,對業務邏輯實現人員而言,面對的是純粹的Java對象, 這一層與通過Hibernate 實現ORM
而言基本一致,而對於具體的數據操作,Hibernate 會自動生成SQL 語句,而ibatis 則要求開發者編寫具體的SQL
語句。相對Hibernate等 「全自動」ORM機制而言,ibatis
以SQL開發的工作量和資料庫移植性上的讓步,為系統設計提供了更大的自由空間。作為「全自動」ORM 實現的一種有益補充,ibatis 的出現顯
得別具意義。
Compiere ERP&CRM 【Java開源ERP與CRM系統】
Compiere
ERP&CRM為全球范圍內的中小型企業提供綜合型解決方案,覆蓋從客戶管理、供應鏈到財務管理的全部領域,支持多組織、多幣種、多會計模式、多成本計算、多語種、多稅制等國際化特性。易於安裝、易於實施、易於使用。只需要短短幾個小時,您就可以使用申購-采購-發票-付款、報價-訂單-發票-收款、產品與定價、資產管理、客戶關系、供應商關系、員工關系、經營業績分析等強大功能了。
Roller Weblogger 【Java開源Blog博客】
這個weblogging
設計得比較精巧,源代碼是很好的學習資料。它支持weblogging應有的特性如:評論功能,所見即所得HTML編輯,TrackBack,提供頁面模板,RSS
syndication,blogroll管理和提供一個XML-RPC 介面。
Eclipse 【Java開源IDE】
Eclipse平台是IBM向開發源碼社區捐贈的開發框架,它之所以出名並不是因為IBM宣稱投入開發的資金總數
—4千萬美元,而是因為如此巨大的投入所帶來的成果:一個成熟的、精心設計的以及可擴展的體系結構。
XPlanner 【Java開源項目管理】
XPlanner 一個基於Web的XP團隊計劃和跟蹤工具。XP獨特的開發概念如iteration、user
stories等,XPlanner都提供了相對應的的管理工具,XPlanner支持XP開發流程,並解決利用XP思想來開發項目所碰到的問題。
XPlanner特點包括:簡單的模型規劃,虛擬筆記卡(Virtual note cards),iterations、user
stories與工作記錄的追蹤,未完成stories將自動迭代,工作時間追蹤,生成團隊效率,個人工時報表,SOAP界面支持。
HSQLDB 【Java開源開源資料庫】
HSQLDB(Hypersonic SQL)是純Java開發的關系型資料庫,並提供JDBC驅動存取數據。支持ANSI-92 標准
SQL語法。而且他占的空間很小。大約只有160K,擁有快速的資料庫引擎。
Liferay 【Java開源門戶系統】
代表了完整的J2EE應用,使用了Web、EJB以及JMS等技術,特別是其前台界面部分使用Struts
框架技術,基於XML的portlet配置文件可以自由地動態擴展,使用了Web Services來支持一些遠程信息的獲取,使用 Apahce
Lucene實現全文檢索功能。
主要特點:
提供單一登陸介面,多認證模式(LDAP或 SQL);
管理員能通過用戶界面輕松管理用戶,組,角色;
用戶能可以根據需要定製個性化的portal layout;
能夠在主流的J2EE應用伺服器上運行,如JBoss+Jetty/Tomcat,JOnAS;
支 持主流的資料庫,如PostgreSQL,MySQL;
使用了第三放的開源項目,如Hibernate, Lucene, Struts;
支持包括中文在內的多種語言;
採用最先進的技術 Java, EJB, JMS, SOAP, XML;
JetSpeed 【Java開源門戶系統】
Jetspeed是一個開放源代碼的企業信息門戶(EIP)的實現, 使用的技術是Java和XML. 用戶可以使用瀏覽器,
支持WAP協議的手機或者其它的設備訪問Jetspeed架設的信息門戶獲取信息. Jetspeed扮演著信息集中器的角色,
它能夠把信息集中起來並且很容易地提供給用戶.
Jetspeed具有如下的特徵:
即將成為標准化的Java Portlet API
基於模板的布局, 包括JSP和Velocity
通過開放的內容同步技術支持遠程XML 內容交換
定製默認的主頁
使用資料庫進行用戶認證
內存緩存技術, 加快頁面的響應
通 過Rich Site Summary技術, 支持同步內容
和Cocoon, WebMacro, Velocity集成.
Wireless Markup Language (WML) 支持
使用XML格式的配置文件注冊portlet.
完整的 Web Application Archive (WAR) 支持
Web應用程序開發的基礎設施
可以在本地緩 存遠程內容
與Avantgo同步
可移植到所有支持JDK1.2和Servlet 2.2的平台
與 Turbine模塊和服務集成
可以根據用戶, 安裝媒體類型和語言的不同設定, 產生不同的個性化服務
持續化服 務使得所由的portlet能夠容易的存儲每個用戶的狀態, 頁面和portlet
使用皮膚技術使得用戶可以選擇portlet的顏 色和顯示屬性
自定義功能是的管理員可以選擇portlet以及定義個人頁面的布局
在資料庫中存儲PSML
通 過Jetspeed的安全portlets管理用戶, 組,角色和許可權
基於角色對訪問portlet進行控制
JOnAS 【Java開源應用伺服器】
JOnAS是一個開放源代碼的J2EE實現,在ObjectWeb協會中開發。整合了Tomcat或Jetty成為它的Web容器,以確保符合Servlet
2.3和JSP 1.2規范。JOnAS伺服器依賴或實現以下的Java API:JCA、JDBC、JTA
、JMS、JMX、JNDI、JAAS、JavaMail 。
JFox3.0 【Java開源應用伺服器】
JFox 是 Open Source Java EE Application Server,致力於提供輕量級的Java
EE應用伺服器,從3.0開始,JFox提供了一個支持模塊化的MVC框架,以簡化EJB以及Web應用的開發!
如果您正在尋找一個簡單、輕量、高效、完善的Java EE開發平台,那麼JFox正是您需要的。
JFox 3.0 擁有以下特性:
重 新設計的 IoC 微內核,融入 OSGi 模塊化思想
設計成嵌入式架構,能夠和任何 Java Web Server集成部署
支 持 EJB3,JPA規范,支持容器內和容器外兩種方式運行EJB和JPA組件
支持 EJB 發布成Web Service
采 用 JOTM(http://jotm.objectweb.org/)提供事務處理,支持兩階段提交 (2PC)
採用 XAPool(http://forge.objectweb.org/projects/xapool/) 提供 XA
DataSource,支持智能連接池管理
內置 MVC 框架,實現自動Form
Mapping,Validator,Uploading等功能,支持JSP/Velocity/Freemarker頁面引擎,並支持直接在
Action中注入EJB
支持多應用模塊部署,讓中大型應用充分享受模塊化開發帶來的優勢
提供 Manager 管理模塊,可以查看和管理各種運行時參數
提供根據 JFox 特色重寫的 Petstore 應用模塊
EasyJWeb 【Java開源Web開發框架】
EasyJWeb是基於java技術,應用於WEB應用程序快速開發的MVC框架,框架設計構思來源於國內眾多項目實踐,框架充分借簽了當前主要流行的開源Web框架(Struts、JSF、Tapestry
、Webwork),吸取了其優點及精華,利用Velocity作為模板頁面引擎,是一個實現了頁面及代碼完全分離的MVC開發框架。是一個能實現中小型
Web應用系統快速開發的簡易Web框架。
通過EasyJWeb
Tools提供的配套開發工具,可以實現基於EasyJWeb框架的Web應用快速開發,包括常用應用軟體的代碼自生成、資料庫添刪改查(CRUD)代碼生成、自動頁面模版生成、配置文件管理等。
框架特點:
零配文件置支持。以前我們每接觸一個框架,開始總都要被
他的配置文件折騰一番。EasyJWeb實現零配置支持,可以不寫一句配置文件就在框架基礎上構建你的運用。(適合小型網站系統)。
簡 易的模板頁面設計支持:放棄使用jsp,使用簡單Velocity腳本語言作為頁面模板。
頁面程序完全分離:實現顯示頁面與程序邏輯 的完全分離,克服了傳統jsp頁面難於維護的問題。
基於頁面組件的框架。靈活的頁面組件配置,可以直接通過配置文件設置欄位級的事件 組件。
快速開發支持:通過EasyJWeb
Tools,可以自動生成應用軟體模板代碼,定製並管理自己的J2EE代碼模板,代碼生成模板支持最流行的實用Java開發框架(如hibernate、
Spring等)實現快速開發。
Tapestry 【Java開源Web開發框架】
Tapestry是一個開源的基於servlet的應用程序框架,它使用組件對象模型來創建動態的,交互的web應用。一個組件就是任意一個帶有
jwcid屬性的html標記。其中jwc的意思是Java Web
Component。Tapestry使得java代碼與html完全分離,利用這個框架開發大型應用變得輕而易舉。並且開發的應用很容易維護和升級。
Tapestry支持本地化,其錯誤報告也很詳細。Tapestry主要利用javabean和xml技術進行開發。【Spindle:Tapestry
輔助開發Eclipse插件】.
FreeMarker 【Java開源模板引擎】
FreeMarker允許Java
servlet保持圖形設計同應用程序邏輯的分離,這是通過在模板中密封HTML完成的。模板用servlet提供的數據動態地生成
HTML。模板語言是強大的直觀的,編譯器速度快,輸出接近靜態HTML頁面的速度。
【FreeMarker Eclipse Plugin與FreeMarker IDE:Eclipse平台下的輔助開發工具】
Lucene 【Java開源搜索引擎】
Apache
Lucene是一個基於Java全文搜索引擎,利用它可以輕易地為Java軟體加入全文搜尋功能。Lucene的最主要工作是替文件的每一個字作索引,索引讓搜尋的效率比傳統的逐字比較大大提高,Lucen提供一組解讀,過濾,分析文件,編排和使用索引的API,它的強大之處除了高效和簡單外,是最重要的是使使用者可以隨時應自已需要自訂其功能。
iText 【Java開源PDF類庫】
iText是一個能夠快速產生PDF文件的java類庫。iText的java類對於那些要產生包含文本,表格,圖形的只讀文檔是很有用的。它的類庫尤其與java
Servlet有很好的給合。使用iText與PDF能夠使你正確的控制Servlet的輸出。
Groovy 【Java開源動態語言】
Groovy是一種基於JVM的敏捷開發語言,它結合了Python、Ruby和 Smalltalk的許多強大的特性。
Groovy已在WebWork2中的應用。它可以被編譯為標準的Java Bytecode。
OpenCms 【Java開源CMS系統】
OpenCms是一個J2EE的產品,它是用 Java寫成的。它和Tomcat捆綁在一起。但是也能夠使用ATG
Dynamo、WebLogic和WebSphere。OpenCms支持多種RDBMS來保存內容,包括Oracle、SQL
Server、Sybase和mySQL。新版本提供了一個新的模板引擎,JSP支持,一種新的連接管理系統,提高了穩定性。
JUnit 【Java開源測試工具】
JUnit是由 Erich Gamma 和 Kent Beck 編寫的一個回歸測試框架(regression testing
framework)。Junit測試是程序員測試,即所謂白盒測試,因為程序員知道被測試的軟體如何(How)完成功能和完成什麼樣(What)的功能。Junit是一套框架,繼承TestCase類,就可以用Junit進行自動測試了。
BlueJ 【Java開源IDE】
BlueJ是一個專門為入門級教學設計的JavaTM 開發環境。它是由澳大利亞墨爾本Monash大學BlueJ小組設計並開發的。
XWiki 【Java開源Wiki系統】
XWiki是一個強大的Java開源的Wiki引擎。它支持一些受歡迎的特性如:
內 容管理(瀏覽/編輯/預覽/保存),
支持附件,
版本控制,
全文本搜索,
權 限管理
使用Hibernate進行數據存儲,
RSS輸出與顯示外部的RSS feeds,
多 語言支持,
提供XML/RPC的API,
WYSIWYG HTML編輯器,
導出為PDF
Groovy 腳本支持等等....。
EJBCA 【Java開源網路伺服器端組件】
EJBCA是一個全功能的CA系統軟體,它基於J2EE技術,並提供了一個強大的、高性能並基於組件的CA。EJBCA兼具靈活性和平台獨立性,能夠獨立使用,也能和任何J2EE應用程序集成。
JXTA 【Java開源其它項目】
Sun微系統公司公開了旨在建立P2P(Peer to
Peer)通用技術基礎的JXTA計劃。JXTA技術是網路編程和計算的平台,用以解決現代分布計算尤其是點對點(P2P)計算中出現的問題。
JXTA將建立核心的網路計算技術,提供支持在任何平台、任何地方以及任何時間實現P2P計算的一整套簡單、小巧和靈活的機制。JXTA首先將歸納目前
P2P的功能特別,而後建立核心的技術來表達目前的P2P計算的局限性。其重點是創建基本的機制,而具體的策略選擇權則交給應用的開發者。JXTA將充分利用XML、Java等開放技術,使得UNIX操作系統更強大和靈活,比如利用管道(Pipes)傳輸Shell命令實現復雜的計算任務。JXTA支持
P2P應用的基本功能來建立一個P2P系統,還將努力證實這些可以成為建立更高層功能的基礎構造模塊。JXTA架構可以分為三個層面:JXTA核心層、
JXTA業務層和JXTA應用層。
DWR 【Java開源AJAX框架】
DWR(Direct Web
Remoting)是一個WEB遠程調用框架.利用這個框架可以讓AJAX開發變得很簡單.利用DWR可以在客戶端利用JavaScript直接調用服務端的Java方法並返回值給JavaScript就好像直接本地客戶端調用一樣(DWR根據Java類來動態生成JavaScrip代碼).它的最新版本
DWR0.6添加許多特性如:支持Dom Trees的自動配置,支持Spring(JavaScript遠程調用spring
bean),更好瀏覽器支持,還支持一個可選的commons-logging日記操作.
ZK 【Java開源AJAX框架】
ZK是一個Ajax Java Web框架,利用少量代碼就能夠開發出擁有Rich
UI的Web應用。ZK提供基於XUL的標記語言和事件驅動的組件,可以讓你像開發桌面應用程序一樣簡單。支持EL表達式和腳本語言包括:JavaScript、Ruby和Groovy等。支持Annotation及數據綁定。集成Google
Maps、FCKeditor、DOJO以及Timeline。
㈣ 如何畫架構圖
簡單說,前面的回答說用PPT或者用PlantUML或者用visio,解決的都是個「用什麼工具畫」的問題,不是「怎麼畫」的問題。「怎麼畫」是個方法問題,在白紙上或者黑板上畫也是一樣的方法,有了方法才談得上工具。直接上結論。程序員必讀之軟體架構 (豆瓣) 這本書就是解決「怎麼畫」這個問題的。需要哪些圖呢?第35章:「C4:語境、容器、組件和類」,這就是你需要的4個層面由高到低逐步細化的圖。前面 @林孟同學給的那個圖問題在哪兒呢?就在它沒有統一的抽象層面。同一個圖上既在講大塊業務(考試中心業務),又在講具體服務(時間服務),也在講對象設計(DAO),還在講具體技術(JDBC)。沒有統一抽象層面的圖,就沒法針對特定讀者,業務看不懂,技術看了不過癮。程序員必讀之軟體架構 (豆瓣) 這本書很不錯。讀它,這個問題就解決了。
㈤ 請問從java工程師成為一名架構師的學習路線是什麼樣的
對於java工程師成為一名架構師如何進階學習及掌握應有的技能體系在這做出一些建議!同時大家可以到知乎專欄「動力節點視頻教程資源庫」看更架構師的文章,歡迎大家來關注閱讀!
可以驕傲地說,Java程序員應該是這個世界上最為廣泛的工程師群體。在最新的2019年3月編程語言排行榜中,第一寶座依舊是Java,可見Java強大的生命力。不過,我發現身邊不少程序員朋友,對Java的掌握僅限於使用 Java 語言和 Java 生態里的技術框架做功能實現,很少有人去了解 Java 的底層動力 JVM 的運營機制,以至於技術水平和認知停滯不前,最終成了CRUD 研究員。
同時也為那些針對2到5年及以上工作經驗的想在技術上提升到一定高度甚至想往架構師發展的Java程序員提供一份系統詳情的架構進階路線,從廣度到深度架構圖還比較全面的,裡面的技術包涵了Java高並發、微服務、源碼分析、源碼分析、高性能、分布式等技術,這些也是目前互聯網企業比較常用的技術,那麼來詳細看看。
JVM與性能優化
JVM作為Java語言的基礎,雖然平時工作中真正運用到的時候可能並不多,一個程序員想要上升到高級層次,那就必須知道Java到底是怎麼運行的,這就逃不開JVM。想要告別增刪改查和簡單開發,而是去做Java性能分析和調優工作,那麼,Java虛擬機絕對是一把助力的利劍。學習Java虛擬機的原因,本質是讓你了解Java程序是如何被執行且優化的。這樣一來,你才可以從內部入手,達到高效編程的目的。同時,你也可以為學習更深層、更核心的Java技術打好基礎。
框架源碼解讀
我認為有三個維度來說明:這個框架是為了解決什麼問題而誕生的?這個框架的核心思想是什麼?這個框架適合應用到哪些場景?說到思想,我覺得編程的靈魂就是思想,沒有思想的編程和咸魚沒什麼區別。「不要重復造輪子」,當時聽了趕腳這句話挺高大上的,現在我認為這句話只能在某一方面是正確了。首先我來說一下為什麼要學會造輪子--因為你會造輪子後,用別人的輪子時才會明白其原理,用的時候才會得心應手,如果你對一個框架的理解只是停留在用,用的多熟練的階段的話,那麼你就是一個「碼畜」,別人隨時可以替代你。或許有人會說,項目時間緊根本不允許你寫一個輪子、你寫的還有那些大牛們寫的好嗎等理由反駁。但我想說的是:我沒說項目中非得用自己寫的輪子,自己寫的輪子不一定要和別人比,因為造輪子的目的是要理解這些輪子的思想。說這么多其實就是想告訴大家學習框架要理解框架的底層的原理,要掌握的就是最常用的原理。
分布式架構
近年來隨著服務體系的不斷龐大以及用戶量的迅速增長,傳統單一應用架構已經無法滿足我們系統的需求,尤其是大型互聯網系統的快速發展,各種靈活多變的系統架構模型層出不窮。分布式的處理方式越來越受到業界的青睞——計算機系統正在經歷一場前所未有的從集中式向分布式架構的變革。同時分布式也成為Java程序員面試不可缺少的一部分知識,尤其是對現在工作2到5年的工程師來說分布式無疑不是一項加分技術。
微服務架構
雖然很多文章都說微服務架構是復雜的、會帶來很多分布式的問題,但只要我們了解這些問題,並找到解法,就會有種撥開雲霧的感覺。微服務架構也不是完美的,世上沒有完美的架構,微服務架構也是隨著業務、團隊成長而不斷演進的。最開始可能就幾個、十幾個微服務,每個服務是分庫的,通過 API Gateway 並行進行服務數據合並、轉發。隨著業務擴大、不斷地加入搜索引擎、緩存技術、分布式消息隊列、數據存儲層的數據復制、分區、分表等!
總結
不管是學什麼技術,最終都需要你進行歸納、整理,才能把所學的東西變為自己的。工作為什麼要寫日誌,平時學習為什麼要寫博客,其實就是在構建自己的知識體系。在學習的過程中多做筆記,多做總結,習慣一旦形成,久而久之,便會印在你的腦海里,你下次再被問到這一問題時,你就可以用自己之前總結過的內容來回答。
㈥ 程序員數據結構結構圖用什麼軟體
畫流程圖最重要的是反映你的思路,能夠讓別人一目瞭然的知道整個程序的過程。
我用過的流程圖工具有PPT、Axure,WPS,Visio、MindManager、億圖圖示專家(Edraw Max億圖圖示)等。
PPT畫流程圖,比如用它的SmartArt,做簡單的流程演示,還是可行的。但無論從視覺美感、還是承載流程步驟的規模,PPT都沒法和Edraw Max億圖圖示相比,WPS誰用誰知道。
用Axure畫流程圖,對我來說,太浪費時間,布局費力,反正我用不來。Mindjet畫流程圖,也用的是思維導圖的方式,所以沒有啥可比性。
我想說的是Visio和Edraw Max億圖圖示。
1.Viso 是微軟的一款流程圖軟體,功能強大。只要你水平強大,基本能做出任何你想要的東西,功能強大,就是有點不美觀,也很貴。
2.億圖圖示。也是一款網路圖繪制軟體,國產,比Viso佔用內存小,但是功能更強大,最新版本的界面已經很流暢漂亮,關鍵是他的圖庫相比visio強大很多,畫起來很有逼格。
㈦ 如何才能修煉成一名不可替代的程序員,避免裁員危機
程序員,就是從事程序開發、程序設計、程序維護的專業人士。
作為一種專業性極強的技術性專業,程序員的工作難度非常高,只有專業技能水平高超的人才能在這個領域獲得良好的發展前景。……那些實力不足的人,只能被最終淘汰。
因此,要想在程序員這一行里成為不可替代的人,避免自己被淘汰出局的情況,就必須具備以下幾方面能力:
1,高人一籌的專業技能。
在職場上,要想確保自身生存,就必須具備一項專業技能。……要想確保自己不被淘汰,就必須具備高人一籌的專業技能水平。
因此,要想讓自己成為不可替代的程序員,要想讓自己避免被淘汰的情況,就必須確保自己的專業技能水平高人一籌。
2,強大的羅輯思維能力。
程序,是一個邏輯性極強的系統。
一個程序的各個部分之間、各項功能之間,都存在著極強的關聯,也擁有著非常強的邏輯關系。
因此,要想編寫出性能優異的程序,就必須擁有極強的邏輯思維能力。……這是確保自己擁有更強實力、確保自己不被淘汰的重要能力。
3,高超的數學水平。
程序的表象,是一段代碼。而其核心,則是數學模型,是具體的演算法。……只有具備高超的數學水平,才有能力編寫出演算法精妙、邏輯嚴謹的程序來。……這是自己具備更高水準的關鍵因素。也是自己高人一籌,不可替代的關鍵因素。
4,精通至少一門編程語言。
編程語言是程序員在編程時所用的工具。……只有熟練掌握手中的工具,才能讓自己編寫出優秀的軟體。……編程語言有很多種,一個程序員不可能面面俱到。……但是一個合格的程序員必須掌握至少一門編程語言,這就是自己工作時最得力的工具。……運用這個工具,自己就可以編寫出優秀的軟體,就可以獲得更好的業績,最終成為不可替代的優秀人才了。……自己也就不可能被淘汰了……
㈧ 北大青鳥設計培訓:程序員是怎樣突破瓶頸成為大神的
程序員界的大牛,概括來說分兩種:一種是天生有天賦,對程序的思維想法,就是比一般人精準敏銳;一種是沒有天賦,但十分努力刻苦,日復一日年復一年,最終成為對技術非常嫻熟的人。
第一種就不用說了,先天資本。
那對於第二種情況,青島計算機學校http://www.kmbdqn.cn/介紹要怎樣少走彎路,成為一名「受人敬仰」的大神呢?很多剛踏入程序世界的新人都會有這種困惑:「每天的工作就是在框架的基礎上把需求轉換為代碼,一沒有學到業務,二沒有學到技術!那是非常的抑鬱!」這很普遍,畢竟公司是要得到最大的效益,而不是專門給你機會觀摩學習。
一般的公司都會將分工細化,做到缺少了誰都可以。
做到提高開發效率,降低開發成本。
可是作為程序員來講,這樣對個人的成長非常的不利。
但剛接觸的新人,又怎樣去提升自己,最後走上晉升大神的的路呢?當然,前提是,你已經是名程序員了。
1、帶著自己的腦子寫代碼書寫代碼的過程中,必然會涉及到很多的老代碼的維護。
很多人可能就在原有的基礎上,修修剪剪。
卻不去考慮改變其包結構,抽象公用方法。
或者重構代碼。
就像一個盆景,長出了雜亂無章的枝丫,你只想著修剪掉不屬於它的那部分,卻不想自己動手去修改,長成自己想要的模樣。
思考是必須的,只有在思考的過程中人才會成長起來。
想辦法去奉獻智慧,人才可能慢慢的成長!不思考,就跟猴子掰玉米一樣,掰一個扔一個,沒有積累,體驗是過程給予的,而經驗是需要思考才能得出的。
在簡單的事情中總結出一些規律和方法,最後形成自己的方法論。
多思考,慢慢你的思維和看事情的方式都會變了,看問題也不會只停留在表面,經驗也就長在了你的身體裡面。
2、拓寬知識層這種擴寬可以從兩方面進行。
一種是從書籍中汲取。
看些自己現有知識以外的書籍,從中獲取靈感。
也可以看看最新行業動態,語言軟體又發生了哪些變化。
另一種是學習別人的成果。
在平時工作中,不同的框架,花上一天的時間看看架構圖並且理解其中關鍵環節的配置調用就可以了。
但是如果想提高自己的架構水平,還是不斷的看別人的源代碼,吸取別人思想的精華部分,然後自己在工作中去發揮智慧。
3、有沒有和高手過招其實網上很多技術blog寫的都很好,尤其那些持續更新的架構和技術的程序員們更是值得學習。
找到他們,和他們討論一個方面的技術。
真正的高手都是謙虛的,討教一些他們知道的東西。
這幾乎是最快的進階方法。
就像老司機聽聲音就能知道車哪裡出毛病一樣,新手得費半天勁還花冤枉錢。
找一個行業內的人帶著學習,等於是站著巨人的肩膀上,獲得經驗的效率自然提高了。
自己一個人摸爬滾打,很容易撞的頭破血流,想想如果有人能在旁邊指點一下,會不會成長的更快?找個有經驗的人來帶你,未必要多有名氣,但是要經驗豐富,願意分享。