SUV坐姿高盲點少?大錯特錯 買車前要先知道這些坑!_台中搬家

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

好比飛度,這麼小一輛車,但它空間卻不比軸距比它長的弱。配置多就性價比高現在有很多黑科技,不常見的就不說,例如自動剎車,自動巡航,自動駐車這些,如果設置調配的好,是挺好用,挺方便的,但如果調配不好,那還真的不要。

現在大多數人對汽車都比較了解,在網上都能看到或者了解到很多信息,但由於一些宣傳或者鍵盤俠讓不少人認為的一些東西是正確,但其實並不然,這導致很多人在選車的時候產生一些錯誤的觀念,例如下面這些。

車輛參數

現在車輛的所有參數在網上一查一大堆,比如現在很流行的小排量發動機,參數上說的有多牛,能達到幾升幾升的自然吸氣的發動機,也許就單單拿個發動機出來測試,是能達到這個數值,但是要想想,裝到車上就不同了,車重,變速箱等等,都能影響這個發動機效果。

舊的不一定就比新的差

就拿最常比較的渦輪和自吸來比較吧,講真,兩個“半斤八兩”,都有優缺點,還有就是變速箱,雙離合不一定就比傳統的AT好,也許一些雙離合的車,

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

能頓挫到你下半身不能自理。

軸距不等於車內空間

在國內很流行的是,加長,也就是所謂的L車型,雖然軸距的加長是有利於車內空間,但是大不大又是另一回事。本身車內空間就小,加長軸距,最多也就加多一些,但也是小。好比飛度,這麼小一輛車,但它空間卻不比軸距比它長的弱。

配置多就性價比高

現在有很多黑科技,不常見的就不說,例如自動剎車,自動巡航,自動駐車這些,如果設置調配的好,是挺好用,挺方便的,但如果調配不好,那還真的不要。例如,在正常行駛情況下,突然自動剎車,不管那種情況,只要一停就幫駐車等等情況,那個時候就不覺得這是科技的東西。

SUV坐姿高比轎車盲點少

其實不然,由於車身較高,這也導致了車輛兩邊和車尾的盲點區域變得較大,例如,公交車的駕駛位視野多大,但是為什麼C1駕照你,就是不能駕駛呢?

尾語:網上或者一些道聽途說的東西,可以選擇聽一聽,看一看,但不代表都是正確的,是不是真那麼回事,有機會最好自己試一試。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

小米聖誕節活動正式開跑!每日簽到拿贈禮、各項產品優惠價、還能用積分換 1 折券_台中搬家

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

雖著聖誕節即將來臨,小米稍早也正式開跑「小米聖誕節」活動,這次可說年末大回饋阿!不僅多項產品都有折扣,活動期間每日都有簽到贈禮可以拿,對於有很多積分的人,甚至還能兌換指定商品 1 折券,經常在小米官網購買東西的人絕不能錯過,下面就整理給大家。

小米聖誕節活動內容整理

這次小米聖誕節活動可以分成五個部分:「現金折價券與贈禮」、「超值滿額贈」、「滿額加價購」、「超值組合」與「精選好禮」,活動時間從 12 月 17 日 10:00 ~ 12 月 25 日 23:59 止。

首先是簽到贈禮,每日小米都會推出一些神秘禮品要送給大家,今天是現金券 NT$300,滿 NT$3,500 可使用,不過手機與新品不適用,明天還不知道,不過如果連續簽到 9 天,還能獲得無門檻的 NT$100 現金券:

對於有很多積分的人,如果不知道拿來幹嘛,就能透過這次活動來兌換現金券或 1 折券,基本 100 積分起跳,可兌換 NT$100~NT$1,500 的現金券。不過要注意是,這裡兌換的現金券都有金額限制。如果你不知道自己的積分多少,可以點擊下方了解更多查詢。獲得積分方式有很多種,購買商品、分享產品頁、下載 App、收集燃料等都有:

已經擁有超過 1,800 以上積分的人,1 折券更值得參考,非常多產品都能兌換,像是小愛音箱、小米手環 5、米家全景相機、米家床頭燈、米家電動刮鬍刀、米家感應夜燈等等:

絕大多數的小米產品都有折扣,活動頁面最下方有精選好禮推薦,如:米家掃地機器人便宜 NT$500、米家全景相機便宜 NT$1,000:

米家手持無線吸塵器 Lite 便宜 NT$300、米家掃拖機器人 G1 便宜 NT$600、米家電磁爐便宜 NT$100:

非常熱門的米家電動打氣機與小米手環 5 也各便宜 NT$100,更詳細內容就麻煩各位到活動頁面瀏覽:

於活動期間單筆滿指定金額,還能獲得各種贈品,如:

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

  • 滿 NT$3,000 送小米手環 4C
  • 滿 NT$6,000 送小米小愛音箱 Play / 10000 小米行動電源 QC 3.0 高配版(二選一)
  • 滿 NT$9,000 送小米手環 5
  • 滿 NT$15,000 送小米小愛音箱 Art

不需要買這麼多的人,小米也有推出滿額加價購,單筆滿指定金額,可獲得優惠加價資格:

  • 滿 NT$1,500,可用 NT$95 加購 Redmi 行動電源 10000 標準版 白色
  • 滿 NT$4,000,可用 NT$10 加購米家 wiha 8 和 1 棘輪螺絲起子 / 10000 小米行動電源 3 無限版 超值版 白色(二選一)
  • 滿 NT$7,000,可用 NT$95 加購米家電動起子機

另外還有買指定商品可用優惠價加購其他商品,像是買小米手環 4C,可用 NT$10 加購腕帶一條、買小米 34 型曲面螢幕,可用 NT$10 加購小米無線雙模滑鼠靜音版 / 小米木紋滑鼠墊(二選一)等等:

超值組合部分也蠻划算的,像是有缺電動牙刷的人,就能趁這次一次購買米家聲波電動牙刷 T500 + 刷頭,省下 NT$100,兒童版省更多。米家吸頂燈 450 + Yeelight 遙控器也不錯,省下快 NT$200:

今天晚上小米商城也將推出直播活動,除了告訴你交換禮物的攻略外,還能抽新品與 NT$500 現金券,有時間的人可以看看,12/17 20:00 小米官網與 YouTube 同步直播:

