CIEVE 2013 中國國際新能源汽車產業博覽會

展會名稱:

CIEVE 2013 中國國際新能源汽車產業博覽會

展會日期:

2013年9月5-7日

展會地點:

北京.中國國際展覽中心新館

主辦單位:

商務部中國國際經濟合作學會、全國節能與新能源汽車產業聯盟

承辦單位:

上海勵德展覽展示服務有限公司

展會簡介:

中國已經成為世界第一大汽車生產國和消費國,2011年汽車產銷量超過1800萬輛,預計到2030年中國汽車中乘用車保有量將會達到2.5億輛。然而,隨著節能減排,降低能源依賴逐漸成為國際汽車工業和環保工業的發展趨勢,加之油價不斷上漲給汽車工業帶來的壓力,中國政府近幾年制定了相應的節能與新能源汽車發展戰略。

新能源汽車作為發展可替代能源,建設可持續發展低碳社會的重要一環,越來越受到世界各國的高度重視,我國政府也已正式將新能源汽車列入七大戰略性產業之一。

隨著近日(2012.7.9)國務院正式公佈《節能與新能源汽車產業發展規劃(2012—2020年)》,近年來圍繞新能源汽車的一系列爭議也一錘定音。在技術路線之爭上,新能源汽車規劃敲定以純電動汽車和插電式混合動力汽車作為戰略方向,並兼顧普及混合動力汽車。在產業化目標上,規劃要求“到2015年,純電動汽車和插電式混合動力汽車累計產銷量力爭達到50萬輛;到2020年,純電動汽車和插電式混合動力汽車生產能力達200萬輛、累計產銷量超過500萬輛”。相關行業調研機構對產業規模進行了測算,到2015年新能源汽車產業將孕育千億元的市場,未來10年將是我國電動汽車產業發展的關鍵時期。

展品範圍:

→整車產品:

純電動車:轎車、大巴、公車、各型旅行車、低速微型車、各種純電動特種車(環衛車、電力車、郵政車、小型客貨車、高爾夫車、房車、叉車、搬運車、牽引車、旅遊觀光車、醫療車、警用車、摩托車、三輪車等);混合動力車:轎車、大巴、公車、旅行車等,增程式電動車,插電式混合動力車;其他新能源車:燃料電池車、節能內燃機汽車、氫能車、生物燃料車、太陽能車、天然氣車等各種新能源、清潔燃料及低排放、環保節能型車;

→三大部件:電池、電機、電控,低排放節能型發動機、混合動力發動機及清潔燃料發動機;動力電池,鋰電池、燃料電池、鉛酸蓄電池,電池管理系統BMS,正負極材料,隔膜,電解液,超級電容器;整車匯流排與控制系統;非同步電機、開關磁阻電機和永磁電機(包括無刷直流電機和永磁同步電機),電控系統,動力總成,整車控制系統等;

→充換電裝置及設施;儲能裝置;能源管理系統;電力電容器、飛輪、逆變器、電熱泵、電動助力轉向、電動空調、功率模組等;相關材料、工藝、技術;相關檢測、監控、試驗、安全防護裝備;維修、製造設備和工具;充電站專案規劃及成果展示;充電站充電機、充電樁、充電連接器、配電設備、變壓器、電纜等相關基礎設施;充換電池及電池管理系統;電能監視系統;供電解決方案等

→相關附件:新能源車的內外裝飾及座椅,輪轂輪胎,儀錶儀盤,車燈,線束,車載電子,新能源汽車的整車及系統控制設計,裝備製造等;

→其他:檢測認證機構,行業協會,產品研發,貿易服務,經銷商,管理培訓及其他相關產品或服務等。

參展費用:

標準展位:9平米/個,(配置包括:9平米場地、展位內地毯、三面展板、一張洽談桌、兩把椅子、兩個射燈、公司楣板、一個220V電源插座)

內資企業:RMB 8800元/個;合資企業:10800元/個;

外資企業:USD 3200元/個

光   地(36平方米起租,無任何配置):

內資企業:RMB 880/平方米;合資企業:1000元/平米;

外資企業:USD 300元/平方米

1、廣告宣傳價格

會刊封面:25000元        會刊封二:15000元  

會刊封底:20000元        會刊封三:10000元         

會刊扉頁:10000元        門票廣告:10000元/5千個

彩頁整版:5000元         參觀證廣告:20000元/5千個

2、展會現場廣告項目及價格(詳情請來電索取)

3、各項展會贊助方案及報價(詳情請來電索取)

聯繫方式:

CIEVE 2013北京新能源汽車產業博覽會組委會

聯繫人:高    晟            手  機:18049755269    

電  話:021-54289707        傳  真:  021-54287017

E-mail:cieve88@163.com    網  站:www.cieve.org   

地  址:上海市徐匯區銀都路298號九潤商務大廈210室(200230)

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

【其他文章推薦】

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

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

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

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

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

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

QT槽函數獲取信號發送對象

Qt 在槽函數中獲取信號發送對象

Qt中提供了一個函數 qobject_cast(QObject *object),可以通過這個函數判斷信號發出對象

Qt 幫助文檔的解釋:
Returns the given object cast to type T if the object is of type T (or of a subclass); otherwise returns nullptr. If object is nullptr then it will also return nullptr.
The class T must inherit (directly or indirectly) QObject and be declared with the Q_OBJECT macro.
A class is considered to inherit itself.
The qobject_cast() function behaves similarly to the standard C++ dynamic_cast(), with the advantages that it doesn’t require RTTI support and it works across dynamic library boundaries.

  • 簡單來說 就是使用這個函數會得到你轉型的的一個實例,但是這個類必須繼承自QObject 或者其子類並且聲明Q_OBJECT 這個宏
  • QT 幫助文檔中一個Example
    QObject *obj = new QTimer; 
    QTimer *timer = qobject_cast<QTimer *>(obj);
    

