去年花了多少錢?看你的賬單適合開什麼車

百公里加速不到4秒的旅行車,選裝后輕鬆上200萬,這樣的終極買菜車到底是扮豬吃老虎還是披着豹皮的狼呢。廣州一個平方的房價就可以買到如此精緻漂亮的一款小車,夫復何求。‍聽說立標版與加長E在一起會更配喲。老款月銷量輕鬆破萬,新A4L的表現顯然沒達到奧迪的預期,上市3個月終端給出十幾個點的優惠,早知如此何必當初。

上周,盆友圈上演了一波滿屏儘是曬賬單的大戲。一年到頭了,直到這時候才發現我居然有這麼一大群土豪朋友竟渾然不知,罪過罪過!

既然如此,賬單你也曬了,富你也炫了,b也裝完了,那麼……

是時候把上次吃飯AA的錢還給我了吧?

其實咱們汽車圈在2016年也有不少值得總結的地方,那今天就由叫獸來和大家一起來理理下2016汽車年度賬單吧!

介於C級車與D級車之間的大尺寸、豪華精緻的做工、包含64%鋁合金材料的鋼鋁混合車身等等一切都代表了目前在Made in China汽車的最高水準。

天貓用18秒賣了100台瑪莎拉蒂,聽說連馬雲爸爸和瑪莎總裁都驚呆了!

上市不到8個月賣了90507輛的,相比9代思域成幾何倍數的增長,不是鹹魚翻身是什麼?

首款量產互聯網SUV,成為又一款月銷破2萬的SUV,不負網紅美名。

百公里加速不到4秒的旅行車,選裝后輕鬆上200萬,這樣的終極買菜車到底是扮豬吃老虎還是披着豹皮的狼呢?

廣州一個平方的房價就可以買到如此精緻漂亮的一款小車,夫復何求?

聽說立標版與加長E在一起會更配喲!

老款月銷量輕鬆破萬,新A4L的表現顯然沒達到奧迪的預期,上市3個月終端給出十幾個點的優惠,早知如此何必當初!

又一款進軍20萬級別的自主品牌SUV,市場一車難求的情況也不難預見GS8的成功,挺為國產爭面子!

我等Diao絲的“藍天白雲夢”不再遙遠,坐等2月上市!

油電混合 + 3秒破敗 + 289萬 = 東瀛法拉利NSX

盆友圈瘋狂刷支付寶賬單這事兒,從營銷層面來講,馬雲爸爸這次又讓自家產品在對手家裡肆無忌憚的火了一把,而且還是免費的。就事情本質而言,其實就是支付寶幫大家做了一年的賬目匯總,也好爭取來年把手剁得更狠!反正2016年叫獸的支付寶賬單隻夠剁一台這貨:

至於今年的目標嘛,爭取多一台寶馬,不對,是寶駿,那你們呢?本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

C#9.0 終於來了,帶你一起解讀 nint 和 Pattern matching 兩大新特性玩法

一:背景

1. 講故事

上一篇跟大家聊到了Target-typed newLambda discard parameters,看博客園和公號里的閱讀量都達到了新高,甚是欣慰,不管大家對新特性是多頭還是空頭,起碼還是對它抱有一種極為關注的態度,所以我的這個系列還得跟,那就繼續開擼吧,今天繼續帶來兩個新特性,更多新特性列表,請大家關注:新特性預覽

二:新特性研究

1. Native ints

從字面上看貌似是什麼原生類型ints,有點莫名其妙,還是看一看Issues上舉得例子吧:


Summary: nint i = 1; and nuint i2 = 2;

Shipped in preview in 16.7p1.

有點意思,還是第一次看到有nint這麼個東西,應該就是C#9新增的關鍵詞,好奇心爆棚,快來實操一下。


   static void Main(string[] args)
   {
        nint i = 10;
        Console.WriteLine($"i={i}");
   }

從圖中看,可以原樣輸出,然後用ILSpy查查底層IL代碼,發現連IL代碼都不用看。如下圖:

從圖中看原來 nint 就是 IntPtr 結構體哈,如果你玩過 C# 到 C++ 之間的互操作,我相信你會對Ptr再熟悉不過了,從這個 nint 上看,你不覺得C#團隊對指針操作是前所未有的重視嗎? 前有指針類型IntPtr,後有內存段處理集合Span,到現在直接提供關鍵詞支持,就是盡最大努力讓你在類型安全的前提下使用指針。

這就讓我想起了前些天寫的一篇互操作的文章,現在就可以用nint進行簡化了,來段代碼給大家看一下。

  • 原來的寫法:

        [DllImport("ConsoleApplication1.dll", CallingConvention = CallingConvention.Cdecl, CharSet = CharSet.Ansi)]
        extern static IntPtr AddPerson(Person person);

        static void Main(string[] args)
        {
            var person = new Person() { username = "dotnetfly", password = "123456" };
            var ptr = AddPerson(person);
            var str = Marshal.PtrToStringAnsi(ptr);
        }

  • IntPtr -> nint 的寫法

總的來說這個關鍵詞不是最重要的,重要的是C#團隊對指針操作抱有前所未有的重視,這是一個非常积極的信號。

2. Pattern matching improvements

模式匹配這個不算是什麼新特性了,在本次C#9中也是繼續得到了完善,可能有很多朋友對模式匹配不是很熟悉,畢竟是C#7才有的新玩法,後面幾乎每一個新版本都在跟蹤完善,我先科普一下吧。

模式匹配到底解決了什麼問題

