菅義偉施政方針演說 2050年溫室氣體達淨零排放_網頁設計公司

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

摘錄自2020年10月26日中央社報導

日本首相菅義偉今(26日)在國會臨時會上,發表上任後首次施政方針演說。他在演說中宣布,日本2050年要達到溫室氣體淨零排放的新目標。

日本朝日新聞報導,菅義偉在施政方針演說中表示,要讓「實現綠色社會」成為成長戰略的台柱,並宣示2050年要達到溫室氣體實質零排放。

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

目前日本僅設定2050年達到溫室氣體減排80%,對於何時要達到溫室氣體實質淨零排放,沒有設定具體的年限目標。

菅義偉說,為實現2050年溫室氣體淨零排放目標,關鍵是促進研發次世代太陽能電池、再次利用二氧化碳的「碳回收」技術等。並推進核能發電政策,對於排出大量溫室氣體的火力發電,要用政策從根本去改變。

氣候變遷
國際新聞
日本
碳中和
減少溫室氣體排放

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

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

美感升級 Toyota車頂太陽能電動車「e-Palette」亮相_網頁設計公司

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

文:宋瑞文(加州能源特約撰述)

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

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

美頁岩油巨頭 傳聲請破產保護_網頁設計

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

摘錄自2020年6月10日聯合新聞網報導

美國頁岩油業先行者崔石比克能源公司(Chesapeake Energy)傳出正準備聲請破產保護,可能將公司移交給主要債權人接手。

崔石比克是率先運用「水平式水壓裂解法」開採頁岩石油及天然氣的業者之一,與大陸資源及EOG資源等公司同為美國頁岩石油業的巨頭,曾經跟埃克森美孚、雪佛龍等「大油」公司一爭長短。現在由於油價重挫及需求劇減,使公司可能走上破產保護之路,這也顯示美國頁岩石油業正面臨高度營運風險。

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

今年1到3月崔石比克淨值損失85億美元,主因油田、沙礦及其他資產價值隨著油價重挫而縮水。其實在疫情擴散前,公司已深陷險境。崔石比克一年多來雖全面削減支出,並裁員數萬人, 將主業從天然氣轉向石油,但一直未上軌道。

一旦該公司申請破產保護,受影響範圍遠超過投資者及員工,因為公司與油管供應商、鑽井業者及其他廠商間的合約都將面臨風險。

能源議題
能源轉型
國際新聞
美國
頁岩
破產
疫情看氣候與能源

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

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

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品

一帶一路又惹議 中國在克什米爾建水電廠引大規模示威_貨運

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

搬家價格與搬家費用透明合理,不亂收費。本公司提供下列三種搬家計費方案,由資深專業組長到府估價,替客戶量身規劃選擇最經濟節省的計費方式

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

國際亞洲新聞社(ANI)等印度媒體今(7日)報導,巴基斯坦控制克什米爾首府穆薩法拉巴德(Muzaffarabad)居民昨天舉行示威活動,譴責中國財團在尼肋姆河和吉魯姆河興建尼肋姆-吉魯姆(Neelum-Jhelum)水力發電廠和柯哈拉(Kohala)水力發電廠工程是非法建設,且嚴重破壞當地環境生態。

當地居民指控,水力發電廠營運後,會把尼肋姆河90%的河水轉移到發電廠,導致養活穆薩法拉巴德50萬人口的尼肋姆河流量和水位下降,影響當地居民生計,且引發當地氣溫升高。

※回頭車貨運收費標準

宇安交通關係企業,自成立迄今,即秉持著「以誠待人」、「以實處事」的企業信念

尼肋姆-吉魯姆水力發電廠和柯哈特水力發電廠興建項目,都是中國「一帶一路」下「中巴經濟走廊」的項目。其中,尼肋姆-吉魯姆水力發電廠從2008年開始興建,2018年8月完成;柯哈特水力發電廠工程則於2015年由中國長江三峽集團得標,於2018年起也引發當地居民抗議迄今。

生物多樣性
生態保育
國際新聞
中國新聞
巴基斯坦
水力發電廠
一帶一路
集水區

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

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

網動結合了許多網際網路業界的菁英共同研發簡單易操作的架站工具,及時性的更新,為客戶創造出更多的網路商機。

真相難辨 日本政府涉放射線不實教材 15萬公民連署要求撤回_包裝設計

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

窩窩觸角包含自媒體、自有平台及其他國家營銷業務等,多角化經營並具有國際觀的永續理念。

文:宋瑞文(媽媽監督核電廠聯盟特約撰述)

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

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

網動廣告出品的網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上她。