這裏順便記錄一下RTTI 與RAII,RAII 通常應用於對象資源管理,RTTI 可以動態判斷對象類型,但使用RTTI會增加程序運行時間,這裏簡單記錄區分一下 。

  1. RTTI : Run-time type information
    #include <iostream>
    #include <typeinfo>
    
    class Base {
    public:
        virtual ~Base() = default;
    };
    
    class Derived : public Base {};
    
    int main() {
        Base base;
        Derived derived;
        Base* ptr = &derived;
        Base& ref = derived;
        std::cout << typeid(base).name()<< std::endl;  // class Base 
        std::cout << typeid(derived).name()<< std::endl;  // class Derived
        std::cout << typeid(ptr).name()<< std::endl;  // class Base *
        std::cout << typeid(*ptr).name() << std::endl;  //class Derived           
        std::cout << typeid(ref).name() << std::endl;  //class Derived
    
    }
    
  2. RAII : Resource Acquisition Is Initialization
    代碼來源 https://en.cppreference.com/w/cpp/language/raii
    std::mutex m;
    
    void bad() 
    {
        m.lock();                    // acquire the mutex
        f();                         // if f() throws an exception, the mutex is never released
        if(!everything_ok()) return; // early return, the mutex is never released
        m.unlock();                  // if bad() reaches this statement, the mutex is released
    }
    
    void good()
    {
        std::lock_guard<std::mutex> lk(m); // RAII class: mutex acquisition is initialization
        f();                               // if f() throws an exception, the mutex is released
        if(!everything_ok()) return;       // early return, the mutex is released
    }
    

下面是QT通過qobject_cast獲取信號發送對象的一個Demo,通過Qt Desinger 繪製兩個按鈕和一個文本框,將兩個按鈕的點擊事件連接到同一個槽函數,在槽函數裏面判斷信號的發送者並作出不同的響應
主要的代碼如下:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    ~MainWindow();

public slots:
    void onButtonClicked();

private:
    Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H


#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QDebug>
MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->leftButton,&QPushButton::clicked,this,&MainWindow::onButtonClicked);
    connect(ui->rightButton,&QPushButton::clicked,this,&MainWindow::onButtonClicked);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::onButtonClicked()
{
    QPushButton *button =  qobject_cast<QPushButton *>(sender());

    ui->textLabel->setText(button->text());

    if(ui->leftButton == button)
    {
        qDebug()<<"left Button clicked";
        ui->textLabel->setStyleSheet("background-color:yellow");
        button->setStyleSheet("background-color:yellow");

    }
    else
    {
        ui->textLabel->setStyleSheet("background-color:green");
        button->setStyleSheet("background-color:green");
    }

}


完整的代碼已上傳Github

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

【其他文章推薦】

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

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

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

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

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

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

財政部研究開徵環境保護稅加快新能源汽車發展

財政部部長助理鄭曉松在“2012中國節能與低碳發展論壇”上表示,鑒於目前依然嚴峻的節能減排形勢,財政部將加快建設有利於節約資源與環境保護的財稅制度,積極推進環境稅費改革,研究開徵環境保護稅,深化資源稅改革。

鄭曉松指出,2007年以來,財政部會同相關部門出臺多項財稅政策和制度辦法,截至今年,中央財政已累計投入3380億元專項資金,帶動上萬億元社會資金投入,大大加快了節能環保、和新能源汽車等新興產業發展。

鄭曉松表示,下一步將繼續在鋼鐵、石化、有色金屬和建材等行業採取一攬子措施,推進節能改造工作。從今年起,中央財政每年還將安排10億到20億元專項資金,重點支援具備量產條件的新能源汽車產業化以及支援節能汽車技術研發和產業鏈建設。

鄭曉松還指出,財政部將積極推進環境稅費改革,研究開徵環境保護稅,深化資源稅改革,調整完善消費稅制度,穩步擴大營業稅改增值稅試點;儘快出臺排汙權有償使用和交易試點指導意見,推動試點工作在全國全面推開;完善節能量審核辦法,加強節能量協力廠商審核機構管理,研究開展節能量交易,逐步建立與國際“碳交易”制度相銜接的節能量審核交易制度等。

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

【其他文章推薦】

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

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

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

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

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

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

歐盟計畫出臺統一的電動車補貼政策

目前歐盟國家對電動汽車的補貼參差不齊,在法國購買可獲得最多至7000歐元的補貼,而在德國沒有補貼。為幫助歐洲汽車工業克服時艱,歐盟擬出臺統一的電動汽車補貼政策。

歐盟工業專員塔賈尼在其草擬的行動計畫中對這一政策目標作說明時說,歐洲汽車工業迫切需要得到支援,以應對挑戰。歐洲汽車工業間接或直接地創造1200個工作崗位,而部分廠商深陷危機。塔賈尼表示,過去數月是歐洲汽車工業經歷的艱難時刻,一些企業如法國PSA、義大利菲亞特、德國歐寶等遭遇強大的重組壓力,產品滯銷。