補充資料

  • 小米聖誕節活動頁面:點我前往

小米推出「小米多看電紙書 Pro」,待機長達 70 天,還限實贈送 VIP 一年使用權

您也許會喜歡:

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

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

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

蒙古爆發鼠疫 傳已死2人封城 外國遊客禁離境_台中搬家

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

摘錄自2019年5月5日自由時報報導

蒙古國傳爆發鼠疫,其中傳出鼠疫的烏列蓋市已有2人死亡,全城封閉檢疫,以致在當地旅遊外國遊客全被禁止回國。

《俄羅斯通訊社》報導,最初傳出爆發鼠疫訊息的是一個叫 vesti.ru網站,接著,俄羅斯駐蒙古大使館證實這個訊息。

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

綜合媒體報導,這場瘟疫初步認定是由當地土撥鼠傳播,已有2人死亡,其中,有人在醫院內死亡,以致在4月30日至5月1日夜裡,爆發鼠疫的烏列蓋市全城封閉檢疫,有外國遊客恐慌想要離城返國,即被禁止,也因此外傳鼠疫爆發事件;蒙古國宣布,檢疫將到今天(5月5日),是否繼續封城檢疫,還沒有進一步消息。

西伯利亞媒體也指出,蒙古人有生吃老鼠腎臟的傳統,認為會健康,每年都會發生鼠疫,並非新的疾病。

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

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

讓傳統戲曲綻放時代光華_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

戲曲是中華優秀傳統文化的精粹,蘊含着深厚的歷史人文底蘊和獨特的藝術魅力。2020年新年戲曲晚會喜慶、祥和、大氣、濃烈,在百花齊放中突出藝術性與思想性的結合,在精彩紛呈里彰顯傳統藝術的時代精神,是一台精美、精鍊、精緻的戲曲晚會。

2020年新年戲曲晚會充分展示了近年來我國戲曲藝術繁榮興旺的喜人景象。參演劇目既有觀眾耳熟能詳、傳播較廣的京劇、崑曲、豫劇,也有極富地方風味的婺劇、丹劇、紹劇、閩劇、晉劇、吉劇和川劇,可謂梨園百花齊放,劇種爭奇鬥豔。近年來,隨着戲曲振興工程的實施,全國地方戲曲劇種普查、京劇像音像工程、“名家傳戲——當代戲曲名家收徒傳藝工程”、全國基層院團戲曲會演、全國地方戲優秀劇目展演、全國地方戲曲南方會演、全國梆子聲腔優秀劇目展演等穩步推進,地方戲的保護傳承取得明顯進展,一大批地方戲呈現出新老融合、生機煥發的生動景象。

2020年新年戲曲晚會群英薈萃、少長咸集,充分展現了我國戲曲藝術傳承有序、後繼有人的美好前景。84歲老藝術家童祥苓壯懷激烈,“楊子榮”英姿豪邁、氣貫長虹;72歲老藝術家裴艷玲老當益壯,“林沖”夜奔,愁腸百結、令人動容;75歲老藝術家章其祥身手不減當年,“關羽”觀陣,淵渟岳峙、聲振屋瓦。而最小的一位主演只有10歲。尤為可喜的是,一大批青年戲曲工作者展現出高超的藝術技巧,唱念做打,功底紮實,對人物內心的挖掘與塑造,立體生動,給戲曲藝術增添了青春的力量。

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

晚會中一些劇目是膾炙人口的經典之作,深受群眾喜愛。這既是因為其藝術價值高,更是因為其中蘊含着深沉的家國情懷,承載着追求正義與美好的理想。豫劇《蘇武》、紹劇《佘太君》、晉劇《於成龍》這三部戲,一部源自傳統劇目,一部改編自京劇,一部是新創劇目,分別塑造了堅守氣節的志士、愛國救國的英雄和清廉為民的官員三個人物形象,時代雖然不同,角色雖然各異,但家國情懷卻是一以貫之、一脈相承的。源遠流長的家國情懷經過藝術家的匠心演繹,歷久彌新。

戲曲不僅僅是傳統的,也可以是現代的,表現形式可以是原汁原味的傳統,表現內容卻可以與時俱進不斷創新。婺劇《信仰的味道》和壯劇《黃文秀》,分別塑造了翻譯《共產黨宣言》的陳望道和犧牲在扶貧一線的青年黃文秀,把“初心”與“使命”的主題用戲曲藝術淋漓盡致地表現出來,具有催人淚下、發人深省的藝術力量。

2020年新年戲曲晚會給人以優美的精神享受和深刻的思想啟迪。正如習近平總書記所指出的:“中華優秀傳統文化是中華民族的精神命脈,是涵養社會主義核心價值觀的重要源泉,也是我們在世界文化激蕩中站穩腳跟的堅實根基。要結合新的時代條件傳承和弘揚中華優秀傳統文化,傳承和弘揚中華美學精神。”戲曲藝術植根於人民,蘊含着中華民族的價值追求和審美心理,我們應該在保護傳承的基礎上結合時代特點創新發展,使古老的戲曲藝術綻放出時代光華,而更為群眾所喜愛。

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

Intel 第 11 代桌上型處理器工程版 i9-11900 跑分搶先曝光_潭子電動車

※Google地圖已可更新顯示潭子電動車充電站設置地點!!

日本、大陸,發現這些先進的國家已經早就讓電動車優先上路,而且先進國家空氣品質相當好,電動車節能減碳可以減少空污

Intel 原訂明年 3~4 月發表第 11 代桌上型處理器,不過前陣子外媒獲得的最新消息,確定會提前到明年 1 月,而隨著日子越來越近,相關謠言也陸續傳出,近日中國就出現疑似工程版 ES 的 i9-11900 實品照與跑分,效能可說相當令人期待。

Intel 第 11 代桌上型處理器工程版 i9-11900 跑分搶先曝光

這顆 ES 版 i9-11900 的基礎頻率為 1.8GHz,而根據 CPU-Z 顯示的資料,單核心超頻之後可達 4.4GHz,全核心則是 3.8GHz,TDP 為 65W。另外還能注意到,搭配的主機板為 MSI Z490I,意味著第 11 代處理器也能使用在現有的 400 系列:

