主頁 > 企業開發 > SQL中更復雜的Island&Gaps問題

SQL中更復雜的Island&Gaps問題

2022-01-17 21:01:18 企業開發

首先,如果已經討論過這個問題,我想道歉,但是經過 4 個小時的搜索,我找不到任何可以幫助我解決問題的東西。

這是這樣的場景:有塔,不同的客戶可以在塔的不同高度安裝不同的設備(如電信塔)。

SQL 中更復雜的 Island & Gaps 問題

這些是事實:

  • 塔有 4 個側面,設備只能安裝在 2 個相對的側面(對于相同的高度)。因此,我們不能將設備安裝在(相同高度)塔的 3 個不同側面而不是靠近的 2 個側面。我希望我解釋得很好。

  • 從塔的總高度開始,每個客戶都有自己的范圍。

要求是確定該塔中每個客戶端的可用性。如果客戶僅在一側安裝了設備,則將其視為部分可用;如果根本沒有設備,則將其視為可用。如果客戶將設備安裝在塔的相對兩側,則該高度將被視為不可用。

SQL 中更復雜的 Island & Gaps 問題

這些將是我們正在處理的資料:

create table tower_test
(Tower_Number        VARCHAR2(12),
 Tower_Side          VARCHAR2(1),
 Tower_Height        NUMBER,
 Tower_Height_Um     VARCHAR2(1) default 'm',
 Client              VARCHAR2(25),
 Client_Start_Height NUMBER,
 Range_From          NUMBER,
 Range_To            NUMBER);
 
-- No Client

-- Side A
-- Client 1 
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'A', 50, 'Client_1', 12, 17, 18);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'A', 50, 'Client_1', 12, 22, 23);
-- Client 2
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'A', 50, 'Client_2', 24, 35, 36);
-- Client 3
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'A', 50, 'Client_3', 40, 40, 41);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'A', 50, 'Client_3', 40, 47, 48);

-- Side B
-- Client 1
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_1', 12, 13, 14);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_1', 12, 19, 20);
-- Client 2
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_2', 24, 31, 32);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_2', 24, 37, 38);
-- Client 3
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_3', 40, 43, 44);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'B', 50, 'Client_3', 40, 46, 47);

-- Side C
-- Client 1 
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'C', 50, 'Client_1', 12, 17, 18);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'C', 50, 'Client_1', 12, 22, 23);
-- Client 2
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'C', 50, 'Client_2', 24, 28, 29);
-- Client 3
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'C', 50, 'Client_3', 40, 40, 41);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'C', 50, 'Client_3', 40, 47, 48);

-- Side D
-- Client 1
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'D', 50, 'Client_1', 12, 19, 20);
-- Client 2
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'D', 50, 'Client_2', 24, 31, 32);
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'D', 50, 'Client_2', 24, 37, 38);
-- Client 3
INSERT INTO tower_test (Tower_Number, Tower_Side, Tower_Height, Client, Client_Start_Height, Range_From, Range_To) VALUES ('123456_TWR1', 'D', 50, 'Client_3', 40, 46, 47);

COMMIT;

SELECT * FROM tower_test;

所以,從這組資料開始:

SQL 中更復雜的 Island & Gaps 問題

我需要這種格式:

SQL 中更復雜的 Island & Gaps 問題

有什么方法可以使用 Gap & Island 方法在 Oracle SQL 中實作這一點?如果是,你能解釋一下如何實作嗎?

謝謝!

uj5u.com熱心網友回復:

這是一個填補范圍空白的解決方案。

這并不完全符合預期的結果。
Fe 間隙得到一個可用的“A”代碼。
但這將是你開始的事情。

第一個 CTE 將資料展平,并獲取塔邊的計數。
第二個 CTE 增加了差距。