塔賈尼透過行動計畫承諾,將為歐洲汽車工業提供研發資金,並從歐洲社保基金中拿錢培訓員工,幫助其掌握新的技術。塔賈尼還想阻止歐洲國家單一購車補貼行為,在全歐範圍內推行統一的購買電動車補貼政策。法國的做法是,對購買法國本土生產的電動車或混合動力汽車予以最多至7000歐元的補貼,以支持本國汽車業發展和維護其競爭力。而在德國,汽車工業協會也曾多次提出要求予以補貼,但遭德政府拒絕。

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

【其他文章推薦】

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

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

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

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

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

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

通用將加快在中國研發電動車的速度 將在中國製造並銷售全電動賽歐

通用汽車公司日前表示,公司將加快其在中國開發的速度,未來將在中國製造並銷售全電動雪佛蘭賽歐Springo,同時也會銷售增程型雪佛蘭沃藍達插電式電動車。

通用技術部總監兼全球研發部副總裁Jon Lauckner稱。中國已經將電動車作為重點發展方向,電動車將在保護石油資源的努力中起到重要作用,並最終取代石油成為交通運輸工具的主要動力來源。

通用中國2011年9月在上海建立了一家高級材料實驗室,在這裡員工主要進行電池技術及輕質材料的研發。而這裡的主要任務是生產鋰電池。Lauckner稱通用希望改進鋰電池,使它們變得更小、更輕,同時比現在更便宜。經過長期的研發,通用表示他們有將汽車電池的能量密度翻倍的潛力。

本月初,通用宣佈,到2017年時電氣化汽車的年產量達到500000輛。這些電氣化汽車包括插電式電動車、純電動車、使用了通用公司的eAssist技術的輕度混合動力以及純混合動力車。

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

【其他文章推薦】

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

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

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

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

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

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

2013第九屆中原(鄭州)自行車電動車博覽會

展會時間:2011年4月8日—4月10日

展會地點:中國·鄭州·中原國際博覽中心

主辦單位:河南省發展和改革委員會 河南日報報業集團

承辦單位:大河報 社 中原國際博覽中心

新一輪的發展機遇

節能、環保、便捷的電動車越來越受消費者歡迎;電動車下鄉,帶來了更廣闊的市場空間;自行車作為「健身工具」的逐漸普及帶來新的投資機會;從「經營網絡」到「全面品牌營銷」的轉變又賦予品牌擴張新的活力;鋰電製造規模化將推動產業升級換代;電動汽車技術獲得突破,行業潛力凸顯;市場保有量的增加帶來了電動車維修和電池維護的巨大商機。誰能抓住新一輪的發展機遇,誰就能立於品牌競爭不敗之地並引領電動車發展的潮流!

最大的市場 最好的大本營

河南,全國最大的電動車市場之一。中西部九省也成為全國最具發展潛力的消費市場。河南,縱貫南北、連接東西、十省通衢、輻射八方,區位優勢無可替代。佔據中原,圖謀天下方成。河南已成為開拓中西部廣闊市場的橋頭堡、大本營。

超80%的企業重複參展率給予展會效果最好的證明和信任!

「中原電動車招商洽談會」已經成功舉辦八屆。先後有2300餘家國內外知名整車、電池、配件等相關企業參展,重複參展率達80%,吸引來自河南及周邊10餘個省份18萬人次經銷商、專業人士到會參觀洽談,現場看車、選車、購車市民則達60萬人次。為企業開拓中西部市場,提升品牌知名度提供了良好的招商宣傳捷徑,深受政府相關部門、參會企業、到會觀眾、媒體、消費者等的一致好評。

宣傳組織保證 十萬客商匯聚

1、主流媒體更多 宣傳更加強勢

①《大河報》將聯合中西部主流媒體《楚天都市報》、《新安晚報》、《華商報》、《燕趙都市報》、《江南都市報》、《山西晚報》等共同為展會宣傳造勢,邀中西部各省觀眾相聚鄭州。②《大河報》——世界日報發行百強,中國報業四強,河南報業航母,日發行量超過100萬份,高密度覆蓋河南及周邊省份近1.8億人口,是中部地區最具影響力、號召力和傳播力的主流強勢媒體。《大河報》展會報導記者小組,將投入近40個版面持續6個月對展會進展、行業動態進行全方位、多角度、大篇幅報導。

2、觀眾範圍更廣 效果更加保障

秉承「觀眾至上」的辦展理念,打造最具實效的區域展會品牌。在前八屆積累數萬專業經銷商資料庫的基礎上,專門增加40名經驗豐富、工作紮實工作人員奔赴河南、河北、山東、安徽、湖北、陝西、山西、甘肅、內蒙古等各省、市、縣,上門派送100萬份參觀門票並電話、短信多次邀請專業觀眾參觀。

3、媒體合作更廣泛 覆蓋更加全面

擬充分整合40多家全國性專業報紙雜誌、專業網站和大眾媒體的渠道優勢,刊登展會廣告,並做專題報導,全面覆蓋各相關目標客戶,廣泛深入宣傳本次活動。

4、宣傳方式更多 服務更加周到

①與協會合作,通過其組織參觀採購團。②將投放戶外廣告、高速廣告、車體廣告等。③各大行業展會實地宣傳推廣。④各地設立免費觀眾接待車直達現場。⑤豐富多彩活動吸引更多經銷商到場參觀。

■ 時間安排

布展:2011年4月6日-7日 展期:2011年4月8日-4月10日

■ 參會範圍

◆各類電動自行車、電動三輪車、燃油助力車及殘疾人專用電動車、電動滑板車等特種電動車;

