調查:亞馬遜牛肉產區 林火次數是其他地區三倍以上

環境資訊中心綜合外電;姜唯 編譯;林大利 審校

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

【案例演示】JVM之強引用、軟引用、弱引用、虛引用

1.背景

想要理解對象什麼時候回收,就要理解到對象引用這個概念,於是有了下文

2.java中引用對象結構圖

3.引用詳解

3.1.什麼是強引用

a.當內存不足,JVM開始垃圾回收,對於強引用的對象,就算是出現了00M也不會對該對象進行回收,死都不收。

b.強引用是我們最常見的普通對象引用,只要還有強引用指向一個對象,就能表明對象還“活着”,垃圾收集器不會碰這種對象。

在Java中最常見的就是強引用,把一個對象賦給一個引用變量,這個引用變量就是一個強引用。

當一個對象被強引用變量引用時,它處於可達狀態,它是不可能被垃圾回收機制回收的,即使該對象以後永遠都不會被用到JVM也不會回收。

因此強引用是造成Java內存泄漏的主要原因之一

c.對於一個普通的對象,如果沒有其他的引用關係,只要超過了引用的作用域或者顯式地將相應(強)引用賦值為null,一般認為就是可以被垃圾收集的了〈當然具體回收時機還是要看垃圾收集策略)。

案例:

package com.wfd360.demo03GC.referDemo;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 12:12
 * @description
 */
public class StrongRefer {
    /**
     * 強引用的理解
     *
     * @param args
     */
    public static void main(String[] args) {
        Object obj1 = new Object();
        // 建立強引用
        Object obj2 = obj1;
        // 觀察obj1 和 obj2 的各種內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("obj2=" + obj2);
        // obj1創建可以回收的條件
        obj1 = null;
        // gc回收
        System.gc();
        // 觀察各對象情況
        System.out.println("obj1=" + obj1);
        System.out.println("obj2=" + obj2);
    }
}

View Code

 從測試結果課程看出,obj1的實際對象別沒有回收;

3.2.什麼是軟引用

a.軟引用是用來描述一些還有用但並非必需的對象,需要用java.lang.ref.SoftReference類來實現。

b.對於軟引用關聯着的對象,在系統將要發生內存溢出異常之前,將會把這些對象列進回收範圍之中進行第二次回收。如果這次回收還沒有足夠的內存,才會拋出內存溢出異常。在JDK1.2之後,提供了Soft Reference類來實現軟引用。

c.軟引用通常用在對內存敏感的程序中,比如高速緩存就有用到軟引用,內存夠用的時候就保留,不夠用就回收!

案例:

package com.wfd360.demo03GC.referDemo;

import java.lang.ref.SoftReference;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 12:12
 * @description
 */
public class SoftRefer {

    /**
     * 軟引用的理解
     * 通過設置jvm參數,在不同的條件下觀察
     *
     * @param -Xms5m -Xmx5m -XX:+PrintGCDetails
     * @param args
     */
    public static void main(String[] args) {
        // 測試內存充足(不回收軟引用)
        //testSoftReferNOGc();
        // 測試內存不充足(回收軟引用)
        testSoftReferGc();
    }

    /**
     * 模擬內存充足的情況
     */
    public static void testSoftReferNOGc() {
        Object obj1 = new Object();
        // 建立軟引用
        SoftReference softRefer = new SoftReference<>(obj1);
        // 觀察內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("softRefer=" + softRefer.get());
        // obj1創建可以回收的條件
        obj1 = null;
        // gc回收
        System.gc();
        // 再次觀察內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("softRefer=" + softRefer.get());
    }

    /**
     * 模擬內存不足
     * 1.設置較小的堆內存
     * 2.創建大對象
     * 3.jvm參
     * -Xms5m -Xmx5m -XX:+PrintGCDetails
     */
    public static void testSoftReferGc() {
        Object obj1 = new Object();
        // 建立軟引用
        SoftReference softRefer = new SoftReference<>(obj1);
        // 觀察內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("softRefer=" + softRefer.get());
        // obj1創建可以回收的條件
        obj1 = null;
        try {
            byte[] bytes = new byte[6 * 1024 * 1024];
        } catch (Throwable e) {
            System.out.println("===============>error:" + e.getMessage());
        } finally {
            // 再次觀察內存地址
            System.out.println("obj1=" + obj1);
            System.out.println("softRefer=" + softRefer.get());
        }
    }
}

View Code

內存充足測試結果:

 內存不充足測試結果:

 實際案例

假如有一個應用需要讀取大量的本地數據(圖片、通訊率、臨時文件等):

如果每次讀取數據都從硬盤讀取則會嚴重影響性能,

如果一次性全部加載到內存中又可能造成內存溢出。

此時使用軟引用可以解決這個問題。

設計思路是:用一個HashMap來保存數據的路徑和相應數據對象關聯的軟引用之間的映射關係,在內存不足時,

