常見的8中數據結構

 

  • 原文:
  • 譯者:

本文採用意譯,版權歸原作者所有

1976 年,一個瑞士計算機科學家寫一本書。即:算法 + 數據結構 = 程序。40 多年過去了,這個等式依然成立。

很多代碼面試題都要求候選者深入理解數據結構,不管你來自大學計算機專業還是編程培訓機構,也不管你有多少年編程經驗。有時面試題會直接提到數據結構,比如“給我實現一個二叉樹”,然而有時則不那麼明顯,比如“統計一下每個作者寫的書的數量”。

什麼是數據結構?

數據結構是計算機存儲、組織數據的方式。對於特定的數據結構(比如數組),有些操作效率很高(讀某個數組元素),有些操作的效率很低(刪除某個數組元素)。程序員的目標是為當前的問題選擇最優的數據結構。

為什麼我們需要數據結構?

數據是程序的核心要素,因此數據結構的價值不言而喻。無論你在寫什麼程序,你都需要與數據打交道,比如員工工資、股票價格、雜貨清單或者電話本。在不同場景下,數據需要以特定的方式存儲,我們有不同的數據結構可以滿足我們的需求。

8 種常用數據結構

  1. 數組
  2. 棧
  3. 隊列
  4. 鏈表
  5. 圖
  6. 樹
  7. 前綴樹
  8. 哈希表

1. 數組

數組(Array)大概是最簡單,也是最常用的數據結構了。其他數據結構,比如棧和隊列都是由數組衍生出來的。

下圖展示了 1 個數組,它有 4 個元素:

每一個數組元素的位置由数字編號,稱為下標或者索引(index)。大多數編程語言的數組第一個元素的下標是 0。

根據維度區分,有 2 種不同的數組:

  • 一維數組(如上圖所示)
  • 多維數組(數組的元素為數組)

數組的基本操作

  • Insert – 在某個索引處插入元素
  • Get – 讀取某個索引處的元素
  • Delete – 刪除某個索引處的元素
  • Size – 獲取數組的長度

常見數組代碼面試題

2. 棧

撤回,即 Ctrl+Z,是我們最常見的操作之一,大多數應用都會支持這個功能。你知道它是怎麼實現的嗎?答案是這樣的:把之前的應用狀態(限制個數)保存到內存中,最近的狀態放到第一個。這時,我們需要棧(stack)來實現這個功能。

棧中的元素採用 LIFO (Last In First Out),即後進先出。

下圖的棧有 3 個元素,3 在最上面,因此它會被第一個移除:

棧的基本操作

  • Push —  在棧的最上方插入元素
  • Pop — 返回棧最上方的元素,並將其刪除
  • isEmpty —  查詢棧是否為空
  • Top —  返回棧最上方的元素,並不刪除

常見的棧代碼面試題

3. 隊列

隊列(Queue)與棧類似,都是採用線性結構存儲數據。它們的區別在於,棧採用 LIFO 方式,而隊列採用先進先出,即FIFO(First in First Out)。

下圖展示了一個隊列,1 是最上面的元素,它會被第一個移除:

隊列的基本操作

  • Enqueue —  在隊列末尾插入元素
  • Dequeue —  將隊列第一個元素刪除
  • isEmpty —  查詢隊列是否為空
  • Top —  返回隊列的第一個元素

常見的隊列代碼面試題

4. 鏈表

鏈表(Linked List)也是線性結構,它與數組看起來非常像,但是它們的內存分配方式、內部結構和插入刪除操作方式都不一樣。

鏈表是一系列節點組成的鏈,每一個節點保存了數據以及指向下一個節點的指針。鏈表頭指針指向第一個節點,如果鏈表為空,則頭指針為空或者為 null。

鏈表可以用來實現文件系統、哈希表和鄰接表。

下圖展示了一個鏈表,它有 3 個節點:

鏈表分為 2 種:

  • 單向鏈表
  • 雙向鏈表

鏈表的基本操作

  • InsertAtEnd —  在鏈表結尾插入元素
  • InsertAtHead —  在鏈表開頭插入元素
  • Delete —  刪除鏈表的指定元素
  • DeleteAtHead —  刪除鏈表第一個元素
  • Search —  在鏈表中查詢指定元素
  • isEmpty —  查詢鏈表是否為空

常見的隊列代碼面試題

5. 圖

圖(graph)由多個節點(vertex)構成,節點之間闊以互相連接組成一個網絡。(x, y)表示一條邊(edge),它表示節點 x 與 y 相連。邊可能會有權值(weight/cost)。

圖分為兩種:

  • 無向圖
  • 有向圖

在編程語言中,圖有可能有以下兩種形式表示:

  • 鄰接矩陣(Adjacency Matrix)
  • 鄰接表(Adjacency List)

遍歷圖有兩周算法

  • 廣度優先搜索(Breadth First Search)
  • 深度優先搜索(Depth First Search)

常見的圖代碼面試題