WITH CTE1_FLATTEND AS 
(
    SELECT 
      Tower_Number
    , Client
    , Client_Start_Height
    , Range_From
    , Range_To
    , COUNT(DISTINCT
            CASE
            WHEN Tower_Side IN ('A','C')
            THEN Tower_Side
            END) AS Total_AC
    , COUNT(DISTINCT
            CASE
            WHEN Tower_Side IN ('B','D')
            THEN Tower_Side
            END) AS Total_BD
    , COUNT(DISTINCT Tower_Side) AS Total_ABCD
    , MAX(Tower_Height) AS Tower_Height
    , MAX(Tower_Height_Um) AS Tower_Height_Um
    FROM tower_test
    GROUP BY
      Tower_Number
    , Client
    , Client_Start_Height
    , Range_From
    , Range_To
)
, CTE2_GAPS_ADDED AS
(
    SELECT
      Tower_Number
    , Client
    , Client_Start_Height
    , Client_Start_Height AS Next_Client_Start_Height
    , COALESCE(LAG(Range_To) 
        OVER (PARTITION BY Tower_Number, Client_Start_Height
              ORDER BY Range_From) 1, Client_Start_Height) AS Range_From
    , Range_From-1 AS Range_To
    , 'A' AS Avlblt_Type -- Available Gap
    , Tower_Height
    , Tower_Height_Um
    FROM CTE1_FLATTEND
   
    UNION

    SELECT
      Tower_Number
    , Client
    , Client_Start_Height
    , COALESCE(LEAD(Client_Start_Height) 
        OVER (PARTITION BY Tower_Number
              ORDER BY Range_From), Client_Start_Height) AS Next_Client_Start_Height
    , Range_To 1 AS Range_From
    , COALESCE(LEAD(Range_From) 
        OVER (PARTITION BY Tower_Number
              ORDER BY Range_From)-1, Tower_Height) AS Range_To
    , 'A' AS Avlblt_Type -- Available Gap
    , Tower_Height
    , Tower_Height_Um
    FROM CTE1_FLATTEND
   
    UNION ALL
    
    SELECT
      Tower_Number
    , Client
    , Client_Start_Height
    , Client_Start_Height AS Next_Client_Start_Height
    , Range_From
    , Range_To
    , CASE
      WHEN Total_ABCD = 1 THEN 'P' -- Partial
      WHEN Total_ABCD > 2 THEN 'F' -- Fault
      WHEN Total_AC = 2   THEN 'T' -- Taken A C
      WHEN Total_BD = 2   THEN 'T' -- Taken B D
      ELSE 'E' -- Exception
      END AS Avlblt_Type
    , Tower_Height
    , Tower_Height_Um
    FROM CTE1_FLATTEND
    
    UNION ALL
    
    SELECT
      Tower_Number
    , 'No Client' AS Client
    , 1 AS Client_Start_Height
    , 0 AS Next_Client_Start_Height
    , 0 AS Range_From
    , MIN(Client_Start_Height)-1 AS Range_To
    , 'T' AS Avlblt_Type
    , Tower_Height
    , Tower_Height_Um
    FROM CTE1_FLATTEND
    GROUP BY 
      Tower_Number
    , Tower_Height
    , Tower_Height_Um
) 
SELECT 
  Tower_Number
, Tower_Height
, Tower_Height_Um
, Client
, Avlblt_Type
, Range_From
, Range_To
--, Client_Start_Height
--, Next_Client_Start_Height
FROM CTE2_GAPS_ADDED
WHERE Range_From <= Range_To
  AND NOT (Client_Start_Height < Next_Client_Start_Height
           AND Range_From >= Next_Client_Start_Height)