JVM會自動回收這些緩存數據對象所佔用的空間,從而有效地避免了00M的問題。

Map<String,SoftReference>imageCache=new HashMap<String,SoftReference>();

 3.3.什麼是弱引用

a.弱引用也是用來描述非必需對象的,但是它的強度比軟引用更弱一些,被弱引用關聯的對象只能生存到下一次垃圾收集發生之前。

b..當垃圾收集器工作時,無論當前內存是否足夠,都會回收掉只被弱引用關聯的對象。在JDK1.2之後,提供廣Weak Reference類來實現弱引用。

c.弱引用需要用Java.lang.ref.WeakReference類來實現,它比軟引用的生存期更短.

案例:

package com.wfd360.demo03GC.referDemo;

import java.lang.ref.WeakReference;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 12:12
 * @description
 */
public class WeakRefer {

    /**
     * 弱引用的理解
     *
     * @param args
     */
    public static void main(String[] args) {
        Object obj1 = new Object();
        // 建立弱引用
        WeakReference softRefer = new WeakReference<>(obj1);
        // 觀察內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("softRefer=" + softRefer.get());
        // obj1創建可以回收的條件
        obj1 = null;
        // gc回收
        System.gc();
        // 再次觀察內存地址
        System.out.println("obj1=" + obj1);
        System.out.println("softRefer=" + softRefer.get());
    }

}

View Code

 擴展知識-WeakHashMap

查看API介紹:

 測試代碼:

package com.wfd360.demo03GC.referDemo;

import java.util.HashMap;
import java.util.WeakHashMap;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 5:10
 * @description <p>
 * 弱引用引用之:WeakHashMap
 * 以弱鍵 實現的基於哈希表的 Map。在 WeakHashMap 中,當某個鍵不再正常使用時,將自動移除其條目。
 * 更精確地說,對於一個給定的鍵,其映射的存在並不阻止垃圾回收器對該鍵的丟棄,這就使該鍵成為可終止的,被終止,
 * 然後被回收。丟棄某個鍵時,其條目從映射中有效地移除,因此,該類的行為與其他的 Map 實現有所不同。
 * </p>
 */
public class WeakReferMap {
    /**
     * 測試 HashMap 與 WeakHashMap 區別
     * 測試邏輯:
     * 1.創建不同的map
     * 2.創建key  value值
     * 3.放入各自的map,並打印結果
     * 4.將key設置為null,並打印結果
     * 5.手動GC,並打印結果
     *
     * @param args
     */
    public static void main(String[] args) {
        hashMapMethod();
        System.out.println("--------華麗的分割線--------");
        weakHashMapMethod();
    }

    /**
     * HashMap測試(強引用)
     */
    private static void hashMapMethod() {
        HashMap<String, String> map = new HashMap<>();
        String key = "key1";
        String value = "HashMap-value";

        map.put(key, value);
        System.out.println(map);

        key = null;
        System.out.println(map);

        System.gc();
        System.out.println(map);
    }

    /**
     * 若引用(WeakHashMap測試)
     */
    private static void weakHashMapMethod() {
        WeakHashMap<String, String> map = new WeakHashMap<>();
        // 注意這裏的new一個字符串與直接寫key="key2"對測試結果是有區別的,詳細原因可以看之前講的內存分配
        String key = new String("key2");
        String value = "WeakHashMap-value";

        map.put(key, value);
        System.out.println(map);

        key = null;
        System.out.println(map);

        System.gc();
        System.out.println(map);

    }

}

View Code

測試結果:

 從測試結果可以看出:弱引用的map數據已經被回收。

 擴展知識-ReferenceQueue引用隊列

 代碼:

package com.wfd360.demo03GC.referDemo;

import java.lang.ref.ReferenceQueue;
import java.lang.ref.WeakReference;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 7:23
 * @description
 */
