搜尋

搜尋結果

Spring Boot 04 - 進入http json api 世代
科技新知
MacauYeah・2024-05-23

本節,我們將會建立一個http服務,提供json api讓程式訪問。 下戴模版 我們跟上節一樣,使用Spring Initializr Maven 下載模版,但細節筆者就不再講啦。Dependency主要選擇 Spring Web Spring Boot DevTools 下載後,可以直接運行測試,可以用指令 mvn test 或經IDE運行。Spring會至少測試下能不能成功取用預設的8080端口。 Controller 我們若要實作 http json api,需要在 spring 中加入一個類,附註為 @RestController ,那方便起見,類名我們也命名為 XXXController 吧。作為示範,我們弄一個 HomeController.java ,裏面有最常見的 http GET, POST功能。 srcmainjavaiogithubmacauyeahspringboottutorialspringbootwebapibasiccontrollerHomeController.java import org.springframework.web.bind.annotation.RestController; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestBody; import org.springframework.web.bind.annotation.RequestMapping; ... other import @RestController @RequestMappingquot;apiquot; public class HomeController @GetMappingquot;someRecorduuidquot; public Map readSomeRecord@PathVariable String uuid return Map.ofquot;retquot;, quot;your uuidquot; uuid; @PostMappingquot;someRecordquot; public Map createSomeRecord@RequestBody Map requestBody HashMap ret = new HashMaprequestBody; ret.putquot;retquot;, quot;got your requestquot;; return ret; HomeController裏,完整的URL 其實為 GET httplocalhost8080apisomeRecorduuid POST httplocalhost8080apisomeRecord URL中的api之後的路徑,都是定義在 HomeController 中,而前半的8080及context path,是使用預設值。在正式環境下,可能隨時會被重新定義。但我們做本地測試,只需要驗證預設值就可以了。 我們真的運行起程式mvn clean compile springbootrun,再使用最簡測試工具進行測試。Windows的朋友,可以選擇Postman作為測試,它有圖形介面。而linux的朋友,請用curl,預設安裝都會有。下列為方便表示測試參數,筆者選用curl。 測試GET,其中1234會自動對應到spring裏的uuid。 curl httplocalhost8080apisomeRecord1234 # return quot;retquot;quot;your uuid1234quot; 測試 POST,其中的 d 參數,會對應 spring裏的 @RequestBody, H 參數則是設定 http header 的意思,我們就使用約定俗成的 json 作為 header 。 curl X POST httplocalhost8080apisomeRecord H quot;ContentType applicationjsonquot; d 'quot;requstquot;quot;did you get itquot;' # return quot;requstquot;quot;did you get itquot;,quot;retquot;quot;got your requestquot; 上面的兩個操作,都回傳了我們輸入的資訊,這代表了我們成功用spring架起了http json api,而且正常讀入資訊。 Test Case 雖然我們可以正常地架起 api,但每次開發都要 postman curl這種工具額外試一次,其實也有一些成本。而且 api 數量變大,或經多次修改後,就重複人手執行,就變得相當討厭。 面對這個問題,筆者會建議寫測試用例,即是Test Case,而且用Spring內置的@SpringBootTest來寫。 產生一個空的Test類,vscode中,最簡單可以Source Action =gt; Generate Test,然後加入這次要測試的參數。 srctestjavaiogithubmacauyeahspringboottutorialspringbootwebapibasiccontrollerHomeControllerTest.java import org.junit.jupiter.api.Test; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc; import org.springframework.boot.test.context.SpringBootTest; import org.springframework.http.MediaType; import org.springframework.test.web.servlet.MockMvc; import org.springframework.test.web.servlet.RequestBuilder; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.result.MockMvcResultHandlers; import org.springframework.test.web.servlet.result.MockMvcResultMatchers; @SpringBootTest @AutoConfigureMockMvc public class HomeControllerTest @Autowired private MockMvc mockMvc; @Test void testGetSomeRecord throws Exception RequestBuilder requestBuilder = MockMvcRequestBuilders.getquot;apisomeRecord1234quot; .contentTypeMediaType.APPLICATION_JSON; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;your uuid1234quot; .andDoMockMvcResultHandlers.print; @Test void testPostSomeRecord throws Exception String request = quot;quot;quot; quot;requstquot;quot;did you get itquot; quot;quot;quot;; RequestBuilder requestBuilder = MockMvcRequestBuilders.postquot;apisomeRecordquot; .contentTypeMediaType.APPLICATION_JSON .contentrequest; this.mockMvc.performrequestBuilder .andExpectMockMvcResultMatchers.jsonPathquot;$.requstquot;.valuequot;did you get itquot; .andExpectMockMvcResultMatchers.jsonPathquot;$.retquot;.valuequot;got your requestquot; .andDoMockMvcResultHandlers.print; 最後就是執行 mvn test 或經IDE運行,應該都會得到所有測試都通過的結果。 mvn test # other test result ... INFO Tests run 2, Failures 0, Errors 0, Skipped 0, Time elapsed 0.368 s in io.github.macauyeah.springboot.tutorial.springbootwebapibasic.controller.HomeControllerTest # other test result ... 上面的程式碼很多,我們逐一來。 @SpringBootTest 寫在類的外面,代表執行這個測試類時,需要運行起整個Spring程序,當然也包括http的部份。 @AutoConfigureMockMvc 寫在類的外面,代表執行這個測試類時,可以模擬一些發向自己的 http 請求。 @Autowired private MockMvc mockMvc 寫在類的裏面,因為之前有定義了可以模擬 http 的請求,Spring在運行時為大家提供了那個所謂的模擬http client的實例。 MockMvcRequestBuilders,則是建造要測試的URL及Header參數。 MockMvcResultMatchers,則是檢查回傳的結果是否如遇期的一樣。 為何這個http client叫模擬 Mock 因為在測試用例中,可能連Controller 內部依賴組件也需要進一步模擬,這樣才能把測試目標集中在Controller裏,這也是單元測試的原意。只是本次的例子看不出模擬與否的差別。 MockMvcResultMatchers.jsonPath,這是用來檢測json的結構是否跟預期一樣。有些網路上的其他例子會簡寫成 jsonPath ,但因為vscode IDE的自動import功能比較差,筆者還是保留傳統的寫法。 如果大家覺得@SpringBootTest很難,想折衷地把其他測試方法,那麼把 postman curl好好管理起來,每次修改完程式,都完整地執行一次 postman curl ,也可以達到測試的效果。只不過大家還是要好好學會整合 postman curl,知道如何檢測json結構,什麼時候有錯,什麼時候叫測試通過,所以也要花一樣功夫來實現。 最後,大家千萬不要因為測試難寫而逃課,因為寫測試絕對地可以減輕日後重執行的工作量。除非你的程式碼即用即棄,否則都建議寫測試。測試跟寫文檔不一樣,有了測試也不能沒有文檔。好消息的是,文檔現在越來越多自動生成的工具,我們日後再找機會介紹。 Source Code spring boot web api basic

