前后端技術(shù)分享學(xué)習(xí) JAVA前端和后端怎么去選擇?
JAVA前端和后端怎么去選擇?謝謝你先邀請(qǐng)我。Java前端和后端don 在早期,不需要太清楚,因?yàn)槟憧梢?根本說不出工作中的位置。個(gè)人定位完全可以從一個(gè)全棧工程師開始。什么是全棧工程師?服務(wù)器、網(wǎng)絡(luò)
JAVA前端和后端怎么去選擇?
謝謝你先邀請(qǐng)我。Java前端和后端don 在早期,不需要太清楚,因?yàn)槟憧梢?根本說不出工作中的位置。
個(gè)人定位完全可以從一個(gè)全棧工程師開始。什么是全棧工程師?
服務(wù)器、網(wǎng)絡(luò)和主機(jī)環(huán)境需要了解哪些模塊可能發(fā)生故障及其原因,并且能夠 不要想當(dāng)然地認(rèn)為增加資源就能解決所有問題。需要知道如何使用操作系統(tǒng)、云存儲(chǔ)和網(wǎng)絡(luò)資源,了解數(shù)據(jù)冗余和可用性。了解應(yīng)用程序的大小如何限制硬件。還有多線程和競態(tài)條件,這些在開發(fā)機(jī)器上往往不會(huì)遇到,但在真實(shí)的部署環(huán)境中卻無處不在。全棧工程師還必須能夠很好地與DevOps配合工作。他們?cè)O(shè)計(jì)的系統(tǒng)應(yīng)該提供有用的錯(cuò)誤消息和每日日記功能,以便DevOps可以及時(shí)獲得這些信息并采取有價(jià)值的行動(dòng)。數(shù)據(jù)建模如果數(shù)據(jù)模型有缺陷,往往需要在業(yè)務(wù)邏輯和更高層使用難看的代碼來彌補(bǔ)數(shù)據(jù)模型無法覆蓋的死角。知道如何建立合理的范式關(guān)系模型,有完善的外鍵、索引、視圖、查詢表等。還要熟悉非關(guān)系型數(shù)據(jù)的存儲(chǔ),知道非關(guān)系型數(shù)據(jù)庫在哪些方面超越了關(guān)系型數(shù)據(jù)庫。業(yè)務(wù)邏輯這是系統(tǒng)應(yīng)用價(jià)值的關(guān)鍵。掌握扎實(shí)的設(shè)計(jì)能力(單責(zé)任、開閉、利斯科夫替代、接口分離、依賴注入)。熟悉一些常用的框架。API/Action/MVC這些都與外界如何與業(yè)務(wù)邏輯和數(shù)據(jù)模型交互有關(guān)。會(huì)用很多幀。能夠編寫清晰、一致且易于使用的界面。用戶界面全棧工程師需要:a)知道如何構(gòu)建可讀的布局;b)意識(shí)到藝術(shù)家和平面設(shè)計(jì)師的角色??傊瑢?shí)現(xiàn)一個(gè)好的視覺設(shè)計(jì)方案尤為關(guān)鍵。精通HTML5/CSS。從目前的趨勢(shì)來看,JavaScript將是明日之星。最近這個(gè)領(lǐng)域取得了豐碩的成果(Nodejs,Backbone,Knockout,Angular)。所以,掌握J(rèn)avaScript是必不可少的。用戶體驗(yàn)全棧工程師應(yīng)該認(rèn)識(shí)到,用戶只是希望一切都好。一個(gè)好的系統(tǒng)不會(huì)讓用戶得腕管綜合癥或者眼睛疲勞。全棧工程師可以縱觀全局,將一個(gè)需要8次點(diǎn)擊、3個(gè)步驟的流程簡化為只需一次點(diǎn)擊。知道如何用錯(cuò)誤用戶。如果出了問題,真誠地道歉。有時(shí)候一些無意的錯(cuò)誤信息會(huì)讓用戶覺得莫名其妙。了解用戶和市場需求與系統(tǒng)架構(gòu)有關(guān),但絕不是不可觸及的角色。全棧工程師要明白客戶在使用軟件的過程中需要什么,整個(gè)市場需要什么。否則能寫出高質(zhì)量的單元測(cè)試,甚至今天的JavaScript都能寫出單元測(cè)試。知道如何使用可重復(fù)的自動(dòng)化工具按需構(gòu)建系統(tǒng)、測(cè)試、記錄和部署。系統(tǒng)的安全意識(shí)很重要。您應(yīng)該知道,開發(fā)堆棧中的每一層都可能有薄弱環(huán)節(jié)。
加油,騷年!....
如何系統(tǒng)的學(xué)習(xí)JAVA?
java的整體生態(tài)和積累真的太大了。從1995年到現(xiàn)在20多年的積累,幾乎涉及了計(jì)算機(jī)軟硬件的方方面面。目前,我認(rèn)為主人 s精通是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu),以及通用框架和面向?qū)ο蟮幕舅枷搿?/p>
從11月初開始,我一直在學(xué)習(xí)java相關(guān)的知識(shí)。也有很多彎路。根據(jù)on《設(shè)計(jì)模式》、《代碼整潔之道》、《spring源碼解讀》和《Spring揭秘》等書。
3.了解和學(xué)習(xí)jdk類庫本身的應(yīng)用源代碼實(shí)現(xiàn)以及主流第三方框架的源代碼和架構(gòu)設(shè)計(jì)。
比如jdk本身的數(shù)據(jù)結(jié)構(gòu),比如二叉樹,紅黑樹,treemap,異步包的包源代碼,比如unsafe,同步阻塞隊(duì)列,call-futur《設(shè)計(jì)模式》、《代碼整潔之道》、《spring源碼解讀與設(shè)計(jì)詳析》、《Spring揭秘》等等,都可以在這個(gè)過程中得到理解。
4.了解jdk和jr《實(shí)戰(zhàn)java虛擬機(jī)》,他的解釋更切合實(shí)際。很好理解。
首先可以從jdk自帶的工具學(xué)習(xí)入手。
比如:jstat,jmap,jstack,jps,jdb。.......甚至有一個(gè)HSDB可以在運(yùn)行時(shí)直接窺視實(shí)際的內(nèi)存數(shù)據(jù)。當(dāng)然,作為初步的學(xué)習(xí),我們只需要了解幾個(gè)常用的命令,知道它們代表什么。畢竟第三方監(jiān)控工具,包括jdk本身,也提供了三個(gè)可視化的監(jiān)控。
其次,了解jvm的運(yùn)行和加載原理,了解類文件的結(jié)構(gòu)。
在這個(gè)過程中,我們可以使用之前會(huì)用到的監(jiān)控工具來了解jvm加載的基本原理。可以參考jvm標(biāo)準(zhǔn)的官方版本,學(xué)習(xí)理解類文件。在此基礎(chǔ)上,我們可以使用classpy等工具來方便我們直接讀取類文件。還可以嘗試支持類字節(jié)碼級(jí)別的單步調(diào)試工具。你甚至可以嘗試使用jvm匯編編碼工具。
接下來,了解jvm垃圾收集機(jī)制的發(fā)展歷史,以及各種主流垃圾收集器的工作原理。
這個(gè)過程其實(shí)很復(fù)雜。垃圾收集器有各種串行,并行,新聲代/換和老齡,還有回收警戒線,滿觸發(fā)條件,各種基本參數(shù)和很少用的超參數(shù),還有G1 H區(qū),ZGC等等。。。幸運(yùn)的是,GC不是官方j(luò)vm規(guī)范的一部分。
然后,做一些jvm的練習(xí)和實(shí)戰(zhàn)。
比如jvm常見故障排查和故障總結(jié)、性能調(diào)優(yōu)、熱加載、類字節(jié)碼的動(dòng)態(tài)操作、asm等。
最后,可以嘗試實(shí)現(xiàn)自己的jvm。(當(dāng)然這一步對(duì)于很多同學(xué)來說并不是必須的。)
這里我推薦幾本書,也是徹底理解jvm規(guī)范的學(xué)習(xí)路徑。最好自己實(shí)現(xiàn)垃圾收集器。
周小姐 《深入理解Java虛擬機(jī)》南部。
接下來是《深入嵌入式j(luò)ava虛擬機(jī)》和支持源代碼。這個(gè)cldc的jvm源代碼只有1M多。目前仍可在甲骨文官網(wǎng)下載。是一個(gè)非常精簡的jvm實(shí)現(xiàn)。
接下來,你可以讀《自己動(dòng)手寫java 虛擬機(jī)》。這本書的jvm實(shí)現(xiàn)是用go語言寫的。當(dāng)然很多都不是很合理。但是它們基本上遵循jvm規(guī)范。
這時(shí)候可以看看github上各種JVM的開源實(shí)現(xiàn)。有g(shù)o,scalajvm,javainjava,ajvm,python-jvm,lua,還有各種版本的不同jvm實(shí)現(xiàn)。
當(dāng)然,這些實(shí)現(xiàn)只是基本原則。
推薦你看《實(shí)戰(zhàn)hotspot》豹書,關(guān)注高級(jí)語言虛擬機(jī)的圈子。
當(dāng)然,關(guān)于垃圾收集的書很少,這里我推薦《《The Garbage Collection Cookbook》》,一本關(guān)于垃圾收集的經(jīng)典書籍。其實(shí)如果你對(duì)新的垃圾收集算法感興趣,可以去知乎搜索相關(guān)論文和GC算法的開源演示。
當(dāng)然,我的建議只是針對(duì)Java本身。
真的想完全學(xué)會(huì)。Java生態(tài)學(xué)、軟件工程、計(jì)算機(jī)網(wǎng)絡(luò)、大數(shù)據(jù)基礎(chǔ)知識(shí)、mahuot、sparklib、分布式搜索架構(gòu)、各種消息中間件、緩存中間件、數(shù)據(jù)庫、DNS/CDN。。。。。這些都是互聯(lián)網(wǎng)應(yīng)用,不可避免。
我只能建議我精通一般知識(shí),精通研究方向和相關(guān)的生態(tài)學(xué)理解。
因?yàn)閱栴}是針對(duì)java本身的。我贏了。;其他具體方向不展開。描述了大致的技術(shù)方向,沒有其他答案詳細(xì)討論語法糖的水平。希望對(duì)主有幫助。
如有問題,歡迎關(guān)注回復(fù),與我探討。謝謝你。