public class QueueRefer {
    /**
     * 測試弱引用回收前,把數據放入隊列中
     *
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        Object obj1 = new Object();
        ReferenceQueue<Object> referenceQueue = new ReferenceQueue();
        // 當GC釋放對象內存的時候,會將引用加入到引用隊列
        WeakReference<Object> weakReference = new WeakReference<>(obj1, referenceQueue);

        System.out.println(obj1);
        System.out.println(weakReference.get());
        System.out.println(referenceQueue.poll());

        System.out.println("--------華麗的分割線--------");
        obj1 = null;
        System.gc();
        Thread.sleep(500);

        System.out.println(obj1);
        System.out.println(weakReference.get());
        System.out.println(referenceQueue.poll());
    }

}

View Code

採用弱引用的方式測試結果:

從測試結果可以看出,需要回收的對象已經進入隊列。

 採用軟引用的方式測試結果:

 從測試結果可以看出,軟引用,沒有到達回收的條件,並沒有進行回收,也不會進入隊列;

3.4.什麼是虛引用

1.虛引用需要java.lang.ref.PhantomReference類來實現。

2.與其他幾種引用都不同,虛引用並不會決定對象的生命周期。如果一個對象僅持有

虛引用,那麼它就和沒有任何引用一樣,在任何時候都可能被垃圾回收器回收,它不能單獨使用也不能通過它訪

問對象,虛引用必須和引用隊列(ReferenceQueue)聯合使用。

3.虛引用的主要作用是跟蹤對象被垃圾回收的狀態。僅僅是提供了一種確保對象被finalize以後,做某些事情的

機制。PhantomReference的get方法總是返回null,因此無法訪問對應的引用對象。其意義在於說明一個對象己

經進入俑finalization階段,可以被gc回收,用來實現比finalization機制更靈活的回收操作。

4.設置虛引用關聯的唯一目的,就是在這個對象被收集器回收的時候收到一個系統通知或者後續添加

進一步的處理。Java技術允許使用finalize()方法在垃圾收集器將對象從內存中清除出去之前做必要的清理工作。

代碼:

package com.wfd360.demo03GC.referDemo;

import java.lang.ref.PhantomReference;
import java.lang.ref.ReferenceQueue;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 7:44
 * @description
 */
public class PhantomRefer {
    /**
     * 虛引用測試
     * @param args
     * @throws InterruptedException
     */
    public static void main(String[] args) throws InterruptedException {
        Object obj1 = new Object();
        ReferenceQueue<Object> referenceQueue = new ReferenceQueue();
        PhantomReference<Object> phantomReference = new PhantomReference<>(obj1,referenceQueue);

        System.out.println(obj1);
        System.out.println(phantomReference.get());
        System.out.println(referenceQueue.poll());

        System.out.println("--------華麗的分割線--------");

        obj1 = null;
        System.gc();
        Thread.sleep(500);

        System.out.println(obj1);
        System.out.println(phantomReference.get());
        System.out.println(referenceQueue.poll());
    }

}

View Code

測試結果:

4.重要總結

對象是否存活判斷流程:

1.可達性分析,看是否有GC Roots的引用鏈,如果沒有將做第一次標記;

2.檢查是否需要執行finalize()方法,

如果沒必要(之前執行過了),直接回收內存;

如果要執行finalize()方法,這個時候對象如果再次建立引用鏈(唯一自救機會),對象不會被回收,否則直接回收;

總結:

1.對象回收滿足兩個條件:

a.沒有引用鏈。

b.回收前會執行finalize()方法,如果執行finalize(),沒有再次建立連接(如果重新與引用鏈上的任意對象建立連接,例如給對象賦值,該對象都不會被回收)

2.在gc回收前會執行finalize()方法,只執行一次,並且是異步執行不保證執行成功,線程優先級低

代碼演示:

package com.wfd360.demo03GC.referDemo;

/**
 * @author 姿勢帝-博客園
 * @address https://www.cnblogs.com/newAndHui/
 * @WeChat 851298348
 * @create 06/20 8:34
 * @description
 */
public class FinalizeGC {
    public static FinalizeGC obj1 = null;

    /**
     * 重寫finalize方法
     * @throws Throwable
     */
    @Override
    protected void finalize() throws Throwable {
        super.finalize();
        System.out.println("執行finalize方法");
        // 自救,在回收時建立引用鏈
        FinalizeGC.obj1 = this;
    }

    public static void main(String[] args) throws InterruptedException {
        obj1  = new FinalizeGC();

        obj1 = null;
        System.gc();
        Thread.sleep(600);
        System.out.println("第一次自救成功:"+obj1);

        obj1 = null;
        System.gc();
        Thread.sleep(600);
        System.out.println("第二次自救失敗,不會再次執行finalize方法:"+obj1);
    }
}

View Code

測試結果:

