Java規則引擎 Easy Rules

1.  Easy Rules 概述

Easy Rules是一個Java規則引擎,靈感來自一篇名為《Should I use a Rules Engine?》的文章 

規則引擎就是提供一種可選的計算模型。與通常的命令式模型(由帶有條件和循環的命令依次組成)不同,規則引擎基於生產規則系統。這是一組生產規則,每條規則都有一個條件(condition)和一個動作(action)———— 簡單地說,可以將其看作是一組if-then語句。

精妙之處在於規則可以按任何順序編寫,引擎會決定何時使用對順序有意義的任何方式來計算它們。考慮它的一個好方法是系統運行所有規則,選擇條件成立的規則,然後執行相應的操作。這樣做的好處是,很多問題都很自然地符合這個模型:

if car.owner.hasCellPhone then premium += 100;
if car.model.theftRating > 4 then premium += 200;
if car.owner.livesInDodgyArea && car.model.theftRating > 2 then premium += 300;

規則引擎是一種工具,它使得這種計算模型編程變得更容易。它可能是一個完整的開發環境,或者一個可以在傳統平台上工作的框架。生產規則計算模型最適合僅解決一部分計算問題,因此規則引擎可以更好地嵌入到較大的系統中。

你可以自己構建一個簡單的規則引擎。你所需要做的就是創建一組帶有條件和動作的對象,將它們存儲在一個集合中,然後遍歷它們以評估條件並執行這些動作。 

Easy Rules它提供Rule抽象以創建具有條件和動作的規則,並提供RuleEngine API,該API通過一組規則運行以評估條件並執行動作。 

Easy Rules簡單易用,只需兩步:

首先,定義規則,方式有很多種

方式一:註解

@Rule(name = "weather rule", description = "if it rains then take an umbrella")
public class WeatherRule {

    @Condition
    public boolean itRains(@Fact("rain") boolean rain) {
        return rain;
    }
    
    @Action
    public void takeAnUmbrella() {
        System.out.println("It rains, take an umbrella!");
    }
}

方式二:鏈式編程

Rule weatherRule = new RuleBuilder()
        .name("weather rule")
        .description("if it rains then take an umbrella")
        .when(facts -> facts.get("rain").equals(true))
        .then(facts -> System.out.println("It rains, take an umbrella!"))
        .build();

方式三:表達式

Rule weatherRule = new MVELRule()
        .name("weather rule")
        .description("if it rains then take an umbrella")
        .when("rain == true")
        .then("System.out.println(\"It rains, take an umbrella!\");");

方式四:yml配置文件

例如:weather-rule.yml

name: "weather rule"
description: "if it rains then take an umbrella"
condition: "rain == true"
actions:
  - "System.out.println(\"It rains, take an umbrella!\");"
MVELRuleFactory ruleFactory = new MVELRuleFactory(new YamlRuleDefinitionReader());
Rule weatherRule = ruleFactory.createRule(new FileReader("weather-rule.yml"));

接下來,應用規則

public class Test {
    public static void main(String[] args) {
        // define facts
        Facts facts = new Facts();
        facts.put("rain", true);

        // define rules
        Rule weatherRule = ...
        Rules rules = new Rules();
        rules.register(weatherRule);

        // fire rules on known facts
        RulesEngine rulesEngine = new DefaultRulesEngine();
        rulesEngine.fire(rules, facts);
    }
}

入門案例:Hello Easy Rules

<dependency>
    <groupId>org.jeasy</groupId>
    <artifactId>easy-rules-core</artifactId>
    <version>4.0.0</version>
</dependency>

通過骨架創建maven項目:

mvn archetype:generate \
    -DarchetypeGroupId=org.jeasy \
    -DarchetypeArtifactId=easy-rules-archetype \
    -DarchetypeVersion=4.0.0

默認給我們生成了一個HelloWorldRule規則,如下:

package com.cjs.example.rules;

import org.jeasy.rules.annotation.Action;
import org.jeasy.rules.annotation.Condition;
import org.jeasy.rules.annotation.Rule;

@Rule(name = "Hello World rule", description = "Always say hello world")
public class HelloWorldRule {

    @Condition
    public boolean when() {
        return true;
    }

    @Action
    public void then() throws Exception {
        System.out.println("hello world");
    }

}

2.  規則定義

2.1.  定義規則

大多數業務規則可以用以下定義表示:

  • Name : 一個命名空間下的唯一的規則名稱
  • Description : 規則的簡要描述
  • Priority : 相對於其他規則的優先級
  • Facts : 事實,可立即為要處理的數據
  • Conditions : 為了應用規則而必須滿足的一組條件
  • Actions : 當條件滿足時執行的一組動作 

Easy Rules為每個關鍵點提供了一個抽象來定義業務規則。

在Easy Rules中,Rule接口代表規則

public interface Rule {

    /**
    * This method encapsulates the rule's conditions.
    * @return true if the rule should be applied given the provided facts, false otherwise
    */
    boolean evaluate(Facts facts);

    /**
    * This method encapsulates the rule's actions.
    * @throws Exception if an error occurs during actions performing
    */
    void execute(Facts facts) throws Exception;

    //Getters and setters for rule name, description and priority omitted.

}

evaluate方法封裝了必須計算結果為TRUE才能觸發規則的條件。execute方法封裝了在滿足規則條件時應該執行的動作。條件和操作由Condition和Action接口表示。

定義規則有兩種方式:

  • 通過在POJO類上添加註解
  • 通過RuleBuilder API編程

可以在一個POJO類上添加@Rule註解,例如:

@Rule(name = "my rule", description = "my rule description", priority = 1)
public class MyRule {

    @Condition
    public boolean when(@Fact("fact") fact) {
        //my rule conditions
        return true;
    }

    @Action(order = 1)
    public void then(Facts facts) throws Exception {
        //my actions
    }

    @Action(order = 2)
    public void finally() throws Exception {
        //my final actions
    }

}

@Condition註解指定規則條件
@Fact註解指定參數
@Action註解指定規則執行的動作

RuleBuilder支持鏈式風格定義規則,例如:

Rule rule = new RuleBuilder()
                .name("myRule")
                .description("myRuleDescription")
                .priority(3)
                .when(condition)
                .then(action1)
                .then(action2)
                .build();

組合規則

CompositeRule由一組規則組成。這是一個典型地組合設計模式的實現。

