08_提升方法_AdaBoost算法

  今天是2020年2月24日星期一。一個又一個意外因素串連起2020這不平凡的一年,多麼希望時間能夠倒退。曾經覺得電視上科比的畫面多麼熟悉,現在全成了陌生和追憶。

GitHub:https://github.com/wangzycloud/statistical-learning-method

提升方法

引入

  提升方法是一種常用的統計學習方法,還是比較容易理解的。在分類問題中,通過改變訓練樣本的權重,學習多個分類器,並將這些分類器進行線性組合,從而提高分類的性能。其實說白了,就是一個人干不好的活,我讓兩個人干;兩個人干不好,那就三個人四個人都來干。但是人多了不能像三個和尚那樣沒水喝,都不幹活。包工頭要採取一些措施,措施一:一個人幹活的時候,哪裡乾的不好?就讓第二個人補充在這個地方;兩個人幹活的時候,哪裡乾的不好?就讓第三個人補充在這個地方。措施二:這三四個人在同一個地方幹活,怎樣確定這個活的結果乾的好不好呢?有的人幹活細緻認真,自然對結果增益大;幹活粗糙的,對結果增益不多,因此需要有一種組合策略進行判斷。通過幾個人共同努力,就解決了一個人干不好的事情。

  接下來的內容,將按照書中順序,先介紹提升方法的思路和代表性的提升算法AdaBoost;再從前向分步加法模型角度解釋AdaBoost;最後看一個具體實例—提升樹。

提升方法AdaBoost算法

  提升方法基於這樣一種思想:對於一個複雜的任務來說,將多個專家的判斷進行適當的綜合所得出的判斷,要比其中任何一個專家單獨的判斷好。實際上,就是“三個臭皮匠頂個諸葛亮“的道理。書中上來提到了兩個稍晦澀的概念“強可學習”、“弱可學習”,下文沒有繼續闡述這兩個概念,這裏簡單的複述一下。在概率近似正確學習的框架中(不懂),一個概念,如果存在一個多項式的學習算法能夠學習它,並且正確率很高,那麼就稱這個概念是強可學習的;一個概念,如果存在一個多項式的學習算法能夠學習它,學習的正確率僅比隨機猜測略好,那麼就稱這個概念是弱可學習的。這兩個概念之間的相互關係,被證明是等價的,也就是說在一定的學習框架下,一個概念是強可學習的充分必要條件是這個概念是弱可學習的。(模型效果好==》強可學習;模型效果差==》弱可學習;兩者有聯繫)

  這樣一來,在學習的過程中如果已經發現了“弱學習算法”,那麼能否將它提升為“強學習算法”。我們知道,發現弱學習算法通常要比發現強學習算法容易得多,如何具體實施提升,是我們開發提升方法時所要解決的問題。

  對於分類問題而言,給定一個訓練數據樣本集,求比較粗糙的分類規則(弱分類器)要比求精確的分類規則容易得多。提升方法就是從弱學習算法出發,反覆學習,得到一系列弱分類器(又稱為基本分類器),然後組合這些弱分類器,構成一個強分類器。並且大多數的提升方法都是改變訓練數據的概率分佈(訓練數據的權值分佈),針對不同的訓練數據分佈調用弱學習算法學習一系列弱分類器。可以理解為難分的數據加大權重,讓下一個弱分類器重點學習該數據。

  這樣,對於提升方法來說,有兩個問題需要解決:一是在每一輪如何改變訓練數據的權值或概率分佈;二是如何將弱分類器組合成一個強分類器。我們接下來要學習的AdaBoost算法,針對第一個問題,提高那些被前一輪分類器錯誤分類樣本的權值,而降低那些被正確分類樣本的權值。這樣一來,那些沒有得到正確分類的數據,由於其權重的加大而受到后一輪弱分類器的更多關注。於是,分類問題被一系列的弱分類器“分而治之”。針對第二個問題,AdaBoost採取加權多數表決的方法。具體的,加大分類誤差率小的弱分類器的權值,使其在表決中起較大的作用;減小分類誤差率大的弱分類器的權值,使其在表決中起到較小的作用。

AdaBoost算法

  這裏先簡單的羅列AdaBoost算法過程,先趕完整體進度,後期編寫代碼時再整理細節。

  假設給定一個二類分類的訓練數據集

AdaBoost算法各個步驟的說明:

  步驟(1)假設訓練數據集具有均勻的權值分佈,即每個訓練樣本在基本分類器的學習中作用相同,這一假設保證第一步能夠在原始數據上學習基本分類器G1(x)。

  步驟(2)AdaBoost反覆學習基本分類器,在每一輪m=1,2,…,M順次執行四步操作:

  第a步,使用當前分佈Dm加權的訓練數據集,學習基本分類器Gm(x);

  第b步,計算基本分類器Gm(x)在加權訓練數據集上的分類誤差率。實際上,第m個分類器的分類誤差率,就是被分類器Gm(x)誤分類樣本的權值之和,這表明權重大的樣本起的作用更大一些。如果將其誤分類,則誤差率大大增加,從而進一步影響Gm(x)的係數;

  第c步,從公式8.8中,可以看出em≤1/2時,αm≥0,並且αm隨着em的減小而增大,所以分類誤差率越小的基本分類器在最終分類器中的作用越大;

  第d步,更新訓練數據的權值分佈為下一輪做準備。可以看到,誤分類樣本在下一輪學習中起更大的作用,不改變所給的訓練數據,而不斷改變訓練數據權值的分佈,使得訓練數據在基本分類器的學習中起不同的作用。

  步驟(3)線性組合f(x)實現M個基本分類器的加權表決。係數αm表示了基本分類器Gm(x)的重要性,這裏所有αm之和並不為1。f(x)的符號決定實例x的類,f(x)的絕對值表示分類的確信度。

AdaBoost的例子

AdaBoost算法的訓練誤差分析

  該訓練誤差分析部分,用證明出來的定理形式,表明AdaBoost算法的最基本性質就是能在學習過程中不斷減少訓練誤差。也就是“該算法能夠降低在訓練數據集的分類誤差率”這件事用數學方式證明了。分別是AdaBoost訓練誤差上界定理8.1、二分類問題的AdaBoost訓練誤差上界定理8.2和推論8.1。

  該定理說明,可以在每一輪選取適當的Gm使得Zm最小,從而使訓練誤差下降的最快。對於二分類問題,有定理8.2。

  該推論表明,在此條件下,AdaBoost的訓練誤差是以指數速率下降的(看着像,不懂)。

AdaBoost算法的解釋

  本節內容從另外一個已經驗證的模型來分析AdaBoost算法,並得到該算法的另外解釋(我的理解是:AdaBoost算法是一般化的加法模型的特例,現在要從加法模型的角度分析)。可以認為AdaBoost算法是模型為加法模型、損失函數為指數函數、學習算法為前向分佈算法時的二類分類學習方法。接下來的內容,先對加法模型及前向分佈算法做簡單介紹,通過對損失函數的分析,得到與AdaBoost算法等價的參數表示。

  考慮加法模型,b(x)函數相當於基分類器:

  在給定訓練數據及損失函數L(y,f(x))的條件下,學習加法模型f(x)成為經驗風險極小化及損失函數極小化問題:

  一般來說,加法模型f(x)中的M次基函數相加模型是一個複雜的優化問題,利用前向分佈算法可以求解該優化問題。前向分佈算法的思想是:因為學習的是加法模型,如果能夠從前向後,每一步只學習一個基函數及其係數,逐步逼近優化目標8.14,那麼就可以簡化優化的複雜度。具體的,每一步只需優化以下損失函數(相當於每一步優化一個基函數,優化一個前進一個):

  那麼,前向分佈算法如下:

  本來公式8.14中的同時求解從m=1到M所有參數β、γ的優化問題,通過前向分佈算法簡化成了逐次求解各個β、γ的優化問題。

  那麼,前向分佈算法與AdaBoost算法有什麼聯繫呢?我們可以用定理的形式敘述之間的聯繫,也就是我們可以由前向分佈算法推導出AdaBoost。定理如下:

  以上內容直接截圖了。本是作為筆記進行整理,數學推導插不上解釋的嘴。要是以後文章被看到的多了,手推一下,再把內容整理上來。

提升樹

  我們知道,提升方法實際上是採用加法模型(即基函數的線性組合)與前向分步算法。本節提升樹是以決策樹作為基函數的提升方法,對分類問題決策樹是二叉分類樹,對回歸問題決策樹是二叉回歸樹。提升樹被認為是統計學習中性能最好的方法之一。

  在例8.1中看到的基本分類器x<v或x>v,可以看作是一個根節點直接連接兩個恭弘=叶 恭弘節點的簡單決策樹,即所謂的決策樹樁。提升樹模型可以表示為決策樹的加法模型:

  即使數據中的輸入與輸出之間的關係很複雜,樹的線性組合都可以很好地擬合訓練數據。分類問題與回歸問題的區別主要在於使用的損失函數不同,回歸問題中一般使用平方誤差損失函數,分類問題一般使用指數損失函數。對於二分類問題,提升樹算法只需要將AdaBoost算法8.1中的基本分類器限製為二類分類即可。下面看一下用於回歸問題的提升樹:

  R是當前模型擬合數據的殘差,所以對回歸問題的提升樹算法來說,只需要簡單的擬合當前模型的殘差即可。具體算法如下:

  具體例子8.2:

  算法8.1代碼已上傳至github,先理解決策樹章節的算法5.5,該提升樹會非常好理解~

代碼效果

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

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

RocketMQ系列(二)環境搭建