 完美!

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

豐田7款新能源車型亮相廣州車展

近日,將在豐田廣州車展的5.1館的約1500平米的展臺上共展出概念車以及國產、進口車型共計46輛,其中豐田的混合動力車型將成為本次車展上的重點,同台亮相的有12款為混合動力車型(HEV)、外插充電式混合動力車型(PHEV)以及型(EV),與此同時還包括了1款預計2013年進入中國市場的亞洲首發車和中國首發的新款雷克薩斯LS600hL混動加長版車型。

雲動雙擎

●混合動力概念車

“雲動雙擎”概念車作為豐田“雲動計畫”中所包涵的開發國產混合動力總成這一重要內容的國產混合動力的象徵而誕生,量產車將於2015年左右推出。長軸距延展出的流暢曲線,造就了獨具魅力的整體造型,更突顯了高級的質感。搭載豐田最先進,也是世界最高水準的混合動力系統,同時集高水準的行駛性能以及超凡品質於一身,既實現了“環保駕駛”,又打造了無限的駕乘樂趣。

TOYOTA DEAR“親”

●小型概念車

豐田的全新小型概念車—TOYOTA Dear ~親~,讓小型車也能迸發激情。TOYOTA Dear ~親~是為了贏得更多中國用戶而設計研發的小型概念車。這款概念車計畫在2013年投放中國市場,使豐田在中國的全線車型更加充實,“TOYOTA Dear ~親~”也將成為豐田推進全球戰略的核心車型。考究的外形,大膽而又動感的線條,加以寬敞的車內空間,完全打破了對小型車的傳統印象。車內配備的光感測器等先進技術更增添了行車的樂趣,讓人們對豐田的小型車充滿期待。

PRIUS PLUG-IN HYBRID Concept

●外插充電式混合動力概念車

PRIUS PLUG-IN HYBRID Concept是以鋰離子電池作為驅動電池,以第3代PRIUS普銳斯為原型,可使用家用電源進行外部充電的外插充電式混合動力車。

該車可以選擇純電動模式或混合動力模式行駛,能夠更加充分地使用電能而且不受電池剩餘量和充電設施完善情況的限制,通過減少不可再生資源消耗和二氧化碳排放來防止大氣污染。它的目標是每公升汽油可行駛55公里以上*(二氧化碳排放量42g/km以下),並在充滿電的情況下作為純電動車的行駛距離為20km以上。充電時,該車在100V電源下約180分鐘,200V電源下約100分鐘即可充滿。

2012年,豐田與中國汽車技術研究中心共同在天津開展的實證行駛實驗圓滿結束,預計2012年內提前試銷。

NS4

●外插充電式混合動力概念車

豐田最新一代外插充電式混合動力概念車,兼備高燃油經濟性以及澎湃動力,採用先進的安全技術和“人、車與社會緊密相連”技術,全面展示了豐田在安全與新能源領域的技術成果。

前臉設計獨特,展示淩厲中的魅惑風情,低重心造型凸顯感性魅力,達到令人驚豔的設計效果。配備革新性的HMI(Human Machine Interface,人機交互系統及雙顯示幕),實現輕鬆操控。

配備新一代PCS預碰撞安全系統和行人防撞預警系統等先進技術,大幅提高行車安全性;配有3台後攝像頭,確保後方視野開闊,減少視線移動。

FT-EV III

●電動概念車

豐田FT-EV系列的第三代概念車,適於短途行駛的“超小型輕量設計”電動概念車。

電動車將有望替代化石燃料的電能作為動力源,在行駛中不會排出二氧化碳,未來會成為非常重要的環保汽車。動力系統配備鋰電池,預計一次充電可以行駛105公里,非常適合短途行駛。

車身長度雖然只有3.1米,寬也不到1.7米,卻實現了可供4人乘坐的寬敞空間。

RAV4 EV

●電動概念車

1998年,中國國家科學技術部在廣東省汕頭市南澳島實施電動車行駛實驗,豐田為其提供了RAV4 EV作為行駛實驗車,該車搭載的鎳氫電池可實現達200km的續航距離。

豐田早在40年前就開始潛心研發能夠普及的新能源技術,混合動力技術是目前全球最成熟最先進的環保技術。2012年1月~10月混合動力車全球累計銷量為102.8萬輛,年度銷量首次突破100萬輛大關,今年在豐田銷售的車輛中,混合動力車已經占到其全球銷量的14%。與此同時,豐田混合動力車自1997年上市以來,實現全球累計銷量達到460.3萬輛。截至2012年10月末,在全球範圍內混合動力車與車輛尺寸、及動力性能相同的汽油車相比,累計節約石油約110億升,同時減少約3000萬噸二氧化碳的排放。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

代碼和設計是如何一步步腐化的

經歷了幾個從商業角度來看或成功或失敗的項目,都會發現代碼、設計都會慢慢地、在不經意間腐化。而且有一個項目開始的時候,架構是經過精心設計的,也有較為嚴格的代碼規範,並且通過靜態代碼檢查來盡量保證代碼的質量,連code review都有一個可供參考的checklist。但半年一年之後,還是會發現,很多代碼都已經臃腫走樣,到處都是複製粘貼,動輒好幾千行代碼的模塊,能 work、但不 right的代碼。

getting it work is easy
getting it right is hard

不禁想問問代碼和設計是如何一步步腐化的?

本文地址:https://www.cnblogs.com/xybaby/p/13173047.html

代碼如何開始腐爛

其實大家都聽說過 clean code,但不一定真正意識到其重要性,且知道並不等同於做到,而時間更是一把殺豬刀,讓程序員禿了,讓代碼爛了。

一個新項目開始的時候,大家都是滿懷壯志,期待靈活可復用的架構,期待成功的產品。與此同時,敏捷開發告訴我們不要過度設計,當然,本身也是很難預料到以後需求變化的方向,於是應該等到第一次變化的時候才去考慮如何重構以應對這一類型的變化。但問題很可能就會出現在這裏。

也就是說,也許哪一天,當我們需要加一個新功能的時候,會發現原來的設計和代碼不是很方便增加這個新功能。當然,我們不應該過多苛責之前的設計,因為以前沒有預料到這個新功能,也就沒有在這個地方引入抽象。這個時候有兩種解決辦法:第一種是重構術,就是加功能之前先了解、重構已有的代碼,比如調整一下類的基礎體系、抽象出基類、或者引入一個間接層以隔離變化。另一種則是修補術,在現有的函數中加一個 if-else(或者 switch case)、在現有的類中加幾個特殊字段。這兩種方法都能解決問題,修補術治標,重構術治本,但顯然,治標來得更快,治本對程序員的要求更高。

什麼時候程序員會選擇修補術而不是重構術呢?

也許這個程序員看過 clean code、refactor,精通設計模式和面向對象,也非常希望維護一份漂亮的代碼。但我們知道,重構是需要時間的,而且還可能引入bug。也許重構耗費的時間就超過了用修補術 workaround 的時間,就短期來說,修補術的性價比是更高的。那麼長遠來說呢,也許重構術的性價比更高?可是只顧眼前、及時行樂是人的本能,走捷徑、偷懶是無時不存在的誘惑。當然,也許有追求的程序員會抵制這種誘惑,但是社會心理學告訴我們,在壓力、干擾面前我們很難理智思考,自控力也會失效。時間、進度壓力就是垂懸在程序員頭上的達摩克利斯之劍,這壓力可能讓人失眠、讓人頭禿,寫點垃圾代碼似乎也無可厚非。

況且,重構還可能引入bug,重構的前提是要有完備的測試機制,單元測試、功能測試、集成測試一個都不能少。可是,理想很豐滿,現實很骨感,單元測試覆蓋率往往不足,而且還可能依靠手動回歸測試。把代碼重構好了可能壓根沒人知道,沒人來感謝你、給你點個贊,但萬一重構出了bug呢,大家都會收到事故報告,說不定還會影響KPI?不求有功但求無過,Leader、經理是否認可重構的價值,也很大程度影響組員對於重構的积極性。

當然,增加新功能的也許是一個新手,新手加入團隊后,一般就是從維護某個模塊,實現一些小需求入手。新手有可能水平本身就不行,而且業務邏輯和代碼都是陌生的,如果缺乏完善的文檔以及足夠的掌握,新手是萬萬不敢重構的,修補術是最自然的選擇,複製、粘貼、稍微修改一下、build、run,成功啦!又實現了一個需求!你知道,新人是急於證明自己的,快速的實現一個又一個需求是證明自己的最佳辦法。

你有可能說,新人不是應該有個導師嗎,導師得review新人的代碼啊。首先,導師得懂這一塊業務;其次,導師得願意花時間指導新人。指導新人是否影響導師的KPI呢?帶好了是否有獎,出問題了是否有懲?如果全憑導師自律,這個不確定性就太大了。

上面提到的是新人,其實老手也可能寫出“德不配位”的代碼,比如一個需求,可能涉及到多個模塊,有的模塊是這個老手負責的,有的則不是。理想的情況下,各個模塊提供好接口供老手調用即可,但某個模塊的負責人很忙,沒有時間,這個時候老手就會直接去修改相應模塊。可是,可能由於老手特有的自尊、或者面子,老手往往不願意去請教對應模塊的負責人,而是按照自己的經驗魔改出一段可以工作,但既不優雅、也不高效的代碼。

代碼如何加速腐爛

所以說,由於進度壓力、經驗、態度等各種各樣的原因,代碼中慢慢就會開始出現腐朽的問題。可怕的是,垃圾的代碼給出了錯誤的示範,這種示範對於新手或者對於這個模塊不熟悉的同事來說都很強烈,也使得垃圾的代碼、倍增的維護成本、潛在的bug被到處複製,美其名曰“借鑒”。破窗效應,讓後來人寫出垃圾代碼的時候毫無心理負擔,“以前就是這個樣子的”,以前這裡有個變量叫temp,我只是加了個變量叫temp1;以前這裏就有switch case,我只不過加了一個case;以前的代碼就很難讀懂了,於是我copy的一份實現自己的邏輯。

況且,到項目後期,可能不再那麼掙錢了,可能最初寫代碼、制定規範的人已經不再了,誰還會來關心這代碼質量呢?

悲觀的認為,代碼的腐化是必要,只是時間快慢問題。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

廣汽首款混合動力車型傳祺亮相廣州車展

在此次廣州車展上,廣汽發佈了該品牌首款型傳祺混動版。

新車的外觀與普通版車型基本保持一致,只是車頭和車尾的LOGO採用了藍色底色以表明這款車與普通版車型的不同,另外前進氣格柵加入了更多鍍鉻裝飾條。

該車的混合動力技術為廣汽自主研發,新車已經進入國家的公務車採購目錄,預計公車採購將成為它的主要銷售份額。動力方面,混動版傳祺在驅動方式上將有兩驅和四驅可選,對應的百公里綜合油耗分別為7.5L/km和6.6L/km。汽油機方面,它搭載的1.8L發動機最大功率可達106kW(144PS),電動機方面的資訊還尚不明確。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

福汽集團投資8000萬元開展A級純電動轎車研發專案

福汽集團與榕籍院士郭孔輝共同建立福汽集團汽車工程研究院院士工作站,開展“A級純電動轎車研發”項目合作。該專案總投資8000萬元,預計可實現產值9億元。目前,該專案已被列為福建省“百項千億”專案及省科技廳2013年“863”儲備專案。

工作站將以福汽集團汽車工程研究院為依託,充分發揮以郭孔輝院士領銜的專家們多學科、多專業的學術優勢和豐富的從業經驗,進行多層次、寬領域的合作,為福汽集團在產業政策的消化、利用以及企業發展戰略和發展規劃的研究提供諮詢和服務,並為福汽集團、發動機、微車產品等領域的自主研發、技術創新提供指導和幫助。