組合規則是一個抽象概念,因為可以以不同方式觸發組合規則。

Easy Rules自帶三種CompositeRule實現:

  • UnitRuleGroup : 要麼應用所有規則,要麼不應用任何規則(AND邏輯)
  • ActivationRuleGroup : 它觸發第一個適用規則,並忽略組中的其他規則(XOR邏輯)
  • ConditionalRuleGroup : 如果具有最高優先級的規則計算結果為true,則觸發其餘規則

複合規則可以從基本規則創建並註冊為常規規則:

//Create a composite rule from two primitive rules
UnitRuleGroup myUnitRuleGroup = new UnitRuleGroup("myUnitRuleGroup", "unit of myRule1 and myRule2");
myUnitRuleGroup.addRule(myRule1);
myUnitRuleGroup.addRule(myRule2);

//Register the composite rule as a regular rule
Rules rules = new Rules();
rules.register(myUnitRuleGroup);

RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, someFacts);

每個規則都有優先級。它代表觸發註冊規則的默認順序。默認情況下,較低的值表示較高的優先級。可以重寫compareTo方法以提供自定義優先級策略。

2.2.  定義事實

在Easy Rules中,Fact API代表事實

public class Fact<T> {
     private final String name;
     private final T value;
}

舉個栗子:

Fact<String> fact = new Fact("foo", "bar");
Facts facts = new Facts();
facts.add(fact);

或者,也可以用這樣簡寫形式

Facts facts = new Facts();
facts.put("foo", "bar");

用@Fact註解可以將Facts注入到condition和action方法中

@Rule
class WeatherRule {

    @Condition
    public boolean itRains(@Fact("rain") boolean rain) {
        return rain;
    }

    @Action
    public void takeAnUmbrella(Facts facts) {
        System.out.println("It rains, take an umbrella!");
        // can add/remove/modify facts
    }

}

2.3.  定義規則引擎

Easy Rules提供兩種RulesEngine接口實現:

  • DefaultRulesEngine : 根據規則的自然順序應用規則
  • InferenceRulesEngine : 持續對已知事實應用規則,直到不再適用任何規則為止 

創建規則引擎:

RulesEngine rulesEngine = new DefaultRulesEngine();

// or

RulesEngine rulesEngine = new InferenceRulesEngine();

然後,註冊規則

rulesEngine.fire(rules, facts);

規則引擎有一些可配置的參數,如下圖所示:

舉個栗子:

RulesEngineParameters parameters = new RulesEngineParameters()
    .rulePriorityThreshold(10)
    .skipOnFirstAppliedRule(true)
    .skipOnFirstFailedRule(true)
    .skipOnFirstNonTriggeredRule(true);

RulesEngine rulesEngine = new DefaultRulesEngine(parameters);

2.4. 定義規則監聽器

通過實現RuleListener接口

public interface RuleListener {

    /**
     * Triggered before the evaluation of a rule.
     *
     * @param rule being evaluated
     * @param facts known before evaluating the rule
     * @return true if the rule should be evaluated, false otherwise
     */
    default boolean beforeEvaluate(Rule rule, Facts facts) {
        return true;
    }

    /**
     * Triggered after the evaluation of a rule.
     *
     * @param rule that has been evaluated
     * @param facts known after evaluating the rule
     * @param evaluationResult true if the rule evaluated to true, false otherwise
     */
    default void afterEvaluate(Rule rule, Facts facts, boolean evaluationResult) { }

    /**
     * Triggered on condition evaluation error due to any runtime exception.
     *
     * @param rule that has been evaluated
     * @param facts known while evaluating the rule
     * @param exception that happened while attempting to evaluate the condition.
     */
    default void onEvaluationError(Rule rule, Facts facts, Exception exception) { }

    /**
     * Triggered before the execution of a rule.
     *
     * @param rule the current rule
     * @param facts known facts before executing the rule
     */
    default void beforeExecute(Rule rule, Facts facts) { }

    /**
     * Triggered after a rule has been executed successfully.
     *
     * @param rule the current rule
     * @param facts known facts after executing the rule
     */
    default void onSuccess(Rule rule, Facts facts) { }

    /**
     * Triggered after a rule has failed.
     *
     * @param rule the current rule
     * @param facts known facts after executing the rule
     * @param exception the exception thrown when attempting to execute the rule
     */
    default void onFailure(Rule rule, Facts facts, Exception exception) { }

}

3.  示例

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.cjs.example</groupId>
    <artifactId>easy-rules-quickstart</artifactId>
    <version>1.0.0-SNAPSHOT</version>
    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-core</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-support</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.jeasy</groupId>
            <artifactId>easy-rules-mvel</artifactId>
            <version>4.0.0</version>
        </dependency>
        <dependency>
            <groupId>org.slf4j</groupId>
            <artifactId>slf4j-simple</artifactId>
            <version>1.7.30</version>
        </dependency>
    </dependencies>
</project>

4.  擴展

規則本質上是一個函數,如y=f(x1,x2,..,xn)

規則引擎就是為了解決業務代碼和業務規則分離的引擎,是一種嵌入在應用程序中的組件,實現了將業務決策從應用程序代碼中分離。

還有一種常見的方式是Java+Groovy來實現,Java內嵌Groovy腳本引擎進行業務規則剝離。

https://github.com/j-easy/easy-rules/wiki

 

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

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

※超省錢租車方案

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

EAS:基於網絡轉換的神經網絡結構搜索 | AAAI 2018

論文提出經濟實惠且高效的神經網絡結構搜索算法EAS,使用RL agent作為meta-controller,學習通過網絡變換進行結構空間探索。從指定的網絡開始,通過function-preserving transformation不斷重用其權重,EAS能夠重用之前學習到的知識進行高效地探索新的結構,僅需要10 GPU days即可

來源:曉飛的算法工程筆記 公眾號

論文: Efficient Architecture Search by Network Transformation

  • 論文地址:https://arxiv.org/abs/1707.04873

Introduction

  為了加速神經網絡搜索過程,論文提出EAS(Efficient Architecture Search),meta-controller通過網絡轉化(network transformation)操作進行結構空間探索,操作包含拓寬層,插入層,增加skip-connections等。為了繼續使用學習到的權重,基於function-preserving transformation來初始化新的不同參數的網絡,再進一步訓練來提高性能,能夠顯著地加速訓練過程。對於meta-controller,則結合了最近的強化學習方法