ORDER BY Tower_Number, Range_From;
TOWER_NUMBER | 塔高 | TOWER_HEIGHT_UM | 客戶 | AVLBLT_TYPE | RANGE_FROM | RANGE_TO
:----------- | ------------: | :---------------- | :-------- | :------------ | ---------: | --------:
123456_TWR1 | 50 | 米 | 沒有客戶 | T | 0 | 11
123456_TWR1 | 50 | 米 | 客戶_1 | 一個 | 12 | 12
123456_TWR1 | 50 | 米 | 客戶_1 | 磷 | 13 | 14
123456_TWR1 | 50 | 米 | 客戶_1 | 一個 | 15 | 16
123456_TWR1 | 50 | 米 | 客戶_1 | T | 17 | 18
123456_TWR1 | 50 | 米 | 客戶_1 | T | 19 | 20
123456_TWR1 | 50 | 米 | 客戶_1 | 一個 | 21 | 21
123456_TWR1 | 50 | 米 | 客戶_1 | T | 22 | 23
123456_TWR1 | 50 | 米 | 客戶_2 | 一個 | 24 | 27
123456_TWR1 | 50 | 米 | 客戶_2 | 磷 | 28 | 29
123456_TWR1 | 50 | 米 | 客戶_2 | 一個 | 30 | 30
123456_TWR1 | 50 | 米 | 客戶_2 | T | 31 | 32
123456_TWR1 | 50 | 米 | 客戶_2 | 一個 | 33 | 34
123456_TWR1 | 50 | 米 | 客戶_2 | 磷 | 35 | 36
123456_TWR1 | 50 | 米 | 客戶_2 | T | 37 | 38
123456_TWR1 | 50 | 米 | 客戶_2 | 一個 | 39 | 39
123456_TWR1 | 50 | 米 | 客戶_3 | T | 40 | 41
123456_TWR1 | 50 | 米 | 客戶_3 | 一個 | 42 | 42
123456_TWR1 | 50 | 米 | 客戶_3 | 磷 | 43 | 44
123456_TWR1 | 50 | 米 | 客戶_3 | 一個 | 45 | 45
123456_TWR1 | 50 | 米 | 客戶_3 | T | 46 | 47
123456_TWR1 | 50 | 米 | 客戶_3 | T | 47 | 48
123456_TWR1 | 50 | 米 | 客戶_3 | 一個 | 49 | 50

關于db<>fiddle的演示在這里

第二個 CTE 大量使用第一個 CTE。
為了提高性能,您可以使用第一個查詢填充臨時表。然后將 CTE 中的臨時表與工會一起使用。

uj5u.com熱心網友回復:

如果您有第三范式的資料和四個表中的資料,這可能會更容易:

tower (tower_number, tower_height, tower_height_um)
tower_sides (tower_number, tower_side)
tower_client (tower_number, client, client_start_height, client_end_height)
tower_equipment(tower, client, range_from, range_to)

但是,可以將其拆分為表中的這些組件并使用:

SELECT tower_number,
       tower_height,
       tower_height_um,
       client,
       CASE availability
       WHEN 0 THEN 'T'
       WHEN 1 THEN 'P'
       END AS availability,
       range_from,
       range_to
FROM   (
SELECT h.tower_number,
       MAX(h.tower_height) AS tower_height,
       MAX(h.tower_height_um) AS tower_height_um,
       h.height,
       MAX(ch.client) AS client,
       COUNT(t.tower_side) AS availability
FROM   (
         -- Generate all the heights and sides
         WITH heights (tower_number, tower_side, height, tower_height, tower_height_um) AS (
           SELECT tower_number,
                  tower_side,
                  0,
                  MAX(tower_height),
                  MAX(tower_height_um) KEEP (DENSE_RANK LAST ORDER BY tower_height)
           FROM   tower_test
           GROUP BY tower_number, tower_side
         UNION ALL
           SELECT tower_number,
                  tower_side,
                  height   1,
                  tower_height,
                  tower_height_um
           FROM   heights
           WHERE  height < tower_height
         )
         SELECT * FROM heights
       ) h
       LEFT OUTER JOIN (
         -- Include the client heights
         SELECT *
         FROM   (
           SELECT DISTINCT
                  tower_number,
                  client,
                  client_start_height AS start_height,
                  LEAD(client_start_height - 1, 1, tower_height) OVER (
                    PARTITION BY tower_number
                    ORDER BY client_start_height, range_to
                  ) AS end_height
           FROM   tower_test
         )
         WHERE  start_height < end_height
       ) ch
       ON (    h.tower_number = ch.tower_number
           AND h.height BETWEEN ch.start_height AND ch.end_height)
       -- Include the equipment ranges
       LEFT OUTER JOIN tower_test t
       ON (    t.tower_number = h.tower_number
           AND t.tower_side = h.tower_side
           AND h.height BETWEEN t.range_from AND t.range_to)
GROUP BY
      h.tower_number,
      h.height
)
MATCH_RECOGNIZE(
  PARTITION BY tower_number
  ORDER BY height
  MEASURES
    FIRST(tower_height) AS tower_height,
    FIRST(tower_height_um) AS tower_height_um,
    FIRST(client) AS client,
    FIRST(availability) AS availability,
    FIRST(height) AS range_from,
    LAST(height) AS range_to
  ONE ROW PER MATCH
  PATTERN (client_available )
  DEFINE 
    client_available
      AS (FIRST(client) = client OR FIRST(client) IS NULL AND client IS NULL)
      AND FIRST(availability) = availability
)
WHERE availability < 2