RocketMQ的基本概念在上一篇中給大家介紹了,這一節將給大家介紹環境搭建。RocketMQ中最基礎的就是NameServer,我們先來看看它是怎麼搭建的。

NameServer

RocketMQ要求的環境是JDK8以上,我們先檢查一下環境,

[root@centOS-1 ~]# java -version
openjdk version "11.0.3" 2019-04-16 LTS
OpenJDK Runtime Environment 18.9 (build 11.0.3+7-LTS)
OpenJDK 64-Bit Server VM 18.9 (build 11.0.3+7-LTS, mixed mode, sharing)

我的這個機器並沒有刻意的安裝JDK,而是系統自帶的OpenJDK 11,這應該也是沒有問題的。然後我們從RocketMQ官網下載最新的安裝包,並且上傳到/opt目錄下,

[root@centOS-1 opt]# ll
-rw-r--r--.  1 root  root 13838456 6月   3 08:49 rocketmq-all-4.7.0-bin-release.zip

然後我們解壓這個zip包,

[root@centOS-1 opt]# unzip rocketmq-all-4.7.0-bin-release.zip

這裏使用的是unzip命令,如果你的機器里沒有這個命令,可以使用yum install安裝一個。解壓以後,進入到RocketMQ的主目錄,並且啟動一下NameServer。

[root@centOS-1 opt]# cd rocketmq-all-4.7.0-bin-release
[root@centOS-1 rocketmq-all-4.7.0-bin-release]# ./bin/mqnamesrv
OpenJDK 64-Bit Server VM warning: Option UseConcMarkSweepGC was deprecated in version 9.0 and will likely be removed in a future release.
Unrecognized VM option 'UseCMSCompactAtFullCollection'
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.

這裏出了一個錯誤Error: Could not create the Java Virtual Machine,這是由於RocketMQ的啟動文件都是按照JDK8配置的,而我們這裏使用的是OpenJDK11,有很多命令參數不支持導致的,如果小夥伴們使用的是JDK8,正常啟動是沒有問題的。

在這裏我們改一下RocketMQ的啟動文件,