Architecture Search by Net Transformation

  整體算法邏輯如圖1,meta-controller學習如何對當前網絡中進行網絡轉換,為了學習多種網絡轉換操作以及不增加meta-contreoller複雜性,使用encoder network來學習當前網絡的低維表達,然後傳到actor netowrk來生成一個確定的模型轉換動作。為了處理不定長的網絡結構輸入以及考慮整體網絡結構,使用bidrectional recurrent network以及input embedding layer

Actor Networks

  給予輸入結構的低維表達,每個actor network給予特定的網絡轉換動作,共有兩種actor network,分別是Net2Wider actor和Net2Depper

  • Net2Wider Actor

  Net2Wider在保持網絡功能下替換網絡的某一層為更寬的層,例如對於全連接層是增加unit數,對於卷積層是增加卷積核數。對於卷積層的卷積核$K_l$,shape為$(k_wl,k_hl,f_il,f_ol)$,分別代表卷積核寬高以及輸入和輸出的維度數,將當前層替換成更寬的層即$\hat {f}_ol>f_ol$

  首先介紹隨機映射函數$G_l$,可以獲得新卷積核$\hat{K}_l[k_wl,k_hl,f_il,f_jl]$,第一個$f_ol$直接從$K_l$中獲得,剩餘的$\hat{f}_ol-f_o^l$維根據$G_l$從$K_l$中隨機選擇一維,因此,更寬的新層的輸出特徵$\hat{O}_l=O_l(G_l(j))$

  為了保持原有的功能,由於輸入多了複製的部分,下一層的卷積核$K_{l+1}$需要修改,新卷積核$\hat{K}_{l+1}$的shap維$(k_w{l+1},k_h{l+1},\hat{f}_i{l+1}=\hat{f}_ol,f_o^{l+1})$,公式3的意思大概是,權重要除以前一層對應維度複製的次數,以保證$l+1$層輸出跟之前一樣

  為了方便,論文使用的Net2Wider actor同時決定處理的層,對於encoder netowrk輸出的每一層對應的hidden state使用shared sigmoid分類器,另外將卷積的核數或全連接的unit數進行分區,直接將決定的層的對應參數升至下一個區間,例如$32\to 64$

  • Net2Deeper Actor

  Net2DeeperNet操作向網絡中插入新的層,然後將其初始化成跟插入identity mapping一樣,保持其原來的功能。對於新的卷積層,將其卷積核設為identity卷積核,對於全連接層,則將權重矩陣設為identiy矩陣,因此,新層必須與前一層有一樣的核數或unit。另外,想要保持原來網絡的性能,對於激活函數$\phi$,必須滿足$\phi(I\phi(v))=\phi(v)$,ReLU能滿足,而Sigmoid和thnh不能,但仍然可以重用帶sigmoid或tanh激活的網絡的權重,畢竟這樣總比隨機初始化要好。另外,當使用BN時,要設置其scale和bias為undo normalization,而不是初始化為1和0

  Net2Deeper actor的結構如圖3,為一個循環神經網絡,hidden state初始化為encoder network的最後一個hidden state。將CNN結構根據pooling的位置分成多個block,首先確定插入的block,然後再確定插入層的下標,對於新的卷積網絡,agent還需要確定卷積核大小和步長,而對於全連接層則不需要。在卷積網絡中,全連接層需要在網絡的頂層,如果插入位置在全局池化或全連接後面,新層則指定為全連接層

Function-preserving Transformation for DenseNet

  原始的Net2Net設定網絡是layer-to-layer的,沒有并行層,但目前的網絡大都將單層的輸入應用到多個後續的多個層中,直接應用Net2Net會出現問題,因此論文對其進行了改進。對於DenseNet,$l{th}$層會將所有前面的層concatenate成輸入$[O_0,O_1,…,O_{l-1}]$,標記$l{th}$層的卷積核為$K_l$,shape為$(k_wl,k_hl,f_il,f_ol)$
  假設需要拓寬層並保持其功能,首先根據Net2WiderNet操作按公式1和公式2生成新層$\hat{K}_l$,這樣新輸出為$\hat{O}_l=O_l(G_l(j))$,由於$l^{th}$的輸出會傳遞到多層,$\hat{O}_l$的複製會傳遞到後面的所有層,所以要修改所有後續的層

  對於$m{th}>l$層,輸入變為$[O_0,…,O_{l-1},\hat{O}_l,O_{l+1},…,O_{m-1}]$,將隨機映射函數改為公式4,$f_o{0:l}=\sum_{v=0}{l-1}f_ov$為$l^{th}$層的所有輸入數量,公式4的第一部分為$[O_0,…,O_{l-1}]$,第二部分為$\hat{O}l$,第三部分為$[O{l+1},…,O_{m-1}]$

  $\hat{G}m$的簡單示意如上,前面的為新層的index,後面為對應的舊的維度index,然後$m^{th}$層的新權重直接使用替換成$\hat{G}m$的公式3獲得
  假設要在DenseNet的$l{th}$層插入新層,新層輸入為$O_{new}$,輸出為$[O_0,O_1,…,O_l]$。因此,對於$m{th}>l$層,插入后的輸入為$[O_0,…,O
{l},O
{new},O_{l+1},…,O_{m-1}]$,為了按照類似Net2WiderNet那樣保持性能,$O_{new}$應該為$[O_0,O_1,…,O_l]$中的一個複製

  新層的每個卷積核可以表示為tensor$\hat{F}$,shape為$(k_w{new},k_h{new},f_i{new}=f_o{0:l+1})$,第三項為輸入channel數。為了讓$\hat{F}$的輸入為$[O_0,O_1,…,O_l]$的$n^{th}$項,按照類似公式5的方式進行設置(假設卷積寬高為3),其它卷積核設為0,當新層的的輸出設定好后。建立一個特定的隨機映射(這裡是按照層建立映射,前面是按照映射建立層),然後按照公式4和公式3來修改後續的層的卷積核

Experiments and Results

  EAS使用5 GPU進行搜索,有兩種設定,第一種為普通卷積網絡空間,僅包含卷積、池化和全連接,第二種為DenseNet結構空間

Training Details

  meta-controller為單層雙向LSTM,50個hidden units,embedding size為16,使用ADAM進行訓練。每輪通過網絡轉換採樣10個模型,由於重用了特徵,每個模型只訓練20輪(原來為50輪),初始學習率調低為0.02,使用SGD訓練,對準確率$acc$進行線性變化來放大高準確率的收益,例如$tanh(acc_v\times \pi/2)$,另外,每個卷積和全連接後面接ReLU和BN