 “A級純電動轎車研發”項目合作將在量產化純電動轎車的底盤換電系統、資訊交互系統、動力系統等核心技術方面展開系統研發。專案立足於福汽集團的整車開發優勢,同時聯合了吉林大學、同濟大學、東南汽車、新鄉新能公司等單位,組建聯合專案團隊共同開發。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

川汽野馬純電動車曝光 即將量產上市

日前,川汽野馬的圖片被正式公佈,據悉,該車已被小規模投產,將首先作為成都市龍泉驛區的計程車使用,隨後面向個人銷售。

川汽野馬電動車與此前在成都車展發佈的川汽野馬F16十分相似,模仿09款奧迪A4 Avant的設計令人印象深刻,只是車身顏色變成了醒目的銀色和藍色設計。據悉,這款車型的長/寬/高尺寸依次為4510mm/1760mm/1615mm。

內飾方面,這款車型與現有的野馬F12內飾相同,採用銀色和深灰色的搭配設計,中控臺上出現了手動空調、收音機、點煙器等配置。由於是純電動車型,該車變速器只有P(停車)、R(倒擋)、N(空擋)、D(前進擋))四個擋位。

官方稱,川汽野馬電動車配備的是中航鋰電生產的鉛酸鐵鋰電池,電動機峰值功率可達80馬力,最大續航能力或達260km。