CPU-Z 測試結果顯示,單核心獲得 582.1 分,多核心為 5262 分,若跟現有的第十代處理器相比,i9-10900K 超頻到 5.3GHz 後,單核心可獲得 584 分,i7-10700K 則是 558 分,代表說 i9-11900 跟 i9-10900K 相當,比 i7-10700K 快 4% 左右:

有一點也值得注意的是,上面提的 i9-10900K 與 i7-10700K 都是超過 5GHz 時脈所測出分數,i9-11900 則是 4.4GHz,有 16~18% 的差距。

另外稍早一名 OneRaichu 在個人 Twitter 上分享他測出更高的分數,單核心達到 597.3 分,多核心也有 5686.2 分:

下圖是外媒 Wccftech 整理出的跑分結果:

雖然這顆 i9-11900 的單核心分數還算不錯,但多核心就大幅落後 i9-10900K 與 i7-10700K 了,不過從規格來看也算合理,畢竟 i9-10900K 可是擁有 10 核心 20 執行緒,i7-10700K 全核超頻也能達到 4.7GHz,比 i9-11900 的 3.8GHz 還要高。

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

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

除了 i9-11900,這個月初 Ashes 資料庫也出現 i9-11900K 的分數,搭配 RTX 2080Ti 顯卡,無論是 Framerate 還是 CPU Framerate,都擊敗了 AMD Ryzen 9 5950X:

AMD Ryzen 9 5950X 分數:

資料來源:Wccftech、Notebook Check

Intel 發表新一代 Optane SSD 系列,並同步推出三款採 144 層單元 TLC、QLC 的新款 SSD

您也許會喜歡:

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

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

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

有別於一般網頁架設公司,除了模組化的架站軟體,我們的營業主軸還包含:資料庫程式開發、網站建置、網頁設計、電子商務專案開發、系統整合、APP設計建置、專業網路行銷。

老樹畫畫展出60餘件畫作_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

“難得幾個好友,江湖相扶行走。平時兩條微信,見面一杯薄酒。”畫中幾名男子身着長衫、頭戴寬檐帽倚樹而立,在層林盡染的林中小聚,畫面上還配有這首詼諧幽默的小詩。1月3日,“大風吹”老樹畫畫個展在榮寶齋當代藝術館開展,共展出60餘幅老樹的畫作。

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

作為近年來微博上的紅人畫家,本名劉樹勇的老樹畫畫並非專職畫家,卻吸引了大量網友的喜愛,目前他的微博粉絲多達248萬。老樹畫畫是中央財經大學文化與傳媒學院藝術設計系主任、教授,主要工作是從事視覺語言形態的研究、影像的媒介傳播研究與具體實踐。從2007年提起畫筆到現在,劉樹勇已經斷斷續續畫了十多年,一張張親切自然的水墨小畫配上風趣哲理的打油詩,總能引發人們的共鳴。

“這個小畫展一開始的名字叫風乍起,因為展覽定在初秋。結果一拖再拖,到了年底。昨日大風,被吹得一屁股坐在地上,就改叫大風吹吧。畫畫,或者說活着,只是一件很私人的事兒。盡量畫得好一點,把畫畫得有意思一些,就很不容易了。”對於此次展覽,老樹畫畫的介紹依舊雲淡風輕。他希望好好做自己的事,把畫畫得再誠懇一點。展覽持續至1月9日。(記者 王廣燕)

本站聲明:網站內容來http://www.societynews.cn/html/wh/fq/,如有侵權,請聯繫我們,我們將及時處理

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

一個 static 還能難得住我?_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

static 是我們日常生活中經常用到的關鍵字,也是 Java 中非常重要的一個關鍵字,static 可以修飾變量、方法、做靜態代碼塊、靜態導包等,下面我們就來具體聊一聊這個關鍵字,我們先從基礎開始,從基本用法入手,然後分析其原理、優化等。

初識 static 關鍵字

static 修飾變量

static 關鍵字表示的概念是 全局的、靜態的,用它修飾的變量被稱為靜態變量

public class TestStatic {
    
    static int i = 10; // 定義了一個靜態變量 i 
}

靜態變量也被稱為類變量,靜態變量是屬於這個類所有的。什麼意思呢?這其實就是說,static 關鍵字只能定義在類的 {} 中,而不能定義在任何方法中。

就算把方法中的 static 關鍵字去掉也是一樣的。

static 屬於類所有,由類來直接調用 static 修飾的變量,它不需要手動實例化類進行調用

public class TestStatic {

    static int i = 10;

    public static void main(String[] args) {
        System.out.println(TestStatic.i);
    }
}

這裏你需要理解幾個變量的概念

  • 定義在構造方法、代碼塊、方法的變量被稱為實例變量,實例變量的副本數量和實例的數量一樣。
  • 定義在方法、構造方法、代碼塊的變量被稱為局部變量;
  • 定義在方法參數的變量被稱為參數。

詳情參考

static 修飾方法

static 可以修飾方法,被 static 修飾的方法被稱為靜態方法,其實就是在一個方法定義中加上 static 關鍵字進行修飾,例如下面這樣

static void sayHello(){}

《Java 編程思想》在 P86 頁有一句經典的描述

static 方法就是沒有 this 的方法,在 static 內部不能調用非靜態方法,反過來是可以的。而且可以在沒有創建任何對象的前提下,僅僅通過類本身來調用 static 方法,這實際上是 static 方法的主要用途

其中有一句非常重要的話就是 static 方法就是沒有 this 的方法,也就是說,可以在不用創建對象的前提下就能夠訪問 static 方法,如何做到呢?看下面一段代碼

在上面的例子中,由於 staticMethod 是靜態方法,所以能夠使用 類名.變量名進行調用。

因此,如果說想在不創建對象的情況下調用某個方法,就可以將這個方法設置為 static。平常我們見的最多的 static 方法就是 main方 法,至於為什麼 main 方法必須是 static 的,現在應該很清楚了。因為程序在執行 main 方法的時候沒有創建任何對象,因此只有通過類名來訪問。

static 修飾方法的注意事項

  • 首先第一點就是最常用的,不用創建對象,直接類名.變量名 即可訪問;
  • static 修飾的方法內部不能調用非靜態方法;
  • 非靜態方法內部可以調用 static 靜態方法。

static 修飾代碼塊