Explore Plain CNN Architecture Space

  • Start with Small Network

  初始網絡如表1,卷積核大小為${1,3,5 {}}$,卷積核數量為${16,32,64,96,128,192,256,320,384,448,512 }$,全卷積的unit數為${64,128,256,384,512,640,768,896,1024 }$

  訓練分為兩階段,第一階段每輪將起始網絡進行5次Net2Deeper和4次Net2Wider,採樣夠300個網絡后,選取表現最好的網絡訓練100輪作為下階段的輸入。第二階段也是進行5次Net2Deeper和4次Net2Wider,採樣150個網絡后停止,取最好模型進行300輪迭代。結果如表2的depth=16,整體需要10 GPU days,共450個網絡

  • Further Explore Larger Architecture Space

  將上一個實驗的最好模型作為這次實驗的起點,結果如表2的depth=20,另外與SOTA進行了對比,結果如表3

  • Comparison Between RL and Random Search

Explore DenseNet Architecture Space

  將DenseNet-BC(L=40,k=40)作為起點,結果如表4

CONCLUSION

  論文提出經濟實惠且高效的神經網絡結構搜索算法EAS,使用RL agent作為meta-controller,學習通過網絡變換進行結構空間探索。從指定的網絡開始,通過function-preserving transformation不斷重用其權重,EAS能夠重用之前學習到的知識進行高效地探索新的結構,僅需要10 GPU days即可



如果本文對你有幫助,麻煩點個贊或在看唄~
更多內容請關注 微信公眾號【曉飛的算法工程筆記】

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

【其他文章推薦】

※超省錢租車方案

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

※回頭車貨運收費標準

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

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

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

這輛售價不到10萬的SUV能帶你勇闖雪地

針對行駛方面,外后視鏡電加熱、360°全景影像、9寸大屏、車內氛圍燈、無鑰匙進入+一鍵啟動、天窗、定速巡航、發動機怠速啟停等配置都一應俱全,真正的讓駕駛人員也感受得到森雅R7帶來的那份舒適。穩定可靠的動力系統森雅R7搭載代號為CA4GB16的直列4缸1。

俗話說真金不怕火煉,就是說真正好的東西,是經得起考驗的。那對於汽車來說,“火煉”明顯不是現實的考驗方案,真正想檢驗一輛車的極限性能,-20攝氏度下的冰雪試駕就是最好的方法。

在嚴寒環境中,鋼鐵、橡膠、塑料都會變脆,一些平時看上去不起眼的顛簸、磕碰都可能會造成斷開、破裂。可以說,嚴寒用車環境是對整車品質的全面考驗,直接體現廠家的專業化造車水準。就在12月17日,森雅R7“柒待•玩美之行”冰雪試駕活動就在平均積雪厚度達2米,雪量堪稱中國之最的雪鄉舉行。

這輛售價不到十萬的SUV,憑什麼有信心能在冰天雪地下讓我們檢驗它的實力?

7位一體的智能主動安全系統

大家都知道冰雪路面極其濕滑,即使車子換上了雪地胎,車輛依然很容易發生側滑或者甩尾等現象,如果沒有及時的控制好車輛,事故的發生就在頃刻之間。那麼在這個時候,主動安全配置就發揮了重要的作用,這一次在雪鄉試駕的森雅R7就搭載了比較全面的主動安全系統。其中就包括了ABS防抱死、EBD制動力分配、ESp車身穩定系統、牽引力控制、剎車輔助、上坡輔助、胎壓監測等。

在雪鄉試駕的時候就體現了森雅R7這些主動安全配置的作用,整個車身給的感覺都是穩定可控的,即使在濕滑的路面車子也能按照駕駛者的意願來行駛。而縱觀國內的各大汽車品牌,能夠在售價十萬不到的車型齊全配備這七大主動安全配置的品牌並不多,所以森雅R7在這方面的表現可謂相當厚道。

人性化的設計,讓駕乘人員更加舒適

在寒冷的冰天雪地里行駛的話,溫暖和舒適往往是最能夠打動人心的,而在舒適性的配置方面,森雅R7絲毫沒有吝嗇。森雅R7自動擋車型配有6向調節駕駛座椅並搭配了腰部支撐和座椅加熱功能,即使在冰天雪地也能提供溫暖、舒適的乘坐感受,另外,自動空調、後排足部的採暖出風口等配置都體現了森雅R7的人性化設計思想。

針對行駛方面,外后視鏡電加熱、360°全景影像、9寸大屏、車內氛圍燈、無鑰匙進入+一鍵啟動、天窗、定速巡航、發動機怠速啟停等配置都一應俱全,真正的讓駕駛人員也感受得到森雅R7帶來的那份舒適。

穩定可靠的動力系統

森雅R7搭載代號為CA4GB16的直列4缸1.6L自然吸氣發動機,最大馬力為116ps,最大扭矩為155N•m,由一汽自主研發的這台發動機勝在輸出線性,質量可靠,搭配技術同樣成熟的愛信第三代6AT手自一體變速器,換擋邏輯聰明,動力傳輸平順。這讓駕駛員在駕駛的過程中沒有後顧之憂,能夠盡情的征戰冰雪。

實際駕駛過程中,由於該車的油門調教比較靈敏,所以整車的動力響應不會給人慵懶、遲滯的感覺,而是偏向於輕快的調性。第三代的愛信6AT手自一體變速箱是最新一代產品,動力輸出平順,沒有頓挫,該變速箱的升擋時機比較遲,偏向高轉速的輸出會讓車輛有更加积極的動力響應。

回歸到靜態:高原創度的設計

自主品牌被詬病山寨抄襲已是家常便飯,森雅R7卻沒有同流合污,在外觀的自主設計方面下了不少功夫。外觀由大眾控股的IDG公司設計,在森雅R7身上找不到一絲山寨的痕迹。

前臉的整體感很強,大燈-中網一體式的設計,而且採用了微微上揚的線條,頗像一張笑臉。車頭大燈為鹵素光源,但帶有日間行車燈,配合上流線形的造型,科技感十足。

側面的造型則能看出車身的比例十分協調,通過硬朗的線條和突出的輪拱展現了森雅R7的力量美。