【電子支付優惠攻略】2019 澳門美食節 - 更新雲閃付優惠
生活在我城
澳門優惠・2019-11-05

第十九屆澳門美食節準備開始啦!今年可以用中銀智慧付BOC PAY 、銀聯雲閃卡、銀聯卡(信用卡及借記卡) 、銀聯電子錢包卡、Visa卡、MasterCard 卡、微信支付、支付寶 (新設)、澳門通卡 (新設) 、MPay澳門錢包 (新設)比錢。咁多種方法可以比到錢,到抵點先最抵?即睇今年用乜比錢最著數! 優惠詳情: 2019 年 11 月 8 日至 2019 年 11 月 24 日 優惠攻略: 銀聯雲閃付最抵! 優惠內容: 中銀銀聯立減優惠 1. 滿MOP50立減MOP12 【抵】 優惠僅限中銀銀聯全幣種信用卡及中銀銀聯借記卡,中銀電子錢包卡卡戶首六位卡號 620531並不包含本次優惠範圍內。 中銀銀聯雲閃付 1. 滿MOP50隨機立減MOP1220【最抵】 2. 超MOP108隨機立減MOP12108【最抵】 優惠僅限中銀銀聯全幣種信用卡及中銀銀聯借記卡,中銀電子錢包卡卡戶首六位卡號 620531並不包含本次優惠範圍內。 每張銀聯卡每日可共享上述中銀銀聯卡及中銀銀聯二維碼支付優惠5次。 中銀 BOC PAY 1. 每天消費超MOP30隨機立減最高MOP 130 2. 滿MOP68可獲抽獎機會最高獲MOP100優惠券 3. 每筆消費滿MOP100隨機立減MOP 199 新用戶更可額外獲MOP 20 優惠劵 MPay 1. 首筆單筆消費滿MOP50減MOP10 【抵】 2. 之後每筆消費隨機立減最高MOP99 微信 1. 掃碼領優惠:用戶掃碼會獲得翻倍價值的優惠券5元券(滿50元即可使用) 2. 金額翻倍通用券:同一使用者每次使用,都會獲得價值翻倍的優惠券 3. 超優匯率券:內地用戶擁有更加優惠的匯率付款 支付寶 1. 掃碼領優惠:用戶透過美食節攤位物料掃碼領5元及3元優惠券每名用戶僅限領紅包一次 2. 掃碼領紅包:於美食節消費1筆後,最高抽100元紅包 每日限4000份,每人每日享一次抽奬機會,每人最多限抽奬二次 3. 掃碼領福利錦囊:三筆錦囊,第一第二筆隨機紅包;第三筆12300元紅包或2888元紅包 詳情: httpswww.facebook.commacaufoodfestival 所有優惠及條款以官方網站為公布為準。 更多澳門優惠情報、有獎活動及有獎遊戲,可瀏覽 httpslifemag.cyberctm.comzh_TWbloggerMacauJetso。