大家在編碼的過程中,不可能遇不到 if/else 嵌套 if/else 的這種情況,有時候嵌套甚至達到5,6層之多,特別影響代碼可讀性,我就來YY個例子。

現在各個地方都在發不同面值的消費券,為了實現千人千面,消費券的發放規則如下:

性別 年齡 地區 面值
<20 安徽 2000
<40 上海 4000
剩餘 剩餘 3000
<20 安徽 2500
<60 安徽 1500

如果用傳統的方式,你肯定要用各種花哨的if/else來實現,如下代碼:


        static decimal GetTicket(string sex, int age, string area)
        {
            if (sex == "男")
            {
                if (age < 20 && area == "安徽")
                {
                    return 2000;
                }
                else
                {
                    if (age < 40 && area == "上海")
                    {
                        return 4000;
                    }
                    else
                    {
                        return 3000;
                    }
                }
            }
            else
            {
                if (age < 20 && area == "安徽")
                {
                    return 2500;
                }
                if (age < 60 && area == "安徽")
                {
                    return 1500;
                }
            }

            return 0;
        }

這種代碼可讀性不是一般的差,就像大強子說的那樣:看着都想打人。。。 問題來了,這代碼還有救嗎??? 當然有了,這就需要用Pattern matching 去簡化,畢竟它就是為了這種問題而生的,修改后的代碼如下:


        static decimal GetTicket_Pattern(string sex, int age, string area)
        {
            return (sex, age, area) switch
            {
                ("男", < 20, "安徽") => 2000,
                ("男", < 40, "上海") => 4000,
                ("男", _, _) => 3000,
                ("女", < 20, "安徽") => 2500,
                ("女", < 60, "安徽") => 1500,
                _ => 0
            };
        }

看到這種化簡后的代碼是不是非常驚訝,這就是 Pattern matching 要幫你解決的場景,接下來看看底層的IL代碼是什麼樣子。

從圖中看,這反編譯后的代碼比我手工寫的還要爛,無力吐槽哈,當然 模式匹配 有各種千奇百怪的玩法,絕對讓你瞠目結舌,更多玩法可參考官方文檔:模式匹配

這個特性最重要的是你一定要明白它的客戶群在哪裡?

三: 總結

總的來說,這兩個特性都是比較實用的,尤其是 Pattern matching 化解了你多少不得不這麼寫的爛代碼,頭髮護理就靠它了,快來給它點個贊吧!

好了,先就這樣吧,感謝您的閱讀,希望本篇對你有幫助,謝謝。

如您有更多問題與我互動,掃描下方進來吧~

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

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準

Python 圖像處理 OpenCV (9):圖像處理形態學開運算、閉運算以及梯度運算

前文傳送門:

「Python 圖像處理 OpenCV (1):入門」

「Python 圖像處理 OpenCV (2):像素處理與 Numpy 操作以及 Matplotlib 显示圖像」

「Python 圖像處理 OpenCV (3):圖像屬性、圖像感興趣 ROI 區域及通道處理」

「Python 圖像處理 OpenCV (4):圖像算數運算以及修改顏色空間」

「Python 圖像處理 OpenCV (5):圖像的幾何變換」

「Python 圖像處理 OpenCV (6):圖像的閾值處理」

「Python 圖像處理 OpenCV (7):圖像平滑(濾波)處理」

「Python 圖像處理 OpenCV (8):圖像腐蝕與圖像膨脹」

引言

前面介紹了圖像形態學的兩種基礎算法,圖像腐蝕和圖像膨脹,本篇接着介紹圖像形態學中的開運算、閉運算以及梯度運算。

由於內容的連貫性,請先閱讀前文「Python 圖像處理 OpenCV (8):圖像腐蝕與圖像膨脹」,了解清楚圖像的腐蝕與膨脹基礎原理。

不然真的沒辦法理解開運算和閉運算。

第一件事情還是給圖像增加噪聲,思路沿用之前加噪聲的思路,使用 Numpy 給圖片添加黑白兩種噪聲點,代碼如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
img = cv.imread("demo.png", cv.IMREAD_UNCHANGED)
source = cv.cvtColor(img, cv.COLOR_BGR2RGB)
rows, cols, chn = source.shape

# 加噪聲-白點噪聲
for i in range(500):
    x = np.random.randint(0, rows)
    y = np.random.randint(0, cols)
    source[x, y, :] = 255

# 圖像保存 白點噪聲圖像
cv.imwrite("demo_noise_white.jpg", source)
print("白點噪聲添加完成")

# 重新讀取圖像
img1 = cv.imread("demo.png", cv.IMREAD_UNCHANGED)
source1 = cv.cvtColor(img1, cv.COLOR_BGR2RGB)

# 加噪聲-黑點噪聲
for i in range(1000):
    x = np.random.randint(0, rows)
    y = np.random.randint(0, cols)
    source1[x, y, :] = 0

# 圖像保存 黑點噪聲圖像
cv.imwrite("demo_noise_black.jpg", source1)
print("黑點噪聲添加完成")

# 显示結果
titles = ['White Img','Black Img']
images = [source, source1]

# matplotlib 繪圖
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

形態學開運算

圖像開運算實際上是一個組合運算,開運算是圖像先進行腐蝕,再進行膨脹的運算。

圖像被腐蝕后,去除了噪聲,但是也壓縮了圖像;接着對腐蝕過的圖像進行膨脹處理,使得剛才在腐蝕過程中被壓縮的圖像得以恢復原狀。

下面是一個圖像開運算的流程圖:

