分類: 3C資訊

  • 使用 git add -p 整理 patch_台北網頁設計

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

    背景

    當我們修改了代碼準備提交時,本地的改動可能包含了不能提交的調試語句,還可能需要拆分成多個細粒度的 pactch

    本文將介紹如何使用 git add -p 來交互式選擇代碼片段,輔助整理出所需的 patch

    官方介紹

    先貼個幫助信息供參考

    英文版本:

     -p, --patch
               Interactively choose hunks of patch between the index and the work tree and add them to
               the index. This gives the user a chance to review the difference before adding modified
               contents to the index.
    
               This effectively runs add --interactive, but bypasses the initial command menu and
               directly jumps to the patch subcommand. See “Interactive mode” for details.
    

    中文版本:

    -p, --patch
    交互地在索引和工作樹之間選擇補丁塊並將它們添加到索引中。這讓用戶有機會在將修改后的內容添加到索引之前查看差異。
    
    這可以有效地運行 add --interactive,但是會繞過初始命令菜單,而直接跳轉到 patch 子命令。有關詳細信息,請參見`‘交互模式’'。
    

    demo 視頻版

    以下文字版例子對應的視頻演示:

    demo 文字版

    我們造個例子來說明,假設我們本次完成了兩個功能,fun1 和 fun2,希望分開提交。另外在修改過程中還引入了一些調試的打印,是不需要提交的。

    代碼的 diff 如下

     --git a/demo.c b/demo.c
    index 0473c1a..76cfb22 100644
    --- a/demo.c
    +++ b/demo.c
    @@ -1,16 +1,31 @@
     #include <stdio.h>
    
    +void fun1()
    +{
    +       printf("before hello world\n");
    +}
    +
     void demo()
     {
            ;
     }
    
    +void fun2()
    +{
    +       printf("after hello world\n");
    +}
    +
     int main()
     {
    +       fun1();
            printf("hello world\n");
    +       printf("debug %s %d\n", __func__, __LINE__);
            printf("hello world\n");
            printf("hello world\n");
            printf("hello world\n");
    +       printf("debug %s %d\n", __func__, __LINE__);
            printf("hello world\n");
    +       fun2();
            demo();
    +       printf("debug %s %d\n", __func__, __LINE__);
     }
    

    此時直接 git add 會把整個文件的改動都加進來,不符合需求。

    這正是 patch mode 發揮作用的地方,我們可以挑選一部分改動進行提交。

    輸入 git add -p 進入 patch mode , 此時 git 會自動將改動切分成多個片段,並展示第一個片段,提示你進行選擇。

    提示語句是 Stage this hunk [y,n,q,a,d,/,s,e,?]?

    這些字母都是什麼意思呢? 輸入?回車,可以查看詳細的幫助信息。

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

    英文版本:

    y - stage this hunk
    n - do not stage this hunk
    q - quit; do not stage this hunk or any of the remaining ones
    a - stage this hunk and all later hunks in the file
    d - do not stage this hunk or any of the later hunks in the file
    g - select a hunk to go to
    / - search for a hunk matching the given regex
    j - leave this hunk undecided, see next undecided hunk
    J - leave this hunk undecided, see next hunk
    k - leave this hunk undecided, see previous undecided hunk
    K - leave this hunk undecided, see previous hunk
    s - split the current hunk into smaller hunks
    e - manually edit the current hunk
    ? - print help
    

    中文版本:

    y - 暫存此區塊
    n - 不暫存此區塊
    q - 退出;不暫存包括此塊在內的剩餘的區塊
    a - 暫存此塊與此文件後面所有的區塊
    d - 不暫存此塊與此文件後面所有的 區塊
    g - 選擇並跳轉至一個區塊
    / - 搜索與給定正則表達示匹配的區塊
    j - 暫不決定,轉至下一個未決定的區塊
    J - 暫不決定,轉至一個區塊
    k - 暫不決定,轉至上一個未決定的區塊
    K - 暫不決定,轉至上一個區塊
    s - 將當前的區塊分割成多個較小的區塊
    e - 手動編輯當前的區塊
    ? - 輸出幫助
    

    對於我們的例子,git第一次自動給出的hunk很大,可以先執行 s 分割下。分割后第一個區塊就只包含增加的 fun1 函數了。

    /* 太占篇幅,此處省略原始 hunk */
    Stage this hunk [y,n,q,a,d,/,s,e,?]? s /* 詢問我們對第一個片段的處理,我們覺得太大,按 s 要求分割 */
    Split into 7 hunks. /* 可以看到,s 讓 git 將原始片段進一步切分成了 7 個片段,接下來就是自動展示第一個片段 */
    @@ -1,7 +1,12 @@
     #include <stdio.h>
    
    +void fun1()
    +{
    +       printf("before hello world\n");
    +}
    +
     void demo()
     {
            ;
     }
    
    Stage this hunk [y,n,q,a,d,/,j,J,g,e,?]?  /* 詢問我們對第一個片段的處理 */
    

    輸入 y 回車選中這個 fun1 的改動,git 就會自動展示下一個片段,繼續詢問我們。

    這樣對片段使用 yn,我們就可以只挑選出涉及 fun1 的改動,當我們確認後續沒有 fun1 相關的改動時,就可以按 q 退出挑選了。

    此時 git status 可以看到部分改動在暫存區中。

    $ git status
    On branch master
    Changes to be committed:
      (use "git reset HEAD <file>..." to unstage)
    
            modified:   demo.c
    
    Changes not staged for commit:
      (use "git add <file>..." to update what will be committed)
      (use "git checkout -- <file>..." to discard changes in working directory)
    
            modified:   demo.c
    

    使用 git diff --cached 可以具體確認要提交的內容,是否符合我們的預期,只包含 fun1 的改動,不包含 fun2 和調試語句。

    $ git diff --cached
    diff --git a/demo.c b/demo.c
    index 0473c1a..b9fd4d4 100644
    --- a/demo.c
    +++ b/demo.c
    @@ -1,5 +1,10 @@
     #include <stdio.h>
    
    +void fun1()
    +{
    +       printf("before hello world\n");
    +}
    +
     void demo()
     {
            ;
    @@ -7,6 +12,7 @@ void demo()
    
     int main()
     {
    +       fun1();
            printf("hello world\n");
            printf("hello world\n");
            printf("hello world\n");
    

    確認無誤就可以提交第一個patch, 即 fun1 的改動了。

    git commit -m "fun1"
    

    接下來繼續使用 git add -p,配合s,y,’n’就可以進一步挑選出fun2的改動了。

    如果要挑選的改動比較明確,可以直接使用 /來搜索到目標hunk,省去逐個片段判斷的麻煩。例如執行 /fun2 來搜索包含 fun2 的代碼片段。

    git add -p 挑選完之後,建議使用 git diff --cached 確認下,或者在提交之後 git show 確認下改動,如有錯漏,及時修正,多退少補。

    大部分情況使用s y n就足夠了。但如果有些改動是混合在一起的,無法使用s來分割,那就得用 e 來手工編輯了,下回分解吧。

    blog: https://www.cnblogs.com/zqb-all/p/13020293.html
    公眾號:https://sourl.cn/MDcrJA

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

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

  • 【譯】Welcome to C# 9.0_網頁設計公司

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

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

      C# 9.0正在形成,我想分享我們對添加到該語言下個版本的一些主要功能的看法。對於每個新版本的 C#,我們努力使常見的編碼方案更加清晰和簡單,C# 9.0 也不例外。這次的一個特別重點是支持數據形狀的簡潔和不可變表示。

      讓我們潛入吧!

    1 僅可初始化的屬性

      對象初始化器是非常好用的。它們為類型實例化提供了一種非常靈活且可讀的格式來創建對象,尤其是對於一次創建特別大的嵌套對象來說。下面是一個簡單的例子:

    new Person
    {
        FirstName = "Scott",
        LastName = "Hunter"
    }

      對象初始化也使用戶不必編寫大量構造函數,要做的就是編寫一些屬性!

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

      今天,一個很大的限制是,屬性必須是可修改的,對象初始化器是這樣工作的:首先調用對象的構造函數(默認為無參的構造函數),然後分配給屬性設置器(property setter)。

      僅可初始化屬性修改了這一點!它們引入了一個 init 訪問器,該訪問器是set訪問器的變體,只能在對象初始化期間調用:

    public class Person
    {
        public string FirstName { get; init; }
        public string LastName { get; init; }
    }

      使用此聲明,除了初始化外,之後任何後續賦值給 FirstName 和 LastName 屬性都是一個錯誤。

      因為init訪問器只能在初始化期間訪問,因此他們允許修改封閉類型中的只讀字段,就像在構造函數中那樣:

    public class Person
    {
        private readonly string firstName;
        private readonly string lastName;
       
        public string FirstName
        {
            get => firstName;
            init => firstName = (value ?? throw new ArgumentNullException(nameof(FirstName)));
        }
        public string LastName
        {
            get => lastName;
            init => lastName = (value ?? throw new ArgumentNullException(nameof(LastName)));
        }
    }

    2 記錄

      如果要使單個屬性不可變,則僅可初始化屬性非常適合。如果希望整個對象不可變且像值類型一樣,則應考慮將其聲明為記錄:

    public data class Person
    {
        public string FirstName { get; init; }
        public string LastName { get; init; }
    }

      類聲明中的data關鍵字將其標記為記錄。這賦予它幾個類似價值類型的行為,我們將在下面深入探討這些行為。一般來說,記錄更被視為”值”(純數據), 而不是作為對象。您可以通過創建新記錄表示新狀態來表示隨時間的變化。它們不是由標識定義,而是由其內容定義。

    2.1 With表達式

      使用不可變數據時,一種常見模式是從現有值創建新值以表示新狀態。例如,如果我們更改LastName,我們會將其表示為一個新對象,該對象是舊對象的副本,但LastName不同。這種技術通常被稱為非破壞性修改。記錄這種特性表示的是Person在給定時間的狀態。

      為了適應這種編程風格,記錄允許一種新的表達式——with:

    var otherPerson = person with{LastName="Hanselman"};

      with表達式使用對象初始化器語法來說明新對象與舊對象的不同內容。您可以指定多個屬性。

      記錄隱式定義一個受保護的”複製構造函數”-一個構造函數,它獲取現有記錄對象,並逐個將其字段複製到新的對象:

    protected Person(Person original){/* copy all the fields */}// generated

      with 表達式會導致調用複製構造函數,然後在上面應用對象初始化器以相應地更改屬性。

      如果您不喜歡生成的複製構造函數的默認行為,則可以改為定義自己的行為,該行為將由with表達式選取。

    2.2 基於值的相等性

      所有對象都從Object繼承 Equals(object)。結構將其重寫為具有”基於價值的相等性”,通過遞歸地調用Equals來比較結構的每個字段。記錄也執行相同的操作。這意味着,根據其”值”,兩個記錄對象可以彼此相等,而不必是同一對象。例如:

    var originalPerson = otherPerson with { LastName = "Hunter" };

      現在 ReferenceEquals(person, originalPerson) = false(這兩個不是一個對象)但是Equals(person, originalPerson) = true (他們有相同的值)。

      如果您不喜歡生成的 Equals 重寫的默認逐字段比較行為,則可以改為編寫自己的字段比較行為。你只需要小心,你了解基於值的相等在記錄中是如何工作的,特別是當涉及繼承時。

      除了重寫Equals 外,還有 GetHashCode()。

    2.3 數據成員

      記錄絕大多數都是不可變的,只有隻讀初始化器可以通過with表達式進行非破壞性修改。為了針對這種常見情況進行優化,記錄在聲明時會更改string FirstName這類成員聲明的行為。與其他類和結構聲明中的隱式private字段不同,在記錄中,這被視為public的、僅可初始化的自動屬性的縮寫!因此:

    public data classPerson
    {
        string FirstName;
        string LastName;
    }

      與

    public data classPerson
    {
        public string FirstName{get; init;}
        public string LastName{get; init;}
    }

      是相同的。

      我們認為這有助於做出漂亮而清晰的記錄聲明。如果您真的需要私有字段,只需顯式地添加private修飾符:

    private string firstName;

    2.4 基於位置的記錄

      有時,對記錄採用更為位置化的方法是有用的,在這種方法中,記錄的內容通過構造函數參數的位置給出,並且可以通過解構函數來提取。

      可以在記錄中指定自己的構造函數和解構函數:

    public data classPerson
    {
        string FirstName;
        string LastName;
        public Person(string firstName,string lastName)
          =>(FirstName,LastName)=(firstName, lastName);
        public void Deconstruct(out string firstName,out string lastName)
          =>(firstName, lastName)=(FirstName,LastName);
    }

      上面代碼可以簡寫為:

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

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

    public data class Person(string FirstName,string LastName);

      這將聲明public的僅初始化的自動屬性以及構造函數和解構函數,以便您可以編寫:

    var person =new Person("Scott","Hunter");// positional construction
    var(f, l)= person;                        // positional deconstruction

      如果您不喜歡生成的自動屬性,則可以改為定義自己的同名屬性,生成的構造函數和解構函數將使用該屬性。

    2.5 記錄的改變引發的問題

      想象一下,將記錄對象放入字典中。再次找到它取決於 Equal 和GetHashCode。如果記錄改變其狀態,它也會改變它等於什麼!我們可能再也找不到了!在哈希表實現中,它甚至可能損壞數據結構,因為定位基於的是”到達哈希表時”的哈希值!

      雖然可以通過重寫一些內部方法來改變這種默認的行為,但其工作量也是相當巨大的。

    2.6 with表達式與繼承

    public data class Person{string FirstName;string LastName;}
    public data class Student:Person{int ID;}
    Person person =new Student{FirstName="Scott",LastName="Hunter", ID =GetNewId()};
    otherPerson = person with{LastName="Hanselman"};

      在最後一行上使用with表達式時,編譯器不知道person實際上包含了一個Student。而且,即使otherPerson實際上不是”Student”對象,它也不是一個正確的副本,該對象與複製的第一個對象具有相同的ID。

      記錄有一個隱藏的虛方法,它委託”克隆”整個對象。每個派生記錄類型都重寫此方法以調用該類型的複製構造函數,以及派生鏈上的複製構造函數直到基類記錄的複製構造函數。with表達式只需調用隱藏的”克隆”方法,並將對象初始化器應用於結果。

    2.7 值相等與繼承

      與with表達式的實現類似,基於值的相等性也必須是”虛擬”的,即Student需要比較所有字段,即使比較時能夠得知類型是基類型Person。這是很容易通過重寫已經虛擬的Equals方法實現的。

      但是,相等還有一個挑戰:如果比較兩種不同的Person,該怎麼辦?我們不能讓其中一個決定是否相等:相等應該是對稱的,所以無論兩個對象中哪個是第一個,結果都應該是相同的。換句話說,他們必須就適用的相等達成一致!

      說明問題的示例:

    Person person1 =new Person{FirstName="Scott",LastName="Hunter"};
    Person person2 =new Student{FirstName="Scott",LastName="Hunter", ID =GetNewId()};

      這兩個對象彼此相等嗎?person1可能會這樣認為,因為person2有所有的Person的構造,但person2會認為與person1不同!我們需要確保他們都同意他們是不同的對象。

      C# 會自動為您處理。它的實現方式是每個記錄都有一個”EqualityContract”的虛擬受保護屬性。每個派生記錄都會重寫它,為了比較相等,兩個對象必須具有相同的EqualityContract。

    3 簡化頂級程序

      之前我們這樣寫代碼:

    using System;
    class Program
    {
        static void Main()
        {
            Console.WriteLine("Hello World!");
        }
    }

      現在您可以選擇在頂層編寫主程序:

    using System;
    Console.WriteLine("Hello World!");

      支持任何語句,但必須在using之後以及文件中的任何類型或命名空間聲明之前,並且只能在一個文件中執行此操作,就像目前只能有一個Main方法一樣。如果要返回狀態代碼,可以執行此操作。如果你想await,你可以這樣做。如果要訪問命令行參數,可以訪問args參數。

      局部函數是語句的一種形式,在頂級程序中也允許使用。從頂級語句部分以外的任何位置調用它們都是錯誤的。

    4 改進模式匹配

      在 C# 9.0 中添加了幾種新類型的模式。例如:

    public static decimal CalculateToll(object vehicle) =>
        vehicle switch
        {
           ...
            DeliveryTruck t when t.GrossWeightClass > 5000 => 10.00m + 5.00m,
            DeliveryTruck t when t.GrossWeightClass < 3000 => 10.00m - 2.00m,
            DeliveryTruck _ => 10.00m,
            _ => throw new ArgumentException("Not a known vehicle type", nameof(vehicle))
        };

    4.1 簡單類型模式

      目前,類型模式需要在類型匹配時聲明一個標識符,即使該標識符是一個_,比如 DeliveryTruck  _。新語法不用了,可以簡寫為:

    DeliveryTruck => 10.00m,

    4.2 關係模式

      C#9.0引入了對應於關係運算符<、<=等的模式。因此,新語法可以這樣寫:

    DeliveryTruck t when t.GrossWeightClass switch
    {
        > 5000 => 10.00m + 5.00m,
        < 3000 => 10.00m - 2.00m,
        ...
    },

    4.3 邏輯模式

      最後,可以將模式與邏輯運算(and 、or、not)符組合起來,並將其拼寫為單詞,以避免與表達式中使用的運算符混淆。例如:

    DeliveryTruck t when t.GrossWeightClass switch
    {
        < 3000 => 10.00m - 2.00m,
        >= 3000 and <= 5000 => 10.00m,
        > 5000 => 10.00m + 5.00m,
    },

      not的常見用法是將其應用於判空。例如:

    not null => throw new ArgumentException($"Not a known vehicle type: {vehicle}", nameof(vehicle)),
    null => throw new ArgumentNullException(nameof(vehicle))

      還有,if (!(e is Customer)) { … }在新語法中,可以寫為if (e is not Customer) { … }

    5 目標類型

      ”Target typing”是當表達式從使用位置的上下文中獲取其類型時,我們使用的術語。C# 9.0支持新的類型推斷。

    5.1 new

      新語法中,如果是明確的類型,則在使用new時,可以不聲明類型了。比如:

    Point p = new (3, 5);

    5.2 ?? and ?:

      目前,??與?:如果分支之間不是同一類型會報錯。新語法下,如果兩個分支都可以轉換為目標類型則是允許的:

    Person person = student ?? customer; // Shared base type
    int? result = b ? 0 : null; // nullable value type

    6 改進協變

      有時,派生類中的方法返還比基類中的聲明更具體的類型是很有用的。C# 9.0 允許:

    abstract class Animal
    {
        public abstract Food GetFood();
        ...
    }
    class Tiger : Animal
    {
        public override Meat GetFood() => ...;
    }

       此外,還要很多新的改進,讓我們拭目以待吧。

    原文鏈接

        https://devblogs.microsoft.com/dotnet/welcome-to-c-9-0/?utm_source=vs_developer_news&utm_medium=referral

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

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

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

  • 「MoreThanJava」計算機系統概述_包裝設計

    「MoreThanJava」計算機系統概述_包裝設計

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

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

    • 「MoreThanJava」 宣揚的是 「學習,不止 CODE」,本系列 Java 基礎教程是自己在結合各方面的知識之後,對 Java 基礎的一個總回顧,旨在 「幫助新朋友快速高質量的學習」
    • 當然 不論新老朋友 我相信您都可以 從中獲益。如果覺得 「不錯」 的朋友,歡迎 「關注 + 留言 + 分享」,文末有完整的獲取鏈接,您的支持是我前進的最大的動力!
    • 計算機是由 硬件軟件 組件組成的複雜系統。希望通過本篇文章能夠擴展和加深您對「計算機系統」的了解和認識。

    Part 1. 硬件和軟件

    想一想《復讎者聯盟》系列電影?

    • 圖片來源:https://new.qq.com/cmsn/20181208/20181208006498.html

    當你開始想《復讎者聯盟》時,通常你都不會考慮任何關於 “物理” 方面的東西,例如影片是存儲在哪一種物理媒介(例如 DVD、電影膠捲)上,或者是播放影片所需的物理設備(例如 DVD 機、電影放映機)。因為一張 DVD 是有實體的物理設備,而電影本身確是一種沒有實體的數據信息。

    硬件 這個詞通常就用於稱呼那些有實體的「物理設備」,如電視機、DVD 播放器和電腦等。

    軟件 則是指與 硬件 一起使用的「數據信息」,如電影、音樂、小說、網頁、計算機程序等。

    「數據信息」是非常有趣的東西,你此刻正在查看的網頁、瀏覽的視頻,它們的實際數據可能存儲在中國乃至世界的任何一個角落。在數據從源頭的物理設備複製到你的物理設備之前,可能已經輾轉複製了成幾百次,最終到達瀏覽器並交由系統渲染,在屏幕上還原出這些數據。

    硬件組成

    • 圖片來源:https://zhuanlan.zhihu.com/p/33574137

    計算機系統的主要 硬件組成 是:

    • CPU(處理器);
    • 主要存儲器(內存);
    • 輔助存儲器(硬盤);
    • 輸入設備(如鍵盤、鼠標);
    • 輸出設備(如显示器);

    對於典型的台式計算機來說,CPU、主存、輔存、電源加上其他支持的硬件設備(如光驅,也就是放光盤的設備)通常都是放在金屬外殼中,上述的這些組件也都是連接到俗稱「主板」的計算機電路板上,而各種輸入輸出設備則通過暴露在金屬外殼背面的連接器連接。

    當然排除部分比較硬核的「搞機玩家」,如「鞋盒低成本版」:

    再比如「終極水冷」:

    主板

    主板是用來連接其他硬件的「橋樑」。

    如果把電腦比作是航空母艦,那麼主板就是航母主體,其他控制中心、動能裝置、武器設備等都必須安裝在這個航母上才能協同使用,缺一不可。

    • 圖片及引用:https://www.zhihu.com/question/59272639(作者知乎:@黎小白)

    我們來看一個典型的主板組成,這裏只介紹一些重要常用的組件。(完整的可以參看上方圖片下面的鏈接)

    圖中 1 -> CPU 插槽

    CPU 插槽(英語:CPU socket)是計算機里主板上固定住 CPU 並導通電氣訊號的一種插槽。不同 CPU 系列使用不同插槽。

    圖中 4 -> 內存插槽

    內存插槽是指主板上用來插內存條的插槽。

    DDR4 內存條(第四代內存條)擁有與 DDR3、DDR2 或 DDR 內存條相同的外觀,但是 DDR4 內存條插槽的缺口與 DDR3、DDR2 或 DDR 內存插槽不同,以防止插入錯誤的內存條。

    • PS:這裏只展示了 ASUS X99-DELUXE 的內存安裝方式,不同主板的內存安裝方式可能不同,具體請按照主板說明書進行,否則系統將可能無法啟動

    圖中 5 -> PCI 擴展插槽

    凡是顯卡、網卡、聲卡和 SCSI 卡等符合 PCI 接口規格的設備,都可以使用這些 PCI 擴展插槽。

    圖中 9&10 -> 主板電源插槽

    這些電源插槽用來連接一個 ATX +12V 電源。24-pin 插槽用於主板供電,8-pin 插槽用於 CPU 供電。

    電源所提供的連接插頭已經過特別設計,只能以一個特定方向插入主板上的電源插槽。找到正確的插入方向後,僅需穩穩地將之套進插槽中即可。

    圖中 11 -> 后側面板連接端口

    圖中 12 -> USB 連接插槽

    這個插槽用來連接 USB 模塊,可在前面板或后側連接端口擴展 USB 模塊。

    USB 連接插槽分為 USB 2.0 和 USB 3.0。

    • 注意: 請勿將 1394 排線連接到 USB 2.0 插槽上,同理,也不要將 USB 2.0 排線接到 1394 插槽上,這麼做可能會導致主板的損毀。

    圖中 14 -> SATA 設備連接插槽

    這些插槽可支持使用 Serial ATA(SATA)排線來連接 SATA 硬盤和光驅。

    PS:上面是一些常見的主要組成,其結構會因不同主板而又略微的不同,例如有些主板沒有显示器接口(獨立顯卡)。

    CPU(中央處理器)

    CPU 常常被比喻為計算機系統的 “大腦”,這非常符合。

    處理器 執行計算機系統的 所有基本計算。其他組件則是通過執行諸如 「存儲數據」「將數據移入和移出處理器」 之類的工作來促進計算。但是處理器是發生基本動作的地方。

    處理器非常努力,但同時它也不那麼”聰明”,它唯一要做的就是執行老闆(正在運行的程序)的命令(指令),它從來不問那些命令到底是做什麼,只負責執行。這也就是為什麼程序和 CPU 之間存在一個稱為「操作系統」的中間人的原因。

    • (Ps: 關於 CPU 其他知識我們會在之後來詳細說。)

    Hz 代表什麼?

    通常我們討論 CPU 時,都會說這個 CPU 的是多少多少赫茲的,它其實 代表的就是 CPU 執行指令的速度(≈運行速度)

    每個 CPU 都有一個非常簡單但非常重要的組件,它被稱為 時鐘。其唯一的目的就是 按一致的方式打開關閉 電信號,就像是您的心臟每秒跳動一次一樣,時鐘也會周期性地產生高電壓信號和低電壓信號。

    1 Hz 表示每秒 1 個周期,也就是每秒產生一個高壓信號一個低壓信號,3 Ghz 也就是表示每秒 3 千萬個周期。因此,如果一條指令需要 5 個時鐘周期才能完成,則 CPU 的時鐘越快,該指令將被執行得越快。(但現在 CPU 的快慢並不能簡單考慮 Hz 大小,還得附加考慮”多核”和每個周期內能夠完成的工作量的因素)

    CPU 可以有多快?

    普通台式計算機可以在不到百萬分之一秒的時間內執行一條指令,即使是真空中傳播的光,在這段時間內也只能走 10 厘米左右,而超級計算機(在所有計算機中速度最快)可以在不到十億分之一秒的時間內執行一條指令!

    CPU 的基本要素

    • 圖片來源:https://www.deskdecode.com/what-is-cpu-central-processing-unit-and-how-its-work/
    1. 寄存器: 寄存器是一個很小的地方,用於保存處理器的數據。寄存器用於存儲信息,例如指令,存儲地址和任何類型的數據,例如位序列或任何字符等。處理器的寄存器應足夠大以存儲所有給定的信息。64 位處理器應至少具有 64 位寄存器和 32 位處理器的 2 位寄存器。寄存器是所有存儲設備中最快的。
    2. L1和L2高速緩存存儲器: 高速緩存存儲器是一種類型的存儲器,位於處理器的芯片中,或者可以通過總線單獨連接。高速緩衝存儲器的用途是存儲程序指令,這些指令被軟件一次又一次地用於操作。當 CPU 處理數據時,首先將數據查找到高速緩存中。如果找到了數據,則它將相應地使用該數據;如果未找到,則處理器開始在較大的內存中查找,這實際上是耗時的。高速緩存的成本很高,但速度確實很快。

    CPU 如何執行程序指令 | 簡單原理

    典型的 CPU 可以簡單看成由 「控制單元」「邏輯單元」 組成。

    在執行一條指令之前,必須將程序指令和數據從輸入設備或輔助存儲設備放入內存中,一旦必要的數據和指令存儲在內存中,中央處理單元就會對 每個指令 執行以下四個步驟:

    1. 「控制單元」從「存儲器」中獲取指令;
    2. 「控制單元」對指令進行解碼(確定含義),並指示將必要的數據從存儲器移至「邏輯單元」;
    3. 「邏輯單元」執行算術或邏輯指令;
    4. 「邏輯單元」將該運算的結果存儲在存儲器或寄存器中;

    控制單元最終指示存儲器將結果釋放到輸出設備或輔助存儲設備。這一套步驟下來就被稱為 「機器周期」。單個機器周期指令可以由大量子指令組成,每個子指令必須至少佔用一個時鐘周期(上面提到的一個上下脈衝時間)。

    每種類型的中央處理單元都 只能理解一組特定的指令,稱為 「指令集」。正如人們可以理解許多不同的語言一樣,每種不同類型的CPU都有其可以理解的指令集。

    將指令和數據存儲在內存中是一回事,而控制單元能夠找到它們又是另一回事。它是如何做到的?

    每個指令和每個數據在「存儲器」中的位置都有一個地址標識。也就是說,每個位置都有一個地址號碼,就像公寓前面的郵箱一樣。並且,與郵箱一樣,位置的地址號保持不變,但是位置的內容(指令和數據)可能會更改。

    但是,與郵箱不同,內存位置只能容納固定數量的數據;地址只能容納固定數量的字節-在現代計算機中通常為兩個字節。

    32 位 和 64 位?

    您可能已經聽說過 N 位處理器的概念。最常見的是 32 位和 64 位處理器。這些位確定傳入和傳出處理器的 數據量大小。具體會有以下幾點不同:

    一、處理數據的能力不同

    32 位和 64 位表示 CPU 一次能處理的最大位數,理論上來說,64 位系統處理的數據效率比 32 位更高,相當於單車道和雙車道開車似得,雙車道單位時間可以有更多的車輛通行。但需要內存跟上,而且程序本身也是 64 位編譯才能發揮 64 位系統的優勢。

    二、支持的內存不同(尋址能力不同)

    簡單來說,32 位系統的最多能在是 232=4294967296=4 (GB) 左右的內存裏面找程序所需要的數據,而 64 位系統這就最大支持 128 GB 內存;

    三、軟件兼容性不同

    32 位系統無法運行 64 位軟件,64 位系統可以安裝多數 32 位軟件,以前因為大部分軟件都是基於 32 位架構環境下開發,所以 64 位系統的兼容性不如 32 位。但現在 64 位兼容性也很強了,基本都是可以兼容各類軟件了,而且 64 位的病毒都少了很多。

    特別是大量消耗內存的軟件,如 PS,64 位和 32 位軟件在 64 位系統里區別很大,64 位真的快許多。

    存儲器

    內存和硬盤的差別

    內存 中通常放置的是您 短期存儲 的數據,而 硬盤 中存放的則是 長期存儲 的數據。

    想象一下您正在辦公,並且您擁有一個 辦公桌 和一個 文件櫃,那麼此時辦公桌的區域則代表了內存,文件櫃則代表了硬盤。

    剛開始工作不久,你就把需要使用的物品放置在了您的辦公桌上,以便於使用,但由於桌子大小的限制,不能在桌上存放太多的東西。必須保留但不一定很快就可以訪問的項目存儲在文件櫃中。根據文件櫃的大小的不同,可以存儲許多東西。

    內存和硬盤之間的重要區別是前者在計算機關閉時會清除。另一方面,無論關閉計算機多少次,硬盤都將保持不變(除非物理破壞)。因此,類似於辦公桌和文件櫃,您離開辦公室時在辦公桌上留下的所有文件都會被丟棄。文件櫃中的所有內容都將保留。

    數據如何表示?

    在主存儲器和輔助存儲器中,信息都以 位(bit) 模式存儲。這是一個單一的開/關值,僅開/關這兩種值是可能的。(也就是俗稱的「二進制」)

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

    上新台中搬家公司提供您一套專業有效率且人性化的辦公室搬遷、公司行號搬家及工廠遷廠的搬家服務

    有很多方法可以實現這一點,下面我們來列舉一些:

    • 机械上電器的開關(如電燈開關);
    • 電線上的高低電壓;
    • 單個晶體管;
    • 磁盤表面的一小部分;
    • 磁帶表面的一小部分;
    • 卡上打了一個洞;(如上一篇文章提到的製表機)
    • More..

    在主存儲器和輔助存儲器中,位的實現方式不同,但是從邏輯上講,兩種類型的存儲器都存儲表示為位模式的信息。

    字節 | 存儲單位

    一位能表示的信息太少了,以至於通常計算機內存被分成八位一組,每個八位組稱為一個 字節

    一個字節大約足以容納一個字符。 當某些數據需要八個以上的位時,將使用幾個字節。通常,四個字節用於表示整數。

    通常,我們需要用成千上百,甚至上億,幾十億的字節來表示某一些數據,這樣大數量的字節數我們又規定了一些單位,如下錶所示:(僅列出常用單位)

    名稱 字節數 2 的冪
    字節 1 20
    千字節(kilobyte,俗稱 1 Kb) 1024 210
    兆字節(megabyte,俗稱 1 Mb) 1,048,576 220
    十億字節(gigabyte,俗稱 1 Gb) 1,073,741,824 230
    萬億字節(terabyte,俗稱 1 Tb) 1,099,511,627,776 240

    硬盤

    計算機系統的硬盤將字節記錄在磁性表面上,就像錄音帶的表面一樣。 數據的記錄(寫入)和讀取使用類似於磁帶的讀寫頭完成。

    • 圖片來源:http://programmedlessons.org/Java9/chap03/ch03_11.html

    上圖显示了一個可移動臂末端的一個磁盤和一個讀/寫頭。手臂沿着磁盤的半徑移動。由於磁盤正在旋轉,它將在磁盤上的圓形軌道中記錄數據。稍後,要讀取數據,必須將其移至正確的位置,然後必須等待直到旋轉磁盤將數據放置到位。與錄音帶一樣,無需更改即可讀取數據。記錄新數據時,它將替換以前在該位置記錄的任何數據。與音頻磁帶不同,讀/寫磁頭實際上並不接觸磁盤,而是略高於磁盤。(由於磁盤在計算機啟動時一直在旋轉,因此如果讀寫頭接觸到磁盤,磁盤很快就會磨損。)

    通常,稱為計算機系統硬盤的組件包含許多單獨的磁盤和上述的讀/寫磁頭。磁盤的兩面都塗有磁性材料(因此,每個磁盤都有兩個讀/寫磁頭),並且所有磁盤都連接到一個主軸上。所有磁盤和磁頭均密封在無塵的金屬容器中。由於硬盤的操作涉及机械運動(比电子過程要慢得多),因此讀寫數據要比使用主存儲器慢得多。

    文件(File)

    硬盤(和其他輔助存儲設備)用於長期存儲大信息塊,例如程序和數據集。通常,硬盤內存被組織成 文件,一個文件是已經被賦予了名稱,並存儲在輔助存儲器的 信息集合。該信息可以是程序,也可以是數據。

    文件中的信息表示方式與任何数字信息相同——它由位組成,通常分為八位字節。文件通常很大;它們的大小以千字節(Kb)或兆字節(Mb)為單位。

    文件和操作系統

    主存儲之外的大多數數據集合都組織成文件。跟蹤所有這些信息是操作系統的工作之一。如果計算機是網絡的一部分,那麼跟蹤所有計算機上的所有文件是一項艱巨的工作,並且涉及網絡上的所有操作系統。

    應用程序(包括您可能編寫的程序)不會直接讀取,寫入,創建或刪除文件。 由於操作系統必須跟蹤所有內容,因此所有其他程序都要求操作系統執行文件操作任務。例如,假設某個程序剛剛計算出一組数字,則需要保存它們。以下可能發生的操作方式:

    1. ‍‍程序: 要求操作系統創建一個名稱為RESULTS.DAT的文件

    2. 操作系統: 獲取請求;查找磁盤的未使用部分並創建一個空文件。程序完成時會被告知。

    3. ‍‍程序: 要求操作系統將数字保存在文件中。

    4. 操作系統: 從程序的主內存中獲取数字,並將其寫入文件。程序完成時會被告知。

    5. ‍‍程序: 繼續進行任何操作。

    文件類型

    就硬盤而言,所有文件都是相同的。在电子級別,包含程序的文件和包含數據的文件之間沒有區別。所有文件都被命名為字節集合。當然,這些文件的用途不同。操作系統可以獲取程序文件,將其複製到主內存中,然後開始運行。操作系統也可以獲取數據文件,並在需要時將其信息提供給正在運行的程序。

    然而,我們通常會看到文件名的最後一部分(擴展名)通常會显示該文件的 預期用途。例如,mydata.txt 的擴展名 .txt 意味着該文件應被用作文本(即字符)的集合,program.exe 擴展名 .exe 就標識着該文件是一個 “可執行文件”,也就是一個程序,在 Windows 中可以直接運行。

    當文件以非預期用途使用時會發生什麼?例如,如果您嘗試在 “.EXE” 文件上使用文字處理器,該怎麼辦?

    這當然會出現問題。因為 .exe 文件中包含的信息使用的是文字處理器無法理解的位模式表示。

    就像遇到某人說您不懂的語言一樣。他們發出的聲音與您相同(大部分情況下),但是它們發出的聲音(單詞和句子)的模式不同。

    軟件

    • 圖片來源:https://www.aqniu.com/learn/48019.html

    計算機軟件由 程序數據 組成的。

    程序 包含用於處理器(CPU)的指令。數據 可以是程序需要的任何信息:字符數據,数字數據,圖像數據,音頻數據和無數其他類型。但是,程序和數據之間的區別並不像您想象的那麼清晰。

    記住這個重要的基本思想: 程序和數據都以相同的方式被保存在計算機存儲器中。也就是說在存儲器中(主存儲器和輔助存儲器),程序和數據並無任何區別。

    舉個例子:這就像你寫或者畫東西在紙上一樣,對於紙來說,並無什麼特別的區分。

    可以使用相同的电子的存儲方式來保存數據和程序對於計算機科學來說是一個重要的概念,這意味着計算機系統提供可以根據需求來將內存用於程序或數據。

    程序類型

    有兩類程序:應用程序、系統程序。

    應用程序 是人們用來完成工作的程序。系統程序 用來使硬件和軟件平穩運行。

    重要的系統程序是操作系統。當計算機運行時,操作系統始終存在。它協調計算機系統其他硬件和軟件組件的操作。操作系統負責啟動應用程序,運行它們並管理它們所需的資源。當應用程序正在運行時,操作系統將為其管理硬件的詳細信息。例如,當您在鍵盤上鍵入字符時,操作系統將確定它們打算用於哪個應用程序,並完成將其放置在那裡的工作。

    一些 「嵌入式系統」 不使用操作系統,而是直接在處理器上運行其程序。例如:交通燈、微波爐、洗衣機等等。

    用於台式計算機的現代操作系統幾乎都帶有用戶界面,該界面使用戶能夠通過使用窗口,按鈕,菜單,圖標,鼠標和鍵盤輕鬆地與應用程序(以及與操作系統本身)進行交互。例如:Unix,Linux,Android,Mac OS 和 Windows。

    操作系統

    操作系統是一個複雜的程序,可以使計算機系統的硬件和軟件組件保持協調和運行。就像一家小商店的所有者一樣,他通過拜訪客戶,接受送貨,在架子上儲貨,進行簿記等來保持一切井井有條。店主必須及時處理出現的任務。沒有店主,商店就無法運轉。

    大多數計算機系統都可以運行多種操作系統中的任何一種。例如,大多數基於奔騰的計算機都可以運行 Linux 或 Windows 操作系統。儘管某些計算機有多個操作系統,但通常在一個計算機系統上僅安裝一個操作系統。無論如何,一次只能控制一個操作系統。計算機用戶可以在計算機打開時進行選擇,並且操作系統將一直處於控制狀態,直到計算機關閉為止。

    首次啟動計算機時,硬件會自動加載操作系統並開始運行。此過程稱為 啟動。之所以說這是個奇怪的術語,是因為操作系統本身參与了其自身的運行,這一過程就像某人 “自己拉自己一把” 一樣。操作系統運行后,將用於啟動應用程序。

    一個應用程序啟動時的場景

    1. 用戶要求運行應用程序。

      • 通過單擊圖標,選擇菜單或通過其他方式可以完成此操作。
    2. 操作系統確定應用程序的名稱。

    3. 操作系統在存儲應用程序及其存儲數據的硬盤上找到文件。

    4. 操作系統發現主內存的未使用部分足以容納應用程序。

    5. 操作系統在主內存的該部分中複製應用程序及其數據。

      • 硬盤上的軟件未更改;主內存保存磁盤上的內容的副本。
    6. 操作系統為應用程序申請資源。

    7. 最後,操作系統啟動應用程序運行。

    總結: 在應用程序運行時,操作系統在後台管理資源,為應用程序進行輸入和輸出,並使其他所有程序保持運行。

    Part 2. 網絡(Network)

    • 圖片來源:https://www.aqniu.com/learn/27008.html

    一個計算機網絡由連接的兩台或更多台計算機組成,以便它們可以交換數據和程序。當計算機是網絡的成員時,它運行的程序和使用的數據可以位於網絡上其他計算機的硬盤上。

    在商業和工業環境中,大多數計算機都在網絡上。在聯網計算機上運行的操作系統必須管理其分享的網絡資源(以及管理其所有其他職責)。操作系統能夠找到存儲在其他網絡計算機上的程序和數據,並將它們複製到其自己的主內存中。

    網絡中的每台計算機都有一個網絡接口卡。這是一種通過電纜發送和接收數據的輸入/輸出設備。網絡上計算機的網絡接口卡通過電纜連接在一起。

    局域網

    局域網(LAN)是局限於相對較小區域的網絡。它通常局限於地理區域,例如寫作實驗室,學校或建築物。

    每台計算機都有一個其他計算機用來訪問它的網絡地址。通常,計算機共享一台打印機。局域網中也可能有一台功能特彆強大的計算機,稱為「服務器」,其硬盤上裝有其他計算機可能需要的應用程序和數據。

    廣域網

    廣域網(WAN)連接較大地理區域的網絡,例如四川到北京或世界各地。專用的越洋電纜或衛星上行鏈路可用於連接這種類型的全球網絡。

    廣域網使用各種特殊的硬件來管理數據流。當兩台計算機共享數據時,這些硬件使兩台計算機直接連接在一起。實際上,兩台計算機之間可能有數十個網絡設備。但對於用戶而言,使用 WAN 和 LAN 並無差別。

    所有這些設備都 使用相同的方法來處理數據。沒有通用的數據處理方法,大型網絡將變得毫無希望。關於如何通過網絡表示和傳輸數據的協議稱為 「協議」。通常,大型網絡使用稱為 TCP / IP 的協議(用於傳輸控制協議/ Internet協議)。

    互聯網(Internet)

    互聯網包含所有連接在一起的計算機的一個龐大的全球網絡。在這個龐大的網絡上,每台計算機 必須具有 唯一的網絡地址(稱為 IP 地址),就像世界上的每部電話都具有唯一的電話號碼(包括國家/地區代碼和區號)一樣。

    例如這是一個典型的 IP 地址:149.152.21.203,IP 地址實際上是 32 位二進制數。聯網設備使用這些地址在網絡上路由信息。上面的示例显示了使用十進制数字寫入這些位的標準方法(每 8 位轉換成十進制並使用 . 隔開)。

    但是,即使以十進制形式書寫,該地址也無法被人類識別。萬維網的功能之一是它允許人類使用 計算機名稱而不是数字。例如:這是一個典型的計算機名稱:wmyskxz.com。這就要容易記住的多,在 Web 瀏覽器中使用它時,它將自動轉換為計算機 IP 地址的 32 個二進制数字。

    全球資訊網(World Wide Web)

    還記得我們上面提到的 重要思想 嗎:程序和數據都以 相同的方式 保存在計算機內存中。計算機存儲器(主存儲器和輔助存儲器)在存儲程序和數據時沒有區別。

    通信設備也不區分程序和數據。就其而言,它就是所有信息,並且所有信息都以相同的方式傳輸。互聯網就像是全球包裹遞送服務。它關心的是將包裹從一個地址移到另一個地址,而不用擔心包裹中的內容。

    互聯網提供硬件基礎,而信息傳輸協議服務於萬維網。

    與任何數據一樣,用於 Web 的數據也通過 Internet 傳輸。使 Web 數據與眾不同的原因在於,它是針對 Web 瀏覽器(例如您可能正在使用的瀏覽器)而設計的。瀏覽器是一種程序,可以讀取網頁並以一種格式正確的方式显示它們。

    網頁是一組數據,其中包含有關如何在監視器上显示信息的信息。使用稱為 超文本標記語言(HTML) 的語言來提供此信息 。如果要查看描述此頁面的 HTML,您可以直接右擊正在瀏覽的網頁然後會看到「显示源代碼」的選項。

    參考資料

    1. Introduction to Computer Systems – http://programmedlessons.org/Java9/chap01/ch01_01.html
    2. How does the processor work – https://pmihaylov.com/how-does-the-processor-work/
    3. How Computers Work: The CPU and Memory – https://homepage.cs.uri.edu/faculty/wolfe/book/Readings/Reading04.htm
    4. What Is CPU (Central Processing Unit) And How It’s Work? – https://www.deskdecode.com/what-is-cpu-central-processing-unit-and-how-its-work/
    5. Computer Memory – http://programmedlessons.org/Java9/chap03/ch03_01.html
    6. 計算機原理-CPU到底有多快?內存:是我的250倍 – https://blog.csdn.net/pyf09/article/details/95256493
    7. 電腦系統32位和64位的區別 – https://www.jianshu.com/p/d0e95bed5b60
    • 本文已收錄至我的 Github 程序員成長系列 【More Than Java】,學習,不止 Code,歡迎 star:https://github.com/wmyskxz/MoreThanJava
    • 個人公眾號 :wmyskxz,個人獨立域名博客:wmyskxz.com,堅持原創輸出,下方掃碼關注,2020,與您共同成長!

    非常感謝各位人才能 看到這裏,如果覺得本篇文章寫得不錯,覺得 「我沒有三顆心臟」有點東西 的話,求點贊,求關注,求分享,求留言!

    創作不易,各位的支持和認可,就是我創作的最大動力,我們下篇文章見!

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

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

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

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

    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星評價的搬家公司

  • 同學叫我一起創業,我不聽,他現在月入10萬,我羡慕死了,我已悟到了成功的秘訣!_台中搬家公司

    同學叫我一起創業,我不聽,他現在月入10萬,我羡慕死了,我已悟到了成功的秘訣!_台中搬家公司

    ※推薦台中搬家公司優質服務,可到府估價

    台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

      先說說的親身經歷及見證吧,2017年一個晚上跟同學一起吃飯,聊起了創業的事情,因為我們的年齡都比較很大了,遲早有一天退出職場,就討論做什麼好,同學就說要不我們運營微信公眾號吧,我當時想,這個東西能養活自己嗎?他說可以掙大錢,我當時一點都不信,公眾號不是就推送兩篇文章,這東西有收入?我當時一點都沒有看好這個,並且,在2017年,感覺已經過了紅利期,而且從開始到有收入這段時間具體要多久完全沒有把握,不知道哪一天能看到盈利,所以我一點都沒看好這個,還是找份工作老老實實上班,每月穩定拿工資。就這樣,我們各自的想法不一樣,他運營他的公眾號,我上我的班。

      最初,他想通過公眾號將他的網絡產品綁定一起,然後通過網絡培訓盈利,剛剛開始,他也拉到一些學生,但是培訓需要花費大量的時間去做課件,每個學員教的學費不多,所以很難維持下去,收入遠遠沒有自己上班收入高,有點渺茫,一度想重返職場,最終還是沒有,因為他很相信公眾號能掙錢,而且能掙大錢,後來,把精力、時間放在吸粉。

      每天自己寫文章,經過一段時間,大概一個月左右,自己的庫存也用完了,想不出什麼內容來寫了,也沒有一分錢的收入,後來變成每天找文章然後自己加工處理,改標題,改內容,想盡了各種方法,互推、誘導關注、海報引流、建大量的微信群、欺騙用戶分享朋友圈、搞各種活動等等,大半年的時間就這樣過去,當然粉絲也有,但是不多,這個時候,偶爾會有人來找上門投廣告,一個月勉強有1000塊左右的收入,雖然不多,但是讓他看到希望,更加堅定了他的信心,到了此時此刻,我仍然不看好這個,因為收入太少了,1000塊還比不起我上班工資。我同學心態好,對公眾號的前景持樂觀的態度,所以,繼續堅持,每天摸索這什麼時間段推送文章閱讀量比較多,什麼樣的文章內容比較吸引讀者,還有標題黨等等的研究。

      經過一段時間的摸索和堅持,終於積累了比較多的粉絲,這時,他又註冊另外一個公眾號,然後以大號養小號,兩個號同時運營着,每天還是重複着之前的工作,到處找文章,修改內容,優化標題,準時準點發布文章,慢慢地小號的粉絲也在漲,就這樣,兩年的時間過去了,收入也有所增加,後來,又收購了幾個公眾號,此時他手上已經有6個公眾號,每天還是重複着同樣的工作,各個號的粉絲都在增長,這個時候,他的收入已經基本更之前上班的工資持平。去年,他的平均每個月收入達到了6W。到現在,他的號粉絲不斷增長,收入有時候超過10W每個月,遠遠超過打工的收入,尤其在這個疫情期間,很多人都失去了工作,而他做得風生水起。每個人對成功的定義不一樣,在我看來,他已經達到他預期的期望,算是成功。

    有些人天生就具備成功的特性,我同學最起碼具備以下特性:樂觀、超常的執行力、重視細節、善於總結問題,此刻我悟到,一個人想要成功真不難,只要做好以下幾點就好。

    1、定位

    定位很重要,在做一件事之前首先要看準方向,才能充分發揮自己的優勢達到所想去的目的地;相反,如果方向走錯了,那麼離自己當初所想的方向便越走越遠。

    那如何去定位,如何確定方向是準的呢,這個很重要,我覺得,首先要回顧這近些年來的發展時間軸,一個個列出來,結合當前的熱門行業,去判斷未來的走勢。雷軍的名言:站在風口上,豬都可以飛起來。看看我們這些年有哪些風口:團購、自媒體、大數據、o2o、直播、共享經濟、短視頻,在這些風口中,有些紅利期已經過了,有些還處於下滑狀態,有些正在處於紅利期。只要我們善於總結過去的經歷,觀察當前的發展形勢,可以大概推斷未來的趨勢,就這樣定位。

    2、樂觀的精神

    能堅持做完一件事,這過程中不能缺少樂觀的精神,這是一種精神支柱,只有這樣才能使你有動力繼續走下去,很多人都是開始充滿了信心,然後實際開展的過程與最初的想法相差甚遠,經常受到挫折、打擊,然後慢慢就對最初的想法懷疑,最後失去了信心,很快就打退堂鼓,這是在創業路上很關鍵的因素。

    3、少抱怨,多檢查問題

    有些人在創業的過程中,一旦遇到問題,就抱怨別人抱怨命運,抱怨條件不好,但是從來就沒有認真去檢查自己的問題,為什麼會出這樣的問題,究竟是什麼原因導致的。例如,我同學經常發推文,有時有些文章閱讀量很低有些很高,有時掉粉,但是他從來不會抱怨自己做不好,而是認真去分析,查找問題的原因。同一個時間段為什麼有些文章的閱讀量會少那麼多,為什麼會太令粉絲反感而取消關注。

    4、超常的執行力

    執行力非常重要,這是貫穿整個創業的始終,如果沒有了執行力,就談不上創業了。馬雲說過:成功的人都具備有超越常人的堅持。我同學也經常說,做事要像一頭牛一樣,不怕苦不怕累,堅持下去,這樣總會有結果,事實證明,他是對的。曾經有人說,即使是一隻小蚊子,死咬着一個地方吸血,最終也能吸到血,說明執行力在創業過程有多麼的重要。要做好執行力,我覺得要做好這幾點:把握時間、按質量、超越常人的堅持去對待一件事。

    4.1、把握時間

    按時: 這個很重要,例如,你計劃開發一個項目,然後定好了預計完成時間,然後量化了每個任務,如果你沒有按時去完成任務,那整個項目最後就無法預期完成,這個不管是做客戶項目還是做自己的項目都增加了時間成本。

    台中搬家公司教你幾個打包小技巧,輕鬆整理裝箱!

    還在煩惱搬家費用要多少哪?台中大展搬家線上試算搬家費用,從此不再擔心「物品怎麼計費」、「多少車才能裝完」

    時間點: 同樣,拿我同學運營公眾號來說,把握時間點非常重要,因為很多用戶習慣在某個時間段看你的公眾號,如果你毫無規律,不按時間發布,很多用戶會錯過閱讀,影響文章的閱讀量,然後用戶就會慢慢對您的公眾號反感,甚至取消關注。

    4.2、按質量

    同樣,做每一件事或者作品,都要以高質量完成,這樣才能保證你的作品競爭力,留住用戶。 這個十分關鍵,就拿公眾號來說,如果只是為了完成任務,隨隨便便抄襲一下劣質的文章來敷衍,那很多用戶很快就對你的文章不感興趣,長期下去,用戶就不在關注你的公眾號了,甚至取消關注。就拿抖音來說,為什麼抖音一旦刷起來就停不下來了,這是為什麼呢?因為抖音在作品審核是十分嚴格,只有高質量的做才會給流量,低質量的幾乎不給流量,這就是我們每次刷抖音都停不下來的原因。

    超越常人的堅持

    很多創業者失敗,原因就是沒有堅持下去,當然也有很多因為,例如,資金方面,讓他們無法堅持下去,但是我覺得這個不是主要原因。一個好的項目從來就不缺資金,缺的是堅持,很多創業者三天打魚两天曬網,越做越差,越差越不想做下去,惡性循環,最終堅持不下去而失敗,重返職場。我同學剛剛開始兩年,幾乎是沒有收入的,但是他還是一直堅持下去,在今天看來,我真得很佩服他,每天花大量時間去整理文章,想盡各種方法,兩年如一日,從不間斷,也只有這樣,堅持每天輸出優質的文章,才能黏住用戶。有時候,經常羡慕別人的收入比自己高,但是忽略了別人背後付出的辛勤和汗水,超出常人的堅持,才換來了今天的成果。

    5、注意細節

    常言道:細節決定成敗。 這句話不是隨隨便便說說,我是深有體會,也是見證者。就說我同學,每發一篇文章,都注意各方面的細節,例如:標題、封面圖片、發布時間點、內容質量、內容類型等等。

    標題: 這是提高點擊率的重要手段,大家聽說過標題黨吧,一個好的標題,閱讀量比起沒有吸引力的標題要高出一倍,這對於拉廣告十分重要。

    封面圖片: 有些人隨隨便便用一張圖片就算了,甚至每一期的文章都是用同樣一張封面圖片,這對於用戶一點吸引力都沒有,視覺上沒有衝擊力,不能第一時間抓住用戶。

    發布時間點: 也是非常重要,長期摸索,知道用戶大概在晚上10點左右,點擊率最高的時間點,可能用戶在這個時間點才忙完一天的工作,洗完澡,躺在床上玩手機。如果隨便找一個時間點發布,很快就被其他公眾號文章淹沒或者用戶根本就沒有時間看。

    內容質量: 寧為玉碎不為瓦全,質量上,一定要把控好,如果你今天沒有找到好文,寧願不發布,都不要發一些劣質的文章,如果長期發布劣質的文章,這會影響用戶對你的文章興趣度。

    內容類型: 不要找一下枯燥無味的文章,或者很費腦力的文章,最好選擇一些能引起大多數用戶共鳴的心靈雞湯文章,或者其他熱點文章。

    種種細節,決定着產品或者運營的成敗。

    6、最後

    說了那麼多,如果你真的體會到這些含義,我想成功真的不難,而我本人體會最深的就這幾點:樂觀的精神、超越常人的執行力、注意細節。而且我現在正在執行中,快達到我的預期目標,希望看到我的文章的朋友,能真正體會到其中的含義。

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

    ※推薦台中搬家公司優質服務,可到府估價

    台中搬鋼琴,台中金庫搬運,中部廢棄物處理,南投縣搬家公司,好幫手搬家,西屯區搬家

  • 舊款都看膩了!這些新款SUV值得關注 實用還有面子!_網頁設計

    舊款都看膩了!這些新款SUV值得關注 實用還有面子!_網頁設計

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

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

    4L自然吸氣發動機,模擬6速的CVT變速箱,它的實際表現和你想象的一樣,就是慵懶,還好是那種有底氣的慵懶,四驅系統多多少少也會影響到動力的表現。歐藍德是很有實力的一款產品,但是品牌認知度制約着它的發展。3江淮汽車-瑞風S3優點:性價比高缺點:CVT車型動力偏弱推薦人群:追求省心好用的人群推薦車型:2017款 1。

    按照目前的平均生活水平計算,對於普通老百姓而言,用幾萬塊甚至十幾萬買人生的第一輛車,好像壓力不大,但是要說第二輛車,可能真的要等上六七八年才會買,所以,人生第一輛車一定要滿足顏值問題,至少要耐看,接下來的這幾輛車,一定能夠滿足廣大顏控的要求。

    優點:設計感十足

    缺點:中高配車型性價比不突出

    推薦人群:朝氣蓬勃的年輕人

    推薦車型:2015款 1.6L 自動兩驅pRM(15.68萬)

    KX3剛剛進行了小改款,本來特立獨行的它,似乎為了迎合市場而做出了改變,原本小鬍子的進氣隔柵不見了,換成了六邊形的造型,向著家族風格靠攏,前霧燈更加小巧,與日間行車燈擺在了一起,總而言之,還是那麼任性。

    內飾方面沒有什麼明顯的改變,簡單時尚就夠了,方向盤造型是最喜歡的地方,整個造型設計看起來非常有肌肉感,儀錶盤樣式雖然簡單,但是讀取清晰,對行車安全也有一點幫助。

    為什麼推薦購買1.6L的頂配版本,首先1.6L與1.6T的動力差距還不能用“巨大”來形容,加上買韓系車,不買高配車型享受一下超高的配置,就意義不大了,通風/加熱座椅、外后視鏡加熱、方向盤加熱、自動空調、車內氛圍燈、倒車影像、全景天窗,汽車就應該這樣。

    優點:有7座車型可供選擇

    缺點:動力一般

    推薦人群:有7座需求的消費人群

    推薦車型:2016款 2.4L 四驅豪華版 7座(19.68萬)

    國產歐藍德終於來到了大家面前,三菱的營銷策略,不是那麼容易搞懂的,國產歐藍德保留了進口版本的設計,前臉的大嘴設計和超大面積的鍍鉻裝飾,只能用“前衛”兩字形容,尾部的實際則是更顯質感,導光條式的尾燈設計十分耐看,辨識度很高。

    內飾沒什麼出彩的地方,中控台除了空調操作區域就是8英寸的觸控車載系統,沒有什麼與駕駛相關的操作,好像三菱就從來不需要那些東西,值得一提的是換擋撥片,2.4L車型全部標配,算是強調一下運動性吧。

    7座車型採用2+3+2的座椅布局,第二排座椅可以前後調節,調節範圍還不小,第三排座椅僅僅能夠坐得下成年人,應付短途出行需求不成問題,二三排座椅都放倒后,能夠形成一張平坦的大床,2.4L所有車型都是電動後備廂門,

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

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

    在同級別還是有一定競爭力的。

    2.4L自然吸氣發動機,模擬6速的CVT變速箱,它的實際表現和你想象的一樣,就是慵懶,還好是那種有底氣的慵懶,四驅系統多多少少也會影響到動力的表現。歐藍德是很有實力的一款產品,但是品牌認知度制約着它的發展。

    優點:性價比高

    缺點:CVT車型動力偏弱

    推薦人群:追求省心好用的人群

    推薦車型:2017款 1.6L 手動智能互聯型(8.58萬)

    瑞風S3是國產小型SUV陣營里的領頭羊,9月份銷量高達21888輛,這背後肯定離不開“好開、實用、舒適”這三個方面,某種程度而言,它就像是上一代的軒逸和卡羅拉,你找不出它們有什麼特別突出的亮點,但就是這一份均衡打動了消費者。

    瑞風S3的這次改款主要集中在設計上,在舊款的基礎上進行更加精緻的修整,前大燈和尾燈都開了眼角,霧燈造型別緻,加入了銀色護板和鍍鉻裝飾的后包圍更加顯檔次,也十分耐看。

    內飾方面,整个中控台幾乎都是全新的設計,更加國際范,跟舊款相比,簡直就不是同一個層次,儀錶盤樣式也重新設計了,字體讀取更加清晰,中控台小巧的按鍵旋鈕和聳立的显示屏,是不是很像某國際大廠呢,不管怎樣,好看就夠了。

    動力系統增加了1.6L的發動機,與之匹配的是6MT和CVT變速箱,如果你是一個追求舒適、易用、好開的車主,對什麼動力激情不感興趣的話,那麼CVT是個明智的選擇,至於為什麼推薦手動擋車型,因為覺得這樣才有意思。

    優點:設計出眾、行駛品質高

    缺點:配置略低

    推薦人群:注重設計感和机械品質的人群

    推薦車型:2016款 1.5T 手動耀臻版(11.49萬)

    不知道大家怎麼看,反正是覺得瑞虎7真的是顏值爆表,處處都能體現出肌肉感,中網設計特別,整個前臉讓聯想到了鯊魚,尾燈的造型是最喜歡的地方,偏向於暗紅色的顏色非常顯檔次。

    內飾的設計很簡潔,可以說有點過分簡潔,中控台就剩下孤伶伶的幾個旋鈕和按鍵,其它操作都是在上方的觸控屏幕里完成。方向盤造型也有點怪異,總是感覺設計師想要做成兩幅式,但是又迫於無奈做成三幅式,反正看着就覺得很扁,除此之外像是什麼做工、用料、設計方面都處於較高水平。

    1.5T渦輪增壓發動機與6MT的匹配很好,換擋行程短,並且不會感到乾澀,發動機的動力輸出不會突兀,力道很足,是一輛完善度很高、很好開的的手動擋車型。

    總結:

    其實不只是女性消費者購車時會比較注重車輛的外觀顏值,絕大部分的男性消費者,也是很注重這方面的,誰也不想開着一輛特別“引人注目”的車出去,起亞KX3的時尚精緻,三菱歐藍德的高端大氣,瑞風S3的居家溫馨,瑞虎7的肌肉性感,肯定有一款能夠令你心動。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

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

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

  • 預算不夠買RX5?這款最新6.6萬起售的互聯SUV也很酷炫!_貨運

    預算不夠買RX5?這款最新6.6萬起售的互聯SUV也很酷炫!_貨運

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

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

    精緻的縫線做工,但空間仍有點小凱翼X3上的真皮座椅,認為其縫線做工確實相當精細,雖然座椅長度合適,但是填充物料還是稍微比較硬,沒有那種一旦坐下去,就如沙發般的感覺,後排座椅的空間如果一位170cm身高的正常體重朋友坐下去,剩餘的腿部空間不夠一拳,略顯局促,後排座椅沒有中央扶手和頭枕,且比例式放倒后空間依舊不夠平整。

    出路出路,走出去了,總是會有路的。困難苦難,困在家裡就是難。

    今天試駕的這台SUV,同樣也打着互聯網汽車旗號的,那就是…

    凱翼X3這款定位於“智能互聯SUV”的產品,最大亮點在於其自主研發的icar智能互聯繫統這個科技配置,為我們在使用車輛的同時提供更多的便利性,科技創新的新產品也正慢慢揭示着人們生活品質的上升,以後將會走入愈加智能的汽車當中。

    凱翼X3秉承其概念車i-CX“凱旋之翼”的設計理念,外觀設計由羅威•維赫米斯赫親身上陣,羅威•維赫米斯赫在業界也十分出名,其外觀設計代表作品有着法拉利458和瑪薩拉蒂“鳥籠”等經典概念車。凱翼X3從正面看過去,進氣格柵的鍍鉻設計,搭配鷹眼式大燈,整個車頭就像一隻象徵這自由力量的雄鷹。

    聽聞凱翼X3的定位群體是崇尚個性化的年輕人,這句話認同了,除了飛鷹式前臉設計,側面還有五輻花瓣式18寸大輪轂,在同級別的車輛中非常少見,車身獨有的腰線設計進一步詮釋“凱旋之翼”的元素,所以,它能夠在最初的外觀感受上就牢牢抓住朋友們的心。

    內飾風格同樣也意味着年輕時尚,中控台覆蓋的材料質感蠻好,不會特別的硬,摸着比較細膩,中控屏幕兩邊鍍鉻設計,加上類似於飛機螺旋炮筒的空調出風口,科技感隨之凸顯開來,中控按鈕上只有空調出風強度大小調解,而溫度高度皆可在10.1寸的觸控屏上點擊,同時方向盤前面的7英寸液晶儀錶盤也很吸引眼球,能夠显示媒體,導航,信息,胎壓監測等等信息。

    中控屏幕下方的物理按鍵很少,只有調解風量大小,而空調溫度以及出風模式,需要我們在觸控屏上調節,既然說是智能互聯,那麼其icar智能互聯繫統有網絡信號,購入新車時廠商會贈予2年的免費使用權利,每個月有400M流量可供使用,而在使用的過程中,只要你喊出“你好,小翼”,再根據您的需求對小翼發號施令,實測后覺得這個系統的反應還是比較快的,配置上也搭載360度全景攝像頭,無論是倒車還是側方位停車,畫面显示很清晰,

    ※回頭車貨運收費標準

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

    反應快。

    當天陪同一起試駕的車隊教練向我們演示了如何通過手機遠程控制這款凱翼X3,只要是在手機和車輛停放處皆為網絡信號的情況下,即可遠程控制車輛開鎖,解鎖,空調出風,升降車窗,開啟天窗等功能,不僅如此,這款手機軟件還能對車輛進行自檢以及車況查詢,第一時間了解自己愛車的真實情況,這可是一大裝逼神器咧。

    凱翼X3上的真皮座椅,認為其縫線做工確實相當精細,雖然座椅長度合適,但是填充物料還是稍微比較硬,沒有那種一旦坐下去,就如沙發般的感覺,後排座椅的空間如果一位170cm身高的正常體重朋友坐下去,剩餘的腿部空間不夠一拳,略顯局促,後排座椅沒有中央扶手和頭枕,且比例式放倒后空間依舊不夠平整。

    凱翼X3全系採用一款1.6L的自然吸氣發動機,最大功率126匹馬力,最大扭矩160牛米,配備5擋手動和CVT無級變速器,當天試駕的為5速手動版本,對於凱翼X3的市場售價,認為手動擋版本可能會更受歡迎,價格更低,剩下的這個錢可以多買幾個配置,何樂而不為呢。

    手動擋的車型,只要轉速上了3000轉時動力才緩緩上來,作為一台1.6L自然吸氣發動機,這樣的表現確實無可厚非,後期手動升到3擋繼續踩油門加速,整體表現十分柔順漸進,但同時動力提升還是比較慢的,發動機噪音還是大了一點,但城市內家用代步,絕對沒有問題。

    在高速以100km/h巡航時,轉數在2700轉左右,轉速體現一般般,該車可以運動模式,舒適模式以及經濟模式,其中在運動模式下,由於轉向系統是電助力轉向,方向盤轉向會變得更加沉穩,而舒適模式和經濟模式則比較輕快。

    如同通過減速帶的話,凱翼X3的底盤表現還是比較硬,容易“震”到屁股,讓人有些不舒適的感覺,而在過彎的側傾表現上,底盤的支撐性還是可以的,不像日產SUV調校得那麼軟,也沒有德系運動轎跑那麼硬,屬於安穩舒適型。

    總結:

    越來越多的汽車往着智能互聯地發展方向去提高科技感和生活的品質,凱翼X3廠商指導價在6.66-9.69萬,它之所以在市場中能夠有這麼自信的表現,除了與其飛鷹式外觀設計有關之外,更多的還是因為其亮點配置帶來的科技感,語音控制,手機遠程控制以及智能助手這幾個功能,在同級別競品中比較少見,希望凱翼X3能夠成為8萬元SUV的中流砥柱,將智能互聯做得越來越好。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

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

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

  • 與其花40萬買後悔 不如先看看這台18萬越級寬奢座駕_網頁設計公司

    與其花40萬買後悔 不如先看看這台18萬越級寬奢座駕_網頁設計公司

    ※想知道購買電動車哪裡補助最多?台中電動車補助資訊懶人包彙整

    節能減碳愛地球是景泰電動車的理念,是創立景泰電動車行的初衷,滿意態度更是服務客戶的最高品質,我們的成長來自於你的推薦。

    懸架表現:“邁特威形式佔優,福特途睿歐減震同級罕見”大眾邁特威在懸挂方面使用的是半拖拽臂獨立式后懸架,採用了機簧分離的形式,斜置的是向空間考慮的結果,在不侵佔車內空間的前提下保證了舒適性。福特途睿歐在後懸架方式上給了我們非常大的驚喜,全系標配的RAS后空氣懸架是非常厚道的配置,這種懸架多用於高級商務車以及高級轎車上,能給到人非常舒適的乘坐體驗。

    前言

    結婚生子,創業並有成,這應該是每一個男人的夢想。而這樣的成功人士,對於汽車也有着嚴格的要求,首先是要絕對的舒適,不舒適的汽車又談何稱得上是享受。其次是有一個適合的外觀,不標新立異不刻板無趣。最後還有一個是有着一副強勁的體魄,在高速公路能從容面對各種狀態。而這些體驗,售價40萬起的大眾邁特威就能給到你,而大眾邁特威的老牌對手——福特途睿歐似乎就不服了,要證明自己在一半價格的情況下,能提供超越大眾邁特威的體驗。

    外觀對比:“大眾邁威特剛練,福特途睿歐更威武”

    外觀上,大眾邁特威採用商務車常見的方盒子造型,4904*1904*1970mm的車身尺寸加上方方正正的造型,給人一種幹練的感覺。車身整體設計都是以中庸為主,以滿足商務車穩重的氣質,但是接觸多了多半讓人產生視覺疲勞。

    福特途睿歐有着4976*2032*1990mm的車身尺寸,比起大眾邁特威,途睿歐要整整大了一圈,給到我們更加威武的視覺感受。而且類似改款前的福特福克斯的設計語言,在整體沉穩的氛圍中多了一些時尚活潑,也讓這輛商務車更為耐看。

    內飾:“邁特威沉穩典雅,福特途睿歐活潑大方”

    大眾邁特威採用了家族式設計的內飾,向著大眾旗下的轎車所靠攏,所以給到我們非常熟悉的感覺,但是讓我們產生視覺疲勞,畢竟和着大眾眾多的轎車所類似,大面積的鋼琴漆仿木裝飾提高了整車的檔次,只是显示屏尺寸過於“玲瓏”扣掉不少分數。

    福特途睿歐的內飾設計上同樣採用家族式設計,例如類似福克斯的中控面板和方向盤,福特車主們肯定能在此找到親切感。相對於邁特威相對典雅的設計,

    南投搬家公司費用,距離,噸數怎麼算?達人教你簡易估價知識!

    搬家費用:依消費者運送距離、搬運樓層、有無電梯、步行距離、特殊地形、超重物品等計價因素後,評估每車次單

    福特途睿歐內飾風格相對於活潑,也更為時尚精緻,前排還有着不少的儲物空間,在中控兩側就有着兩個大尺寸的水杯架,時尚和實用並存。

    空間表現:“福特途睿歐憑着大車身佔盡優勢”

    邁特威採用的2+2+3的座椅布局,方方正正的外形加上不俗的車身尺寸在空間表現上相當優秀。

    福特途睿歐採用的是和邁特威一樣的2+2+3座椅布局,第二排通道的設置方便了乘員的進出,而且憑着更大的車身尺寸,福特途睿歐在空間表現上甚至要比起邁特威更為優秀。

    懸架表現:“邁特威形式佔優,福特途睿歐減震同級罕見”

    大眾邁特威在懸挂方面使用的是半拖拽臂獨立式后懸架,採用了機簧分離的形式,斜置的是向空間考慮的結果,在不侵佔車內空間的前提下保證了舒適性。

    福特途睿歐在後懸架方式上給了我們非常大的驚喜,全系標配的RAS后空氣懸架是非常厚道的配置,這種懸架多用於高級商務車以及高級轎車上,能給到人非常舒適的乘坐體驗。

    動力表現:“來頭均不小,福特途睿歐緊跟其後”

    大眾邁特威使用的是一款2.0T渦輪增壓發動機,最大功率150千瓦,最大扭矩350牛米,這款發動機還搭載到小鋼炮上一代大眾高爾夫GTI上。

    福特途睿歐的發動機來頭也不少,在國際中屢獲大獎,不僅在福特的汽車上所用,還搭載在一些例如林肯的高端豪華品牌上。最大功率149千瓦,最大扭矩300牛米,在最大功率上和40多萬的邁特威幾近處於同一水平。

    性價比:“進口對決國產,福特途睿歐性價比更優”

    大眾邁特威由於是進行的緣故,車身包含了很大一部分的稅收,所以車價是相當的高,官方指導價已經達到了41.88-81.80萬。

    福特途睿歐則是一輛經過深思熟慮研究、被認為非常適合中國市場的商務用車,所以在我國進行了國產化,官方指導價僅僅為17.69-20.39萬,甚至還不到邁特威起售價的一半,但是幾乎能提供相似的乘坐感受,同樣有着自動空調、後排出風口、可移動式第二排座椅、第二排座椅角度調節、後排隱私玻璃等配置,性價比非常的高。

    總的來說,福特途睿歐有着優秀的空間表現、乘坐體驗以及動力水平,即使是和指導價41.88萬起的大眾邁特威相比也是分毫不讓,甚至在懸挂方面還有着一定優勢。用不到20萬價格買到40萬價格汽車的體驗,福特途睿歐在性價比方面尤其突出,非常適合商務用途較多的商務人士購買。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

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

    透過選單樣式的調整、圖片的縮放比例、文字的放大及段落的排版對應來給使用者最佳的瀏覽體驗,所以不用擔心有手機版網站兩個後台的問題,而視覺效果也是透過我們前端設計師優秀的空間比例設計,不會因為畫面變大變小而影響到整體視覺的美感。

  • 黃豆魚鯗凍,一碗年味_網頁設計公司

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

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

    海島人過年,魚鯗是必備的硬菜。大盆里、篰籃里,各色魚一條疊一條,選年前晴好的日子,持刀剖切、洗凈瀝水,一一攤曬於團箕、竹簟上。陽光鋪灑,魚水分漸消,空氣中鮮腥味變淡,鮮魚終成鯗。院前屋后,掛起串串魚鯗,層層疊疊擠擠挨挨。鄰人經過,扔下一句:過年魚鯗曬得噴噴香。年味初現。

    魚鯗清蒸、紅燒、烤、切絲切塊與蔬菜同炒,素日里也能一膏饞吻,唯魚鯗凍在守歲飯時才露臉,姍姍來遲,穩穩壓場。一大碗黃豆魚鯗凍,文火細煮,色澤紅亮晶瑩,入口鮮香涼滑、酥糯不膩,勺子挖着吃才過癮。

    做魚鯗凍一般選在除夕前一天。母親從瓮里倒出黃豆,盛於竹匾,曬一番再挑挑揀揀,剔除碎粒和有雜色的,剩下的顆顆圓胖、色勻、完整。黃豆是母親親手種的,除去鮮吃和留種,每年專門留出一部分做黃豆魚鯗凍。魚鯗爿爿簇擁,密密匝匝,屋裡屋外都是陽光和海風雜糅的味道。父親數次從那些魚鯗旁走過,終於,下了決心,就這些了——魚鯗切塊,裝盤待用。

    作為年夜飯的壓軸菜,黃豆魚鯗凍自然是受到禮遇的,熬煮過程工序不算繁雜,但頗費時,拿捏分寸、掌握火候,父母親用心又耐心。起灶,待鍋熱煸一下蔥姜,加清水、醬油、白糖、茴香等,放多少全憑灶頭經驗,放多放少不只味重味淡的關係,會影響整個口感。而後,浸泡過的黃豆、條狀五花肉、若干肉皮,依次下鍋,加蓋小火燒。咕嘟咕嘟,鍋蓋邊冒出白色氣泡,香味偷跑了出來,繚繞不去。

    放魚鯗的時間掌握很重要,可以說是做好這道菜的關鍵,放得遲,黃豆與肉塊均爛熟,魚鯗卻硬而韌,結凍后一口咬下去,硌牙且無鯗凍之厚味;放得過早,魚鯗粉碎,鯗塊無處尋覓,白白辜負了好鯗。據查,這道菜的製法古人就已深諳,“肉先煨爛,放入台鯗同煨,鯗爛熟即可食。冬日,謂之鯗凍。”中途翻弄須注意,切不可亂攪一氣,破壞了肉塊魚塊的形狀,作為一道重要的年菜,賣相也很重要呢。

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

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

    放入魚鯗后,香氣的層次豐富了起來,鯗的咸香、肉的鮮美、黃豆的清新,那種三合一的味道美好得無法形容,雲霧般在屋子里、在鼻子底下打轉,熱氣騰騰的,勾引得人坐立難安。但饞也是白饞,這道菜不到年三十晚,是不讓碰一丁點兒的,只能眼睜睜看着它被結結實實裝入大瓷盆。

    海汪汪,油亮亮,一夜結成凍。

    除夕,屋外鞭炮如雷,屋裡炒菜哧嚓有聲。大圓桌擺十二道菜,葷素搭配,糕點水果做點綴,中間上一大碗黃豆魚鯗凍,豐盛、隆重,年味十足。酒敬列祖列宗,待香燃盡,鞭炮聲起,儀式結束。年夜飯正式開始。

    吃年夜飯有講究,每人吃一塊糕,高高(糕糕)興興;全家人分吃一個米團,團團圓圓;黃豆魚鯗凍色如琥珀,咬一口,凍化,舌尖初得魚鮮味,肉香豆香漸次瀰漫,鮮咸合一,平衡得剛剛好。滿足地用勺子挖,直吃得眉眼舒展,通體舒坦。

    已經好吃成這樣,還要去在意它的喻義嗎?也要的。魚鯗,魚鯗,吉祥(鯗)有餘(魚),鯗又音同“想”——誰不盼着來年有個想頭呢?

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

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

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

  • 草原人家過春節_台北網頁設計

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

    當雪花騎在各家各戶院子的牆頭,將屋檐裝飾進統一的白色情調里,冰凌花把窗子玻璃雕成吉祥圖案,那個讓草原上大人孩子們盼了一冬的春節來臨了。

    “千門萬戶曈曈日,總把新桃換舊符”,春節是歡樂的節日。你看春節是敲鑼打鼓踩着高蹺扭着秧歌來的,我和鄰居小夥伴拉着手每條街都跟着走,全然感覺不到天寒地凍。事實證明歡樂的氣氛是可以驅寒的。春節是從貼着的大紅對聯、各家各戶連綿不斷的二踢腳鞭炮聲中走來的,滿滿的喜氣洋洋,如果不拿出盛裝和笑臉是配合不上基調的。桌上也是炒米奶茶手把肉、酸菜豬肉燉粉條,交相輝映。最美味是排骨湯里下干豆角、海帶絲、凍豆腐,堪稱最佳菜肴。

    臘月二十三,本地小年這一天大清早,父親開始掃房子刷房子,隨後用白面和水熬制出糨糊,嶄新的藍花棚紙覆蓋在去年以來已經煙熏火燎髮黃髮黑的棚紙上。棚頂和牆壁煥然一新,我把精心挑選來的年畫掛在最適當的位置上,畫里要有魚,意為年年有餘,還要有馬,最好是八匹馬,蒙古族人家認為馬象徵著好運升騰。把新買的炕單鋪上,並把平時草草捲起的被褥疊成方方正正的被垛,上面蓋上我喜歡的被單。再把高腳的果盤拿出來,盛上瓜子、糖塊、花生,還有我和母親親手炸出的果條。

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。

    年三十,在傍晚天擦黑時,父親和母親至為鄭重地把買來的藍布、白布,奶豆腐、紅棗、白糖紅糖,以及燉肉、炒菜和煮好的餃子,在沒有任何人動過筷子之前,都集中放在一個盤子里,蒙古族人家叫作“得格吉”,用來敬給祖上的。再拿上白酒和酒盅,父親和哥哥就去外面祭祖去了。

    到了初一,開始東家串西家,家家戶戶都串門,平時不來往的親戚,手提兩瓶罐頭兩瓶酒,上置一方比手帕大一點兒的白布,是“哈得嘎”,象徵意為吉祥。晚輩進來鞠躬行禮,我父親就用一長串的吉祥祝詞回饋給晚輩,多是長壽富貴吉祥如意類的,晚輩不住點頭,接受長輩的祝禱。除了看看扭秧歌外,春節更多時候是商鋪都緊閉門扉,只留大紅對聯和福字在寒風中迎春納福,可謂風情獨特。冷清的街道恰反映出了家家戶戶在閉門幸福,推杯換盞歡聲笑語中盤點一年的生活。

    春節,是傳統文化的縮影,在春節文化的潛移默化中,在春節氛圍的其樂融融里,各民族融為一體,成了心心相通的一家人。

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

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

    擁有後台管理系統的網站,將擁有強大的資料管理與更新功能,幫助您隨時新增網站的內容並節省網站開發的成本。