其中,對于您的樣本資料,輸出:

TOWER_NUMBER TOWER_HEIGHT TOWER_HEIGHT_UM 客戶 可用性 范圍 RANGE_TO
123456_TWR1 50 空值 0 11
123456_TWR1 50 客戶端_1 12 12
123456_TWR1 50 客戶端_1 13 14
123456_TWR1 50 客戶端_1 15 16
123456_TWR1 50 客戶端_1 21 21
123456_TWR1 50 客戶端_2 24 27
123456_TWR1 50 客戶端_2 28 29
123456_TWR1 50 客戶端_2 30 30
123456_TWR1 50 客戶端_2 33 34
123456_TWR1 50 客戶端_2 35 36
123456_TWR1 50 客戶端_2 39 39
123456_TWR1 50 客戶_3 42 42
123456_TWR1 50 客戶_3 43 44
123456_TWR1 50 客戶_3 45 45
123456_TWR1 50 客戶_3 49 50

db<>在這里擺弄

轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/413589.html

標籤:

上一篇:如何為SQL中的所有行找到每組的最大值?

下一篇:如何使用生成系列連接兩個表

標籤雲
其他(157675) Python(38076) JavaScript(25376) Java(17977) C(15215) 區塊鏈(8255) C#(7972) AI(7469) 爪哇(7425) MySQL(7132) html(6777) 基礎類(6313) sql(6102) 熊猫(6058) PHP(5869) 数组(5741) R(5409) Linux(5327) 反应(5209) 腳本語言(PerlPython)(5129) 非技術區(4971) Android(4554) 数据框(4311) css(4259) 节点.js(4032) C語言(3288) json(3245) 列表(3129) 扑(3119) C++語言(3117) 安卓(2998) 打字稿(2995) VBA(2789) Java相關(2746) 疑難問題(2699) 细绳(2522) 單片機工控(2479) iOS(2429) ASP.NET(2402) MongoDB(2323) 麻木的(2285) 正则表达式(2254) 字典(2211) 循环(2198) 迅速(2185) 擅长(2169) 镖(2155) 功能(1967) .NET技术(1958) Web開發(1951) python-3.x(1918) HtmlCss(1915) 弹簧靴(1913) C++(1909) xml(1889) PostgreSQL(1872) .NETCore(1853) 谷歌表格(1846) Unity3D(1843) for循环(1842)