◆各類自行車、摺疊車、童車等;

◆各類電動汽車、觀光車、電瓶車、休閒旅遊車、巡邏車等;

◆電動車電池及電池維護、電機、充電器、控制器、輪胎、塑殼及其它零配件和維修工具與設備,電動車用防盜鎖具、報警設備等;

■ 精彩活動

◆「消費者信得過電動車品牌」評比活動◆「金牌售後服務品牌」評比活動◆自行車特技表演◆行業最新產品、技術發佈及交流會◆中原電動車行業發展高峰論壇暨單店品牌營銷知識講座◆電動汽車、鋰電池電動車市場發展論壇◆電動車維修及電池維護市場分析及技術交流會◆電動車維修技術擂台賽

■ 收費標準

①標準展位:4800元/個。中廳特位:6800元/個。

註:標準展位每個規格9平方米(長3米×寬3米×高2.45米),包含三面圍板,中文刻字楣板,一桌兩椅,兩盞射燈,220V、5A電源插座。展架改動和增加配置費用自理。

②光地:550元/平方米,36平方米起租,不提供任何配置。

註:特裝展位場地管理費,施工電費及電箱租用所產生的費用等,需向展館方自行支付。

■ 廣告規格及價格:(詳情備索)

■ 組委會辦公室(河南省鄭州市鄭汴路96號中原國際博覽中心306室)

聯繫人:劉康生 電話:0371-66759152 66759259 66759151 傳 真:0371-66759136 / 7 / 8

中原電動車網: http://www.dhbhz.com 大 河 報 網:http://www.dahebao.cn

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

【其他文章推薦】

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

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

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

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

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

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

面試官:十問泛型,你能扛住嗎?

問題一:為什麼需要泛型?

答:

使用泛型機制編寫的代碼要比那些雜亂的使用Object變量,然後再進行強制類型轉換的代碼具有更好的安全性和可讀性,也就是說使用泛型機制編寫的代碼可以被很多不同類型的對象所重用。

問題二:從ArrayList的角度說一下為什麼要用泛型?

答:

在Java增加泛型機制之前就已經有一個ArrayList類,這個ArrayList類的泛型概念是使用繼承來實現的。

public class ArrayList {
    private Object[] elementData;
    public Object get(int i) {....}
    public void add(Object o) {....}
}

這個類存在兩個問題:

  1. 當獲取一個值的時候必須進行強制類型轉換
  2. 沒有錯誤檢查,可以向數組中添加任何類的對象
ArrayList files = new ArrayList();
files.add(new File(""));
String filename = (String)files.get(0);

對於這個調用,編譯和運行都不會出錯,但是當我們在其他地方使用get方法獲取剛剛存入的這個File對象強轉為String類型的時候就會產生一個錯誤。

泛型對於這種問題的解決方案是提供一個類型參數

ArrayList<String> files = new ArrayList<>();

這樣可以使代碼具有更好的可讀性,我們一看就知道這個數據列表中包含的是String對象。 編譯器也可以很好地利用這個信息,當我們調用get的時候,不需要再使用強制類型轉換,編譯器就知道返回值類型為String,而不是Object

String filename = files.get(0);

編譯器還知道ArrayList<String>add方法中有一個類型為String的參數。這將比使用Object類型的參數安全一些,現在編譯器可以檢查,避免插入錯誤類型的對象:

files.add(new File(""));

這樣的代碼是無法通過編譯的,出現編譯錯誤比類在運行時出現類的強制類型轉換異常要好得多

問題三:說說泛型類吧

一個泛型類就是具有一個或多個類型變量的類,對於這個類來說,我們只關注泛型,而不會為數據存儲的細節煩惱。

public class Couple<T{
   private T one;
   private T two;
}

Singer類引入了一個類型變量T,用尖括號括起來,並放在類名的後面。泛型類可以有多個類型變量:

public class Couple<TU{...}

類定義中的類型變量是指定方法的返回類型以及域和局部變量的類型

//域
private T one;
//返回類型
public T getOne() return one; }
//局部變量
public void setOne(T newValue) { one = newValue; }

使用具體的類型代替類型變量就可以實例化泛型類型:

Couple<Rapper>

泛型類可以看成是普通類的工廠,打個比方:我用泛型造了一個模型,具體填充什麼樣的材質,由使用者去做決定。

問題四: 說說泛型方法的定義和使用

答:

泛型方法可以定義在普通類中,也可以定義在泛型類中,類型變量是放在修飾符的後面返回類型的前面

我們來看一個泛型方法的實例:

class ArrayUtil {

    public static <T> getMiddle(T...a){
        return a[a.length / 2];
    }
}

當調用一個泛型方法時,在方法名前的尖括號中放入具體的類型:

String middle = ArrayUtil.<String>getMiddle("a","b","c");

在這種情況下,方法調用中可以省略<String>類型參數,編譯器會使用類型推斷來推斷出所調用的方法,也就是說可以這麼寫:

String middle = ArrayAlg.getMiddle("a","b","c");

問題五:E V T K ? 這些是什麼

答:

  • E——Element 表示元素 特性是一種枚舉
  • T——Type 類,是指Java類型
  • K—— Key 鍵
  • V——Value 值
  • ——在使用中表示不確定類型

問題六:了解過類型變量的限定嗎?

答:

一個類型變量或通配符可以有多個限定,例如:

<T extends Serializable & Cloneable>

單個類型變量的多個限定類型使用&分隔,而,用來分隔多個類型變量。

<T extends Serializable,Cloneable>