6. 樹

樹(Tree)是一個分層的數據結構,由節點和連接節點的邊組成。樹是一種特殊的圖,它與圖最大的區別是沒有循環。

樹被廣泛應用在人工智能和一些複雜算法中,用來提供高效的存儲結構。

下圖是一個簡單的樹以及與樹相關的術語:

樹有很多分類:

  • N 叉樹(N-ary Tree)
  • 平衡樹(Balanced Tree)
  • 二叉樹(Binary Tree)
  • 二叉查找樹(Binary Search Tree)
  • 平衡二叉樹(AVL Tree)
  • 紅黑樹(Red Black Tree)
  • 2-3 樹(2–3 Tree)

其中,二叉樹和二叉查找樹是最常用的樹。

常見的樹代碼面試題

7. 前綴樹

前綴樹(Prefix Trees 或者 Trie)與樹類似,用於處理字符串相關的問題時非常高效。它可以實現快速檢索,常用於字典中的單詞查詢,搜索引擎的自動補全甚至 IP 路由。

下圖展示了“top”, “thus”和“their”三個單詞在前綴樹中如何存儲的:

單詞是按照字母從上往下存儲,“p”, “s”和“r”節點分別表示“top”, “thus”和“their”的單詞結尾。

常見的樹代碼面試題

8. 哈希表

哈希(Hash)將某個對象變換為唯一標識符,該標識符通常用一個短的隨機字母和数字組成的字符串來代表。哈希可以用來實現各種數據結構,其中最常用的就是哈希表(hash table)。

哈希表通常由數組實現。

哈希表的性能取決於 3 個指標:

  • 哈希函數
  • 哈希表的大小
  • 哈希衝突處理方式

下圖展示了有數組實現的哈希表,數組的下標即為哈希值,由哈希函數計算,作為哈希表的鍵(key),而數組中保存的數據即為值(value):

常見的哈希表代碼面試題

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

【其他文章推薦】

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

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

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

【編程題與分析題】Javascript 之繼承的多種實現方式和優缺點總結

[!NOTE]
能熟練掌握每種繼承方式的手寫實現,並知道該繼承實現方式的優缺點。

原型鏈繼承

    function Parent() {
      this.name = 'zhangsan';
      this.children = ['A', 'B', 'C'];
    }
    Parent.prototype.getName = function() {
      console.log(this.name);
    }
    
    function Child() {
      
    }
    Child.prototype = new Parent();
    var child = new Child();
    console.log(child.getName());

[!NOTE]
主要問題:
1. 引用類型的屬性被所有實例共享(this.children.push(‘name’))
2. 在創建Child的實例的時候,不能向Parent傳參

借用構造函數(經典繼承)

    function Parent(age) {
      this.names = ['zhangsan', 'lisi'];
      this.age = age;
      
      this.getName = function() {
        return this.names;
      }
      
      this.getAge = function() {
        return this.age;
      }
    }
    
    function Child(age) {
      Parent.call(this, age);
    }
    var child = new Child(18);
    child.names.push('haha');
    console.log(child.names);
    
    var child2 = new Child(20);
    child2.names.push('yaya');
    console.log(child2.names);

[!NOTE]
優點:
1. 避免了引用類型的屬性被所有實例共享
2. 可以直接在Child中向Parent傳參
缺點:
方法都在構造函數中定義了,每次創建實例都會創建一遍方法

組合繼承(原型鏈繼承和經典繼承雙劍合璧)

    /**
    * 父類構造函數
    * @param name
    * @constructor
    */
    function Parent(name) {
      this.name = name;
      this.colors = ['red', 'green', 'blue'];
    }
    
    Parent.prototype.getName = function() {
      console.log(this.name);
    }
    
    // child
    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }
    
    Child.prototype = new Parent();
    // 校正child的構造函數
    Child.prototype.constructor = Child;
    
    // 創建實例
    var child1 = new Child('zhangsan', 18);
    child1.colors.push('orange');
    console.log(child1.name, child1.age, child1.colors);    // zhangsan 18 (4) ["red", "green", "blue", "orange"]
    
    var child2 = new Child('lisi', 28);
    console.log(child2.name, child2.age, child2.colors);    // lisi 28 (3) ["red", "green", "blue"]

[!NOTE]
優點: 融合了原型鏈繼承和構造函數的優點,是Javascript中最常用的繼承模式

—— 高級繼承的實現

原型式繼承

    function createObj(o) {
      function F(){};
      // 關鍵:將傳入的對象作為創建對象的原型
      F.prototype = o;
      return new F();
    }
    
    // test
    var person = {
        name: 'zhangsan',
        friends: ['lisi', 'wangwu']
    }
    var person1 = createObj(person);
    var person2 = createObj(person);
    
    person1.name = 'wangdachui';
    console.log(person1.name, person2.name);  // wangdachui, zhangsan
    
    person1.friends.push('songxiaobao');
    console.log(person2.friends);       // lisi wangwu songxiaobao

