1、 啟用FastInfoset(快速信息集)
專注于為中小企業(yè)提供網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)服務(wù),電腦端+手機(jī)端+微信端的三站合一,更高效的管理,為中小企業(yè)武夷山免費(fèi)做網(wǎng)站提供優(yōu)質(zhì)的服務(wù)。我們立足成都,凝聚了一批互聯(lián)網(wǎng)行業(yè)人才,有力地推動(dòng)了上1000+企業(yè)的穩(wěn)健成長,幫助中小企業(yè)通過網(wǎng)站建設(shè)實(shí)現(xiàn)規(guī)模擴(kuò)充和轉(zhuǎn)變。
webservice的性能實(shí)在是不敢恭維。曾經(jīng)因?yàn)閣ebservice吞吐量上不
去,對(duì)webservice進(jìn)行了一些性能方面的優(yōu)化,采用了FastInfoset,效果很明顯,極端條件下的大數(shù)據(jù)量傳輸,性能提高60%,他可以減
少傳輸成本,序列化成本和xml解析成本。
Cxf提供了FastInfoset協(xié)商機(jī)制,實(shí)現(xiàn)類見org.apache.cxf.feature.FastInfosetFeature,在bus中啟用如下配置:
cxf:featurescxf:fastinfoset force="false"http://cxf:features
Force=false表示服務(wù)端和客戶端第一次通信時(shí)會(huì)協(xié)商(通過檢查標(biāo)準(zhǔn)的HTTP頭的Accept字段,值為MIME類型的application/fastinfoset)是否啟用FastInfoset支持,如果客戶端不支持,則不啟用快速信息集。
需要在pom中添加依賴:
dependency
groupIdcom.sun.xml.fastinfoset/groupId
artifactIdFastInfoset/artifactId
version1.2.9/version
typejar/type
scopecompile/scope
/dependency
FastInfoset參考:
client和service端都要配置
2、 啟用gzip壓縮支持
客戶端和服務(wù)器端是否使用Gzip壓縮,也是基于http協(xié)議協(xié)商的(檢查請(qǐng)求
header 中是否有Accept-encoding:gzip)。但是這里需要仔細(xì)權(quán)衡下。對(duì)于小數(shù)據(jù)量,啟用gzip壓縮支持是吃力不討好的行為,
數(shù)據(jù)量很小的時(shí)候,gzip壓縮結(jié)果不明顯,還浪費(fèi)cpu。我們需要權(quán)衡數(shù)據(jù)大小,按照經(jīng)驗(yàn)設(shè)置threshold為10*1024byte。
在bus中啟用如下配置:
bean class="org.apache.cxf.transport.common.gzip.GZIPFeature "
property name="threshold"value10240/value/property
/bean
官方文檔指定是是配置org.apache.cxf.transport.http.gzip.GZIPFeature,但是這個(gè)類會(huì)找不到,可能是官方文檔年久失修,造成一些混亂。官方文檔中也沒提示指定threshold,請(qǐng)參考GZIPFeature源代碼。
參考
3、 使用slf4j代替cxf默認(rèn)日志組件
CXF 默認(rèn)使用java.util.logging作為日志打印組件,其性能我就不過多評(píng)價(jià),也不太便于我們做統(tǒng)一日志管理。目前系統(tǒng)使用的slf4j作為日志打印組件,替換如下:
在classpath中加入META-INF/cxf/org.apache.cxf.Logger文件,文件內(nèi)容為
org.apache.cxf.common.logging.Slf4jLogger
4、 測(cè)試中啟用日志
bus中加入cxf:logging/,請(qǐng)?jiān)跍y(cè)試環(huán)境中啟用有助于debug
補(bǔ)充:
1、如何自定義返回碼:
請(qǐng)求在service中處理遇到異
常后,會(huì)調(diào)用請(qǐng)求鏈中所有攔截器的handleFault方法,參考PhaseInterceptorChain#unwind,然后判斷請(qǐng)求是否單向請(qǐng)
求,如果不是,則構(gòu)建異常請(qǐng)求鏈,并構(gòu)建異常message對(duì)象,調(diào)用異常請(qǐng)求鏈中的handleMessage 方法(參
考:AbstractFaultChainInitiatorObserver)
JAXWSMethodInvoker
轉(zhuǎn)發(fā)soap請(qǐng)求到指定對(duì)象的方法,如果在請(qǐng)求處理失敗,調(diào)用updateHeader方法,把請(qǐng)求時(shí)的soap
header放入返回header中。但是不同通過繼承JAXWSMethodInvoker來實(shí)現(xiàn)清除異常時(shí)soap
header也返回給客戶端的問題,因?yàn)镴AXWSMethodInvoker沒有采用注入的機(jī)制
(JaxWsServerFactoryBean#createInvoker)也沒有chain.異常時(shí),會(huì)由這些攔截器處理返回請(qǐng)求:
setup [ServerPolicyOutFaultInterceptor]
prepare-send [MessageSenderInterceptor, Soap11FaultOutInterceptor]
pre-stream [LoggingOutInterceptor, StaxOutInterceptor]
pre-protocol [WebFaultOutInterceptor]
write [SoapOutInterceptor]
攔截器初始化類OutFaultChainInitiatorObserver
我們可以在異常鏈中加入清理soap header的攔截器SoapHeaderOutFilterInterceptor,清理掉在系統(tǒng)異常時(shí)soapheader中有信息的問題。
返回錯(cuò)誤狀態(tài)碼,在執(zhí)行Soap11FaultOutInterceptor攔截器中被寫死。
message.put(org.apache.cxf.message.Message.RESPONSE_CODE, new Integer(500));
為了使返回?cái)?shù)據(jù)中有錯(cuò)誤碼,需要在Soap11FaultOutInterceptor后面加入攔截器
2、在項(xiàng)目測(cè)試時(shí)遇到一個(gè)報(bào)錯(cuò)
invalid LOC header (bad
signature),這個(gè)問題是因?yàn)閖ar包損壞照成的,雖然構(gòu)建路徑中有這個(gè)jar,但是還是會(huì)出現(xiàn)loadClass失敗,清理maven 本地倉
庫目錄的jar,修改pom(比如加上一空行)讓m2e重新加載。
3、Cxf中有一個(gè)很不錯(cuò)的特性,支持javascript訪問soap
webservice,客戶端訪問類似的請(qǐng)求,會(huì)生成
javascript 客戶端,js編程時(shí)就可以使用此客戶端提供的對(duì)象,啟用此功能需要在引入
import resource="classpath:META-INF/cxf/cxf-extension-javascript-client.xml" /并且在依賴中加入:
dependency
groupIdorg.apache.cxf/groupId
artifactIdcxf-rt-javascript/artifactId
version2.4.1/version
typejar/type
scopecompile/scope
/dependency
對(duì)于Tomcat的處理耗時(shí)較長的問題主要有當(dāng)時(shí)的并發(fā)量、session數(shù)、內(nèi)存及內(nèi)存的回收等幾個(gè)方面造成的。出現(xiàn)問題之后就要進(jìn)行分析了。
1.關(guān)于Tomcat的session數(shù)目
這個(gè)可以直接從Tomcat的web管理界面去查看即可
或者借助于第三方工具Lambda Probe來查看,它相對(duì)于Tomcat自帶的管理稍微多了點(diǎn)功能,但也不多
2.監(jiān)視Tomcat的內(nèi)存使用情況
使用JDK自帶的jconsole可以比較明了的看到內(nèi)存的使用情況,線程的狀態(tài),當(dāng)前加載的類的總量等
JDK自帶的jvisualvm可以下載插件(如GC等),可以查看更豐富的信息。如果是分析本地的Tomcat的話,還可以進(jìn)行內(nèi)存抽樣等,檢查每個(gè)類的使用情況
3.打印類的加載情況及對(duì)象的回收情況
這個(gè)可以通過配置JVM的啟動(dòng)參數(shù),打印這些信息(到屏幕(默認(rèn)也會(huì)到catalina.log中)或者文件),具體參數(shù)如下:
-XX:+PrintGC:輸出形式:[GC 118250K-113543K(130112K), 0.0094143 secs] [Full GC 121376K-10414K(130112K), 0.0650971 secs]
-XX:+PrintGCDetails:輸出形式:[GC [DefNew: 8614K-781K(9088K), 0.0123035 secs] 118250K-113543K(130112K), 0.0124633 secs] [GC [DefNew: 8614K-8614K(9088K), 0.0000665 secs][Tenured: 112761K-10414K(121024K), 0.0433488 secs] 121376K-10414K(130112K), 0.0436268 secs]
-XX:+PrintGCTimeStamps -XX:+PrintGC:PrintGCTimeStamps可與上面兩個(gè)混合使用,輸出形式:11.851: [GC 98328K-93620K(130112K), 0.0082960 secs]
-XX:+PrintGCApplicationConcurrentTime:打印每次垃圾回收前,程序未中斷的執(zhí)行時(shí)間??膳c上面混合使用。輸出形式:Application time: 0.5291524 seconds
-XX:+PrintGCApplicationStoppedTime:打印垃圾回收期間程序暫停的時(shí)間??膳c上面混合使用。輸出形式:Total time for which application threads were stopped: 0.0468229 seconds
-XX:PrintHeapAtGC: 打印GC前后的詳細(xì)堆棧信息
-Xloggc:filename:與上面幾個(gè)配合使用,把相關(guān)日志信息記錄到文件以便分析
-verbose:class 監(jiān)視加載的類的情況
-verbose:gc 在虛擬機(jī)發(fā)生內(nèi)存回收時(shí)在輸出設(shè)備顯示信息
-verbose:jni 輸出native方法調(diào)用的相關(guān)情況,一般用于診斷jni調(diào)用錯(cuò)誤信息
4.添加JMS遠(yuǎn)程監(jiān)控
對(duì)于部署在局域網(wǎng)內(nèi)其它機(jī)器上的Tomcat,可以打開JMX監(jiān)控端口,局域網(wǎng)其它機(jī)器就可以通過這個(gè)端口查看一些常用的參數(shù)(但一些比較復(fù)雜的功能不支持),同樣是在JVM啟動(dòng)參數(shù)中配置即可,配置如下:
-Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
-Djava.rmi.server.hostname=192.168.71.38 設(shè)置JVM的JMS監(jiān)控監(jiān)聽的IP地址,主要是為了防止錯(cuò)誤的監(jiān)聽成127.0.0.1這個(gè)內(nèi)網(wǎng)地址
-Dcom.sun.management.jmxremote.port=1090 設(shè)置JVM的JMS監(jiān)控的端口
-Dcom.sun.management.jmxremote.ssl=false 設(shè)置JVM的JMS監(jiān)控不實(shí)用SSL
-Dcom.sun.management.jmxremote.authenticate=false 設(shè)置JVM的JMS監(jiān)控不需要認(rèn)證
5.專業(yè)點(diǎn)的分析工具有
IBM ISA,JProfiler等,具體監(jiān)控及分析方式去網(wǎng)上搜索即可。
單個(gè)Tomcat的處理性能是有限的,當(dāng)并發(fā)量較大的時(shí)候,就需要有部署多套來進(jìn)行負(fù)載均衡了。
集群的關(guān)鍵點(diǎn)有以下幾點(diǎn):
1.引入負(fù)載端
軟負(fù)載可以使用nginx或者apache來進(jìn)行,主要是使用一個(gè)分發(fā)的功能
參考:
(nginx負(fù)載)
(apache負(fù)載)
2.共享session處理
目前的處理方式有如下幾種:
1).使用Tomcat本身的Session復(fù)制功能
參考(Session復(fù)制的配置)
方案的有點(diǎn)是配置簡單,缺點(diǎn)是當(dāng)集群數(shù)量較多時(shí),Session復(fù)制的時(shí)間會(huì)比較長,影響響應(yīng)的效率
2).使用第三方來存放共享Session
目前用的較多的是使用memcached來管理共享Session,借助于memcached-sesson-manager來進(jìn)行Tomcat的Session管理
參考(使用MSM管理Tomcat集群session)
3).使用黏性session的策略
對(duì)于會(huì)話要求不太強(qiáng)(不涉及到計(jì)費(fèi),失敗了允許重新請(qǐng)求下等)的場(chǎng)合,同一個(gè)用戶的session可以由nginx或者apache交給同一個(gè)Tomcat來處理,這就是所謂的session sticky策略,目前應(yīng)用也比較多
參考:(tomcat session sticky)
nginx默認(rèn)不包含session sticky模塊,需要重新編譯才行(windows下我也不知道怎么重新編譯)
優(yōu)點(diǎn)是處理效率高多了,缺點(diǎn)是強(qiáng)會(huì)話要求的場(chǎng)合不合適
3.小結(jié)
以上是實(shí)現(xiàn)集群的要點(diǎn),其中1和2可以組合使用,具體場(chǎng)景具體分析吧~
Tomcat本身還是運(yùn)行在JVM上的,通過對(duì)JVM參數(shù)的調(diào)整我們可以使Tomcat擁有更好的性能。針對(duì)JVM的優(yōu)化目前主要在兩個(gè)方面:
1.內(nèi)存調(diào)優(yōu)
內(nèi)存方式的設(shè)置是在catalina.sh中,調(diào)整一下JAVA_OPTS變量即可,因?yàn)楹竺娴膯?dòng)參數(shù)會(huì)把JAVA_OPTS作為JVM的啟動(dòng)參數(shù)來處理。
具體設(shè)置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:NewRatio=4 -XX:SurvivorRatio=4"
其各項(xiàng)參數(shù)如下:
-Xmx3550m:設(shè)置JVM最大可用內(nèi)存為3550M。
-Xms3550m:設(shè)置JVM促使內(nèi)存為3550m。此值可以設(shè)置與-Xmx相同,以避免每次垃圾回收完成后JVM重新分配內(nèi)存。
-Xmn2g:設(shè)置年輕代大小為2G。整個(gè)堆大小=年輕代大小 + 年老代大小 + 持久代大小。持久代一般固定大小為64m,所以增大年輕代后,將會(huì)減小年老代大小。此值對(duì)系統(tǒng)性能影響較大,Sun官方推薦配置為整個(gè)堆的3/8。
-Xss128k:設(shè)置每個(gè)線程的堆棧大小。JDK5.0以后每個(gè)線程堆棧大小為1M,以前每個(gè)線程堆棧大小為256K。更具應(yīng)用的線程所需內(nèi)存大小進(jìn)行調(diào)整。在相同物理內(nèi)存下,減小這個(gè)值能生成更多的線程。但是操作系統(tǒng)對(duì)一個(gè)進(jìn)程內(nèi)的線程數(shù)還是有限制的,不能無限生成,經(jīng)驗(yàn)值在3000~5000左右。
-XX:NewRatio=4:設(shè)置年輕代(包括Eden和兩個(gè)Survivor區(qū))與年老代的比值(除去持久代)。設(shè)置為4,則年輕代與年老代所占比值為1:4,年輕代占整個(gè)堆棧的1/5
-XX:SurvivorRatio=4:設(shè)置年輕代中Eden區(qū)與Survivor區(qū)的大小比值。設(shè)置為4,則兩個(gè)Survivor區(qū)與一個(gè)Eden區(qū)的比值為2:4,一個(gè)Survivor區(qū)占整個(gè)年輕代的1/6
-XX:MaxPermSize=16m:設(shè)置持久代大小為16m。
-XX:MaxTenuringThreshold=0:設(shè)置垃圾最大年齡。如果設(shè)置為0的話,則年輕代對(duì)象不經(jīng)過Survivor區(qū),直接進(jìn)入年老代。對(duì)于年老代比較多的應(yīng)用,可以提高效率。如果將此值設(shè)置為一個(gè)較大值,則年輕代對(duì)象會(huì)在Survivor區(qū)進(jìn)行多次復(fù)制,這樣可以增加對(duì)象再年輕代的存活時(shí)間,增加在年輕代即被回收的概論。
2.垃圾回收策略調(diào)優(yōu)
垃圾回收的設(shè)置也是在catalina.sh中,調(diào)整JAVA_OPTS變量。
具體設(shè)置如下:
JAVA_OPTS="$JAVA_OPTS -Xmx3550m -Xms3550m -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100"
具體的垃圾回收策略及相應(yīng)策略的各項(xiàng)參數(shù)如下:
串行收集器(JDK1.5以前主要的回收方式)
-XX:+UseSerialGC:設(shè)置串行收集器
并行收集器(吞吐量優(yōu)先)
示例:
java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseParallelGC -XX:MaxGCPauseMillis=100
-XX:+UseParallelGC:選擇垃圾收集器為并行收集器。此配置僅對(duì)年輕代有效。即上述配置下,年輕代使用并發(fā)收集,而年老代仍舊使用串行收集。
-XX:ParallelGCThreads=20:配置并行收集器的線程數(shù),即:同時(shí)多少個(gè)線程一起進(jìn)行垃圾回收。此值最好配置與處理器數(shù)目相等。
-XX:+UseParallelOldGC:配置年老代垃圾收集方式為并行收集。JDK6.0支持對(duì)年老代并行收集
-XX:MaxGCPauseMillis=100:設(shè)置每次年輕代垃圾回收的最長時(shí)間,如果無法滿足此時(shí)間,JVM會(huì)自動(dòng)調(diào)整年輕代大小,以滿足此值。
-XX:+UseAdaptiveSizePolicy:設(shè)置此選項(xiàng)后,并行收集器會(huì)自動(dòng)選擇年輕代區(qū)大小和相應(yīng)的Survivor區(qū)比例,以達(dá)到目標(biāo)系統(tǒng)規(guī)定的最低相應(yīng)時(shí)間或者收集頻率等,此值建議使用并行收集器時(shí),一直打開。
并發(fā)收集器(響應(yīng)時(shí)間優(yōu)先)
示例:java -Xmx3550m -Xms3550m -Xmn2g -Xss128k -XX:+UseConcMarkSweepGC
-XX:+UseConcMarkSweepGC:設(shè)置年老代為并發(fā)收集。測(cè)試中配置這個(gè)以后,-XX:NewRatio=4的配置失效了,原因不明。所以,此時(shí)年輕代大小最好用-Xmn設(shè)置。
-XX:+UseParNewGC: 設(shè)置年輕代為并行收集??膳cCMS收集同時(shí)使用。JDK5.0以上,JVM會(huì)根據(jù)系統(tǒng)配置自行設(shè)置,所以無需再設(shè)置此值。
-XX:CMSFullGCsBeforeCompaction:由于并發(fā)收集器不對(duì)內(nèi)存空間進(jìn)行壓縮、整理,所以運(yùn)行一段時(shí)間以后會(huì)產(chǎn)生“碎片”,使得運(yùn)行效率降低。此值設(shè)置運(yùn)行多少次GC以后對(duì)內(nèi)存空間進(jìn)行壓縮、整理。
-XX:+UseCMSCompactAtFullCollection:打開對(duì)年老代的壓縮??赡軙?huì)影響性能,但是可以消除碎片
3.小結(jié)
在內(nèi)存設(shè)置中需要做一下權(quán)衡
1)內(nèi)存越大,一般情況下處理的效率也越高,但同時(shí)在做垃圾回收的時(shí)候所需要的時(shí)間也就越長,在這段時(shí)間內(nèi)的處理效率是必然要受影響的。
2)在大多數(shù)的網(wǎng)絡(luò)文章中都推薦 Xmx和Xms設(shè)置為一致,說是避免頻繁的回收,這個(gè)在測(cè)試的時(shí)候沒有看到明顯的效果,內(nèi)存的占用情況基本都是鋸齒狀的效果,所以這個(gè)還要根據(jù)實(shí)際情況來定。
Tomcat的Connector是Tomcat接收HTTP請(qǐng)求的關(guān)鍵模塊,我們可以配置它來指定IO模式,以及處理通過這個(gè)Connector接受到的請(qǐng)求的處理線程數(shù)以及其它一些常用的HTTP策略。其主要配置參數(shù)如下:
1.指定使用NIO模型來接受HTTP請(qǐng)求
protocol="org.apache.coyote.http11.Http11NioProtocol" 指定使用NIO模型來接受HTTP請(qǐng)求。默認(rèn)是BlockingIO,配置為protocol="HTTP/1.1"
acceptorThreadCount="2" 使用NIO模型時(shí)接收線程的數(shù)目
2.指定使用線程池來處理HTTP請(qǐng)求
首先要配置一個(gè)線程池來處理請(qǐng)求(與Connector是平級(jí)的,多個(gè)Connector可以使用同一個(gè)線程池來處理請(qǐng)求)
executor maxThreads="1000" minSpareThreads="50" maxIdleTime="600000"/
connector executor="tomcatThreadPool" 指定使用的線程池
3.指定BlockingIO模式下的處理線程數(shù)目
maxThreads="150"http://Tomcat使用線程來處理接收的每個(gè)請(qǐng)求。這個(gè)值表示Tomcat可創(chuàng)建的最大的線程數(shù)。默認(rèn)值200。可以根據(jù)機(jī)器的時(shí)期性能和內(nèi)存大小調(diào)整,一般可以在400-500。最大可以在800左右。
minSpareThreads="25"---Tomcat初始化時(shí)創(chuàng)建的線程數(shù)。默認(rèn)值4。如果當(dāng)前沒有空閑線程,且沒有超過maxThreads,一次性創(chuàng)建的空閑線程數(shù)量。Tomcat初始化時(shí)創(chuàng)建的線程數(shù)量也由此值設(shè)置。
maxSpareThreads="75"--一旦創(chuàng)建的線程超過這個(gè)值,Tomcat就會(huì)關(guān)閉不再需要的socket線程。默認(rèn)值50。一旦創(chuàng)建的線程超過此數(shù)值,Tomcat會(huì)關(guān)閉不再需要的線程。線程數(shù)可以大致上用 “同時(shí)在線人數(shù)*每秒用戶操作次數(shù)*系統(tǒng)平均操作時(shí)間” 來計(jì)算。
acceptCount="100"----指定當(dāng)所有可以使用的處理請(qǐng)求的線程數(shù)都被使用時(shí),可以放到處理隊(duì)列中的請(qǐng)求數(shù),超過這個(gè)數(shù)的請(qǐng)求將不予處理。默認(rèn)值10。如果當(dāng)前可用線程數(shù)為0,則將請(qǐng)求放入處理隊(duì)列中。這個(gè)值限定了請(qǐng)求隊(duì)列的大小,超過這個(gè)數(shù)值的請(qǐng)求將不予處理。
connectionTimeout="20000" --網(wǎng)絡(luò)連接超時(shí),默認(rèn)值20000,單位:毫秒。設(shè)置為0表示永不超時(shí),這樣設(shè)置有隱患的。通??稍O(shè)置為30000毫秒。
4.其它常用設(shè)置
maxHttpHeaderSize="8192" http請(qǐng)求頭信息的最大程度,超過此長度的部分不予處理。一般8K。
URIEncoding="UTF-8" 指定Tomcat容器的URL編碼格式。
disableUploadTimeout="true" 上傳時(shí)是否使用超時(shí)機(jī)制
enableLookups="false"--是否反查域名,默認(rèn)值為true。為了提高處理能力,應(yīng)設(shè)置為false
compression="on" 打開壓縮功能
compressionMinSize="10240" 啟用壓縮的輸出內(nèi)容大小,默認(rèn)為2KB
noCompressionUserAgents="gozilla, traviata" 對(duì)于以下的瀏覽器,不啟用壓縮
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain" 哪些資源類型需要壓縮
5.小結(jié)
關(guān)于Tomcat的Nio和ThreadPool,本身的引入就提高了處理的復(fù)雜性,所以對(duì)于效率的提高有多少,需要實(shí)際驗(yàn)證一下。
6.配置示例
connector redirectPort="8443"
maxThreads="150"
minSpareThreads="25"
maxSpareThreads="75"
acceptCount="100"
connectionTimeout="20000"
protocol="HTTP/1.1"
maxHttpHeaderSize="8192"
URIEncoding="UTF-8"
disableUploadTimeout="true"
enableLookups="false"
compression="on"
compressionMinSize="10240"
noCompressionUserAgents="gozilla, traviata"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"
...
最后給大家分享Spring系列的學(xué)習(xí)筆記和面試題,包含spring面試題、spring cloud面試題、spring boot面試題、spring教程筆記、spring boot教程筆記、最新阿里巴巴開發(fā)手冊(cè)(63頁P(yáng)DF總結(jié))、2022年Java面試手冊(cè)。一共整理了1184頁P(yáng)DF文檔。私信博主(777)領(lǐng)取,祝大家更上一層樓?。?!
方向很多 就一般Java方向而言(另外還有C++、C#等多種):
Unix/Linux操作系統(tǒng)
Unix開發(fā)環(huán)境
Unix操作系統(tǒng)概述、Unix文件系統(tǒng)、Unix的Kernel和Shell、遠(yuǎn)程登錄的原理、用戶管理命令、基本文件和目錄操作命令、Unix操作系統(tǒng)的特殊字符、使用vi命令編輯文本文件、使用FTP進(jìn)行文件傳輸、初始化文件及環(huán)境變量的配置、Shell腳本及crontab命令。
熟練掌握Sun Solaris Unix系統(tǒng)基本操作命令,能夠勝任Unix/Linux系統(tǒng)下的Java程序開發(fā)和管理工作。
Java SE開發(fā)
Java語言基礎(chǔ)
Java SE 6.0核心語法歸納講解,包括Java語言的特點(diǎn)、環(huán)境的配置、開發(fā)基本命令、類的定義技巧、方法調(diào)用過程、對(duì)象生成原理與內(nèi)存分布、標(biāo)識(shí)符、關(guān)鍵字和數(shù)據(jù)類型、運(yùn)算符和表達(dá)式、Java商業(yè)運(yùn)算要點(diǎn)、流程控制語句、Java數(shù)組和鏈表等算法和數(shù)據(jù)結(jié)構(gòu);同時(shí)掌握Eclipse開發(fā)工具的使用。
熟練掌握J(rèn)ava核心語法
Java面向?qū)ο缶幊?/p>
囊括了Java面向?qū)ο蟮木?,包括面向?qū)ο笕筇匦浴庋b、繼承與多態(tài),各種修飾符在面向?qū)ο笏枷胂碌木C合運(yùn)用,抽象類的特點(diǎn)和使用技巧,面向接口編程的思想和實(shí)踐,內(nèi)部類的應(yīng)用,JDK核心類包括Object、String、Date和Calendar等類的使用和設(shè)計(jì)思想,正則表達(dá)式,自動(dòng)封箱和解箱,Java異常處理,Java集合框架,泛型的語法和使用等。
熟練掌握J(rèn)ava面向?qū)ο笏枷?/p>
Java高級(jí)應(yīng)用
主要研究:中高級(jí)軟件工程師的必修利器——Java反射編程,Java圖形開發(fā)組件的開發(fā)步驟和應(yīng)用技巧,事件模型的設(shè)計(jì)理念和應(yīng)用,Java多線程編程,Java的I/O流,Java網(wǎng)絡(luò)編程等。
熟練掌握J(rèn)ava高級(jí)編程,這部分是作為高級(jí)程序員必須掌握的技術(shù)
XML語法與解析
XML(eXtensible Markup Language)的中文名稱是可擴(kuò)展標(biāo)記語言,是樹形的概念層次結(jié)構(gòu),簡而言之它就是一種保存結(jié)構(gòu)化數(shù)據(jù)的格式。XML作為一種面向內(nèi)容的描述語言,通過基于樹形數(shù)據(jù)結(jié)構(gòu)的層次化概念分類體系模型,在很大程度上彌補(bǔ)了HTML作為網(wǎng)絡(luò)標(biāo)準(zhǔn)語言在概念層次關(guān)系的語義表達(dá)上的不足。
主要學(xué)習(xí)內(nèi)容:XML的意義、語法結(jié)構(gòu)、XML良構(gòu)的規(guī)范;DTD的意義和語法、使用名稱空間的技巧;Schema的意義、語法,使用Java API解析XML;基于Java DOM和SAX的XML處理技術(shù)。
掌握目前最通用的網(wǎng)絡(luò)數(shù)據(jù)格式,并能熟練在商業(yè)開發(fā)中應(yīng)用
數(shù)據(jù)庫編程
Oracle SQL
Oracle公司的Oracle數(shù)據(jù)庫產(chǎn)品是當(dāng)今的高端企業(yè)級(jí)應(yīng)用的主流產(chǎn)品。我們主要學(xué)習(xí):Oracle 10g數(shù)據(jù)庫原理,SQL語句(DDL、DML、TCL、DCL)的語法,項(xiàng)目中經(jīng)典SQL語句重現(xiàn),Oracle數(shù)據(jù)庫函數(shù)包括字符函數(shù)、數(shù)值函數(shù)、日期函數(shù)、數(shù)據(jù)類型轉(zhuǎn)換函數(shù)以及組函數(shù),數(shù)據(jù)庫的設(shè)計(jì),表連接包括等值連接、非等值連接、自連接和外連接,SQL子查詢,Oracle序列對(duì)象在項(xiàng)目中的運(yùn)用,索引及視圖,系統(tǒng)表的應(yīng)用技巧,Oracle SQL的錯(cuò)誤排查及調(diào)優(yōu)解決方案。
掌握Oracle數(shù)據(jù)庫設(shè)計(jì)、操作和開發(fā)
MySQL數(shù)據(jù)庫
MySQL5.0數(shù)據(jù)庫的管理和開發(fā)要領(lǐng),掌握MySQL和Oracle數(shù)據(jù)庫的異同點(diǎn)。
掌握MySql數(shù)據(jù)庫的設(shè)計(jì)、操作和開發(fā)
JDBC編程
JDBC為Java開發(fā)者使用數(shù)據(jù)庫提供了統(tǒng)一的編程接口,使得開發(fā)人員可以使用純Java的方式來連接數(shù)據(jù)庫,并進(jìn)行操作。學(xué)習(xí)的主要內(nèi)容有:JDBC的編程步驟,重要的編程接口,JDBC異常處理,JDBC中使用事務(wù),Batch Updates批量更新,Blob/Clob等新數(shù)據(jù)類型,JNDI,DataSource,數(shù)據(jù)庫連接池的管理等。逐步掌握基于JDBC的Oracle,SQLServer,DB2,MySQL等數(shù)據(jù)庫連接技術(shù)。
熟練掌握J(rèn)ava語言對(duì)各種數(shù)據(jù)庫的連接技術(shù)
系統(tǒng)分析與設(shè)計(jì)
軟件開發(fā)流程及UML
學(xué)習(xí)軟件開發(fā)過程包括瀑布模型、統(tǒng)一開發(fā)過程(USDP),CMMI5級(jí)軟件設(shè)計(jì)規(guī)范,掌握統(tǒng)一建模語言UML,掌握軟件的靜態(tài)建模和動(dòng)態(tài)建模。掌握面向?qū)ο笾袑?duì)象的關(guān)系。
掌握軟件開發(fā)流程及UML
設(shè)計(jì)原則與模式
原則和模式是分析設(shè)計(jì)人員與程序員在開發(fā)過程中經(jīng)驗(yàn)的總結(jié),學(xué)習(xí)模式就是獲取經(jīng)驗(yàn)。
掌握面向?qū)ο蟮脑O(shè)計(jì)原則:“開—閉”原則(OCP)、里氏代換原則(LSP)、依賴倒轉(zhuǎn)原則(DIP)、接口隔離原則(ISP)、組合/聚合復(fù)用原則(CARP)、迪米特法則(LoD)。
掌握主流的設(shè)計(jì)模式:工廠模式(Factory)、單例模式(Singleton)、觀察者模式(Observer)、組合模式(Composite)、狀態(tài)模式(State)等,以及重要的架構(gòu)模式:Dao模式、MVC模式。
掌握面向?qū)ο蟮脑O(shè)計(jì)原則和模式。區(qū)別于激情代碼,重點(diǎn)在于知道軟件為什么要這么做,保證代碼質(zhì)量,保證科學(xué)的開發(fā)流程。按照CMM3的標(biāo)準(zhǔn)來設(shè)計(jì)軟件和管理開發(fā)過程。
Web開發(fā)基礎(chǔ)
HTML
基于瀏覽器的語言HTML:
了解HTML基本文檔結(jié)構(gòu)、常用的meta,掌握HTML列表和表格基本操作,了解HTTP GET和POST請(qǐng)求及響應(yīng)的協(xié)議格式,掌握表單的基本原理,掌握GET和POST提交方式及其區(qū)別,熟練掌握常用表單元素。
掌握企業(yè)級(jí)應(yīng)用客戶端頁面技術(shù)
CSS
CSS意為層疊樣式表(Cascading Style Sheets)用于定義HTML元素的位置和樣式。CSS樣式定義通常存儲(chǔ)在單獨(dú)的文件中, 可以極大提高工作效率。掌握CSS基本語法和CSS選擇器,掌握CSS定位技術(shù),了解CSS內(nèi)外邊距、邊框等特性。
掌握企業(yè)級(jí)應(yīng)用客戶端頁面樣式技術(shù)
JavaScript
基于瀏覽器的動(dòng)態(tài)腳本技術(shù)JavaScript:
JavaScript 被設(shè)計(jì)用來向 HTML頁面添加交互行為,是一種被瀏覽器解釋執(zhí)行的腳本語言。我們可以應(yīng)用JavaScript來響應(yīng)事件, 實(shí)現(xiàn)復(fù)雜交互,驗(yàn)證數(shù)據(jù), 提高系統(tǒng)健壯性,獲取和改變HTML元素及CSS屬性,動(dòng)態(tài)改變頁面外觀,逐步向RIA(Rich Internet Applications)邁進(jìn)。
掌握J(rèn)avaScript基本數(shù)據(jù)類型及其運(yùn)算,熟練使用數(shù)組、日期等,掌握基本的對(duì)于頁面元素的操作,掌握Prototype.js的基本方法,掌握HTML DOM模型,Window對(duì)象,操作Cookie,定時(shí)器等。
掌握企業(yè)級(jí)應(yīng)用客戶端動(dòng)態(tài)腳本技術(shù)
Java Web開發(fā)
Servlet編程
學(xué)習(xí)要點(diǎn):Web服務(wù)器的安裝和配置,編寫及部署Servlet,讀取請(qǐng)求信息,生成響應(yīng)信息,維護(hù)客戶狀態(tài),過濾請(qǐng)求和響應(yīng),監(jiān)聽器的應(yīng)用,對(duì)持久層資源的訪問,使用包裝器攔截響應(yīng),Session與Cookie技術(shù),Servlet互操作,訪問應(yīng)用上下文,MVC架構(gòu)模式的思想和運(yùn)用。
JSP編程
JSP是在Java服務(wù)器端運(yùn)行的頁面,JSP本身就是一個(gè)基于文本的文檔,他不僅可以包含靜態(tài)的HTML內(nèi)容,也可以包含動(dòng)態(tài)的Java代碼,服務(wù)器容器可以將JSP轉(zhuǎn)換成Servlet發(fā)布,并接受請(qǐng)求,提供響應(yīng)。
學(xué)習(xí)內(nèi)容:JSP的特點(diǎn)、運(yùn)行原理及執(zhí)行過程,JSP的腳本元素,JSP指令的分類及詳解,JSP中中常用的動(dòng)作,JavaBean組件在JSP中的應(yīng)用,JSP內(nèi)置對(duì)象詳解,JSP異常處理及提高程序健壯性要領(lǐng),重定向與轉(zhuǎn)發(fā)的本質(zhì)區(qū)別,URL回寫,自定義標(biāo)簽要領(lǐng),EL表達(dá)式,JSTL核心標(biāo)簽庫,字符集的處理和國際化。
Web系統(tǒng)架構(gòu)
著重掌握B/S架構(gòu)、B/S/A/D架構(gòu)下的程序設(shè)計(jì)與開發(fā),深入理解Web MVC架構(gòu)模式,完成Web應(yīng)用的調(diào)試和部署,動(dòng)態(tài)發(fā)布Web應(yīng)用。
Ajax編程
Ajax(Asynchronous JavaScript and XML)由 HTML、JavaScript技術(shù)、DHTML和DOM組成,這一杰出的方式可以將笨拙的Web界面轉(zhuǎn)化成交互性優(yōu)越的Ajax應(yīng)用程序。
主要內(nèi)容:Ajax技術(shù)構(gòu)成及核心編程,發(fā)送請(qǐng)求及處理響應(yīng),Ajax數(shù)據(jù)傳輸格式(純文本、XML及JSON),XMLHttpRequest詳解,Ajax庫及框架介紹。
jquery的事件全部底層化了,不需要用戶操心,js原生事件就全要自己寫自己調(diào)優(yōu)
用firedebug插件來調(diào)試JS需要掌握以下快捷鍵:
直接按Ctrl+Shift+K 三鍵組合直接打開Firebug.這里的調(diào)試網(wǎng)頁主要以修改百度的首頁。
第一:調(diào)試網(wǎng)絡(luò)情況
打開百度首頁。同時(shí)打開 firebug。(Ctrl+shift+K)可以右鍵點(diǎn)擊網(wǎng)絡(luò)標(biāo)簽查看網(wǎng)頁源代碼。
第二:調(diào)試器
調(diào)試器可以查看網(wǎng)頁請(qǐng)求的js腳本以及腳本的定義,以及腳本的變量的實(shí)時(shí)值。如圖:
本文標(biāo)題:javascript調(diào)優(yōu),js代碼優(yōu)化的方法
鏈接URL:http://aaarwkj.com/article12/dsieedc.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供小程序開發(fā)、網(wǎng)站收錄、網(wǎng)站營銷、網(wǎng)站改版、營銷型網(wǎng)站建設(shè)、面包屑導(dǎo)航
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來源: 創(chuàng)新互聯(lián)