開運算的一些特性:

  • 開運算能夠除去孤立的小點,毛刺和小橋,而總的位置和形狀不便。
  • 開運算是一個基於幾何運算的濾波器。
  • 結構元素大小的不同將導致濾波效果的不同。
  • 不同的結構元素的選擇導致了不同的分割,即提取出不同的特徵。

我們先不管開運算 OpenCV 為我們提供的函數是什麼,先使用前面介紹過的圖像腐蝕與膨脹處理看下結果:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE)

# 設置卷積核
kernel = np.ones((5, 5),np.uint8)

# 圖像腐蝕
erode_img = cv.erode(source, kernel)

# 圖像膨脹
dilate_result = cv.dilate(erode_img, kernel)

# 显示結果
titles = ['Source Img','Erode Img','Dilate Img']
images = [source, erode_img, dilate_result]

# matplotlib 繪圖
for i in range(3):
   plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

可以看到降噪的效果還是不錯的。

接着看 OpenCV 為開運算提供的函數。

圖像開運算主要使用到的函數是 morphologyEx() 它是形態學擴展的一組函數,而其中的 cv.MORPH_OPEN 對應的是開運算。

使用時語法如下:

dst = cv.morphologyEx(src, cv.MORPH_OPEN, kernel)
  • src: 原圖形
  • cv2.MORPH_OPEN: 表示開運算
  • kernel: 卷積核

我們再使用 morphologyEx() 函數去重新實現下剛才的圖像開運算,看下和之前的結果有啥區別:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_white.jpg", cv.IMREAD_GRAYSCALE)

# 設置卷積核
kernel = np.ones((5, 5),np.uint8)

#圖像開運算
dst = cv.morphologyEx(source, cv.MORPH_OPEN, kernel)

# 显示結果
titles = ['Source Img','Dst Img']
images = [source, dst]

# matplotlib 繪圖
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

至少從肉眼的角度上看不出來和之前的方式有啥區別,實際上也沒啥區別。

形態學閉運算

與開運算相反的是閉運算,閉運算是圖像先膨脹,后腐蝕,它有助於關閉前景物體內部的小孔,或物體上的小黑點。

先看下圖像閉運算的流程圖:

閉運算的一些特性:

  • 閉運算能夠填平小湖(即小孔),彌合小裂縫,而總的位置和形狀不變。
  • 閉運算是通過填充圖像的凹角來濾波圖像的。
  • 結構元素大小的不同將導致濾波效果的不同。
  • 不同結構元素的選擇導致了不同的分割。

首先還是用 dilate()erode() 函數實現一下圖像閉運算,代碼如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE)

# 設置卷積核
kernel = np.ones((5, 5),np.uint8)

# 圖像膨脹
dilate_result = cv.dilate(source, kernel)

# 圖像腐蝕
erode_img = cv.erode(dilate_result, kernel)

# 显示結果
titles = ['Source Img','Dilate Img','Erode Img']
images = [source, dilate_result, erode_img]