[!WARNING]
缺點:
對於引用類型的屬性值始終都會共享相應的值,和原型鏈繼承一樣

寄生式繼承

    // 創建一個用於封裝繼承過程的函數,這個函數在內部以某種形式來增強對象
    function createObj(o) {
      var clone = Object.create(o);
      clone.sayName = function() {
        console.log('say HelloWorld');
      }
      return clone;
    }

[!WARNING]
缺點:與借用構造函數模式一樣,每次創建對象都會創建一遍方法

寄生組合式繼承

基礎版本

    function Parent(name) {
      this.name = name;
      this.colors = ['red', 'green', 'blue'];
    }
    
    Parent.prototype.getName = function() {
      console.log(this, name);
    }
    
    function Child(name, age) {
      Parent.call(this, name);
      this.age = age;
    }
    
    // test1:
    // 1. 設置子類實例的時候會調用父類的構造函數
    Child.prototype = new Parent();
    // 2. 創建子類實例的時候也會調用父類的構造函數
    var child1 = new Child('zhangsan', 18);   // Parent.call(this, name);
    
    
    // 思考:如何減少父類構造函數的調用次數呢?
    var F = function(){};
    F.prototype = Parent.prototype;
    Child.prototype = new F();
    
    // 思考:下面的這一句話可以嗎?
    /* 分析:因為此時Child.prototype和Parent.prototype此時指向的是同一個對象,
            因此部分數據相當於此時是共享的(引用)。
            比如此時增加 Child.prototype.testProp = 1; 
            同時會影響 Parent.prototype 的屬性的。
          如果不模擬,直接上 es5 的話應該是下面這樣吧
          Child.prototype = Object.create(Parent.prototype);*/
    Child.prototype = Parent.prototype;
    
    // 上面的三句話可以簡化為下面的一句話
    Child.prototype = Object.create(Parent.prototype);
    
    
    
    // test2:
    var child2 = new Child('lisi', 24);

優化版本

    // 自封裝一個繼承的方法
    function object(o) {
      // 下面的三句話實際上就是類似於:var o = Object.create(o.prototype)
      function F(){};
      F.prototype = o.prototype;
      return new F();
    }
    
    function prototype(child, parent) {
      var prototype = object(parent.prototype);
      // 維護原型對象prototype裏面的constructor屬性
      prototype.constructor = child;
      child.prototype = prototype;
    }
    
    // 調用的時候
    prototype(Child, Parent)

創建對象的方法

  • 字面量創建
  • 構造函數創建
  • Object.create()
var o1 = {name: 'value'};
var o2 = new Object({name: 'value'});

var M = function() {this.name = 'o3'};
var o3 = new M();

var P = {name: 'o4'};
var o4 = Object.create(P)

原型

  • JavaScript 的所有對象中都包含了一個 __proto__ 內部屬性,這個屬性所對應的就是該對象的原型
  • JavaScript 的函數對象,除了原型 __proto__ 之外,還預置了 prototype 屬性
  • 當函數對象作為構造函數創建實例時,該 prototype 屬性值將被作為實例對象的原型 __proto__。

原型鏈

任何一個實例對象通過原型鏈可以找到它對應的原型對象,原型對象上面!

的實例和方法都是實例所共享的。

一個對象在查找以一個方法或屬性時,他會先在自己的對象上去找,找不到時,他會沿着原型鏈依次向上查找。

注意: 函數才有prototype,實例對象只有有__proto__, 而函數有的__proto__是因為函數是Function的實例對象

instanceof原理

判斷實例對象的__proto__屬性與構造函數的prototype是不是用一個引用。如果不是,他會沿着對象的__proto__向上查找的,直到頂端Object。

判斷對象是哪個類的直接實例

使用對象.construcor直接可判斷

構造函數,new時發生了什麼?

   var obj  = {}; 
   obj.__proto__ = Base.prototype;
   Base.call(obj);  
  1. 創建一個新的對象 obj;
  2. 將這個空對象的__proto__成員指向了Base函數對象prototype成員對象
  3. Base函數對象的this指針替換成obj, 相當於執行了Base.call(obj);
  4. 如果構造函數显示的返回一個對象,那麼則這個實例為這個返回的對象。 否則返回這個新創建的對象

類

類的聲明

// 普通寫法
function Animal() {
  this.name = 'name'
}

// ES6
class Animal2 {
  constructor () {
    this.name = 'name';
  }
}

繼承

借用構造函數法

在構造函數中 使用Parent.call(this)的方法繼承父類屬性。

原理: 將子類的this使用父類的構造函數跑一遍

缺點: Parent原型鏈上的屬性和方法並不會被子類繼承

function Parent() {
  this.name = 'parent'
}

function Child() {
  Parent.call(this);
  this.type = 'child'
}

原型鏈實現繼承

原理:把子類的prototype(原型對象)直接設置為父類的實例