在類型變量的繼承中,可以根據需要擁有多個接口超類型,但是限定中至多有一個類。如果用一個類作為限定,它必定是限定列表中的第一個

類型變量的限定是為了限制泛型的行為,指定了只有實現了特定接口的類才可以作為類型變量去實例化一個類。

問題七:泛型與繼承你知道多少?

答:

首先,我們來看一個類和它的子類,比如 SingerRapper。但是Couple<Rapper>卻並不是Couple<Singer>的一個子類。

無論S和T有什麼聯繫,Couple<S>Couple<T>沒有什麼聯繫。

這裏需要注意泛型和Java數組之間的區別,可以將一個Rapper[]數組賦給一個類型為Singer[]的變量:

Rapper[] rappers = ...;
Singer[] singer = rappers;

然而,數組帶有特別的保護,如果試圖將一個超類存儲到一個子類數組中,虛擬機會拋出ArrayStoreException異常。

問題八:聊聊通配符吧

答:

通配符類型中,允許類型參數變化。比如,通配符類型:

Couple<? extends Singer>

表示任何泛型類型,它的類型參數是Singer的子類,如Couple<Rapper>,但不會是Couple<Dancer>

假如現在我們需要編寫一個方法去打印一些東西:

public static void printCps(Couple<Rapper> cps) {
      Rapper one = cp.getOne();
      Rapper two = cp.getTwo();
      System.out.println(one.getName() + " & " + two.getName() + " are cps.");
}

正如前面所講到的,不能將Couple<Rapper>傳遞給這個方法,這一點很受限制。解決的方案很簡單,使用通配符類型:

public static void printCps(Couple< ? extends Singer> cps) 

Couple<Rapper>Couple< ? extends Singer>的子類型。

我們接下來來考慮另外一個問題,使用通配符會通過Couple< ? extends Singer>的引用破壞Couple<Rapper>嗎?

Couple<Rapper> rapper = new Couple<>(rapper1, rapper2);
Couple<? extends Singer> singer = rapper;
player.setOne(reader);

這樣可能會引起破壞,但是當我們調用setOne的時候,如果調用的不是Singer的子類Rapper類的對象,而是其他Singer子類的對象,就會出錯。 我們來看一下Couple<? extends Singer>的方法:

extends Singer getOne();
void setOne(? extends Singer);

這樣就會看的很明顯,因為如果我們去調用setOne()方法,編譯器之可以知道是某個Singer的子類型,而不能確定具體是什麼類型,它拒絕傳遞任何特定的類型,因為 ? 不能用來匹配。 但是使用getOne就不存在這個問題,因為我們無需care它獲取到的類型是什麼,但一定是Singer的子類。

通配符限定與類型變量限定非常相似,但是通配符類型還有一個附加的能力,即可以指定一個超類型限定:

super Rapper

這個通配符限製為Rapper的所有父類,為什麼要這麼做呢?帶有超類型限定的通配符的行為與子類型限定的通配符行為完全相反,可以為方法提供參數,但是卻不能獲取具體的值,即訪問器是不安全的,而更改器方法是安全的

編譯器無法知道setOne方法的具體類型,因此調用這個方法時不能接收類型為SingerObject的參數。只能傳遞Rapper類型的對象,或者某個子類型(Reader)對象。而且,如果調用getOne,不能保證返回對象的類型。

總結一下:

帶有超類型限定的通配符可以向泛型對象寫入,帶有子類型限定的通配符可以從泛型對象讀取。

問題九:泛型在虛擬機中是什麼樣呢?

答:

  1. 虛擬機沒有泛型類型對象,所有的對象都屬於普通類。 無論何時定義一個泛型類型,都自動提供了一個相應的原始類型。原始類型的名字就是刪去類型參數后的泛型類型名。擦除類型變量,並替換成限定類型(沒有限定的變量用Object)。這樣做的目的是為了讓非泛型的Java程序在後續支持泛型的 jvm 上還可以運行(向後兼容)

  2. 當程序調用泛型方法時,如果擦除返回類型,編譯器插入強制類型轉換。

Couple<Singer> cps = ...;
Singer one = cp.getOne();

擦除cp.getOne的返回類型后將返回Object類型。編譯器自動插入Singer的強制類型轉換。也就是說,編譯器把這個方法調用編譯為兩條虛擬機指令:

對原始方法cp.getOne的調用 將返回的Object類型強制轉換為Singer類型。

  1. 當存取一個公有泛型域時也要插入強制類型轉換。
//我們寫的代碼
Singer one = cps.one;
//編譯器做的事情
Singer one = (Singer)cps.one;

問題十:關於泛型擦除,你知道多少?

答:

類型擦除會出現在泛型方法中,程序員通常認為下述的泛型方法

public static <T extends Comparable> min(T[] a)

是一個完整的方法族,而擦除類型之後,只剩下一個方法:

public static Comparable min(Comparable[] a)

這個時候類型參數T已經被擦除了,只留下了限定類型Comparable

但是方法的擦除會帶來一些問題:

class Coupling extends Couple<People{
    public void setTwo(People people) {
            super.setTwo(people);
    }
}

擦除后:

class Coupling extends Couple {
    public void setTwo(People People) {...}
}

這時,問題出現了,存在另一個從Couple類繼承的setTwo方法,即:

public void setTwo(Object two)

這顯然是一個不同的方法,因為它有一個不同類型的參數(Object),而不是People

Coupling coupling = new Coupling(...);
Couple<People> cp = interval;
cp.setTwo(people);

