自學(xué)java與java培訓(xùn)該如何選擇
從事IT培訓(xùn)行業(yè)這些年,身邊經(jīng)常有朋友來咨詢,問現(xiàn)在是否可以加入這個高薪行業(yè),Java學(xué)習(xí)難不難,需要哪些條件?
在軟件開發(fā)設(shè)計行業(yè)當(dāng)中,使用**多的編程語言就屬Java軟件開發(fā)了,很多人都想在Java編程開發(fā)領(lǐng)域?qū)で笠环莨ぷ鳌?/span>
Java是當(dāng)前世界上比較流行的計算機(jī)編程語言,Java徹底改變了人們的生活,國內(nèi)的開發(fā)人才需求量仍然在不斷的增長,主要原因還是在于移動互聯(lián)網(wǎng)的快速發(fā)展,衍生出一大批的新生企業(yè),創(chuàng)業(yè)公司,預(yù)計在未來5年內(nèi)Java軟件開發(fā)人才的需求將會遠(yuǎn)大于供給,其中java程序員、java工程師**為缺乏。
自學(xué)java與java培訓(xùn)是兩個繞不開的話題,兩者的區(qū)別,前者知識是自己搜尋的,買書看或者網(wǎng)上找視頻看,而后者,技術(shù)知識是老師教的,作為一個普通大學(xué)生實際上任何人都能夠自學(xué),只不過聰明程度和堅持的時間長短不同,花費(fèi)的時間長一點(diǎn)短一點(diǎn)而已。
學(xué)習(xí)關(guān)乎到時間和金錢,沒有效果和質(zhì)量的培訓(xùn),其實是沒有任何意義的。Java培訓(xùn)班有哪些呢?市面上的Java培訓(xùn)良莠不齊,選擇時應(yīng)該慎重些。Java致力于打造符合企業(yè)需求的全能型人才。課程定位定位中高級JAVA開發(fā)工程師,課程內(nèi)容涉及面廣,內(nèi)容深。課程涵蓋了Java、Web,數(shù)據(jù)庫,企業(yè)流行框架,Java等企業(yè)**佳實踐、云計算大數(shù)據(jù)課程、內(nèi)容由淺入深,剖析原理,讓學(xué)員掌握實用技術(shù),做企業(yè)和社會需要的稀缺人才。
此外,Java培訓(xùn)將為你提供就業(yè)保障,開設(shè)有就業(yè)指導(dǎo)課,設(shè)有專門的就業(yè)指導(dǎo)老師,在畢業(yè)前期,畢業(yè)之際,就業(yè)老師會為你做專門的就業(yè)指導(dǎo),更有職業(yè)素養(yǎng)課程,不僅將你打造成Java開發(fā)技術(shù)達(dá)人,更是一位懂得職場之道的合格就業(yè)者。還有豐富的Java學(xué)習(xí)視頻免費(fèi)為你提供學(xué)習(xí)。
JAVA 課程
JAVA 課程
一、課程簡介
??學(xué)士后java軟件工程師課程是專門針對大專或以上學(xué)歷,在職、待業(yè)人群 精心設(shè)計、打造的教育培訓(xùn)產(chǎn)品。學(xué)習(xí)的方法也是非常的立體,線上線下相結(jié)合,小班面授,面授的更是企業(yè)所需的技術(shù)和經(jīng)驗。每一位老師都是有真 正的實戰(zhàn)經(jīng)驗,經(jīng)歷過重重的考核才能成為我們的技術(shù)老師。豐富的實戰(zhàn)經(jīng)驗和教學(xué)經(jīng)驗可以把你快速的訓(xùn)練成實用型的技術(shù)人才。
學(xué)士后java軟件工程師課程學(xué)成之后也得到了勞動與人力資源社會部的認(rèn)可 ,學(xué)員**考試后可獲得承認(rèn)的java軟件開發(fā)認(rèn)證證書。
二、培養(yǎng)目標(biāo)
1、精通JavaEE平臺開發(fā)的java軟件工程師,能夠勝任各種行業(yè)的企業(yè)級軟 件開發(fā)工作;
2、具備一年以上軟件開發(fā)經(jīng)驗;
3、熟悉java軟件開發(fā)流程;
4、良好的語言表達(dá)、溝通能力、工作責(zé)任心和團(tuán)隊意識。
三、課程設(shè)計
四、勝任職位
java大數(shù)據(jù)、Java(JavaEE)工程師、.NET軟件工程師、外包開發(fā)工程師、網(wǎng) 站設(shè)計和開發(fā)工程師、數(shù)據(jù)庫工程師、ERP/CRM/OA/B2C開發(fā)應(yīng)用工程師、系統(tǒng)分析設(shè)計工程師、文檔工程師
五、招生對象
年滿20周歲,大專及大專以上學(xué)歷
?適合大學(xué)生、在職提升、轉(zhuǎn)行或待業(yè)人群等有志于進(jìn)入IT軟件行業(yè)發(fā)展的 人群。
ThinkTemplate模板引擎的設(shè)計和使用方法
>
在php開發(fā)的過程中,我們會接觸到很多的模板引擎,包括FastTemplate、SmartTemplate、Smarty、tinybutstrong等,通常都是為了滿足MVC開發(fā)模式的表現(xiàn)層需要,讓顯示和邏輯可以更好的分離(當(dāng)然,現(xiàn)在的模板引擎越做越強(qiáng)大,甚至開始介入M)。 有了模板引擎,開發(fā)者可以專注于程序代碼,設(shè)計者可以專注于頁面的布局和視覺效果,不必再擔(dān)心要在模板中嵌入各種程序代碼。本篇介紹了ThinkPHP內(nèi)置的一款模板引擎的設(shè)計原理和使用方法,以及和其它主流模板引擎的一些區(qū)別。
一、ThinkTemplate介紹
ThinkTemplate是一個使用了xml標(biāo)簽庫技術(shù)的編譯型模板引擎,支持兩種類型的模板標(biāo)簽,使用了動態(tài)編譯和緩存技術(shù),而且支持自定義標(biāo)簽庫。ThinkTemplate作為 ThinkPHP框架的一個模板引擎插件提供,也可以獨(dú)立使用,因為ThinkPHP本身的設(shè)計是可以靈活替換模板引擎的。
ThinkTemplate模板引擎的運(yùn)作過程如圖所示:
ThinkTemplate的使用方法非常簡單,直接創(chuàng)建ThinkTemplate對象后進(jìn)行模板變量賦值然后進(jìn)行渲染輸出就行,然后就是定義模板標(biāo)簽和輸出變量,和Smarty的用法比較類似。
$tpl = new ThinkTemplate();
$tpl -> assign(‘vo’,$vo);
$tpl -> display(‘index.htm’);
如果在ThinkPHP框架中使用的話,無需創(chuàng)建ThinkTemplate對象,Action類會自動創(chuàng)建,只需要賦值并輸出就行了。
$this->assign(‘vo’,$vo);
$this->display();
Smarty在渲染模板的時候必須指定模板文件名,在ThinkTemplate中如果不指定模板文件名,會按照系統(tǒng)設(shè)置的規(guī)則進(jìn)行自動定位,例如,當(dāng)前模塊的某個操作可以定位成為以模塊名稱為目錄
下面的一個操作命名的模板文件。在進(jìn)行模板變量賦值的時候,可以對任何變量進(jìn)行賦值,由模板標(biāo)簽來決定輸出何種類型的。并且,賦值具有智能化和批量賦值,默認(rèn)情況下**個參數(shù)是要在模
板中輸出的變量名稱,而第二個參數(shù)是變量的值,但是如果沒有指定第二個參數(shù),那么會對**個參數(shù)進(jìn)行判斷,如果是索引數(shù)組,則自動進(jìn)行批量賦值。例如:
$tmpl = array();
$tmpl[‘var1’] = ‘value1’;
$tmpl[‘var2’] = ‘value2’;
$this->assign($tmpl);
$this->display();
上面代碼會自動賦值兩個模板變量var1和var2,用來在模板文件中輸出。作為安全性考慮,沒有賦值的模板變量是不能用于輸出的,但是有些特殊的模板標(biāo)簽可以輸出系統(tǒng)的常量和系統(tǒng)變量例外,這個我們后面會提到。
二、主要特性
當(dāng)然評判模板引擎的優(yōu)劣并不僅僅在于外表看來的使用方式,更關(guān)鍵的在于內(nèi)在的功能和效率。ThinkTemplate模板引擎的主要特性包括:
? 支持XML標(biāo)簽庫技術(shù)和普通標(biāo)簽定義;
? 支持混合標(biāo)簽定義;
? 生成PHP模板緩存文件;
? 模板文件更新后,自動更新模板緩存;
? 自動定位當(dāng)前操作的模板文件,無需指定;
? 支持編碼轉(zhuǎn)換和Content-Type更換;
? 支持模板變量輸出前綴,避免變量名稱沖突;
? 支持特殊模板變量和常量輸出;
? 支持變量組合調(diào)節(jié)器和格式化功能;
? 支持標(biāo)簽庫擴(kuò)展模板功能;
概括來看,我們可以從執(zhí)行速度、模板功能和擴(kuò)展性三個方面來分析。
執(zhí)行速度
要準(zhǔn)確判斷執(zhí)行速度,首先要了解解釋型模板引擎和編譯型模板引擎的區(qū)別。
所謂解釋型就是每次將模板內(nèi)容讀入內(nèi)存,并**正則等方式分析字符串后對預(yù)置的標(biāo)簽進(jìn)行替換,每次加載模板都需要重復(fù)這個過程,tinybutstrong就屬于這種類型。而編譯型模板引擎是在**次執(zhí)行模板文件的時候進(jìn)行一次編譯(相當(dāng)于一次解釋分析過程),然后生成一個編譯后的緩存文件,下次執(zhí)行的時候就可以直接執(zhí)行緩存文件,無需再次編譯。所以,在速度上面,編譯型模板引擎在**次運(yùn)行模板的時候速度會比解釋性模板引擎略微緩慢,是因為有嚴(yán)格的編譯(包括生成緩存文件)過程,這個過程根據(jù)模板引擎的復(fù)雜程度和模板頁面標(biāo)簽多少速度有所不同,而當(dāng)?shù)诙螆?zhí)行的時候,因為**耗時的過程已經(jīng)跳過了,編譯型模板引擎的優(yōu)勢就提現(xiàn)出來了。這也是編譯原理中所謂的“空間換時間”例子。目前大多數(shù)的模板引擎都采用編譯型,但是,是否為編譯型和模板功能并沒有直接關(guān)系,tinybutstrong雖然是解釋型但是功能也相當(dāng)強(qiáng)大。
ThinkTemplate也一樣屬于編譯型模板引擎,具備動態(tài)生成緩存文件的能力,無論是模板文件修改或者是緩存文件被刪除,系統(tǒng)都會重新生成緩存文件。你還可以設(shè)置模板緩存的有效時間,如每隔10分鐘重新編譯模板文件。并且在編譯模板文件的過程中,如果發(fā)現(xiàn)存在很多相同的標(biāo)簽,ThinkTemplate并不會重復(fù)解析,而是會讀取解析緩存。因此,無論在解析還是執(zhí)行上面,效率都是比較高的。
模板功能
模板引擎的一個重要因素就是模板標(biāo)簽的功能。Smarty模板引擎以功能以強(qiáng)大而著稱,標(biāo)簽的易用性和完善性也是模板引擎的關(guān)鍵因素之一,**基本的功能包括注釋、變量輸出、條件控制、包
含文件,而這些功能的體現(xiàn)都是借助于一系列的模板標(biāo)簽。這一部分是設(shè)計模板引擎的關(guān)鍵也是工作量比較大的地方。目前見到的模板引擎標(biāo)簽大致分為特定標(biāo)簽和XML標(biāo)簽兩種類型。
特定標(biāo)簽通常是比較常見的類型,由模板引擎自身定義的一系列標(biāo)簽,用來滿足變量輸出和控制的需要,通常具有私有化規(guī)則,標(biāo)簽類型各不相同,在ThinkTemplate里面,我們稱之為普通模板標(biāo)簽。例如,Smarty中就是使用 {$varname} 來輸出PHP的$varname 變量,TinyButStrong則采用[var.tbl.item1]的方式輸出變量,我也曾看到過其它形式的輸出標(biāo)簽,例如{:=varname} ,當(dāng)然有些模板引擎是設(shè)計為可以定義起始標(biāo)簽的。ThinkTemplate的普通模板標(biāo)簽以“{”和“}”作為開始和結(jié)束標(biāo)識,和Smarty等大多數(shù)模板引擎是一致的,也支持起始標(biāo)簽定義,例如可以在項目配置文件中配置成采用 [$varname] 來輸出模板變量。
ThinkTemplate中的變量輸出也具有Smarty的變量組合調(diào)節(jié)器的功能,例如{$articleTitle|upper|spacify} 。其中調(diào)節(jié)器方法可以是系統(tǒng)函數(shù)或者自定義函數(shù),在ThinkTemplate中還可以設(shè)置禁止在模板中使用的函數(shù)。也可以支持輸出多級對象屬性或者數(shù)組的輸出,例如:{$vo.name.sub} {$array[‘name’][‘sub’]}。
除了輸出模板變量之外,模板引擎通常都會提供一個特殊的標(biāo)簽輸出方式用來輸出一些常量和系統(tǒng)變量,在ThinkTemplate采用 $Think 來輸出一些無需賦值的特殊或者內(nèi)建變量,和Smarty的$smarty保留變量類似。
和其他的模板引擎不同,ThinkTemplate的特定標(biāo)簽僅僅是用于變量輸出功能,而把控制功能和復(fù)雜的標(biāo)簽功能放到XML模板標(biāo)簽里面。XML模板引擎在java領(lǐng)域里面是非常常見的,在PHP模板引擎領(lǐng)域似乎并不多見,但是ThinkTemplate在實現(xiàn)自身的特定標(biāo)簽外,還有效地借鑒了Java的標(biāo)簽庫技術(shù),實現(xiàn)了XML模板標(biāo)簽支持,并且允許自定義標(biāo)簽庫。兩種標(biāo)簽方式的結(jié)合使用,可以讓模板定義更加靈活,這也正是ThinkTemplate模板引擎的特色。
基于某些兼容性考慮,通常在模板文件中可以直接插入php代碼,用來完成模板標(biāo)簽所無法完成或者比較困難的功能。這種方式與標(biāo)簽的互補(bǔ)可以滿足絕大多數(shù)的模板需要。事實上,我在用其他模板引擎的時候,都會經(jīng)常在模板文件中直接添加一些個別的php代碼來輔助。需要注意的是并不是所有的模板引擎都支持在模板中直接寫php代碼。
擴(kuò)展性
任何一個模板引擎的功能都不是為你量身定制的,具有一個良好的可擴(kuò)展機(jī)制也是模板引擎的另外一個考量,Smarty采用的是插件方法來實現(xiàn)擴(kuò)展,ThinkTemplate由于采用了標(biāo)簽庫技術(shù),比Smarty提供了更為強(qiáng)大的定制功能,和Java的TagLibs一樣可以支持自定義標(biāo)簽庫和標(biāo)簽,每個XML標(biāo)簽都有獨(dú)立的解析方法,所以可以根據(jù)標(biāo)簽庫的定義規(guī)則來增加和修改標(biāo)簽解析規(guī)則。在ThinkTemplate中標(biāo)簽庫的體現(xiàn)是采用XML命名空間的方式,
例如:
每個命名空間都有一個對應(yīng)的標(biāo)簽庫XML定義文件,并且還包含有一個用于解析該標(biāo)簽庫的類文件。系統(tǒng)默認(rèn)對cx標(biāo)簽庫進(jìn)行支持,所以在定義cx標(biāo)簽庫的標(biāo)簽時候,可以省略XML的命名空間前綴。當(dāng)系統(tǒng)中存在很多的標(biāo)簽庫的時候,每次編譯都會加載所有的標(biāo)簽庫解析文件,這樣會造成一種浪費(fèi),因為很多情況,我們可能只是使用其中的一個或者二個標(biāo)簽庫。所以,我們還必須在模板頁面實現(xiàn)標(biāo)簽庫引入功能,來告訴模板引擎當(dāng)前模板頁面需要哪些標(biāo)簽庫的支持,從而加載需要的解析類。在ThinkTemplate中,使用tagLib標(biāo)簽來實現(xiàn)這一功能,
例如:,
表示導(dǎo)入html和cx兩個標(biāo)簽庫的支持。如果沒有定義,那么默認(rèn)只是加載cx標(biāo)簽庫。
利用標(biāo)簽庫的特性,我們可以非常方便地擴(kuò)展自己需要的標(biāo)簽,ThinkTemplate正是采用這種機(jī)制來內(nèi)置集成了一些常用的HTML組件標(biāo)簽,
例如:
使用上面的自定義XML標(biāo)簽定義了一個DataGrid組件,省去了復(fù)雜的Html代碼,在模板**次執(zhí)行的時候,模板引擎會把上面的組件標(biāo)簽解析成PHP和Html結(jié)合的代碼,生成緩存文件。ThinkTemplate中包含的Html標(biāo)簽庫中封裝了很多有價值的Html組件。
三、標(biāo)簽使用
變量輸出
格式:{$varname|function1|function2=arg1,arg2,### }
使用例子:
{$webTitle|md5| strtoupper | substr=0,3}
{$number|number_format=2}
在模板文件中可以使用{$info[ name ] }來輸出數(shù)組變量。
同樣,可以使用{$var.key }來輸出對象屬性變量,并且也支持函數(shù)。
系統(tǒng)變量
依然支持函數(shù)使用和大小寫、空格,以Think.打頭,如
{$Think.server.script_name} //輸出$_SERVER變量
{$Think.session.session_id|md5} //輸出$_SESSION變量
{$Think.get.pageNumber} //輸出$_GET變量
{$Think.cookie.name} //輸出$_COOKIE變量
系統(tǒng)常量
{$Think.const.__FILE__}
{$Think.const.MODULE_NAME}
或者直接使用
{$Think.__FILE__}
{$Think.MODULE_NAME}
特殊變量
由ThinkPHP系統(tǒng)定義的常量
{$Think.version} //版本
{$Think.now} //現(xiàn)在時間
{$Think.template|basename} //模板頁面
{$Think.LDELIM} //模板標(biāo)簽起始符號
{$Think.RDELIM} //模板標(biāo)簽結(jié)束符號
模板注釋
模板支持注釋功能,該注釋文字在**終頁面不會顯示,僅供模板制作人員參考和識別。
格式:{/* 注釋內(nèi)容 */ } 或 {// 注釋內(nèi)容 }
說明:在顯示頁面的時候不會顯示模板注釋,僅供模板制作的時候參考。
注意:“{”和注釋標(biāo)記之間不能有空格。
包含模板
當(dāng)頁面需要包含公共文件的時候,可以**下面的模板標(biāo)簽,
格式:{include:Filename }
說明:Filename表示公共文件的名稱(不包含后綴,因為模板文件后綴為可配置),F(xiàn)ilename
默認(rèn)在當(dāng)前目錄下尋找,但是完全支持相對路徑訪問。
例如,下面的格式都是正確的。{include:header } 和 {include:../public/header }。加載公共模板文件后,模板引擎會重新對該頁面中的模板標(biāo)簽進(jìn)行解析,有意思的是你還可以在公共模板中再次包含公共文件,但是一定要注意不能循環(huán)包含。
例如,在header.html文件中包含了menu文件{include:menu },在index.html文件中則包含了header和footer,{include:header }, 這里是首頁的內(nèi)容{include:footer }
在訪問index操作方法的時候,模板首先讀取index文件,并開始解析include:header,在解析header文件的過程中又遇到include:menu標(biāo)簽,又開始解析,解析完成后再解析include:footer標(biāo)簽,在經(jīng)過幾層的嵌套包含解析后index文件**終被解析成一個緩存模板文件。而且,包含文件可以設(shè)置為變量,**下面方式定義:
{include:$include } 其中$include為一個模板變量。
XML標(biāo)簽
基本上,XML標(biāo)簽技術(shù)包含了普通模板有的功能,并且有了一些方面的增強(qiáng)和補(bǔ)充,更重要的一點(diǎn)是新的標(biāo)簽庫技術(shù)更加具有擴(kuò)展性。ThinkTemplate模板引擎內(nèi)置了兩個標(biāo)簽庫實現(xiàn):CX和Html。
要在模板頁面中使用TagLib標(biāo)簽庫功能,需要在開始時候使用taglib 標(biāo)簽導(dǎo)入需要使用的標(biāo)簽,防止以后標(biāo)簽庫大量擴(kuò)展后增加解析工作量,用法如下:
引入標(biāo)簽庫后,就可以使用標(biāo)簽庫定義的標(biāo)簽來定義模板了,例如:
//可以使用下面的模板標(biāo)簽定義。
標(biāo)簽庫使用的時候忽略大小寫,因此下面的方式一樣有效:
實際上,ThinkPHP框架模板引擎會默認(rèn)加載CX標(biāo)簽庫,所以下面的方式效果相同:
并且,默認(rèn)加載的CX庫可以不使用CX命名空間前綴,也就是說,
等效于
對于多重循環(huán)的定義也非常方便:
{$sub.name}
混合標(biāo)簽結(jié)合使用例子:
{$user.name}
{$use.age}
{$user.email}
對于不太復(fù)雜的變量輸出,建議多采用{$var} 方式,因為單純從易用性方面而言,這種方式**簡潔,而且功能也比較完善。
標(biāo)簽庫標(biāo)簽定義
CX標(biāo)簽庫
CX標(biāo)簽庫主要用于輸出ThinkPHP框架的變量、包含文件和實現(xiàn)一定控制判斷。主要有:
include 包含文件支持的標(biāo)簽屬性有 file;
comment 模板注釋 無標(biāo)簽屬性;
iterate 迭代因子輸出,循環(huán)內(nèi)可以結(jié)合 write 標(biāo)簽,支持的標(biāo)簽屬性有 id | name | offset | length | empty;
write 復(fù)雜變量輸出,包括數(shù)組、對象,有函數(shù)支持,支持的標(biāo)簽屬性有 name | PRoperty | key | format | function;
volist 數(shù)據(jù)對象列表輸出,循環(huán)內(nèi)可以結(jié)合 vo 標(biāo)簽,支持的標(biāo)簽屬性有 id | name | offset | length | empty;
vo 數(shù)據(jù)對象輸出,支持的標(biāo)簽屬性有 name | property | format | function;
var 變量輸出,用于普通變量,支持的標(biāo)簽屬性有 name | format | function;
equal 判斷是否相同,支持的標(biāo)簽屬性有 name | property | key | value | function;
notequal 判斷是否不同;
present 判斷是否定義 支持的標(biāo)簽屬性有 name | property | key;
notpresent 判斷是否沒有定義;
Html標(biāo)簽庫
Html標(biāo)簽庫主要用于實現(xiàn)一些Html標(biāo)記的動態(tài)生成和變量封裝,主要有:
select 動態(tài)生成select列表;
checkbox 動態(tài)生成checkbox;
radio 動態(tài)生成radio;
link 動態(tài)加載js或者CSS文件;
imageLink 帶有鏈接的圖片;
imageBtn 圖片按鈕;
mulitSelect 多選組件;
list DataGrid組件;
四、總結(jié)
作為一個模板引擎的設(shè)計,本文只是做一個概要的原理描述和簡單的使用,其中還有很多細(xì)節(jié)方面,例如優(yōu)化解析效率、包含機(jī)制、安全考慮、特殊變量解析、異常處理等。更多關(guān)于ThinkTemplate的內(nèi)容和標(biāo)簽用法可以參考ThinkPHP的在線手冊中的相關(guān)部分。
相關(guān)推薦:
蘇州JAVA培訓(xùn) 蘇州JAVA培訓(xùn)班 蘇州JAVA培訓(xùn)機(jī)構(gòu)
體驗課預(yù)約試聽
倒計時
課程熱線:
客服在線時間:早上9點(diǎn)~下午6點(diǎn),其他時間請在線預(yù)約報名或留言,謝謝!
熱門課程
機(jī)構(gòu)資訊
- 太倉java開發(fā)培訓(xùn)費(fèi)用_太倉JAVA培訓(xùn)
- 昆山哪里有Java實戰(zhàn)培訓(xùn)學(xué)校_昆山JAVA培訓(xùn)
- 常熟學(xué)Java哪個好_常熟JAVA培訓(xùn)
- 蘇州Java培訓(xùn)課程哪個好_蘇州JAVA培訓(xùn)
- 昆山哪里有Java語言培訓(xùn)學(xué)院_昆山JAVA培訓(xùn)
- 昆山Java工程師培訓(xùn)機(jī)構(gòu)哪個好_昆山JAVA培訓(xùn)
- 常熟學(xué)習(xí)Java工程師哪里好_常熟JAVA培訓(xùn)
- 昆山Java編程課程價格_昆山JAVA培訓(xùn)
- 張家港Java開發(fā)培訓(xùn)班學(xué)費(fèi)_張家港JAVA培訓(xùn)
- 太倉Java工程師培訓(xùn)學(xué)院哪里好_太倉JAVA培訓(xùn)