• 軟硬兼施,看英特爾如何賦能5G網絡轉型

    11月19日,中國移動2020全球合作伙伴大會在廣州開幕。作為中國移動重要的戰略合作伙伴,英特爾在大會上充分展示了其在深化雲網融合,推動網絡轉型方面所取得的成果,以及多款軟硬件明星產品。 其中最吸引小棗君關注的,就是圍繞網絡開放轉型的5G小基站和邊緣計算應用解決方案。 ▉ 開放無線接入網的源動力 無線接入網(RAN),是移動通信網絡中最靠近用户的部分,也是運營商網絡建設的投資重點。 眾所周知,我們現在正在邁入5G時代。5G給我們帶來了超高速率、超低時延、海量連接的優質網絡體驗,但也給無線接入網的能力提出了更高的要求。 除了C端用户之外,來自垂直行業的複雜業務場景,以及差異化的性能需求,同樣意味着挑戰。 為了應對挑戰,5G無線接入網正在加速進行部署方式的演進,以及自身架構的革新。 而基於虛擬化技術的開放無線接入網,就是5G無線接入網轉型的一個重要方向。 虛擬化技術,源自於IT行業,早期應用於雲計算,獲得了巨大的成功。後來,核心網產品引入了該技術,使其進入傳統通信領域,同樣獲得了成功。 虛擬化技術在核心網的成功應用,增加了行業將其繼續應用於接入網和承載網的信心。越來越多的運營商、設備商加入O-RAN這樣的開放無線接入網聯盟,推動採用開放式的架構設計,全面實現RAN的網絡智能化、接口開放化、硬件白盒化和軟件開源化。 然而,開放無線接入網產品的研發,究竟該如何入手呢?如果企業自研軟硬件平台,意味着極高的技術門檻,以及巨大的成本投入,足以讓很多企業望而卻步。於是,採用成熟的開放平台,就成為了優先選項。 ▉ 基於FlexRAN的5G小基站 在本次中移合作伙伴大會上,國內知名廠家京信通信(Comba)公司展示了基於英特爾®FlexRAN技術的5G小基站產品,吸引了在場觀眾的廣泛關注。 該5G小基站是一種微功率的室內分佈覆蓋方案,符合OTII標準,支持軟硬件解耦,支持虛擬化、容器化。 它採用了三級架構,包括了主機單元、擴展單元以及遠端單元,均使用英特爾的技術。 京信5G小基站 主機單元負責5G無線接入網空口部分物理層及上層協議棧處理、操作維護處理,實現與終端的空口通信及與核心網的連接。它基於英特爾®至強® D處理器和英特爾® Stratix 10 FPGA,可進行四個載波的基帶處理,每個載波的帶寬為100MHz。它還使用了英特爾®Cyclone 10 FPGA,實現DFE功能。 擴展單元負責下行分發和上行匯聚與遠端單元的通信數據,實現5G室內小基站的分佈式擴展,並通過光電混合纜給遠端單元遠程供電。它使用了英特爾® Arria 10 FPGA,執行前傳處理。 遠端單元具備射頻收發功能,通過低功率信號發射實現室內5G信號的分佈式覆蓋。 運營商可以在5G小基站上部署移動邊緣計算(MEC)服務器,集成邊緣計算應用。通過開放的接口,小基站的遠端單元可以接入物聯網相關的設備,例如UWB定位基站或藍牙信標等,實現無線接入場景下的業務多樣化創新。 目前,該款5G小基站已經在國內20多個省份30多個城市進行了運營商商用項目落地。除了運營商市場外,該款基站還因其靈活的開放接口設計而被廣泛應用於垂直行業,例如廣東省首個5G+工業應用以及山東省的智能採礦項目。 京信5G小基站,是英特爾® FlexRAN架構的一個典型用户案例。除了京信之外,包括佰才邦、新華三、賽特斯、鋭捷等多家企業,都推出了基於FlexRAN架構的小基站產品。 FlexRAN,是英特爾®面向5G網絡推出的新一代技術平台。它的推出目的,就是幫助加快開發速度,讓用户可以迅速構建全面虛擬化的無線接入網。 FlexRAN的架構 FlexRAN的架構如上圖所示。 由於嚴格的 TTI 時序限制,成功部署 RAN L1 是虛擬化的主要障礙之一。FlexRAN 則利用操作系統的實時功能來實現這一目標。 FlexRAN SDK涵蓋了BBU 池框架和網絡切片框架,它們充當了LTE、5GNR Sub6和 mmWave 參考PHY管道的構建模塊。 此外,FlexRAN 還支持 L2/L3 參考 PHY 實施,利用英特爾®架構、英特爾®高級矢量擴展512 技術(英特爾®AVX-512技術)並行指令集以及與NFV和DPDK技術的緊密集成等優勢,幫助客户優化PHY解決方案,從而提升模塊性能和提高每個內核的效率。 在英特爾® 至強® 可擴展處理器以及英特爾® FPGA 或英特爾® eASIC™ 加速技術的支持下,FlexRAN可以高效地實現無線接入工作負載,幫助運營商優化5G領域必要的數據處理。 FlexRAN還加入了Hypervisor、數據平面開發套件(DPDK)等技術,具有很強的擴展性。 除了vRAN之外,它還可以滿足MEC等多業務場景,對網絡切片也有良好支持,能夠在通用x86服務器平台中實現傳統無線接入網BBU的性能,提供高吞吐、低時延的5G無線連接。 隨着5G網絡建設的逐漸深入,室內5G信號深度覆蓋將成為運營商的工作重點。這也就意味着,5G小基站的需求將變得越來越強烈。 如果新的5G小基站仍繼續採用傳統電信架構設計,其緊耦合的軟硬件,封閉的產品生態,將給設備的調試部署、升級優化、互聯互通帶來麻煩。 和傳統電信架構相比,新型開放式無線接入網架構無論在傳輸速率、覆蓋能力、部署效率及成本控制方面,都有明顯的優勢,可以有效地幫助運營商降低網絡建設難度,控制建設成本,同時賦能業務創新,提升其流量經營的能力。 藉助FlexRAN,傳統室分將會全面升級為數字化、IT化和智能化的新型開放化室分。 ▉ 基於5G邊緣雲的UPF方案 基於5G邊緣雲平台進行部署的另一個典型網元就是UPF。 UPF是5GC(5G核心網)用户面的重要網元。5G網絡龐大的數據流量,全部都要經過5G核心網。而具體負責轉發的網元,就是UPF。 UPF的轉發效率,很大程度上影響了整個5G核心網的性能,甚至整個5G網絡的性能。 為了提升UPF的轉發效率,5G網絡會將UPF進行下沉,部署在網絡的邊緣,而非雲端。 UPF邊緣雲部署 這樣的部署方式,既大幅降低了成本,也獲得了雲邊協同的能力。 同時,基於英特爾最新一代的E810網卡的DDP技術,通過軟件的方式,來增強對特定協議的識別,從而能夠提升UPF的吞吐能力,並且降低處理的延遲。 DDP技術,全名叫做Dynamic Device Personalization(動態設備個性化)。這是一個讓網卡更加“聰明”的技術。 採用這項技術,可以將一些數據報文處理和協議識別的工作,從CPU轉移到E810網卡上,進行預處理。 這樣可以大幅提升系統的數據處理性能。 網卡直接進行分發處理之後,減少了上層處理的環節,所以對時延也有明顯的改善。這非常有利於車聯網、工業機器人等時延敏感型場景的應用落地。 目前,國內主流設備商中興通訊就採用了英特爾的DDP技術,以提高自家UPF網元的轉發效率和性能。 ▉ OpenNESS + CERA,邊緣能力的有力支撐 前面我們介紹了5G無線接入網和5G核心網的邊緣雲部署案例。其實,它們的背後,都是基於英特爾® OpenNESS(開放網絡邊緣服務軟件)的融合邊緣平台——CERA,在提供有力的支撐。 OpenNESS是一個基於K8S容器技術的基礎開放平台,主要用於虛擬化的管理。它是FlexRAN、5G核心網和各種應用的載體。 CERA平台硬件上以英特爾® 至強® 系列處理器為主,以OpenNESS作為虛擬化管理平台,可以實現單節點共平台部署5G功能和邊緣計算應用,具有低成本快速部署的特點,可以充分賦能5G邊緣計算平台的開發和部署。 通過在OpenNESS上預集成一些5G的功能模塊,例如5G基帶,就可以實現前面我們所説的FlexRAN的架構。 簡單來説,基於OpenNESS的CERA,統一管理和調用着處理器、FPGA、網卡等底層物理資源。它可以創建容器,運行4G/5G虛擬網元(VNF/CNF),實現相應的功能。它同樣可以創建支持AI功能、SD-WAN功能的相關應用。 下圖就是聯想公司與英特爾合作,基於CERA架構搭建的開放融合雲網絡平台。 該平台實現了輕量級5G核心網、基站BBU、邊緣計算應用共同部署在統一的雲原生平台之上,極大提升了5G邊緣行業應用部署的便捷性和靈活性。 藉助這個平台,可以實現內部智慧辦公、智慧管理、智慧安防等應用,既提升了園區管理效率,又降低了運營成本。 ▉ 結語 雲網融合,是5G乃至整個移動通信網絡未來發展的主流趨勢。在此次中移合作伙伴大會上,英特爾着重展示了這方面的技術成果。 作為O-RAN聯盟的成員,英特爾和中國移動等行業夥伴密切合作,致力於實現5G網絡智能和開放的核心原則,推動5G網絡基礎設施的部署。 英特爾的FlexRAN、CERA參考架構、OpenNESS基礎開放套件,以及針對5G網絡基礎設施的全套硬件產品(包括英特爾®至強處理器、英特爾® 800 系列網卡、 英特爾®eASIC、英特爾®FPGA可編程加速卡等),是多年以來在網絡轉型方向上進行持續投入的回報,充分顯示了英特爾的技術實力和領先地位。 在英特爾看來,5G是一個真正融合計算和通信的時代,雲網融合的步伐將不斷加快。 面向這樣的歷史機遇,英特爾正憑藉自身優勢,與行業合作伙伴展開全方位的合作,引領全球5G變革。 —— 全文完 —— 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-28 關鍵詞: 5G 英特爾 互聯網

  • 服務器Ping網關時通時斷的案例分析

    如圖1所示,管理EOR為ZXR10 9908設備,管理EOR1和管理EOR2與管理TOR間配置MC-Lag,服務器的IP網關在管理EOR上。在管理EOR配置VRRP雙主。在服務器ping網關地址,發現時通時斷。 圖1 VRRP組網示意圖 在圖1所示組網中服務器ping網關時通時斷的故障原因可能有如下原因: 1、管理EOR的MC-Lag配置錯誤,狀態不穩定。 2、兩個網關對應的MAC地址不一致。 3、管理EOR上的其它配置錯誤。 1、通過命令show running-config-interface vlan128和show lacp 33 mc-lag在管理EOR1和管理EOR2分別查看網關配置和MC-Lag狀態。 確認配置無誤且MC-Lag狀態正常。 2、通過show vrrp interface vlan128命令在管理EOR1和管理EOR2上查看VRRP的虛MAC地址,確認2台設備的VRRP虛MAC地址一致。 3、通過命令show nd6 cache vlan128在管理EOR1上查看服務器的IPv6 ND表,發現ND表狀態震盪,時而顯示有ND表,時而顯示無ND表。 4、在MAC-Lag雙網關疊加IPv6場景下,由於TOR向上發送報文,根據負載分擔不一定報文會被分擔到哪條鏈路上,所以在EOR上需要關閉IPv6地址探測功能。 通過show running-config nd命令確認EOR上未關閉IPv6鄰居探測功能。通過nd nud-switch disable命令關閉IPv6鄰居探測後,問題解決。 我們是一羣平均從業年限5+的通信專業工程師。關注我們,帶你瞭解通信世界的精彩!你點的每個在看,我都認真當成了喜歡 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-28 關鍵詞: 網絡 通信技術

  • 乾貨!二叉樹操作詳解

    (給C語言與CPP編程加星標,提升C/C++技能) 來源://segmentfault.com/a/1190000008850005 【冠達快運香港有限公司】:樹是數據結構中的重中之重,尤其以各類二叉樹為學習的難點。在面試環節中,二叉樹也是必考的模塊。本文主要講二叉樹操作的相關知識,梳理面試常考的內容。請大家跟隨小編一起來複習吧。 本篇針對面試中常見的二叉樹操作作個總結: 前序遍歷,中序遍歷,後序遍歷; 層次遍歷; 求樹的結點數; 求樹的葉子數; 求樹的深度; 求二叉樹第k層的結點個數; 判斷兩棵二叉樹是否結構相同; 求二叉樹的鏡像; 求兩個結點的最低公共祖先結點; 求任意兩結點距離; 找出二叉樹中某個結點的所有祖先結點; 不使用遞歸和棧遍歷二叉樹; 二叉樹前序中序推後序; 判斷二叉樹是不是完全二叉樹; 判斷是否是二叉查找樹的後序遍歷結果; 給定一個二叉查找樹中的結點,找出在中序遍歷下它的後繼和前驅; 二分查找樹轉化為排序的循環雙鏈表; 有序鏈表轉化為平衡的二分查找樹; 判斷是否是二叉查找樹。 1 前序遍歷,中序遍歷,後序遍歷; 1.1 前序遍歷 對於當前結點,先輸出該結點,然後輸出它的左孩子,最後輸出它的右孩子。以上圖為例,遞歸的過程如下: 輸出 1,接着左孩子; 輸出 2,接着左孩子; 輸出 4,左孩子為空,再接着右孩子; 輸出 6,左孩子為空,再接着右孩子; 輸出 7,左右孩子都為空,此時 2 的左子樹全部輸出,2 的右子樹為空,此時 1 的左子樹全部輸出,接着 1 的右子樹; 輸出 3,接着左孩子; 輸出 5,左右孩子為空,此時 3 的左子樹全部輸出,3 的右子樹為空,至此 1 的右子樹全部輸出,結束。 而非遞歸版本只是利用 stack 模擬上述過程而已,遞歸的過程也就是出入棧的過程。 /* 前序遍歷遞歸版 */void PreOrderRec(Node * node){    if (node == nullptr)        return;    cout left);     // 先輸出左孩子    cout left;        }                             // while 結束意味着左孩子為空        cout 4->6->7,7 無左孩子,也無右孩子,輸出 7,此時 6 無左孩子,而 6 的右子樹也全部輸出,輸出 6,此時 4 無左子樹,而 4 的右子樹已全部輸出,接着輸出 4,此時 2 的左子樹全部輸出,且 2 無右子樹,輸出 2,此時 1 的左子樹全部輸出,接着轉向右子樹; 3->5,5 無左孩子,也無右孩子,輸出 5,此時 3 的左子樹全部輸出,且 3 無右孩子,輸出 3,此時 1 的右子樹全部輸出,輸出 1,結束。 非遞歸版本中,對於一個結點,如果我們要輸出它,只有它既沒有左孩子也沒有右孩子或者它有孩子但是它的孩子已經被輸出(由此設置 pre 變量)。若非上述兩種情況,則將該結點的右孩子和左孩子依次入棧,這樣就保證了每次取棧頂元素的時候,先依次遍歷左子樹和右子樹。 /* 後序遍歷遞歸版 */void PostOrderRec(Node * node){    if (node == nullptr)        return;    PostOrderRec(node->left);   // 先輸出左孩子    PostOrderRec(node->right);  // 然後輸出右孩子    cout left || pre == node->right))) // 以後的 pre 就不會是空。此處的判斷語句加入一個 pre,只是用來        {                                                       // 確保可以正確輸出第一個結點。            cout left)                S.push(node->left);        }    }} 2 層次遍歷 void LevelOrder(Node * node){    Node * p = node;    queue Q;  // 隊列    Q.push(p);    while (!Q.empty())    {        p = Q.front();        cout right)            Q.push(p->right);    }} 3 求樹的結點數 int CountNodes(Node * node){    if (node == nullptr)        return 0;    return CountNodes(node->left) + CountNodes(node->right) + 1;} 4 求樹的葉子數 int CountLeaves(Node * node){    if (node == nullptr)        return 0;    if (!node->left && !node->right)        return 1;    return CountLeaves(node->left) + CountLeaves(node->right);} 5 求樹的深度 int GetDepth(Node * node){    if (node == nullptr)        return 0;    int left_depth = GetDepth(node->left) + 1;    int right_depth = GetDepth(node->right) + 1;    return left_depth > right_depth ? left_depth : right_depth;} 6 求二叉樹第k層的結點個數 int GetKLevel(Node * node, int k){    if (node == nullptr)        return 0;    if (k == 1)        return 1;    return GetKLevel(node->left, k - 1) + GetKLevel(node->right, k - 1);} 7 判斷兩棵二叉樹是否結構相同 不考慮數據內容。結構相同意味着對應的左子樹和對應的右子樹都結構相同。 bool StructureCmp(Node * node1, Node * node2){    if (node1 == nullptr && node2 == nullptr)        return true;    else if (node1 == nullptr || node2 == nullptr)        return false;    return StructureCmp(node1->left, node2->left) && Str1uctureCmp(node1->right, node2->right);} 8 求二叉樹的鏡像 對於每個結點,我們交換它的左右孩子即可。 void Mirror(Node * node){    if (node == nullptr)        return;    Node * temp = node->left;    node->left = node->right;    node->right = temp;    Mirror(node->left);    Mirror(node->right);} 9 求兩個結點的最低公共祖先結點 最低公共祖先,即 LCA(Lowest Common Ancestor),見下圖:結點 3 和結點 4 的最近公共祖先是結點 2,即 LCA(3,4)=2。在此,需要注意到當兩個結點在同一棵子樹上的情況,如結點 3 和結點 2 的最近公共祖先為 2,即 LCA(3,2)=2。同理 LCA(5,6)=4,LCA(6,10)=1。 Node * FindLCA(Node * node, Node * target1, Node * target2){    if (node == nullptr)        return nullptr;    if (node == target1 || node == target2)        return node;    Node * left = FindLCA(node->left, target1, target2);    Node * right = FindLCA(node->right, target1, target2);    if (left && right)  // 分別在左右子樹        return node;    return left ? left : right;  // 都在左子樹或右子樹} 10 求任意兩結點距離 首先找到兩個結點的 LCA,然後分別計算 LCA 與它們的距離,最後相加即可。 int FindLevel(Node * node, Node * target){    if (node == nullptr)        return -1;    if (node == target)        return 0;    int level = FindLevel(node->left, target);  // 先在左子樹找    if (level == -1)        level = FindLevel(node->right, target);  // 如果左子樹沒找到,在右子樹找    if (level != -1)  // 找到了,回溯        return level + 1;    return -1;  // 如果左右子樹都沒找到}int DistanceNodes(Node * node, Node * target1, Node * target2){    Node * lca = FindLCA(node, target1, target2);  // 找到最低公共祖先結點    int level1 = FindLevel(lca, target1);     int level2 = FindLevel(lca, target2);    return level1 + level2;} 11 找出二叉樹中某個結點的所有祖先結點 如果給定結點 5,則其所有祖先結點為 4,2,1。 bool FindAllAncestors(Node * node, Node * target){    if (node == nullptr)        return false;    if (node == target)        return true;    if (FindAllAncestors(node->left, target) || FindAllAncestors(node->right, target))  // 找到了    {        cout right;            if (pre->right == nullptr)  // 步驟 2.1,cur 未被訪問,將 cur 結點作為其前驅結點的右孩子            {                cout right = nullptr;                cur = cur->right;            }        }    }} 再來看中序遍歷,和前序遍歷相比只改動一句代碼,步驟如下: 如果當前結點的左孩子為空,則輸出當前結點並將其右孩子作為當前結點; 如果當前結點的左孩子不為空,在當前結點的左子樹中找到當前結點在中序遍歷下的前驅結點; 2.1. 如果前驅結點的右孩子為空,將它的右孩子設置為當前結點,當前結點更新為當前結點的左孩子; 2.2. 如果前驅結點的右孩子為當前結點,將它的右孩子重新設為空,輸出當前結點,當前結點更新為當前結點的右孩子; 重複以上步驟 1 和 2,直到當前結點為空。 /* 中序遍歷 */void InOrderMorris(Node * root){    Node * cur = root;    Node * pre = nullptr;    while (cur)    {        if (cur->left == nullptr)  //(1)        {            cout right && pre->right != cur)  //(2),找到 cur 的前驅結點                pre = pre->right;            if (pre->right == nullptr)  //(2.1),cur 未被訪問,將 cur 結點作為其前驅結點的右孩子            {                pre->right = cur;                cur = cur->left;            }            else  //(2.2),cur 已被訪問,恢復樹的原有結構,更改 right 指針             {                cout right;            if (pre->right == nullptr)  // 步驟 2.1,cur 未被訪問,將 cur 結點作為其前驅結點的右孩子            {                pre->right = cur;                cur = cur->left;            }            else  // 步驟 2.2,cur 已被訪問,恢復樹的原有結構,更改 right 指針            {                pre->right = nullptr;                ReversePrint(cur->left, pre);                cur = cur->right;            }        }    }} dummy 用的非常巧妙,建議讀者配合上面的圖模擬下算法流程。 13 二叉樹前序中序推後序 方式 序列 前序 [1 2 4 7 3 5 8 9 6] 中序 [4 7 2 1 8 5 9 3 6] 後序 [7 4 2 8 9 5 6 3 1] 以上面圖表為例,步驟如下: 根據前序可知根結點為1; 根據中序可知 4 7 2 為根結點 1 的左子樹和 8 5 9 3 6 為根結點 1 的右子樹; 遞歸實現,把 4 7 2 當做新的一棵樹和 8 5 9 3 6 也當做新的一棵樹; 在遞歸的過程中輸出後序。 /* 前序遍歷和中序遍歷結果以長度為 n 的數組存儲,pos1 為前序數組下標,pos2 為後序下標 */int pre_order_arry[n];int in_order_arry[n];void PrintPostOrder(int pos1, int pos2, int n){    if (n == 1)    {        cout left && p->right)            {                Q.push(p->left);                Q.push(p->right);            }            else if (p->right)  // 只有右結點                return false;            else if (p->left)   // 只有左結點            {                Q.push(p->left);                flag = true;            }            else  // 沒有結點                flag = true;        }    }    return true;} 15 判斷是否是二叉查找樹的後序遍歷結果 在後續遍歷得到的序列中,最後一個元素為樹的根結點。從頭開始掃描這個序列,比根結點小的元素都應該位於序列的左半部分;從第一個大於跟結點開始到跟結點前面的一個元素為止,所有元素都應該大於跟結點,因為這部分元素對應的是樹的右子樹。根據這樣的劃分,把序列劃分為左右兩部分,我們遞歸地確認序列的左、右兩部分是不是都是二元查找樹。 int array[n];  // 長度為 n 的序列,注意 begin 和 end 遵循的是左閉右閉原則bool IsSequenceOfBST(int begin, int end){    if (end - begin left)            node = node->left;        return node;    }    else  // 步驟 2    {        if (node->parent == nullptr)  // 步驟 2.1            return nullptr;        Node * p = node->parent;  // 步驟 2.2        if (p->left == node)  // 步驟 2.2.1            return p;        else  // 步驟 2.2.2        {            while (p->right == node)            {                node = p;                p = p->parent;                if (p == nullptr)                    return nullptr;            }            return p;        }    }} 仔細觀察上述代碼,總覺得有點囉嗦。比如,過多的 return,步驟 2 的層次太多。綜合考慮所有情況,改進代碼如下: Node * Increment(Node * node){    if (node->right)    {        node = node->right;        while (node->left)            node = node->left;    }    else    {        Node * p = node->parent;        while (p && p->right == node)        {            node = p;            p = p->parent;        }        node = p;    }    return node;} 上述的代碼是基於結點有 parent 指針的,若題意要求沒有 parent 呢?網上也有人給出了答案,個人覺得沒有什麼價值,有興趣的朋友可以到這裏查看。 而求前驅結點的話,只需把上述代碼的 left 與 right 互調即可,很簡單。 17 二分查找樹轉化為排序的循環雙鏈表 二分查找樹的中序遍歷即為升序排列,問題就在於如何在遍歷的時候更改指針的指向。一種簡單的方法時,遍歷二分查找樹,將遍歷的結果放在一個數組中,之後再把該數組轉化為雙鏈表。如果題目要求只能使用 O(1)O(1) 內存,則只能在遍歷的同時構建雙鏈表,即進行指針的替換。 我們需要用遞歸的方法來解決,假定每個遞歸調用都會返回構建好的雙鏈表,可把問題分解為左右兩個子樹。由於左右子樹都已經是有序的,當前結點作為中間的一個結點,把左右子樹得到的鏈表連接起來即可。 /* 合併兩個 a, b 兩個循環雙向鏈表 */Node * Append(Node * a, Node * b){    if (a == nullptr) return b;    if (b == nullptr) return a;    // 分別得到兩個鏈表的最後一個元素    Node * a_last = a->left;    Node * b_last = b->left;    // 將兩個鏈表頭尾相連      a_last->right = b;    b->left = a_last;    a->left = b_last;    b_last->right = a;    return a;}/* 遞歸的解決二叉樹轉換為雙鏈表 */Node * TreeToList(Node * node){    if (node == nullptr) return nullptr;    // 遞歸解決子樹    Node * left_list = TreeToList(node->left);    Node * right_list = TreeToList(node->right);    // 把根結點轉換為一個結點的雙鏈表,方便後面的鏈表合併      node->left = node;    node->right = node;    // 合併之後即為升序排列    left_list = Append(left_list, node);    left_list = Append(left_list, right_list);    return left_list;} 18 有序鏈表轉化為平衡的二分查找樹(Binary Search Tree) 我們可以採用自頂向下的方法。先找到中間結點作為根結點,然後遞歸左右兩部分。所以我們需要先找到中間結點,對於單鏈表來説,必須要遍歷一邊,可以使用快慢指針加快查找速度。 struct TreeNode{    int data;    TreeNode * left;    TreeNode * right;    TreeNode(int data_) { data = data_; left = right = nullptr; }};struct ListNode{    int data;    ListNode * next;    ListNode(int data_) { data = data_; next = nullptr; }};TreeNode * SortedListToBST(ListNode *  list_node){    if (!list_node) return nullptr;    if (!list_node->next) return (new TreeNode(list_node->data));    // 用快慢指針找到中間結點      ListNode * pre_slow = nullptr;  // 記錄慢指針的前一個結點    ListNode * slow = list_node;    // 慢指針    ListNode * fast = list_node;    // 快指針    while (fast && fast->next)    {        pre_slow = slow;        slow = slow->next;        fast = fast->next->next;    }    TreeNode * mid = new TreeNode(slow->data);    // 分別遞歸左右兩部分    if (pre_slow)    {        pre_slow->next = nullptr;        mid->left = SortedListToBST(list_node);    }    mid->right = SortedListToBST(slow->next);    return mid;} 由 f(n)=2f(\frac n2)+\frac n2f(n)=2f(2n)+2n 得,所以上述算法的時間複雜度為 O(nlogn)O(nlogn)。 不妨換個思路,採用自底向上的方法: TreeNode * SortedListToBSTRec(ListNode *& list, int start, int end){    if (start > end) return nullptr;    int mid = start + (end - start) / 2;    TreeNode * left_child = SortedListToBSTRec(list, start, mid - 1);  // 注意此處傳入的是引用    TreeNode * parent = new TreeNode(list->data);    parent->left = left_child;    list = list->next;    parent->right = SortedListToBSTRec(list, mid + 1, end);    return parent;}TreeNode * SortedListToBST(ListNode * node){    int n = 0;    ListNode * p = node;    while (p)    {        n++;        p = p->next;    }    return SortedListToBSTRec(node, 0, n - 1);} 如此,時間複雜度降為 O(n)O(n)。 19 判斷是否是二叉查找樹 我們假定二叉樹沒有重複元素,即對於每個結點,其左右孩子都是嚴格的小於和大於。 下面給出兩個方法: 方法 1: bool IsBST(Node * node, int min, int max){    if (node == nullptr)        return true;    if (node->data data >= max)        return false;    return IsBST(node->left, min, node->data) && IsBST(node->right, node->data, max);}IsBST(node, INT_MIN, INT_MAX); 方法 2: 利用二叉查找樹中序遍歷時元素遞增來判斷。 bool IsBST(Node * node){    static int pre = INT_MIN;    if (node == nullptr)        return true;    if (!IsBST(node->left))        return false;    if (node->data data;    return IsBST(node->right);} - EOF - 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-28 關鍵詞: 嵌入式 C語言

  • 2020長沙網絡安全·智能製造大會在長沙召開

    2020長沙網絡安全·智能製造大會在長沙召開

    2020年11月28-30日,由中共湖南省委網絡安全和信息化委員會辦公室、湖南省工業和信息化廳、湖南省通信管理局、湖南省科學技術協會、長沙市人民政府、中國電子信息產業集團有限公司共同主辦的2020長沙網絡安全·智能製造大會在長沙國際會展中心隆重召開。 本屆大會以“創新引領 智造未來”為主題,以“全球視野、中國方案、湖南實踐、長沙模式”為主線,旨在全面貫徹黨的十九屆五中全會精神以及習近平總書記考察湖南重要講話精神,共同分享網絡安全和智能製造新技術、新產品和新應用,全面展示網絡安全和智能製造新動態、新成果和新經驗,努力踐行網絡強國和製造強國發展戰略。本屆大會涵蓋開幕峯會、高峯論壇、主題論壇、展覽展示、專項活動五個主要內容。 11月28日上午,開幕峯會上,湖南省人民政府副省長陳飛宣佈大會開幕;長沙市委副書記、市長、湖南湘江新區黨工委書記鄭建新,中國電子信息產業集團有限公司黨組書記、董事長芮曉武分別致辭。 鄭建新介紹了長沙智能製造、網絡安全產業最新發展情況和發展規劃,並指出長沙將全力打造“傾力支持、立説立行、精心呵護”的新型政商關係和市場化、法治化、國際化營商環境,大力培育數字經濟、智能製造等國家戰略性新興產業新的增長極,加快構建新發展格局、實現更高質量發展。 芮曉武介紹了數字化浪潮極大地便利人們的生產、生活方式,但也帶來危機四伏的網絡安全風險,並提出要瞄準我國網絡安全“三大痛點”,着力推進“關後門”、“堵漏洞”、“防斷供”,建立具有自主知識產權的計算機生態體系。 中國工程院院士、華中科技大學教授、中國機械工程學會理事長李培根,中國國際經濟交流中心首席研究員、國家發改委學術委員會祕書長張燕生,華為技術有限公司副總裁、華為雲與計算中國區總裁史耀宏,中國電子總經理助理、中國長城黨委書記、董事長宋黎定,綠盟科技集團股份有限公司高級副總裁葉曉虎分別作主題演講。 國家工信部、中國工程院、中國科協相關領導;湖南省委網信辦、省工信廳、省通管局、省科協相關領導;長沙市委、市政府相關領導;湖南湘江新區管委會相關領導、省內各市州工信局負責人;長沙市相關部門負責人、各區縣(市)政府相關領導、各園區管委會相關領導、各區縣(市)工信局相關負責人;國內外知名網絡安全及智能製造企業家和專家,以及媒體記者參加開幕峯會。 同時,大會還聚焦工業互聯網、智能網聯汽車、5G、機器人、人工智能、網絡安全、新基建、信創產業等產業熱點,圍繞構建網絡安全和智能製造的戰略佈局、產業熱點、前沿技術、未來前景等方面,舉辦四場高峯論壇、十場主題論壇和兩場專項活動。 本屆大會堅持規模與品質並舉,為企業搭建最前沿智造產品展示平台,設有展覽展示4個館8大主題,分別是E1館,網絡安全和智能網聯汽車主題;E2館,5G+和工業互聯網主題;E3館,智能製造解決方案和智能裝備主題;E4館,新基建和信創產業主題。大會布展面積5.4萬平方米,參展企業近500家,包括中國電子、奇安信、華為、中國移動、中國聯通、中國電信、中興通訊、中國鐵塔、中國航天科技、中國電子科技、博世汽車、大族激光、天津麒麟、天津飛騰、龍芯中科、北京同有飛驥、武漢達夢、金山軟件、人大金倉、廣汽三菱、廣汽非克、一汽紅旗等眾多知名企業。

    時間:2020-11-28 關鍵詞: AI 5G 互聯網

  • 定製龍頭索菲亞養成記:專業化、規模化、個性化

    定製龍頭索菲亞養成記:專業化、規模化、個性化

    對於南京的張女士而言,買了新房的喜悦還沒持續幾天,就被接踵而至的家裝問題搞得焦頭爛額,因為老公和自己都是忙碌的“打工人”,在沒時間沒精力的情況下,選品和裝修都是“老大難”的問題。 更讓張女士頭疼的是,安裝過程和選品過程中的不確定性太高,很有可能花費很高的代價,卻只獲得了殘次的商品和不專業的安裝。當然,張女士並不是個例,這個問題已經成為了行業的痛點,讓很多消費者望而卻步。 但是整裝則為這個痛點帶來了一些解決辦法,比如一整套家裝方案可以節省用户大量的時間和精力,可以讓他們更省心省力甚至省錢。然而在家裝公司發力整裝的同時,也需要配套的產品和售前售中售後的全程服務讓消費者有更好的體驗,也就是説專業的傢俱品牌將會發揮巨大的作用。 專家聯合,不止雙贏 而索菲亞就是這類專業品牌之一。近期在索菲亞舉辦的“星臨其境 影領菲凡”新品發佈會上,更是對傢俱品牌賦能家裝公司這件事做出了很好的詮釋。 對於一眾家裝公司來説,他們的優勢在於施工、交付,但是相對應的產品服務卻是他們缺乏的,而索菲亞則可以針對這些問題作出補充,解決家裝公司的後顧之憂。 於是在發佈會上,除了推出第12代新品,索菲亞還宣佈和聖都家裝設立合資公司。為繼續紮根廣州市發展、深度參與廣州全球定製之都,公司26日還宣佈了計劃投資約20億建設索菲亞全球發展中心。 而這次與裝修龍頭企業的合作,也是一次釋放了多層紅利的強強聯合。 首先,通過優質產品提升裝修品質。裝修過程包括兩個主要的方面——安裝和產品,消費者想要獲得一個心滿意足的裝修結果,這兩個方面的問題都需要考慮到。 這次新品發佈會中索菲亞推出的“星影”系列新品,通過專業設計,給消費者提供更時尚、更舒適的家裝產品,與聖都家裝的專業安裝服務相結合,兩方面保證最終裝修品質,能最大化提升消費者滿意度。 其次,通過專業安裝賦能服務水平。索菲亞從39年前的創造和開拓,到39年來的專注與引領,從產品風格化到風格多樣化,從終端產品獨立展示,到場景化體驗展示,不斷為行業樹立風向標。 安裝和產品是相輔相成的,優質產品要經過專業安裝才能最大化滿足消費者需求,讓消費者的體驗更好。 通過與聖都家裝的合作,索菲亞可以藉助專業家裝公司的設計、施工優勢,極大程度提升自身在交付定製傢俱時的安裝效率和滿意度,提升服務水平,同時也可以進一步掌握家裝市場的流量入口。 最後,從更多場景解決多元消費需求。不論是消費場景還是生活場景,對於家裝方面,消費者的需求總是多元的,而索菲亞和聖都家裝的強強聯合,將定製、選品、安裝、交付等場景整合在一起,一站式解決多元需求。 順應變化的流量優勢 這次的強強聯合,只是索菲亞深化全屋定製全渠道的縮影。不只是整裝,還包括經銷商、大宗工程業務、電商新零售等等,都是索菲亞推進全渠道變革的動作。從疫情(零售渠道短期受阻)和行業流量碎片化的背景下,對比單一渠道,全渠道順應了流量碎片化趨勢,具備更強的抗風險能力和潛能。目前索菲亞的全渠道營銷在行業內尚屬少見的個例,首屈一指,優勢明顯。 具體來看,根據索菲亞發佈的三季度財報數據,索菲亞在全國的終端專賣店已經超過4000家,覆蓋了1800多個城市和地區;而大宗工程渠道收入實現同比增長54.83%;並且在今年以來進行了超過600次直播,天貓京東雙十一,定製衣櫃實現七連冠。 疫情影響了整個線下零售渠道的經營,讓很多原本注重線下的行業都開始擁抱線上,再加上近些年來流量碎片化已經成為趨勢,通過全渠道的方式去獲取流量將會有更大的優勢。 其一,索菲亞順應流量變化的趨勢,讓流量獲取事半功倍,也讓平台業績得到提升。因為流量入口的分散和變化,如果繼續死守原來的單一流量入口,投入了大量資金未必會取得等量的回報。而順應變化,積極尋找新的流量獲取渠道,效果自然也會更好。 截止至2020年三季度,索菲亞通過電商引流的客户總體佔比已從16%提升到25%;一線城市的電商客户佔比逾45%。目前索菲亞電商渠道的引流成效在行業名列前茅,轉化率也在持續提升。未來,全渠道發力+渠道縱深化發展,也將繼續貢獻流量。 其二,通過打通家裝環節進行全渠道經營,增強了企業的抗風險能力。對於企業而言,單一的流量入口並不保險,就像很多隻依靠線下流量的企業,就很難熬過今年的疫情寒冬。而全渠道經營有更高的靈活度,對於特殊情況的出現有更好的應對辦法,企業的抗風險能力會隨之升高,這也會保證企業的未來發展潛力。 當然,全渠道經營的基礎是要打通更多的渠道,而新開闢的渠道同樣也需要穩固,這也是索菲亞在全渠道經營中的第三點優勢。 索菲亞在定製行業通過數字化運營、柔性化製造、智能化管理等多種技術,讓索菲亞可以在獲取用户需求、精準分析用户、按需定製產品等方面有較大的優勢,用數字化能力整裝業務的交付能力,提供高質量的服務,進一步穩固渠道釋放效能。 大家居圖景:深化與改善並存 多方渠道的擴展,幫助索菲亞深化在家裝定製方面的業務,也將會搶佔更大的市場份額,並且幫助索菲亞推進大家居戰略。而隨着索菲亞在大家居戰略的不斷深化,同樣也會給整個行業帶來改善。 首先,這會加速家裝市場的規範化,而這種規範化包括了兩個方面——產品和環保。 在產品質量方面。索菲亞大家居戰略的深化過程中,將會持續釋放優質產品和服務,而如今的消費者觀念也有了一定的變化,更高質量的產品和服務更容易被他們青睞。這就促使行業內的其他平台不得不進行產品變革,如果想要吸引消費者,那就需要拿出更高質量的產品來競爭。而在這種良性競爭之下,整個家裝市場的產品質量將會加速規範化。 在環保理念方面。不論在哪個行業中,環保已經成為一個十分重要的點。更加環保的產品理念已經成為家裝行業的共識,環保實力較強的企業將會在行業沉浮中穩定前行。並且獲得了行業標準定製權後,消費者對於企業的信任度也將得到提升。 而消費者的信任自然會拉動消費,最明顯的變化就是平台內的客單價將會得到一定的提升,這從索菲亞三季度的財報可以得到論證。截止2020年9月,索菲亞工廠端實現客單價12713元/單,同比增長12.59%,實現客單價的穩定增長。而代表索菲亞當前最高環保等級的康純板在訂單中的佔比高達65%,這一趨勢還將繼續擴大。不僅證明了索菲亞強大的產品力及環保優勢,也客觀反映了消費者對環保家居的日益看重。 另外索菲亞這種頭部平台對環保的重視,同樣也會發揮頭部效應,吸引更多的家裝企業開始環保變革,從而加速行業環保的規範化。可以預見,環保升級大戰是行業洗牌的催化劑,環保實力強勁的企業會脱穎而出,獲得行業標準制定權,受到更多消費者信賴,提升市場份額和客單值。 其次,規範之後的行業會吸引更多消費者,從而反哺行業。更規範、更便捷的家裝過程,影響消費體驗,而消費者的好評就是行業中的金字招牌,可以吸引更多新消費者進入體系中,拉動更多消費,從而讓整個行業都獲得增長。 大家居中的大未來 而伴隨着更多渠道的開拓,索菲亞在不斷推行大家居戰略時,也將會有諸多的機遇出現。 首先是通過合作伙伴的優勢,滿足更加多元的產品需求。未來人們對居家生活場景的需求將會越來越多元,而家裝和人們的生活息息相關,於是這就要求家裝平台需要滿足更加精細且多元的生活需求。 而索菲亞可以通過結合合作伙伴的優勢,進一步滿足這些需求。比如結合聖都家裝的整裝生態鏈優勢,再結合自身產品以及品牌合作矩陣,打通裝修過程中更加細小的環節,覆蓋整裝的傢俱家電家品的多元產品需求。 其次是抓住趨勢,搶佔未來智能家居市場紅利。全屋智能已經成為未來的趨勢,而家裝作為房屋內尤為重要的一點,在生活場景中使用的頻次並不低。根據iiMedia Research公佈的數據顯示,2019年中國智能家居的市場規模為1530億元,同比增長26.45%,預計2020年中國智能家居市場規模將達到1820億元。 而智能家裝同樣屬於智能家居的範疇之中,伴隨着智能家居市場擴大,也從側面説明智能家裝市場的想象空間將進一步擴大。而當下索菲亞和格力的合作也是在深化這方面的佈局,強強聯合之下,未來也有望吃到更大的市場蛋糕。 最後是貫穿始終的服務將拓寬家裝企業的邊界。隨着大家居理念的落實,家裝平台的全環節滲入,服務不再會隨着交付終止,而是會伴隨消費者更長的時間。現階段的服務只是售後維修等,但是在未來智能化程度越來越高時,產品的升級和迭代也將被包含進服務之中。 還有很多相關的領域都可以通過家裝這個切入點來切入,從家裝領域切入到服務領域,只是拓寬家裝企業邊界的一個例子。而正是這種邊界的擴張,也會讓索菲亞未來的想象空間進一步擴大。 總體來説,通過各種方法擴張渠道來持續深化大家居戰略的索菲亞,專注在如何解決整個行業痛點的同時,也給拉昇了消費者的服務體驗。而在大家居的不斷推進中,整個行業也將釋放出更多的機會和活力。 文/劉曠公眾號,ID:liukuang110

    時間:2020-11-28 關鍵詞: 家居

  • 索引為什麼能提高查詢性能....

    前言 昨天,有個女孩子問我提高數據庫查詢性能有什麼立竿見影的好方法? 這簡直是一道送分題,我自豪且略帶鄙夷的説,當然是加「索引」了。 她又不緊不慢的問,索引為什麼就能提高查詢性能。 這還用問,索引就像一本書的目錄,用目錄查當然很快。 她失望地搖了搖頭,你説的只是一個類比,可為什麼通過目錄就能提高查詢速度呢。 唉,對啊,通過書目可以快速查詢,這只是一個現象,真正原因到底是什麼呢。 那女孩看着詫異且表情僵硬的我,滿意而又意味深長的笑笑:原來你這個男程序員也不會,看來我還得靠自己研究了。 哎,熬夜又要憔悴了我這該死的美貌。 來自同行的羞辱,是可忍孰不可忍?! 於是,我踏上了數據庫索引學習的不歸路,原來數據庫索引使用了一種叫 B+ 樹的古老數據結構,當然也有 Hash 等類型,暫且不説,可 B+ 樹 這是個什麼妖魔鬼怪呢? 下面就來淺嘗輒止的扒一扒樹的前世今生。 正文 二叉樹 由 n( n > 0)個有限節點組成一個具有層次關係的集合,看起來就像一個倒掛的樹,因此稱這樣的數據結構為樹。 一個節點的子節點個數叫做度,通俗的講就是樹叉的個數。樹中最大的度叫做樹的度,也叫做階。一個 2 階樹最多有 2 個子節點即最多有 2 叉,因此這樣的樹稱為二叉樹,二叉樹是樹家族中最簡單的樹。 兩個叉的樹就是二叉樹,可這除了用來按一定結構存放數據外,跟查詢性能好像也沒關係,不會又是一個沒用的噱頭吧。 二分查找 聽説二叉樹的原始威力來源於一種叫做二分查找的算法。 相傳在鸚鵡的原始社會,存在着森嚴的等級制度,每隻鳥必須按高矮順序分出等級和尊卑。 那麼問題來了,如下圖,怎樣才能找出最高、最矮、中等高的那些鸚鵡呢、以及指定高度的那隻呢? 第一種方法: 掃描法 一個一個依次測量,完畢後所有的問題都迎刃而解。 這種一個一個依次全部測量的方法叫做掃描,他的缺點很明顯,最高和最矮,需要全部測量完畢才能知曉。 而對於指定高度,最好的情況是第一次就找到;最壞的情況是最後一次才找到,時間複雜度為 n,也就是説從 13 個鸚鵡中找到指定身高的那隻,最壞的情況是查 13 次。 第二種方法:二分法 13 個鸚鵡全部聽令,按從矮到高列隊,向左看齊,報數。 報數字 1 的就是最矮的,報數字 13 的就是最高的,報數字 7 的就是中等身高的那隻。 最好和最壞的情況都是一次找到。而查詢性能一下子提高 13 倍,我的個乖乖,無論多個只鸚鵡,時間複雜度都是 1,好可怕。 問題:我不服,你這是偷換概念,有本事對比一個查找指定高度鸚鵡的性能。 因為鸚鵡們已經按高矮排好了隊,所以指定高度的鸚鵡,要麼是站中間那個只,要麼就是在它的左邊或右邊的那羣裏。 如果是中間那個,一次就找到,如果不是隻需要從中間左邊或右邊那一半中找,再在這一半中找中間那隻,對比身高。 以此類推,每次都把查詢的範圍減半,時間複雜度log2(n)。 那麼 log2(13) 就是 4,最壞的情況也才 4 次,時間複雜度確實不是 1 了,但好像也不糟,簡化如下: 問題:如果按高矮排隊,仍然需要一個一個比較,跟掃描有什麼區別,那還不如直接掃描呢? 事實確實如此,單純的一次查詢,先排序,再二分查找,不見得比掃描快,甚至還不如。 但是,在數據的世界,大部分數據一生會被查詢無數次,如果只在數據降生的時候排一次序,往後餘生,是不是就可以直接用二分查找,這似乎就是傳説的讀多寫少,以及對應的複用。 優點: 查找快 缺點: 必須有序,需要提前排序 每次查找都需要不斷計算中間位置 二分查找樹 如果一組數據不會或不常變更,那麼他們的位置也基本不變。可是每次查詢都需要重新計算中間位置是一種浪費,而浪費可恥。 我們能不能把所有中間節點組織起來,每次使用時,直接取中間節點? 請看下圖,找到所有單次二分查找的中間節點,把他們連起來,並用手提起最中間的那個節點,就是一棵二分查找樹。 優點:二分查找樹就是通過數據結構的方式實現了二分查找算法,通過存儲中間節點的數據,彌補了二分查找每次都要計算中間位置的缺點。 平衡二叉樹: 如果二分查找樹不斷進行修改,比如刪除某些節點,經過一段時間後,最早那個中間節點的數據(根),很可能就不在中間了。 中間位置就像一個天平的支點,如果他不在中間了,那麼整個天平就會失衡,失衡的世界就會坍塌成不倫不類的瘸樹,甚至是降維成一個鏈表或者數組。 二分查找算法的關鍵在於有序和中間節點,而二分查找樹的關鍵是中間節點的維護,如果維護的節點已經不在中間了,那麼它就失去了意義。 所以必須保證「二分查找樹」是一個正確的樹,一個根節點在中心的樹,一個左右子樹層級(高度)基本相等(高度相差不超過1)的樹,一個平衡的樹。 平衡二叉樹中最常見的就是紅黑樹: 紅黑樹規定了一系列節點顏色規則,以及對應的左旋和右旋操作來保證顏色規則,從而達到樹的平衡性。 看到這花裏胡哨的顏色以及複雜的規則,讓人第一眼就望而卻步,但所有的這些,也不過是為了保證二叉樹的平衡性,由於維持平衡的操作太過麻煩,無法用一句話簡單概括,只好用一堆人鬼難分的規則和步驟來實現,只要按着這些步驟就一定能實現二叉樹的平衡。 平衡二叉樹  =  二分查找樹 + 平衡(左右高度相差不超過 1 ) 平衡二叉樹並未提高二分查找樹的性能,它只是保正樹不會被二向箔(多次增刪改)打擊降維成鏈表或不對稱的殘缺樹,永遠維持平衡。 另外,不僅僅是二叉樹,其他種類的樹,也是需要有序和平衡,才能發揮最大的威力。 多叉樹之 B-tree 兩個叉的樹就能折半查詢,理論可以提高一倍性能,那麼多個叉是不是能提高更多倍性能? 如下圖的 3 階(叉)樹(所有數據僅用於演示,非真實分佈) 每個節點維護兩個數據,並指向最多 3 個子節點。如圖 3 個子節點的數據分別為:小於 17, 17 ~ 35 ,大於 35。 假設,從上圖中查找 10 這個數,步驟如下: 找到根節點,對比 10 與 17 和 35 的大小,發現 10 < 17 在左子節點,也就是第 2 層節點; 從根節點的指針,找到左子節點,對比 10 與 8 和 12 的大小,發現 8 < 10 < 12,數據在當前節點的中間子節點,也就是第 3 層節點; 通過上步節點的指針,找到中間子節點(第 3 層節點),對比 10 與 9 和 10 的大小,發現 9 < 10 == 10,因此找到當前節點的第二數即為結果。 加上忽略的 12 個數據,從 26 個數據中查找一個數字 10,僅僅用了 log3(26)≈ 3 次,而如果用平衡二叉樹,則需要 log2(26)≈ 5 次,事實證明,多叉樹確實可以再次提高查找性能。 多叉樹是在二分查找樹的基礎上,增加單個節點的數據存儲數量,同時增加了樹的子節點數,一次計算可以把查找範圍縮小更多。 優點:二叉平衡樹的基礎上,使加載一次節點,可以加載更多路徑數據,同時把查詢範圍縮減到更小。 複雜節點:至此,我們列舉的數據都是孤零零的單個數字。試想,你手裏已經有一個數據 10,為什麼還要費力吧唧的再從一堆數據中找到這個 10,自己找自己?這不是有病嗎? 單個數字只能活在演示中,現實的世界要複雜的多,我們來看一個接近真實場景的案例。 現有一個以年齡為索引的 3 階樹,存儲了一批用户信息,如下圖: 數字為用户的年齡,其它為與樹排序查找無關的業務數據,像這種索引數據與樹排序查找無關的業務一起維護在節點的平衡多叉(階)樹稱為 B- 樹( B 樹)。 缺點:業務數據的大小可能遠遠超過了索引數據的大小,每次為了查找對比計算,需要把數據加載到內存以及 CPU 高速緩存中時,都要把索引數據和無關的業務數據全部查出來。本來一次就可以把所有索引數據加載進來,現在卻要多次才能加載完。如果所對比的節點不是所查的數據,那麼這些加載進內存的業務數據就毫無用處,全部拋棄。 磁盤I/O 計算機的功能主要為:計算、存儲和網絡。而用於計算的數據以及計算後的結果很大一部分都需要存儲起來,以備後續再次使用。向磁盤中存儲和讀取的過程叫磁盤 I/O。磁盤的讀取方式和速度會嚴重影響到整個業務的計算性能。 下面我們簡單瞭解一下磁盤是如何工作的。 磁盤大概長這個樣子: 磁盤主要由磁盤盤片、傳動手臂、讀寫磁頭和馬達組成。 為了存儲容量,主軸像穿糖葫蘆一樣把多個磁盤片組成一個陣列。通過馬達驅動主軸轉動以及傳動手臂移動,使讀寫磁頭在磁盤片上讀寫數據。大概如下: 磁盤片由很多半徑不等的同心圓組成,這些圓被稱為磁道,數據就是寫在這些磁道上。 每個磁道又劃分成塊稱為扇區。 如果磁盤是一記事本,那麼一張磁盤片就是本子的一頁紙,而主軸就是本子的裝訂線;磁道就是紙頁的行,而扇區可以看作是很寬的列。 如果在磁盤中存儲一首詩,想象中大概這個樣子。 磁盤的讀 I/O 操作,需要找到數據所在的磁盤片,以及對應的磁道和扇區。這些操作類似於從一本書中找到數據所在的頁,行,列。 因為每個磁盤片都對應一個磁頭,所以性能的關鍵就在於找行和列,即尋道和磁盤旋轉。尋道即通過磁頭找到數據所在的磁道,相當於換行到數據所在行。由於磁頭只能水平移動,即只能換行尋道,無法在指定磁道上移動,因此需要磁盤高速旋轉移動到指定扇區,類似寫春聯時,筆不動,紙動。 綜上所述,磁盤的讀寫是通過機械運動來定位數據所在位置,而 cpu 是通過電信號進行數字運算。粗略的認為,機械查詢數據,與光速處理數據的性能完全不是在一個量級,總之一句話就是磁盤處理太慢太慢了。 雖然磁盤處理數據太慢了,但是它是目前相對廉價且穩定的存儲設備,所以又不能捨棄不用,但大致可以通過以下方法進行優化。 儘量減少 I/O 次數,比如可以使用緩存; 每次 I/O 儘量獲取更多的數據; 每次 I/O 儘量獲取有用的數據,當然相應的也間接減少總 I/O 次數; 多叉樹之 B+tree 做為數據庫的索引,無論用什麼樣的數據結構維護,這些數據最終都會存儲到磁盤中。 鑑於磁盤  I/O 的性能問題,以及每次 I/O 獲取數據量上限所限,提高索引本身 I/O 的方法最好是,減少 I/O 次數和每次獲取有用的數據。 B-tree 已經大大改進了樹家族的性能,它把多個數據集中存儲在一個節點中,本身就可能減少了 I/O 次數或者尋道次數。 但是仍然有一個致命的缺陷,那就是它的索引數據與業務綁定在一塊,而業務數據的大小很有可能遠遠超過了索引數據,這會大大減小一次 I/O 有用數據的獲取,間接的增加 I/O 次數去獲取有用的索引數據。 因為業務數據才是我們查詢最終的目的,但是它又是在「二分」查找中途過程無用的數據,因此,如果只把業務數據存儲在最終查詢到的那個節點是不是就可以了? 理想很豐滿,現實很骨瘦如柴,誰知道哪個節點就是最終要查詢的節點呢? B+tree 橫空出世,B+ 樹就是為了拆分索引數據與業務數據的平衡多叉樹。 B+ 樹中,非葉子節點只保存索引數據,葉子節點保存索引數據與業務數據。這樣即保證了葉子節點的簡約乾淨,數據量大大減小,又保證了最終能查到對應的業務數。既提高了單次 I/O 數據的有效性,又減少了 I/O 次數,還實現了業務。 但是,在數據中索引與數據是分離的,不像示例那樣的? 如圖:我們只需要把真實的業務數據,換成數據所在地址就可以了,此時,業務數據所在的地址在 B+ 樹中充當業務數據。 總結 數據存儲在磁盤( SSD 跟 CPU 性能也不在一個量級),而磁盤處理數據很慢; 提高磁盤性能主要通過減少 I/O 次數,以及單次 I/O 有效數據量; 索引通過多階(一個節點保存多個數據,指向多個子節點)使樹的結構更矮胖,從而減少 I/O 次數; 索引通過 B+ 樹,把業務數據與索引數據分離,來提高單次 I/O 有效數據量,從而減少 I/O 次數; 索引通過樹數據的有序和「二分查找」(多階樹可以假設為多分查找),大大縮小查詢範圍; 索引針對的是單個字段或部分字段,數據量本身比一條記錄的數據量要少的多,這樣即使通過掃描的方式查詢索引也比掃描數據庫表本身快的多; 知識擴展 樹的結構最大的優點就是查詢性能高,因此所有需要提高查詢性能的都可以考慮樹。 而現實中也確實有這樣的例子,比如: HashMap 中的數據衝突時,鏈表轉化成紅黑樹; 數據庫索引使用的 B+ 樹; 搜索引擎倒排索引使用的字典樹; 以上只是淺嘗輒止、點到為止的描述了數據庫使用 B+ 樹索引為什麼能提高查詢性能原因及簡單過程。 並沒有深入各種數據結構的細節,也未提及其它索引類型和索引的具體存儲格式,目的僅僅是,為了讓大家對索引有一個感性的認識。 好文推薦 鍵入網址到顯示,期間發生了什麼… 涼了!張三同學沒答好「進程間通信」,被面試官掛了…. 哈嘍,我是小林,就愛圖解計算機基礎,如果覺得文章對你有幫助,歡迎分享給你的朋友,也給小林點個「在看」,這對小林非常重要,謝謝你們,給各位小姐姐小哥哥們抱拳了,我們下次見! 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 嵌入式 計算機

  • 整理了很久之前在碼雲/Github/CSDN上收藏的嵌入式產品級項目分享開源

    1、MCU產品級項目收集 早年活躍在CSDN上的時候,我曾擁有不少積分下載了很多產品級的資源,這些年我也在這些產品級的項目上學習了很多編碼技能和產品設計思維,後來加入了開源組織以後,我就飄了呀,一直活躍在碼雲/Github以及各大開源組織裏,和一羣志同道合的的大佬做着自己喜歡做的事;熱愛分享熱愛開源一直是我的個性,不管是生活,工作還是我自己的成長等等,我都願意毫無保留的分享給大家,以下是我經過精挑細選上傳的一些項目,誠心分享給大家學習,後期該倉庫會繼續維護和蒐集資源上傳,同時也希望自己手上有好項目資源的大佬能加進倉庫積極分享開源項目: 獲取方法如下: git clone //gitee.com/morixinguan/mcu-product.git 即可一次性獲取所有工程。 2、騰訊開源TencentOS-tiny-IOT-Project公共倉 另外,近期分享的開源項目:TencentOS tiny危險氣體探測儀已上傳騰訊開源的TencentOS-Tiny-IoT-Projects公共倉,這兩天晚上熬夜在乾的TencentOS tiny英國達特甲醛探測儀開源項目也即將整理上傳,如果您有比較好的項目,歡迎加入騰訊開源組織,為TencentOS-Tiny-IoT-Projects以及TencentOS tiny積極貢獻,共建的生態項目倉;傑出貢獻者,TencentOS tiny官方會提供更多福利! 獲取TencentOS-Tiny-IoT-Projects公倉地址: git clone //gitee.com/Tencent/TencentOS-Tiny-IoT-Projects.git 即可一次性獲取所有開源項目。 3、小熊派開源項目公共倉 小熊派官方也有自己的開源倉庫了,沒錯!我是這個倉庫第一個貢獻者,希望未來有更多的大佬加入小熊派開源生態社區工作小組,如下: 獲取BearPi-IOT-Projects公倉地址: git clone //gitee.com/bearpi/bearpi-iot-projects.git 即可一次性獲取小熊派所有開源項目。 引用汪總的一句話:注重實踐,不談空話,着眼未來,尋求變化,勇於反思,迅速閉環 往期精彩 報名有獎|相約2020 RT-Thread 開發者大會RDC 項目資源太緊張了,如何根據map信息進行功能裁剪和優化? 又一國產開源微內核操作系統上線!源代碼已開放下載 做了這麼久的技術自媒體,楊工,您有什麼感想要分享的嗎? 覺得本次分享的文章對您有幫助,隨手點[在看]並轉發分享,也是對我的支持。 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 嵌入式 C語言

  • 實現具有更高擊穿電壓和更低待機電流的離線輔助PSU電源裝置

    作者:James Lee 安森美半導體照明市場營銷部門經理 如今,對能源效率的需求影響着自動化的所有領域。這包括各種白家電,它們是在家庭自動化概念與如今完全不同的時代構想出來的。 幾十年前,當我們開始依賴這些設備時,能源的經濟和環境成本沒有消費者便利性那麼重要,但這種不平衡最近發生了改變,如今人們正在努力加以解決。 儘管製造商盡了最大努力,但許多白家電仍舊常常需要大量能源才能實現自身功能,包括加熱水或空氣(電燒水壺、烤箱、淋浴器、洗衣機)、冷卻空氣或其他流體(冰箱)、對流加熱(烤麪包機和烤箱)或一般運動(洗衣機/烘乾機和吸塵器的電動機)。在消費環境下,這些設備的能耗都差不多以kW計算,是業主最大的電力成本來源。 除此之外,越來越多的消費類設備採用越來越複雜的控制功能或用户界面。這些輔助功能本質上都是低功率應用,如傳感器、顯示屏和觸控面板。 從實質上講,使用旨在提供高電流的電源來為這些輔助功能供電會使效率變得很低,尤其是當這些功能需要在未使用主要功率密集型功能的情況下工作時。 這就提高了對輔助離線電源裝置的需求,這種裝置可以通過交流電源提供功率相對較低、不到40W(典型值)的直流電源。 這樣做的主要目標就是在待機期間也可以儘可能高效地提供電源。為實現這一目標,需要以最具成本、空間和能效優勢的方式實現電源功能。 產品設計工程師還需要考慮白家電的安全要求。就電源而言,這通常要求採用隔離式解決方案,但在某些情況下,相關規範要求的電氣隔離水平可通過物理設計來實現。 正因如此,市場對面向低功耗輔助離線電源應用空間的低功耗SMPS解決方案(隔離式和非隔離式)的需求不斷增長。 完全集成的解決方案 隨着半導體制造工藝向更高集成度和更穩健方向發展,這一總趨勢使得器件製造商能夠開發出單芯片解決方案來實現離線功率轉換。 通過將開關型MOSFET和控制電路集成至單個器件中,現在可以更加輕鬆地設計具有更高功率密度的開關型電源,從而提供出色的輔助電源,這類輔助電源不僅可以部署在白家電的多個區域,而且還針對上文所述輔助功能所需的功率進行了優化。 根據具體的應用和功能,輔助電源所需提供的功率會有所不同,從不到1W到高達70W不等。安森美半導體在開發該應用領域的解決方案方面有着悠久的歷史,並擁有廣泛且不斷增長的器件產品組合。 隨着超低功耗輔助電源需求的增長,安森美半導體最近推出了NCP1067x系列高壓開關。 該系列開關專為採用非隔離式(圖 1)或隔離式(圖 2)設計的低功耗離線開關型電源而開發。它將控制器和功率MOSFET完全集成在一個SOIC7封裝中,尺寸非常小巧。 雖然NCP1067x採用固定頻率模式工作,但在負載下降時會自動切換至待機模式,以降低功耗,即採用空載間歇模式。 儘管該器件採用自供電設計,即變壓器上無需輔助繞組,但如果包含輔助繞組,則可用於實現自動恢復過壓保護功能。此外,還可以通過基於時間的檢測功能實現輸出短路自動恢復保護。 由於採用了安森美半導體的超高壓技術,NCP1067x還搭載了一個RDS(on)低至12Ω的集成式700V功率MOSFET。在連接至230V交流電源的開放式框架配置中,開發人員可以實現能夠提供15.5W的電源。 為提高EMI,NCP1067x採用了頻率抖動設計,即通過在標稱開關頻率上增加一個±6%的變量。用於應用抖動的掃描鋸齒波形由器件內部生成。非隔離式設計採用了一個反饋引腳,該引腳將小部分的輸出電壓施加於集成式跨導放大器。 對更高擊穿電壓的需求不斷增加 輔助電源設計的另一個關鍵趨勢就是要求功率MOSFET上具有更高的擊穿電壓(即BVDS)。 通常,這與晶體管的物理尺寸有關,也就是説擊穿電壓越大,所需的晶體管就越大。在許多情況下,這會導致解決方案尺寸過大和過於昂貴,不適合大多數目標應用。 大多數集成MOSFET的SMPS開關均採用平面工藝。為滿足市場對尺寸和成本的限制要求,出現了具有700V BVDS的器件。 不過,BVDS越高,提供的電源浪湧和峯值電壓保護能力就越大,因此終端產品就越穩健。為此,越來越多的公司推出具有更高BVDS但仍能提供低成本、小型BoM解決方案的開關。 為此,安森美半導體開發了一款開關模塊,該模塊集成了SMPS控制器和採用自身SUPERFET® 2超級結技術構建的功率MOSFET,以便打造出能夠提供800V BVDS、同時又仍可採用雙列直插式塑料封裝的模塊。 這一革新產品系列首次為製造商提供了一種既可提高產品性能又能滿足市場商業需求的可行解決方案。 FSL5x8電流型開關係列採用PDIP-7封裝,幷包含PWM控制器和SUPERFET 2功率MOSFET。 通常,實現800V擊穿電壓需要使用控制器和單獨的分立式MOSFET。然而,安森美半導體的SUPERFET 2技術成功將這兩個器件集成至一個小型封裝中。 這樣,設計人員只需使用一個適用於隔離式(圖 3)和非隔離式(圖 4)反激設計的器件,就可以解決大約40W的高端低功耗離線輔助電源設計問題。 在NCP1067x和FSL5x8產品中,跨導放大器用作比較器,使設計人員能夠更輕鬆地開發非隔離式反激電源,從而優化可用的電路板空間,並最大程度地降低BoM。 當絕大多數低功耗離線PSU在反激模式下運行的情況下,安森美半導體的電源解決方案組合中新增了這兩款產品,帶來了新的益處,通過更高的集成度,實現更高的性能和可靠性,從而提高功率密度,降低BoM成本。 雖然所有非隔離式PSU設計都只能提供有限的供電功率,但本文概述的發展表明,可以為輔助PSU設計出一種適用於低端和高端低功耗離線PSU應用的開關。由於非隔離式反激轉換器通常比隔離式轉換器更加高效,所以也可以實現操作成本。 使用輔助離線PSU的主要目的就是為了減少終端產品消耗的待機電流。通過選用針對應用優化的高度集成器件,開發人員如今能夠以更小的電路板空間和最低的BoM成本實現這一目標。 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 電壓 電源設計

  • 嵌入式C編程之錯誤處理(附代碼例子)

    作者:clover-toeic 原文://www.cnblogs.com/clover-toeic/p/3919857.html 前言 本文主要總結嵌入式系統C語言編程中,主要的錯誤處理方式。文中涉及的代碼運行環境如下: 一、錯誤概念 1.1 錯誤分類 從嚴重性而言,程序錯誤可分為致命性和非致命性兩類。對於致命性錯誤,無法執行恢復動作,最多隻能在用户屏幕上打印出錯消息或將其寫入日誌文件,然後終止程序;而對於非致命性錯誤,多數本質上是暫時的(如資源短缺),一般恢復動作是延遲一些時間後再次嘗試。 從交互性而言,程序錯誤可分為用户錯誤和內部錯誤兩類。用户錯誤呈現給用户,通常指明用户操作上的錯誤;而程序內部錯誤呈現給程序員(可能攜帶用户不可接觸的數據細節),用於查錯和排障。 應用程序開發者可決定恢復哪些錯誤以及如何恢復。例如,若磁盤已滿,可考慮刪除非必需或已過期的數據;若網絡連接失敗,可考慮短時間延遲後重建連接。選擇合理的錯誤恢復策略,可避免應用程序的異常終止,從而改善其健壯性。 1.2 處理步驟 錯誤處理即處理程序運行時出現的任何意外或異常情況。典型的錯誤處理包含五個步驟: 程序執行時發生軟件錯誤。該錯誤可能產生於被底層驅動或內核映射為軟件錯誤的硬件響應事件(如除零)。 以一個錯誤指示符(如整數或結構體)記錄錯誤的原因及相關信息。 程序檢測該錯誤(讀取錯誤指示符,或由其主動上報); 程序決定如何處理錯誤(忽略、部分處理或完全處理); 恢復或終止程序的執行。 上述步驟用C語言代碼表述如下: int func(){    int bIsErrOccur = 0;    //do something that might invoke errors    if(bIsErrOccur)  //Stage 1: error occurred        return -1;   //Stage 2: generate error indicator    //...    return 0;}int main(void){    if(func() != 0)  //Stage 3: detect error    {        //Stage 4: handle error    }    //Stage 5: recover or abort    return 0;} 調用者可能希望函數返回成功時表示完全成功,失敗時程序恢復到調用前的狀態(但被調函數很難保證這點)。 二 、錯誤傳遞 2.1 返回值和回傳參數 C語言通常使用返回值來標誌函數是否執行成功,調用者通過if等語句檢查該返回值以判斷函數執行情況。常見的幾種調用形式如下: if((p = malloc(100)) == NULL)   //...if((c = getchar()) == EOF)   //...if((ticks = clock())  testOpen file failed: No such file or directory[wangxiaoyuan_@localhost test1]$ ./GlbErr NonexistentFile.h 2> testCannot open file 'NonexistentFile.h'(No such file or directory)! 也可仿照errno的定義和處理,定製自己的錯誤代碼: int *_fpErrNo(void){   static int dwLocalErrNo = 0;   return &dwLocalErrNo;}#define ErrNo (*_fpErrNo())#define EOUTOFRANGE  1//define other error macros...int Callee(void){    ErrNo = 1;    return -1;}int main(void){    ErrNo = 0;    if((-1 == Callee()) && (EOUTOFRANGE == ErrNo))        printf("Callee failed(ErrNo:%d)!\n", ErrNo);    return 0;} 藉助全局狀態標誌,可充分利用函數的接口(返回值和參數表)。但與返回值一樣,它隱含地要求調用者在調用函數後檢查該標誌,而這種約束同樣脆弱。 此外,全局狀態標誌存在重用和覆蓋的風險。而函數返回值是無名的臨時變量,由函數產生且只能被調用者訪問。調用完成後即可檢查或拷貝返回值,然後原始的返回對象將消失而不能被重用。又因為無名,返回值不能被覆蓋。 2.3 局部跳轉(goto) 使用goto語句可直接跳轉到函數內的錯誤處理代碼處。以除零錯誤為例: double Division(double fDividend, double fDivisor){    return fDividend/fDivisor;}int main(void){    int dwFlag = 0;    if(1 == dwFlag)    {    RaiseException:        printf("The divisor cannot be 0!\n");        exit(1);    }    dwFlag = 1;    double fDividend = 0.0, fDivisor = 0.0;    printf("Enter the dividend: ");    scanf("%lf", &fDividend);    printf("Enter the divisor : ");    scanf("%lf", &fDivisor);    if(0 == fDivisor) //不太嚴謹的浮點數判0比較        goto RaiseException;    printf("The quotient is %.2lf\n", Division(fDividend, fDivisor));    return 0;} 執行結果如下: [wangxiaoyuan_@localhost test1]$ ./testEnter the dividend: 10Enter the divisor : 0The divisor cannot be 0![wangxiaoyuan_@localhost test1]$ ./testEnter the dividend: 10Enter the divisor : 2The quotient is 5.00 雖然goto語句會破壞代碼結構性,但卻非常適用於集中錯誤處理。偽代碼示例如下: CallerFunc(){    if((ret = CalleeFunc1()) 

    時間:2020-11-27 關鍵詞: 嵌入式 C語言

  • 施耐德致謝頂象工作室 再次發現並修復漏洞

    近日,施耐德在官網中發佈的報告中公開致謝頂象洞見安全實驗室為其發現並協助修復兩個漏洞。 本次兩個漏洞涉及施耐德電氣旗下包括M340、Quantum、Premium等在內的多款PLC產品設備,以及部分型號的通信模塊。 值得注意的是,本次發現的兩個漏洞其中有一個被CVSS評為10分漏洞,攻擊者可以根據該漏洞遠程獲得管理員權限,實現對用户對添加和修改,同時還能對PLC設備進行操控或關閉。 這已經是頂象工作室今年第二次發現施耐德的10分漏洞了,之前施耐德也曾因10分漏洞向頂象公開致謝。目前,這兩個漏洞均已修復,可以在施耐德電氣官網下載相關最新補丁。 關於我們 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 施耐德 PLC

  • 通用電氣公司最大部門持續裁員,今年將裁員萬人以上

    近日,通用電氣公司宣佈將進一步裁員,此次裁員將針對航空部門,這也是通用電氣最大的部門。 本次裁員的理由是受疫情影響航空業復甦比較緩慢,雖然美國的監管機構已經解除波音737 MAX機型的停飛令,並且逐步恢復全球運營,但是美國航空業仍遭受不小的挑戰。 值得注意的是,這並不是通用今年的首次裁員,在今年5月通用電氣就曾宣佈,在今年將會在航空部門裁員25%,目前已經裁減20%的員工,節省了近10億美元的預算成本。 關於我們 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 航空 通用電氣

  • 研華被攻擊服務器已逐步恢復,目前已正常生產

    有台灣媒體消息稱,知名智能系統冠達快運香港有限公司研華遭到黑客的病毒攻擊。近日,研華對此做出聲明,公司部分服務器被黑客攻擊,目前已經逐步恢復,現在已正常生產和出貨。 研華表示,此次攻擊並不會對第四季度乃至11月的營收有任何影響。在黑客攻擊後,研華立刻啓動信息安全防護機制,並做出相應的解決措施。 根據研華的預估來看,第四季度的業績略遜色於第三季度,主要原因是雲端、物聯網方案順延,導致客户下單較為保守,營收大概在120億新台幣左右,約合人民幣28億人民幣。 關於我們 免責聲明:本文內容由21ic獲得授權後發佈,版權歸原作者所有,本平台僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平台立場,如有問題,請聯繫我們,謝謝!

    時間:2020-11-27 關鍵詞: 信息安全 服務器

  • 創易棧榮獲千萬元PreA+輪融資,做重服務,做輕交易!

    創易棧榮獲千萬元PreA+輪融資,做重服務,做輕交易!

    近日,半導體行業雲FAE在線技術服務平台--創易棧,宣佈完成銀河系創投、險峯長青千萬級Pre-A+輪融資。這是繼今年6月獲得千萬融資後的新一輪融資,時隔數月,老股東銀河系創投持續加碼。 創易棧致力於打造半導體行業芯直播和雲FAE在線技術服務入口,再通過中小客户集採協助芯片冠達快運香港有限公司直銷。本次融資資金將加大芯直播和雲FAE投入,確保半導體行業芯直播入口和雲FAE在線技術服務的行業領先地位,全力做重服務,做輕交易! 行業痛點 近些年,TI砍代理商的行為也讓業界看到原廠嘗試直銷、將客户掌握在自己手上的趨勢;代理商這邊則由於毛利率降低,不得不減少在FAE上的投入。原廠和代理商都收縮技術支持投入,造成了數量越來越少的FAE每天疲於奔命,中小型終端冠達快運香港有限公司很難得到技術支持的現象。 而另一邊,一些經驗豐富、身經百戰的電子工程師精通設計、選型、Debug等技術,卻日復一日地做着同樣的事情,拿着固定的工資,一身本領無處施展。如果讓這些工程師的價值最大化,用自己擅長的技能去幫助其他人,同時獲得物質激勵,那便能同時解決行業的兩大痛點。 2017年,創易棧應運而生! 創易棧創立3年來,致力於打造半導體行業雲FAE在線技術服務平台,平台通過芯直播服務不斷彙集了15萬+工程師用户,並且直接與半導體行業原廠對接,是原廠與終端客户研發工程師之間的橋樑。 創易棧作為半導體行業芯直播的先驅者,早在2017年成立之初,平台就與幾家國際半導體大廠成功策劃了多場直播活動,在今年疫情的大環境下,創易棧更是通過“芯直播”迅速積累了多家原廠資源。從平台成立到現在平台已經超過500場直播,近80家原廠達成合作,直播觀看累計100多萬人次。“芯直播”為原廠提供直播推廣服務,為電子工程師傳遞了最新市場信息和技術方案。 創易棧的創始人兼CEO程東海,在電子元器件領域有15年代理、方案經驗,是前利爾達科技集團副總裁、華南區總經理,帶領線下銷售團隊從0到8億年營收規模,累計超50億業績貢獻,還曾主導並參與ST等多家原廠代理授權。創始團隊的人員均是來自全球知名半導體冠達快運香港有限公司及代理商團隊的核心高管。 自7月29日,程東海在創易棧喬遷3週年之際宣佈啓動千萬融資招募雲FAE項目起,截止當前,平台已經審核通過3000+各個領域的雲FAE,平台的雲FAE在線技術服務可以為終端客户提供零門檻實時在線技術支持,可以讓工程師價值最大化,解決了原廠和FAE的兩大行業痛點。 做重服務,做輕交易 創易棧3000+雲FAE在線提供1V1實時在線技術支持,他們有來自上游專職FAE,更多的來自民間的R&D高手。雲FAE在線完美解決供應商和中小客户面臨的共同痛點,並且讓雲FAE技術變現,價值最大化,平台通過創易棧的雲FAE在線技術服務,再結合芯直播積累的原廠資源帶來的大數據,全力打造重服務,輕交易的雲FAE在線技術服務平台!

    時間:2020-11-27 關鍵詞: 半導體 芯片

  • ThinkPad對決MacBook,誰才是更強大的生產力工具?

    ThinkPad對決MacBook,誰才是更強大的生產力工具?

    ThinkPad至今仍是“生產力工具色彩”最為濃重的品牌,它是眾多追求實用性、安全性、可靠性、兼容性的商務用户的首選品牌。 ThinkPad如今依舊是生產力工具的代表產品 蘋果MacBook雖然定位也以商務為主,但因為其外觀設計更符合小資、白領用户的審美,同時其生態系統中視頻、音頻類軟件出色的易用性,使其自身既覆蓋到了“不太懂”電腦的輕度商務人羣,也覆蓋到了一部分文創設計領域的專業用户。 這就像ThinkPad與MacBook的標誌色彩一樣,一黑一白,迥然不同。 多年從事電腦產品測評,接收到的最多問題也是ThinkPad和MacBook到底哪個值得買? 這看似是一個二選一的問題,但實則涉及到的東西有很多,下面我們就試着分析一下ThinkPad和MacBook到底分別更適合什麼樣的用户? ·別把小眾需求當成大眾需求 現階段有一個誤區是,我們常常把自己的需求、或者是小眾的需求,映射成為普羅大眾的需求。比如在輕薄本產品下面的評論裏,你經常會發現這樣的句式,“這本又玩不了遊戲,居然還賣這麼貴?”,或者“又不能玩遊戲,買它來幹嘛?”。 我們常説,如何選擇筆記本電腦,主要看自己的需求是什麼。比如上面提到的遊戲本,對於遊戲玩家來説是首選,但對於更多不玩遊戲的人來説,輕薄本、商務本才是他們的首選。 因此,要弄清楚ThinkPad和MacBook適用於哪些用户,首先要了解這兩款看似都定位商用的筆記本電腦,它們各自針對的應用有何不同? ThinkPad是基於Windows系統打造的產品,而Windows本身是目前開放性、兼容性最好的PC操作系統。因此從理論上來説,ThinkPad對於所有商務用户都是適用的。尤其是一些重度生產力用户,Windows系統上的各類軟件,在功能性、兼容性方面要優於macOS系統。比如我們最常用的Office軟件,其中的Excel和PowerPoint的很多特效、動畫、功能,Windows版本要比macOS版本更為全面。 深度PPT/Excel用户會發現,Office for Mac的功能、特效、動畫有些會受到限制 那麼現實中為何並非人人都選擇ThinkPad呢?表面上看,可能是出於外觀等主觀因素的考量,但實際則是應用上的差異。 基於Windows系統打造的ThinkPad除了能夠應對輕度應用之外,還能夠承擔更多元化的重度應用。無論是計算密集型的商務人羣,還是以渲染為主的文創領域用户,亦或是設計、建築、醫療、金融等需要用到專業軟件的垂直領域用户,ThinkPad產品都能夠很好的覆蓋其應用,並實現完美兼容。 MacBook用户相比之下則顯得更加輕度。收發郵件、瀏覽網頁、觀看PDF、電話會議等等,都並非專業的、重度的商務應用模式。結合它本身的特性,MacBook覆蓋到的用户大都是Manager級別的用户,或者是輕度辦公用户、影視後期、程序員。 而如果涉及到上面提到重度應用或專業領域用户,MacBook的易用性和兼容性問題可能就會凸顯出來。因此,如果你選擇電腦更在意的是兼容性、泛用性,那麼ThinkPad是更好的選擇;而如果你是輕度用户,且自己的使用場景不存在兼容性、泛用性考量,又很中意MacBook的外觀,那麼選擇MacBook也沒毛病。 ·區分小眾應用和大眾應用 除了需求上的誤區之外,時下我們更多的是遇到應用上的誤區。 比如以M1版MacBook發佈會為例。蘋果在介紹產品特性時,主要通過Premiere視頻渲染效率來做了相關説明。此外在諸多有關M1版MacBook的測評中,Final Cut Pro X、Premiere的視頻剪輯、渲染成為測評標準。 剪視頻並非大眾化的需求 如果單從測試角度來看這無可厚非,但如果從用户的應用角度來看,可能我們就已經陷入了小眾與大眾應用的誤區。就像有人評論的那樣,“什麼時候剪視頻成了大眾化需求?”。 雖然時下視頻內容的供需越來越大,短視頻平台也是百家爭鳴,一片繁榮景象,但從用户基數來看,我們中佔據絕大多數的是視頻內容的觀看者,而非產出者。以B站為例,根據今年下旬BiliOB觀測者網站數據來看,百萬粉絲以上頭部UP主數量總計只有761人,保守算上10萬+粉絲級別的中小UP主,以及算上傳統的影視後期公司、文創設計領域的視頻類從業者,“剪視頻”都很難稱得上是“大眾化需求”。 因此在選購筆記本電腦時,剪輯效率有多快這一點,只能成為判斷性能的一個參考,並不適用於大多數用户的購買決策。 不可否認,蘋果自研的M1 SoC綜合性能很強,且得益於ARM架構精簡指令集,統一內存,以及自家封閉的軟件生態,M1為MacBook帶來了更好的每瓦能效表現、更加自然的軟件應用過渡,但其在兼容性方面的問題也不得不得到正視。 目前,為了解決兼容性問題,用户可以通過Rosseta 2虛擬轉譯x86架構應用,但整體效率肯定比直接在ThinkPad這樣的x86設備上運行要低一些。而M1由於是基於ARM架構打造,雖説可以直接使用iPad OS、iOS的軟件,但依舊需要時間去對MacBook的分辨率、操控習慣進行適配。要完成所有常用應用對M1平台的完美適配,蘋果官方給出的時間是2年。 M1版本的Photoshop Beta目前存在功能性缺失的問題 因此,在M1的兼容性尚未明朗化之前,且自身並非是macOS生態的死忠用户的話,x86架構的ThinkPad,更適合多數人的使用應用需求。 ·走出性能和體驗誤區 電腦產品的性能和體驗有着直接關係,但二者並非唯一的因果關係。 性能強對於電腦而言只是打下了很好的基礎,但體驗好不好,還需要看系統適配和軟件優化。否則我們只要用酷睿i7、酷睿i9級別的配置去運行Linux就好了,大家何必非要用Windows的電腦呢? 基於Windows系統的ThinkPad產品擁有龐大的軟件生態支持,這一點雖然MacBook也一樣。但就像前面所言,後者如果遇上一些專業應用,就可能會出現兼容性問題。這一點,工業、金融、醫療等領域的用户可能有着更加深刻的體會。 因此,在做出產品購買決策之前,性能可以作為一個參考指標,但最終還是要在性能有所保證的前提下,以體驗為核心去做出最終選擇。 整體而言ThinkPad產品在兼容性、易用性上要優於MacBook。 以旗下的X1 Carbon為例,在強勁的硬件性能基礎之上,X1 Carbon着重塑造了良好的體驗,如手感舒適的鍵盤,便於操控的指點杆和獨特設計觸控板,豐富的接口配置等等。此外,先天的Windows系統環境,使得X1 Carbon能夠勝任很多專業領域的應用需求。這對於那些講求實用性、易用性的用户來説,尤其是處於社會中堅的中年用户羣體,無疑是更加合適的選擇。 ·結語 回到標題提出的問題,“ThinkPad和MacBook如何選?” 其實歸根到底,這並非是產品之間二選一的問題,而是用户側應用需求的契合度問題。如X1 Carbon一樣的ThinkPad產品,優勢之處在於更好的兼容性、更好的泛用性,你不會遇到諸如買了之後才知道系統不支持自己常用應用的這類問題。 此外,作為商務筆記本領域的經典品牌,ThinkPad核心用户大多是70、80、90後這些中年或即將步入中年的,現階段社會的中堅力量。他們中的絕大多數人已經變得更加成熟、理性,充分了解自己的需求是什麼,想要什麼。尤其是把電腦當作生產力工具的那些人,他們的選擇多半會是ThinkPad這樣的集實用性、易用性、兼容性、可靠性於一體的產品,為什麼?其實答案很簡單——用起來安心。 而對於很多輕度商務用户來説,也就是把電腦當成辦公平台,而非生產力工具的這些用户,MacBook可以是他們的首選,或許也只是選擇之一。

    時間:2020-11-27 關鍵詞: ThinkPad MacBook

  • 用於FOT應用的VCSEL紅外泛光燈

    用於FOT應用的VCSEL紅外泛光燈

    摘要:汽車ADAS應用中3D DMS應用需求不斷增加,而3D視覺應用離不開VCSEL光源,小編就帶你認識一下我們為您準備的VCSEL光源解決方案。 在介紹我們這款燈之前先説一下VCSEL。VCSEL(Vertical-Cavity Surface-Emitting Laser)全稱垂直腔面發射激光器,它跟傳統的邊發射激光器不同,VCSEL出光方向垂直於襯底表面,易於光纖進行耦合,成本低、易於實現大規模陣列及光電集成等。隨着蘋果公司在iphone X 中使用了VCSEL半導體激光器技術,VCSEL在手機和消費電子上的應用引起人們的廣泛關注。 圖一 因為VCSEL是Face ID技術的關鍵器件之一傳感器中VCSEL的紅外光束經過衍射分成數萬個光點,這些光點照射到物體上,反射到紅外鏡頭中,通過計算獲得圖像的深度信息。這種就是利用結構光技術實現的3D傳感。 帶有VCSEL的3D傳感技術廣泛用於3D感測,AR,VR,手勢偵測,手機人臉識別等應用中。 這次要介紹的就是AMS公司一款基於VCSEL的紅外泛光燈,它紅外波段為940nm,具有體積小,功率大等優點,4.1mm*4.1mm*1.38mm的體積功率能達到2W左右。 它可以廣泛用於普通的2D紅外攝像頭的紅外輔助照明,還能用於3D TOF(Time of Flight譯為飛行時間)技術。所謂的TOF技術原理是,它的傳感器發出調製後的近紅外光,遇到物體反射,傳感器通過計算光線發射和反射時間差或者相位差換算為被拍攝景物的距離,產生深度信息。相比結構光的3D傳感,它具有更高的抗干擾能力和更遠的測量能力。 該VCSEL光源通過了AEC-Q102認證,適用於汽車上的駕駛員監測系統。可以用於2D DMS中作為紅外光源,搭配紅外攝像頭使用;也可以搭配3D傳感器使用3D人臉識別技術,做3D DMS檢測駕駛員狀態。 大家想看該VCSEL光源+人臉識別的測試文檔和視頻嗎?想看的話就點一下“在看”吧,後續為您奉上完整的測試視頻。

    時間:2020-11-27 關鍵詞: VCSEL FOT ADAS

首頁  上一頁  1 2 3 4 5 6 7 8 9 10 下一頁 尾頁
發佈文章