缺點:因為子類只進行一次原型更改,所以子類的所有實例保存的是同一個父類的值。
當子類對象上進行值修改時,如果是修改的原始類型的值,那麼會在實例上新建這樣一個值;
但如果是引用類型的話,他就會去修改子類上唯一一個父類實例裏面的這個引用類型,這會影響所有子類實例

function Parent() {
  this.name = 'parent'
  this.arr = [1,2,3]
}

function Child() {
  this.type = 'child'
}

Child.prototype = new Parent();
var c1 = new Child();
var c2 = new Child();
c1.__proto__ === c2.__proto__

組合繼承方式

組合構造函數中使用call繼承和原型鏈繼承。

原理: 子類構造函數中使用Parent.call(this);的方式可以繼承寫在父類構造函數中this上綁定的各屬性和方法;
使用Child.prototype = new Parent()的方式可以繼承掛在在父類原型上的各屬性和方法

缺點: 父類構造函數在子類構造函數中執行了一次,在子類綁定原型時又執行了一次

function Parent() {
  this.name = 'parent'
  this.arr = [1,2,3]
}

function Child() {
  Parent.call(this);
  this.type = 'child'
}

Child.prototype = new Parent();

組合繼承方式 優化1:

因為這時父類構造函數的方法已經被執行過了,只需要關心原型鏈上的屬性和方法了

Child.prototype = Parent.prototype;

缺點:

  • 因為原型上有一個屬性為constructor,此時直接使用父類的prototype的話那麼會導致 實例的constructor為Parent,即不能區分這個實例對象是Child的實例還是父類的實例對象。
  • 子類不可直接在prototype上添加屬性和方法,因為會影響父類的原型

注意:這個時候instanseof是可以判斷出實例為Child的實例的,因為instanceof的原理是沿着對象的__proto__判斷是否有一個原型是等於該構造函數的原型的。這裏把Child的原型直接設置為了父類的原型,那麼: 實例.__proto__ === Child.prototype === Child.prototype

組合繼承方式 優化2 – 添加中間對象【最通用版本】:

function Parent() {
  this.name = 'parent'
  this.arr = [1,2,3]
}

function Child() {
  Parent.call(this);
  this.type = 'child'
}

Child.prototype = Object.create(Parent.prototype); //提供__proto__
Child.prototype.constrctor = Child;

Object.create()方法創建一個新對象,使用現有的對象來提供新創建的對象的__proto__

創建JS對象的多種方式總結

工廠模式

 
    /**
    * 工廠模式創建對象
    * @param name
    * @return {Object}
    */
    function createPerson(name){
        var o = new Object();
        o.name = name;
        o.getName = function() {
          console.log(this.name);
        }
        return o;
    }
    var person = createPerson('zhangsan');
    console.log(person.__proto__ === Object.prototype); // true

缺點:無法識別當前的對象,因為創建的所有對象實例都指向的是同一個原型

構造函數模式

構造函數創建對象基礎版本

    /**
    * 使用構造函數的方式來創建對象
    * @param name
    * @constructor
    */
    function Person(name) {
      this.name = name;
      this.getName = function() {
        console.log(this.name)
      }
    }
    var person = new Person('lisi');
    console.log(person.__proto__ === Person.prototype)

優點:實例剋識別偽一個特定的類型
缺點:每次創建實例對象的時候,每個方法都會被創建一次

構造函數模式優化

    function Person(name) {
      this.name = name;
      this.getName = getName;
    }
    
    function getName() {
      console.log(this.name);
    }
    
    var person = new Person('zhangsan');
    console.log(person.__proto__ === Person.prototype);

優點:解決了每個方法都要被重新創建的問題
缺點:不合乎代碼規範……

原型模式

原型模式基礎版

    function Person(name) {
      
    }
    Person.prototype.name = 'lisi';
    Person.prototype.getName = function() {
      console.log(this.name);
    }
    var person = new Person();
    console.log(Person.prototype.constructor)       // Person

優點:方法不會被重新創建
缺點:1. 所有的屬性和方法所有的實例上面都是共享的;2. 不能初始化參數

原型模式優化版本一

    function Person(name) {
      
    }
    Person.prototype = {
        name: 'lisi',
        getName: function() {
          console.log(this.name);
        }
    }
    var person = new Person();
    console.log(Person.prototype.constructor)       // Object
    console.log(person.constructor == person.__proto__.constructor) // true

優點:封裝性好了一些
缺點:重寫了Person的原型prototype屬性,丟失了原始的prototype上的constructor屬性

原型模式優化版本二

    function Person(name) {
      
    }
    Person.prototype = {
        constructor: Person,
        name: 'lisi',
        getName: function() {
          console.log(this.name)
        }
    }
    var person = new Person();

優點:實例可以通過constructor屬性找到所屬的構造函數
缺點:所有的屬性和方法都共享,而且不能初始化參數

組合模式

    function Person(name) {
      this.name = name;
    }
    Person.prototype = {
        constructor: Person,
        getName: function() {
          console.log(this.name)
        }
    }
    var person = new Person('zhangsan');

