標籤: 南投搬家公司費用

  • 『嗨威說』算法設計與分析 – PTA 程序存儲問題 / 刪數問題 / 最優合併問題(第四章上機實踐報告)

    『嗨威說』算法設計與分析 – PTA 程序存儲問題 / 刪數問題 / 最優合併問題(第四章上機實踐報告)

    本文索引目錄:

    一、PTA實驗報告題1 : 程序存儲問題

      1.1  實踐題目

      1.2  問題描述

      1.3  算法描述

      1.4  算法時間及空間複雜度分析

    二、PTA實驗報告題2 : 刪數問題

      2.1  實踐題目

      2.2  問題描述

      2.3  算法描述

      2.4  算法時間及空間複雜度分析

    三、PTA實驗報告題3 : 最優合併問題

      3.1  實踐題目

      3.2  問題描述

      3.3  算法描述

      3.4  算法時間及空間複雜度分析

    四、實驗心得體會(實踐收穫及疑惑)

     

     

    一、PTA實驗報告題1 : 程序存儲問題

      1.1  實踐題目:

     

      1.2  問題描述:

          題意是,題干給定磁盤總容量和各個文件的佔用空間,詢問該磁盤最多能裝幾個文件。

     

      1.3  算法描述:

          簽到題,只需要將各個文件從小到大排序,並拿一個變量存儲已佔用的容量總和,進行對比即可得到結果。

    #include<bits/stdc++.h>
    #include<algorithm>
    using namespace std;
    #define MAXLENGTH 1000
    int interger[MAXLENGTH];
    int main()
    {
        int num,length;
        int sum = 0;
        int counter = 0;
        int m = 0;
        cin>>num>>length;
        for(int i=0;i<num;i++){
            cin>>interger[i];
        }
        sort(interger,interger+num);
        while(true){
            if(sum+interger[m]>length||counter==num)
                break;
            sum+=interger[m];
            counter++;
            m++;
        }
        cout<<counter<<endl;
        return 0;
     } 

     

      1.4  算法時間及空間複雜度分析:

         整體算法上看,輸入需要O(n)的時間進行輸入,最快用O(nlogn)的時間複雜度進行排序,使用O(n)的時間進行結果疊加,總時間複雜度為O(nlogn),時間複雜度花費在排序上。

        空間上,只需要一個臨時變量存儲當前佔用容量總和即可。

     

     

    二、PTA實驗報告題2 : 刪數問題

      2.1  實踐題目:

     

      2.2  問題描述:

        第二題題意是指,在給定的数字串以及可刪數個數的條件下,刪數指定k個數,得到的數是最小的。

     

      2.3  算法描述:

        首先,分析題目,刪數問題,可以用一個比較方便的函數,String類的erase函數,這個函數可以刪除字符串內的單個或多個字符,可以比較方便的處理刪數問題。

        第二,我們注意到這道題有個坑點,那就是前導零,我們需要注意100000,刪除1后結果應為0

        第三,確定我們的貪心策略:噹噹前的數,比后一位數大時,刪去當前的數。

        如:樣例178543

        用一個index時刻從頭往後掃,不滿足就后移。

     

         當滿足之後,刪除當前的值。

     

        得到17543,這時將index重新置0,並記錄已刪數+1,直到滿足最大刪數。以此類推,直接輸出string便是結果。

        AC代碼:

    #include<iostream>
    #include<algorithm>
    #include<string>
    using namespace std;
    #define MAXLENGTH 1005
    int main(){
        int k;
        string a;
        cin>>a>>k;
        int len = a.size();
        while(k>0){
            for(int i = 0;(i<a.size()-1);i++){
                if(a[i]>a[i+1])
                {
                    a.erase(i,1);
                    break;
                }
            }
            k--;
        }
        while(a.size()>1&&a[0]=='0'){
            a.erase(0,1);
        }
        cout<<a<<endl;
        return 0;
    }

     

      2.4  算法時間及空間複雜度分析:

        時間複雜度為O(n^2),即開銷在不斷的刪數和回溯到字符串頭的過程。

        空間複雜度需要一個String字符串長度,因此空間複雜度是O(n)

     

     

    三、PTA實驗報告題3 : 最優合併問題

      3.1  實踐題目:

     

      3.2  問題描述:

        該題目為:題目用 2 路合併算法將這k 個序列合併成一個序列,並且合併 2 個長度分別為m和n的序列需要m+n-1 次比較,輸出某段合併的最大比較次數和最小比較次數。

     

      3.3  算法描述:

        這道題算是哈夫曼算法的一道裸題,很容易解決,只需要使用優秀隊列不斷維護最小值或最大值即可。

        哈夫曼樹:是一顆最優二叉樹。給定n個權值作為n個恭弘=叶 恭弘子的結點,構造一棵二叉樹,若樹的帶權路徑長度達到最小,這棵樹則被稱為哈夫曼樹。

        因此本題根據哈夫曼算法,我們以最小比較次數為例:

     

     

         首先從隊列中選出兩個最小的數進行合併,並在隊列中刪除這兩個數,並將新合成數加入隊列中。

     

     

         再取最小的兩個數再進行合併,以此類推,得到最終的大數如下

        因此最小比較次數為:( 7 – 1 ) + ( 18 – 1 ) + ( 30 – 1 ) =  52,即為所得。最大比較次數也是同理。

       AC代碼如下:

    #include<bits/stdc++.h>
    using namespace std;
    priority_queue<int> Haff;
    priority_queue<int, vector<int>, greater<int> > Haff2;
    int n,ans1,ans2;
    
    int main()
    {
        cin>>n;
        for(int i = 0;i<n;i++)
        {
            int temp;
            cin>>temp;
            Haff.push(temp);
            Haff2.push(temp);
        }
    
        while(1)
        {
            if(Haff.size() == 1)
                break;
            int temp1 = Haff.top();
            Haff.pop();
            int temp2 = Haff.top();
            Haff.pop();
            Haff.push(temp1+temp2);
            ans1 += temp1+temp2-1;
        }
        
        while(1)
        {
            if(Haff2.size() == 1)
                break;
            int temp1 = Haff2.top();
            Haff2.pop();
            int temp2 = Haff2.top();
            Haff2.pop();
            Haff2.push(temp1+temp2);
            ans2 += temp1+temp2-1;
        }
        cout<<ans1<<" "<<ans2;
        return 0;
     } 

     

      3.4  算法時間及空間複雜度分析:

        由分析易知,雖然進行了兩次優先隊列維護,但是總的時間複雜度數量級是不變的,用O(n/2)的時間pop和push合成樹。在優先隊列裏面用紅黑樹對順序進行維護,時間複雜度為O(nlogn),最後將統計的結果輸出,總的時間複雜度為O(nlogn)。

       空間複雜度為兩棵紅黑樹,即T(2n) = O(n)。

     

     

    四、實驗心得體會(實踐收穫及疑惑):

        經過動態規劃的肆虐之後,貪心算法變得稍微容易很多,和三木小哥哥的合作很愉快,能夠很好較快及時的解決三道實踐問題,暫無太多的問題,繼續加油。

     

     

    如有錯誤不當之處,煩請指正。

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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • BYD:電動車銷量目標連三年翻倍

    BYD:電動車銷量目標連三年翻倍

    比亞迪(BYD)董事長兼總裁王傳福在接受中國媒體《財新網》訪談時表示,BYD看好電動車市場的發展,未來三年的銷售目標是逐年倍增,且到2020年時,電動車將取代傳統汽車成為汽車銷售的主力。

    去年全球電動車市場火熱,中國市場的銷量提升了三倍,躍升為全球最大電動車市場。BYD的電動車也跟著成長了三倍,產值來到人民幣(下同)220億元。BYD同時發展私家車、電動巴士、電動卡車與電動計程車等產品,屬多角化經營;目前,全球已有160餘座城市看得到BYD電動公車的身影,包含倫敦、阿姆斯特丹、洛杉磯、京都與50多個中國城市。

    王傳福指出,特斯拉(Tesla)專注於生產高端私家電動汽車,此一路線與BYD的多角化經營有所不同,因此不會出現直接競爭。此外,BYD會逐步減少傳統汽車的投資比例,未來將逐漸轉為以電動車為主。

    王傳福認為,北京政府對電動車的補助確實有助於銷售成長,但中國電動車市場已具一定的規模效應,生產成本會繼續下降。加上民眾對電動車的認同度持續上升,因此即使未來補貼逐漸減少,電動車的銷量也不會受到太大的衝擊。

    據統計,BYD的電動車銷售量在2015年12月來到1.09萬輛,月增41.4%。全年銷量6.17萬輛,已超越Nissan、Tesla成為全球電動車銷售冠軍。其中以插電式油電混和車「秦」與「唐」的銷量貢獻最多,達86%;其餘銷量則來自純電動車。

    (照片來源:BYD)

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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 012.Kubernetes二進制部署worker節點Flannel

    012.Kubernetes二進制部署worker節點Flannel

    一 部署flannel

    1.1 安裝flannel


    kubernetes 要求集群內各節點(包括 master 節點)能通過 Pod 網段互聯互通。flannel 使用 vxlan 技術為各節點創建一個可以互通的 Pod 網絡,使用的端口為 UDP 8472。




    flanneld 第一次啟動時,從 etcd 獲取配置的 Pod 網段信息,為本節點分配一個未使用的地址段,然後創建 flannedl.1 網絡接口(也可能是其它名稱,如 flannel1 等)。




    flannel 將分配給自己的 Pod 網段信息寫入 /run/flannel/docker 文件,docker 後續使用這個文件中的環境變量設置 docker0 網橋,從而從這個地址段為本節點的所有 Pod 容器分配 IP。

    更多flannel參考:《008.Docker Flannel+Etcd分佈式網絡部署》。

    提示:k8smaster01節點已下載相應二進制,可直接分發至node節點。

    1.2 分發flannel

      1 [root@k8smaster01 ~]# cd /opt/k8s/work
      2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
      3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
      4   do
      5     echo ">>> ${node_ip}"
      6     scp flannel/{flanneld,mk-docker-opts.sh} root@${node_ip}:/opt/k8s/bin/
      7     ssh root@${node_ip} "chmod +x /opt/k8s/bin/*"
      8   done


    1.3 創建flannel證書和密鑰


    提示:k8smaster01節點已創建flanneld的CA證書請求文件,可直接分發至node節點。

    1.4 分發證書和私鑰

      1 [root@k8smaster01 ~]# cd /opt/k8s/work
      2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
      3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
      4   do
      5     echo ">>> ${node_ip}"
      6     ssh root@${node_ip} "mkdir -p /etc/flanneld/cert"
      7     scp flanneld*.pem root@${node_ip}:/etc/flanneld/cert
      8   done


    1.5 創建flanneld的systemd


    提示:k8smaster01節點已創建創建flanneld的systemd,可直接分發至node節點。

    1.6 分發flannel systemd

      1 [root@k8smaster01 ~]# cd /opt/k8s/work
      2 [root@k8smaster01 work]# source /opt/k8s/bin/environment.sh
      3 [root@k8smaster01 work]# for node_ip in ${NODE_IPS[@]}
      4   do
      5     echo ">>> ${node_ip}"
      6     scp flanneld.service root@${node_ip}:/etc/systemd/system/
      7   done


    二 啟動並驗證

    2.1 啟動flannel

      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
      3   do
      4     echo ">>> ${node_ip}"
      5     ssh root@${node_ip} "systemctl daemon-reload && systemctl enable flanneld && systemctl restart flanneld"
      6   done


    2.2 檢查flannel啟動

      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# for node_ip in ${NODE_IPS[@]}
      3   do
      4     echo ">>> ${node_ip}"
      5     ssh root@${node_ip} "systemctl status flanneld|grep Active"
      6   done



    2.3 檢查pod網段信息

      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# etcdctl \
      3   --endpoints=${ETCD_ENDPOINTS} \
      4   --ca-file=/etc/kubernetes/cert/ca.pem \
      5   --cert-file=/etc/flanneld/cert/flanneld.pem \
      6   --key-file=/etc/flanneld/cert/flanneld-key.pem \
      7   get ${FLANNEL_ETCD_PREFIX}/config			#查看集群 Pod 網段(/16)



      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# etcdctl \
      3   --endpoints=${ETCD_ENDPOINTS} \
      4   --ca-file=/etc/kubernetes/cert/ca.pem \
      5   --cert-file=/etc/flanneld/cert/flanneld.pem \
      6   --key-file=/etc/flanneld/cert/flanneld-key.pem \
      7   ls ${FLANNEL_ETCD_PREFIX}/subnets			#查看已分配的 Pod 子網段列表(/24)
      8 [root@k8smaster01 ~]# etcdctl \
      9   --endpoints=${ETCD_ENDPOINTS} \
     10   --ca-file=/etc/kubernetes/cert/ca.pem \
     11   --cert-file=/etc/flanneld/cert/flanneld.pem \
     12   --key-file=/etc/flanneld/cert/flanneld-key.pem \
     13   get ${FLANNEL_ETCD_PREFIX}/subnets/172.30.8.0-21	#查看某一 Pod 網段對應的節點 IP 和 flannel 接口地址




    解釋:

    172.30.8.0/21 被分配給節點 k8snode02 (172.24.8.75);

    VtepMAC 為 k8snode02 節點的 flannel.1 網卡 MAC 地址。

    2.4 檢查flannel網絡信息

      1 [root@k8snode02 ~]# ip addr show



    解釋:flannel.1 網卡的地址為分配的 Pod 子網段的第一個 IP(.0),且是 /32 的地址。

    [root@k8smaster01 ~]# ip route show |grep flannel.1

    172.30.8.0/21 via 172.30.8.0 dev flannel.1 onlink

    172.30.128.0/21 via 172.30.128.0 dev flannel.1 onlink

    172.30.208.0/21 via 172.30.208.0 dev flannel.1 onlink

    172.30.216.0/21 via 172.30.216.0 dev flannel.1 onlink

    解釋:

    到其它節點 Pod 網段請求都被轉發到 flannel.1 網卡;

    flanneld 根據 etcd 中子網段的信息,如 ${FLANNEL_ETCD_PREFIX}/subnets/172.30.32.0-21 ,來決定進請求發送給哪個節點的互聯 IP。

    2.5 驗證各節點flannel


    在各節點上部署 flannel 后,檢查是否創建了 flannel 接口(名稱可能為 flannel0、flannel.0、flannel.1 等):

      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
      3   do
      4     echo ">>> ${all_ip}"
      5     ssh ${all_ip} "/usr/sbin/ip addr show flannel.1|grep -w inet"
      6   done



    輸出:








    在各節點上 ping 所有 flannel 接口 IP,確保能通:

      1 [root@k8smaster01 ~]# source /opt/k8s/bin/environment.sh
      2 [root@k8smaster01 ~]# for all_ip in ${ALL_IPS[@]}
      3   do
      4     echo ">>> ${all_ip}"
      5     ssh ${all_ip} "ping -c 1 172.30.8.0"
      6     ssh ${all_ip} "ping -c 1 172.30.32.0"
      7     ssh ${all_ip} "ping -c 1 172.30.128.0"
      8     ssh ${all_ip} "ping -c 1 172.30.208.0"
      9     ssh ${all_ip} "ping -c 1 172.30.216.0"
     10   done


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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 打破再生能源迷思 日本宮古島上的太陽能板超百搭

    文:宋瑞文(加州能源特約撰述)

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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 分析亞馬遜、澳洲、印尼大火 重點不在碳排放 而是地點與強度

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

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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 奔馳計畫發力純電動汽車市場 推出電動車家族

    據英國路透社報導,新一代奔馳E級車型實現半自動駕駛,將于底特律車展亮相,奔馳還計畫發力純電動汽車市場,推出電動車家族,與特斯拉一爭高下。

    據悉,新一代奔馳E級車型有望通過升級軟體拓展自動駕駛領域,不僅將能夠在劃定高速公路路段和堵車路段完成更長距離的自動駕駛,還將延長“脫手操作”時間。此外,該車型具備駕駛員協助工具,包括系統自動匹配法定限速、高速公路駕駛導航和自動規避導航。

    同時,韋伯表示,奔馳母公司戴勒姆集團正計畫生產新系列純電動豪華轎車。他表示,奔馳計畫增產電動汽車,以彌補插電式混合動力版轎車的不足,但電動汽車的結構設計將不僅僅限於轎車,而是“盡可能靈活”地適於豪華車型不同版本的發展,全新純電動汽車的時代即將到來。而純電動汽車的大量發售,將使奔馳需要更多的電池工廠。

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

    【其他文章推薦】

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

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

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

    ※評比南投搬家公司費用收費行情懶人包大公開

  • 大型網站的演化之路——讀《大型網站技術架構》

    大型網站的演化之路——讀《大型網站技術架構》

    大型網站的演化之路——讀《大型網站技術架構》
    ____

    author:姚毛毛的博客 & 妖生

    01 大型網站or軟件有什麼特點?

    高併發、大流量,微信都日活10億了
    7×24的高可用,俗稱的4個9(99.99%)
    海量數據的存儲與管理
    全國甚至全球的用戶分佈,複雜網絡
    安全環境很差
    需求變更頻繁,需要快速迭代

    最後,是漸進式的發展。
    所有大型網站都是從一個小網站發展起來的。
    好的網站與複雜的架構都是演化來的,而不是一開始就設計好的。
    當年才出發的時候,誰也想不到微信可以日活十億,最初的時候肯定也沒有成千上萬的服務器集群對不對。

    02 最初與第一次的演化之路:應用與數據的分離

    我們最初的小型網站是什麼樣的?
    從邏輯上看,一個應用服務、一個數據庫;從物理上看,一台服務器就搞定了。
    在用戶量增多后,我們開始需要將應用跟數據庫分離。

    那應用跟數據庫所需要的服務器配置是一樣的嗎?
    當然是NO。
    應用需要處理更多的業務邏輯,所以需要好一點多一點的CPU。
    數據庫則要快速檢索磁盤跟放置數據緩存,因此需要快一點的磁盤和大一點的內存。

    當然,所有演進的目的都是想更高、更快、更強。只是有時候沒法做到面面俱到,需要取捨。

    03 第二次演進:緩存優化

    恭喜你,網站優化了一次,體驗變好了,用戶也開始增多了,可是煩惱的又來了。
    用戶的增多,帶來的數據庫壓力也大了,怎麼辦?

    在IT行業甚至所有現實模型中都存在一個顛撲不破的真理,即二八原則。
    在網站訪問上也是如此,80%的業務訪問總是集中在20%的數據上。
    淘寶買東西就翻前面那麼一點,淘寶已經為我們找好了信用好、成交量高的賣家;百度一下也就是翻前面那兩三頁,甚至一頁里的前幾條(如果沒有廣告的話);微博熱搜吃瓜也就看前十吧,後面的你會一個個點過去嗎?

    那麼,把這20%的數據緩存起來,是不是就可以減少數據庫的訪問壓力,提高網站訪問性能了?
    YES。

    那麼,怎麼緩存呢?
    我們通常使用的緩存方案有兩種,即應用服務器上的本地緩存,和獨立的分佈式緩存。

    有什麼優缺點?
    本地緩存速度快些,但是受限於應用服務器的內存,且會導致與應用爭用的情況。
    獨立的分佈式緩存可以使用集群,速度稍慢,但也很快,基本只有網絡IO的消耗;但是缺點就一個字:貴。因為需要購買獨立的緩存服務器。
    所以在現實中,有時候,我們有時並不會購買獨立的緩存服務器,而是放在大內存的應用或數據庫服務器上,設置好閾值,共用內存。

    04 第三次演進:應用集群與數據庫的集群和讀寫分離

    哇,用了緩存后,訪問數據好快啊。
    可是用戶又增多了,應用支撐不過來了怎麼辦?真是幸福的煩惱啊。
    單台數據庫是不是有宕機的危險啊?

    唉,集群唄。花錢就完事了。

    應用集群、數據庫集群。

    這也是我們當今的軟件架構中最常用的部署方案。

    通過負責均衡調度器(nginx、F5等),可以將用戶請求通過輪詢或者IP指定的方式,分發到應用服務器集群中的任意一台服務器上,緩解應用壓力。
    而數據庫以Oracle為例,則是可以在生產服務器上安裝RAC版本,而應用可以通過訪問數據庫的VIP(Virtual IP),或者JDBC集群訪問的方式訪問數據庫。
    但是在網站的應用開發中,則一般選擇mysql的較多。雖然淘寶早期也是使用了Oracle,但是後期也轉mysql了。
    至於為什麼?
    呵呵,一個字,貴。兩個字,很貴。三個字,太貴了。

    集群的好處有兩個:1、緩解服務壓力;2、高可用,其中一台壞了,另一台還可以繼續使用,給你恢復服務的機會。

    一般軟件演化到這裏就完事了。

    但是網站有個不一樣的地方,很多時候,都是讀多寫少。
    點贊的、吃瓜的比上場評論的少很多對吧?

    而讀多的情況雖然通過緩存配置消化了一部分,但還是有一部分讀操作(緩存未命中、緩存過期)和全部的寫操作會訪問數據庫。
    所以在你的用戶量又迅猛增加到一定規模時,又是數據庫成為了我們的瓶頸。

    目前大部分數據庫都是支持主從熱備功能的,主數據庫通過主從複製機制將數據更新同步到從數據庫。
    此時我們的應用就可以建設專門的讀、寫數據庫的訪問模塊,使數據庫讀寫分離對應用透明。

    有時我們甚至會將專門的查詢模塊剝離出來,成為另一個子系統。

    05 不算演進的第四次演進:CDN與反向代理

    為什麼要做CDN?
    移動、電信、聯通……,華東、華南、西南、西北……,網絡環境複雜,每個地區訪問網站的速度都不太一樣。
    CDN跟反向代理是加速訪問的一種手段,它們的基本原理都是緩存。
    區別是CDN部署在網絡廠商的機房,反向代理是部署在網站機房。
    CDN跟反向的目的都是儘早返回數據給用戶。

    06 三國演義式的第五次演進:分佈式演進、業務的拆分與合併

    分佈式數據庫是一種最後手段,只有在單表數據非常龐大的時候才使用。
    很多網站和軟件根本用不到這一步,分佈式數據庫會帶來更麻煩的複雜性。
    網站更常用的手段是拆分業務,拆分不同的業務應用,拆分不同的業務庫,部署在不同的物理服務器上。

    這一招,在圍棋上,叫分治。在三國里,叫合久必分。

    以商城網站為例,可以將首頁、店鋪、訂單、賣家、買家拆分不同的產品線,這其中不同的產品線又可以拆分多個應用,分歸不同的業務團隊管理。

    應用之間可以通過首頁超鏈接建立關係,也可以通過消息隊列進行數據分發,當然,最多的還是訪問同一個數據存儲系統,來構成一個完整的系統。

    這叫微服務。

    隨着業務拆分越來越小,應用越來越複雜,其中又出現了一些可以共用的服務。如用戶管理、商品管理,那麼就可以將這些共用的業務提取出來,獨立部署。
    用現在流行的話來說,叫業務中台。

    在技術上,大家又造了各種各樣的輪子,解決的問題其實有很多共性。例如文件、圖片的處理、數據的存儲與搜索系統。
    技術中台也有了。

    在數據上,大家的系統因為拆分的愈來愈零碎,存儲到了不同的數據庫中,又形成了一個個數據孤島。把這些打通,做成數據倉庫,分析用戶畫像豈不美哉?優惠券推送、大數據殺熟了解一下。
    而在技術上,隨着數據越來越多,數據存儲和檢索的技術需求也越來越高。所以我們又會引用一些非關係型的技術如NoSQL、搜索引擎等等。
    最後,數據中台也有了。

    所謂分久必合,新三國成型了。

    歡迎關注我的公眾號:姚毛毛的博客

    這裡有我的編程生涯感悟與總結,有Java、Linux、Oracle、mysql的相關技術,有工作中進行的架構設計實踐和讀書理論,有JVM、Linux、數據庫的性能調優,有……

    有技術,有情懷,有溫度

    歡迎關注我:姚毛毛& 妖生

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

    【其他文章推薦】

    ※專營大陸空運台灣貨物推薦

    台灣空運大陸一條龍服務

    ※評比南投搬家公司費用收費行情懶人包大公開

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

  • 劇毒農藥賺很大 一年賣數十億美元 愈窮國家用愈兇

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

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

    【其他文章推薦】

    ※專營大陸空運台灣貨物推薦

    台灣空運大陸一條龍服務

    ※評比南投搬家公司費用收費行情懶人包大公開

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

  • 大雅加達地區一夜豪雨 再現洪患逾80處淹水

    摘錄自2020年2月25日中央社報導

    印尼大雅加達地區昨晚降下豪雨,根據印尼國家災害應變總署的統計,至今(25日)上午有87處淹水,部分地區水深達150公分,許多社區泡在水中,道路無法通行,交通混亂。

    印尼國家通訊社安塔拉(Antara)報導,氣象氣候暨地球物理局(BMKG)統計,雅加達北部的葛馬約蘭(Kemayoran)氣象站昨晚至今晨偵測到24小時278毫米的雨量,許多地區的雨量也都高達150毫米以上,達豪雨標準。

    蘇迪爾曼車站(Sudirman)、甘比爾車站(Gambir)等交通要塞因淹水關閉;雅加達快捷公車有36條路線停駛,12條路線改道,連接雅加達與近郊城市包括唐格朗(Tangerang)等多條高速公路也受到淹水影響,交通大打結。

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

    【其他文章推薦】

    ※專營大陸空運台灣貨物推薦

    台灣空運大陸一條龍服務

    ※評比南投搬家公司費用收費行情懶人包大公開

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

  • 大學生活這樣過,校招 offer 飛來找

    大學生活這樣過,校招 offer 飛來找

    01、開門見山

    由於比較喜歡分享的原因,認識了不少大學生。其中有不少佼佼者,比如說一年讀 50 本書的璐璐,校招斬獲一線大廠 Offer 的曉峰,通過運營公眾號實現經濟獨立的帥土。

    當然也有一些不知所措的,對未來。他們有些在文章底部留言,有些通過微信諮詢,還有一些在星球提問。每次我都認真地回答,他們也對我的熱情表示感謝。

    我想着,不如把自己的心得經驗通過文章的形式分享出來,這樣就能夠給更多的大學生提供參照。如果你讀完這篇文章后,有所收穫,就把它分享給更多的人。

    02、往事不可追

    蘇聯作家尼古拉·奧斯特洛夫斯基的小說《鋼鐵是怎樣煉成的》裏面有這樣一句至理名言——人生最寶貴的是生命,生命屬於人只有一次。一個人的生命應當這樣度過:當他回憶往事的時候,他不致因虛度年華而悔恨,也不致因碌碌無為而羞愧

    說來慚愧,回憶起我的大學時光,湧上心頭的是滿滿的悔恨和羞愧。

    我參加過兩次高考。第一次的成績真實地反映出了我平常的水準,我自己心裏也像明鏡一樣。沒有努力就不會有超水平的發揮。這也恰好給了我復讀的勇氣:只要努把力,沒準就會有驚喜。

    於是我從洛寧縣的一個二流高中輾轉去了平頂山市一高,下了很大的決心。結果呢,第二次的成績又真實地反映出了我平常的水準——意料之外卻也是情理之中,差二本線的分數和第一年完全一樣。

    當時我幾乎放棄了上大學的打算,還去搬了一個月的磚。詳情可以查看之前寫的文章《》

    後來實在是迫於無奈(身板不夠結實,搬不了幾塊磚),就聽從了同學的建議,志願上填了鄭州的一所大專。幸好專業服從了調劑,否則大專也上不了。我們學校錄取的分數當時蠻高的,最高分比一本線要高出一大截。大家之所以擠破頭想去,是因為學校最好的專業畢業后可以直接到國家電網上班,大多數人夢寐以求的工作。

    而我呢,比最低分只高出了零分。可想而知,我調劑后的專業「計算機網絡」在學校是多麼的不受待見。專業課的老師們秉持着和我們一起共同成長的理念,而我們秉持着和老師們一起沉淪的信心。

    上課的時候我帶着筆記本電腦在教室打遊戲,下課的時候我帶着筆記本電腦在宿舍打遊戲。除了周末去鄭州大學找女朋友散散心,我的大學生活過得是一塌糊塗,要多糟糕有多糟糕。

    可以這麼說,和璐璐、曉峰、帥土比起來,我是一個不折不扣的反面教材。可正因為如此,我接下來給出的建議那可就十足的寶貴了。多麼痛的領悟!

    03、積累項目經驗

    不少大學生以為,大學期間就應該深入學習理論知識,實戰經驗並不重要,等到工作以後再實踐也不晚。但這真的是一個錯誤的認知啊,理論知識確實非常重要,但要記住一點:學以致用。

    如果學到的理論知識不能夠應用於實戰當中,就好像我們手裡有一把南瓜子,卻沒有灑向肥沃的土壤。這樣的話,這些南瓜子就永遠只能是南瓜子,無法生根發芽,結出新的南瓜。更殘忍的是,這些南瓜子還會被我們吃進肚子里。

    我隨手查閱了一些企業的校招要求,裏面明確要求要有一定的項目經驗。這就意味着如果沒有項目經驗,就無法找到工作;找不到工作,就不會有項目經驗。好像是一個死結唉。

    也許這些校招要求過於苛刻了。說實話,我也應付不來。但我們應該知道,“人外有人,天外有天”,優秀的大學生多着呢,我們應付不來,他們一定能夠勝任。

    那有些同學可能會抱怨道,我就是一名普通的大學生,我沒他們那麼優秀,我該怎麼辦?況且,誰會樂意把項目交給我來說呢?

    別恐慌,別著急給自己設限。我之前認識一個同學,叫小曾。他說他們學校有一個群,裏面會不定期發布一些項目(企業網站、小商城等等),費用一般在 7K 左右。他缺錢的時候就找幾個宿友一起做。兩三年下來,自己主導的項目就有 3 個,還不帶輔助參与的。

    雖然是廉價勞動力,但總比無所事事強得多。畢業的時候他就感覺像旅歐回來的足球運動員,成長特別大。也成功斬獲了網易的一個 Offer。

    項目經驗嘛,沒必要非得是多麼大的項目,只要了解了項目的流程,有過思考和總結,有過入坑和爬坑,就是不可多得的項目經驗。

    再多說一句,小曾有時候會把一些搞不定的項目外包出去,賺取一些差價。你一定會覺得我在胡侃,但我想表達的是,這就是我們認識的方式。人與人之間的差距,和年齡無關,只和認知有關

    我只上過兩年大學,還一心撲在遊戲上,我的榮譽勳章上只有一個——掛科了三次,每次和同學們吹牛逼,我都要炫耀一番自己當年有多二。和同年齡段的小曾相比,我當時實在是弱爆了。我希望你以我為戒。

    04、真正的實習

    在知乎上看到一個神奇的問題:“想做一個程序員,一定要走培訓嗎?”這個問題的神奇之處就好像在問一個醫生:“我感冒了,一定要做個手術才能好嗎?”

    我大三的時候就因為這樣的無知,被騙進了一家軟件培訓機構。現在回想起來,胸口不免隱隱作痛。我大學兩年,學的是 Java 編程語言,雖然說荒唐度日,但好歹做過仿 QQ 聊天工具的,多多少少有點底子的。

    如果肯去一些招聘網站上尋找機會的話,也不會一無所獲。畢竟那時候的 Java 工程師也蠻吃香的。只是老師們沒有告訴我方法,我也沒有找到知心的大佬諮詢建議。於是連招聘網站都沒有上過,愚昧啊。

    但不管怎麼說,。而實習是一個提高自己、接觸社會的絕佳機會。

    首先,實習是有工資的。這一點特別重要,它讓我們擺脫了向父母伸手要錢的日子,有一種“翅膀長硬了”的感覺。儘管這份工資沒多少,但它證明我們對公司是有價值的。假如某個公司提倡“零工資”實習,那簡直是不要臉,不是真正的實習。

    其次,實習是有實際工作的。這一點也特別重要,它能夠讓我們茁壯地成長,有一種必須要變強的感覺。儘管每一個任務的工作量都很小,但它證明公司是重視我們的。假如公司把實習生放在一個角落沒人管,那簡直是浪費生命,不是真正的實習。

    最後,實習是有師父帶的。這一點千萬別忽視,它能夠讓我們更少犯錯、更快提高、更有收穫。儘管指導我們不是師父應盡的義務,但它證明公司是盡職盡責的。假如我們遇到的師父是負責任的,那麼謝天謝地謝師父吧。

    我在實習期的表現還不錯,順利的拿到了公司的正式邀請。畢業后一直在這家公司干,直到三年半后回到洛陽。這段工作的記憶至今依然非常美好。

    那除了培訓,還有什麼方法可以找到實習工作嗎?

    當然有,有很多!

    1)學校官網

    千萬不要忽視這一點啊!儘管學校官網的主頁一般做得稀耙爛,迎面撲來一種濃厚的“閏土”氣息,但上面的信息還是挺有價值的。

    下圖是我在鄭州大學的招生就業欄目中找到的招聘信息,更新日期為上一個工作日,蠻及時的。

    一定要未雨綢繆,不要等畢業的時候再去關注,那恐怕就有點晚了。最好從大一就開始持續關注。為什麼呢?

    如果一家企業從大一到畢業那年都在招聘,那就可以間接地說明這家企業運作的還不錯:要麼規模在擴大,要麼人員在流動,很良性,值得信賴。

    2)網上渠道

    我就不再推薦網站了,免得我有打廣告的嫌疑。只要你在搜索引擎里輸入“校園招聘”就會找到答案。去關注一些自己感興趣的公司,尤其是一些大廠,遇到心儀的就及時跟進。

    3)朋友介紹

    無論是實習找工作,還是正式找工作,朋友介紹永遠是最值得我們信賴的。這裏的“朋友”可不是躺在微信好友或者 QQ 好友列表裡的那些“占坑”朋友,而是經常有技術上的交流,生活中的交流的朋友。

    怎麼去認識這些朋友呢?教你一招,想盡一切辦法聯繫上各大知識分享社區上的大佬,那些排名比較靠前的,手頭都會有一些內推的機會。

    當然,前提是你有證明你很優秀的資本。

    05、new 一個對象

    好吧,我承認,我大學做的最正確的一件事就是——找了一個女朋友。是她,是她,就是她,讓我乏味的大學生活不再空虛寂寞冷。

    ,沒有對象就容易出現 NullPointerException。有了的話要注意安全,噓。

    這個話題我不打算談得太多,畢竟我不是情感博主。唯一給同學們的建議就是:如果遇到合適的人,認真談一場戀愛吧

    06、最後的建議

    開復老師:就要畢業了。

    回頭看自己所謂的大學生活,

    我想哭,不是因為離別,而是因為什麼都沒學到。

    我不知,簡歷該怎麼寫,若是以往我會讓它空白。

    最大的收穫也許是……對什麼都沒有的忍耐和適應……

    上面這段內容是一位同學寫給李開復老師的一封信,看完后我的眼淚一直在眼眶里打轉,因為他說出了我大二結束后的心聲。

    李開復老師給出的回復是:讀大學時,你應當掌握這七項,學好自修之道、基礎知識、實踐貫通、興趣培養、积極主動、掌控時間、為人處事。

    在我看來,這更像是對整個人生的建議。如果你來問我的話,我的回答就是以上你看到的這些內容。

    謝謝大家的閱讀,原創不易,喜歡就隨手點個贊,這將是我最強的寫作動力。如果你覺得文章對你有所幫助,也蠻有趣的,就關注一下我的微信公眾號「沉默王二」,拜謝。

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

    【其他文章推薦】

    ※專營大陸空運台灣貨物推薦

    台灣空運大陸一條龍服務

    ※評比南投搬家公司費用收費行情懶人包大公開

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