這裏,希望對setTwo的調用具有多態性,並調用最合適的那個方法。由於cp引用Coupling對象,所以應該調用Coupling.setTwo。問題在於類型擦除與多態發生了衝突。要解決這個問題,就需要編譯器在Coupling類中生成一個橋方法:

public void setTwo(Object second) {
    setTwo((People)second);
}

變量cp已經聲明為類型Couple<LocalDate>,並且這個類型只有一個簡單的方法叫setTwo,即setTwo(Object)。虛擬機用cp引用的對象調用這個方法。這個對象是Coupling類型的,所以會調用Coupling.setTwo(Object)方法。這個方法是合成的橋方法。它會調用Coupling.setTwo(Date),這也正是我們所期望的結果。

所以,我們要記住關於Java泛型轉換的幾個點:

  1. 虛擬機中沒有泛型,只有普通的類和方法
  2. 所有的類型參數都用它們的限定類型替換
  3. 橋方法被合成來保持多態
  4. 為保持類型安全性,必要時插入強制類型轉換

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

【其他文章推薦】

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

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

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

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

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

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

最通俗易懂的RSA加密解密指導

前言

RSA加密算法是一種非對稱加密算法,簡單來說,就是加密時使用一個鑰匙,解密時使用另一個鑰匙。

因為加密的鑰匙是公開的,所又稱公鑰,解密的鑰匙是不公開的,所以稱為私鑰。

密鑰

關於RSA加密有很多文章,但幾乎都只介紹了RSACryptoServiceProvider類的使用方法,如果只是走走看看,是沒問題的,但真的想使用時,就會發現,你沒有密鑰字符串。。。

下面我們從獲取密鑰字符串開始逐步學習加密。

密鑰字符串

每個安裝過VisualStudio的電腦都可以找到一個文件—makecert.exe。

我電腦的makecert.exe地址:C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\makecert.exe

makecert.exe是用來生成證書的程序,我們可以借用該程序來獲取密鑰字符串。

 

編寫生成證書的CreateCertWithPrivateKey函數,代碼如下:

 public static bool CreateCertWithPrivateKey(string subjectName, string makecertPath)
 {
     subjectName = "CN=" + subjectName;
     string param = " -pe -ss my -n \"" + subjectName + "\" ";
     try
     {
         Process p = Process.Start(makecertPath, param);
         p.WaitForExit();
         p.Close();
     }
     catch (Exception e)
     { 
         return false;
     }
     return true;
 }

調用證書生成函數,代碼如下:

string keyName = "Kiba518.Licence";//證書的KEY 
var ret = DataCertificate.CreateCertWithPrivateKey(keyName, @"C:\Program Files (x86)\Microsoft SDKs\Windows\v7.0A\Bin\makecert.exe");

剛剛生成的證書還存儲在WINDOWS的證書存儲區,現在我們通過證書的Key在證書存儲區查找到證書,並將其到出(導出時需要指定密碼),導出函數代碼如下:

public static bool ExportToPfxFile(string subjectName, string pfxFileName,
    string password, bool isDelFromStore)
{
    subjectName = "CN=" + subjectName;
    X509Store store = new X509Store(StoreName.My, StoreLocation.CurrentUser);
    store.Open(OpenFlags.ReadWrite);
    X509Certificate2Collection storecollection = (X509Certificate2Collection)store.Certificates;
    foreach (X509Certificate2 x509 in storecollection)
    {
        if (x509.Subject == subjectName)
        { 
            byte[] pfxByte = x509.Export(X509ContentType.Pfx, password);
            using (FileStream fileStream = new FileStream(pfxFileName, FileMode.Create))
            {
                // Write the data to the file, byte by byte. 
                for (int i = 0; i < pfxByte.Length; i++)
                    fileStream.WriteByte(pfxByte[i]);
                // Set the stream position to the beginning of the file. 
                fileStream.Seek(0, SeekOrigin.Begin);
                // Read and verify the data. 
                for (int i = 0; i < fileStream.Length; i++)
                {
                    if (pfxByte[i] != fileStream.ReadByte())
                    { 
                        fileStream.Close();
                        return false;
                    }
                }
                fileStream.Close();
            }
            if (isDelFromStore == true)
                store.Remove(x509);
        }
    }
    store.Close();
    store = null;
    storecollection = null;
    return true;
}

調用導出函數,代碼如下:

DataCertificate.ExportToPfxFile(keyName, "Kiba518.pfx", "123456", true);

運行完導出函數后,我們打開Debug文件夾,可以看到證書已經被成功導出了,如下圖:

證書導出后,我們就可以通過讀取證書的信息,來獲取到公鑰和私鑰了。

X509Certificate2 x509 = X509Certificate2("Kiba518.pfx", "123456", X509KeyStorageFlags.Exportable);
string publickey = x509.PublicKey.Key.ToXmlString(false);//公鑰獲取
string privatekey = x509.PrivateKey.ToXmlString(true);//私鑰獲取

公鑰私鑰如下圖所示:

加密解密

得到密鑰字符串后,我們創建RSA的加密解密函數,代碼如下:

//加密
public static string RSADecrypt(string xmlPrivateKey, string enptStr)
{
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
    provider.FromXmlString(xmlPrivateKey);
    byte[] rgb = Convert.FromBase64String(enptStr);
    byte[] bytes = provider.Decrypt(rgb, RSAEncryptionPadding.OaepSHA1);
    return new UnicodeEncoding().GetString(bytes);
}
//解密
public static string RSAEncrypt(string xmlPublicKey, string enptStr)
{
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
    provider.FromXmlString(xmlPublicKey);
    byte[] bytes = new UnicodeEncoding().GetBytes(enptStr);
    return Convert.ToBase64String(provider.Encrypt(bytes, RSAEncryptionPadding.OaepSHA1));
}