在中國,採用旅行車設計的電動計程車十分少見,可以說川汽野馬這樣的做法能為成都市龍泉驛區的打車一族增添一份新鮮感。不過,如果這款車面向個人用戶銷售的話,消費者除了會考慮車型品質、新能源配套設施建設情況外,相信,還將對其模仿豪華品牌車型的外觀糾結一番。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

首屆中國高新汽車國際峰會匯聚國內外行業領軍人物擔任演講嘉賓

 

首屆中國高新汽車國際峰會將於2012年12月11至13日與Automechanika Shanghai — 上海國際汽車零配件、維修檢測診斷設備及服務用品展覽會同期毗鄰舉行,邀請到來自德國、日本、馬來西亞、瑞典、台灣、英國及美國等地的國際級演講嘉賓匯聚一堂,交流理念。   本次峰會由中國國家發展和改革委員會國際合作中心與法蘭克福展覽(上海)有限公司聯合主辦,匯聚高端業界智囊,分享新技術與管理和產品創新戰略。會議將著重探討如何與汽車行業整個產業鏈上的原始設備製造商、供應商和服務商一起促進未來汽車產業發展,使整個行業更具可持續性,更有經濟效益。峰會將雲集逾百位行業高層決策者、政府部門和政府官員,以及來自權威學術研究機構的代表蒞臨出席。   法蘭克福展覽(香港)有限公司高級總經理曹建生先生表示:「我們很榮幸得到各位國內外演講嘉賓的大力支持。這些汽車行業的領軍人物或技術專家將與大家分享有關中國汽車業發展的各領域經驗及觀點,其中有多位嘉賓都是第一次在中國演講。」   中國國家發展和改革委員會國際合作中心的代表補充說:「本次峰會將討論對中國汽車行業實現可持續發展至關重要的一系列問題,並探討具有前景的解決方案,其中包括為未來汽車行業更智能、更清潔、更節能而制定的主要政策和工作重點,採用新業務模式和更好的協調的生態系統,以及在混合動力汽車、電動交通以及個人交通工具等領域的產品創新。」     國家主要部委、市政府部門、業內領先公司以及知名研究機構代表將在會上就中國在「十二五」期間發展汽車工業方面的進程及工作重點發表演講。參加本次峰會的相關領導包括有:  

  • 中國國家發展和改革委員會代表

主題演講:貫徹落實中國2011-2015十二五規劃新節能汽車產業發展的相關政策、優先重點及進程

  • 中國國家科技部原高新司副司長陳家昌先生

題目:中國節能及新能源汽車產業發展規劃的演變

  • 國務院發展研究中心副主任侯雲春先生

題目:多措並舉積極發展電動汽車

  • 中國國家科技部國家863計劃節能與新能源汽車重大項目辦公室副主任甄子建博士