車尾的造型圓潤飽滿,尾燈採用LED光源,點亮效果很好,而且尾燈的造型也是和頭燈前後呼應的,頗有心思。

總結

試駕過森雅R7之後,最大的感觸是這輛車的配置實在豐富,特別是在寒冷的冬天,當你坐進一輛車子之後發現它是有座椅加熱功能的,那種感覺是既驚喜又感動的。而森雅R7就是這麼一輛車,以不到十萬的價格,不僅有全面的主動安全配置,在動力系統方面還搭載了最新一代的愛信6AT手自一體變速箱,可以說森雅R7是一汽給我們帶來的又一款誠意之作。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

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

不要小看這款常見的家用車!懂得買這款車的人都不簡單…

為什麼日產要推出這樣的一輛車,並且把重點放在舒適性上,其實和它的“大哥”有一定的聯繫。我們都十分熟悉的風神藍鳥,就是由第九代藍鳥U13衍生而來,為了迎合國內市場做了大量的修改,更加顯得豪華,雖然市場表現很好,但隨着時間的推移,時代的變遷,無論是技術層面還是還是設計層面,都已經被市場淘汰。

2006年,日產推出了一款介於天籟與藍鳥之間的全新中高級轎車,英文名為BLUEBIRD SYLpHY,當時的新車指導價為:14.38萬-21.48,主打2.0L車型,其實日產推出這款車型的目的明確,就是為了替代BLUEBIRD藍鳥。

外觀造型飽滿圓潤,鍍鉻裝飾的中網突顯檔次,前大燈的設計與風雅有相似之處,整車設計給人感覺大方得體,非常流暢,這也是軒逸經典款至今仍在出售的原因之一。

堪稱沙發級別的座椅是軒逸的殺手鐧,座椅寬大、厚實、飽滿,一坐進去軒逸的後排,就像是坐在家裡的沙發一樣,整個人陷入其中,坐墊非常軟,同時還有着非常寬裕的腿部空間,大家要知道,那時候可是2006年,能夠有這麼優秀的舒適性,是非常難得的。

為什麼日產要推出這樣的一輛車,並且把重點放在舒適性上,其實和它的“大哥”有一定的聯繫。我們都十分熟悉的風神藍鳥,就是由第九代藍鳥U13衍生而來,為了迎合國內市場做了大量的修改,更加顯得豪華,雖然市場表現很好,但隨着時間的推移,時代的變遷,無論是技術層面還是還是設計層面,都已經被市場淘汰。

日產需要一輛能夠霸佔家用轎車市場的車型,就這樣,軒逸應運而生,外觀大氣、乘坐舒適、空間寬裕,動力方面使用了MR20DE的2.0L發動機和第三代XTRONIC CVT無極變速箱,側重於追求低油耗和低噪音,這些所有的一切,都是為了舒適性,做出高級感。

最終日產的確憑藉著它在市場中站穩腳跟,聽到日產軒逸就會想起那舒適居家的溫馨感,其實我們可以看得出來,當初軒逸的成功是必然的,因為市場就是需要這樣的產品,同時我們也看到日產似乎對於“藍鳥”這個名字念念不忘。

日產通過LANNIA 藍鳥很全面的詮釋了V-motion家族式設計風格,告訴我們什麼才叫“驚艷”,由一開始的BLUEBIRD,到後來的BLUEBIRD SYLpHY,然後BLUEBIRD消失,剩下SYLpHY,最後LANNIA 藍鳥出現。

第一代藍鳥

“藍鳥”這兩個字包含着很多歷史,很多情懷,還有我們小時候的生活場景,它註定不會消失,這些歷史的沉澱,我們都應該好好記住。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

教授為你盤點去年3-30萬最受關注車型

3英寸液晶儀錶盤,看起來很有科技感。至於動力方面,第三代EA888發動機搭配7速雙離合變速箱,滿滿的德味,行駛品質依舊出色。在售價沒有大漲的前提下進行了這麼大的提升,全新邁騰總算沒有讓車迷失望。小型SUV:上汽通用五菱-寶駿510關注點:和寶駿310一樣有了前面310的成功經驗,那麼上汽通用五菱做起寶駿510這款的時候就更有信心了。

不知不覺已經到2017年了,像這種文藝肌肉男,每年到這個時候總是難免感嘆時間流逝之快。正當我們停下來傷春悲秋的時候,汽車圈卻依然像幻變的風雲一樣,不斷髮展。在逝去的2016年,我們聽到最多的是哪些車的名字?是加價提車一車難求的思域?還是被吐槽萬遍依然銷量爆炸的H6?今天就盤點了這些2016年你們一定關注過的幾款車,看看誰是今年的“大明星”。

小型轎車:上汽通用五菱-寶駿310

關注點:配置齊全、外觀帥氣、價格超低

從今年4月份北京車展的發布之後,時尚靚麗的造型、懸浮式的中控屏、以及比大眾polo還要大的車身尺寸,讓寶駿310受到不少年輕人的關注,再加上傳聞3萬多的起售價,那更是把寶駿310推到了關注的新高度。

不出所料,在上市之後,憑藉3.68-4.98萬元的超低售價,迅速吸引了不少買家,在11月份的銷量已經突破了1.5W輛。其實寶駿310的成功也是不無道理,細想一下,同尺寸的競爭對手就是大眾polo、本田飛度等車,但它們對比310 卻毫無價格優勢,而同價格的自主品牌,卻只有比亞迪F0或者奇瑞QQ這樣的產品,產品力根本就不能和310相提並論。所以寶駿310 的成功,是離不開寶駿對消費者需求的正確解讀的。

緊湊型轎車:東風本田-思域

關注點:高性能、大空間、運動化的外觀

認為思域確實是年度最受關注的緊湊型車,1.5T的發動機,爆發出177ps的馬力,單是這一點,已經讓很多對手都望塵莫及了,更何況它有溜背造型的車尾以及后多連桿獨立懸挂,試問在十五萬級別的車裡面,論產品力,誰能跟思域抗衡?

然而,加價提車卻成了車迷心裏面永恆的痛,小則三四千,多則上萬,從思域上市至今,該車在各大經銷商就一直處於加價提車並且一車難求的狀態。而這一點也是制約着思域銷量的障礙,雖然月銷量才剛剛破萬,但是依然沒有降低廣大車迷對思域的關注,希望有天思域能夠不再加價提車,以回報車迷們的熱情吧。