Get Eat Ready呈獻:【《我老婆日日唔煮飯》第五集:怪獸與哈利波特】牛肉薯仔餡餅|焗蕃茄濃湯
全球飲食
Get Eat Ready・2019-01-08

今集Poyee教大家煮「魔法學院餐」,去片! 今晚「一餸一湯」菜單 :牛肉薯仔餡餅 Cornish pasty 焗蕃茄濃湯 Roasted tomato soup 睇返【《我老婆日日唔煮飯》第一集:家有鱷妻】鱷魚肉海底椰湯|豆豉水汁蒸鱷魚(豉汁苦瓜蒸釀鯪魚肉)|蒜香半煎炸排骨 睇返【《我老婆日日唔煮飯》第二集:萬聖節惡妻便當】蕃茄醬焗漢堡扒意粉|南瓜牛奶濃湯|日式咖哩肥牛飯 睇返【《我老婆日日唔煮飯》第三集:黯然銷魂飯】(叉燒煎蛋飯)| 五指毛桃排骨核桃湯|郊外油菜 睇返【《我老婆日日唔煮飯》第四集:射鵰英雄傳】菠菜杞子豬膶湯 |電飯煲鹽焗乞衣雞 Poyee寶兒係食譜作者、烹飪導師、專欄作者同美食愛好者。佢曾經喺2013年參加咗法國工作假期Working Holiday,周圍學整法式地道菜,佢嘅文章刊登喺香港嘅報章雜誌。出版著作有《出走,走進法國人家廚房》及《法國咬一口mdash;mdash;61道在家也能做的法式料理》;專欄有《明報》每月「歐陸煮意」教授西式料理;以及「另一個胃」教授西式甜品。佢同時鍾意涉獵各種菜式嘅烹調方法,包括中西日韓等,務求親手炮製出天下美食! Poyee嘅Facebook專頁 煮事:屋邨女孩的法國廚房Poyee嘅IG cookstuffs.poyee IG:geteatreadyFacebook Get Eat Ready

馬印航空 RM50 優惠碼!
激安優惠
OHChance 旅遊誌・2019-04-26