OPPO Find X3 Lite 完整實機開箱照洩漏!只是外觀有點眼熟?_網頁設計公司

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

前段時間 OPPO 正式在台灣推出 Reno5 系列新機,在 2021 年也傳聞將在第一季 Find X 系列就會推出最新的 Find X3 系列新機。不過在稍早有一款 OPPO Find X3 Lite 的實機外觀提前被曝光!從這些提前被洩漏的完整盒裝配件和標籤,都能肯定這就是 Find X3 Lite 國外市售版的實機。不過眼尖的人可能會發現,這款手機其實有些眼熟。

▲圖片來源:Sudhanshu(Twitter/@Sudhanshu1414)

OPPO Find X3 Lite 完整實機開箱照洩漏!只是外觀有點眼熟?

稍早在 Twitter 由 Sudhanshu 釋出了一批 OPPO Find X3 Lite 的完整實機開箱照片,從中我們可見到 Find X3 Lite 採用四鏡頭主相機、支持螢幕指紋辨識並附贈了軟質保護套和 SuperVOOC 快速充電器。

▲圖片來源:Sudhanshu(Twitter/@Sudhanshu1414)

從其他張照片能清楚看到 Find X3 Lite 的機身正反面,其螢幕採用平面的 OLED 挖孔全螢幕,在機身背面配備四鏡頭主相機。從這些照片各位想必已經覺得它有些眼熟吧?其實這款 OPPO Find X3 Lite 5G 應是針對特定市場推出的更名機型,而它的「本體」正是兩週前才剛在台灣正式發表的 OPPO Reno5 。

▲圖片來源:Sudhanshu(Twitter/@Sudhanshu1414)

OPPO Reno5(Find X3 Lite)與 Reno5 Pro 單從機身背面很難分辨,但從機身正面的螢幕則可區分兩者之間的不同。首先, OPPO Reno5 配備 6.43 吋 FHD+ 解析度 OLED 螢幕,螢幕為平面。至於 Reno5 Pro 則配備更大的 6.55 吋 FHD+ 解析度 OLED 曲面螢幕,兩者皆支援 90Hz 螢幕更新率和 180Hz 觸控採樣率。

▲Reno5(圖左)|Reno5 Pro(圖右)

然而,其實最早提出這則爆料的事 Evan Blass(@evleaks),他在兩週前就已經於 Voice 預告 OPPO 將以 Reno5 推出換名在其他市場上市的 Find X3 Lite ,當時也釋出官方渲染圖(如下):

▲圖片來源:Evan Blass(Voice/@evleaks)

這類將同款產品,針對不同銷售市場更換新的名稱在當地上市是相當常見的。例如之前部分 Redmi 和小米的手機、智慧手錶在引進台灣後,可能會採用不同的名稱。另外,前陣子 realme 在中國市場推出 realme V15 ,近期也將在印度市場更名為 realme X7 在印度上市。

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

消息來源:Sudhanshu(Twitter/@Sudhanshu1414)|Evan Blass(Voice/@evleaks)

延伸閱讀:
OPPO Reno5 、Reno5 Pro 正式在台發表:全新升級 AI 錄影、獨家 Reno Glow 2.0 星鑽工藝打造精緻外觀

realme Watch 2 智慧手錶通過 FCC 認證,外觀、規格提前曝光!電池容量增加、續航翻倍

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

專業的才看的到!美國白宮新官網暗藏玄機 原始碼竟然有「招募啟示」_網頁設計公司

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

美國新任總統拜登於20日正式宣布就職,而美國白宮網站也在當天進行了改版。這次的改版除了新增時下流行的「深色模式」外,同時也有字體放大、縮小的功能。而有媒體發現,其實在網站的原始碼中,竟然暗藏一個不為人知的彩蛋。

有國外媒體發現,在白宮官方網站的原始碼中,竟然暗藏了一個非常特別的彩蛋,如果仔細鑽研這些原始碼,可以發現工程師在原始碼中寫下「If you’re reading this, we need your help building back better. 」(如果你正在閱讀這段文字,我們需要你的協助來進行更好的重建),同時還附上一個網址「https://usds.gov/apply」 ,而這段網址則是指向「美國數位服務小組(U.S. Digital Service,USDS)」的官方網站。這個非常特別的招募啟示,真的不是專業的高手根本不會注意到。

 

美國數位服務小組成立於2014年,在歐巴馬任期內成立的單位。由於當時美國政府各個單位、各地方政府都在進行數位化,觀念與知識彼此之間有嚴重落差不說,彼此之間的資料甚至還無法共通,於是歐巴馬就成立數為服務小組,主要工作就是由小組內經驗老道的工程師領導,協助美國政府的各個部門進行數位化的工作。

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

 