中型轎車:一汽大眾-邁騰

關注點:新平台、第三代EA888發動機

良久以來,帕薩特車系都一直是國內平民商務轎車的典範,親民的價格,大氣的外觀,舒適的駕乘體驗,想起買中型車,不買日系的話,基本就是往帕薩特/邁騰這方向考慮的了。然而,上一代的邁騰採用的是國外帕薩特B6的平台,而帕薩特B8早在2015年初就已經發布,所以國內的大眾車迷一直都在翹首以盼換代邁騰的到來,因此全新邁騰自然受到不少關注。

實際上,該車的實力是值得肯定的,首先在外觀上改變了圓頭圓腦的造型,採用了扁平硬朗的設計,既時尚又穩重。同時內在的變化也不少,如360度全景攝像、以及跟奧迪類似的12.3英寸液晶儀錶盤,看起來很有科技感。至於動力方面,第三代EA888發動機搭配7速雙離合變速箱,滿滿的德味,行駛品質依舊出色。在售價沒有大漲的前提下進行了這麼大的提升,全新邁騰總算沒有讓車迷失望。

小型SUV:上汽通用五菱-寶駿510

關注點:和寶駿310一樣

有了前面310的成功經驗,那麼上汽通用五菱做起寶駿510這款的時候就更有信心了。雖然該車尚未上市,但是在廣州車展發布以來,其漂亮的外觀以及精緻的內飾對於本來購車預算不大的消費者來說的確是很大的誘惑,可謂是國內車市在今年的一顆重磅炸彈。

從動力系統上看,採用了通用的L2B發動機,排量為1.5L,前期推出的三款車型均搭載手動變速箱,期待後續有自動擋或者AMT車型的加入,畢竟寶駿的AMT其實做得不錯。說發動機的編號大家可能覺得陌生,但說起凱越和英朗這兩款別克車,大家就很有親切感了,沒錯,這個L2B發動機同樣搭載在凱越和英朗身上,在燃油經濟性和可靠性方面的現都很出色,相信這個發動機會在寶駿510身上繼續發光發熱。

緊湊型SUV:哈弗H6

關注點:銷量王、可選車型多

油耗高、動力平庸、底盤也是逆向研發CRV得出來的H6,雖然被不少人吐槽,但是他卻依然熱銷,就在剛過去的11月,月銷量突破7萬輛,這讓古今中外多少車企都望塵莫及啊。

H6的車型確實很多,想購買這輛車的朋友可能一時間真的不知道該怎麼選,其實可以用排除法選,首先在售的有1.5T汽油、2.4L汽油和2.0T柴油三種發動機,然後在根據自己的需要選擇手動或者自動變速箱,再來就是根據可以接受的價錢選擇一款車型即可。實際上,想長安CS75、吉利博越和傳祺GS4這些車型在看來都比哈弗H6要好,值得大家考慮。

中型SUV:眾泰SR9

關注點:十萬元就能買到保時捷……的外觀

眾泰SR9一經推出就引起了熱議,但實際上其實都是調侃多於肯定的,甚至有人說這輩子能不能開上蘭博基尼就要看眾泰了。正當我們以為這輛車會被輿論推上風口浪尖的時候,11月11日上市的SR9當月就賣出了3286輛,不得不承認,眾泰是有他自己一套生存法則的。

撇開外觀來談談這輛車的話,首先內飾上面來看,布局是明顯抄保時捷的了,特別是變速箱周圍密密麻麻的按鍵,遠看像極了保時捷,但是近看之後,粗糙的做工就會展露無遺。動力方面,採用三菱的4G63T發動機搭配手動變速箱或者雙離合變速箱,動力匹配的火候明顯未到家,中低速行駛的平順性乏善可陳,動力調校的功底多年來都沒有明顯的提高,難以形成自身的核心競爭力。但無論怎樣,這輛車在2016年的尾巴的確掀起了一個不小的“十萬買保時捷”風波。

總結

在我們關注的這些車裡面,要麼就是在性能方面有建樹,如新思域、新邁騰,要麼就是自帶賣點,如銷量王H6、十萬保時捷SR9。但相信,想要走得更遠,核心技術始終是最強有力的支撐,希望2017年將會有更多優秀的自主品牌汽車出現吧。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

※超省錢租車方案

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

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

從7萬到25萬,這些車為了衝量竟然最高降3.7萬!

6L自動擋版本綜合油耗在5毛錢以內。別克君威指導價:17。89-27。99萬降價幅度:3。7萬推薦車型:2015款1。6T領先技術型君威作為別克的一款中高檔轎車,定位介於英朗和君越之間,屬於一款20萬級別的中型車,在乘坐空間,配置,做工用料上,都比代步車上了一個層次,而這款車的優惠幅度也是同級別車型中最大的,最高達到了3。

許多經銷商們為了年底衝量,在7萬-25萬這個區間的車型,許多都放出了最大降價的優惠,從小型車,緊湊型車再到中級車,SUV,羅列了幾款降價幅度很大的好品質車型,供大家參考參考。

雪鐵龍愛麗舍

指導價:8.38-12.08萬元

降價幅度:1.5萬元

車型:2016款1.6L自動豪華型

愛麗舍是法國雪鐵龍推出的一款家用轎車,自2002年誕生以來,用戶好口碑一直不斷積累着,為了針對中國人的審美觀,新款愛麗舍擁有更加動感的車身線條和造型設計,廠家似乎正通過這款車和消費者說:其實我們要造好造型還是不差於別人的。

愛麗舍內飾的整體風格簡潔,清新,高雅,且空調出風口設計得很大,製造出風最好的效率,每個區域分隔清晰,操作非常方便,車型上推薦買自動豪華版,因為配置豐富帶ESp,真皮座椅,倒車影像,安全側氣囊等,優惠完車身價大概在10萬元左右。動力則全系搭載1.6L自然吸氣發動機,匹配5擋手動和6擋手自一體變速器。

車主評價:動力充足,配置夠用,外形沉穩時尚,底盤舒服有韌性,剎車感覺非常線性。

大眾高爾夫

指導價:12.19-23.99萬

降價幅度:2.8萬

推薦車型:2016款 1.6L自動時尚型