題目:促進中國汽車行業的科技進步,提升行業競爭力並促進增長

  • 中國汽車流通協協會名譽會長徐秉金先生

題目:中國汽車市場的持續發展: 提升商品及服務水平以達致顧客期望

  • 上海市經濟和信息化委員會 – 新能源汽車推進辦公室副處長劉建華先生

題目:支持上海新能源汽車行業發展的政策、規劃與首要任務   主辦單位同樣邀請到來自海外多國的汽車行業領軍人物出席本次峰會,其中業界著名的演講嘉賓包括有:  

  • 瑞典ElBil2020項目副主席Allan Larsson先生

題目:瑞典ElBil項目將在2020年之前成為電動汽車應用的世界領導者

  • 德國電動車協會(BEM EV)行政總裁及市場部主管Christian Heep先生

題目:即將成為全球電力交通市場競爭者:歐洲在全球變革中的願景與事實

  • 美國高效動力傳動系統公司首席技術官,被譽為「插電式混合動力車之父」Andrew Frank博士

題目:電動出租車系統:適合中國城市,實用低價,延長行程

  • 馬來西亞汽車研究院(MAI)首席執行官 M. Madani Sahari 

題目:將馬來西亞轉化為節能汽車(EEV)國際樞紐

  • 英國GSMA互聯生活計劃mAutomotive項目總裁Francesca Forestieri女士

題目:加快內建汽車設備與移動連通性方案的開發與部署

  • 英國高通歐洲公司業務發展和市場營銷部副總裁,HaloIPT無線電源技術開創者Anthony Thomson博士

題目:無線充電——電氣化未來   如欲瞭解更多有關演講嘉賓及會議議程信息,敬請訪問官方網站 。

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

三文搞懂學會Docker容器技術(中)

接着上面一篇:三文搞懂學會Docker容器技術(上)

6,Docker容器

  6.1 創建並啟動容器

docker run [OPTIONS] IMAGE [COMMAND] [ARG…]

–name=”容器新名字”:為容器指定一個名稱;

-i:以交互模式運行容器,通常與-t或者-d同時使用;

-t:為容器重新分配一個偽輸入終端,通常與-i同時使用;

-d: 後台運行容器,並返回容器ID;

-P: 隨機端口映射,容器內部端口隨機映射到主機的端口

-p: 指定端口映射,格式為:主機(宿主)端口:容器端口

 啟動普通容器: docker run –name 別名 鏡像ID  

 啟動交互式容器:  docker run -it –name 別名 鏡像ID   來運行一個容器,取別名,交互模式運行,以及分配一個偽終端

 守護式方式創建並啟動容器

 docker run -di –name 別名 鏡像ID 

執行完命令后,終端依然再宿主機上;

 

啟動容器,並執行/bin/bash命令;

 docker run -it –name 別名 鏡像ID  /bin/bash命令

端口映射;

docker run -it -p 8888:8080 tomcat

docker run -it -P tomcat

  6.2 列出容器

docker ps [OPTIONS]

OPTIONS說明:

-a :显示所有的容器,包括未運行的。

-f :根據條件過濾显示的內容。

–format :指定返回值的模板文件。

-l :显示最近創建的容器。

-n :列出最近創建的n個容器。

–no-trunc :不截斷輸出。

-q :靜默模式,只显示容器編號。

-s :显示總的文件大小。

docker ps 查看正在運行的容器

docker ps -a 查看所有容器

docker ps -n 2  显示最近創建的2個容器

docker ps -f status=exited 查看停止的容器

  6.3 退出容器

exit 容器停止退出

ctrl+P+Q 容器不停止退出

  6.4 進入容器

docker attach 容器ID or 容器名 

  6.5 啟動容器

docker start 容器ID or 容器名

  6.6 重啟容器

docker restart 容器ID or 容器名

  6.7 停止容器

docker stop 容器ID or 容器名

暴力刪除,直接殺掉進程 (不推薦)

docker kill 容器ID or 容器名

  6.8 刪除容器

docker rm 容器ID  

如果刪除正在運行的容器,會報錯,我們假如需要刪除的話,需要強制刪除;

強制刪除docker rm -f 容器ID

刪除多個容器 

docker rm -f 容器ID1  容器ID2 中間空格隔開

刪除所有容器

docker rm -f $(docker ps -qa)

  6.9 宿主機和容器之間文件拷貝

宿主機文件 copy to 容器內

docker cp 需要拷貝的文件或者目錄   容器名稱:容器目錄

容器內 copy to 宿主機

docker cp 容器名稱:容器目錄    宿主機目錄

  6.10 查看容器日誌

$ docker logs [OPTIONS] CONTAINER

  Options:

        –details        显示更多的信息

    -f, –follow         跟蹤實時日誌

        –since string   显示自某個timestamp之後的日誌,或相對時間,如42m(即42分鐘)

        –tail string    從日誌末尾显示多少行日誌, 默認是all

    -t, –timestamps     显示時間戳

        –until string   显示自某個timestamp之前的日誌,或相對時間,如42m(即42分鐘)