[root@centOS-1 rocketmq-all-4.7.0-bin-release]# vim bin/runserver.sh 
export JAVA_HOME
export JAVA="$JAVA_HOME/bin/java"
export BASE_DIR=$(dirname $0)/..
#在CLASSPATH中添加RocketMQ的lib目錄
#export CLASSPATH=.:${BASE_DIR}/conf:${CLASSPATH}
export CLASSPATH=.:${BASE_DIR}/lib/*:${BASE_DIR}/conf:${CLASSPATH}

修改的地方我們增加了註釋,在ClassPath里添加了lib目錄,然後在這個文件的末尾,註釋掉升級JDK后不支持的幾個參數,

JAVA_OPT="${JAVA_OPT} -server -Xms4g -Xmx4g -Xmn2g -XX:MetaspaceSize=128m -XX:MaxMetaspaceSize=320m"
#JAVA_OPT="${JAVA_OPT} -XX:+UseConcMarkSweepGC -XX:+UseCMSCompactAtFullCollection -XX:CMSInitiatingOccupancyFraction=70 -XX:+CMSParallelRemarkEnabled -XX:SoftRefLRUPolicyMSPerMB=0 -XX:+CMSClassUnloadingEnabled -XX:SurvivorRatio=8  -XX:-UseParNewGC"
JAVA_OPT="${JAVA_OPT} -verbose:gc -Xloggc:${GC_LOG_DIR}/rmq_srv_gc_%p_%t.log -XX:+PrintGCDetails"
#JAVA_OPT="${JAVA_OPT} -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=5 -XX:GCLogFileSize=30m"
JAVA_OPT="${JAVA_OPT} -XX:-OmitStackTraceInFastThrow"
JAVA_OPT="${JAVA_OPT} -XX:-UseLargePages"
#JAVA_OPT="${JAVA_OPT} -Djava.ext.dirs=${JAVA_HOME}/jre/lib/ext:${BASE_DIR}/lib"
#JAVA_OPT="${JAVA_OPT} -Xdebug -Xrunjdwp:transport=dt_socket,address=9555,server=y,suspend=n"
JAVA_OPT="${JAVA_OPT} ${JAVA_OPT_EXT}"
JAVA_OPT="${JAVA_OPT} -cp ${CLASSPATH}"

好了,修改完以後,我們保存退出,再次啟動,這次我們在後台啟動NameServer,

[root@centOS-1 rocketmq-all-4.7.0-bin-release]# nohup ./bin/mqnamesrv &

[root@centOS-1 rocketmq-all-4.7.0-bin-release]# tail -500f ~/logs/rocketmqlogs/namesrv.log 

然後查看一下日誌,在日誌中看到main - The Name Server boot success. serializeType=JSON,說明NameServer啟動成功了。

單點的NameServer肯定是不能滿足我們的要求的,怎麼也要做個集群吧。NameServer是一個無狀態的服務,節點之間沒有任何數據往來,所以NameServer的集群搭建不需要任何的配置,只需要啟動多個NameServer服務就可以了,它不像Zookeeper集群搭建那樣,需要配置各個節點。在這裏我們就啟動3個NameServer節點吧,對應我們的3台機器,192.168.73.130,192.168.73.131,192.168.73.132

Broker

NameServer集群搭建完成,下面就搭建Broker了,Broker呢,我們要搭建一個兩主兩從結構的,主從之間異步備份,保存磁盤也是使用異步的方式。如果你對主從同步和保存磁盤的方式還不了解,看看上一節的內容吧。異步兩主兩從這種結構的配置,在RocketMQ中已經有例子了,我們先一下配置文件。

[root@centOS-1 rocketmq-all-4.7.0-bin-release]# vim conf/2m-2s-async/broker-a.properties 

這個配置文件是broker-a“主”的配置文件,

brokerClusterName=RocketMQ-Cluster
brokerName=broker-a
brokerId=0
deleteWhen=04
fileReservedTime=48
brokerRole=ASYNC_MASTER
flushDiskType=ASYNC_FLUSH

其中,

  • brokerClusterName是MQ集群的名稱,我們改為RocketMQ-Cluster。
  • brokerName是隊列的名字,配置為broker-a。
  • brokerId是隊列的id,0代表是“主”,其他正整數代表着“從”。
  • deleteWhen=04 代表着commitLog過期了,就會被刪除。
  • fileReservedTime是commitLog的過期時間,單位是小時,這裏配置的是48小時。
  • brokerRole,隊列的角色,ASYNC_MASTER是異步主。
  • flushDiskType,保存磁盤的方式,異步保存。

再看看broker-a的從配置,

brokerClusterName=RocketMQ-Cluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

其中,集群的名字一樣,隊列的名字一樣,只是brokerId和brokerRole不一樣,這裏的配置代表着它是隊列broker-a的“從”。broker-b的配置和broker-a是一樣的,只是brokerName不一樣而已,在這裏就不貼出來了。

兩主兩從的配置文件都已經配置好了,我們來規劃一下,我們的NameServer是3台192.168.73.130,192.168.73.131,192.168.73.132,broker按照如下部署:

  • broker-a(主):192.168.73.130
  • broker-a(從):192.168.73.131
  • broker-b(主):192.168.73.131
  • broker-b(從):192.168.73.130

接下來,我們啟動broker,在192.168.73.130上啟動 broker-a(主)和broker-b(從)。和NameServer一樣,我們需要修改一下啟動的腳本,否則也會報錯誤。我們修改的是runbroker.sh這個文件,修改的內容和前面是一樣的,這裏就不贅述了。在啟動文件中,內存大小配置的是8g,如果機器的內存不夠,可以適當減少一下內存。

這裏還要做個說明,由於我們在一台機器上啟動了兩個broker實例,監聽端口和日誌存儲的路徑都會有衝突。那麼我們在192.168.73.130的broker-b(從)的配置文件中,增加配置,如下:

brokerClusterName=RocketMQ-Cluster
brokerName=broker-b
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

listenPort=11911
storePathRootDir=~/store-b                       

broker-b(從)的端口改為11911,區別默認的10911;storePathRootDir改為~/store-b,區分默認的~/store

同樣在192.168.73.131的broker-a(從)也要做修改,如下:

brokerClusterName=RocketMQ-Cluster
brokerName=broker-a
brokerId=1
deleteWhen=04
fileReservedTime=48
brokerRole=SLAVE
flushDiskType=ASYNC_FLUSH

listenPort=11911
storePathRootDir=~/store-a

然後,我們在192.168.73.130上啟動,如下,

nohup ./bin/mqbroker -c conf/2m-2s-async/broker-a.properties -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876' &

nohup ./bin/mqbroker -c conf/2m-2s-async/broker-b-s.properties -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876' &

  • -c 指定的是配置文件,分別指定的是broker-a(主)和broker-b(從)。
  • -n 指定的是NameServer的地址,指定了3個,用,隔開。

再在192.168.73.131上啟動,如下,

nohup ./bin/mqbroker -c conf/2m-2s-async/broker-b.properties -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876' &

nohup ./bin/mqbroker -c conf/2m-2s-async/broker-a-s.properties -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876' &

好,如果沒有出現錯誤,到這裏,集群就搭建成功了。這裏邊有個小坑,大家一定要注意,就是-n後面的地址一定要用”括起來,並且地址之間要用;,否則,我們在查看集群列表時,是看不到的。

mqadmin

集群已經搭建好了,我們可以查看一下集群的狀態,查看集群的狀態,我們可以使用mqadmin,命令如下:

./bin/mqadmin clusterlist -n '192.168.73.130:9876;192.168.73.131:9876;192.168.73.132:9876'
  • clusterlist 是查看集群的命令
  • -n 後面是NameServer的地址,注意這裏也要用”括起來,並且地址之間要用;隔開

執行結果如下:

#Cluster Name     #Broker Name            #BID  #Addr                  #Version                #InTPS(LOAD)       #OutTPS(LOAD) #PCWait(ms) #Hour #SPACE
RocketMQ-Cluster  broker-a                0     192.168.73.130:10911   V4_7_0                   0.00(0,0ms)         0.00(0,0ms)          0 442039.47 -1.0000
RocketMQ-Cluster  broker-a                1     192.168.73.131:11911   V4_7_0                   0.00(0,0ms)         0.00(0,0ms)          0 442039.47 0.2956
RocketMQ-Cluster  broker-b                0     192.168.73.131:10911   V4_7_0                   0.00(0,0ms)         0.00(0,0ms)          0 442039.47 0.2956
RocketMQ-Cluster  broker-b                1     192.168.73.130:11911   V4_7_0                   0.00(0,0ms)         0.00(0,0ms)          0 442039.47 -1.0000

我們可以看到在這個NameServer中心中,只有一個broker集群RocketMQ-Cluster,有兩個broker,broker-abroker-b,而且每一個broker都有主從,broker的ip我們也可以看到。

好了~ 到這裏RocketMQ的集群就搭建好了,有問題評論區留言哦~~

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

【其他文章推薦】

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

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

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

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

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

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

※回頭車貨運收費標準

不知道怎麼提高代碼質量?來看看這幾種設計模式吧!

提高代碼質量的目的

程序猿的本職工作就是寫代碼,寫出高質量的代碼應該是我們的追求和對自己的要求,因為:

  1. 高質量的代碼往往意味着更少的BUG,更好的模塊化,是我們擴展性,復用性的基礎
  2. 高質量的代碼也意味着更好的書寫,更好的命名,有利於我們的維護

什麼代碼算好的質量

怎樣來定義代碼質量的”好”,業界有很多標準,本文認為好的代碼應該有以下特點:

  1. 代碼整潔,比如縮進之類的,現在有很多工具可以自動解決這個問題,比如eslint。
  2. 結構規整,沒有漫長的結構,函數拆分合理,不會來一個幾千行的函數,也不會有幾十個if...else。這要求寫代碼的人有一些優化的經驗,本文會介紹幾種模式來優化這些情況。
  3. 閱讀起來好理解,不會出現一堆a,b,c這種命名,而是應該盡量語義化,變量名和函數名都盡量有意義,最好是代碼即註釋,讓別人看你的代碼就知道你在幹嘛。

本文介紹的設計模式主要有策略/狀態模式外觀模式迭代器模式備忘錄模式

策略/狀態模式

策略模式基本結構

假如我們需要做一個計算器,需要支持加減乘除,為了判斷用戶具體需要進行哪個操作,我們需要4個if...else來進行判斷,如果支持更多操作,那if...else會更長,不利於閱讀,看着也不優雅。所以我們可以用策略模式優化如下:

function calculator(type, a, b) {
  const strategy = {
    add: function(a, b) {
      return a + b;
    },
    minus: function(a, b) {
      return a - b;
    },
    division: function(a, b) {
      return a / b;
    },
    times: function(a, b) {
      return a * b;
    }
  }
  
  return strategy[type](a, b);
}

// 使用時
calculator('add', 1, 1);

上述代碼我們用一個對象取代了多個if...else,我們需要的操作都對應這個對象裏面的一個屬性,這個屬性名字對應我們傳入的type,我們直接用這個屬性名字就可以獲取對應的操作。

狀態模式基本結構

狀態模式和策略模式很像,也是有一個對象存儲一些策略,但是還有一個變量來存儲當前的狀態,我們根據當前狀態來獲取具體的操作:

function stateFactor(state) {
  const stateObj = {
    status: '',
    state: {
      state1: function(){},
      state2: function(){},
    },
    run: function() {
      return this.state[this.status];
    }
  }
  
  stateObj.status = state;
  return stateObj;
}

// 使用時
stateFactor('state1').run();

if...else其實是根據不同的條件來改變代碼的行為,而策略模式和狀態模式都可以根據傳入的策略或者狀態的不同來改變行為,所有我們可以用這兩種模式來替代if...else

實例:訪問權限

這個例子的需求是我們的頁面需要根據不同的角色來渲染不同的內容,如果我們用if...else寫就是這樣:

// 有三個模塊需要显示,不同角色看到的模塊應該不同
function showPart1() {}
function showPart2() {}
function showPart3() {}

// 獲取當前用戶的角色,然後決定显示哪些部分
axios.get('xxx').then((role) => {
  if(role === 'boss'){
    showPart1();
    showPart2();
    showPart3();
  } else if(role === 'manager') {
    showPart1();
    showPart2();
  } else if(role === 'staff') {
    showPart3();
  }
});

上述代碼中我們通過API請求獲得了當前用戶的角色,然後一堆if...else去判斷應該显示哪些模塊,如果角色很多,這裏的if...else就可能很長,我們可以嘗試用狀態模式優化下:

// 先把各種角色都包裝到一個ShowController類裏面
function ShowController() {
  this.role = '';
  this.roleMap = {
    boss: function() {
      showPart1();
      showPart2();
      showPart3();
    },
    manager: function() {
      showPart1();
    	showPart2();
    },
    staff: function() {
      showPart3();
    }
  }
}

// ShowController上添加一個實例方法show,用來根據角色展示不同的內容
ShowController.prototype.show = function() {
  axios.get('xxx').then((role) => {
    this.role = role;
    this.roleMap[this.role]();
  });
}

// 使用時
new ShowController().show();

上述代碼我們通過一個狀態模式改寫了訪問權限模塊,去掉了if...else,而且不同角色的展示都封裝到了roleMap裏面,後面要增加或者減少都會方便很多。

實例:複合運動

這個例子的需求是我們現在有一個小球,我們需要控制他移動,他移動的方向可以是上下左右,還可以是左上,右下之類的複合運動。如果我們也用if...else來寫,這頭都會寫大:

// 先來四個方向的基本運動
function moveUp() {}
function moveDown() {}
function moveLeft() {}
function moveRight() {}

// 具體移動的方法,可以接收一個或兩個參數,一個就是基本操作,兩個參數就是左上,右下這類操作
function move(...args) {
  if(args.length === 1) {
    if(args[0] === 'up') {
      moveUp();
    } else if(args[0] === 'down') {
      moveDown();        
    } else if(args[0] === 'left') {
      moveLeft();        
    } else if(args[0] === 'right') {
      moveRight();        
    }
  } else {
    if(args[0] === 'left' && args[1] === 'up') {
      moveLeft();
      moveUp();
    } else if(args[0] === 'right' && args[1] === 'down') {
      moveRight();
      moveDown();
    }
    // 後面還有很多if...
  }
}

可以看到這裏if...else看得我們頭都大了,還是用策略模式來優化下吧:

// 建一個移動控制類
function MoveController() {
  this.status = [];
  this.moveHanders = {
    // 寫上每個指令對應的方法
    up: moveUp,
    dowm: moveDown,
    left: moveLeft,
    right: moveRight
  }
}

// MoveController添加一個實例方法來觸發運動
MoveController.prototype.run = function(...args) {
  this.status = args;
  this.status.forEach((move) => {
    this.moveHanders[move]();
  });
}

// 使用時
new MoveController().run('left', 'up')

上述代碼我們也是將所有的策略都封裝到了moveHanders裏面,然後通過實例方法run傳入的方法來執行具體的策略。

外觀模式

基本結構

當我們設計一個模塊時,裏面的方法可以會設計得比較細,但是暴露給外面使用的時候,不一定非得直接暴露這些細小的接口,外部使用者需要的可能是組合部分接口來實現某個功能,我們暴露的時候其實就可以將這個組織好。這就像餐廳裏面的菜單,有很多菜,用戶可以一個一個菜去點,也可以直接點一個套餐,外觀模式提供的就類似於這樣一個組織好的套餐:

function model1() {}

function model2() {}

// 可以提供一個更高階的接口,組合好了model1和model2給外部使用
function use() {
  model2(model1());
}

實例:常見的接口封裝

外觀模式說起來其實非常常見,很多模塊內部都很複雜,但是對外的接口可能都是一兩個,我們無需知道複雜的內部細節,只需要調用統一的高級接口就行,比如下面的選項卡模塊:

// 一個選項卡類,他內部可能有多個子模塊
function Tab() {}

Tab.prototype.renderHTML = function() {}    // 渲染頁面的子模塊
Tab.prototype.bindEvent = function() {}    // 綁定事件的子模塊
Tab.prototype.loadCss = function() {}    // 加載樣式的子模塊

// 對外不需要暴露上面那些具體的子模塊,只需要一個高級接口就行
Tab.prototype.init = function(config) {
  this.loadCss();
  this.renderHTML();
  this.bindEvent();
}

上述代碼這種封裝模式非常常見,其實也是用到了外觀模式,他當然也可以暴露具體的renderHTMLbindEventloadCss這些子模塊,但是外部使用者可能並不關心這些細節,只需要給一個統一的高級接口就行,就相當於改變了外觀暴露出來,所以叫外觀模式

實例:方法的封裝

這個例子也很常見,就是把一些類似的功能封裝成一個方法,而不是每個地方去寫一遍。在以前還是IE主導天下的時候,我們需要做很多兼容的工作,僅僅是一個綁定事件就有addEventListenerattachEvent,onclick等,為了避免每次都進行這些檢測,我們可以將他們封裝成一個方法:

function addEvent(dom, type, fn) {
  if(dom.addEventListener) {
    return dom.addEventListener(type, fn, false);
  } else if(dom.attachEvent) {
    return dom.attachEvent("on" + type, fn);
  } else {
    dom["on" + type] = fn;
  }
}

然後將addEvent暴露出去給外面使用,其實我們在實際編碼時經常這樣封裝方法,只是我們自己可能沒意識到這個是外觀模式。

迭代器模式

基本結構

迭代器模式模式在JS裏面很常見了,數組自帶的forEach就是迭代器模式的一個應用,我們也可以實現一個類似的功能:

function Iterator(items) {
  this.items = items;
}

Iterator.prototype.dealEach = function(fn) {
  for(let i = 0; i < this.items.length; i++) {
    fn(this.items[i], i);
  }
}

上述代碼我們新建了一個迭代器類,構造函數接收一個數組,實例方法dealEach可以接收一個回調,對實例上的items每一項都執行這個回調。

實例:數據迭代器

其實JS數組很多原生方法都用了迭代器模式,比如findfind接收一個測試函數,返回符合這個測試函數的第一個數據。這個例子要做的是擴展這個功能,返回所有符合這個測試函數的數據項,而且也可以接收兩個參數,第一個參數是屬性名,第二個參數是值,同樣返回所有該屬性與值匹配的項:

// 外層用一個工廠模式封裝下,調用時不用寫new
function iteratorFactory(data) {
  function Iterator(data) {
    this.data = data;
  }
  
  Iterator.prototype.findAll = function(handler, value) {
    const result = [];
    let handlerFn;
    // 處理參數,如果第一個參數是函數,直接拿來用
    // 如果不是函數,就是屬性名,給一個對比的默認函數
    if(typeof handler === 'function') {
      handlerFn = handler;
    } else {
      handlerFn = function(item) {
        if(item[handler] === value) {
          return true;
        }
        
        return false;
      }
    }
    
    // 循環數據裏面的每一項,將符合結果的塞入結果數組
    for(let i = 0; i < this.data.length; i++) {
      const item = this.data[i];
      const res = handlerFn(item);
      if(res) {
        result.push(item)
      }
    }
    
    return result;
  }
  
  return new Iterator(data);
}

// 寫個數據測試下
const data = [{num: 1}, {num: 2}, {num: 3}];
iteratorFactory(data).findAll('num', 2);    // [{num: 2}]
iteratorFactory(data).findAll(item => item.num >= 2); // [{num: 2}, {num: 3}]

上述代碼封裝了一個類似數組find的迭代器,擴展了他的功能,這種迭代器非常適合用來處理API返回的大量結構相似的數據。

備忘錄模式

基本結構

備忘錄模式類似於JS經常使用的緩存函數,內部記錄一個狀態,也就是緩存,當我們再次訪問的時候可以直接拿緩存數據:

function memo() {
  const cache = {};
  
  return function(arg) {
    if(cache[arg]) {
      return cache[arg];
    } else {
      // 沒緩存的時候先執行方法,得到結果res
      // 然後將res寫入緩存
      cache[arg] = res;
      return res;
    }
}

實例:文章緩存

這個例子在實際項目中也比較常見,用戶每次點進一個新文章都需要從API請求數據,如果他下次再點進同一篇文章,我們可能希望直接用上次請求的數據,而不再次請求,這時候就可以用到我們的備忘錄模式了,直接拿上面的結構來用就行了:

function pageCache(pageId) {
  const cache = {};
  
  return function(pageId) {
    // 為了保持返回類型一致,我們都返回一個Promise
    if(cache[pageId]) {
      return Promise.resolve(cache[pageId]);
    } else {
      return axios.get(pageId).then((data) => {
        cache[pageId] = data;
        return data;
      })
    }
  }
}

上述代碼用了備忘錄模式來解決這個問題,但是代碼比較簡單,實際項目中可能需求會更加複雜一些,但是這個思路還是可以參考的。

實例:前進後退功能

這個例子的需求是,我們需要做一個可以移動的DIV,用戶把這個DIV隨意移動,但是他有時候可能誤操作或者反悔了,想把這個DIV移動回去,也就是將狀態回退到上一次,有了回退狀態的需求,當然還有配對的前進狀態的需求。這種類似的需求我們就可以用備忘錄模式實現:

function moveDiv() {
  this.states = [];       // 一個數組記錄所有狀態
  this.currentState = 0;  // 一個變量記錄當前狀態位置
}

// 移動方法,每次移動記錄狀態
moveDiv.prototype.move = function(type, num) {
  changeDiv(type, num);       // 偽代碼,移動DIV的具體操作,這裏並未實現
  
  // 記錄本次操作到states裏面去
  this.states.push({type,num});
  this.currentState = this.states.length - 1;   // 改變當前狀態指針
}

// 前進方法,取出狀態執行
moveDiv.prototype.forward = function() {
  // 如果當前不是最後一個狀態
  if(this.currentState < this.states.length - 1) {
    // 取出前進的狀態
    this.currentState++;
    const state = this.states[this.currentState];
    
    // 執行該狀態位置
    changeDiv(state.type, state.num);
  }
}

// 後退方法是類似的
moveDiv.prototype.back = function() {
  // 如果當前不是第一個狀態
  if(this.currentState > 0) {
    // 取出後退的狀態
    this.currentState--;
    const state = this.states[this.currentState];
    
    // 執行該狀態位置
    changeDiv(state.type, state.num);
  }
}

上述代碼通過一個數組將用戶所有操作過的狀態都記錄下來了,用戶可以隨時在狀態間進行前進和後退。

總結

本文講的這幾種設計模式策略/狀態模式外觀模式迭代器模式備忘錄模式都很好理解,而且在實際工作中也非常常見,熟練使用他們可以有效減少冗餘代碼,提高我們的代碼質量。

  1. 策略模式通過將我們的if條件改寫為一條條的策略減少了if...else的數量,看起來更清爽,擴展起來也更方便。狀態模式策略模式很像,只是還多了一個狀態,可以根據這個狀態來選取具體的策略。
  2. 外觀模式可能我們已經在無意間使用了,就是將模塊一些內部邏輯封裝在一個更高級的接口內部,或者將一些類似操作封裝在一個方法內部,從而讓外部調用更加方便。
  3. 迭代器模式在JS數組上有很多實現,我們也可以模仿他們做一下數據處理的工作,特別適合處理從API拿來的大量結構相似的數據。
  4. 備忘錄模式就是加一個緩存對象,用來記錄之前獲取過的數據或者操作的狀態,後面可以用來加快訪問速度或者進行狀態回滾。
  5. 還是那句話,設計模式的重點在於理解思想,實現方式可以多種多樣。

本文是講設計模式的最後一篇文章,前面三篇是:

(500+贊!)不知道怎麼封裝代碼?看看這幾種設計模式吧!

(100+贊!)框架源碼中用來提高擴展性的設計模式

不知道怎麼提高代碼復用性?看看這幾種設計模式吧

文章的最後,感謝你花費寶貴的時間閱讀本文,如果本文給了你一點點幫助或者啟發,請不要吝嗇你的贊和GitHub小星星,你的支持是作者持續創作的動力。

本文素材來自於網易高級前端開發工程師微專業唐磊老師的設計模式課程。

作者博文GitHub項目地址: https://github.com/dennis-jiang/Front-End-Knowledges

作者掘金文章匯總:https://juejin.im/post/5e3ffc85518825494e2772fd

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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

《痞子衡嵌入式半月刊》 第 9 期

痞子衡嵌入式半月刊: 第 9 期

這裏分享嵌入式領域有用有趣的項目/工具以及一些熱點新聞,農曆年分二十四節氣,希望在每個交節之日準時發布一期。

本期刊是開源項目(GitHub: JayHeng/pzh-mcu-bi-weekly),歡迎提交 issue,投稿或推薦你知道的嵌入式那些事兒。

上期回顧 :《痞子衡嵌入式半月刊: 第 8 期》

嘮兩句

今天是芒種,芒種節氣在農耕上有着相當重要的意義,它指導着農事耕種。民諺有“芒種不種,再種無用”一說。

近期總理提出的地攤經濟正席捲全國,這是特殊時期的一種特殊經濟刺激手段。地攤經濟,是最傳統的經濟模式,這意味着人人可以無門檻做生意。還等什麼,痞子衡打算淘寶進一批7天無理由退貨的小玩意去步行街擺攤了。

本期共收錄 3條資訊、3個項目、1個工具、1個RT產品,希望對你有幫助!

資訊類

1、瑞芯微AI芯片加持百度飛槳,攜手加速AI應用落地

瑞芯微Rockchip近日宣布,旗下AI芯片RK1808、RK1806適配百度飛槳(PaddlePaddle)開源深度學習平台,充分兼容飛槳輕量化推理引擎Paddle Lite。此次瑞芯微與百度合作,旨在為AI行業賦能更多應用場景,加速AI產品落地進程。

資訊主頁: https://www.rock-chips.com/a/cn/news/rockchip/2020/0513/1084.html

瑞芯微AI芯片RK1808及RK1806,內置獨立NPU神經計算單元,INT8 算力高達3.0TOPs;採用22nm FD-SOI工藝,相同性能下的功耗相比主流28nm工藝產品降低約30%,在算力、性能、功耗等指標上均有優異的表現。經實測,瑞芯微AI芯片在Paddle Lite中運行MobileNet V1耗時僅為6.5 ms,幀率高達153.8 FPS,二者充分兼容並高效穩定運行。

如上圖所示的實測結果可以看出,與手機等移動端常用的國內外主流CPU相比,RK18系列NPU在MobileNET_v1的耗時更少,表現出色,由此證明在AI相關領域,如圖像分類、目標檢測、語音交互上,專用的AI芯片將帶來更出色的效果。

2、ZLG正式發布AWTK v1.4

近日,ZLG開源GUI引擎AWTK v1.4正式發布。相對於v1.3,新版本中完善了許多細節,增加了部分特性、控件以及API等,同時新增對iOS平台,以及Python、Java、C++等語言的支持。

資訊主頁: https://www.zlg.cn/index/pub/awtk.html

AWTK v1.4新增特性:

- 無文件系統時支持多主題
- OpenGL ES支持snapshot
- edit和mledit支持自己指定的軟鍵盤名稱
- 點擊鼠標右鍵觸發EVT_CONTEXT_MENU事件
- 增加awtk_main.inc,用於標準程序的主函數
- 用SDL重新實現PC版本的線程和同步相關函數 
- edit增加input_type為"custom_password"的類型

AWTK全稱為Toolkit AnyWhere,是ZLG傾心打造的一套基於C語言開發的GUI框架。旨在為用戶提供一個功能強大、高效可靠、簡單易用、可輕鬆做出炫酷效果的GUI引擎,支持跨平台同步開發,一次編程,到處編譯,跨平台使用。 AWTK還配套了所見即所得的AWTK Designer界面設計工具、經典示例以及入門指南文檔等 。

3、Microchip推出軟件開發工具包和神經網絡IP,助力低功耗FPGA智能嵌入式視覺解決方案

隨着人工智能、機器學習和物聯網的興起,對邊緣應用的解決方案提出了更高的需求,例如縮小體積、減少產熱、提高計算性能等。近日,Microchip Technology Inc.(美國微芯科技公司)發布的智能嵌入式視覺解決方案,致力於讓軟件開發人員能夠更方便地在PolarFire®現場可編程門陣列(FPGA)內執行算法,進而滿足邊緣應用對節能型推理功能日益增長的需求。

資訊主頁: http://www.microchip.com.cn/newcommunity/index.php?m=Article&a=show&id=594

VectorBlox加速器軟件開發工具包(SDK)是Microchip嵌入式解決方案組合的重要新成員。受益於FPGA的高運算能力,優秀的能耗比,FPGA成為了邊緣人工智能應用的理想選擇。Microchip的VectorBlox加速器SDK可以幫助開發人員在不學習FPGA工具流或者不具備設計經驗的前提下,利用Microchip PolarFire FPGA創建靈活的低功耗覆蓋神經網絡應用。

項目類

1、EmbedXrpc – 面向單片機的嵌入式小型RPC

EmbedXrpc類似於Google的gRPC,但是應用場景是單片機。RPC遠程調用極大的方便了開發,使得不必關注於協議解析,數據的序列化和反序列化等繁瑣的工作。

項目主頁: https://gitee.com/snikeguo/EmbedXrpc

EmbedXrpc應用場景:單片機近距離Client/Server交互場景(USB、串口、CAN(如J1939 、ISO15765協議等),)只要是流協議都支持。

項目提供了一個Sample1工程,這是最簡單的例子,除了main.cpp的代碼是手工寫的之外,其他的代碼都是工具生成的!此Sample1工程演示了:

1.客戶端每一秒向服務端發送1、2 服務端計算出來3后,把3發送給客戶端
2.服務端每1秒廣播當前的時間,客戶端打印到控制台上

2、m4vgalib – 基於單片機的VGA格式視頻生成庫

m4vgalib庫能使得微控制器(比如STM32F40x/1x)輸出高質量、高分辨率彩色圖形,並且這個庫使用很少的外部組件。

項目主頁: https://github.com/cbiffle/m4vgalib

該庫示例單片機STM32F407是一個Cortex-M4微控制器,它既沒有視頻控制器,也沒有足夠的RAM用於任何合理分辨率的幀緩衝區。m4vgalib圍繞這一點工作,生成穩定的800×600(或640×480)256色視頻。m4vgalib不使用視頻控制器,而是使用兩個定時器、一個DMA控制器和一個GPIO端口。

儘管m4vgalib在一個不是為任何類型設計的處理器上維護320Mb/s的數據流,但是大多數CPU和硬件資源都留給應用程序使用。為了避免引入抖動,應用程序必須同意在執行的某些階段避開AHB1。(比如可以使用中斷來通知應用程序。)

3、cmd-parser – 一個非常簡單好用的命令解析器

cmd-parser是一個非常簡單好用的命令解析器,佔用資源極少極少,採用哈希算法超快匹配命令。

項目主頁: https://github.com/jiejieTop/cmd-parser

簡單來說,如果你希望你的開發板,可以通過命令執行一些處理,比如說用串口發一個命令A,開發板就執行A的一些處理,或者,在調試某些AT模組的時候,當收到模組返回的一些指令后,自動執行一些處理。當然,還有其他的地方可以用得上的,大家可以自行挖掘!

cmd-parser特點如下:

1. 用戶無需關心命令的存儲區域與大小,由編譯器靜態分配。
2. 加入哈希算法超快速匹配命令,時間複雜度從O(n*m)變為O(n)。
3. 命令支持忽略大小寫。
4. 非常易用與非常簡潔的代碼(不足150行)。

工具類

1、SpeedCrunch – 高精度科學計算器

SpeedCrunch是一款開源的高精度科學計算器,具有快速,鍵盤驅動的用戶界面。

軟件主頁: https://github.com/speedcrunch/SpeedCrunch

SpeedCrunch內置80多個數學函數,允許用戶使用複數,数字基數,單位轉換等執行最高50位精度的計算,其自動完成功能可加快工作速度,提升效率。SpeedCrunch還內置公式簿,可方便用戶查看和插入常用的公式,例如圓錐體的體積計算公式等。

i.MXRT出品

1、魚躍醫療 – 高流量呼吸濕化治療儀

這款高流量呼吸濕化治療儀所支持的經鼻高流量氧療(HFNC)是一項新型的氧療方式,已被國內外大量臨床研究證實在缺氧改善治療中有很高的應用價值。HFNC通過柔軟的鼻塞導管將最高達75L/min流量的空氧混合氣體,經由加溫加濕后輸送給患者。

RT芯片:i.MXRT1052
產品主頁: https://www.yuyue.com.cn/index.php/news/info/795.html
參考售價: 未知

歡迎訂閱

文章會同時發布到我的 博客園主頁、CSDN主頁、微信公眾號 平台上。

微信搜索”痞子衡嵌入式“或者掃描下面二維碼,就可以在手機上第一時間看了哦。

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

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

台中搬家公司費用怎麼算?

19萬選中級車 敢選這幾輛說明你品位不是一般的高!

而在內飾上雪鐵龍C6的用料豪華程度也着實讓人驚嘆,大量的nappa真皮使用給車內營造了不錯的檔次感。內飾整體的設計比較的平直。在法系車的先產品中屬於十分保守的設計風格。這也比較能夠符合雪鐵龍C6中級車的特質。而且這樣的設計也比較的耐看。

如今中國消費者對於SUV的喜愛不用我過多的贅述。但是看乘用車的銷量分佈情況來看轎車賣的還是比SUV多。有那麼一些人對於高大空間靈活但是笨重耗油的SUV沒有什麼興趣,而對空間寬敞外觀體面的中級轎車有着特別的偏愛。

說到中級車很多人會想到商務中庸。但是並不是所有的中級車都是這樣。比如說下面這幾台中級車開出去你就足以彰顯你的獨特品位。

大眾邁騰

指導價:18.99-31.69萬

大眾2017款邁騰相對於老邁騰那個商務的外觀來說可以說年輕了十歲,甚至有些像大眾CC的感覺了。更加舒展的側面更加犀利的前臉都使得大眾新邁騰在外觀上更加具有設計感。而複雜的燈腔結構、大量的鍍鉻裝飾條的使用以及橫平豎直的直線條都讓這款新邁騰的外觀呈現出了不錯的精緻感。

而在內飾上新邁騰也是用了大眾最新的設計風格。空調出風口的造型設計尤其獨特。鋼琴烤漆的中控面板、精緻的儀錶盤造型、擋把區域的按鈕排布設計都使得新邁騰的設計在同級別里出類拔萃,十分的有設計感以及質感。加上優秀的內飾做工,新邁騰的內飾真的堪比豪華轎車。

新邁騰的入門車型為280TSI DSG舒適型。指導價18.99萬,1.4T發動機最大功率150馬力最大扭矩250牛米。搭配七擋雙離合變速箱。整體動力表現還是很不錯的。

雪鐵龍C6

指導價:18.99-27.99萬

說到雪鐵龍C6可能大家會比較陌生一點。C6最初定位於中大型豪華轎車。但是在這個看品牌的時代,雪鐵龍的品牌顯然不足以與BBA等豪車競爭。因此雪鐵龍C6也自降身價。雪鐵龍新C6定位於中級車,但是。無論是外觀的設計感豪華感精緻感。雪鐵龍C6都不遜色於入門級豪華轎車。

而在內飾上雪鐵龍C6的用料豪華程度也着實讓人驚嘆,大量的nappa真皮使用給車內營造了不錯的檔次感。內飾整體的設計比較的平直。在法系車的先產品中屬於十分保守的設計風格。這也比較能夠符合雪鐵龍C6中級車的特質。而且這樣的設計也比較的耐看。值得一提的是擋把區域的設計感比較強。但是空調出風口的位置太靠下,使用起來不方便。

19萬隻能買到雪鐵龍C6的1.6T+6AT的車型,但是這台1.6T發動機也完全足夠它的動力。沒錯,這台1.6T就是小編美美非常喜歡的雪鐵龍1.6THp發動機。匹配6AT變速箱,整個動力系統的線性程度十分讓人滿意,高級感非常好。

馬自達阿特茲

指導價:17.58-23.98萬

馬自達阿特茲這款車我們大家都不陌生,它轎跑式的造型設計風格,碩大的輪轂以及凌厲的前臉設計都讓人印象深刻,說它是一款轎車中最有跑車風格的車,我相信沒有人會反對。如果你是一個外觀控的話那麼你一定要看一看阿特茲。

如果說老款阿特茲的中控台讓我們詬病,成為了阿特茲最大的短板,那麼改款之後的2017款阿特茲則完全不存在這樣的問題。改款之後的內飾設計不僅和丑字撇開了關係,而且十分的具有設計感。這個內飾終於能夠和外觀站在同一水平線上了。

19萬不到的價錢當然只能買到一台2.0升的阿特茲。但是這台2.0升的發動機已經能夠提供給你不錯的動力響應和駕駛感受。2.0升自然吸氣發動機,最大功率158馬力,最大扭矩202牛米,搭配六擋手自一體變速箱,這套動力系統比較的常規,但是實際體驗還是不錯的。

精緻的邁騰,用料高檔的雪鐵龍C6,造型時尚的馬自達阿特茲。這三款車型可以說是目前中級車市場中的三個清新脫俗的選擇,他們都有着不錯的外觀設計,性價比也足夠讓人滿意,想拒絕平庸?這些特點鮮明的車型完全足以彰顯你的獨特。本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

台中搬家公司費用怎麼算?

首個汽車互聯網生態平台上線 大聖車服構建全新汽車生態

上線初期已有超過1000家4S店認定為車生活平台的服務商,除廣汽集團旗下的4S店體系外,還有奧迪、紅旗、大眾、日產、比亞迪等多個品牌4S店。目前,廣州、深圳、東莞、武漢、長沙、成都、北京和上海作為大聖社區店首批拓展城市正在籌建中,未來將逐步增加其它城市。

11月19日,大聖科技“行者 信者 大聖也——汽車互聯網生態平台”上線發布會在廣州舉行,國內首個汽車互聯網生態平台——大聖車服宣告上線。大聖車服汽車互聯網生態平台將實現新車銷售、二手車交易、車後市場,以及汽車金融保險等車相關的一切服務。

大聖車服致力於融合各方力量,打通汽車全產業鏈,打造一個開放共享的汽車互聯網生態圈。向所有汽車品牌開放、所有零部件企業和經銷商開放,並向全社會投資人開放。大聖車服的上線,標志著大聖科技朝着汽車互聯網生態建設邁出了實質性的一步。

發布會現場,共有來自股東方代表、媒體朋友、各品牌車企、經銷商和供應商代表300人出席。

圖說:廣汽集團董事、常務副總經理,大聖科技董事長馮興亞先生致辭

生態型電商 涵蓋全生命周期汽車生活服務

6月8日,廣汽集團、樂視股份和眾誠保險合資成立了大聖科技,並承諾將打造汽車互聯網生態圈;163天後,大聖科技兌現承諾,在廣州車展期間,大聖車服1.0版本如期發布,並同時上線App、pC、M站三個用戶端。

說明:樂視集團作為股東方之一,將提供打造生態圈經驗、流量支持等

從用戶需求和痛點切入,發布會當天大聖車服優先啟動新車平台和車生活平台,並基於用戶行為,創造了融合六大場景化消費模式的新車電商——去區域化的一口價模式;二次詢底價,買賣雙方還可免費砍價2次;新車首發的限時搶購,爆款車每周都有;彰顯個性的一車一價新車競拍;已明確標出價格和參團人數的拼團團購;以及目前流行的一元奪寶模式。新車平台的車源品牌眾多,不僅有奧迪、紅旗、雷克薩斯、英菲尼迪,還有大眾、日產和比亞迪等品牌車型。不僅如此,入駐經銷商也是數量眾多。除了西藏地區,國內省份都有簽約經銷商入駐平台。

圖說:大聖科技CEO鄭景亮在發布會上致辭

對於用戶而言,買車僅僅是車生活的開始,如何能夠享受到更便捷、更舒心的售後服務才是鎖客關鍵。大聖車服車生活平台涵蓋車品、汽車美容、快速保養、智慧鈑噴、專家問診汽配街等多個業務平台,還聯合金融、保險、物流、牌證等服務團隊,為用戶打造全生命周期的汽車生活服務。

相比同類產品,車生活平台打造了不少亮點。如所有的保養將通過後台的保養專家系統自動匹配用車年限、行駛里程和相應的保養項目;所有的保養配件全部為原廠正品。作為售後服務的承接,車生活平台同步啟動社區店的建設和認證。上線初期已有超過1000家4S店認定為車生活平台的服務商,除廣汽集團旗下的4S店體系外,還有奧迪、紅旗、大眾、日產、比亞迪等多個品牌4S店。目前,廣州、深圳、東莞、武漢、長沙、成都、北京和上海作為大聖社區店首批拓展城市正在籌建中,未來將逐步增加其它城市。4S店和社區店作為售後服務平台提供的兩種服務渠道,為用戶提供了多元化選擇。

三年完成生態圈布局 明年啟動配件商城和創投平台

據記者了解,優先上線的新車平台和車生活平台僅是生態圈的部分環節,未來三年大聖車服預計將完成整體生態布局。

根據規劃,明年上半年大聖車服將發布智慧零配件商城,面向B端和C端用戶全面開放,將全力打造集合日系、美系、歐系、德系以及自主等全品牌、全品類的零部件电子目錄庫。該目錄庫的完善將極大優化零部件訂購準確度和效率,推動整個汽車後市場的發展。

智慧配件商城還將為社區店服務體系提供系統便捷的維修技術支持。大聖車服將打通多個消費與服務場景,實現場景互動、體驗互動、生態互動。

在渠道方面,三年萬店的目標則反映了大聖車服在線下服務渠道擴張的雄心。三年內大聖車服將構建一個既融合全品牌、全品類4S店,又融合包括新建、改建、合作和加盟多種形式社區店所構成的全覆蓋生態服務體系。

2017年啟動將開展汽車相關的互聯網及線下業務創投,將從戰略符合度、競爭關係、業務互補性等方面選擇創投目標,不斷孵化新項目,完善生態圈及增強其競爭力,為用戶創造價值。

更值得一提的是,大聖科技與六小齡童跨界合作,聘任後者為首席文化大使。汽車業的工匠精神和互聯網思維的結合,創造出大聖科技特有的互聯網文化——行者精神,這種精神的代表人物是演繹齊天大聖經典形象的六小齡童。為了將大聖文化融匯到大聖車服的日常運營,塑造具有強大文化根基的互聯網平台,下個月大聖科技將開始打造大聖文化館,將行者精神落實到為用戶服務的每一處細節中。

說明:六小齡童出任大聖科技首席文化大使

開放式汽車互聯網生態平台 重構汽車生態圈

縱觀全行業,目前尚未有平台將新車、二手車、車後市場等生態圈各個環節真正打通。單一的服務體驗,導致用戶價值缺乏。同時,汽車集團加互聯網公司,和金融保險公司合資共建的互聯生態模式仍屬業內首創,大聖車服借力廣汽強大打通垂直產業鏈的能力和樂視深厚的互聯網基礎,再加之眾誠保險的保駕護航,將推動現有的汽車服務平台的變革升級。

並非所有的突破都叫顛覆,融合共享、方能致遠。大聖車服上線后,將以開放和共享的姿態重構汽車生態圈。平台不會局限於特定的資本方,而是向全社會投資人開放;不局限於廣汽的品牌,向所有的汽車品牌開放;在人才方面也不拘一格,向各位大咖開放。

生態平台涉及面也很廣,在現有的基礎上,大聖車服將逐步實現對汽車用戶、企業資源、產品和服務資源、周邊社會資源的創新組合,打造最值得信賴的買車、用車、修車、換車一站式平台,構建一個以客戶體驗為中心的、開放型的汽車互聯網生態圈。

“大聖科技將回歸到商業與服務的本質,創造性地串聯、整合產業資源,打造國內首個真正的汽車互聯網生態平台,重構汽車生態圈,真正意義上推動汽車產業互聯網化發展。”大聖科技CEO鄭景亮表達了上述期望。

說明:大聖車服上線,將重塑互聯網汽車生態圈本站聲明:網站內容來源於http://www.auto6s.com/,如有侵權,請聯繫我們,我們將及時處理

【其他文章推薦】

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

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

※超省錢租車方案

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

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

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

台中搬家遵守搬運三大原則,讓您的家具不再被破壞!

不是你想的那種機器貓,呆萌的 NICOBO 是會放屁(?)的可愛機器寵物

所謂的恐怖谷是否會因為有著弱小呆萌元素的機器人,而讓人無法招架甚至獲得療癒感?Panasonic 似乎認為在這個許多人都必須居家防疫的時代,創造個可以伴隨人類的機器貓,特別是會放屁的那種(!?),好像是個不錯的想法。強大的是這樣的想法化身為集資計畫後,居然大獲好評輕鬆達標。繼續閱讀不是你想的那種機器貓,柔弱的 NICOBO 是會放屁(?)鬧脾氣的可愛機器寵物報導內文。

▲圖片來源:Panasonic

呆萌的 NICOBO 是會放屁(?)鬧脾氣的可愛機器寵物

這個尾巴會搖、眼睛跟身體都會可愛的亂轉,看起來像是被襪子罩住的 NICOBO。是 Panasonic 所打造的「弱いロボット」– 翻譯起來應該算是柔弱的機器人或是輕機器人?NICOBO 是與豊橋技術科学⼤学 ICD-LAB 共同研發的機器人,主要是想創造能讓人類與機器人以良好關係共處的新生活。

從官方的示範影片可以看到,NICOBO 的角色設定除了呆萌外,還會偶爾鬧點脾氣或者是有出人意料的行為 — 像是默默放屁然後裝沒事(XD),影片裡面也有因為被嚇到而小小生氣(笑)。據說 NICOBO 也會懂得逐漸學習人的語彙,將可充當你家中的那個無憂無慮的小小同居(機器)人。

據稱,NICOBO 機器人搭載的麥克風與相機模組,將可讓它可以辨識人臉與聲音並判斷面對人的方向。配合活龍活現的眼神與可愛的尾巴擺動姿態,應該可以讓不少人被它萌到徹底卸下心防。它也擁有能感應觸碰的感測器,讓人可以用「摸摸」來與其互動。

看到這,大家第一時間應該就會想起同樣也是出自日本品牌,數一數二有名的機器人寵物 Sony aibo 機器狗吧?事實上,他們兩者也真的有些相同之處。就是,除了機器寵物本身的售價外(目前在 Makuake 集資平台的定價為近 4 萬日元,也就是約台幣 1 萬出頭的售價外。購入使用 6 個月後開始,也將會需要付出每個月 980 日元的服務月費。

不過能在居家上班 / 居家學習的時候,能夠有個全時間陪在你身旁的呆萌小夥伴倒也是不錯吧?就不知道未來能不能也辦得成寵物聚會了。

本篇圖片 / 引用來源

延伸閱讀:

Apple TV 正式登上 Chromecast with Google TV 電視棒

歷久彌新的慢時尚「萬秀的洗衣店」在 Today at Apple 分享穿搭美照創作心得

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

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

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

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

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

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

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

Google Pixel 6 傳臉部辨識將回歸,且還會具備螢幕下指紋解鎖

離今年 Google Pixel 6 可能發表的時間雖然還有超過半年,但已經開始有一些傳言現身,而且這一個可說是很多 Pixel 用戶都會高興的消息。最近國外開發者從 App 程式碼中發現,Pixel 5 被取消的臉部辨識技術,Pixel 6 很有機會回歸,而且還會再加入螢幕下指紋解鎖功能,等於說生物辨識技術部分跟 iPhone 13 目前傳聞一樣。

Google Pixel 6 臉部辨識將回歸?

近日一位國外知名 XDA-Developers 開發者 Mishaal Raman 在 Android 12 開發版的設定 App 中,找到關於 “用指紋和臉部安全解鎖手機”、”於口袋中節省時間解鎖手機”、以及 ”輕鬆快速解鎖手機” 的程式碼,這也暗示著,今年 Google Pixel 6 可能臉部、指紋解鎖都有,一次滿足各種使用需求:

So the Settings app is preparing to support devices with both facial auth and fingerprint scanners. Not much else on this, so I wouldn’t read too much into it yet. pic.twitter.com/xzPWd5cV2m

— Mishaal Rahman (@MishaalRahman) February 18, 2021

臉部辨識技術早在 Pixel 4 時代就已經有,不過 Pixel 5 不知為何取消,改回指紋辨識,有人猜測是成本考量,這也是為什麼 Pixel 5 能賣這麼便宜的其中一個原因(處理器為主因)。

另外程式碼中並沒有提到是採用螢幕下指紋辨識技術,不過現在國外媒體都認為是這一個。

Pixel 5,開箱文章請點我閱讀:

話說回來,原本以為 Pixel 5 降價,未來 Pixel 系列就會走這路線,不跟其他大品牌的旗艦手機拼硬體規格,但隨著這傳言出現,搞不好 Pixel 6 也會再度變回真正的旗艦手機,對於硬體至上的 Pixel 用戶來說,可以期待一下。

至於其他,目前就沒有相關消息,根據外媒 Tom’s Guide 的整理,處理器有可能是 Snapdragon 888 或 Snapdragon 870 5G,就看 Pixel 6 的售價而定。電池可能會變更大,顯示器可以期待提升到 120Hz,沒意外應該會有 Pixel 6 與 Pixel 6 XL 兩種選擇,預計今年 10 月初推出。

資料來源:Notebookcheck

Google 公布 12 月更新內容,多個 Pixel 5 特色功能都下放到 Pixel 3 以上的舊機種

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

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

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

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

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

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

※超省錢租車方案

※回頭車貨運收費標準

重量不到一公斤!結合高效能與超輕薄全新筆電 ASUS ZenBook 14 Ultralight (UX435EGL) 開箱

為大家介紹結合高效能與超輕薄全新筆電 ASUS ZenBook 14 Ultralight (UX435EGL) 開箱。輕薄筆電,相信這對於很多人來說是又愛又恨,之前也是有許多人在問小編給予筆電推薦時,都會提出想要能夠有高效能,但又想要是輕薄好攜帶的需求,尤其是女生的首選,幾乎都是要求輕薄筆電為優先的情況下(也比較好看才是真的),那麼就很難去好好推薦,要有效能的輕薄筆電幾乎都是要到高階商務人士用的,但通常到了那種階級的筆電,幾乎都是超出預算,但即使超出預算了,效能還是沒辦法達標,因此輕薄筆電的選擇一直都是一個難題。

不過在今年配合著Intel第11代移動處理器的發布,似乎這個難題有了許多的解法,而華碩在今年年初推出的ZenBook 14 Ultralight (UX435EGL),讓小編對於高效輕薄筆電的推薦選項更為集中了,除了擁有低於1公斤的超輕便重量外,同時擁有了非常實用的運算能力,以及能夠滿足繪圖或輕度影片剪輯的效能,搭配最高17小時的超長續航力、完整的I/O配置等等,可以說是非常值得推薦的一台輕薄筆電,就讓我們一起來看看這台全新的 ASUS ZenBook 14 Ultralight (UX435EGL) 吧。

ASUS ZenBook 14 Ultralight (UX435EGL) 開箱!!

ZenBook 14 Ultralight 的上蓋採用了金屬磨砂材質,唯一配色的綠松灰設計,在時尚中又帶點了年輕的元素。

掀開螢幕後,映入眼簾的是四面NanoEdge極窄邊框的14吋Full HD廣視角螢幕,螢幕佔比高達了92%,讓螢幕看起來更大了,幾乎沒有存在感的黑邊,有著絕佳的沉浸體驗。

而且即使是在NanoEdge極窄邊框的上邊,還是保有紅外線攝影機,因此可以非常輕鬆的使用Windows Hello人臉辨識進行登入。此外,在現今全球疫情尚未趨緩的時期,對於遠端工作者或是有線上會議需求,有紅外線攝影機可進行遠距的視訊會議也非常便利!

在螢幕的底部,也精心打造了ErgoLift 螢幕軸承設計,在掀開螢幕的同時會自動將鍵盤傾斜至最舒適的位置。

鍵盤的部分採用全尺寸設計,並且在最右邊與最上邊還設有許多功能鍵方便使用。

1.4mm的鍵程,搭配非常滑順的鍵帽,在打字上也可以非常舒服。

上方的功能鍵,預設就是調整功能,不用另外搭配Fn鍵才能使用,但如果需要切換回傳統的組合方式,可以透過Fn+Esc做切換,在傳統模式下Fn按鍵會做發光提示。

觸控板部分,除了支援四指智慧手勢外,點擊右上角icon就可以開啟NumberPad虛擬數字鍵盤,讓輕薄的14吋筆電也有完整的數字鍵可以使用,且開啟的同時仍可控制游標。

在I/O配置部分,即使在超輕薄的設計下,還是保有了許多方便的接口,左側留有HDMI 2.0、兩個Thunderbolt™ 4 USB-C®以及電源指示燈。

在右側的部份,則是3.5mm 耳麥組合接口以及一個USB 3.2 Type A (Gen 1),保留一個Type A的接口讓使用起來更加的便利,另外還有一個micro SD讀卡機,讓繪圖、剪輯可以更方便的讀取和儲存檔案。

翻到背面,首先可以看到配合著ErgoLift 螢幕軸承的墊高,讓散熱效能更為強悍的開孔。

在背面的左右兩側,則是兩個針對喇叭的開孔,ZenBook 14 Ultralight 的音訊裝置通過了專業音響大廠Harman Kardon的認證,因此可以有著絕佳的聽覺體驗。

接著我們準備進行拆機,不過要特別注意的是ZenBook 14 Ultralight有兩顆螺絲藏在了止滑墊的下方,因此要特別注意。

開蓋後,可以看到在非常輕巧的配置下,內部的空間確實也盡量的緊縮,因此包含了記憶體、無線網卡都是直接集成在了主機板上。

ZenBook 14 Ultralight出廠已經內建1TB的PCIe® NVMe™ 3.0 x4 M.2 SSD,相信是非常夠用的。

散熱部分則是使用了單風扇設計,透過石磨片串聯了GPU與CPU,將兩者產生的廢熱透過特殊散熱鰭片排出,讓筆電能夠發揮出高效能。

電池部分則是採用了63Wh,最高續航力官方給出了最高17小時*,可以說是非常的長效。*官方數據續航測試特定條件請參考官網說明:http://bit.ly/2JLh4ea實際電池續航力依據產品組態、使用情形、操作條件及電源管理設定而有有所不同。

而充電器的部分,採用65W的Type C充電器,支援PD快充,可以在50分鐘內就充滿了60%的電力。

最後,ZenBook 14 Ultralight 的名稱由來,就是由於其不到1公斤的重量(官方數據為995克),在如此輕薄的重量,機身最薄僅有14.9mm的機身下,我們一起來看看到底可以發揮出多大的效能吧!

了解更多 ASUS ZenBook 14 Ultralight (請點我)

 

ASUS ZenBook 14 Ultralight 效能測試

本次測試機台是搭載了全新第11代 Intel® Core™ i7-1165G7 處理器與NVIDIA® GeForce® MX450獨立顯示卡的ZenBook 14 Ultralight (UX435EGL)。

透過裝置管理員,可以看到 Intel® Core™ i7-1165G7 4C/8T的配置。

同樣透過裝置管理員,也可以看到ZenBook 14 Ultralight (UX435EGL) 另外搭載的NVIDIA® GeForce® MX450獨立顯卡。

ZenBook 14 Ultralight 出廠就搭配了16GB的記憶體。

首先我們以CPU-Z進行核心效能測試,單核的分數為571.4,而在全核心的分數則是跑到2627.7。

接著透過Cinebench R15同樣進行CPU測試,在CPU單核的分數為219 cb,而全核心的表現則為822 cb。

另外透過了CineBench R20進行CPU測試,在CPU單核的分數為557 cb,而全核心的表現則為2158 cb。

接著透過x264 FHD BENCHMARK進行轉檔測試,i7-1165G7的表現為28 fps。

接著透過x265 FHD BENCHMARK進行轉檔測試,i7-1165G7則是18.7 fps。

在儲存的部分,首先使用DiskInfo查看硬碟資訊,本次測試機台預設是搭載Intel的1TB PCIe® NVMe™ 3.0 x4 M.2 SSD。

透過CrystalDiskMark進行測試,其讀寫速度為1900.9 MB/s與1754.5 MB/s。

接著使用TxBench進行讀寫測試,最高讀寫速度為1868.1 MB/s與1800.9 MB/s。

而對於顯示晶片的測試部分,由於ZenBook 14 Ultralight (UX435EGL) 同時具有全新的Intel® Iris® Xe 顯示晶片以及NVIDIA® GeForce® MX450獨立顯卡,因此針對顯卡測試的3DMARK,使用Time Spy測試,將NVIDIA® GeForce® MX450設為主要測試對象,分數則為1854。

而針對大部分遊戲,使用DirectX 11為核心架構的Fire Strike測試,ZenBook 14 Ultralight的分數為4174。

接著是跨平台的Wild Life測試,ZenBook 14 Ultralight 的分數為11123。

最後則是採用Direct X 12的Night Raid測試,ZenBook 14 Ultralight的分數為17419,由以上幾個測試來看,ZenBook 14 Ultralight即使是在不到1公斤的重量下,還是可以有著還不錯的遊戲效能,實在非常強悍。

整機部分則使用PCMark 10進行測試,在針對辦公室PC的基準測試當中跑分為5137。

而針對完整的辦公室PC基準測試PCMark 10 Express中,跑分為4665。

了解更多 ASUS ZenBook 14 Ultralight (請點我)

 

ASUS ZenBook 14 Ultralight 軟體介紹

在軟體的部分,ZenBook 14 Ultralight主要的功能設定都可以在MyASUS裡面進行,點開軟體即可看到筆電的專屬資訊。

在第二頁則是客戶服務部分,如果電腦有任何問題都可以透過這裡進行與官方的聯繫。

如果是已經知道問題的所在,也可以透過MyASUS直接進行系統診斷,透過軟體分析直接發現電腦問題所在。

無論是軟體、驅動、韌體等等的更新部分,也可以直接透過MyASUS進行設定。

而在硬體設定的部分,可以調整的部分就非常多樣,首先是電池的模式,可以是長效使用、平衡使用或是最佳使用,都可以依照個人習慣做調整。

接著是對於風扇的模式進行調整,這裡主要是針對效能設定的部分,如果要電腦高效能運算的話,直接開啟高效能模式就對了,只有這樣才能發揮出ZenBook 14 Ultralight 的最高效能。

在螢幕色彩的調整部分,則是可以透過Splendid進行螢幕的微調,調整到自己喜歡的顏色。

而開啟Tru2Life則是可以直接透過智慧演算法,讓螢幕呈現出一個最佳的狀態。

而功能鍵鎖定的部分,則是可以自訂最上方的功能鍵預設是要使用原本的功能還是ZenBook 14 Ultralight特定的功能按鍵。

WiFi SmartConnect顧名思義即是自動連線到訊號最好的無線網路。

而麥克風的部分,由於疫情的關係,使得遠端居家辦公的模式越來越盛行,因此針對收音ZenBook 14 Ultralight 搭配了絕佳的ASUS AI降噪技術,可以直接透過AI智慧進行背景音降噪,因此在多人會議當中,即使是在吵雜的環境下也可以保有非常清晰的線上會議體驗。

而在ClearVoice同樣也是透過了AI智慧運算,可以將筆電喇叭中,減少人聲外的所有聲音。

影體設定的最後一項則是TaskFirst優先網路分配,可以針對不同的使用情境去做網路頻寬使用的優化。

硬體設定完畢後,最後則是可以透過MyASUS與智慧型手機做連接,可以透過Link to MyASUS直接用電腦撥打電話、回覆訊息、同步畫面、螢幕延伸等等,非常的方便。

無論是iOS還是Android的用戶,都可以使用喔!

了解更多 ASUS ZenBook 14 Ultralight (請點我)

總結

ZenBook 14 Ultralight (UX435EGL) 可以說是一台要效能有效能、要輕便有輕便的一台高效能筆電,從Intel發表了第11代移動處理器開始,輕薄筆電的效能整個大躍進,而ZenBook 14 Ultralight (UX435EGL) 在此基礎上,更上一層樓,另外搭載了NVIDIA® GeForce® MX450獨立顯卡,讓輕薄筆電也有了更優異的運算能力,在不到一公斤的機身內你會發現令你想不到的效能爆發,並且還有非常完整的I/O配置以及非常長效的續航力,因此無論是在商務運用、設計運算等等,同時兼具了高效能、高續航、高便攜,在這之前是非常難想像一台筆電就能勝任大部分的工作,但在ZenBook 14 Ultralight (UX435EGL) 隔空出世之後,真的是刷新了小編對於輕薄筆電的印象,非常推薦給大家。

 

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

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

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

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

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

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

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

※回頭車貨運收費標準

AirPods 3 新洩漏照流出,可選配耳塞加強「主動式降噪」體驗?

蘋果的 AirPods 真無線耳機將吹「混合風」?根據最新的媒體爆料,不僅有了疑似官圖比較照,就連實機照片居然也整個被貼出。是說,更有趣的其實反而是在規格方面的預測… 繼續閱讀 AirPods 3 新洩漏照流出,可選配耳塞加強「主動式降噪」體驗?報導內文。

▲圖片來源:我愛音頻網

AirPods 3 新洩漏照流出,可選配耳塞加強「主動式降噪」體驗?

相對於耳罩式的 AirPods Max,價格與規格更為接近的半入耳式 AirPods 與入耳式的 AirPods Pro,似乎將有可能更為「融合」?根據我愛音頻網的報導,他們以新世代 AirPods 3 的許多洩漏照搭配一系列專業分析與規格預測,讓我們有機會提前知道,這預計可能會在 3 月推出的蘋果新款真無線耳機的可能規格。

據報 AirPods 3 將巧妙融合半入耳與入耳式耳塞耳機的規格,並且也能使用主動式降噪(!)。也就是能在一般 AirPods 的半入耳式聆聽體驗下啟動降噪,但又能透過裝上耳塞提供更好的密合度,提升主動式降噪的效果。

▲圖片來源:我愛音頻網

既然橫看豎看應該沒有人不直接使用效果更好的解決方案。小編猜測這耳塞應該會可能會是「更 Pro」的加價升級選項?不得不說這還蠻有創意的,也可以觀察到洩漏的官圖細節,其實相對於 AirPods Pro,AirPods 3 在耳塞的部分是以拆卸下來的狀態,也許意味著這並非內附的配件(本段都是小編猜的,畢竟在正式發表前一切應該都要存疑)。

▲圖片來源:我愛音頻網

我愛音頻網提到,AirPods 3 基本上就是更為壓縮緊湊版的隨身型蘋果真無線耳機(總覺得這名號有點長)。充電盒的體積相對於 Pro 要更小(窄),但耳機柄倒是介於之間,比起 Pro 版要長一些些。功能方面可以預期現階段 AirPods Max 與 AirPods Pro 包括空間音訊等,都可以在 AirPods 3 上使用。價位部分,既然有搭載主動式降噪,據稱也會比起一般版本稍貴些,來到 US$150。

是說,重點搞不好會在 AirPods 3 的耳塞套是否會隨附?需另購的話會賣多少錢吧?目前 AirPods Pro 的定價是 NT$240,其實即便需要另購似乎也不會太痛?

延伸閱讀:

不是你想的那種機器貓,呆萌的 NICOBO 是會放屁(?)的可愛機器寵物

暗黑破壞神 2》HD 重製版今年登 PC / PS / XBOX / Switch 平台,畫質比較看這裡

您也許會喜歡:

【推爆】終身$0月租 打電話只要1元/分

立達合法徵信社-讓您安心的選擇

【其他文章推薦】

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

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

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

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

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

※回頭車貨運收費標準

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