就過往來講,這次白宮網頁在原始碼中藏彩蛋,也並非是首例,就過往來講,也有非常多案例可以查詢,只是為何工程師們都習慣在原始罵內搞鬼呢?小編曾經詢問過業界相關人員,就有工程師朋友表示,其實身為一個專業的工程師,平時真的會習慣動不動就打開原始碼頁面來觀看,所以對於一般民眾覺得很難發現的原始碼,其實工程師們真的天天打開,一點都不困難,對他們就跟吃飯喝水一樣簡單。

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

api.versioning 版本控制 自動識別最高版本_網頁設計公司

※如何讓商品強力曝光呢? 網頁設計公司幫您建置最吸引人的網站,提高曝光率!

以設計的實用美學觀點,規劃出舒適、美觀的視覺畫面,有效提昇使用者的心理期待,營造出輕鬆、愉悅的網站瀏覽體驗。

Microsoft.AspNetCore.Mvc.Versioning //引入程序集

.net core 下面api的版本控製作用不需要多說,可以查閱https://www.cnblogs.com/dc20181010/p/11313738.html

普通的版本控制一般是通過鏈接、header此類方法進行控制,對ApiVersionReader進行設置,例如

services.AddApiVersioning(o => {
                //o.ReportApiVersions = true;//返回版本可使用的版本
                o.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"), new QueryStringApiVersionReader("api-version"));//通過Header或QueryString進行傳值來判斷api的版本
//o.DefaultApiVersion
= new ApiVersion(1, 0);//默認版本號
});

或者使用https://www.cnblogs.com/tdfblog/p/asp-net-core-api-versioning.html這種方式

這兩種方式都需要傳遞api的版本信息,如果不傳遞將會報錯

{"error":{"code":"ApiVersionUnspecified","message":"An API version is required, but was not specified.","innerError":null}}

如果我們不想傳遞api的版本信息時,可以將

o.AssumeDefaultVersionWhenUnspecified = true; //此選項將用於在沒有版本的情況下提供請求
o.DefaultApiVersion = new ApiVersion(1, 0); //設置默認Api版本是1.0

打開,這個我們每次請求如果不傳遞版本信息也不會報錯了,但我們的請求將會指向1.0版本,那麼我想讓默認版本指向我寫的api裏面的最高版本怎麼做?

我們將默認版本修改為最高版本可以嗎?

這裏將會出現一個問題,我的api版本可能由於各種各樣原因造成最高版本不一致的問題

所以我們不能採用指定默認版本是最高版本的方法來解決,這個最高版本還必須要是動態的,通過翻閱https://github.com/microsoft/aspnet-api-versioning/wiki/API-Version-Selector#current-implementation-api-selector可以得知

The CurrentImplementationApiVersionSelector selects the maximum API version available which does not have a version status. 
If no match is found, it falls back to the configured DefaultApiVersion. For example, if the versions "1.0", "2.0", and "3.0-Alpha" are available,
then "2.0" will be selected because it's the highest, implemented or released API version. CurrentImplementationApiVersionSelector選擇不具有版本狀態的最大可用API版本。 如果找不到匹配項,它將回退到配置的DefaultApiVersion。
例如,如果提供版本“
1.0”,“ 2.0”和“ 3.0-Alpha”,則將選擇“ 2.0”,因為它是最高,已實施或已發布的API版本。

services.AddApiVersioning( options => options.ApiVersionSelector = new CurrentImplementationApiVersionSelector( options ) );

通過這個版本選擇器,我們可以將最大版本得出,修改上面services.AddApiVersioning

services.AddApiVersioning(o => {
                o.ReportApiVersions = true;//返回版本可使用的版本
                //o.ApiVersionReader = new UrlSegmentApiVersionReader();
                //o.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"), new QueryStringApiVersionReader("api-version"));
                //o.ApiVersionReader = ApiVersionReader.Combine(new QueryStringApiVersionReader("api-version"));
                o.ApiVersionReader = ApiVersionReader.Combine(new HeaderApiVersionReader("api-version"));//版本號以什麼形式,什麼字段傳遞
                o.AssumeDefaultVersionWhenUnspecified = true;//此選項將用於在沒有版本的情況下提供請求
                o.DefaultApiVersion = new ApiVersion(1, 0);//默認版本號
                o.ApiVersionSelector = new CurrentImplementationApiVersionSelector(o);//默認以當前最高版本進行訪問
            });

舉個栗子