從1974年開始,大眾高爾夫就誕生了,直至今年,已經在全球市場推出七代車型,也是大眾最暢銷的車型之一,在中國,兩廂的高爾夫非常受人們歡迎,比起六代,七代高爾夫在外觀造型上更加犀利運動。

內飾風格同樣也是大眾風格,簡約實用,對於家用代步來說,車型版本選擇1.6L自然吸氣排量就夠了,如果不需要天窗的可以選自動時尚型,匹配6擋手自一體,配置安全側氣囊,ESp車身穩定控制,上坡輔助,自動駐車等等,而如果是喜歡追尋動力的年輕人,可以考慮1.4T渦輪增壓發動機版本,匹配7擋雙離合變速器,更有操控和駕駛的樂趣。

車主評價:外觀好看,舒適度滿意,轉向精準,隔音做得蠻好,油耗低,1.6L自動擋版本綜合油耗在5毛錢以內。

別克君威

指導價:17.89-27.99萬

降價幅度:3.7萬

推薦車型:2015款1.6T領先技術型

君威作為別克的一款中高檔轎車,定位介於英朗和君越之間,屬於一款20萬級別的中型車,在乘坐空間,配置,做工用料上,都比代步車上了一個層次,而這款車的優惠幅度也是同級別車型中最大的,最高達到了3.7萬元。

推薦的這款1.6T領先技術型,匹配6速手自一體變速箱,算是各方面相對均衡的一個版本,動力夠用,配置齊全,帶有胎壓監測,ESp,上坡輔助,電動天窗,自動空調等等,再加上美系車蠻好的隔音效果,優質的底盤響應,用料十分厚道,總有一種讓人們覺得這個價格買得值的感覺。

車主口碑:隔音好,外觀公認好看,車身穩重,安全感強烈。

現代ix35

指導價:14.98-22.28萬

降價幅度:2.8萬元

推薦車型:2015款 2.0L自動兩驅智能型國IV

現代ix35的外形設計由德國法蘭克福研發中心完成,帶有明顯歐式風格,時尚前衛,動感強韌,韓系車都喜歡將錢花在大家都看得到的地方,同樣的價格,假如這台車外形更好看的話,中國老百姓就喜歡,就覺得值,同樣車內空間的拓展上做得非常好,後備箱也一樣寬大。

內飾方面,營造了一種溫馨家用的風格,做工細膩手感順滑,並採用大面積的銀色裝飾,方向盤採用真皮縫製,配置非常貼心,配備有安全側氣囊,無鑰匙進入與啟動,ESp,上坡輔助,電動天窗等等,同等價位里這個配置挺高分的了,搭載有2.0L和2.4L自然吸氣發動機,匹配6速手動和6速手自一體變速器。

車主評價:同等級對比后,內部空間大,配置高,性價比強。

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

【其他文章推薦】

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

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

※超省錢租車方案

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

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

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

汽車的頭枕為什麼怎麼調都不舒服?

這一后一前兩個猛烈彎折動作,足以導致頸椎折斷。這是重傷或者致死的主要原因。正因為被追尾的主要死/傷原因是揮鞭效應,所以汽車製造商就推出了相關的硬件安全設計。最常見的現行設計就是主動頭枕,防止頸部受傷。主動安全頭枕就是在碰撞的瞬間讓頭部得到支撐,也就是把頭枕往前移動。

很多朋友買來新車以後會裝很多配件,比如座椅套,方向盤套。

而細心的朋友會發現,不管頭枕怎麼調,手動調節還是電動調節都不能調到一個很舒服的位置,總覺得頭靠上去脖子部分空空的,所以很多朋友一般都會額外加裝一個托住脖子的軟墊。難道汽車廠商從來都沒有發現這個問題嗎?

其實汽車頭枕的全稱是汽車座椅安全頭枕,在早些年的時候汽車都沒有頭枕這個東西。

他的出現主要是為提高汽車安全性而設置的一種輔助裝置。

因為在被追尾時, 安全帶是不會發揮作用的.追尾帶來的最大傷害的原因是揮鞭效應, 撞擊一瞬, 被撞者頭部猛烈後仰, 頸椎在巨大的頭部加速作用下,嚴重的頸椎會當場折斷,頭部後仰,在巨大慣性作用下,然後頭部猛烈想前運動,頸椎前折. 這一后一前兩個猛烈彎折動作,足以導致頸椎折斷。

這是重傷或者致死的主要原因.正因為被追尾的主要死/傷原因是揮鞭效應,所以汽車製造商就推出了相關的硬件安全設計。最常見的現行設計就是主動頭枕,防止頸部受傷。

主動安全頭枕就是在碰撞的瞬間讓頭部得到支撐,也就是把頭枕往前移動。其机械結構也不複雜,只要在椅背內設計了一個連桿,發生來自後部的撞擊時,身體重量擠壓在這個連桿上,在聯動機構的作用下,頭枕向前移動,最大限度地防止頭部猛烈後仰,從而保護人員頭部和頸部的安全。

雖然現在也有些廠商將頭枕設計得很舒服,但是汽車的頭枕在絕大多數情況下都只是一項安全配置。

最後祝所有TV的粉絲元旦快樂,在新的一年能開超跑。

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

【其他文章推薦】

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

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

※回頭車貨運收費標準

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

※超省錢租車方案

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

我買中國品牌的車不只是因為便宜!

觀致耗資1600萬與超跑製造商柯尼塞克共同研發的無凸輪軸發動機(代號QamFree),同等排量下,要比傳統的發動機的功率大幅提升45%,最大扭矩大幅提高47%。假如測試通過,進行量產,將成為未來發動機技術的主要發展方向,彷彿為全世界指明了一條比混合動力更為通暢的道路。

自主品牌亮瞎眼睛的地方還多着!

當然了,自主品牌能夠亮瞎眼的地方遠不止這兩點。力壓奔馳、寶馬,在歐洲新車安全評鑒協會Euro-NCAp所進行的2013年最佳碰撞車型評選(小型家用車類)一舉奪得第一名的觀致3,讓一眾歪果仁瞠目結舌。觀致耗資1600萬與超跑製造商柯尼塞克共同研發的無凸輪軸發動機(代號QamFree),同等排量下,要比傳統的發動機的功率大幅提升45%,最大扭矩大幅提高47%。假如測試通過,進行量產,將成為未來發動機技術的主要發展方向,彷彿為全世界指明了一條比混合動力更為通暢的道路。吧唧這麼多,我想說的其實很簡單:自主品牌比你想象中牛逼多了!趕緊去4S店下訂吧!

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