(以上了解)

 

鋒哥推薦,簡單粗糙方式,直接去docker容器文件里找;

具體未知:/var/lib/docker/containers/

每個容器對應一堆文件,然後有個log結尾的,就是日誌文件;

我們打開;

很直觀 假如時間長了 日誌文件很大,直接自己操刀處理即可;

  6.11 查看容器進程

docker top 容器ID

 

  6.12 進入容器執行命令

docker exec -it 容器名稱 或者 容器ID 執行命令

直接操作容器,執行完 回到 宿主主機終端;

 我們一般用於 啟動容器里的應用 比如 tomcat nginx redis elasticsearch等等

  6.13 提交運行時容器成為鏡像

docker commit

docker commit -a=’作者’ -m=’備註’ 運行時容器ID 新鏡像名稱

 

  6.14 推送鏡像到hub服務器

我們可以通過docker push命令 把自己本地定製的鏡像推送到Hub服務器,方便全球開發者使用,包括自己;

 

上一講,我們定製了一個鏡像 java1234/tomcat7 tag是1.1

我們把這個鏡像發布到hub服務器;

 

步驟一:

https://hub.docker.com/ 註冊下 得到docker id和密碼

 

步驟二:

我們用docker login登陸hub服務器

 

步驟三:

docker push推送

docker push java1234/tomcat7:1.1

 

推送成功:

登陸 https://hub.docker.com/   點擊 Repositories 菜單

 

已經显示這個鏡像;

點擊:

我們加簡介和描述信息;

點Tags:

我們可以刪除掉;

 

  6.15 推送鏡像到阿里雲

很多時候,中小公司為了方便搭建私有倉庫方便,直接使用穩定的阿里雲鏡像倉庫,方便公司內部業務系統直接拉取鏡像;

步驟一:

進入:https://cr.console.aliyun.com  阿里雲鏡像控制台  需要註冊  用戶名就是你的淘寶或者支付寶 賬號名稱 ,鏡像控制台密碼單獨設置;

步驟二:

進入控制台,我們先創建命名空間,再創建鏡像;

然後我們可以根據阿里雲官方提示說明來進行鏡像遠程登錄,提交,以及拉取操作,簡單易用;

  6.16 查看容器元信息

docker inspect 容器ID

 

 

——————————————————————————————————————————

作者: java1234_小鋒

出處:https://www.cnblogs.com/java688/p/13174646.html

版權:本站使用「CC BY 4.0」創作共享協議,轉載請在文章明顯位置註明作者及出處。

——————————————————————————————————————————

 

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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

上周熱點回顧(6.15-6.21)

熱點隨筆:

· 因為知道了30+款在線工具,我的工作效率提升500%! (HollisChuang)
· 什麼?一個核同時執行兩個線程? (軒轅之風)
· .Net微服務實戰之DevOps篇 (陳珙)
· .Net 對於PDF生成以及各種轉換的操作 (沉_默)
· 龍芯團隊完成CoreCLR MIPS64移植,已在github開源 (張善友)
· foreach 集合又拋經典異常了,這次一定要刨根問底 (一線碼農)
· 對 JsonConvert 的認識太膚淺了,終於還是遇到了問題 (一線碼農)
· 深入理解 EF Core:EF Core 讀取數據時發生了什麼? (LiamWang)
· 養生吧,程序員! (沉默王二)
· cute-cnblogs 自定義博客園樣式美化二期來啦~ (麋鹿魯喲)
· .Net Core基礎的健康檢查 (她微笑的臉)
· 代碼之間為什麼要加空格? (沉默王二)

熱點新聞:

· 字節跳動程序員期權價值過億 28歲辭職享受人生引熱議 當事人回應
· 阿里P8員工1.6w招私人助理,網友群嘲:你咋不上天呢?
· 我,掉進20萬創業補貼陷阱:最後被告上法庭
· 獨家專訪28歲退休程序員郭宇:1600人加好友,問我“掙了多少錢”
· 北斗導航系統最後一顆衛星就緒:後天發射!
· 有碼變高清!AI一秒還原馬賽克,杜克大學出品
· “零收入”依然淡定,一家基礎軟件公司的冒險與底氣
· 重磅!突破美國封鎖,國產操作系統“天賜”即將誕生,火爆知乎
· 充電器1萬一隻53萬!波士頓動力網紅機器狗開售
· AMD將改寫10年來DIY市場歷史:份額逼近30% 大廠全齊了
· 兩千元的「反 5G 量子設備」,到底是怎樣的智商稅?
· 自主研發 華米發布全球最強大可穿戴人體傳感器

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

【其他文章推薦】

※為什麼 USB CONNECTOR 是電子產業重要的元件?

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

※台北網頁設計公司全省服務真心推薦

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

新北清潔公司,居家、辦公、裝潢細清專業服務

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