namespace Default.v1.Controllers
{
    [ApiVersion("1.0")]
    [Route("[controller]/[action]")]
    [ApiController]
    public class HomeController : Controller, IBaseController
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController (ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public JsonResult GetJson()
        {
            return Json("Home 1.0");
        }
}

Default.v1.Controllers.Home

namespace Default.v2.Controllers
{
    [ApiVersion("2.0")]
    [Route("[controller]/[action]")]
    [ApiController]
    public class HomeController : Controller, IBaseController
    {
        private readonly ILogger<HomeController> _logger;

        public HomeController (ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public JsonResult GetJson()
        {
            return Json("Home 2.0");
        }
}

Default.v2.Controllers.Home

namespace Default.v1.Controllers
{
    [ApiVersion("1.0")]
    [Route("[controller]/[action]")]
    [ApiController]
    public class TestController : Controller, IBaseController
    {
        private readonly ILogger<HomeController> _logger;

        public TestController (ILogger<HomeController> logger)
        {
            _logger = logger;
        }

        public JsonResult GetJson()
        {
            return Json("Test 1.0");
        }
}

Default.v1.Controllers.Test

 

 

 

 我們在

請求/home/getjson 時返回“Home 2.0”

請求/test/getjson 時返回“Test 1.0”

這樣就可以動態的請求最高版本了

※綠能、環保無空污,成為電動車最新代名詞,目前市場使用率逐漸普及化

台中景泰電動車行只是一個單純的理由,將來台灣的環境,出門可以自由放心的深呼吸,讓空氣回歸自然的乾淨,減少污染,留給我們下一代有好品質無空污的優質環境

 

但是還是會有問題的,比如,在我添加了Area和User區域下的HomeController,且User區域下的HomeController增加了1.0和3.0版本之後,神奇的一幕出現了

我的HomeController進不去了。。。

{"error":{"code":"UnsupportedApiVersion","message":"The HTTP resource that matches the request URI 'https://localhost:44311/home/getjson' is not supported.","innerError":null}}

這個時候去google都查不到原因。。。

查看api-supported-versions,返回的是1.0,2.0,3.0。。。我的api版本控制被污染了3.0版本從哪裡來的哪?第一反應是從User區域來的

我現在在User區域下添加一個除了Home和Test以外Name的Controller就可以請求成功,這個讓我懷疑到是不是api.versioning本身的問題,首先懷疑的是Controller的Name問題,源碼拉取下來,從添加版本控制的地方(services.AddApiVersioning)開始找

 

 

 

最後終於在ApiVersionCollator中找到了蛛絲馬跡

///https://github.com/microsoft/aspnet-api-versioning/blob/master/src/Microsoft.AspNetCore.Mvc.Versioning/Versioning/ApiVersionCollator.cs

namespace Microsoft.AspNetCore.Mvc.Versioning
{
    using Microsoft.AspNetCore.Mvc.Abstractions;
    using Microsoft.AspNetCore.Mvc.Controllers;
    using Microsoft.Extensions.Options;
    using System;
    using System.Collections.Generic;
    using System.Linq;

    /// <summary>
    /// Represents an object that collates <see cref="ApiVersion">API versions</see> per <see cref="ActionDescriptor">action</see>.
    /// </summary>
    [CLSCompliant( false )]
    public class ApiVersionCollator : IActionDescriptorProvider
    {
        readonly IOptions<ApiVersioningOptions> options;

        /// <summary>
        /// Initializes a new instance of the <see cref="ApiVersionCollator"/> class.
        /// </summary>
        /// <param name="options">The current <see cref="ApiVersioningOptions">API versioning options</see>.</param>
        public ApiVersionCollator( IOptions<ApiVersioningOptions> options ) => this.options = options;

        /// <summary>
        /// Gets the API versioning options associated with the collator.
        /// </summary>
        /// <value>The current <see cref="ApiVersioningOptions">API versioning options</see>.</value>
        protected ApiVersioningOptions Options => options.Value;

        /// <inheritdoc />
        public int Order { get; protected set; }

        /// <inheritdoc />
        public virtual void OnProvidersExecuted( ActionDescriptorProviderContext context )
        {
            if ( context == null )
            {
                throw new ArgumentNullException( nameof( context ) );
            }

            foreach ( var actions in GroupActionsByController( context.Results ) )
            {
                var collatedModel = CollateModel( actions );

                foreach ( var action in actions )
                {
                    var model = action.GetProperty<ApiVersionModel>();

                    if ( model != null && !model.IsApiVersionNeutral )
                    {
                        action.SetProperty( model.Aggregate( collatedModel ) );
                    }
                }
            }
        }