馬印航空(Malindo Air)推出了 50令吉(=MOP97)的優惠碼 ldquo;NOW50Prime;,只要是5月7日至7月7日的馬來西亞國內航班,或從馬來西亞出發的國際航班都適用! 馬印航空前排改了行李規定,最便宜的 super saver 票價唔再包托運行李,但用左呢個優惠碼後,包行李的 Value 票價分分鐘仲平過唔包行李的 super saver,特別是馬國國內線! 呢個優惠碼適用於 Value, Flexi, Business 三個票價種類,super saver 就無得減。優惠碼限量使用1000次,所以要用要快。另外馬印航空的來回票其實就是兩張單程票,所以要買來回的,記得拆成兩張單程買,用兩次 discount code。 使用方法是在搜價畫面的 promo code 部份填入 ldquo;NOW50Prime;,再搜尋票價即可,當點選 Value, Flexi, Business 票價,就會自動減50令吉。   【促銷公司】馬印航空【航班日期】5月7日至7月7日【預訂時限】5月2日2359前預訂【預訂方式】馬印航空官網【預訂網址】httpswww.malindoair.com   價錢 Sample ndash; 使用優惠碼後票價 ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpsohchance.info 去日本旅行買咩 JR Pass好?即上 OH!Note!小燦的旅行筆記做功課 httpsohnote.info 唔知間航空公司好唔好坐?馬上 Subscribe OH Chance Youtube 睇睇佢:httpsyoutube.comcOHChanceTravel 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

【新手學習用pine script 寫運用MACD的交易策略】
創富坊
程式交易 www.quants.hk (導師: 財經書藉作家: 麥振威)・2024-06-13

學了pine script的基本格式後,大家便可以試試寫一些簡單的策略做backtest。例如以下的例子 @version=5 strategyquot;MACD Strategyquot;, overlay=true fastLength = input12 slowlength = input26 MACDLength = input9 MACD = ta.emaclose, fastLength ta.emaclose, slowlength aMACD = ta.emaMACD, MACDLength delta = MACD aMACD if ta.crossoverdelta, 0 strategy.entryquot;MacdLEquot;, strategy.long, comment=quot;MacdLEquot; if ta.crossunderdelta, 0 strategy.entryquot;MacdSEquot;, strategy.short, comment=quot;MacdSEquot; plotstrategy.equity, title=quot;equityquot;, color=color.red, linewidth=2, style=plot.style_areabr 15 大部份的策略都涉及使用技術指標,那就要每個指標的參數都設定一個變數,例如macd的參數是12, 26,9,那三個數字都要設定為變數,這樣做是為了日後使用可以隨時更改。 在Trading View中寫很多的指標都是以ta. 為開始的,例如你要寫普通的平均線就是ta.sma ,若要寫EMA 指數平滑移動平均線就要寫ta.ema 而 內需要有兩個數值,第一個是用什麼來計算,例如你想用收市價、最高價、最低價,還是成交量等等。而另一個數值就是長度。假設你要計算一條用成交量來計算的10日平均線,那寫法就是ta.sma成交量, 10。甚至你要計10日內的RSI平均值也可以,寫法就是ta.smarsi數值, 10。 以上的策略可以看到,原創者所謂的MACD、aMACD及Delta是他自行去設定計算方式的。 首先他計MACD的方法是MACD = ta.emaclose, fastLength ta.emaclose, slowlength fastLength在最初已設定為12,那ta.emaclose,fastLength就是計算以收市價計,12日的EMA。而slowlength最初也設定為26,那就是計算以收市價計,16日的EMA,然後前者減去後者就是原創者所指的MACD。 而aMACD = ta.emaMACD, MACDLength代表了,首先我們計算出MACD的答案,再用這個答案來計算平均數,而MACDLength最初已設定為9,那就是代表了aMACD是以MACD的值來計算9日的EMA。 這樣就有了MACD及aMACD的數值,將MACD ndash; aMACD就會得到delta的答案。 即使是完全新手應該也覺得十分容易吧 再來我們要學一些基本的,在Trading View中我們要寫「升穿」或「跌穿」就是ta.crossover 以及ta.crossunder 。 而 之內在ta.crossover代表前面的值升穿後面的值,若在ta.crossunder則代表前面的值跌穿後面的值。例如ta.crossover A, B 就代表A升穿B,若是ta.crossunderA,B就代表A跌穿B。 然後我們再看以下幾句 if ta.crossoverdelta, 0 strategy.entryquot;MacdLEquot;, strategy.long, comment=quot;MacdLEquot; if ta.crossunderdelta, 0 strategy.entryquot;MacdSEquot;, strategy.short, comment=quot;MacdSEquot; plotstrategy.equity, title=quot;equityquot;, color=color.red, linewidth=2, style=plot.style_areabr 在Trading View中寫交易策略,請記得是必需要有strategy.entry ,這代表要告訴Trading View要入市的時刻。而 內要寫的就一般有三個部份,第一個部份是名稱,要寫成quot;MacdLEquot;,這個名稱很重要,若你的策略有分注平倉,要讓Trading View知道你要將那一個已入市的倉位平倉,寫平倉時要列明這個名稱的。 寫了名稱後就是要告訴Trading View你是造好還是造淡,造好的寫法是strategy.long,造淡的寫法是strategy.short,其實有了名稱及已表明是造好還是造淡後已足夠,但有些用家想在圖表上標示一些註解,那就用comment=,以上的策略就是想在圖表上看到MacdLE及MacdSE,他才會加上comment。 而最基本寫策略就是 if hellip;hellip;hellip;hellip;hellip;hellip;. 然後strategy.entry hellip;hellip;hellip; 以上的策略就是Delta由零以下升至零以上就買入,Delta由零以上跌至零以下就造淡。 這樣整個簡單的策略便寫完,但若你想在圖表上畫上一些線標示買入及賣出的訊號。那便加上plot hellip;hellip;hellip;hellip;hellip;hellip;hellip;hellip; Plot的最基本用法是 內加上 要畫那一個數值, 名稱, 顏色, 線的寬度, 線的形狀。 以上的策略就是要畫strategy.equity代表資金的變化,然後給予名稱時要用title= ldquo; ldquo; ,之後是顏色,寫法是color=color.什麼顏色,例如color=color.blue,之後是線的寬度及形狀。plot.style_area代表將線條繪製成區域圖形,這個功能在version 4或以上版本才有的。 另大家要留意在pine script 中加上 大多是註解,加了後即使你寫一些中文也不會有影響的,不會令策略有變化。原創者在寫plot 時加了 代表這句只是給大家參考,若把 冊除才會有plot的功能出現。 即使大家是Trading View的全新手也會覺得十分簡單吧 筆者會定期將一些在社群中看到的例子解釋給大家看,透過這個過程去學習,即使是全新手應也不會覺得太困難。 我們網頁 www.quants.hk Youtube httpswww.youtube.com@markchunwai Facebook專頁 httpswww.facebook.comquantshk Patreon httpswww.patreon.comquantshk

