ajax 上傳文件進度條 php文件上傳,如何實現(xiàn)進度條功能?
php文件上傳,如何實現(xiàn)進度條功能?不用這么麻煩,jquery有很多插件就可以實現(xiàn)上傳文件進度的樣式,可以使用下 ps:既然你這么個性,我就給你說說實現(xiàn)的原理,具體細節(jié)你自己去弄吧.普通的頁面訪問全是
php文件上傳,如何實現(xiàn)進度條功能?
不用這么麻煩,jquery有很多插件就可以實現(xiàn)上傳文件進度的樣式,可以使用下 ps:既然你這么個性,我就給你說說實現(xiàn)的原理,具體細節(jié)你自己去弄吧.普通的頁面訪問全是同步的,就是 請求--gt反饋,而進度條需要的實時的數(shù)據(jù),所以普通頁面是實現(xiàn)不了這個功能的,得需要借助異步ajax周期獲取進度數(shù)據(jù),這個數(shù)據(jù)的來源當然就是服務器端發(fā)送的了,這樣就遇到了一個嚴重的問題,php獲取不了文件傳送過程中的狀態(tài).幸好,php的創(chuàng)始人寫了一個APC擴展(另外一個擴展是uploadprogress),利用擴展的語法,加上ajax,使用js操作頁面的dom對象,就實現(xiàn)了進度條.你明白了原理,你也很難做出來,哎.
如何系統(tǒng)的學習JAVA?
java的整體生態(tài)和積累實在是太大了。95年至今20多年的積累,幾乎涉及到計算機軟硬件的方方面面。我暫且就認為,提主所說的精通,是指jdk本身和一些必要的數(shù)據(jù)結(jié)構(gòu)以及常用框架和面向?qū)ο蟮幕舅枷氚伞?/p>
從11年初至今,一直在學習java相關(guān)的知識。其中也走了不少彎路。按自己的積累,給出提主一個自認為合理且有一定深度的學習路線。大致分下面幾個階段吧。
1.首先應盡可能的打牢基礎的數(shù)據(jù)結(jié)構(gòu)和簡單的算法基礎。
可以去快速的學習一些簡單的小型系統(tǒng),來滿足軟件學習的興趣和初期成就感。但,一定要回過頭,仔細的鞏固數(shù)據(jù)結(jié)構(gòu)基礎和簡單算法。類似于這種書就可以。
2.熟練使用Java類庫和java第三方工具框架。
學習使用java的語法,嘗試理解Java語法設計的邏輯。熟練掌握jdk類庫本身,以及各種第三方類庫工具包和第三方框架的簡單使用。這里學習的同時,推薦看看《設計模式》,《代碼整潔之道》,《spring源碼解讀》,《Spring揭秘》等這一類的書集。
3.理解學習jdk類庫本身的應用源碼實現(xiàn)和主流第三方框架的源碼和架構(gòu)設計。
比如jdk本身的數(shù)據(jù)結(jié)構(gòu)二叉樹,紅黑樹,treemap,以及異步包的unsafe,同步阻塞隊列,call-future等等包源碼,以及線程基礎類的實現(xiàn),各個類庫設計的結(jié)構(gòu)和設計模式。吃透第三方框架的設計思想,理解學習第三方框架的核心源碼。
當然,這里面可能會涉及到其他的事務,分布式協(xié)議等,這里不再展開。這個過程并非一朝一夕,可能需要大量的時間和技術(shù)感悟。當然,《設計模式》,《代碼整潔之道》,《spring源碼解讀與設計詳析》,《Spring揭秘》等等這一大類書,在這個過程可以理解大差不差了。
4.理解jdk,jre即jvm原理和實現(xiàn)。
這里我推薦看下葛老師的《實戰(zhàn)java虛擬機》,里面講解比較偏實操。容易上手理解。
首先,可以從jdk自帶的工具學習來入手。
比如:jstat,jmap,jstack,jps,jdb.......甚至還有直接可以窺視運行期間實際內(nèi)存數(shù)據(jù)的HSDB。當然,作為學習初步,我們只需要理解常用的幾個命令,并知道其代表的意義即可。畢竟,第三方監(jiān)控工具,包括jdk本身也提供了3個可視化的監(jiān)控。
其次,理解jvm的運行加載原理,搞懂class文件結(jié)構(gòu)。
這個過程我們可以借助之前會用的監(jiān)控工具,理解jvm加載的基本原理??梢詤⒖脊俜礁鱾€版本的jvm標準,學習看懂class文件。在此基礎上可以使用如classpy等工具,方便我們直接閱讀class文件。也可以試試支持class字節(jié)碼級別的單步調(diào)試工具。甚至,可以嘗試用用jvm匯編編碼工具。
接下來,理解jvm的垃圾回收機制發(fā)展歷史和各個主流垃圾回收器的工作原理。
這個過程其實非常復雜。垃圾回收器有各種串行,并行,新聲代/swap和老年代,以及回收警戒線,full觸發(fā)條件,各種個樣的基本參數(shù)和不怎么用的超參數(shù),以及G1的H區(qū),ZGC等等。。。還好的是,GC并不屬于jvm官方規(guī)范的一部分。
然后,動手做一些jvm的實踐和實戰(zhàn),
比如,jvm常見的故障排查和故障總結(jié),性能調(diào)優(yōu),熱加載,class字節(jié)碼的動態(tài)操作,asm等。
最后,可以嘗試實現(xiàn)自己的jvm。(當然這個步驟,對很多同學來說不是必須了)
這里我推薦幾本書,也是徹底搞懂jvm規(guī)范的學習路徑。最好自己實現(xiàn)垃圾回收器。
周老師的《深入理解Java虛擬機》。
接下來是《深入嵌入式java虛擬機》和配套源碼。這個cldc的jvm源碼只有1M多。目前在oracle的官網(wǎng)上,仍然可以下載。是一個設計非常精簡的jvm實現(xiàn)。
接下來,可以去閱讀《自己動手寫java 虛擬機》。這本書的jvm實現(xiàn)是采用go語言編寫。當然其中也有很多設計并不是非常合理。但基本都遵循了jvm規(guī)范。
這個時候就可以去看看github上各種jvm的開源實現(xiàn)了。有g(shù)o,scalajvm,javainjava,ajvm,python-jvm,lua,各個版本各個不同的jvm實現(xiàn)。
當然,這些實現(xiàn)都只是基本原理。
后面推薦你去看《實戰(zhàn)hotspot》豹子書,關(guān)注高級語言虛擬機的圈子。
當然,垃圾回收的書籍比較少,這里還是推薦給你垃圾回收的經(jīng)典書《The Garbage Collection Cookbook》。實際上對新的垃圾回收算法有興趣,可以去知乎搜索相關(guān)的論文和GC算法開源實現(xiàn)的demo。
5.當然,我的建議只是針對Java本身。
真正要達到完全學好java生態(tài),軟件工程,計算機網(wǎng)絡,大數(shù)據(jù)基礎知識,mahuot,sparklib,分布式搜索架構(gòu),各種消息中間件,緩存中間件,數(shù)據(jù)庫,DNS/CDN。。。。。這些都是做互聯(lián)網(wǎng)應用,避無可避的。
只能建議,通用知識熟練,鉆研方向精通,相關(guān)生態(tài)了解。
由于提問是針對java本身。我就不再展開說其他具體方向了。描述的是大的技術(shù)方向,并沒有其他答主那樣,具體去討論語法糖這種級別。希望對提主有所幫助。
有任何問題,歡迎關(guān)注回復,與我討論。謝謝。