【其他文章推薦】

※超省錢租車方案

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

※回頭車貨運收費標準

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

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

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

git push 錯誤,回滾 push操作

作者:
故事我忘了

個人微信公眾號:
程序猿的月光寶盒

目錄

  • 0.記一次使用git push后,覆蓋了同事代碼的糗事
  • 1.還原案發現場的準備工作
    • 1.1 新建分支
      • 注意:
    • 1.2. 分支提交到遠程Git倉庫
  • 2.糗事發生契機
    • 2.1 假設文件是這個html文件,然後你上傳到遠程分支
    • 2.2 這時我用另一電腦修改這個文件,並提交到遠程,故意模仿他人操作,如圖,在遠程分支上Linux已經更新過
    • 2.3 本地文件也做不一樣的修改,假設自己再不知情的情況下做push操作必然會引起版本衝突
    • 2.4 此時本地我已經做了版本合併,所以,再次pull
  • 3. 正事來了.回滾吧
    • 3.1 將win給回滾調,留下Linux的代碼
      • 步驟
        • 1. 在目標分支上copy revision number:
        • 2. 右擊項目依次選中:git->Repository->Reset HEAD
  • 4.提交
    • git reset soft,hard,mixed之區別深解
      • 3.再次push
  • 5:驗證 上一步的強制push git push -f

0.記一次使用git push后,覆蓋了同事代碼的糗事

前言:

​ 都在WebStorm中操作,Idea或者PyCharm同理

​ 為了高度還原尷尬現場,這裡在原有項目上新建分支,然後都在分支上操作,一方面怕自己搞炸了,一方面真實環境就是如此

1.還原案發現場的準備工作

1.1 新建分支

注意:

這裏創建的分支僅僅在本地倉庫

1.2. 分支提交到遠程Git倉庫

遠程查看確認,確實有,說明分支已經創建

2.糗事發生契機

​ 這時候別人可能會和你改同一文件

2.1 假設文件是這個html文件,然後你上傳到遠程分支

注意這時候都是在剛創建的那個分支操作

​ 可以看到遠程分支已經有了

2.2 這時我用另一電腦修改這個文件,並提交到遠程,故意模仿他人操作,如圖,在遠程分支上Linux已經更新過

2.3 本地文件也做不一樣的修改,假設自己再不知情的情況下做push操作必然會引起版本衝突

Remote changes need to be merged before pushing

推送前需要合併遠程更改

​ 這時你點了合併

​ 上圖,把你的和他的都合併提交,但是出現如下警告

Push has been cancelled, because there were conflicts during update. Check that conflicts were resolved correctly, and invoke push again.

Push已被取消,因為在更新期間有衝突。檢查衝突是否已正確解決,並再次調用pull。

2.4 此時本地我已經做了版本合併,所以,再次pull

3. 正事來了.回滾吧

​ 現在,你被告知Linux的為正確的修改,並且你上一步的提交影響到他了,要回滾pushLinux操作的階段

3.1 將win給回滾調,留下Linux的代碼

步驟

1. 在目標分支上copy revision number

2. 右擊項目依次選中:git->Repository->Reset HEAD

Reset Type選Hard,To Commit 寫剛複製的版本號,

然後點擊Reset按鈕

這時候,代碼已經回到了老的版本,這個時候不能提交代碼,提交也是會衝突的。

4.提交

1.可以使用命令強制提交

  git push -f

或者

2.使用Idea,(我使用的是這個方法)

  在最新的commit上複製版本號

使用mixed類型,將上面複製的版本號粘貼進來:

git reset soft,hard,mixed之區別深解

git reset soft,hard,mixed之區別深解

又出來這個提示

3.再次push

​ 此時 代碼是最新的正確的,

​ 也就是Linux操作的正確修改

5:驗證 上一步的強制push git push -f

1.說明

  將程序從錯誤的復原,回滾到win操作

2.步驟

  按照上面的步驟進行操作。

  在後面提交的時候,直接強制提交,

則效果是:

可以看到一開始的

對應遠程的文件

至此就恢復以及修改了,Linux端只要pull一下就行了,就是最新代碼

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

【其他文章推薦】

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

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

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

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

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

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

Logstash下字段以及嵌套Json字段類型轉換

 

前言

從filebeat傳輸到Logstash的數據,某個字段需要由string類型裝換成float類型。但是不管怎麼改logstash的配置文件都不生效,其實官方文檔都有,但是具體細節方面的東西就得自己不斷的實踐驗證最後達到自己想要的目標了。整整一天,都在弄這一個,中間實在想放棄了。但是就如張靚穎的“終於等到你,還好沒放棄”,最後在某一篇博文得到了啟發,才解決。

 

這裏類型轉換分兩個類型:

1)字段是單純的字段,也就是直接在_source下的

2)字段是在json里的,在_source下還有嵌套一層json里的字段

 

一、單一字段

可以從下面的圖中看出,字段就在頂層機構_source下,這種情況下的Logstash配置文件設置如下:

filter {
     mutate {
     convert => { "request_time" => "float" }
     convert => { "upstream_response_time" => "float" }
     }
}

 

 

 

 

二、嵌套Json下的字段

如果需要轉換的字段是在非頂級結構下,是在一個JSON里,因為在filebeat做decode的時候指定了,如我需要轉換的字段是在jsonn的json字段里:

processors:
 - decode_json_fields:
    fields: ["message"]    #要進行解析的字段
    process_array: false   #數組是否解碼,默認值:false
    max_depth: 3           #解碼深度,默認值:1
    target: "jsonn"          #json內容解析到指定的字段,如果為空(“”),則解析到頂級結構下
    overwrite_keys: false  #如果解析出的json結構中某個字段在原始的event(在filebeat中傳輸的一條數據為一個event)中也存在,是否覆蓋

 

 

 

這種情況下的Logstash配置文件設置如下:

filter {
    mutate {
      convert => { "[jsonn][request_time]" => "float" }
      convert => { "[jsonn][upstream_response_time]" => "float" }
   }
}

 

注意:

[jsonn][request_time] 不是[jsonn].[request_time],也不是jsonn.request_time沒有點.

 

受啟發的鏈接:

https://stackoverflow.com/questions/30369148/logstash-remove-deep-field-from-json-file

 

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

【其他文章推薦】

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

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

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

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

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