熱門瀏覽
  • IEEE1588PTP在數字化變電站時鐘同步方面的應用

    IEEE1588ptp在數字化變電站時鐘同步方面的應用 京準電子科技官微——ahjzsz 一、電力系統時間同步基本概況 隨著對IEC 61850標準研究的不斷深入,國內外學者提出基于IEC61850通信標準體系建設數字化變電站的發展思路。數字化變電站與常規變電站的顯著區別在于程序層傳統的電流/電壓互 ......

    uj5u.com 2020-09-10 03:51:52 more
  • HTTP request smuggling CL.TE

    CL.TE 簡介 前端通過Content-Length處理請求,通過反向代理或者負載均衡將請求轉發到后端,后端Transfer-Encoding優先級較高,以TE處理請求造成安全問題。 檢測 發送如下資料包 POST / HTTP/1.1 Host: ac391f7e1e9af821806e890 ......

    uj5u.com 2020-09-10 03:52:11 more
  • 網路滲透資料大全單——漏洞庫篇

    網路滲透資料大全單——漏洞庫篇漏洞庫 NVD ——美國國家漏洞庫 →http://nvd.nist.gov/。 CERT ——美國國家應急回應中心 →https://www.us-cert.gov/ OSVDB ——開源漏洞庫 →http://osvdb.org Bugtraq ——賽門鐵克 →ht ......

    uj5u.com 2020-09-10 03:52:15 more
  • 京準講述NTP時鐘服務器應用及原理

    京準講述NTP時鐘服務器應用及原理京準講述NTP時鐘服務器應用及原理 安徽京準電子科技官微——ahjzsz 北斗授時原理 授時是指接識訓通過某種方式獲得本地時間與北斗標準時間的鐘差,然后調整本地時鐘使時差控制在一定的精度范圍內。 衛星導航系統通常由三部分組成:導航授時衛星、地面檢測校正維護系統和用戶 ......

    uj5u.com 2020-09-10 03:52:25 more
  • 利用北斗衛星系統設計NTP網路時間服務器

    利用北斗衛星系統設計NTP網路時間服務器 利用北斗衛星系統設計NTP網路時間服務器 安徽京準電子科技官微——ahjzsz 概述 NTP網路時間服務器是一款支持NTP和SNTP網路時間同步協議,高精度、大容量、高品質的高科技時鐘產品。 NTP網路時間服務器設備采用冗余架構設計,高精度時鐘直接來源于北斗 ......

    uj5u.com 2020-09-10 03:52:35 more
  • 詳細解讀電力系統各種對時方式

    詳細解讀電力系統各種對時方式 詳細解讀電力系統各種對時方式 安徽京準電子科技官微——ahjzsz,更多資料請添加VX 衛星同步時鐘是我京準公司開發研制的應用衛星授時時技術的標準時間顯示和發送的裝置,該裝置以M國全球定位系統(GLOBAL POSITIONING SYSTEM,縮寫為GPS)或者我國北 ......

    uj5u.com 2020-09-10 03:52:45 more
  • 如何保證外包團隊接入企業內網安全

    不管企業規模的大小,只要企業想省錢,那么企業的某些服務就一定會采用外包的形式,然而看似美好又經濟的策略,其實也有不好的一面。下面我通過安全的角度來聊聊使用外包團的安全隱患問題。 先看看什么服務會使用外包的,最常見的就是話務/客服這種需要大量重復性、無技術性的服務,或者是一些銷售外包、特殊的職能外包等 ......

    uj5u.com 2020-09-10 03:52:57 more
  • PHP漏洞之【整型數字型SQL注入】

    0x01 什么是SQL注入 SQL是一種注入攻擊,通過前端帶入后端資料庫進行惡意的SQL陳述句查詢。 0x02 SQL整型注入原理 SQL注入一般發生在動態網站URL地址里,當然也會發生在其它地發,如登錄框等等也會存在注入,只要是和資料庫打交道的地方都有可能存在。 如這里http://192.168. ......

    uj5u.com 2020-09-10 03:55:40 more
  • [GXYCTF2019]禁止套娃

    git泄露獲取原始碼 使用GET傳參,引數為exp 經過三層過濾執行 第一層過濾偽協議,第二層過濾帶引數的函式,第三層過濾一些函式 preg_replace('/[a-z,_]+\((?R)?\)/', NULL, $_GET['exp'] (?R)參考當前正則運算式,相當于匹配函式里的引數 因此傳遞 ......

    uj5u.com 2020-09-10 03:56:07 more
  • 等保2.0實施流程

    流程 結論 ......

    uj5u.com 2020-09-10 03:56:16 more
最新发布
  • 使用Django Rest framework搭建Blog

    在前面的Blog例子中我們使用的是GraphQL, 雖然GraphQL的使用處于上升趨勢,但是Rest API還是使用的更廣泛一些. 所以還是決定回到傳統的rest api framework上來, Django rest framework的官網上給了一個很好用的QuickStart, 我參考Qu ......

    uj5u.com 2023-04-20 08:17:54 more
  • 記錄-new Date() 我忍你很久了!

    這里給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 大家平時在開發的時候有沒被new Date()折磨過?就是它的諸多怪異的設定讓你每每用的時候,都可能不小心踩坑。造成程式意外出錯,卻一下子找不到問題出處,那叫一個煩透了…… 下面,我就列舉它的“四宗罪”及應用思考 可惡的四宗罪 1. Sa ......

    uj5u.com 2023-04-20 08:17:47 more
  • 使用Vue.js實作文字跑馬燈效果

    實作文字跑馬燈效果,首先用到 substring()截取 和 setInterval計時器 clearInterval()清除計時器 效果如下: 實作代碼如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta ......

    uj5u.com 2023-04-20 08:12:31 more
  • JavaScript 運算子

    JavaScript 運算子/運算子 在 JavaScript 中,有一些運算子可以使代碼更簡潔、易讀和高效。以下是一些常見的運算子: 1、可選鏈運算子(optional chaining operator) ?.是可選鏈運算子(optional chaining operator)。?. 可選鏈操 ......

    uj5u.com 2023-04-20 08:02:25 more
  • CSS—相對單位rem

    一、概述 rem是一個相對長度單位,它的單位長度取決于根標簽html的字體尺寸。rem即root em的意思,中文翻譯為根em。瀏覽器的文本尺寸一般默認為16px,即默認情況下: 1rem = 16px rem布局原理:根據CSS媒體查詢功能,更改根標簽的字體尺寸,實作rem單位隨螢屏尺寸的變化,如 ......

    uj5u.com 2023-04-20 08:02:21 more
  • 我的第一個NPM包:panghu-planebattle-esm(胖虎飛機大戰)使用說明

    好家伙,我的包終于開發完啦 歡迎使用胖虎的飛機大戰包!! 為你的主頁添加色彩 這是一個有趣的網頁小游戲包,使用canvas和js開發 使用ES6模塊化開發 效果圖如下: (覺得圖片太sb的可以自己改) 代碼已開源!! Git: https://gitee.com/tang-and-han-dynas ......

    uj5u.com 2023-04-20 08:01:50 more
  • 如何在 vue3 中使用 jsx/tsx?

    我們都知道,通常情況下我們使用 vue 大多都是用的 SFC(Signle File Component)單檔案組件模式,即一個組件就是一個檔案,但其實 Vue 也是支持使用 JSX 來撰寫組件的。這里不討論 SFC 和 JSX 的好壞,這個仁者見仁智者見智。本篇文章旨在帶領大家快速了解和使用 Vu ......

    uj5u.com 2023-04-20 08:01:37 more
  • 【Vue2.x原始碼系列06】計算屬性computed原理

    本章目標:計算屬性是如何實作的?計算屬性快取原理以及洋蔥模型的應用?在初始化Vue實體時,我們會給每個計算屬性都創建一個對應watcher,我們稱之為計算屬性watcher ......

    uj5u.com 2023-04-20 08:01:31 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:01:10 more
  • http1.1與http2.0

    一、http是什么 通俗來講,http就是計算機通過網路進行通信的規則,是一個基于請求與回應,無狀態的,應用層協議。常用于TCP/IP協議傳輸資料。目前任何終端之間任何一種通信方式都必須按Http協議進行,否則無法連接。tcp(三次握手,四次揮手)。 請求與回應:客戶端請求、服務端回應資料。 無狀態 ......

    uj5u.com 2023-04-20 08:00:32 more