坐 ANA 香港直飛日本來回連稅HKD2,490起!
激安優惠
OHChance 旅遊誌・2018-05-29

ANA 全日空再次推出10月底前出發的香港-日本線促銷,同上次一樣直飛航線同部分轉機航點有優惠,而且今次名古屋仲要減左價(但東京加左)。 呢次優惠比較特別是轉機航點可以於回程時中停東京,故此適合想去下北海道、東北等地,又想玩埋東京的人。 《優惠價錢(來回連稅)》 (直飛航點)*香港hArr;東京:HKD3,390*香港hArr;大阪:HKD2,924*香港hArr;名古屋:HKD2,490 (轉機航點)*香港hArr;札幌:HKD4,232*香港hArr;函館:HKD4,232*香港hArr;新潟:HKD4,245*香港hArr;仙台:HKD4,245*香港hArr;小松:HKD4,232 轉機航點均需經東京轉機。  《出發日期及最長停留》.出發日期:即日起至7月5日、8月28日至10月31日.最長停留:7天(直飛)、21天(轉機)   《購票日期及方法》.購票日期:6月6日2359前預訂.購票方法:至全日空航空官網.預訂網址:httpswww.ana.co.jpzhhk  【輔助訊息】.此優惠可以不同點來回(例如東京進,大阪出),轉機日本國內航點亦可以於回程中停東京,使用 ldquo;多個城市rdquo; 功能再分段填入行程即可;.ANA 票價已包46KG託運行李及餐點。  附註:上述最低價錢為航空公司公告之最優惠價格,或本站能找到的最低價格;每一航班有否優惠票價及所存票量由航空公司決定,優惠票量有限售完即止。  價錢 Sample ndash; 香港經東京飛札幌,回程函館中停東京回香港,全程連稅HKD4,419 ===== 想搵平機票去玩,即上 OH!Chance!澳燦旅行資訊 httpohchance.info 去日本旅行買咩 JR Pass好?唔知間航空公司好唔好坐?即上 OH!Note!小燦的旅行筆記做功課 httpohnote.ohchance.info 睇埋 Facebook 專頁 httpsfb.comohchance 第一時間獲得最新旅遊資訊!