static 關鍵字可以用來修飾代碼塊,代碼塊分為兩種,一種是使用 {} 代碼塊;一種是 static {} 靜態代碼塊。static 修飾的代碼塊被稱為靜態代碼塊。靜態代碼塊可以置於類中的任何地方,類中可以有多個 static 塊,在類初次被加載的時候,會按照 static 代碼塊的順序來執行,每個 static 修飾的代碼塊只能執行一次。我們會面會說一下代碼塊的加載順序。下面是靜態代碼塊的例子

static 代碼塊可以用來優化程序執行順序,是因為它的特性:只會在類加載的時候執行一次。

static 用作靜態內部類

內部類的使用場景比較少,但是內部類還有具有一些比較有用的。在了解靜態內部類前,我們先看一下內部類的分類

  • 普通內部類
  • 局部內部類
  • 靜態內部類
  • 匿名內部類

靜態內部類就是用 static 修飾的內部類,靜態內部類可以包含靜態成員,也可以包含非靜態成員,但是在非靜態內部類中不可以聲明靜態成員。

靜態內部類有許多作用,由於非靜態內部類的實例創建需要有外部類對象的引用,所以非靜態內部類對象的創建必須依託於外部類的實例;而靜態內部類的實例創建只需依託外部類;

並且由於非靜態內部類對象持有了外部類對象的引用,因此非靜態內部類可以訪問外部類的非靜態成員;而靜態內部類只能訪問外部類的靜態成員;

  • 內部類需要脫離外部類對象來創建實例
  • 避免內部類使用過程中出現內存溢出
public class ClassDemo {
  
    private int a = 10;
    private static int b = 20;

    static class StaticClass{
        public static int c = 30;
        public int d = 40;
      
        public static void print(){
            //下面代碼會報錯,靜態內部類不能訪問外部類實例成員
            //System.out.println(a);
     
            //靜態內部類只可以訪問外部類類成員
            System.out.println("b = "+b);
            
        }
      
        public void print01(){
            //靜態內部內所處的類中的方法,調用靜態內部類的實例方法,屬於外部類中調用靜態內部類的實例方法
            StaticClass sc = new StaticClass();
            sc.print();
        }   
    }
}

靜態導包

不知道你注意到這種現象沒有,比如你使用了 java.util 內的工具類時,你需要導入 java.util 包,才能使用其內部的工具類,如下

但是還有一種導包方式是使用靜態導包,靜態導入就是使用 import static 用來導入某個類或者某個包中的靜態方法或者靜態變量。

import static java.lang.Integer.*;

public class StaticTest {

    public static void main(String[] args) {
        System.out.println(MAX_VALUE);
        System.out.println(toHexString(111));
    }
}

static 進階知識

我們在了解了 static 關鍵字的用法之後,來看一下 static 深入的用法,也就是由淺入深,慢慢來,前戲要夠~

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

關於 static 的所屬類

static 所修飾的屬性和方法都屬於類的,不會屬於任何對象;它們的調用方式都是 類名.屬性名/方法名,而實例變量和局部變量都是屬於具體的對象實例。

static 修飾變量的存儲位置

首先,先來認識一下 JVM 的不同存儲區域。

  • 虛擬機棧 : Java 虛擬機棧是線程私有的數據區,Java 虛擬機棧的生命周期與線程相同,虛擬機棧也是局部變量的存儲位置。方法在執行過程中,會在虛擬機棧種創建一個 棧幀(stack frame)

  • 本地方法棧: 本地方法棧也是線程私有的數據區,本地方法棧存儲的區域主要是 Java 中使用 native 關鍵字修飾的方法所存儲的區域

  • 程序計數器:程序計數器也是線程私有的數據區,這部分區域用於存儲線程的指令地址,用於判斷線程的分支、循環、跳轉、異常、線程切換和恢復等功能,這些都通過程序計數器來完成。

  • 方法區:方法區是各個線程共享的內存區域,它用於存儲虛擬機加載的 類信息、常量、靜態變量、即時編譯器編譯后的代碼等數據,也就是說,static 修飾的變量存儲在方法區中

  • : 堆是線程共享的數據區,堆是 JVM 中最大的一塊存儲區域,所有的對象實例,包括實例變量都在堆上進行相應的分配。

static 變量的生命周期

static 變量的生命周期與類的生命周期相同,隨類的加載而創建,隨類的銷毀而銷毀;普通成員變量和其所屬的生命周期相同。

static 序列化

我們知道,序列化的目的就是為了 把 Java 對象轉換為字節序列。對象轉換為有序字節流,以便其能夠在網絡上傳輸或者保存在本地文件中。

聲明為 static 和 transient 類型的變量不能被序列化,因為 static 修飾的變量保存在方法區中,只有堆內存才會被序列化。而 transient 關鍵字的作用就是防止對象進行序列化操作。

類加載順序

我們前面提到了類加載順序這麼一個概念,static 修飾的變量和靜態代碼塊在使用前已經被初始化好了,類的初始化順序依次是

加載父類的靜態字段 -> 父類的靜態代碼塊 -> 子類靜態字段 -> 子類靜態代碼塊 -> 父類成員變量(非靜態字段)

-> 父類非靜態代碼塊 -> 父類構造器 -> 子類成員變量 -> 子類非靜態代碼塊 -> 子類構造器

static 經常用作日誌打印

我們在開發過程中,經常會使用 static 關鍵字作為日誌打印,下面這行代碼你應該經常看到

private static final Logger LOGGER = LogFactory.getLoggger(StaticTest.class);

然而把 static 和 final 去掉都可以打印日誌

private final Logger LOGGER = LogFactory.getLoggger(StaticTest.class);
private Logger LOGGER = LogFactory.getLoggger(StaticTest.class);

但是這種打印日誌的方式存在問題

對於每個 StaticTest 的實例化對象都會擁有一個 LOGGER,如果創建了1000個 StaticTest 對象,則會多出1000個Logger 對象,造成資源的浪費,因此通常會將 Logger 對象聲明為 static 變量,這樣一來,能夠減少對內存資源的佔用。

static 經常用作單例模式

由於單例模式指的就是對於不同的類來說,它的副本只有一個,因此 static 可以和單例模式完全匹配。

下面是一個經典的雙重校驗鎖實現單例模式的場景

public class Singleton {
  
    private static volatile Singleton singleton;
 
    private Singleton() {}
 