然後我們測試一下加密解密,測試函數如下。

public static void RsaTest()
{
    string myname = "my name is Kiba518!";
    Console.WriteLine($"內容:{myname}");
    string enStr = RSAEncrypt(publicKey, myname);
    Console.WriteLine($"加密字符串:{enStr}");
    string deStr = RSADecrypt(privateKey, enStr);
    Console.WriteLine($"解密字符串:{enStr}");
}

運行結果,加密解密成功,如下圖所示:

長字符分段加密

Rsa加密有字節數限制,即待加密的字符串太長,系統就會拋出異常:【System.Security.Cryptography.CryptographicException:“不正確的長度】

Rsa加密具體限制內容如下:

待加密的字節數不能超過密鑰的長度值除以 8 再減去 11(即:RSACryptoServiceProvider.KeySize / 8 – 11),而加密后得到密文的字節數,正好是密鑰的長度值除以 8(即:RSACryptoServiceProvider.KeySize / 8)。

分段加密

為解決長字符加密的異常,我們採取分段加密的方法進行字符串加密,代碼如下:

//加密
public static String SubRSAEncrypt(string xmlPublicKey, string enptStr)
{ 
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
    provider.FromXmlString(xmlPublicKey);
    Byte[] bytes = Encoder.GetBytes(enptStr);
    int MaxBlockSize = provider.KeySize / 8 - 11;    //加密塊最大長度限制
​
    if (bytes.Length <= MaxBlockSize)
        return Convert.ToBase64String(provider.Encrypt(bytes, false));
​
    using (MemoryStream PlaiStream = new MemoryStream(bytes))
    using (MemoryStream CrypStream = new MemoryStream())
    {
        Byte[] Buffer = new Byte[MaxBlockSize];
        int BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
​
        while (BlockSize > 0)
        {
            Byte[] ToEncrypt = new Byte[BlockSize];
            Array.Copy(Buffer, 0, ToEncrypt, 0, BlockSize);
​
            Byte[] Cryptograph = provider.Encrypt(ToEncrypt, false);
            CrypStream.Write(Cryptograph, 0, Cryptograph.Length);
​
            BlockSize = PlaiStream.Read(Buffer, 0, MaxBlockSize);
        }
​
        return Convert.ToBase64String(CrypStream.ToArray(), Base64FormattingOptions.None);
    } 
}
//解密
public static String SubRSADecrypt(string xmlPublicKey, string enptStr)
{ 
    RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
    provider.FromXmlString(xmlPublicKey);
    Byte[] bytes = Convert.FromBase64String(enptStr);
    int MaxBlockSize = provider.KeySize / 8;    //解密塊最大長度限制
​
    if (bytes.Length <= MaxBlockSize)
        return Encoder.GetString(provider.Decrypt(bytes, false));
​
    using (MemoryStream CrypStream = new MemoryStream(bytes))
    using (MemoryStream PlaiStream = new MemoryStream())
    {
        Byte[] Buffer = new Byte[MaxBlockSize];
        int BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
​
        while (BlockSize > 0)
        {
            Byte[] ToDecrypt = new Byte[BlockSize];
            Array.Copy(Buffer, 0, ToDecrypt, 0, BlockSize); 
            Byte[] Plaintext = provider.Decrypt(ToDecrypt, false);
            PlaiStream.Write(Plaintext, 0, Plaintext.Length); 
            BlockSize = CrypStream.Read(Buffer, 0, MaxBlockSize);
        } 
        return Encoder.GetString(PlaiStream.ToArray());
    }
}  

編寫分段加密測試函數如下:

public static void SubRsaTest()
{
    string myname = "my name is Kiba518!my name is Kiba518!my name is Kiba518!my name is Kiba518!my name is Kiba518!my name is Kiba518!my name is Kiba518!";
    Console.WriteLine($"內容:{myname}");
    string enStr = SubRSAEncrypt(publicKey, myname);
    Console.WriteLine($"加密字符串:{enStr}");
    string deStr = SubRSADecrypt(privateKey, enStr);
    Console.WriteLine($"解密字符串:{deStr}");
}

運行結果,加密解密成功,如下圖:

關於證書

文中創建的證書—Kiba518.pfx,就是https所使用的證書,換言之,https的證書就是個Rsa加密解密文件。

當然正式的可以在互聯網中被各大網站認可的證書,是需要權威機構認證的,這個機構叫做CA,這個機構頒發的證書是.crt後綴名;而我們的pfx後綴名的證書,學名叫做個人信息交換證書。

其實它們沒有什麼區別,就是套的殼子不一樣,crt證書的殼子里多一些屬性,比如認證機構,有效期等等。但兩個證書的核心內容是一樣的,都是Rsa加密解密文件。

下面我們簡單了解下證書的導入。

導入證書

在運行窗口(window+r)輸入mmc打開microsoft管理控制台。

然後操作文件 -> 添加/刪除管理單元,選擇可用的管理單元中的證書點擊添加。

添加完管理單元,在右側控制台根節點會增加一個證書的根節點,如下圖:

然後,我們展開節點,找到【個人—證書】節點,然後【右鍵—所有任務—導入】。

然後按嚮導提示導入證書。