優點:基本符合預期,屬性私有,方法共享,是目前使用最廣泛的方式
缺點:方法和屬性沒有寫在一起,封裝性不是太好

動態原型模式

    // 第一種創建思路:
    function Person(name) {
       this.name = name;
       if (typeof this.getName !== 'function') {
           Person.prototype.getName = function() {
             console.log(this.name);
           }
       }
    }
    var person = new Person();

    // 第二種創建的思路:使用對象字面量重寫原型上的方法
    function Person(name) {
      this.name = name;
      if (typeof this.getName !== 'function') {
          Person.prototype = {
              constructor: Person,
              getName: function() {
                console.log(this.name)
              }
          }
          return new Person(name);
      }
    }
    
    var person1 = new Person('zhangsan');
    var person2 = new Person('lisi');
    console.log(person1.getName());
    console.log(person2.getName());
    

寄生構造函數模式

    /**
    * 寄生構造函數模式
    * @param name
    * @return {Object}
    * @constructor
    */
   function Person(name){
        var o = new Object();
        o.name = name;
        o.getName = function() {
          console.log(this.name)
        }
        return o;
   }
   var person = new Person('zhangsan');
   console.log(person instanceof Person);   // false
   console.log(person instanceof Object);   // true
   
   
   // 使用寄生-構造函數-模式來創建一個自定義的數組
   /**
    * 特殊數組的構造器
    * @constructor
    */
   function SpecialArray() {
     var values = new Array();
     /*for (var i = 0, len = arguments.length; i < len; i++) {
         values.push(arguments[i]);
     }*/
     // 開始添加數據(可以直接使用apply的方式來優化代碼)
     values.push.apply(values, arguments);
     
     // 新增的方法
     values.toPipedString = function(){
         return this.join('|');
     }
     
     return values;
   }
   
   // 使用new來創建對象
   var colors1 = new SpecialArray('red1', 'green1', 'blue1');
   // 不使用new來創建對象
   var colors2 = SpecialArray('red2', 'green2', 'blue2');
   
   console.log(colors1, colors1.toPipedString());
   console.log(colors2, colors2.toPipedString());

穩妥構造函數模式

    /**
    * 穩妥的創建對象的方式
    * @param name
    * @return {number}
    * @constructor
    */
    function Person(name){
        var o = new Object();
        o.sayName = function() {
           // 這裡有點類似於在一個函數裏面使用外部的變量
           // 這裏直接輸出的是name
          console.log(name);
        }
        return o;
    }
    var person =  Person('lisi');
    person.sayName();
    person.name = 'zhangsan';
    person.sayName();
    console.log(person instanceof Person);      // false
    console.log(person instanceof Object);      // false

[!NOTE]
與寄生的模式的不同點:1. 新創建的實例方法不引用this 2.不使用new操作符調用構造函數
優點:最適合一些安全的環境中使用
缺點:和工廠模式一樣,是無法識別對象的所屬類型的

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

前蘋果資深副總 傳接手電動車計畫

日前國外媒體《The Information》才報導,蘋果的電動車計畫可能順延至 2021 年;而《華爾街日報》引述知情人士的說法,曾任蘋果資深副總裁的Bob Mansfield 將接掌電動車計畫。

熟知蘋果電動車計畫Project Titan 的內部人士向《華爾街日報》透露,曾任技術部門資深副總裁的Bob Mansfield 將接手這項計畫。不過,目前蘋果官方與Bob Mansfield 本人都不願對於報導內容發表任何評論。

Bob Mansfield 於1999 年加入蘋果,在已故執行長Steve Jobs 底下出任管理階層;過去他曾主導硬體開發工程,產品包括MacBook Air、iMac、iPad 等。蘋果曾在2012 年宣布Bob Mansfield 將要退休,但後來又被執行長Tim Cook 說服、高薪留任公司;2013 年開始他從經營團隊名單隱身,官方僅表示他負責特別專案項目,並直接向Tim Cook 彙報。

Bob Mansfield 與像是設計長Jonathan Ive 等高層一向較少在公開場合露面,而在產品發表會或精心製作的產品影片當中可見他的身影。不過本月份開始,蘋果員工發現負責電動車計畫的資深經理轉而向Bob Mansfield 彙報。

當重點產品iPhone 銷售成長放緩、影響營收與獲利後,新的發展計畫成了蘋果迫切需要的項目。該公司雖未公開承認正在開發一款電動車,不過國外媒體陸續報導,已有數百名員工加入專案,並且聘請來自汽車產業的電池技術與自動駕駛專家,這項計畫可望成為未來推動蘋果成長的發展項目之一。

(本文授權自《》──〈〉)

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

賓士 Future Bus 無人巴士上路,會閃行人還懂得看紅綠燈