六個月學會外語?!
旅遊情報
海闊天空 // Sio・2015-08-24

以下就是我六個月學會法文西班牙文的經驗分享,這當然可以運用於其他外語上面。整個自習流程裡面,首三個月就是盡力吸收,後三個月則是放膽交流,而我每日每天都會用以最少4小時學習。 首三個月 首三個月是盡力吸收,盡可能密集式的學習,讓腦袋習慣新的語言。課程包括讀生字、學文法、看新聞、聽 Podcast。 生字由最常用的 100 個生字開始,然後再延伸至不同範疇,你生活上最常接觸的事情,例如餐飲、交通、家居等等。這段期間,最緊要是盡量吸收最多範疇的生字,因為要有足夠範疇的詞匯才可盡快做句。所以,先別要讀你少有接觸的東西。比如說,衣服範疇,初學時會說衫褲鞋襪就好了,不用學什麼領太皮帶胸罩。因為,當你有了最多範疇最常用生字的同時,你就有能力把你不認識的生字形容出來。所以在初期時間,生字是非常重要的,不能懶惰,如果能夠每天學會10個生字的話就最好不過。 文法方面,這個階段其實就只讀熟過去現在未來的造句,以及最常用動詞的變化就可以。其他的時態當然也可以學,但記不到不要緊,因為跟人溝通的時候,你是可以說出事情發生的日子時間去令對方明白事情到底何時發生。Ceardannan 出品的外語 apps 就有著非常簡單易明的文法課,非常適合初學者。另外 www.studyspanish.com 這個網站的西班牙語文法課則非常全面,初中級都適合。 要數最受歡迎程的法文西班牙文 Podcast,就一定是 Radio Lingua 出品的 Coffee Break 系列。雖則這家公司亦有辦德文義文課程,但其法文西文經已推出多年,存有多季節目,初中高級都適合。相信我,只要大家每天都聽著它們的節目,很快就會有能力說出基本會話,明白簡單對話。如果每集都重複溫習的話,效果一定更佳。 每當開始學習外語,每早我一定會收看 EuroNews。雖則初期時間我聽不懂內容,但不緊要,這純粹為了讓自己腦袋適應這個新的語言。EuroNews 除有歐洲各國不同語言版本,還附有旁白翻譯本,非常實用。 記著,第一至三個月(或者是你的第一至六個月,因為你要上學上班而且身在外地)會很難、會很累,因為你的腦袋每日每天都在應付一項從未接觸的任務。 Ceardannan Apps httpsitunes.apple.comusartistceardannanid422387258Radio Lingua httpradiolingua.comEuroNews httpwww.euronews.com 後三個月 後三個月是放膽交流,就是著力訓練聽力、講力。如果大家有根據我上篇的建議,在首三個月認真努力,每天學會10個字,三個月後已學會大概1000個字,再加上過去、現在、未來基本文法,其實已經可以開始跟外國人交談對話。雖然一般來說,認識大概2500個字才可以覆蓋日常生活交際的各個範疇,認識大概1500個字還是會有溝通困難,但我不過是說,在有了大概1000個字你就得開始練習,因為你還可以通過不同的文字配搭及聯想去形容一個字或一件事。就好像我從前文章所說,如果「牛」不懂說,就說「豬的朋友」;「失落」不懂說,就說「不開心」。而且你還是會繼續學習,所以當六月個月流程完結的時候,你就已經學會有2000個字。 跟外國人語音交流、訓練講力的手機APP,我首推 HelloTalk,這個我之前已介紹過,詳情請查閱我粉絲頁較早文章。可這個APP還是會有時間上、地域上的礙隔問題,所以最好當然就是找個真人來跟你交流。我身處阿根廷、法國的時候,每星期最少3天都會找個當地人跟我來個咖啡聚最少2個小時,我教他英文中文,他教我西文法文,每種語言輪流說15分鐘的語言交換、互相學習。這是最平宜亦最有效的辦法,可這個人該怎麼找呢?最易找的地方一定是大學,因為有來自不同地方的交流生,我那個時候就是到當地大學貼告示的去找我的交流伙伴。而即使他們已有當地朋友,也不代表他的每個朋友都會很耐心的教他們語言,所以如果你願意成為他的私人中文英文老師,還是有機會跟他交換語言。另外,也可以考慮到外國人商會、團體找聯絡、貼告示。 至於訓練聽力,我會每天看最少12小時的影片,而該影片一定是要配有該國語言的字幕,並非中文的字幕,因為這是最有效率助你提升外語的方法。如果你首三個月的根基打得好,這個時候看外語影片是不會頭痛的,因為你腦袋已經適應了這個新的語言;反之,就會聽不進去。其實正常來說,什麼事情也好,天天做的話,三個月就會適應,三年就是專業。人們之所以認為外語難學,大多因為在首三個月沒有全力以赴命令腦袋適應這個從未接觸的任務。其實語言是一種習慣,當習慣了,後三個月的流程其實是蠻輕鬆的、不用讀的,只要看看聽聽講講就會自然進步。 yabla.com 是一個我非常推薦的網站,內有西班牙文、法文、德文、意大利文、中文、英文的字幕影片。最重要是,除分了影片題材,還分了不同國家,代表你們可以收聽不同地區的口音,而且還有文法課、字典等多種實用功能。這個網站需付費,USD9.95 一個月 USD 54.95 六個月 USD 99.95 一年。如果你是天天看,我認為訂閱36個月就行,之後就可以看沒有字幕的。如果想找免費的,中國大陸有些影視APP的電影、電視都是配有字幕,可得慢慢找。如果是沒字幕的,可找該國國家的電視台APP,會看到很多不同的節目,了解當地文法。我學西班牙文是看 Mitele.es,學法文時是看 Arte.tv,這個APP的某些節目也配有字幕,也有德文版。 而且在這段時間,我也愛看用以該國文字寫的歷史書,用以該國語言邏輯思維去重新認識它的世界。曾經有位名人說過(可我忘了他是誰),學會一個語言,就活過一個世界,這是千真萬確,你會說了就會明白。 此外,不少外語學習APP都很實用,但都要付費,因為免費的通常就只有很基礎的課堂,不能深入學習,以下是我個人曾經使用的APP推介。 Babbel(初至中級:西班牙文、英文、德文、法文,意大利文、葡萄牙文、瑞典文、土耳其文、荷蘭文、波蘭文、印度尼西亞文、挪威文、丹麥文、俄文)httpwww.babbel.com 法文(中至高級)7 jours sur la planegrave;te httpsgoo.glfUorPd 西文(初至高級)Habla espantilde;ol httpsgoo.glQ88zFn Busuu(初至中級:西班牙文、英文、德文、法文,意大利文、葡萄牙文、土耳其文、波蘭文、俄文、中文、日文)httpwww.busuu.com 最後我要總結的是,就是你一定已經知道的事:學外語,沒捷徑,除了堅持就是堅持;但只要你堅持至你腦袋習慣之時,它就不會輕易離你而去,當然你還是要不時看看聽聽講講那個語言 另,我的六個月學會外語流程主要是針對想要跟外國人平常溝通的朋友,我雖是自學半年就能跟法國人西班牙人溝通,但不代表我說得好,說得準。因為我的方法目的,是要在最短時間內表達自己、跟人交流,所以很多時候我根本不會理會文法。那如果你是想要正正式式學好一個外語,在文學上、學術上有所進修,可能未必適合。