需要注意的是瀏覽導入證書的對話框,默認導入的是crt類型,我們需要點擊下拉菜單,選擇人信息交換選項,如下圖。

—————————————————————————————————-

到此Rsa加密解密的基本使用已經介紹完了。

代碼已經傳到Github上了,歡迎大家下載。

Github地址:https://github.com/kiba518/RsaDemo

—————————————————————————————————-

注:此文章為原創,任何形式的轉載都請聯繫作者獲得授權並註明出處!
若您覺得這篇文章還不錯,請點擊下方的推薦】,非常感謝!

https://www.cnblogs.com/kiba/p/13141981.html

 

 

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

【其他文章推薦】

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

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

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

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

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

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

三星和半導體工人組織就白血病爭議達成妥協

摘錄自2018年月日[媒體名稱][地點]報導

韓聯社報導,三星電子、半導體工人健康與人權守護組織(簡稱半導體工人組織)及調解委員會24日上午舉行「第二次重啟調解及仲裁方式協議簽字儀式」,三星和半導體工人組織承諾今後無條件接受調解委提出的方案。

調解委將於8-9月製定調解方案,在9月底到10月初發表第二次調解最終方案,三星電子爭取在10月內對半導體工人組織的受害者提供賠償。

2007年,在三星電子半導體生產線工作的黃某因患急性白血病不幸身亡。此後,白血病等疾病是否與三星半導體工廠有關引起了爭議。

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

【其他文章推薦】

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

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

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

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

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

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

中國高新汽車國際峰會 – 汽車行業思想領袖的國際峰會

  探索新一代節能智聯車輛的創新業務與技術戰略   第二屆中國高新汽車國際峰會由法蘭克福展覽(上海)有限公司和中國國家發展和改革委員會 國際合作中心聯合主辦,是真正國際化的行業思想領袖盛會。演講嘉賓和與會代表將相互交流,分享理念,推廣新策略、新協作、新技術、新服務與新應用。 與會代表在峰會中將獲得有關商業模式、產品和服務戰略、技術創新的寶貴新創意和洞察力, 將推動OEM廠商、供應商和服務提供商朝著更加可持續、更具盈利能力的未來繼續前進。    本屆峰會的演講和討論會將深入探索各種熱門主題,包括:    1.
中國汽車行業和相關市場實現可持續發展的政策、首要任務與積極措施演變 2.
國外經驗與案例分析:為汽車行業發展而採用的商業模式和技術創新 3.
促進中國國有和民營汽車企業的發展:朝著真正合作、技術轉讓和全球市場渠道邁進 4.
電動方程式賽車(Formula E)來臨中國 – 對電動車的研發,性能,安全性,可靠性和消費者的接受程度帶來潛在附帶利益 5.
個人交通的新方向如何與中國未來智能生態城市發展的目標接軌 6.
電動交通和電動化 – 使市場增長的關鍵步驟 7.
未來高增長售後市場的機會:實現盈利發展和客戶滿意度 8.
經銷商和分銷商將業務擴大至新維修市場的潛力 9.
將威力強大的數字營銷和社交媒體戰略用於汽車市場的發展:OEM廠商及零售商的最佳實 踐 10.
評估乘用車和商用車市場中的綜合機遇 11.
在中國的商用車輛和運輸車隊中減排,實現更清潔高效的運作 12.
汽車智聯技術創新實現遠程信息處理之外的新商機   聆聽各大OEM商、供應商和政府政策制定者的新見解,目前,來自國內外的多位高級別演講嘉賓業已確認出席:   ‧
中國國家發展和改革委員會:高級司長 ‧
中國科技部:高級司長 ‧
王成先生,中國汽車技術研究中心 (CATARC), 汽車產業發展研究所副 總工程師及清潔能源汽車生產力促進中心執行主任 ‧
呂洋先生, 中國海億汽車賽事管理(北京)有限公司副總裁及CEO ‧
Thomas Hajek先生, 德國菲亞特克萊斯勒集團董事會成員 ‧
Boriana Lambreva女士,大眾汽車(中國)公司新能源汽車集團戰略與規劃高 級經理 ‧
原誠寅博士, 北京汽車新能源汽車有限公司產品工程院副院長 ‧
Ridzuan Yusof先生, 馬來西亞Proton電動 車輛項目總監 ‧
Martin Rosell先生, 瑞典WirelessCar公司董事總經理 ‧
Christophe Aufrere先生,法國佛吉亞集團首席技術官 ‧
Christian Heep先生,德國電動交通協會(BEM)首席執行官兼營銷總監 ‧
董揚先生, 中國汽車工業協會(CAAM) 秘書長 ‧
Francois Schoentgen先生,大陸汽車集團動力總成變速箱控制董事總經理 ‧
Klaus Paur先生,中國益普索公司全球汽車業總監製 ‧
Ing Bernd Kraemmer先生, 奧地利iO Vehicles/ iO-E-Scooter公司董事總經理 ‧
Rebecca Zhu女士, 中國HTI業務發展總監(休斯通信公司) ‧
Rick Longobart先生,美國聖塔阿娜市 設施與車隊經理兼市政設備維護協會 (MEMA)主席 ‧
宋健教授,清華大學汽車技術研究院院長及汽車工程系教授 ‧
Madani Sahari先生, 馬來西亞汽車研究院(MAI)首席執行官 ‧
林程博士,北京理工大學電動車輛國家工程實驗室(NELEV)教授兼副主任   詳細內容請上 

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

【其他文章推薦】

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

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

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

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

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

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