如果你從荷蘭阿姆斯特丹史基浦機場出來搭上快捷巴士(BRT),注意到巴士明明正在行進中,司機的雙手卻輕鬆擺在一旁,先別太緊張,你可能搭上了裝載賓士CityPilot 自動駕駛系統的「未來巴士(Future Bus)」!

正在阿姆斯特丹史基浦機場和哈勒姆鎮之間進行長距離測試的Future Bus,改裝自賓士的Citaro 型號巴士,以賓士220 kw 的六缸引擎驅動,最高時速達70 公里,並由CityPilot 自動駕駛系統負責將車輛保持在車道中央,方向導航以及加減速。

根據賓士Citaro 改裝自動駕駛巴士,裝有GPS 與兩組雷達系統。

當巴士穩定停下,車門打開時,出入口的冷光條會由禁止的紅色轉成通行的綠色。上車刷卡後,你可以看到司機的方向盤前方設置一個長方形螢幕,隨時顯示車速、電量以及鄰近道路交通號誌等資訊,如果車身感應到有東西靠近,也會跳出警示符號。

基於法規而存在的駕駛平時只需要坐在駕駛座上監控,特殊狀況才需要接手控車,而CityPilot 自動駕駛系統被認為能減少人為駕駛疏失,並靠著更穩定的行車方式增進交通效率和搭乘舒適度。

Future Bus 總共安裝10 台攝影機監控道路與車身四周的情況,4 個短程雷達感應器負責巴士前方50 公分至10 公尺的車況,還有兩個範圍達50 公尺的立體相機為系統提供3D 視覺與障礙物辨識。

自動駕駛巴士主要運用雷達、GPS、道路追蹤攝影機和環景相機來判定自己的位置,車底還有相機負責辨識路面坑洞狀況。

基於當地法規,雖然是自動駕駛巴士,但還是會配有一名司機。

這幾年已有不少在校園或遊樂園等封閉場域進行載客的無人巴士,與IBM 超級電腦華生合作的自動駕駛小巴Olli 也已經在華盛頓特區上路了。不過賓士Future Bus 負責的機場300 號路線巴士專用通道,行駛路段包含十字路口、行人區與隧道,因此除了為乘客自動開關車門、閃避行人等突然靠近的物體,還具備判讀交通號誌、在正確時機通過路口的能力。可說是自動駕駛公車測試的又一里程碑!

(本文由 授權提供。所有圖片來源:mercedes-benz)

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

中國國產電動汽車續航超500km 遠超特斯拉

由中國中能東道集團自主研發,與四川野馬汽車公司聯合生產的「野馬u能純電動汽車」在大連進行了路演。行駛502公里,仍有餘電22%,這遠遠優於領先國際先進水準的特斯拉(400公里)和比亞迪(260公里),其續航能力是目前中國國內普通純電動汽車的3倍。  
  該純電動汽車不依賴專用充電站或充電樁,220v民用電即可完成充電。該車已進入國家工信部目錄並實現量產。中能東道集團已規劃建設5個電動汽車「動力總成核新部件產業基地」,可實現年產50萬套目標。   2014年大連市政府專門出臺檔要求2016年全市公交、公務、郵政、環衛、出租等公共領域新能源汽車置換率不低於30%;個人購買使用新能源汽車,除享受由中央和地方財政分別給予總車款60%左右的政策性補貼外,還可享受免車輛購置稅和車輛不限行、電價優惠等鼓勵政策。2016年底大連市區將實現充電樁網路化建設,基本可滿足新能源汽車充電需求。   中能東道集團已完成全國31個省管理服務中心佈局,並在大連設立運營中心。野馬u能純電動汽車即將落戶大連。   文章來源:新浪新聞看點

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

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

比亞迪新能源車上海補貼將腰斬 銷量已現大滑坡

兩個月前,比亞迪在上海失去了兩萬元(人民幣,下同)地方補貼,兩個月後,又將失去5000元補貼,仍然在手的只剩5000元, 昨(25)天,比亞迪確認,已經接到上海有關部門的通知,比亞迪新能源汽車在滬補貼將減半,並將成為受補貼「按量退坡」影響的首家新能源汽車企業。  
 
銷量沖4萬,福兮禍兮   在上海收穫了4萬的銷量,對於比亞迪來說,是福,也是禍。   上海市新能源汽車推進辦透露,2014年以來,比亞迪品牌新能源乘用車在上海累計銷量距離4萬輛僅一步之遙。按照相關政策,如累計銷量達到4萬輛以上,上海市地方補貼將降至每輛5000元,較目前減半。部分消費者因擔心比亞迪新能源汽車實際購車價提高而轉向享受更高補貼的其他品牌新能源汽車。  
公司是否貼補看市場反應   從6月份開始,比亞迪為了挽救主力車型「秦」在上海市場的銷量,採取廠家和經銷商聯合補貼1.4萬元,以補齊無法拿到政府1.4萬元額外補貼的差價。不過,比亞迪6月初的補貼政策7月底即將到期,到期後,比亞迪是否會出臺力度更大的補貼,挽回價格上的不利?昨天,比亞迪公關部相關人士透露,目前還在商討,具體的市場政策要看市場反應。  
今年上海銷量已現大滑坡   上海補貼退坡已導致比亞迪在上海市場一蹶不振。今年以來,比亞迪銷量呈現直線下滑,市場份額也被上汽取代。去年上海的插電混動市場上,比亞迪幾乎是一家獨大,在上海的銷量超越大本營深圳。而今年4月以後,隨著上海插電式混動汽車准入技術門檻的提高,比亞迪的表現疲軟。   上海的疲態拖累比亞迪「秦」全國銷量大跌,今年上半年“秦”僅賣出9404輛,不足萬輛的成績相較其去年同期的1.6萬輛,同比大跌42.9%。另一款新能源車型「秦」EV也只賣出1725輛。 

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