        /// <inheritdoc />
        public virtual void OnProvidersExecuting( ActionDescriptorProviderContext context ) { }

        /// <summary>
        /// Resolves and returns the logical controller name for the specified action.
        /// </summary>
        /// <param name="action">The <see cref="ActionDescriptor">action</see> to get the controller name from.</param>
        /// <returns>The logical name of the associated controller.</returns>
        /// <remarks>
        /// <para>
        /// The logical controller name is used to collate actions together and aggregate API versions. The
        /// default implementation uses the "controller" route parameter and falls back to the
        /// <see cref="ControllerActionDescriptor.ControllerName"/> property when available.
        /// </para>
        /// <para>
        /// The default implementation will also trim trailing numbers in the controller name by convention. For example,
        /// the type "Values2Controller" will have the controller name "Values2", which will be trimmed to just "Values".
        /// This behavior can be changed by using the <see cref="ControllerNameAttribute"/> or overriding the default
        /// implementation.
        /// </para>
        /// </remarks>
        protected virtual string GetControllerName( ActionDescriptor action )
        {
            if ( action == null )
            {
                throw new ArgumentNullException( nameof( action ) );
            }

            if ( !action.RouteValues.TryGetValue( "controller", out var key ) )
            {
                if ( action is ControllerActionDescriptor controllerAction )
                {
                    key = controllerAction.ControllerName;
                }
            }

            return TrimTrailingNumbers( key );
        }

        IEnumerable<IEnumerable<ActionDescriptor>> GroupActionsByController( IEnumerable<ActionDescriptor> actions )
        {
            var groups = new Dictionary<string, List<ActionDescriptor>>( StringComparer.OrdinalIgnoreCase );

            foreach ( var action in actions )
            {
                var key = GetControllerName( action );

                if ( string.IsNullOrEmpty( key ) )
                {
                    continue;
                }

                if ( !groups.TryGetValue( key, out var values ) )
                {
                    groups.Add( key, values = new List<ActionDescriptor>() );
                }

                values.Add( action );
            }

            foreach ( var value in groups.Values )
            {
                yield return value;
            }
        }

        static string TrimTrailingNumbers( string? name )
        {
            if ( string.IsNullOrEmpty( name ) )
            {
                return string.Empty;
            }

            var last = name!.Length - 1;

            for ( var i = last; i >= 0; i-- )
            {
                if ( !char.IsNumber( name[i] ) )
                {
                    if ( i < last )
                    {
                        return name.Substring( 0, i + 1 );
                    }

                    return name;
                }
            }

            return name;
        }