    public static Singleton getInstance() {
        if (singleton == null) {
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

來對上面代碼做一個簡單的描述

使用 static 保證 singleton 變量是靜態的,使用 volatile 保證 singleton 變量的可見性,使用私有構造器確保 Singleton 不能被 new 實例化。

使用 Singleton.getInstance() 獲取 singleton 對象,首先會進行判斷,如果 singleton 為空,會鎖住 Singletion 類對象,這裡有一些小夥伴們可能不知道為什麼需要兩次判斷,這裏來解釋下

如果線程 t1 執行到 singleton == null 后,判斷對象為 null,此時線程把執行權交給了 t2,t2 判斷對象為 null,鎖住 Singleton 類對象,進行下面的判斷和實例化過程。如果不進行第二次判斷的話,那麼 t1 在進行第一次判空后,也會進行實例化過程,此時仍然會創建多個對象。

類的構造器是否是 static 的

這個問題我相信大部分小夥伴都沒有考慮過,在 Java 編程思想中有這麼一句話 類的構造器雖然沒有用 static 修飾,但是實際上是 static 方法,但是並沒有給出實際的解釋,但是這個問題可以從下面幾個方面來回答

  • static 最簡單、最方便記憶的規則就是沒有 this 引用。而在類的構造器中,是有隱含的 this 綁定的,因為構造方法是和類綁定的,從這個角度來看,構造器不是靜態的。
  • 從類的方法這個角度來看,因為 類.方法名不需要新創建對象就能夠訪問,所以從這個角度來看,構造器也不是靜態的
  • 從 JVM 指令角度去看,我們來看一個例子
public class StaticTest {

    public StaticTest(){}

    public static void test(){

    }

    public static void main(String[] args) {
        StaticTest.test();
        StaticTest staticTest = new StaticTest();
    }
}

我們使用 javap -c 生成 StaticTest 的字節碼看一下

public class test.StaticTest {
  public test.StaticTest();
    Code:
       0: aload_0
       1: invokespecial #1                  // Method java/lang/Object."<init>":()V
       4: return

  public static void test();
    Code:
       0: return

  public static void main(java.lang.String[]);
    Code:
       0: invokestatic  #2                  // Method test:()V
       3: new           #3                  // class test/StaticTest
       6: dup
       7: invokespecial #4                  // Method "<init>":()V
      10: astore_1
      11: return
}

我們發現,在調用 static 方法時是使用的 invokestatic 指令,new 對象調用的是 invokespecial 指令,而且在 JVM 規範中 https://docs.oracle.com/javase/specs/jvms/se7/html/jvms-6.html#jvms-6.5.invokestatic 說到

從這個角度來講,invokestatic 指令是專門用來執行 static 方法的指令;invokespecial 是專門用來執行實例方法的指令;從這個角度來講,構造器也不是靜態的。

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

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

「持續更新」市售千元以下 256GB V30 等級記憶卡讀寫效能比一比_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

最近 Micro SD 記憶卡價格不知道為什麼崩得很厲害(開心),所以每次看到有特價就會無聊入手,數量一多就開始挑了,覺得超過千元不買(等特價促銷),速度不夠快不買(V30等級才可穩定錄製 4K 畫質影片,每秒需能穩定寫入30MB/s以上),然後就想說「不然來做專題好了」,所以這篇就誕生啦。其實這個主題想做一陣子了,但一直沒時間寫,而且也要剛好價格有在目標區(千元以下/ V30 速度/256GB或以上)才能做,所以沒有想像中容易,目前先做比較常特價的兩個品牌,之後有看到其他品牌再持續加入。至於為什麼選 Micro SD 記憶卡?主要是手機、GOPRO等行動裝置可用,單眼與筆電裝轉卡也能用(聽說比標準SD容易出搥,但我沒遇過),我覺得比標準 SD 用途廣。

在開始前先以業界標竿「Sandisk」當標準我手邊只有 Sandisk Extreme Pro 128GB V30記憶卡,價格超過千元(笑),不過他是 A2 等級的卡片(A2 的隨機存取表現比 A1好),官方數值號稱 170MB/s讀取,90MB/s寫入,也是最多錄影工作者使用的記憶卡:

測試軟體固定使用 ATTO Disk Benchmark 與 TxBENCH並只看讀取/寫入速度,並使用我手邊速度最快的 金士頓 MobileLite Plus 讀卡機,先強調這是我個人興趣使然也沒有任何贊助的測試,結果僅作參考(記憶卡讀取速度會因為記憶卡本身能力、讀卡機速度、USB連接埠頻寬等因素受到影響,只能盡量大家條件一樣):

目前已知最好的 SanDisk Extreme Pro V30 記憶卡以 ATTO DISK BENCHMARK 速度約 98.6MB讀取/88.1MB寫入:

TxBENCH則是跑出 97.7MB讀取/86.6MB寫入:

業界標竿看完了,就來測其他品牌吧。

達墨 256GB V30 記憶卡

老實講這個品牌我之前沒看過,因為特價好奇才買來試試,名字叫「達墨」(TOPMORE),但圖案看起來明明是達摩的臉呀XD,這張卡廠商終身保固:

以下所有測試都是使用原廠提供的轉卡(轉卡也會影響速度):

ATTO DISK BENCHMARK 速度約 97.6MB讀取/60.5MB寫入:

TxBENCH則是跑出 96.8MB讀取/62.6MB寫入,符合 V30 標準,不過比不上 SanDisk :

這張卡的一般售價大概在1200左右,特價會在990或以下。

美商博帝 265GB V30 記憶卡

這張大概是我看到第一個破千的 256GB V30 記憶卡,目前使用在 DJI OSMO POCKET 上有出現過相容性問題,其他裝置正常,一般價格約 12XX左右,特價會在990以下,廠商保固三年:

美商博帝的速度出乎意料之外的好,ATTO DISK BENCHMARK 速度約 97.6MB讀取/90.5MB寫入:

TxBENCH則是跑出 97.7MB讀取/90.5MB寫入,符合 V30 標準,測試用單眼錄製 4K 影片頗穩定:

 

TEKQ  V30 256GB 記憶卡

TEKQ 這個牌子講實話我也沒看過,這張是momo購物湊運費順便買的,特價8XX元,官方保固10年(我是不奢望可以用這麼久啦),官方宣傳只講讀取可達100MB/s,寫入完全沒提,講實話我本來完全對他沒有期待:

一測不得了,他的讀寫速度比帝博與 SanDisk還要快,ATTO DISK BENCHMARK 速度約 99.2MB讀取/91.7MB寫入:

TxBENCH則是跑出 98.4MB讀取/89.6MB寫入,符合 V30 標準,這片大概是目前我測過價格最低的高速卡(特價期間):

 

 

KLEVV 科賦 Micro SDXC UHS-1 U3 V30 A2 256GB 記憶卡

這片是PCHOME特價時入手的,價格699元(原價11XX元,目前999元),官方號稱終身保固,一樣是V30號稱讀寫破百:
 

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

ATTO DISK BENCHMARK 速度約 98.5MB讀取/85.4MB寫入:

TxBENCH則是跑出 97.3MB讀取/84.2MB寫入,符合 V30 標準:

 

威剛 Premier Pro microSDXC UHS-I U3 A2 V30 256G記憶卡

這片是PCHOME特價時入手的,價格999元(原價1499元),優點是官方號稱終身保固,一樣是V30、A2等級號稱讀取100MB/s寫入達80 MB/s:

ATTO DISK BENCHMARK 速度約 98.8MB讀取/65.2MB寫入:

TxBENCH則是跑出 98.4MB讀取/56.4MB寫入,符合 V30 標準,但跟官方自己宣稱的寫入有 80MB/s還是有差距,算是合格以上表現,主要優點還是終身保(威剛應該算穩):

SAMSUNG 三星 EVO Plus microSDXC UHS-I(U3) Class10 256GB記憶卡

這片是PCHOME特價時入手的,價格888元(目前還是888元),三星官方十年保固,一樣是V30等級號稱讀取100MB/s寫入達85 MB/s:

ATTO DISK BENCHMARK 速度約 99MB讀取/86.1MB寫入:

TxBENCH則是跑出 98.4MB讀取/86.4MB寫入,符合 V30 標準,表現優異,保固也長可以買:

 

TCELL冠元 SUPERIOR+ microSDXC UHS-I(A2)U3 V30 100/85MB 256GB 記憶卡

這片是PCHOME特價時入手的,價格799元(原價1499),原廠終身保固,一樣是V30 A2等級,號稱讀取100MB/s寫入達90 MB/s:

ATTO DISK BENCHMARK 速度約 99.8MB讀取/88MB寫入:

TxBENCH則是跑出 98MB讀取/87.2MB寫入,符合 V30 標準,表現優異,原廠還終身保固,可以趁特價買:

 

SanDisk Extreme microSDXC UHS-I(V30)(A2)256GB 記憶卡

這張SanDisk Extreme microSDXC UHS-I(V30)(A2)256GB 記憶卡是 PCHOME 雙11購物特價時購買,特價939元(現在恢復原價 1299元),公司貨終身保固,在包裝上標誌V30 A2 等級讀取 160 MB、寫入高達90MB,講實話本來以為是吹牛皮:

一測不得了,讀寫速度是目前測過最好表現,ATTO DISK BENCHMARK 速度約 169.1MB讀取/104.6MB寫入:

TxBENCH則是跑出 168MB讀取/104.6MB寫入,符合 V30 標準,這片大概是目前我測過最快的高速卡,根本與宣稱數值不一樣呀,超過官方數據是哪招?只能說它廣告不實了,如果有特價別猶豫立刻入手:

之後如果有看到便宜又大碗的記憶卡阿達再推坑啦,目前為止SanDisk Extreme microSDXC UHS-I(V30)(A2)256GB 記憶卡表現最好、性價比三星不錯(888元)、達墨/ADATA最普,不過受測的卡都有超過 V30 標準,大家選購時可依照價格、保固與喜好選擇。

您也許會喜歡:

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

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

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

日本網友異想天開使用民間散熱法 + 散熱片幫 MacBook 散熱,結果螢幕不小心蓋上整個毀了_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

相信很多人應該多少都曾聽過把硬幣放在電腦最熱處,可以幫助散熱的民間散熱法,不過這在台灣沒那麼紅,但日本可不一樣,即使到了 2020 年,Twitter 上還是隨處可見有人分享他使用這種散熱方式,最近就有一位日本網友更異想天開,除了放上硬幣外,每一個硬幣還再加上散熱片,來提升散熱性,結果卻發生慘烈悲劇,某次不小心把螢幕蓋起來,再次打開螢幕就毀了。

日本網友異想天開使用民間散熱法 + 散熱片幫 MacBook 散熱,結果螢幕不小心蓋上整個毀了

一直以來 MacBook 的散熱設計雖然不差,但這麼貴的一台筆電,每一個人買回家一定會想要好好的愛護,當使用一段時間或長時間 MacBook 都處於高速運算狀態,鍵盤上方位置(轉軸處)都會比較燙,也因此坊間就流傳放上硬幣可以幫助散熱,甚至連日本媒體都特別針對此事做報導。

當然,這民間散熱法確實有效,不過這位日本網友不知是嫌散熱不夠還是怎樣,竟然再加上散熱片,推文還寫著:這可以讓 MacBook 更加舒適快活。至於有沒有效,他就沒有特別說明,當時(10/5)也沒有引起太多討論:

MacBookをさらに快適に過ごすためにヒートシンク付き10円玉を導入したぞ pic.twitter.com/ebG5RPHsgL

— Shin Adachi (@shn) October 5, 2020

過了 2 個多月,上週他再度分享一張 MacBook 左半邊螢幕有一大條整個毀損的照片,並寫著 “引以為戒”,隨後他解釋,造成這意外是某次他忘記把散熱片與硬幣拿出,就蓋上 MacBook 導致,因此他不推薦這方法(笑):

戒め pic.twitter.com/jsqYQXcRTH

— Shin Adachi (@shn) December 22, 2020

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

如果只有單純的硬幣,蓋上時不至於對螢幕造成這麼大的傷害,畢竟是平面,但散熱片上方有著凹凸設計,因此只要稍微出力蓋上,螢幕就立刻被壓迫到。

所以說,對於健忘的人來說,還是不推薦使用這種坊間散熱法,直接買台筆電用的散熱器比較實在。新款 M1 MacBook 應該就不太有這問題,功耗非常的低。

即使到了 2020 年,日本還是有不少使用 10 日圓硬幣散熱的 Twitter 推文:

而且似乎很流行這種放很多硬幣的方式,不過相較於只放一個,放多個確實也比較安全一點,蓋上時會整個倒下來,可以立即提醒:

日本玩家送修 Wii U 意外找回結婚戒指,任天堂還幫他清洗乾淨

您也許會喜歡:

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

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

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

MySQL 可重複讀,差點就讓我背上了一個 P0 事故!_台中搬家

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司

小黑黑的碎碎念

哎,最近有點忙,備考複習不利,明天還要搬家,好難啊!!

本想着這周鴿了,但是想想還是不行,爬起來,更新一下,周更可不能斷。偷懶一下,修改一下之前的一篇歷史文章,重新發布一下。

先贊后看,微信搜索「程序通事」,關注就完事了

P0 事故:餘額多扣!

這是一個真實的生產事件,事件起因如下:

現有一個交易系統,每次產生交易都會更新相應賬戶的餘額,出賬扣減餘額,入賬增加餘額。

為了保證資金安全,餘額發生扣減時,需要比較現有餘額與扣減金額大小,若扣減金額大於現有餘額,扣減餘額不足,扣減失敗。

賬戶表(省去其他字段)結構如下:

CREATE TABLE `account`
(
    `id`      bigint(20) NOT NULL,
    `balance` bigint(20) DEFAULT NULL,
    PRIMARY KEY (`id`)

) ENGINE = InnoDB
  DEFAULT CHARSET = utf8mb4
  COLLATE = utf8mb4_bin;

扣減餘額時,sql 語序如下所示:

ps:看到上面的語序,有沒有個小問號?為什麼相同查詢了這麼多次?

其實這些 SQL 語序並不在同個方法內,並且有些方法被抽出復用,所以導致一些相同查詢結果沒辦法往下傳遞,所以只得再次從數據庫中查詢。

為了防止併發更新餘額,在 t3 時刻,使用寫鎖鎖住該行記錄。若加鎖成功,其他線程的若也執行到 t3,將會被阻塞,直到前一個線程事務提交。

t5 時刻,進入到下一個方法,再次獲取賬戶餘額,然後在 Java 方法內比較餘額與扣減金額,若餘額充足,在 t7 時刻執行更新操作。

上面的 SQL 語序看起來沒有什麼問題吧,實際也是這樣的,賬戶系統已經在生產運行很久,沒出現什麼問題。但是這裏需要說一個前提,系統數據庫是 Oracle

但是從上面表結構,可以得知此次數據庫被切換成 MySQL,系統其他任何代碼以及配置都不修改(sql 存在小改動)。

就是這種情況下,併發執行發生餘額多扣,即實際餘額明明小於扣減金額,但是卻做了餘額更新操作,最後導致餘額變成了負數。

下面我們來重現併發這種情況,假設有兩個事務正在發執行該語序,執行順序如圖所示。

注意點:數據庫使用的是 MySQL,默認事務隔離等級,即 RR。數據庫記錄為 id=1 balance=1000,假設只有當時只有這兩個事務在執行。

各位讀者可以先思考一下,t2,t3,t4,t5,t6,t11 時刻餘額多少。

下面貼一下事務隔離等級RR 下的答案。

事務1 的查詢結果為:

  • t2 (1,1000)
  • t4 (1,1000)
  • t6 (1,1000)

事務 2 的查詢結果為:

  • t3 (1,1000)
  • t5 (1,900)
  • t11 (1,1000)

有沒有跟你想的結果的一樣?

接着將事務隔離等級修改成 RC,同樣再來思考一下 t2,t3,t4,t5,t6,t11 時刻餘額。

再次貼下事務隔離等級RC 下的答案。

事務1 的查詢結果為:

  • t2 (1,1000)
  • t4 (1,1000)
  • t6 (1,1000)

事務 2 的查詢結果為:

  • t3 (1,1000)
  • t5 (1,900)
  • t11 (1,900)

事務 1 的查詢結果,大家應該會沒有什麼問題,主要疑問點應該在於事務 2,為什麼換了事務隔離等級結果卻不太一樣?

下面我們先帶着疑問,了解一下 MySQL 的相關原理 ,看完你就會明白這一切。

  • MVCC
  • 一致性視圖
  • 快照讀與當前讀

MVCC

我們先來看下一個簡單的例子,

事務隔離等級為 RR , id=1 balance=1000

事務 1 將 id=1 記錄 balance 更新為 900,接着事務 2 在 t5 時刻查詢該行記錄結果,很顯然該行記錄應該為 id=1 balance=1000

如果 t5 查詢最新結果 id=1 balance=900,這就讀取到事務 1 未提交的數據,顯然不符合當前事務隔離級別

從上面例子可以看到 id=1 的記錄存在兩個版本,事務 1 版本記錄為 balance=1000 ,事務 2 版本記錄為 balance=900

上述功能,MySQL 使用 MVCC 機制實現功能。

MVCC:Multiversion concurrency control,多版本併發控制。摘錄一段淘寶數據庫月報的解釋:

多版本控制: 指的是一種提高併發的技術。最早的數據庫系統,只有讀讀之間可以併發,讀寫,寫讀,寫寫都要阻塞。引入多版本之後,只有寫寫之間相互阻塞,其他三種操作都可以并行,這樣大幅度提高了InnoDB的併發度。在內部實現中,與Postgres在數據行上實現多版本不同,InnoDB是在undolog中實現的,通過undolog可以找回數據的歷史版本。找回的數據歷史版本可以提供給用戶讀(按照隔離級別的定義,有些讀請求只能看到比較老的數據版本),也可以在回滾的時候覆蓋數據頁上的數據。在InnoDB內部中,會記錄一個全局的活躍讀寫事務數組,其主要用來判斷事務的可見性。

可以看到 MVCC 主要用來提高併發,還可以用來讀取老版本數據。

在學習 MVCC 原理之前,首先我們需要了解 MySQL 記錄結構。

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

台中搬家公司推薦超過30年經驗,首選台中大展搬家

如上圖所示,account 表一行記錄,除了真實數據之外,還會存在三個隱藏字段,用來記錄額外信息。

  • DB_TRX_ID:事務id。

  • DB_ROLL_PTR: 回滾指針,指向 undolog。

  • ROW_ID:行 id,與此次無關。

MySQL InnoDB 裏面每個事務都會有一個唯一事務 ID,它在事務開始的時候會跟 InnoDB 的事務系統申請的,並且嚴格按照順序遞增的。

每次事務更新數據時,將會生成一個新的數據版本,然後會把當前的事務 id 賦值給當前記錄的 DB_TRX_ID。並且數據更新記錄(1,1000—->1,900)將會記錄在 undo log(回滾日誌)中,然後使用當前記錄的 DB_ROLL_PTR 指向 und olog。

這樣 MySQL 就可以通過 DB_ROLL_PTR 找到 undolog 推導出之前版本記錄內容。

查找過程如下:

若需要知道 V1 版本記錄,首先根據當前版本 V3 的 DB_ROLL_PTR 找到 undolog,然後根據 undolog 內容,計算出上一個版本 V2。以此類推,最終找到 V1 這個版本記錄。

V1,V2 並不是物理記錄,沒有真實存在,僅僅具有邏輯意義。

一行數據記錄可能同時存在多個版本,但並不是所有記錄都能對當前事務可見。不然上面 t5 就可能查詢到最新的數據。所以查找數據版本時候 MySQL 必須判斷數據版本是否對當前事務可見

一致性視圖

MySQL 會在事務開始后建立一個一致性視圖(並不是立刻建立),在這個視圖中,會保存所有活躍的事務(還未提交的事務)。

假設當前事務保存活躍事務數組為如下圖。

判斷版本對於當前事務是否可見時,基於以下規則判斷:

  1. 若版本事務 id 小於當前活躍事務 id 數組最小值,比如版本 id 為 40,小於活躍數組最小值 45。這就代表當前版本的事務已提交,當前版本對於當前事務可見。

  2. 若版本事務 id 大於當前活躍事務數組的最大值,如版本事務 id 為 100, 大於數組最大事務 id 90。說明了這個版本是當前事務創建之後生成,所以這個版本對於當前事務不可見。

  3. 若版本事務 id 是當前活躍數組事務之一,比如版本事務 id 為 56。代表記錄版本所屬事務還未提交,所以該版本對於當前事務不可見。

  4. 若版本事務 id 不是當前活躍數組事務之一,但是事務 id 位於活躍數組最小值與最大值之一,比如如事務 ID 57。代表當前記錄事務已提交,所以該版本對於當前事務可見。

  5. 若版本事務 id 為當前事務 id,代表該行數據是當前事務變更的,當然得可見。

4 這個規則可能比較繞,結合上面圖片比較好理解。

以上判斷規則可能比較抽象,看不懂,沒事,我們再用大白話解釋一下:

  1. 未提交事務生成的記錄版本,不可見。

  2. 視圖生成前,已提交事務生成記錄版本可見。

  3. 視圖生成后,新事務生成記錄版本不可見。

  4. 自身事務更新永遠可見。

一致性視圖只會在 RR 與 RC 下才會生成,對於 RR 來說,一致性視圖會在第一個查詢語句的時候生成。而對於 RC 來說,每個查詢語句都會重新生成視圖。

當前讀與快照讀

MySQL 使用 MVCC 機制,可以讀取之前版本數據。這些舊版本記錄不會且也無法再去修改,就像快照一樣。所以我們將這種查詢稱為快照讀

當然並不是所有查詢都是快照讀,select …. for update/ in share mode 這類加鎖查詢只會查詢當前記錄最新版本數據。我們將這種查詢稱為當前讀。

問題分析

講完原理之後,我們回過頭分析一下上面查詢結果的原因。

這裏我們將上面答案再貼過來。

事務隔離級別為 RR,t2,t3 時刻兩個事務由於查詢語句,分別建立了一致性視圖。

t4 時刻,由於事務 1 使用 select.. for update 為 id=1 這一行上了一把鎖,然後獲取到最新結果。而 t5 時刻,由於該行已被上鎖,事務 2 必須等待事務 1 釋放鎖才能繼續執行。

t6 時刻根據一致性視圖,不能讀取到其他事務提交的版本,所以數據沒變。t8 時刻餘額扣減 100,t9 時刻提交事務。

此時最新版本記錄為 id=1 balance=900

由於事務 1 事務已提交,行鎖被釋放,t5 成功獲取到鎖。由於 t5 是當前讀,所以查詢的結果為最新版本數據(1,900)。

重點來了,當前這條記錄的最新版本數據為 (1,900),但是最新版本事務 id,卻是事務 2 創建之後未提交的事務,位於活躍事務數組中。所以最新記錄版本對於事務 2 是不可見的。

沒辦法只能根據 undolog 去讀取上一版本記錄 (1,1000) ,這個版本記錄剛好對於事務 2 可見,所以 t11 的記錄為 (1,1000)

而當我們將事務隔離等級修改成 RC,每次都會重新生成一致性視圖。所以 t11 時刻重新生成了一致性視圖,這時候事務 1 已提交,當前最新版本的記錄對於事務 2 可見,所以 t11 的結果將會變為 (1,900)

總結

MySQL 默認事務隔離等級為 RR,每一行數據(InnoDB)的都可以有多個版本,而每個版本都有獨一的事務 id。

MySQL 通過一致性視圖確保數據版本的可見性,相關規則總結如下:

  • 對於 RR 事務隔離等級,普通查詢僅能查到事務啟動前就已經提交完成的版本數據。
  • 對於 RC 事務隔離等級,普通查詢可以查到查詢語句啟動前就已經提交完成的版本數據。
  • 當前讀總是讀取最新版本的數據。

幫助文檔

1: https://dev.mysql.com/doc/refman/8.0/en/innodb-multi-versioning.html
2 http://mysql.taobao.org/monthly/2017/12/01/
3 http://mysql.taobao.org/monthly/2018/11/04/
4 https://dev.mysql.com/doc/refman/8.0/en/innodb-consistent-read.html
5 極客時間- MySQL 專欄–事務到底是隔離的還是不隔離的

歡迎關注我的公眾號:程序通事,獲得日常乾貨推送。如果您對我的專題內容感興趣,也可以關注我的博客:studyidea.cn

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

台中搬家公司費用怎麼算?

擁有20年純熟搬遷經驗,提供免費估價且流程透明更是5星評價的搬家公司