【其他文章推薦】

※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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

眾泰汽車被舉報騙補 借殼金馬股份或生變

昨日一則關於眾泰汽車涉嫌騙取國家補貼的舉報,在網路上被迅速傳播:江蘇宿遷眾泰經銷商舉報眾泰汽車為了拿到新能源補貼,在國家大力查處騙補之時,大量生產眾泰新能源雲100早產車。由於生產日期與全身玻璃相差3-5個月,車管所拒絕過戶導致大量車主無法上牌,經銷商無法幫車主解決此問題於是舉報廠家。  
 
專項嚴打   恰恰是面臨著2016年新能源補貼將降低的時間節點,也激發了新能源汽車銷量出現井噴。據報導,2015年11月我國的新能源商用車單月產量超過全球其他國家總和。新能源汽車產銷超常增速背後的“虛火”,也引起了管理部門的關注。   2016年1月初,國家資訊中心資源開發部主任徐長明公開表達了對新能源汽車的質疑, 正是在這樣的質疑聲中,2016年1月21日,四部委聯合發佈《關於開展新能源汽車推廣應用核查工作的通知》,隨後這一“騙補核查行動”更是上升為由國務院牽頭。5月28日,財政部官網消息稱,關於新能源汽車推廣騙補的現場核查已經完成,目前處於會審階段,但並未透露任何核查細節。  
眾泰之危   值得關注的是,上市公司金馬股份已經於今年3月28日發佈公告,計畫以116億元的估值收購眾泰汽車全部股權。然而金馬股份卻在7月6日撤回了收購方案申報,眾泰汽車的借殼上市計畫也戛然而止。恰在這樣一個敏感的時點,關於眾泰汽車騙取新能源汽車補貼的舉報現於網路,並被快速傳播。   也正是由於眾泰汽車的盈利對於新能源汽車補貼的高度依賴,也使得針對該公司騙取新能源補貼的舉報備受關注,相關人士表示,如果這個舉報最終被證實,那麼對於眾泰汽車的借殼上市而言,就是絕殺,不僅是經營層面違法違規、可能面臨高額處罰,而且從最終的財務影響來看也會涉及到財務造假。   文章來源:環球網

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

【其他文章推薦】

※帶您來了解什麼是 USB CONNECTOR  ?

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

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

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

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

特斯拉即將在台開賣,選擇台灣原因曝光

美國電動車龍頭品牌特斯拉(Tesla)正式來台設點,預計將在今年9月展開銷售服務。特斯拉之所以選擇台灣的原因近日曝光,主要是因為台灣擁有完整的供應鏈,且幅員適中之故。

《中央社》指出,台灣南北全長不到400公里,且全島幅員不算太大;而Tesla Model S每次充飽電可行駛至少260公里,使車主每次充飽電都可以直接開車往來南北,特斯拉要布建全島充電網也會相對容易。

特斯拉目前在全球已設置681個超級充電站,充飽電的時間約需30分鐘,通常設置於餐廳、商場與Wi-Fi熱點周遭,讓車主可在等待充電的同時進行日常消費。

另一方面,特斯拉許多關鍵零件,如電動馬達、電控系統等零組件都來自台灣,零件供應量比例最高達25%,類別也可達40%左右。強大的在地供應鏈,也強化了特斯拉在台拓展市場的實力。台灣與特斯拉電動車相關的業者,包括動力電池線束公司貿聯-KY、變速箱齒輪廠和大、DC/DC轉換器與車上充電系統供應商台達電、電動馬達廠富田、大電流端子廠健和興等。

最後,台灣品牌電動機車Gogoro已在台灣本地打出市場名聲。有了Gogoro的領航經驗,台灣人對電動車輛的接受度更高,也將有利特斯拉在台灣開疆拓土。

(照片來源:Tesla Taiwan臉書專頁)

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

【其他文章推薦】

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

※網頁設計一頭霧水??該從何著手呢? 找到專業技術的網頁設計公司,幫您輕鬆架站!

※想要讓你的商品成為最夯、最多人討論的話題?網頁設計公司讓你強力曝光