        static ApiVersionModel CollateModel( IEnumerable<ActionDescriptor> actions ) => actions.Select( a => a.GetApiVersionModel() ).Aggregate();
    }
}

View Code

 

其中GroupActionsByController將Controller按照Controller的名字進行分組,再看看內部,分組的時候將GetControllerName( action )作為key,那麼GetControllerName是幹嘛的,

protected virtual string GetControllerName( ActionDescriptor action )
        {
            if ( action == null )
            {
                throw new ArgumentNullException( nameof( action ) );
            }

            if ( !action.RouteValues.TryGetValue( "controller", out var key ) )
            {
                if ( action is ControllerActionDescriptor controllerAction )
                {
                    key = controllerAction.ControllerName;
                }
            }

            return TrimTrailingNumbers( key );
        }

這個方法原本是沒有問題的,但是牽扯到Area的時候就會出問題了。。它將根目錄下的HomeController和User.HomeController視為同一類的Controller然後去做版本的屬性注入,造成CurrentImplementationApiVersionSelector選擇器選不到正確的版本,所以返回了上面的錯誤,我們將GetControllerName內部修改為

protected virtual string GetControllerName( ActionDescriptor action )
        {
            if ( action == null )
            {
                throw new ArgumentNullException( nameof( action ) );
            }

            if ( !action.RouteValues.TryGetValue( "controller", out var key ) )
            {
                if ( action is ControllerActionDescriptor controllerAction )
                {
                    key = controllerAction.ControllerName;
                }
            }

            if ( !action.RouteValues.TryGetValue( "area", out var area ) )
            {
            }

            return TrimTrailingNumbers( area + key );
        }

這樣就可以走通了

 

我們有兩種解決辦法,一個是把源碼拉取下來,方法修改掉,項目的依賴項替換為自己修改的Microsoft.AspNetCore.Mvc.Versioning,另一種辦法是將services.AddApiVersioning重寫。。。請相信我,拉取修改替換依賴比重寫services.AddApiVersioning快且簡便。。。

issue:https://github.com/microsoft/aspnet-api-versioning/issues/630

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

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

網站的第一印象網頁設計,決定了客戶是否繼續瀏覽的意願。台北網動廣告製作的RWD網頁設計,採用精簡與質感的CSS語法,提升企業的專業形象與簡約舒適的瀏覽體驗,讓瀏覽者第一眼就愛上它。

踏上嵌入式之路,一去不復返!_網頁設計公司

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

透過資料庫的網站架設建置,建立公司的形象或購物系統,並提供最人性化的使用介面,讓使用者能即時接收到相關的資訊

大家好,昨天又有一批新的小夥伴加入,這裏重新簡單介紹一下自己的情況。和很多應屆生一樣,剛畢業有着找工作的迷茫和擔憂(這裏不包含已經工作的前輩),這是我去年也有過這樣的經歷;今天有一個網友加我微信,說在b站上看了我的介紹(b站ID:TXP嵌入式),學習經歷很像他,說到這裏,我也不由噓噓的感慨以前的時光,確實我大學裏面不是本專業的,是學汽車的,在學校里的時光,和朋友搞過一年多的汽車保養和維修的創業(其實也不算創業,當時想着提高自己的技術,這算是第一次體驗過如何去經營一個組織的經驗,確實當老闆沒有想象的那麼簡單,要有各方面的抗壓技能等等!),下面我就簡單說一下,我是如何從零基礎到linux開發崗位的一個經驗介紹:

 

正如上面所說,我是跨專業來學电子的,在幹了一年左右的汽車保養和維修,我果斷的放棄了汽車行業(其實最為直接的原因,就是出來上班工資太低,而且以我的體質不適合干汽車維修,為啥這樣說:舉個簡單,在進學院的實驗室管理員,這個過程中要經過大概三個月的魔鬼訓練,每天跑步大概6公里左右,然後跑完做各種難度的動作,到後面舉汽車的輪胎也是有的,說實話,這個我真舉不起,有些輪胎太大了,實在沒有力氣舉(我本身人又瘦小,所以你懂的當時是有多麼難的),後面我挺過來了,進了實驗室(這裏我很羡慕學电子或者計算機的網友能夠進入本學院的實驗室,順便再插一句,我學歷沒有很多大佬那麼高,我只是一名非常普通的大專生),這個過程我不展開詳細講了,今天的核心內容是如何從零基礎到linux開發崗位。

 

我是大二下學期快要結束的時候開始正式學編程(其實大二也有學,但是中途參加過兩次國家行業大賽:汽車新能源服務大賽和智能交通大賽,其中一次獲得三等獎(這裏非常感謝當時學院和老師的指導以及搭檔老王,這兩次比賽經歷算是我大學裏面最難忘的記憶了)。其實我學編程說實話,我的大學班主任算是我的啟蒙老師(這裏真的非常感謝,不然現在我自己也不知道做啥行業,沒有方向感),他給我推薦了一本c語言書籍和野火的開發板來學習,後面我就一發不可收拾了,一直自學堅持到現在,這其中走的彎路太多,比如:在我自己建的一個交流群裏面,經常有網友問,到底學哪個好,其實當初我也是這樣,在入門嵌入式過程中,會發現真的太多東西要學,苦於當時身邊沒有人指導一下方向(我的班主任他是研究生畢業,一出來就來到我們學校當老師了,當時也有找老師談過,但是自己還是沒有找到方向),所以學的過程中非常累,抓不住重點,看到那樣好,就馬上跟風去學,其實自己內心沒有去真正思考過這個技術到底是不是自己喜歡和以後吃飯的傢伙(這是站在我今天已經工作的角度簡單分析的。),因為嵌入式太廣了,甚至很多人連嵌入式到底是啥也不知道(所謂“嵌入式”,名如其文,指在很多芯片中,其所包含的處理器就像嵌入在裏面不為人知一樣,嵌入式領域的應用非常之廣泛,是處理器除了服務器和PC領域之外的主要應用領域:實時(Real Time)嵌入式領域(也就是我們常說的RTOS)、移動(Mobile)領域(比如要搞複雜的系統:linux、安卓等)、傳統嵌入式領域(一般就是單片機裸機了)),其實這段話,我是在網絡上看到一個前輩總結出的,結合自身體驗,確實是分為這三大領域。

 

回到剛才學嵌入式過程的哪個話題,其實在過程中最大的難處在於:缺乏鋼鐵一般的毅力(如果真喜歡嵌入式這個行業的話,一定要堅持下去,會有意想不到的結果)、良好的學術氛圍(我指的是自學的人沒有好學習的環境和交流,全靠一個人走“夜路”,走到哪裡算哪裡,也不知道到底是對還是錯)、缺乏項目經驗;第三點是很多人最為缺乏的(包括我自己也是這樣,其實有的網友說,學校做的畢設和企業裏面做的項目差別太大了,要考慮到很多方面,這個說的確實是這樣,但是我要說的是,先把學校畢設和一些小項目,認真做好,技術經驗和解決問題的能力就是在一個一個的小項目中成長的,帶領你如何走進嵌入式開發的大門,所以在學校裏面的實戰,一定要認真做好,有機會和對嵌入式感興趣的,可以去實驗室,不是說非要進入實驗室,只是說實驗室的環境稍微可能要好一點;把學校裏面的項目做好,後面有機會可以擴展到企業項目,只要你有能力,機會總會來的,就怕你沒有實力和準備,不然就算有機會來的,你也只能幹瞪眼和干著急,沒啥用啊,因為你不會啊,這就是現實;以後出來上班也是這樣,你憑什麼拿高薪,只有有能力給公司產生利潤,老闆就願意給你高薪,因為你有能力,值得這個價。)這裏可能又扯外了,哈哈,不過現實就是如此,只有自己有能力,資源和一切等,你都有機會得到。

 

這學習嵌入式過程,我自己走的彎路確實走的太多,而且很多東西又沒有學會,比如說一開始學過51單片機,後面看到別人玩pic、avr單片機,我也跟着去玩,最後發現自己還是沒有學會pic和avr,就是因為自己學的雜亂無比,其實這裏我建議在學的過程中,最好去網絡上找小項目練手,這樣會學的比較好,不要只看視頻教程學,這樣是學不到啥東西的,只是說帶你走了一個過程,熟悉了一下這種類型的開發以及一些協議和外設等等,實際你自己真要動手去做的話,你會發現不知道從哪裡下手,所以說要多練,養成一個良好的編程習慣以及當拿到一個小項目的時候,我該怎麼去入手,做好大體規劃,然後再去深入細節(這裏模塊化思維很重要,真的);然後後面,發現python和opencv好火,又去跟風學這個,又走了彎路,又沒有學會,這裏你可以發現我,不知道自己真正要學什麼,以後往哪裡走,只是一味的跟風(說的難聽一點,就是在裝逼);後面臨近畢業我真正開始意識到這一點,我得先深入一個方向去學,然後再去擴展,於是乎,我最開始是從pcb去深入的,我報了一個培訓班,認真學了三個月,確實出去能夠幹活了,這裏非常感謝凡億的鄭老師很助教的辛苦付出。在我學完pcb就直接去了一個非常小的公司裏面實習,軟件和硬件都要做,那時候我軟件很差勁,就畫板好一點,畫兩層板和四層還行,六層的不行,沒有實戰過,學的時候,跟實戰還是有差別的,而且小公司裏面不做那麼高層的板子,六層板的話,成本還是蠻高的,更別說8層、12層那種板子了。

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

當全世界的人們隨著網路時代而改變向上時您還停留在『網站美醜不重要』的舊有思維嗎?機會是留給努力改變現況的人們,別再浪費一分一秒可以接觸商機的寶貴時間!

 

那我是如何接觸到linux的呢?沒錯,我在那家小公司實習了兩個月,我就走了,為啥,因為我認識到了自己到底要啥了,這個時候我無意之間買了朱有鵬老師的嵌入式linux核心課程,對於我這種小白來說,這課程可以改變了我職業發展,這是我真心話,因為我出來上班,直接跳過做單片機,直接上手linux,其實這裏我也是比較幸運的,自己也比較大膽,在今天特殊情況下,一來深圳就辭職了上家公司(我正式上班的第一家公司是做手機屏幕,不算是驅動,只是簡單調試显示和觸摸,也不是我喜歡的;當然這裏我是有準備跳槽的。)在上家公司我又待了兩個月左右,這兩個月,我也不知道自己是怎麼走過來的,我拼了命在學朱老師課程,從最基本的linux命令(之前在學校的時候我接觸過,但是太零散了。)、以及基本的c語言基礎、c語言提高、linux應用編程,到現在的linux內核和驅動,在那兩個月里,我每天下班都會去看課程去學(晚上下班7:30.有時候晚一點,早上上班9點,然後周末是單休),每天晚上我都學到凌晨兩點左右,這和我學習pcb的時候,一樣,這種感覺現在回憶起來,讓人噓噓。期間我也開始寫公眾號了(把自己學的知識點,總結出來,並分享出去,讀者也可以發現,我寫的文章並不好,沒有深度,但是這是一個人成長的過程),就是我現在這個公眾號,這期間,我改變了自己的學習方式,養成了喜歡和別人交流技術,也認識了很多前輩和網友,這裏他們的幫助對我影響也非常大(過程中得到了很多指導以及一些網友提的不足之處,讓我糾正了很多誤區。)。

 

其實我去找linux崗位的時候,內心也是非常害怕,怕找不到工作的,因為我linux應用,只是學完了課程內容知識,並沒去找項目練手,只是想快點上手linux;於是乎,我在過年期間就開始頭簡歷,這過程確實難了,和現在有網友找工作的感受一樣;我投了很多簡歷,但是只收到的回復不是很多,因為缺乏項目經驗以及學歷的原因,沒有達到要求,但是我明白,這個過程是自己成長的過程,並沒有放棄對linux崗位的追求,終於後面經過在假期的磨鍊,我又投了幾家,終於收到了offer(這其中我自己又去認真的把課程中的一個網絡編程小項目又熟悉了一邊,以及c語言的基礎,即使是到現在我依然會去買一些書籍,繼續去鞏固基礎):

 

 

後面通過了面試,就順利拿到了linux崗位開發了。這裏我可能我沒有說的很具體,但是這其中的艱辛只有我自己知道,多少次想過放棄從事這個行業,但是又一次次我跌倒了,又重新站起來了,因為我奶奶經常告誡我:年輕的時候要多吃點苦,先苦后甜的道理,我聽過我奶奶講她以前的故事,那時候的苦,我的苦比起她吃的苦,簡直不能比)。

 

好了,今天就分享到這裏了,這就是我的簡單故事,平常和普通,只有靠自己的努力和行動才能得到你想要的。後面我會繼續分享技術文章;如果有網友想進交流群的話,可以加我微信,回復技術,我會拉您進群,之所以這樣,是為了防止有些人,進了交流群裏面,老是發一些與技術無關的鏈接和廣告,這樣的話,就失去了交流群的意義了。最後,說一句:感謝各位網友的支持。

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

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

RWD(響應式網頁設計)是透過瀏覽器的解析度來判斷要給使用者看到的樣貌

面試問題—JAVA程序CPU佔用過高怎麼定位_網頁設計

※推薦評價好的iphone維修中心

擁有專業的維修技術團隊,同時聘請資深iphone手機維修專家,現場說明手機問題,快速修理,沒修好不收錢

今天一個電話面試問了這個問題。回來查了下答案,自己也順帶操作一遍,做個記錄。之前只知道jstack工具可以查看線程狀態這些。比如死鎖這些,主要是之前不知道top -H -p pid這個命令的使用,這命令可以看到進程下麵線程信息,拿到線程ID,然後再結合jstack命令使用就可以解決這個問題了。下面記錄一下具體的操作步驟:

1.打個jar包丟到機器上運行

package com.nijunyang.test;



public class TestApplication {

    public static void main(String[] args) {
        for (int i = 0; i < 50; i++) {
            new Thread(()->test()).start();
        }

    }

    public static void test() {
        while (true) {
            int a = 1  + 6;
            System.out.println(a);
        }
    }
}

使用這個maven插件 打包jar

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <archive>
                        <manifest>
                            <mainClass>com.nijunyang.test.TestApplication</mainClass>
                        </manifest>
                    </archive>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

2. java -jar test-0.0.1-SNAPSHOT-jar-with-dependencies.jar  運行程序

 

 一直在輸出

3.top |grep java  或者 jps指令找到java進程的pid(6167)

 

 

4. top -H -p pid   以線程的形式查看該進程 top -H -p 6167

網頁設計最專業,超強功能平台可客製化

窩窩以「數位行銷」「品牌經營」「網站與應用程式」「印刷品設計」等四大主軸,為每一位客戶客製建立行銷脈絡及洞燭市場先機。

 

 因為我們程序是起了50個線程 所以這裏就會展示這個進程中的所有線程呢

5.前面的線程ID是10進制的,,需要轉換成16進制,,因為等下在jstack命令取出來的線程ID是16進制的:這裏就隨便選一個線程ID 去轉換了,真實環境肯定是選擇CPU佔用率最高的那個線程,echo “obase=16;6219” | bc

 

 

6.jstack 6167 >threadInfo.txt   信息輸出到文件 然後查看。也可以直接在命令裏面查看

 

7.文件中查找184b的線程ID信息,就可以找到是哪個線程導致的內存佔用過高,同時也能看到具體的代碼位置

 

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

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

網動是一群專業、熱情、向前行的工作團隊,我們擁有靈活的組織與溝通的能力,能傾聽客戶聲音,激發創意的火花,呈現完美的作品