# matplotlib 繪圖
for i in range(3):
   plt.subplot(1, 3, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

如果想要使用形態學擴展的函數 morphologyEx() 則需要把裏面的參數換成 MORPH_CLOSE ,同樣,既然是形態學擴展函數,那麼圖像腐蝕和圖像膨脹也有對應的參數:

  • 圖像腐蝕: MORPH_ERODE
  • 圖像膨脹: MORPH_DILATE

接着還是使用 MORPH_CLOSE 參數來實現下圖像的閉運算:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo_noise_black.jpg", cv.IMREAD_GRAYSCALE)

# 設置卷積核
kernel = np.ones((5, 5),np.uint8)

# 圖像閉運算
dst = cv.morphologyEx(source, cv.MORPH_CLOSE, kernel)

# 显示結果
titles = ['Source Img','Dst Img']
images = [source, dst]

# matplotlib 繪圖
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

形態學梯度運算

圖像形態學的梯度運算和前面的開運算閉運算是一樣的,都是組合函數。

梯度運算實際上是圖像膨脹減去圖像腐蝕后的結果,最終我們得到的是一個類似於圖像輪廓的圖形。

梯度運算在 morphologyEx() 函數中的參數是 MORPH_GRADIENT ,示例代碼如下:

import cv2 as cv
import numpy as np
import matplotlib.pyplot as plt

# 讀取圖片
source = cv.imread("demo.png", cv.IMREAD_GRAYSCALE)

# 設置卷積核
kernel = np.ones((5, 5), np.uint8)

# 圖像梯度運算
dst = cv.morphologyEx(source, cv.MORPH_GRADIENT, kernel)

# 显示結果
titles = ['Source Img','Dst Img']
images = [source, dst]

# matplotlib 繪圖
for i in range(2):
   plt.subplot(1, 2, i+1), plt.imshow(images[i],'gray')
   plt.title(titles[i])
   plt.xticks([]),plt.yticks([])

plt.show()

示例代碼

如果有需要獲取源碼的同學可以在公眾號回復「OpenCV」進行獲取。

參考

http://www.woshicver.com/

https://blog.csdn.net/Eastmount/article/details/83651172

https://blog.csdn.net/hanshanbuleng/article/details/80657148

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

【其他文章推薦】

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

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

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

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

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

北極最大冰架裂解!格陵蘭冰川110平方公里大冰塊脫離

摘錄自2020年9月14日聯合報報導

英國廣播公司(BBC)報導,衛星畫面顯示,北極剩餘的最大冰架、位於格陵蘭東北部的79N冰川有一大塊脫離,脫離的面積大約有110平方公里,已碎成許多較小的冰塊。

德國埃朗恩 – 紐倫堡大學的極地研究員珍妮.特頓(Jenny Turton)表示:「自1980年以來,此地區的大氣層溫度上升大約攝氏3度。而在2019年到2020年間,這裡夏天的氣溫創新高。」79N冰川大約有80公里長,20公里寬,是格陵蘭東北冰流(Northeast Greenland Ice Stream)漂流的前端,從陸地流到海裡,成為浮冰。

而在79N冰川的前沿,分成兩條冰川,較小的支流往北走,這條支流稱為史帕特冰川(Spalte Glacier),而現在出現裂解的正是這條冰川。史帕特冰川2019年已出現嚴重裂縫,今年夏天的高溫成為致命一擊,現在史帕特冰川已成為冰山的浮冰。

氣候變遷
國際新聞
北極
冰川融化
冰架
全球暖化

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

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準

少砍樹啤酒就降價 巴西酒商護亞馬遜雨林

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

全球最大酒商安海斯-布希英博集團(AB InBev)旗下的巴西酒商美洲飲料公司(Ambev)推出了不尋常的新啤酒,將拯救亞馬遜雨林以及熱愛啤酒兩大訴求結合。

這款名為科羅拉多亞馬遜(Colorado Amazonica)的新啤酒,根據亞馬遜雨林的林木砍伐速度來定價。林木砍伐數量減少時,這種啤酒就會比較便宜,但林木越少,價格就越貴。所有收入將捐贈給亞馬遜地區的一個原住民、當地居民和小農耕種者社區網。

科羅拉多亞馬遜啤酒已在9月3日上市,售價約一美元,到了10日,價格已上漲46%。

氣候變遷
國際新聞
巴西
亞馬遜雨林

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

【其他文章推薦】

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

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

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

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

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

10萬買啥車?這5大終極問答能解決99.1%的選車難題!

還有划不划算。其實這裏還需考慮兩個問題:一、貨幣的貶值二、投資的收益第一點很簡單就是你今年花10萬元買的車這10萬元三年後可能就不值10萬元了又比如你貸10萬元買車這10萬元三年後可能也不值10萬元了可是這個必須考慮到貨幣的貶值率而按現在趨勢來說,是一直在貶值的第二點也舉個例子就是如果你有20萬元預算購車可是你只給10萬,貸款10萬再把剩下的10萬去投資(炒個房地產、買個理財產品什麼的)而當你所投資后得到的收益對於你10萬貸款所需的利息那這個貸款就很划算了可是具體購車貸款利率多少。

人生第一次買車

都有哪些情景?

情景一:

打開微信,找個比較懂車的朋友,上來就問

情景二:

找個汽車App或小程序,勾選條件篩出自己的意向車型

情景三:

先逛幾家4S店,看看哪個銷售妹子腿更長?

好吧,其實情況有很多種,可是最有效的方法應該是:打開微信→點擊公眾號→添加公眾號→搜索“車買買”→點擊關注,一系列購車選車用車評車信息任你看(這裏希望老闆可以看到,嘻嘻嘻),好吧,廢話說多了,直接上乾貨。

如果有足夠預算,就選擇進口車吧

要多大有多大、要多長有多長

要多快有多快、要多帥有多帥

然而理想和現實還是有很大差距的

畢竟不是每個人都叫思聰

而且還有一個姓王的爸爸

更多人還是得用自己辛苦賺來的錢

買一輛物有所值或物超所值的車

選擇自主或合資比起進口,性價比會更高一點吧

每次聊到自主和合資品牌

評論區似乎都兩極分化

要不就是以愛國的名義支持國產

要不就是要求更高的品質支持合資

在此虎哥就不參与任何政治言論了

(希望大家能理解)

不過只針對產品本身

虎哥的看法是:都可以買,喜歡就好

由於現在國人的消費水平越來越高

就算買到不好或者不合適自己的車

用一段時間賣掉好像也不是很虧

誰都說不準哪輛車的質量一定就好或壞

國產車也有五菱宏光這樣的神車

合資品牌也有很多斷軸燒機油的案例

你可以根據自己的見解去選

沒有見解,那自主跟合資可以一起考慮

相信每個男人都有個跑車夢吧?

可是跑車對於在座大部分人來說都不現實吧

我認為絕大部分跑車都只是男人們的大玩具

對於有錢又帥又單身的你,買來耍耍還是可以的

當然,今天虎哥並不是推薦你去買跑車上下班

而是告訴你除了轎車和SUV還有很多選擇

比如近期越來越火的MpV車型

裝得比轎車多,用起來比SUV更舒適更方便

比如越野能力和裝載能力都很強的皮卡

關於買轎車還是SUV的問答在網上實在太多

其實對於城市用車來說無非也就那幾個區別

轎車:操控好、加速快、更省油等等

SUV:坐姿高、視野好、裝得多等等

如果當你了解兩者的區別後還不會選

那你就很有必要去看看其它車型了

二手車性價比高是毋庸置疑的

不過二手車最大的問題就是“水太深”

對於不懂行的人來說沒有必要去嘗試

可是如果你有足夠的積累和經驗

肯定能用很低的價錢買到二手好車

(而且不用給中間商賺差價哦)

所以人生第一次買車

更多的是建議買新車

新車不僅可以給你更多的保障

而且還能給你一種超爽的新鮮感

就跟你小時候收到新玩具的感覺一樣

貸款不是都要收利息嗎?還有划不划算?

其實這裏還需考慮兩個問題:

一、貨幣的貶值

二、投資的收益

第一點很簡單

就是你今年花10萬元買的車

這10萬元三年後可能就不值10萬元了

又比如你貸10萬元買車

這10萬元三年後可能也不值10萬元了

可是這個必須考慮到貨幣的貶值率

而按現在趨勢來說,是一直在貶值的

第二點也舉個例子

就是如果你有20萬元預算購車

可是你只給10萬,貸款10萬

再把剩下的10萬去投資

(炒個房地產、買個理財產品什麼的)

而當你所投資后得到的收益

對於你10萬貸款所需的利息

那這個貸款就很划算了

可是具體購車貸款利率多少?

不同主機廠或經銷商所提供的政策不同

具體還需你親自去計算過才知道

而且那些說0%利率的優本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準

動力一樣還更大更便宜,這車銷量卻不到POLO的1/10

說實話,追求大大大空間的人就別買小型車啊。而我就是覺得空間不那麼重要,平日都是一個人用車居多的,後排很少用來載人的。所以後排空間小一點對我來說影響不大。一句話:一兩個人用車就挺好的。晶銳車主:其他地方,我都可以原諒pOLO,但是安全配置方面,真的讓我對pOLO下不了手啊。

大眾pOLO可以說是國內賣得最好的小型兩廂車

但是同胞兄弟晶銳的銷量則可以用慘淡來形容

簡直就是連pOLO的零頭都不如

明明技術平台、空間表現、性能等硬性指標都差別不大

那為什麼銷量卻是一個天堂一個地獄呢?

我們來看看車主們怎麼說吧!

晶銳車主:選擇晶銳之前我也考慮過pOLO(因為太多人買了,自然會考慮一下),但是pOLO的外觀令我覺得太乏味了。而相比之下,晶銳就顯得個性多了,雙色車身,車身線條很剛勁,還有繽紛車身色彩,看上去活力十足,非常適合年輕人。

pOLO車主:我想,購買大眾pOLO的車主絕大多數都是年輕人,而且很多都是過着平淡生活的年輕人。那麼pOLO就非常適合我這類人。pOLO整體看上去很飽滿,甚至看久了還會覺得挺精美的。反正,沒有人會覺得它有多突出,但也沒有人會將它歸入丑的那一類。

一句話:普通人總比個性主義者多。

晶銳車主:雖然晶銳的內飾用料一般、布局很常規,不過這些我都不在乎。價格就擺在這裏了,並不能奢求太多,用起來順手就好了。我更看中的是晶銳的內飾有拼色處理,不會像pOLO那黑黑的內飾那麼壓抑。

pOLO車主:我知道黑色顯小、黑色壓抑,但是黑色也百搭啊!我家的pOLO就是內飾全黑的;中控台是全黑的,但功能區劃分明確,實體按鍵操作便捷,平時開車盲操作也沒問題;座椅也是全黑的,用久了就知道很耐臟。反正,我覺得pOLO就是非常實在的存在。

一句話:反正都是簡潔實用為主。

晶銳車主:雖然軸距是一樣的,但是外觀尺寸,晶銳還是比pOLO大那麼一點。而且其實車內的頭部空間和腿部空間都是說得過去的。

pOLO車主:說話為什麼不能實在一點呢?說實話,追求大大大空間的人就別買小型車啊。而我就是覺得空間不那麼重要,平日都是一個人用車居多的,後排很少用來載人的。所以後排空間小一點對我來說影響不大。

一句話:一兩個人用車就挺好的。

晶銳車主:其他地方,我都可以原諒pOLO,但是安全配置方面,真的讓我對pOLO下不了手啊。

pOLO車主:在安全配置方面,pOLO可能做得不夠全面,但其他方面的配置pOLO給得也不少啊;要想比較豐富的配置可以選pOLO的頂配車型啊。

一句話:算了吧,其實兩款車的配置都算不上厚道啊。

晶銳車主:嗯,這方面可以說跟pOLO一模一樣的。靠譜!

pOLO車主:晶銳還挺喜歡用“與pOLO一樣的動力系統”來蹭熱度的。但別忘了還有pOLO GTI哦,那是1.4T發動機。還有,在調校、科技含量等方面,都是有些不一樣的啊。

一句話:兩款車也就都是日常夠用吧。

晶銳車主:晶銳的價格本身就比pOLO低一點點,優惠也有個7、8千。買下來還是挺划算的。

pOLO車主:pOLO的指導價是會比晶銳貴一點,但優惠基本是以萬為單位的呀。算下來,最後的成交價分分鐘比晶銳要低呢~

一句話:在不少地方,pOLO的價格算下來更便宜。

說到底啊,晶銳相比於pOLO來說是有它的個性所在的,而且指導價看上去是相對低一點點。但是!小編認為,晶銳的銷量會大不如pOLO的原因主要在於品牌效應的問題。兩者品牌定位的不同,晶銳的配置更低,而且用料上也更显示出廉價感,這樣子就進一步拉低了產品形象和銷量咯~

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

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準

最高優惠9萬,這款中級車性價比和加速都能秒BBA

內飾的風格和外觀很一致,設計和用料方面都處於同級上游水平。1米78的體驗者坐入前排,並將座椅調至最低(不得不提的是ATS-L的駕駛坐姿真的很低,在同級車型中,幾乎是最低的了),頭部空間為一拳,表現優異。保持前排座椅不動,坐進後排,頭部空間為4指,腿部空間超過兩拳,表現也非常不錯。

對於凱迪拉克ATS-L的車主來說

有一組讓他們非常興奮的參數

279ps最大馬力

400N·m最大扭矩

8AT變速箱

50:50前後配重

前置后驅布局

鋁鎂合金換擋撥片

Brembo剎車系統

0-100km/h加速為6.2s

當然

這些數據對於一輛性能車來說

也算不上很吸引

可是

對於一輛20來萬的4門轎車來說

足以秒殺90%以上的同級對手

那麼這些數據說的全是真的嗎?

那麼就讓車主們告訴本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

讀懂操作系統之虛擬內存TLB與緩存(cache)關係篇(四)

前言

前面我們講到通過TLB緩存頁表加快地址翻譯,通過上一節緩存原理的講解為本節做鋪墊引入TLB和緩存的關係,同時我們來完整梳理下從CPU產生虛擬地址最終映射為物理地址獲取數據的整個過程是怎樣的,若有錯誤之處,還請批評指正。

TLB和緩存串行訪問(Serial TLB & Cache Access)

這裡會跳過前面對虛擬頁號、虛擬頁偏移量、TLB索引和標記等的詳細分析和計算,不清楚的童鞋請先查看前面文章再來看本文。假設我們有14位的虛擬地址、12位的物理地址,每頁大小為64字節,如下:

 

 

同時假設已完全清楚虛擬地址和物理地址劃分,接下來則是針對虛擬地址和物理地址進行位劃分,如下:

同時我們假設TLB是通過組相聯來進行映射,TLB中有16個條目,4路相聯,所以TLB索引(TI)和TLB標記(TT)在虛擬地址中虛擬頁號進行位劃分如下: 

 

我們假設緩存採取直接映射的機制,緩存大小為64字節,每塊大小為4個字節,說明緩存有16塊即4位,位偏移為2位,所以緩存索引(CI)和緩存標記(CT)在物理地址中進行位劃分如下:

現假設讀取虛擬地址(0x0255),那麼將其劃分為VPN(0x09),VPO(0x15),然後將VPN劃分為TT(0x02)和TI(1)如下:

接下來通過TT(0x02)和TI(1)去查找TLB,如下:

此時我們會發現TLB缺失,緊接着通過VPN(0x0916 = 2110)去頁表中查找得到PPN(0x1716 = 2310),如下: 

 

因其PPO = VPO(0x15),所以計算出物理地址為(23 * 64+21 = 149310 = 0x5D516

然後根據上述物理地址劃分為CT(0x17)、CI(5)、CO(1),如下:

最後通過上述CT(0x17)和CI(5)去查找緩存,此時緩存命中,然後將數據發送到CPU,如下:

從CPU到獲取數據整個的過程是這樣的:【1】CPU產生虛擬地址【2】TLB翻譯成物理地址【3】TLB命中,將物理地址發送到緩存【4】緩存命中返回數據。其中每一個過程涉及到的細節,比如TLB缺失、頁缺失等等前面已有詳細講解,殊途同歸,大致過程則是如下圖解

通過如上可看出此時TLB與Cache是串行訪問的關係,這是最簡單同時也是比較慢的方式,因為不得不等待TLB翻譯完成后才去檢查緩存中是否有數據,如此一來將對CPU處理速度產生重大影響,涉及到大量內存訪問時間。

TLB和緩存并行訪問(Parallel TLB & Cache Access)

當前處理器最普遍的設計是採取TLB和Cache并行的方式,有些也稱之為重疊訪問(Overlapping TLB & Cache Access),從而提高訪問速度,那麼并行訪問到底是如何做的呢?有沒有什麼使用限制呢?這裏我們以Intel Skylake(英特爾第六代微處理器架構)為例來說明,其虛擬地址和物理地址結構大致如下:

看到上述結構我們可以發現物理地址中的PPN和緩存標記(CT)位數相等以及其他,英特爾這樣設計就是為了讓TLB和Cache可以并行訪問。TLB和Cache并行訪問原理:虛擬地址(VA)中的高階位即(VPN)用來查找TLB,而低階位(VPO)用來查找緩存。通過TLB將VPN映射到PPN,此時PPN作為緩存標記(CT),而將VPO中的低階位作為緩存偏移量(CO),高階位作為緩存索引(CI)。有了緩存標記和緩存索引我們就可以查詢到數據,比如CPU產生虛擬地址(0x7916 = 00011110012),此時通過并行訪問則為如下圖解

我們結合上述圖解繼續進行分析將并行訪問分為三種情況,比如上緩存中的tag = 11,同時我們產生的PPN = tag = 11,說明緩存標記等於物理頁號,同時緩存命中,最終返回數據B5給CPU(其一)。假設產生的緩存標記不是11,那麼說明緩存標記不等於頁號或者緩存缺失,但此時TLB命中,那麼將通過TLB中的物理頁號直接訪問主存(其二)。否則做標準的虛擬地址翻譯(其三)。為便於大家理解,我們通過偽代碼形式來說明:

if (cache hit && cache tag = PPN)
  //返回數據到CPU
else if (cache miss || cache tag != PPN && TLB hit) 
  //通過TLB中的PPN訪問主存
else
  //標準地址翻譯

兩種緩存架構(Cache & TLB Access)

緩存索引(Cache index)用於查找數據在緩存中的索引位置,而緩存標記(Cache tag)則是驗證緩存中有哪些數據。從上述對并行訪問原理講解我們知道將虛擬地址中的虛擬偏移量可作為物理緩存索引,這裏我們稱之為虛擬索引,同時我們將VPN轉換為PPN,這種模式稱之為虛擬索引、物理標記緩存架構(Virtual-indexed Physically-tagged Caches),其實我們也可以將虛擬地址中的偏移量作為緩存標記,也就是說虛擬地址中的偏移量(VPO)既作為緩存索引也作為緩存標記,這種緩存架構成為虛擬索引、虛擬標記緩存架構(Virtual-indexed Virtually-tagged Caches),也叫虛擬地址緩存(Virtual Address Caches),接下來我們來分析這兩種緩存架構。

虛擬索引、虛擬標記緩存(Virtual-indexed Virtually-tagged Caches)

 

 

此種緩存架構讓緩存保存虛擬地址,但是現代處理器極少使用這種緩存設計,雖然很塊,但是處理起來很複雜, 比如進行上下文切換時需要刷新緩存(當然可以在地址空間添加ASID),但是即使這樣,由於頁面可以共享而造成處理頁面別名問題,用於直接映射緩存的解決方案,共享頁面的VA必須在緩存索引位中一致,確保訪問同一PA的所有VA將在直接映射的緩存(早期SPARC)中發生衝突,所以大多處理器採用第二種(VA-PA)緩存架構。

虛擬索引、物理標記緩存(Virtual-indexed Physically-tagged Caches)

 

并行TLB & Cache訪問採取的就是此種架構,此種架構要求緩存索引完全包含在虛擬地址中的虛擬偏移量中。緩存標記和PPN相等(當然第一種)當查詢緩存時也執行TLB訪問,它是當前處理器最常見的設計,我們知道緩存使用的是物理地址,而CPU產生的是虛擬地址,這也就意味着沒有TLB就無法完成緩存查找。前面我們了解到緩存數據存儲結構存在直接映射、組相聯、全相聯三種結構,在此種緩存架構中有使用限制,我們首先來看看直接映射。

 

并行訪問的本質在於緩存查詢數據無需等待TLB完成,二者可同時開始,所以當兩者訪問完成后需要進行比較,如果(cache size <=  page size)即(C = L + b) <= P才有效,因為對於緩存的所有輸入都無需進行任何翻譯。

通過組相聯增加了緩存的關聯性從而減少索引到緩存所需地址的位數,在訪問完成後進行比較,如果(cache size) / (associativity) ≤ page size即(C <= P + A)才有效。對於緩存和TLB都採用的組相聯從而減少缺失率,所以對於并行訪問中的緩存組相聯映射必須滿足(cache size) / (associativity) ≤ page size。那麼問題來了,如果一個緩存大小為64KB,採用2路相聯,頁大小>=4k,那麼可以進行并行訪問TLB & Cache嗎?很顯然不能,如下

緩存大小:64KB = 216     ————-》 C = 16

組相聯:2                        ————-》 A = 1

頁大小: 4KB = 212        ————–》P >= 12

那麼問題又來了,對於一個16位的虛擬地址,頁大小為64字節,緩存大小為256b,採用8路相聯的1級緩存且有16塊,那麼可以并行訪問TLB &Cache嗎?請輸出原因。

總結

本節我們詳細介紹了TLB &Cache二者的關係,採用并行訪問通過VPN查找TLB,VPO查詢緩存同時進行來提高訪問速度。下一節我們進入頁表數據結構的詳細講解,謝謝。 

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

【其他文章推薦】

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

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

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

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

※回頭車貨運收費標準

從0到70%:Chrome上位揭秘!

最近的數據显示,Chrome在2020年4月的市場份額達到了70%左右,把微軟的Edge和Firefox遠遠甩在身後,毫無疑問,Chrome贏得了第二次遊覽器之戰,成為新一代王者。 

 

Chrome的第一版於2008年推出,當時微軟的IE瀏覽器幾乎佔到了60%的份額,Firefox緊隨其後,佔據了大概30%,Chrome在2008年僅占0.3%。 

十年以後Chrome就主導了瀏覽器的市場, 這一切是怎麼發生的? 

我們先來回顧一下第一次瀏覽器之戰,交戰的雙方是Netscape的Navigator瀏覽器和微軟的IE, Netscape佔據着先發優勢,IE則背靠Windows這棵大樹,雙方你來我往,戰事極為精彩,競爭帶來了技術進步,像JavaScript、DHTML、CSS、XMLHttpRequest等各種技術層出不窮。 

IE4成為這場戰爭的轉折點,因為它被集成到了Windows當中, 開箱即用,免費,誰還會去額外下載安裝收費的Netscape呢?  

Netscape從此潰不成軍,IE贏得了最後的勝利,從這張圖中可以清楚地看出IE和Netscape之間此消彼長的勢頭。 

 

IE的勝利也結束了Web瀏覽器的快速創新,早期的IE是积極進取的,比如AJAX的基石XMLHttpRequest就是IE率先提出來,並且發揚光大的。 

可是一旦垄斷形成,微軟就不思進取,不想更新了,2001年微軟發布IE6以後,在長達5年的時間里,IE居然沒有新版本發布! 

很多年輕的程序員沒有經歷過被IE支配的“恐懼”,那個時候開發網頁,必須要保證在IE6上能夠運行,否則你絕對活不了。巔峰時期IE6曾經達到過90%多的恐怖佔有率, 很多國企,內部系統都是基於IE6。 

雖然Netscape的瀏覽器戰敗,卻沒有因為死亡,Netscape把Navigator的代碼開源,捐給了非盈利的Mozilla基金會。在這裏Netscape幾經輾轉,終於在2004年涅槃重生,變身為著名的Firefox。 

 

我現在還記得第一次看到FireFox時的感受:非常輕薄!速度飛快!作為開發人員,我迅速就拋棄了老舊不堪的IE, 把Firefox作為主力的瀏覽器。 

Firefox也不負眾望,在此後的幾年中穩步上升,到2009年達到了30%多的佔有率,隱隱有成為下一個霸主的潛質。 

可是另外一個可怕的對手出現了,Google在2008年推出了一個叫做Chrome的瀏覽器,這個時候iPhone上市不到一年,Windows7剛剛面世,IE依然是最流行的瀏覽器。 

但是Google卻看到了不一樣的東西,它們認為現在的互聯網和10幾年前大不相同了,原來只是web pages,現在到處是applications,而瀏覽器的本質卻沒有變化。Google覺得自己有責任改變, 這幾幅漫畫講述了Google要推出Chrome的根本原因: 

 

 此時的Web已經進入Web2.0時代,像Google Map和GMail這樣的應用迫切需要瀏覽器能夠快速地裝載頁面,快速地執行JavaScript。 

Google下定決心,從零開始設計一個滿足現代Web應用的瀏覽器, 瀏覽器不僅僅是一個瀏覽網頁的工具,而是一個新的平台,在此之上可以在線完成各種事情,這種深刻的洞察力將給Google Chrome帶來極大的成功。 

Google給新瀏覽器定下的目標是:穩定,快速,安全,好用,開源。財大氣粗的它組建了一支豪華團隊來開發Chrome , 並且從Firefox挖走了好幾員幹將,如Ben Goodger,這可是Firefox的主力開發。 

與IE和Firefox相比,Chrome的一大優勢就是拋棄了遺留代碼的包袱,從頭開始設計,開發人員可以盡情地施展才華,他們帶來了兩個重要的創新: 

1. 在很早的時候就確定下了“沙箱”的機制:每個Tab頁都運行在自己的進程中,互不影響,充分利用多核。 

2. 開發了強勁的JavaScript執行引擎 V8,讓Web應用迅速地執行JavaScript代碼。 

2008年9月,Chrome推出Beta版,9個月後,即獲得3000萬用戶 

2009年12月,推出擴展程序庫,讓用戶安裝第三方插件,生態迅速繁榮。 

2010年,推出Web 應用商店。 

2012年2月,Chrome發布了Android版本, 6月推出iOS版本,此時市場份額達到30%以上 

2013年,為了對第三方的惡意擴展程序進行控制,Google要求所有的擴展必須託管在應用商店中 

……

 

一系列措施讓Chrome迅速蠶食了Firefox和IE的市場,從這幅圖可以清晰地看出IE(藍色線條)的沒落和Chrome(綠色線條)的崛起。

 

 

微軟豈會就此認輸?在這段時間內相繼推出IE7, IE8, IE9,IE10 , IE 11, 但是遺留的包袱讓它步履維艱,它那緩慢的速度經常成為大家調侃的對象: 

 

到了Windows 10 ,微軟另起爐灶,推出新的瀏覽器Edge,但也難挽敗局。 

微軟新CEO納德拉上台以後,一反原來封閉的形象,擁抱開源。2018年底,微軟宣布將會採用Google開源的Chromium為核心來構建Edge瀏覽器,從此Microsoft Edge和Google Chrome算是同源了,以後發展如何,我們拭目以待。 

Chome登上王位以後,對Google帶來了巨大的好處,因為Google本身提供了很多極為Web的服務:GMail, Google Map , Youtube, Google Gocs, Google Earth….  現在Google把瀏覽器端和服務器端都掌握了,那修改一下中間的協議也不算什麼了,對用戶來說,反正背後的協議也看不到,只要能變快就行。 

Google可以用Chrome試驗各種新協議,於是我們看到它對HTTP1.1動手,做了一個叫做SPDY協議的實驗,非常成功,成為了HTTP 2的基礎。然後又對傳輸層協議開刀,搞出了一個新的傳輸層協議QUIC,解決了TCP了諸多問題,有望把TCP給替換掉。基於QUIC,新的HTTP協議,即HTTP/3正在制定當中。 

尾聲

 Chrome的成功主要是因為Google深刻的洞察力,他們看到了Web未來的趨勢,迅速推出產品擁抱了這種趨勢。 

Chrome如今佔據了和當年的IE6一樣的主導地位, 一些批評聲音出現了,The verge有一篇報道說Google的很多Web應用都提倡“使用Chrome瀏覽效果最佳”, “Google Meet、Allo、YouTube TV、Google Earth 和 YouTube Studio Beta 都會阻止 Windows 10 系統的默認瀏覽器 Microsoft Edge 訪問它們,並指引用戶下載 Chrome 瀏覽器” ,“使用非Chrome瀏覽器訪問google.com會被提醒三次下載Chrome。”

 

 

Chrome最終會走向何方?你覺得Chrome會像IE那樣停滯不前嗎? 

參考資料:

https://en.wikipedia.org/wiki/Browser_wars

https://usefyi.com/chrome-history/

https://www.theverge.com/2018/1/4/16805216/google-chrome-only-sites-internet-explorer-6-web-standards

https://www.google.com/googlebooks/chrome/big_00.html

 

更多精彩文章,盡在碼農翻身

微服務把我坑了

如何降低程序員的工資?

程序員,你得選准跑路的時間!

兩年,我學會了所有的編程語言!

一直CRUD,一直996,我煩透了,我要轉型

字節碼萬歲!

上帝託夢給我說:一切皆文件

Javascript: 一個屌絲的逆襲

Node.js :我只需要一個店小二

我是一個線程

TCP/IP之大明郵差

一個故事講完Https

CPU 阿甘

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

【其他文章推薦】

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

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

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

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

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