※想知道最厲害的台北網頁設計公司推薦、台中網頁設計公司推薦專業設計師”嚨底家”!!

大眾汽車集團「以人為本」戰略 再推15款電動汽車

大眾汽車集團攜手旗下大眾汽車、奧迪、斯柯達、西雅特、保時捷、賓利六大品牌及合資企業一汽大眾、上海大眾,聯合發佈了』以人為本」的中國戰略。  
  該戰略基於三個重要支柱——客戶、員工與社會,這三大支柱將促成創新且滿足消費者需求的車型。   作為該戰略的首項活動,大眾汽車集團攜旗下各品牌與合資公司共同向中國家庭捐贈5000多個安全坐椅。   作為中國戰略的一部分,大眾汽車集團將在未來三年中不斷推進節能環保車型的生產,加強技術創新,推出一系列低排放車型。據大眾汽車集團總裁兼CEO海茲曼介紹,大眾未來每一款新車型的燃油效率都將比其上一代車型提高20%。   大眾汽車集團已宣佈其新能源汽車戰略,計畫在2018年之前再推出超過15款電動車新車型,並從2016年開始國產其中多款車型。到2018年,大眾汽車集團在中國的國產車型將超過35款。   文章來源:新京報

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

【其他文章推薦】

※USB CONNECTOR掌控什麼技術要點? 帶您認識其相關發展及效能

※評比前十大台北網頁設計、台北網站設計公司知名案例作品心得分享

※智慧手機時代的來臨,RWD網頁設計已成為網頁設計推薦首選

全球電動車市場加溫 鋰電池原料價格飆漲

根據 《日本經濟新聞》 的報導,由於全世界快速發展環保電動車產業的緣故,使得電動車中重要的零組件-鋰電池,其主要的元素稀有金屬 「鋰」,1 年來的國際價格急劇上漲,僅短短1 年的時間,「鋰」 的價格就暴漲3 倍。不但,使得全球主要供應商開啟新產線,以滿足市場的需求之外,預估供給不足的情況也將持續到2019 至2020 年後。

報導中指出,稀有金屬 「鋰」 被廣泛用於生産環保車的充電電池。由於全球性的電動環保車增産,因此針對環保車電池的需求急劇增加。隨著國際 「鋰」 價格的高漲,包括以生產電動環保車電池為主的日本市場,其國內交易價格也呈上漲態勢。

報導中分析,從「鋰」的消費量觀察,中國佔全球市場的40% ,為世界最大需求國。這也使得中國國內的 「鋰」 現貨價格成為國際價格指標之一。這一現貨價格在2016 年初小幅下跌之後就一路大漲,到7 月中旬的價格為1 噸人民幣12.9 萬元左右(折合新台幣約61.43 萬元),達到1 年前價格的3 倍。

至於,中國的 「鋰」 需求量的快速增加,則是反映了中國為了改善日益嚴重的空氣污染,正加快普及純電動汽車 (EV) 和插電式混合動力車 (PHV) 的趨勢。除了消費者購買電動環保車可獲得政府補貼之外,政府還積極推廣搭載鋰電池公共汽車,這使得中國車載電池需要的 「鋰」 採購量因此大幅增加。

而除了中國之外,美國電動車廠商特斯拉 (TESLA) 的需求成長,也是 「鋰」 價格高漲的原因之一。日前,TESLA 預定於2017 年供貨的 「Model3」 電動車預售熱絡,造成鋰電池供應不足的情況。目前,為TESLA 供應車載電池的松下 (Panasonic) ,日前決定提前啟動與TESLA 在美國設立的車載電池工廠生産,計劃在2016 年底前啟動量産。

目前,「鋰」 供不應求的狀況,也使得 「鋰」 的主要供應商智利的SQM 、美國FMC 、美國雅保化工 (Albemarle) ,以及一部分中國企業開始計劃今後在北美和澳大利亞等地新設生産線。不過,即使如此,仍有不少業界人士認為,供給不足的狀況也將持續到2019 至2020 年。

根據統計,2015 年全球的「鋰」(以碳酸鋰來換算)總需求為17 萬噸。其中,鋰電池的生產需求6 萬噸。預計到2020 年時,全球總需求將提高至28 萬噸,而針對鋰電池的生產需求,將增加到16.5 萬噸。

根據日本獨立行政法人 「石油天然氣金屬礦物資源機構」(JOGMEC) 統計,在電池成本中,「鋰」 僅佔不到10% 。因此,對最終産品價格的影響有限。在日本國內,目前鋰電池的主要材料廠商尚未能徹底將原料價格的上漲轉嫁到産品價格中。不過,除鋰電池以外的工業用途,「鋰」 目前也正陷入短缺的情況。未來的價格波動,恐將在所難免。

(本文授權轉載自《》──〈〉)

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

【其他文章推薦】

※台北網頁設計公司這麼多,該如何挑選?? 網頁設計報價省錢懶人包"嚨底家"

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

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