標籤: 南投搬家公司費用

  • 花25.88萬買漢蘭達的人看見榮威RX8會相當後悔?

    花25.88萬買漢蘭達的人看見榮威RX8會相當後悔?

    通過尺寸對比表,我們可以看出榮威RX8的三圍比漢蘭達要更大一些,軸距也比漢蘭達長60mm,營造出充足的7座空間。而且榮威RX8的第三排的膝部/頭部空間比漢蘭達大一拳,全幅靠背的採用舒適性更好。230mm同級稱冠的第二排座椅可調行程以及特有的Easy–Entry一鍵放倒功能,進出第三排的便利性更高。

    談起7座的SUV,大家都會聯想到充沛的乘坐空間、良好的通過性等標籤,它們擁有着極高的實用性,在生活方式日益多樣化的今天已成為汽車消費升級的首選,漢蘭達可以說是其中最熱門的車型之一,但是7座SUV車型之間的競爭越來越激烈,全新打造的車型越來越多,漢蘭達不得不面臨一位強勁對手發起的挑戰!

    它就是來自上汽榮威的“全領域大7座豪華SUV”車型榮威RX8!它是一款基於上汽新一代IS(智能化SUV)平台打造,具備“ALL-DRIVE”智能全領域駕駛系統,也擁有寬敞7座空間的重點車型!而這兩款車型在價格上有所重疊,到底榮威RX8能不能戰勝目前7座SUV界最火車型呢?虎哥就來和大家一探究竟!

    不得不和大家先嘮嗑一下車型的價格,因為榮威RX8已經在北京車展正式上市,虎哥認為其售價富有誠意,吸引力絕對不低,給予消費者選擇的空間也更多。

    咱們選取售價為22.88萬的榮威RX8 2018款 30T 智聯網四驅至尊版車型和指導價為25.88萬的豐田漢蘭達2.0T四驅精英版進行直接對比。

    先來對比外觀造型,榮威RX8的前臉採用了“律動”設計語言,造型富有力量感。全LED騰雲大燈科技感強,視覺也相當舒展,4顆透鏡式LED燈源組成的獵戶座星雲霧燈,也顯得炯炯有神。

    (注:拍攝視頻車型為2017款漢蘭達)

    榮威RX8的車身還具備黃金分割設計短前懸長后懸的豪華四驅車身比例,看上去具備動感,側面也刻畫出強而有力的輪包曲面。尾部設計橫向舒展,它具備內切燕尾、梯形的尾門的設計特點,比較有意思的是定音錘尾燈造型帶有“一錘定音”的寓意,細節處理值得仔細欣賞!

    新款漢蘭達的外觀設計在原有基礎上有所升級,它進氣格柵的面積得到擴大,但是車身輪廓仍舊屬於中庸的設計風格。

    視覺上略顯沉悶,而大燈造型的變化不大,它融入了LED日間行車燈,相比榮威RX8的全LED燈組顯得精緻感不足。車尾的造型敦實,造型飽滿但精緻感略顯不足。

    榮威RX8品牌家族化設計相當舒展、座艙採用環繞式設計富有層次感、體現出精緻豪華也兼具優雅的設計風格。用料相當考究,大面積皮質軟包與淡雅木紋飾板帶來良好觸感,10.1英寸中控大屏也富有科技感,細節處理也進一步提升了精緻感!

    而漢蘭達的內飾質感則顯得比較遜色,它中控布局簡潔明了,採用的軟質材料不少,看上去比較大氣。但是軟包面積不及榮威RX8,6.1英寸中控屏多媒體娛樂系統也顯得有些小氣。

    在大家相當關心的配置方面,榮威RX8拉開了明顯的優勢!值得一提的是在用戶舒適性營造方面它十分到位,無線充電、真皮座椅、主駕駛電動調節、前排座椅加熱+通風、第二排座椅加熱、大面積採光的全景天窗、獨立式空氣凈化器它均有配備!

    而且科技配備也已相當齊全,它配備有車機手機雙向WIFI、AI人工智能語音系統、主動導航系統、智能操作系統、虛擬儀錶、loT手機遠程車控系統等潮流前端的科技配備,配置方面的優勢十分明顯!

    通過尺寸對比表,我們可以看出榮威RX8的三圍比漢蘭達要更大一些,軸距也比漢蘭達長60mm,營造出充足的7座空間。而且榮威RX8的第三排的膝部/頭部空間比漢蘭達大一拳,全幅靠背的採用舒適性更好!230mm同級稱冠的第二排座椅可調行程以及特有的Easy–Entry一鍵放倒功能,進出第三排的便利性更高。漢蘭達第二排僅有150mm的移動距離,便利性有待提高。

    榮威RX8採用了BBA豪華品牌供應商德國Bader的頂級頭層小公牛皮座椅,而且還應用階梯式劇院座椅布局,每排乘客能享受舒適坐姿、視野開闊,並且NVH靜音水準較高,還配備大採光面積全景天窗。

    舒適配置全面,榮威RX8的前排擁有電動調節、主駕迎賓記憶、遠程座椅加熱、三檔加熱和通風等功能,第二排乘客也能享受座椅加熱功能,這功能在冬天相當實用!而漢蘭達則採用織物座椅,缺乏座椅加熱、通風功能,前排座椅沒有沒有電動調節,實用性不及榮威RX8。

    榮威RX8搭載縱置布局的“藍芯”2.0TGI缸內直噴渦輪增壓發動機,它具備全鋁缸體、雙可變氣門正時技術、渦輪增壓等高效科技,輸出224馬力最大功率、360牛米最大扭矩,動力輸出優於漢蘭達。

    與之匹配的是一款縱置愛信6速手自一體變速箱,動力輸出具備平順性、高效率的特點,這讓榮威RX8具備9.1秒的百公里加速和9.1L/100km綜合油耗的出眾表現!

    此外榮威RX8全系標配雙活塞浮動式制動卡鉗和陶瓷剎車片,這讓它的100-0km/h制動距離僅38米,要知道這是一款大尺寸的7座SUV車型,日常駕駛富有底氣!而某主流汽車媒體實測的漢蘭達剎車距離已超過41米,與榮威RX8有着不少差距。

    咱們先來看看硬件配備,榮威RX8採用高強度非承載式車身、雙叉臂獨立前懸架+五連桿后懸架,車身剛性高、抗扭能力強。它還具備較大后傾角設定,比起採用承載式車身設計的漢蘭達更能適應各種道路情況!

    而且榮威RX8公路駕駛時擁有良好的操控性、舒適性,它還搭載全時四驅系統和專業級中央、後橋差速鎖,可實現2驅和4驅鎖止!自動机械後橋限滑差速器在左右車輪速差超過120轉/分鐘時會自動鎖死,在複雜路面脫困能力高。

    漢蘭達則屬於承載式車身的城市SUV,採用的是基於前橫置的適時四驅系統,而且它僅有中央差速器鎖止功能,通過性不強,更適合市區路段。

    而且在四驅系統標定這一重要的軟實力方面,榮威RX8 無疑更加全面,下面咱們通過一個表格來詳細對比:

    榮威RX8帶有六大地形駕駛模式,在各種路況上適應能力強不少,而且雪地、越野、低速這三個駕駛模式能針對複雜的越野路面,實用性比漢蘭達高不少。

    榮威RX8搭載全新一代互聯網汽車智能系統-,即基於AliOS的斑馬智行解決方案,各項功能符合時下潮流,實用性強!在硬件上榮威RX8搭載10.1英寸高清中控屏和7英寸虛擬儀錶,显示清晰,操控更加便利,提升駕駛安全性。同時也提供了車機手機雙向WiFi和基礎服務、基本流量終身免費。

    而在這一價位中的漢蘭達只有6.1英寸多媒體娛樂系統,導航、有手機映射、聯網功能欠奉,功能性上落後於時代。

    寫在最後:經過全面的對比,咱們可以發現榮威RX8的外觀設計、內飾豪華度、科技感、配置豐富程度、乘坐空間、複雜路面適應性能、四驅系統全面性上都具備優勢,其實這也在意料之中,現在車型迭代迅速,作為全新車型的榮威RX8明顯具有後來居上之優勢,也極有潛力成為7座SUV中最有競爭力的車型!本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    網頁設計一頭霧水該從何著手呢? 台北網頁設計公司幫您輕鬆架站!

    ※想知道最厲害的網頁設計公司"嚨底家"!

    ※別再煩惱如何寫文案,掌握八大原則!

    ※產品缺大量曝光嗎?你需要的是一流包裝設計!

  • Jmeter(十) – 從入門到精通 – JMeter邏輯控制器 – 中篇(詳解教程)

    Jmeter(十) – 從入門到精通 – JMeter邏輯控制器 – 中篇(詳解教程)

    1.簡介

    Jmeter官網對邏輯控制器的解釋是:“Logic Controllers determine the order in which Samplers are processed.”。

    意思是說,邏輯控制器可以控制採樣器(samplers)的執行順序。由此可知,控制器需要和採樣器一起使用,否則控制器就沒有什麼意義了。放在控制器下面的所有的採樣器都會當做一個整體,執行時也會一起被執行。

    JMeter邏輯控制器可以對元件的執行邏輯進行控制,除僅一次控制器外,其他可以嵌套別的種類的邏輯控制器。

    2.邏輯控制器分類

    JMeter中的Logic Controller分為兩類:
    (1)控制測試計劃執行過程中節點的邏輯執行順序,如:Loop Controller、If Controller等;
    (2)對測試計劃中的腳本進行分組、方便JMeter統計執行結果以及進行腳本的運行時控制等,如:Throughput Controller、Transaction Controller。

    3.預覽邏輯控制器 

    首先我們來看一下JMeter的邏輯控制器,路徑:線程組(用戶)->添加->邏輯控制器(Logic Controller);我們可以清楚地看到JMeter5中共有17個邏輯控制器,如下圖所示:

    如果上圖您看得不是很清楚的話,宏哥總結了一個思維導圖,關於JMeter5的邏輯控制器類型,如下圖所示: 

     通過以上的了解,我們對邏輯控制器有了一個大致的了解和認識。下面宏哥就給小夥伴或則童鞋們分享講解一些通常在工作中會用到的邏輯控制器。 

    4.常用邏輯控制器詳解

      這一小節,宏哥就由上而下地詳細地講解一下常用的邏輯控制器。

    4.1Critical Section Controller

    我們先來看一下,官方原汁原味的解釋:The Critical Section Controller ensures that its children elements (samplers/controllers, etc.) will be executed by only one thread as a named lock will be taken before executing children of controller.

    宏哥這個二把刀的翻譯,給你們翻譯一下這段鳥語看看到底是什麼意思,大致意思是: Critical Section Controller(臨界區控制器),確保它的子元素(samplers /控制器等)在執行控制器的子程序之前只執行一個線程作為指定的鎖。呵呵!看到這句話是不是覺得一頭霧水啊,摸一摸自己所剩無幾的頭髮陷入沉思中…..沒有關係的,不要糾結了,宏哥後邊會用具體實例講解一下,看完實例后,再回過頭來閱讀這句話,你就會恍然大悟了。

     1、我們先來看看這個Critical Section Controller長得是啥樣子,路徑:線程組 > 添加 > 邏輯控制器 > 臨界部分控制器,如下圖所示:

    2、關鍵參數說明如下:

    Name:名稱,可以隨意設置,甚至為空;

    Comments:註釋,可隨意設置,可以為空;

    Lock name:鎖名稱,這裏可以填入其子節點下執行的線程的名稱,這個線程作為一個全局鎖存在

    4.1.1實例講解 

    這部分主要是通過配合實例我們來理解一下開始那句話到底什麼意思。

    1、宏哥這裏先說一個訪問宏哥博客園的JMeter系列文章的測試場景:我們第一步首先要訪問博客園的首頁,第二步找到宏哥的訪問宏哥博客園的首頁,第三步點擊JMeter類別。按順序完成三步,才能完成這個測試場景。那麼我們根據這個場景用JMeter來添加多個請求的取樣器。如下圖所示:

    2、腳本調試是通了,運行JMeter,查看結果樹,如下圖所示:

    3、從上個圖,查看結果樹中显示請求結果數據不是按照順序請求,不符合預期,這個時候增加一個critical section controller(臨界部分控制器),增加一個鎖,就能控制執行順序。如下圖所示:

    4、腳本調試是通了,運行JMeter,查看結果樹,可以清楚地看出來是按預期的順序執行請求的。但是這樣響應時間會過長,這個後邊再做講解。如下圖所示: 

     4.1.2鎖名分類

    (1)鎖名為空,認為每個鎖為不同的鎖

    1、宏哥通過具體實例,來看一下,創建鎖名為空的臨界部分控制器,如下圖所示:

    2、運行JMeter,查看結果樹,如下圖所示:

    (2)鎖名相同,多個鎖認為是同一個鎖,同一個時間點只能存在一個運行中

    1、宏哥通過具體實例,來看一下,創建鎖名相同的臨界部分控制器,如下圖所示:

    2、運行JMeter,查看結果樹,如下圖所示:

    (3)鎖名為變量,根據變量值來判斷是不是屬於同一個鎖,變量值為相同時,則認為是同一個鎖

    1、宏哥通過具體實例,來看一下,創建鎖名為變量的臨界部分控制器,如下圖所示:

    2、運行JMeter,查看結果樹,如下圖所示:

    4.2ForEach Controller

    ForEach 控制器:一般搭配用戶變量使用。依次調用用戶定義的變量,直到最後一個,結束循環。為了滿足ForEach Controller提取數據,變量命名的格式一般為“變量名_数字”,其中数字從1開始。
    1、即遍歷循環控制器,顧名思義是定義一個循環規則。
    2、用來遍歷當前元素的所有可執行場景。
    3、在用戶自定義變量中讀取一系列相關的變量,該控制器下的採樣器或控制器都會被執行一次或多次,每次讀取不同的變量值。
    4、這個控制器一般配合配置元件 → 正則表達式提取器來一起使用,可對頁面上的某些元素進行重複處理。

    1、我們先來看看這個ForEach Controller長得是啥樣子,路徑:線程組 > 添加 > 邏輯控制器 > ForEach控制器,如下圖所示: 

    2、關鍵參數說明如下:

    Name:名稱,可以隨意設置,甚至為空;

    Comments:註釋,可隨意設置,可以為空;

    Input variable prefix:輸入變量前綴,可以在“用戶自定義變量”中定義一組變量,循環控制器可以從中獲取到變量對應的值,然後作為循環控制器的循環條件,還可以輸出變量作為取樣器的參數。

    Start index for loop:循環變量下標起點。循環指數開始(唯一)→ 遍歷查詢的變量範圍,開始的值(這裏如果不填寫,默認從 1 開始,如果沒有 1 開始的變量,執行時會報錯)

    End index for loop:循環變量下標終點。循環指數結束(包含)→ 遍歷查詢的變量範圍,結束的值

    Output variable name:輸出變量名稱,循環控制器生成的變量名稱。後續可通過${}引用

    Add “_” before number ?: 變量前綴后是否加“_”作為分隔符。如果定義的變量名中有下劃線的話就要勾選此項,否則找不到;反之,沒有的話不要勾選,否則同樣找不到變量

    4.2.1實例講解

    1、首先在自定義5個前綴為 北京宏哥 的變量,值分別為 a b c d e。並且 北京宏哥 後面的数字是連續的,如果不連續,則不會被循環到,如下圖所示:

    2、配置ForEach控制器,如下圖所示:

    3、添加請求 訪問博客園首頁 + 輸出值:${宏哥},輸出值是在控制器的輸出變量 宏哥,通過 ${宏哥} 取到輸出變量的值,如下圖所示:

    4、添加查看結果樹,運行JMeter,查看結果樹,如下圖所示: 

    注意:敲黑板,敲腦袋!!!

    1、輸入變量的後綴數值一定要連續,比如 北京宏哥_1, 北京宏哥_2, 北京宏哥_3 … 這樣,如果中間有不連續的,循環會中斷

    2、循環開始的設定:如果變量為北京宏哥_1, 北京宏哥_2, 北京宏哥_3,而設定的開始為 1,則會從北京宏哥_2 開始循環

    3、循環結束的設定:如果變量有3個 北京宏哥_1, 北京宏哥_2, 北京宏哥_3,而設定的結束為5,則只會循環 北京宏哥_1, 北京宏哥_2, 北京宏哥_3 ,如果設定的結束為2,則會循環  北京宏哥_1, 北京宏哥_2 。

    4.3Include Controller

    Include控制器用來導入外部的測試片段(非完整的測試計劃),在執行時會執行導入的測試計劃,但是被導入的測試計劃有特殊要求,它不能有線程組,只能包含簡單的控制器及控制器下的元件。換句話說就是相當於加了一個執行單元,一個封裝了的業務操作單元,類似我們程序開發中的函數(方法)一樣。例如一個查詢學生信息的業務操作我們用取樣器來模擬,然後放到簡單控制器中作為一個執行單元,別的地方也要用到時,我們可以不用重複造輪子直接引用過來。

    一般來說,Include控制器和測試片段(Test Fragment)配合使用的比較常見。

    1、我們先來看看這個include Controller長得是啥樣子,路徑:線程組 > 添加 > 邏輯控制器 > Include控制器,如下圖所示:

    2、關鍵參數說明如下:

    Name:名稱,可以隨意設置,甚至為空;

    Comments:註釋,可隨意設置,可以為空;

    Filename:文件名,必輸字段,如果沒有,就會報錯。通過Filename的路徑和文件名引用外部的jmx文件。

    宏哥推薦小夥伴或者童鞋們可以將 Include控制器 Module控制器(傳送門)一起對比着學習,Include控制器 是從外部文件引用,只能引用整個測試片段的內容,Module控制器 是從內部文件中引用,引用上相對比較靈活,可以只引用部分測試片段或模塊內容。這樣一內一外不僅容易理解也容易記憶和學習。

    4.3.1實例

    (1)當Filename路徑的值為空,程序執行報錯,腳本執行中止,不會繼續執行下面的腳本內容。

    1、首先創建一個Filename路徑為空的測試計劃,如下圖所示:

    2、運行JMeter,查看結果樹(程序執行報錯,腳本執行中止,不會繼續執行下面 訪問博客園首頁 的取樣器),如下圖所示: 

    (2)當Filename路徑中的文件不存在,程序直接彈窗報錯並停止執行。

    1、首先創建一個Filename路徑中的文件不存在的測試計劃,點擊“保存”按鈕的時候,就會直接彈窗報錯。如下圖所示:

    (3)當Filename路徑的文件中不包含測試片段,跳過控制器,繼續向下執行。

    1、首先創建一個外部引用沒有測試片段的測試計劃,如下圖所示:

    2、創建一個Filename路徑的文件中不包含測試片段的測試計劃,將上邊的外部引用-無測試片段文件添加到Include控制器中,如下圖所示:

    3、運行JMeter,查看結果樹(跳過控制器,繼續向下執行 訪問博客園首頁 的取樣器),如下圖所示: 

    (3)當Filename路徑的文件中包含測試片段,執行完控制器,再繼續向下執行。

    1、首先創建一個外部引用有測試片段的測試計劃,如下圖所示:

    2、創建一個Filename路徑的文件中包含測試片段的測試計劃,將上邊的外部引用-有測試片段文件添加到Include控制器中,如下圖所示:

    3、運行JMeter,查看結果樹(執行完控制器里的測試片段,再繼續向下執行 訪問博客園首頁 的取樣器),如下圖所示: 

    到這裏,大家應該理解了  Include Controller 和  Test Fragment 了吧。宏哥的理解就是,Test Fragment 相當於一個獨立的部分,可以被其他測試計劃引用,實現 樣例的片段化,模塊化,遇到重複需要的,比如登錄、註冊之類的,就可以用Test FragmentInclude Controller 了。這樣可以避免重複造輪子,做許多無用功。

    5.小結

       好了,今天關於邏輯控制器的上篇就講解到這裏,這一篇主要介紹了 Critical Section ControllerForEach ControllerInclude控制器

     

    您的肯定就是我進步的動力。如果你感覺還不錯,就請鼓勵一下吧!記得隨手點波  推薦  不要忘記哦!!!

    別忘了點 推薦 留下您來過的痕迹

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

  • Spring系列.AOP使用

    AOP簡介

    利用面向對象的方法可以很好的組織代碼,也可以繼承的方式實現代碼重用。但是項目中總是會出現一些重複的代碼,並且不太方便使用繼承的方式把他們重用管理起來,比如說通用日誌打印,事務處理和安全檢查等。我們可以將這些代碼封裝起來,做成通用模塊,但是還是需要在代碼中每處需要的地方進行显示調用,使用起來不方便。這是時候就是利用AOP的時候。

    AOP是一種編程範式,用來解決特定的問題,不能解決所有問題,可以看做是OOP的補充,常見的編程範式還有:

    • 面向過程編程;
    • 面向對象編程;
    • 面向函數編程(函數式編程);
    • 事件驅動編程(GUI開發中比較常見);
    • 面向切面編程

    AOP的常見使用場景

    • 性能監控,在方法調用前後記錄調用時間,方法執行太長或超時報警;
    • 緩存代理,緩存某方法的返回值,下次執行該方法時,直接從緩存里獲取;
    • 軟件破解,使用AOP修改軟件的驗證類的判斷邏輯;
    • 記錄日誌,在方法執行前後記錄系統日誌;
    • 工作流系統,工作流系統需要將業務代碼和流程引擎代碼混合在一起執行,那麼我們可以使用AOP將其分離,並動態掛接業務;
    • 權限驗證,方法執行前驗證是否有權限執行當前方法,沒有則拋出沒有權限執行異常,由業務代碼捕捉;
    • 事務處理 。

    Spring AOP相關概念

    • AOP:這種在運行時(或者編譯時或者加載時),動態地將某些公共代碼切入到類的指定方法、指定位置上的編程思想就是面向切面的編程;
    • 切面(Aspect):A modularization of a concern that cuts across multiple classes。在Spring中切面就是一個標註@AspectJ的類,不要想得太複雜;
    • 連接點(Joinpoint):方法執行過程中的某個點,是在應用執行過程中能夠插入切面的一個點。這個點可以是調用方法時、拋出異常時、甚至修改一個字段時。切面代碼可以利用這些點插入到應用的正常流程之中,並添加新的行為;
    • 通知(advice):描述切面要完成什麼工作,以及在什麼時間點進行工作;
    • Pointcut:用來匹配一組連接點,並且pointcut會關聯advice,在pointcut匹配的連接點執行的時候,advice代碼會被執行;
    • Introduction
    • Target object:被織入切面的對象;
    • AOP proxy : 包裝了切面代碼和target代碼的對象,Spring中支持JDK動態代理和
      CGLIB,默認使用JDK動態代理,但是如果被代理的類沒有實現接口,或者用戶強制使用CGLIB,那麼Spring會使用CGLIB代理;
    • Weaving:將切面代碼添加到目標代碼的過程,織入的類型有編譯時織入,加載時織入和運行時織入(Spring是運行時織入)

    SpringAOP可以應用5種類型的通知:

    • 前置通知(Before):在目標方法被調用之前調用通知功能。
    • 後置通知(After):在目標方法完成之後調用通知,此時不會關心方法的輸出是什麼。(不管執行是否成功都執行都執行)
    • 返回通知(After-returning):在目標方法成功執行之後調用通知。
    • 異常通知(After-throwing):在目標方法拋出異常后調用通知。
    • 環繞通知(Around):通知包裹了被通知的方法,在被通知的方法調用之前和調用之後執行自定義的行為。

    Spring AOP相關

    開啟Aop

    
    //自動選擇合適的AOP代理
    //傳統xml這樣配置:<aop:aspectj-autoproxy/>
    
    //exposeProxy = true屬性設置成true,意思是將動態生成的代理類expose到AopContext的ThreadLocal線程
    //可以通過AopContext.currentProxy();獲取到生成的動態代理類。
    
    //proxyTargetClass屬性設置動態代理使用JDK動態代理還是使用CGlib代理,設置成true是使用CGlib代理,false的話是使用JDK動態代理
    
    //注意:如果使用Spring Boot的話,下面的配置可以不需要。AopAutoConfiguration這個自動配置類中已經自動開啟了AOP
    //默認使用CGLIB動態代理,Spring Boot配置的優先級高於下面的配置
    
    @Configuration
    @EnableAspectJAutoProxy(exposeProxy = true,proxyTargetClass = false)
    public class AopConfig {
    
    }
    
    
    

    如果使用傳統的配置方式的話,可按如下配置開啟AOP功能。

    <aop:aspectj-autoproxy/>
    

    定義一個Aspect

    Aspects (classes annotated with @Aspect) can have methods and fields, the same as any other class. They can also contain pointcut, advice, and introduction (inter-type) declarations.

    可以使用普通Bean的定義方式,或者加@Aspect註解的方式定義。一旦一個類被標註成切面類,它就不會成為其他切面的代理對象。

    定義一個PointCut

    切面表達式可以由指示器,通配符和運算符組成

    1. 指示器(Designators)
    • 匹配方法 execution() (重點掌握…)
    • 匹配註解 @target() @args() @within() @annotation()
    • 匹配包/類型 within()
    • 匹配對象 this() bean() target()
    • 匹配參數 args()
    1. Wildcards(通配符)
    • *匹配任意數量的字符
    • +匹配指定類及其子類
    • .. 一般用於匹配任意參數的子包或參數
    1. Operators(運算符)
    • && 與操作符
    • || 或操作符
    • ! 非操作符

    下面給出一個定義PointCut的例子

    package com.csx.demo.spring.boot.aspect;
    
    import org.aspectj.lang.ProceedingJoinPoint;
    import org.aspectj.lang.annotation.*;
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    @Component
    @Aspect
    public class MyAspect {
    
        //PointCut匹配的方法必須是Spring中bean的方法
        //Pointcut可以有下列方式來定義或者通過&& || 和!的方式進行組合.
        //下面定義的這些切入點就可以通過&& ||組合
    
        private static Logger logger = LoggerFactory.getLogger(MyAspect.class);
    
        //*:代表方法的返回值可以是任何類型
        //整個表達式匹配controller包下面任何的的echo方法,方法入參樂意是任意
        @Pointcut("execution(* com.csx.demo.spring.boot.controller.*.echo(..))")
        public void pointCut1(){}
    
        //代表echo方法必須有一個參數 參數的類型可以是任意類型
        @Pointcut("execution(* com.csx.demo.spring.boot.controller.*.echo(*))")
        public  void pointCut2(){}
    
        //代表echo方法必須有兩個參數,第一個類型任意,第二個類型必須是String
        @Pointcut("execution(* com.csx.demo.spring.boot.controller.*.echo(*,String))")
        public void pointCut3(){}
    
        //contrller包及其子包下面的任意類的任意方法
        //需要注意的是with和@with都是正對包級別的
        @Pointcut("within(com.csx.demo.spring.boot.controller..*)")
        public void pointCut4(){}
    
        //使用RestController這個註解標註任意類的任意方法
        @Pointcut("@within(org.springframework.web.bind.annotation.RestController)")
        public void pointCut5(){}
    
        //用法和@Within類似
        @Pointcut("@target(org.springframework.web.bind.annotation.RestController)")
        public void pointCut10(){}
    
        //MyService這個接口實現類的任何方法
        //如果MyService是一個類的話,那匹配這個類內部的所有方法
        @Pointcut("this(com.csx.demo.spring.boot.service.MyService)")
        public void pointCut6(){}
    
        @Pointcut("this(com.csx.demo.spring.boot.service.MyServiceImpl)")
        public void pointCut7(){}
    
        //某個bean內部的所有方法
        @Pointcut("bean(myServiceImpl)")
        public void pointCut8(){}
    
        //@within和@target針對類的註解,@annotation是針對方法的註解
        //匹配任何標註GetMaping註解的方法
        @Pointcut("@annotation(org.springframework.web.bind.annotation.GetMapping)")
        public void pointCut9(){}
    
        //匹配只有一個參數,參數類型是String的方法
        @Pointcut("args(String)")
        public void pointCut11(){}
    
    
        @Before("pointCut1()")
        public void befor(){
            logger.info("前置通知vvvv...");
            logger.info("我要做些事情...");
        }
    
        @After("pointCut1()")
        public void after(){
            logger.info("後置通知");
        }
    
        @AfterReturning("pointCut1()")
        public void afterReturn(){
           logger.info("後置返回");
        }
    
         //目標方法拋出相關異常后通知
        @AfterThrowing("pointCut1()")
        public void afterThrowing(){
            logger.info("後置異常");
        }
    
        @Around("pointCut1()")
        public void around(ProceedingJoinPoint point) throws Throwable {
            logger.info("環繞通知...");
            logger.info("我要做些事情...");
            point.proceed();
            logger.info("結束環繞通知");
        }
    
    }
    

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

  • 亞洲碳中和浪潮下 澳洲總理仍裹足不前捍衛煤炭

    環境資訊中心綜合外電;姜唯 編譯;林大利 審校

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

  • 研究:全球氣溫升高 孕婦早產與死產風險俱增

    摘錄自2020年11月4日中央社報導

    研究人員今(3日)表示,暴露於高溫和熱浪的孕婦,有較高的早產或死產風險。

    法新社報導,「英國醫學期刊」(BMJ)的研究報告指出,這項結果與貧窮有密切關聯,尤其是熱帶地區。隨著全球暖化問題加劇,特別是熱浪頻繁且強烈的期間,這個問題會更加嚴重。

    世界衛生組織統計,每年有1500萬名嬰兒早產,這是導致5歲以下幼兒死亡的主因,而死亡率主要集中在發展中國家,特別是非洲國家。

    為量化氣溫升高對懷孕結果的影響,南非約翰尼斯堡金山大學生殖健康暨愛滋病毒研究所(Wits Reproductive Health and HIV Institute)研究人員契爾斯奇(Matthew Chersich)領導的國際團隊,檢視70篇經同儕審視的相關研究,內容涵蓋27個富裕、貧窮與中間所得國家。

    研究發現,在47篇關於早產的研究中有40篇表示,溫度升高後早產的現象更為常見。

    根據這項新發現,平均而言,氣溫每上升攝氏1度,早產風險就會增加5%;而在熱浪侵襲期間,早產風險更是增加16%。

    氣候變遷
    國際新聞
    升溫
    孕婦
    早產

    本站聲明:網站內容來源環境資訊中心https://e-info.org.tw/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

  • 同級最帥的4款轎車,50萬以內沒對手,年輕人就該買這些車

    同級最帥的4款轎車,50萬以內沒對手,年輕人就該買這些車

    68-68。38萬1、3、5、7系,大家肯定都知道,那4系是什麼鬼。基本上來說,把它“當”成3系的雙門版本准沒錯。這一代寶馬4系其實與3系關聯性非常大,應該說除了外形上的差異,動力系統與机械結構基本一致的。這時候肯定有人會說,“貴這麼多還要少兩扇門這是玩我呢。

    基本上每個男生或者喜愛汽車的女性朋友都有着一個跑車夢,開着敞篷跑車在海邊公路上馳騁,或者傍晚獨自在山路享受日落的時間。但現實總是殘酷的,年輕的時候可能礙於經濟實力的原因,基本沒可能會選擇跑車,到了成家立業以後,手頭是寬裕了,可是為了家人買一台敞篷跑車似乎也不是太適合,當然如果是自己的第二第三台車的話就無所謂。那有沒有能作為第一台車,既能滿足家用,也有着想到高的顏值和動感的駕駛體驗呢?答案是有,而且還有4部給閣下選擇。

    梅賽德斯-奔馳(進口)- C級

    指導價:41.68萬-48.98萬

    每次提起奔馳,用優雅這個形容詞最為合適,好像就是它與生俱來的氣質融入到每一款車中,而加上Coupe這個詞之後,這份優雅更能發揮到極致。性感的外形總能給路人留下深刻的印象,經過徹底的革新之後,完全不同於三廂版C級。如果閣下看到這樣一台陌生的屁股,絕對就是Coupe。

    C級Coupe不管是300還是200,對應的都是個性化雙門轎跑風格的中型車市場,它們都擁有凌厲而運動的外觀設計,毫不保留的展現出自己的個性,時刻讓你記住一句話,你開的可是奔馳。

    英菲尼迪(進口)- Q60

    指導價38.98-40.98萬

    也許是品牌關係,大家一說到英菲尼迪第一時間想到的就是Q50,然後,就沒有然後了。那現在大家不妨認識一下Q50的Coupe版,Q60,一台詮釋了什麼叫“曲線美”雙門轎跑。各種流暢似水的線條勾勒出絕美的車身輪廓,一副攻擊性十足的前臉相信能瞬間俘獲閣下的心,不說了,先去擦一下口水。

    外觀融合了Q50 EauRouge和概念車Q80 Inspiration的設計新元素,使車頭更有衝擊力。內飾相比動感的外觀則溫柔很多,甚至略帶平淡。動力方面目前在售的版本均匹配2.0T發動機搭配7速手自一體變速箱,整體動態跟Q50L相似。

    寶馬(進口)- 4系

    指導價:41.68-68.38萬

    1、3、5、7系,大家肯定都知道,那4系是什麼鬼?基本上來說,把它“當”成3系的雙門版本准沒錯。這一代寶馬4系其實與3系關聯性非常大,應該說除了外形上的差異,動力系統與机械結構基本一致的。這時候肯定有人會說,“貴這麼多還要少兩扇門這是玩我呢?”,這個問題一開始也是這麼想的,直到開上去的那瞬間,那操控手感,那底盤素質。值,非常值。

    總結起來4系的特點就是:外觀比3系更寬更低,視覺效果也更震撼,內飾就是一台“寶馬”,沒有驚喜,沒有意外。要說4系最吸引的,還是跟3系的外觀差異,以及紮實的底盤功底。

    雷克薩斯-RC

    指導價:48.80-58.60萬

    雷克薩斯這車在今天講的4部車裡算是比較特別的存在,很多人以為它是IS的雙門版本,但實際上RC可以完全看作單獨專門開發的跑車,而不是衍生車型。

    日本紳士最厲害是什麼?當然就是那個固執起來又挺能跟上潮流的性格,RC霸氣的外觀設計會很容易讓人誤以為它有着強大的性能,事實上它對舒適性的妥協較多,很舒服的座椅,很舒服的車內氛圍,在高速上會開到困也不奇怪。性能也是今天講的4部車裡最不“跑車”的,但如果閣下就喜歡跑車造型設計和超級舒適的內在,那麼RC也許就是最適合閣下的那台愛車

    結尾

    50萬可以買一部思域然後改得“飛天遁地”,也可以買坐上去就舒服到馬上睡着的行政車,但能在外形和內部豪華感上達到平衡且高水準的,目前還是比較少見的。雖然4部都是2.0T汽油發動機,跟“性能”都相去甚遠,但日常在道路找找激情撒撒野還是沒任何問題的。如果閣下是“絕對顏控”,Q60肯定是第一選擇;如果說雙門跑車一定要德國車的話,C級Coupe和4系都不會讓閣下失望,甚至能有點小興奮;至於RC,它除了能給閣下“我很快”的感覺之外,雷克薩斯的匠人品質以及豪華感還能讓圍觀的路人都覺得“你好棒”。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

  • 教授試了一款不到10萬的智能SUV?

    教授試了一款不到10萬的智能SUV?

    1英寸的中控大屏清晰度和靈敏度都表現不錯,並且還加入了車聯網功能,通過語音可以控制車輛大多數的功能,例如開關天窗,開關音樂等,方便車主日常用車生活,同時增加行車安全。整車的配置豐富,前排座椅加熱,車道偏離預警,盲區監測,全景攝像頭,ESp車身穩定系統應有盡有,這也是自主品牌的優勢之一。

    五月份的青島是夏至未至的時分,海風輕拂過臉頰,聞着少許帶有魚腥味的海風,來到青島試駕2018款凱翼X3,雖然說凱翼是新興品牌,但並不代表車輛的競爭力低,到底細節如何?產品力怎麼樣?為你一一解讀。

    外觀上,2018款凱翼X3與2017款區別不大,U型鍍鉻條圍繞着進去格柵,並與前大燈相結合,配合上半圓形行車燈圍繞的透鏡大燈,雖說是鹵素光源,但透鏡的加入讓整車的精神氣更上一層樓。

    雙色的輪圈時尚感很強,215/60 R17的輪胎尺寸,有足夠厚的胎壁來面對各種複雜路況,符合它SUV的定位,高配車型為18寸輪圈,視覺效果更好,但濾震效果不及17寸輪胎。

    車尾的造型是凱翼X3的亮點之一,小書包造型的外掛備胎,讓整輛車的野性十足,側開的開門方式也個性十足;尾燈的造型與頭燈呼應,同是半圓形,點亮后視覺效果滿分。

    內飾有兩種配色:全黑/黑棕,中控台總體以對稱設計為主,主要突出年輕,簡約化,中控台上方使用的是軟質材料,銀色的飾條讓整个中控台的層次感增加了不少,圓形的空調出風口加上周圍的銀色裝飾,增添了內飾的一絲活力。10.1英寸的中控大屏清晰度和靈敏度都表現不錯,並且還加入了車聯網功能,通過語音可以控制車輛大多數的功能,例如開關天窗,開關音樂等,方便車主日常用車生活,同時增加行車安全。

    整車的配置豐富,前排座椅加熱,車道偏離預警,盲區監測,全景攝像頭,ESp車身穩定系統應有盡有,這也是自主品牌的優勢之一。

    主駕的座椅支持6向手動調節,座椅皮質的手感雖然不算特別好,比上不足比下有餘。第二排座椅支持4/6放倒,不過放倒以後上下地台差別大,不利於大物件裝載,側開門也帶來了一個缺點,往右開的側開門方式不太適合中國國情使用,因為我國道路是靠右行駛,一般情況下是靠右停車,向右開門的話會阻礙物品的裝載以及影響安全。

    2018款凱翼X3全系標配1.6L自然吸氣發動機,智享版以上配備CVT變速箱(智享版一下為手動),發動機最大馬力126ps,最大扭矩160N*m,從數據上看,整體的功率不算大,由於CVT變速箱的特性,整體動力輸出以平順為主調,2000rpm一下車輛表現慵懶,2000rpm以上稍有起色,如果想要在高速上快速超車,需要增加多一點提前量。3000rpm以上發動機的噪音又會相對明顯,總體來說動力總成在夠用的範圍。

    方向盤轉向力度有三擋可調,轉向有三種重量,日常使用個人比較喜歡最輕模式,減輕勞動強度。

    凱翼X3使用前麥弗遜后雙連桿結構,整體調校毫無意外地偏舒適,在車輛經過減速帶等快速的凸起時,會比較积極地過濾震動,但遇到波浪型或較大拋跳的路面時,懸挂就顯得有點無所適從,且懸挂偏向支撐,所以傳到車內的震動會相對大一點,給人一絲運動感。

    總結

    凱翼X3的外形和內飾都是為了迎接年輕人圍目的,2018款凱翼X3將該理念貫徹得更加徹底,並且增加了車聯網系統,進入如今時髦的互聯網汽車行列,即使將價格控制在10萬以下,ESp、盲區監測、車道偏離預警系統等實用的配置一樣不落,動力和操控不是凱翼的長處,但好在空間濾震都不錯,總體中規中矩,沒有什麼短板,是年輕人第一輛車,又需要一定實用性不錯的選擇。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

  • 使用Apache commons email發送郵件

    使用Apache commons email發送郵件

    今天研究了一下怎麼用java代碼發送郵件,用的是Apache的commons-email包。

    據說這個包是對javamail進行了封裝,簡化了操作。 這裏講一下具體用法吧

     

    一.首先你需要有郵箱賬號和一個授權碼。

    需要進入到QQ郵箱或者是網易郵箱裏面去獲取。在郵箱的設置->賬戶裏面,開啟如下服務,就能得到一個授權碼,這個授權碼要好好保管。有了這兩個東西就能夠通過第三方客戶端發送郵件了。

     

    二.導入commons-email的maven依賴。

    我用的是1.4,也可以去maven倉庫網站(https://mvnrepository.com)上面找別的版本。

    <dependency>
         <groupId>org.apache.commons</groupId>
         <artifactId>commons-email</artifactId>
         <version>1.4</version>
     </dependency>

    三.然後就可以寫發送郵件的代碼了。

    我在網上找了幾個案例,如下。

     1.發送簡單文本郵件。這是最簡單也是最常用的。

        /**
         * @describe 發送內容為簡單文本的郵件
         * @throws EmailException
         */
        public static void sendSimpleTextEmail() throws EmailException {
             Email email = new SimpleEmail();
             //設置主機名,QQ郵箱是"smtp.qq.com",網易郵箱是"smtp.163.com"
             email.setHostName("smtp.163.com");
             // 用戶名和密碼為郵箱的賬號和授權碼(不需要進行base64編碼)
             email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
             //設置SSL連接,這樣寫就對了
             email.setSSLOnConnect(true);
             //設置來源,就是發送方的郵箱地址
             email.setFrom("myemailaddress@163.com");
             //設置主題,可以不設置
             email.setSubject("java發送郵件");
             //設置信息,就是內容,這個必須要有
             email.setMsg("這是測試郵件 ... :-)");
             //接收人郵箱地址
             email.addTo("receiveeraddress@qq.com");
             email.send();
        }

     

    2.發送包含附件的郵件(附件為本地資源),這裏用到了一個EmailAttachment對象,也就是附件的意思

        /**
         * @describe 發送包含附件的郵件(附件為本地資源)
         * @throws EmailException
         */
        public static void sendEmailsWithAttachments() throws EmailException {
            // 創建一個attachment(附件)對象
            EmailAttachment attachment = new EmailAttachment();
            //設置上傳附件的地址
            attachment.setPath("C:\\Users\\Administrator\\Pictures\\Saved Pictures\\conti.png");
            attachment.setDisposition(EmailAttachment.ATTACHMENT);
            //這個描述可以隨便寫
            attachment.setDescription("Picture of conti");
            //這個名稱要注意和文件格式一致,這將是接收人下載下來的文件名稱
            attachment.setName("conti.png");
    
            //因為要上傳附件,所以用MultiPartEmail()方法創建一個email對象,固定步驟都是一樣的
            MultiPartEmail email = new MultiPartEmail();
            email.setHostName("smtp.163.com");
            email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
            email.setSSLOnConnect(true);
            email.addTo("receiveemail@qq.com", "Conti Zhang");
            email.setFrom("myemailaddress@163.com", "Me");
            email.setSubject("圖片");
            email.setMsg("這是發送給你的圖片");
            //將附件添加到郵件
            email.attach(attachment);
    
            email.send();
        }

     

    3.發送包含附近的郵件(附件為在線資源),這個與上傳本地附件稍有區別,注意一下就行

       /**
         * @describe 發送包含附件的郵件(附件為在線資源)
         * @throws EmailException
         * @throws MalformedURLException
         */
        public static void sendEmailsWithOnlineAttachments() throws EmailException, MalformedURLException {
            EmailAttachment attachment = new EmailAttachment();
            //設置在線資源路徑,和上傳本地附件的唯一區別
            attachment.setURL(new URL("http://www.apache.org/images/asf_logo_wide.gif"));
            attachment.setDisposition(EmailAttachment.ATTACHMENT);
            attachment.setDescription("Apache logo");
            attachment.setName("Apache logo.gif");
    
            MultiPartEmail email = new MultiPartEmail();
            email.setHostName("smtp.163.com");
            email.setAuthenticator(new DefaultAuthenticator("myemailaddress@163.com", "myshouquanma"));
            email.setSSLOnConnect(true);
            email.addTo("receiveemail@qq.com", "Conti Zhang");
            email.setFrom("myemailaddress@163.com", "Me");
            email.setSubject("The logo");
            email.setMsg("Here is Apache's logo");
            email.attach(attachment);
            email.send();
        }

     

    4.發送內容為HTML格式的郵件,有些郵件直接打開就是一個HTML頁面。雖然不一定用到,可以了解一下

       /**
         * @describe 發送內容為HTML格式的郵件
         * @throws EmailException
         * @throws MalformedURLException
         */
        public static void sendHTMLFormattedEmail() throws EmailException, MalformedURLException {
            // 這裏需要使用HtmlEmail創建一個email對象
            HtmlEmail email = new HtmlEmail();
            email.setHostName("smtp.163.com");
            email.setAuthenticator(new DefaultAuthenticator("myemailaddresss@163.com", "myshouquanma"));
            email.addTo("receiveemail@qq.com", "Conti Zhang");
            email.setFrom("myemailaddress@163.com", "Me");
            email.setSubject("Test email with inline image");
    
            // 嵌入圖像並獲取內容id,雖然案例這樣寫,但我感覺直接在html內容裏面寫圖片網絡地址也可以
            URL url = new URL("http://www.apache.org/images/asf_logo_wide.gif");
            String cid = email.embed(url, "Apache logo");
    
            // 設置html內容
            email.setHtmlMsg("<html>The apache logo - <img src=\"cid:" + cid + "\"></html>");
    
            // 設置替代內容,如果不支持html
            email.setTextMsg("你的郵件客戶端不支持html郵件");
            email.send();
        }

     

    5.發送內容為HTML格式的郵件(嵌入圖片更方便)

    這裏用到了DataSourceFileResolver對象,和DataSourceUrlResolver對象,前者可以解析本地文件路徑,後者可以解析網絡路徑

    具體用法如下

        /**
         * @describe 發送內容為HTML格式的郵件(嵌入圖片更方便)
         * @throws MalformedURLException
         * @throws EmailException
         */
        public static void sendHTMLFormattedEmailWithEmbeddedImages() throws MalformedURLException, EmailException {
            //html郵件模板
    String htmlEmailTemplate = "<img src=\"http://www.conti.com/images/1.jpg\">"; DataSourceResolver[] dataSourceResolvers =new DataSourceResolver[]{new DataSourceFileResolver(),new DataSourceUrlResolver(new URL("http://"))}; email.setDataSourceResolver(new DataSourceCompositeResolver(dataSourceResolvers)); email.setHostName("smtp.qq.com"); email.setAuthenticator(new DefaultAuthenticator("myemailaddress@qq.com", "myshouquanma")); email.addTo("receiveemail@qq.com", "Conti Zhang"); email.setFrom("myemailaddress@qq.com", "Me"); email.setSubject("Test email with inline image"); email.setHtmlMsg(htmlEmailTemplate); email.setTextMsg("你的郵件客戶端不支持html郵件"); email.send(); }

    此種方式可能會報錯,會被郵箱認為是有害郵件不接收而導致發送失敗。解決方法就是,網易郵箱不行就換QQ郵箱,我就是這樣做的

     

    好了,就這麼多,歡迎討論!

     

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準

  • VSCode + WSL 2 + Ruby環境搭建詳解

    VSCode + WSL 2 + Ruby環境搭建詳解

    vscode配置ruby開發環境

    vscode近年來發展迅速,幾乎在3年之間就搶佔了原來vim、sublime text的很多份額,猶記得在2015-2016年的時候,ruby推薦的開發環境基本上都是vim和sublime text,然而,隨着vscode的發展,vscode下ruby的開發體驗已經非常不錯。現在基本上使用win 10 wsl2 + vscode + windows terminal的體驗已經不遜於mac + vim (sublime) + item 2的體驗了

    總體步驟

    使用win10專業版配置ruby開發環境大致分為以下幾步:

    1. 開啟win10 wsl功能
    2. 升級wsl2
    3. 安裝ubuntu
    4. 安裝ruby(rvm)
    5. 安裝vscode
    6. 安裝vscode wsl擴展
    7. 安裝vscode ruby相關擴展

    經過以上7步就可以開始愉悅的ruby開發了,再開始之前,可以先看個效果圖。

    1. 開啟win10 wsl功能

    ruby對Linux和Mac比較友好,在windows下很多第三方庫要配合mingw或msys2才能安裝,不過好在windows 10提供了Linux子系統,在win10 2004版本中wsl也升級到了wsl2,速度更快,功能更完善。

    要使用wsl2需要先在控制面板中開啟wsl功能:

    • 適用於Linux的Windows子系統
    • 虛擬機平台

    2. 升級wsl2

    目前wsl2還需要安裝一個內核升級包,具體可參考微軟說明:

    • wsl2安裝說明
    • wsl2 update包

    更新包安裝完成后,輸入命令

    wsl --set-default-version 2
    

    3. 安裝Ubuntu

    在微軟應用商店安裝Ubuntu,當前Ubuntu版本為20.04 LTS

    安裝完成以後,配置Ubuntu默認為wsl2

    # 查看
    wsl --list --verbose
    
    # 設置
    wsl --set-version Ubuntu 2
    

    4. 安裝ruby

    在Linux下安裝ruby有多種方法,比較主流的方法是RVM,不過為了簡單起見,我直接通過ubuntu的apt工具進行了安裝。

    關於RVM的安裝可參考如下網站:

    • RVM官網
    • RVM實用指南

    通過APT安裝,輸入下列命令即可

    sudo apt install ruby ruby-dev ri ruby-bundle
    

    安裝完成以後需要配置gem國內鏡像,參考如下網址:

    • gem中文鏡像

    輸入下列命令

    # 設置gem source
    gem sources --add https://gems.ruby-china.com/ --remove https://rubygems.org/
    
    # 查看gem source
    gem sources -l
    
    # 設置bundle
    bundle config mirror.https://rubygems.org https://gems.ruby-china.com
    

    5. 安裝vscode

    vscode直接在官網下載安裝即可,這裏我選擇了System Installer

    • vscode官網下載頁面

    6. 安裝vscode wsl擴展

    vscode安裝完成以後,可以在plugin中找到Remote – WSL擴展,點擊安裝即可

    7. 安裝vscode ruby相關擴展

    直接在plugin中搜索ruby在wsl中安裝下列五個擴展即可

    • Peng Lv/Ruby
    • Castwide/Ruby Solargraph(Language Server)
    • misogi/ruby-rubocop(Lint)
    • Simple Ruby ERB
    • endwise

    其中,ruby solargraphrubocop除了安裝擴展,還需要通過gem安裝第三方包

    sudo gem install rubocop
    sudo gem install solargraph
    

    重新加載vscode-wsl就可以愉快的使用ruby language進行開發了

    vscode使用

    在使用上基本只要require了相應的庫,就solargraph就會對require的庫中涉及的類和模塊進行提示,非常方便。唯一有問題的地方就是require的時候沒有提示,這可能就需要自己記一下庫的名稱,不過相比於原來已經好太多了,應該說在可以接受的範圍內。

    1. 如果安裝了新的第三方庫會提示嗎?

    如果安裝了sinatra這樣的庫,vscode-ruby如何給出提示呢?只需要Ctrl + Shift + P,選擇solargraph: build new gem documention即可

    2. rubocop如何使用?

    rubocop是一個Ruby Lint工具,可以進行Ruby代碼風格檢查,並能夠自動修復,只需要Ctrl + Shift + P,選擇Ruby: autocorrect by rubocop即可

    3. 常用類型註釋

    ruby是動態強類型語言,由於不需要指定函數返回值類型,這導致IDE無法自動推斷一些變量的類型。目前Python、PHP、TypeScript都在不斷的強化類型以方便IDE進行靜態檢查。IDE只有在知道類型的情況下才能準確地進行智能提示。

    在ruby 2當中,我們可以通過類型註釋的方式增強IDE推斷能力。常見的類型註釋可參考YARD項目

    下面代碼給出了一些示例。

    require 'socket'
    
    server = TCPServer.new 2000
    loop do
      # 代碼塊參數類型註釋
      # @param {TCPSocket} client
      Thread.start(server.accept) do |client|
        client.puts 'hello !'
        client.puts "Time is #{Time.now}"
        client.close
      end
    end
    
    server = TCPServer.new 2000
    loop do
      # 變量註釋
      # @type {TCPSocket} client
      client = server.accept
    end
    
    # 函數參數和返回值註釋,數組類型
    # @param {Array(Integer)} nums
    # @param {Integer} target
    # @return {Array(Integer)}
    def two_sum(nums, target)
      hash_nums = {}
      result = []
      nums.each_with_index do |num, index|
        hash_nums[num] = index
      end
    
      nums.each_with_index do |num, index|
        another = target - num
        if hash_nums[another] && hash_nums[another] != index
          result.push(index, hash_nums[another])
          break
        end
      end
    
      result
    end
    

    本站聲明:網站內容來源於博客園,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    網頁設計公司推薦不同的風格,搶佔消費者視覺第一線

    ※廣告預算用在刀口上,台北網頁設計公司幫您達到更多曝光效益

    ※自行創業缺乏曝光? 網頁設計幫您第一時間規劃公司的形象門面

    南投搬家公司費用需注意的眉眉角角,別等搬了再說!

    ※教你寫出一流的銷售文案?

  • 元晶維持獲利 第一季每股純益 0.11 元

    今年第 1 季太陽能市況依然不佳,元晶在產能去瓶頸化,固定成本有效降低,營運仍維持獲利狀態,稅後淨利 3,643 萬元,每股純益 0.11 元。   元晶近年積極拓展高效產品市場,去年雖因美國雙反調查影響市場需求降溫,產品價格下滑,獲利縮水,不過,元晶去年仍有獲利,稅後淨利 1.7 億元,每股純益 0.56 元。   元晶目前太陽能電池年產能 720MW 規模,預計異質接面 (HiT) 高效太陽能電池技術達量產水準後,展開新一波擴產計畫,初步規劃 2017 年產能將倍增至 1,500MW 規模。

    本站聲明:網站內容來源於EnergyTrend https://www.energytrend.com.tw/ev/,如有侵權,請聯繫我們,我們將及時處理

    【其他文章推薦】

    USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

    台北網頁設計公司這麼多該如何選擇?

    ※智慧手機時代的來臨,RWD網頁設計為架站首選

    ※評比南投搬家公司費用收費行情懶人包大公開

    ※回頭車貨運收費標準