SQL知識點總結

總結的知識點主要來源于前段時間在牛客刷SQL題目中遇到的錯誤

目錄

1.WHERE字句不能與高級函數連用

2.去重——distinct

3.不等于某個值

4.查多個范圍內的值

5. 升/降序排序

6.占位符

7.統計某類別總數+計算平均值

8.合并查詢——UNION (ALL)

9.CASE 函數 (添加新字段)

10.日期相關函數

11.字符串分割

12.取出某屬性為最小值的記錄

13.CTE與滑動窗口函數

CTE(Common Table Expression,公共表表達式)

滑動窗口函數的基本概念

滑動窗口函數的語法

關鍵點

常見的滑動窗口函數

示例

滑動窗口函數的優勢

14.日期函數與滑動窗口 應用


1.WHERE字句不能與高級函數連用

### 選項A:

```sql

select productid from orders where count(productid) > 1

```

這個查詢試圖從`orders`表中選擇`productid`,其中`productid`的數量大于1。然而,這個查詢語句在SQL中是無效的,因為`WHERE`子句不能直接使用聚合函數(如`COUNT`)。聚合函數通常在`HAVING`子句中使用,該子句用于過濾聚合結果。

### 選項D:

```sql

select productid from orders group by productid having count(productid) > 1

```

這個查詢是有效的。它首先按`productid`對`orders`表進行分組,然后使用`HAVING`子句來過濾那些`productid`出現次數大于1的組。這意味著它返回的是那些在訂單中至少出現兩次的產品ID。

總結:

- **選項A**試圖執行一個無效的SQL查詢,因為它錯誤地在`WHERE`子句中使用了聚合函數。

- **選項D**正確地使用了`GROUP BY`和`HAVING`子句來選擇那些在訂單中至少出現兩次的產品ID。

### 1. 聚合函數

聚合函數用于從一組值中生成單個值。常見的聚合函數包括:

- `COUNT()`:計算行數。

- `SUM()`:計算數值列的總和。

- `AVG()`:計算數值列的平均值。

- `MAX()`:找出數值列的最大值。

- `MIN()`:找出數值列的最小值。

### 2. GROUP BY 子句

`GROUP BY`子句用于將結果集的行分組,以便可以對每個組執行聚合函數。例如,你可以按產品ID分組,然后計算每個產品的總銷售額。

### 3. HAVING 子句

`HAVING`子句用于篩選分組后的結果。與`WHERE`子句不同,`HAVING`可以與聚合函數一起使用。`WHERE`子句用于在分組之前篩選行,而`HAVING`子句用于在分組之后篩選組。

### 4. 使用場景

- **基本聚合**:直接使用聚合函數,如`SELECT COUNT(*) FROM table;`。

- **分組聚合**:使用`GROUP BY`進行分組,然后應用聚合函數,如`SELECT productid, COUNT(*) FROM orders GROUP BY productid;`。

- **篩選聚合結果**:使用`HAVING`子句篩選聚合后的結果,如`SELECT productid FROM orders GROUP BY productid HAVING COUNT(*) > 1;`。

### 5. 注意事項

- `GROUP BY`子句中的列必須出現在選擇列表中,或者在聚合函數中使用。

- `HAVING`子句中的條件可以是聚合函數的結果。

- `WHERE`子句不能包含聚合函數,它用于在分組之前篩選行。

### 6. 示例

假設有一個`orders`表,包含`productid`和`quantity`列,你可以使用以下查詢來找出每個產品的平均訂購數量:

```sql

SELECT productid, AVG(quantity) AS average_quantity

FROM orders

GROUP BY productid;

```

如果你想找出平均訂購數量超過10的產品,可以使用`HAVING`子句:

```sql

SELECT productid, AVG(quantity) AS average_quantity

FROM orders

GROUP BY productid

HAVING AVG(quantity) > 10;

```

### 7. 性能優化

- 在使用`GROUP BY`時,確保分組的列上有索引,以提高查詢性能。

- 避免在`GROUP BY`子句中使用復雜的表達式或函數,這可能會降低性能。

在SQL查詢中,`GROUP BY productid;` 子句的作用是將結果集按照 `productid` 進行分組。這意味著對于每個不同的 `productid`,都會計算一個平均值。讓我們詳細探討一下加上和不加 `GROUP BY` 子句對結果的影響:

### 加上 `GROUP BY productid;`

當你使用 `GROUP BY productid;` 子句時,查詢會按照 `productid` 對結果進行分組。具體來說,這個查詢會:

1. 將 `orders` 表中所有行按照 `productid` 進行分組。

2. 對每個 `productid` 分組,計算 `quantity` 的平均值。

3. 返回每個 `productid` 及其對應的平均 `quantity`。

例如,假設 `orders` 表如下:

| productid | quantity |

|-----------|----------|

| 1???????? | 10?????? |

| 1???????? | 20?????? |

| 2???????? | 15?????? |

| 2???????? | 25?????? |

加上 `GROUP BY productid;` 后的查詢結果將是:

| productid | average_quantity |

|-----------|------------------|

| 1???????? | 15?????????????? |

| 2???????? | 20?????????????? |

### 不加 `GROUP BY productid;`

如果不使用 `GROUP BY productid;` 子句,查詢將不會對結果進行分組。這意味著聚合函數 `AVG(quantity)` 將應用于整個結果集,而不是每個 `productid` 分組。具體來說,這個查詢會:

1. 計算整個 `orders` 表中所有 `quantity` 的平均值。

2. 返回一個包含整個表平均 `quantity` 的單一行。

例如,對于上述 `orders` 表,不加 `GROUP BY productid;` 的查詢結果將是:

| average_quantity |

|------------------|

| 18.75??????????? |

2.去重——distinct

3.不等于某個值

普通值用“!=” ;不等于空值用 “is not

4.查多個范圍內的值

Where in / not in ( , , )

5. 升/降序排序

Oder by … ASC/DESC

6.占位符

查找包含特定字符串的記錄,可以使用 LIKE 操作符,并結合通配符。常用的通配符有:

  • %:表示任意長度的任意字符序列(包括空字符序列)。
  • _:表示任意單個字符。

7.統計某類別總數+計算平均值

### 原始查詢

```sql

SELECT male_num, avg_gpa

FROM user_profile

GROUP BY gender

HAVING AVG(gpa);

```

### 問題分析

1. **`SELECT` 列未定義**

?? - `male_num` `avg_gpa` 在查詢中沒有定義,它們既不是表中的列,也不是聚合函數的結果。

?? - 你需要明確指定要選擇的列,并使用聚合函數計算這些值。

2. **`GROUP BY` 的使用**

?? - `GROUP BY` 用于對數據進行分組,但你不能直接在 `SELECT` 中使用未分組的列。

?? - 如果你想要統計每個性別的總數和平均 GPA,應該使用 `COUNT` `AVG` 函數。

3. **`HAVING` 的使用**

?? - `HAVING` 子句通常用于過濾分組后的結果,但它需要一個條件表達式。

?? - 在你的查詢中,`HAVING AVG(gpa)` 是不完整的,因為它沒有指定具體的條件。

### 修正后的查詢

假設你想要統計男性用戶的總數和平均 GPA,可以使用以下查詢:

```sql

SELECT

??? COUNT(*) AS male_num,

??? AVG(gpa) AS avg_gpa

FROM

??? user_profile

WHERE

??? gender = 'M';

```

### 如果需要分組統計

如果你想要統計每個性別的總數和平均 GPA,可以使用以下查詢:

```sql

SELECT

??? gender,

??? COUNT(*) AS num,

??? AVG(gpa) AS avg_gpa

FROM

??? user_profile

GROUP BY

??? gender;

```

### 如果需要過濾特定性別的分組結果

如果你想要過濾出平均 GPA 大于某個值的性別分組,可以使用 `HAVING` 子句。例如,過濾出平均 GPA 大于 3.5 的性別分組:

```sql

SELECT

??? gender,

??? COUNT(*) AS num,

??? AVG(gpa) AS avg_gpa

FROM

??? user_profile

GROUP BY

??? gender

HAVING

??? AVG(gpa) > 3.5;

```

  • SELECT 列的定義:SELECT 子句中的列必須是表中的實際列,或者是通過聚合函數計算得到的值。
  • GROUP BY 的使用:GROUP BY 用于分組,SELECT 子句中的列必須是分組列或聚合函數的結果。
  • HAVING 子句的使用:HAVING 用于過濾分組后的結果,必須包含一個條件表達式。
  • WHERE 子句的使用:WHERE 用于過濾行,HAVING 用于過濾分組后的結果。

分組計算:

8.合并查詢——UNION (ALL)

Union all:用于合并兩個查詢的結果集,并且不會去重。如果兩個結果集中有相同的行,它們會被保留。

Union:去重合并

9.CASE 函數 (添加新字段)

SELECT

CASE WHEN age < 25 OR age IS NULL THEN '25歲以下'

? ?? WHEN age >= 25 THEN '25歲及以上'

END as age_cut,COUNT(*) as number

FROM user_profile

GROUP BY age_cut

10.日期相關函數

1. 基本日期函數

  • YEAR(date)
    • 作用:從日期值中提取年份部分。
    • 語法:YEAR(date)
    • 示例:YEAR('2021-08-15') 返回 2021。
  • MONTH(date)
    • 作用:從日期值中提取月份部分。
    • 語法:MONTH(date)
    • 示例:MONTH('2021-08-15') 返回 8。
  • DAY(date)
    • 作用:從日期值中提取天數部分。
    • 語法:DAY(date)
    • 示例:DAY('2021-08-15') 返回 15。
  • HOUR(time)
    • 作用:從時間值中提取小時部分。
    • 語法:HOUR(time)
    • 示例:HOUR('14:30:00') 返回 14。
  • MINUTE(time)
    • 作用:從時間值中提取分鐘部分。
    • 語法:MINUTE(time)
    • 示例:MINUTE('14:30:00') 返回 30。
  • SECOND(time)
    • 作用:從時間值中提取秒數部分。
    • 語法:SECOND(time)
    • 示例:SECOND('14:30:00') 返回 0。

2. 日期格式化函數

  • DATE_FORMAT(date, format)
    • 作用:將日期值格式化為指定的字符串格式。
    • 語法:DATE_FORMAT(date, format)
    • 示例
      • DATE_FORMAT('2021-08-15', '%Y-%m-%d') 返回 '2021-08-15'。
      • DATE_FORMAT('2021-08-15', '%Y%m%d') 返回 '20210815'。

3. 日期范圍篩選

  • BETWEEN start AND end
    • 作用:用于篩選某個字段值在指定范圍內的記錄。
    • 語法:field BETWEEN start AND end
    • 示例
      • date BETWEEN '2021-08-01' AND '2021-08-31' 用于篩選日期在 2021 年 8 月 1 日到 2021 年 8 月 31 日之間的記錄。

4. 日期計算函數

  • DATE_ADD(date, INTERVAL expr type)
    • 作用:在日期上加上指定的時間間隔。
    • 語法:DATE_ADD(date, INTERVAL expr type)
    • 示例
      • DATE_ADD('2021-08-15', INTERVAL 10 DAY) 返回 '2021-08-25'。
  • DATE_SUB(date, INTERVAL expr type)
    • 作用:從日期上減去指定的時間間隔。
    • 語法:DATE_SUB(date, INTERVAL expr type)
    • 示例
      • DATE_SUB('2021-08-15', INTERVAL 10 DAY) 返回 '2021-08-05'。
  • DATEDIFF(date1, date2)
    • 作用:計算兩個日期之間的天數差。
    • 語法:DATEDIFF(date1, date2)
    • 示例
      • DATEDIFF('2021-08-25', '2021-08-15') 返回 10。

5. 當前日期和時間函數

  • NOW()
    • 作用:返回當前的日期和時間。
    • 語法:NOW()
    • 示例:NOW() 返回當前的日期和時間,例如 '2025-03-24 14:30:00'。
  • CURDATE()
    • 作用:返回當前的日期。
    • 語法:CURDATE()
    • 示例:CURDATE() 返回當前的日期,例如 '2025-03-24'。
  • CURTIME()
    • 作用:返回當前的時間。
    • 語法:CURTIME()
    • 示例:CURTIME() 返回當前的時間,例如 '14:30:00'。

6. 時間戳函數

  • UNIX_TIMESTAMP(date)
    • 作用:將日期時間轉換為 Unix 時間戳(從 1970-01-01 00:00:00 UTC 開始的秒數)。
    • 語法:UNIX_TIMESTAMP(date)
    • 示例:UNIX_TIMESTAMP('2021-08-15 14:30:00') 返回對應的 Unix 時間戳。
  • FROM_UNIXTIME(timestamp)
    • 作用:將 Unix 時間戳轉換為日期時間格式。
    • 語法:FROM_UNIXTIME(timestamp)
    • 示例:FROM_UNIXTIME(1628994600) 返回 '2021-08-15 14:30:00'。

7. 其他日期函數

  • LAST_DAY(date)
    • 作用:返回指定日期所在月份的最后一天。
    • 語法:LAST_DAY(date)
    • 示例:LAST_DAY('2021-08-15') 返回 '2021-08-31'。
  • DAYOFWEEK(date)
    • 作用:返回指定日期是星期幾(1 = 星期天,2 = 星期一,...,7 = 星期六)。
    • 語法:DAYOFWEEK(date)
    • 示例:DAYOFWEEK('2021-08-15') 返回 1(星期天)。
  • DAYOFYEAR(date)
    • 作用:返回指定日期是一年中的第幾天。
    • 語法:DAYOFYEAR(date)
    • 示例:DAYOFYEAR('2021-08-15') 返回 227。

11.字符串分割

SUBSTRING_INDEX函數

SUBSTRING_INDEX(str, delim, count):從字符串str中,以delim為分隔符,提取從開始到第count個分隔符之間的內容。

SUBSTRING_INDEX(profile, ',', 3):提取從開始到第3個逗號之前的內容。

SUBSTRING_INDEX(profile, ',', -1):提取從最后一個逗號到結束的內容。

STR_SPLIT函數

  • 在MySQL 8.0及以上版本中,可以使用STR_SPLIT函數來分割字符串。例如:

sqlCopy

SELECT STR_SPLIT(profile, ',', 1) AS height,

?????? STR_SPLIT(profile, ',', 2) AS weight,

?????? STR_SPLIT(profile, ',', 3) AS age,

?????? STR_SPLIT(profile, ',', 4) AS gender

FROM users;

12.取出某屬性為最小值的記錄

  1. 子查詢部分

(SELECT university, MIN(gpa) FROM user_profile GROUP BY university)

    • 這個子查詢首先按照university字段對user_profile表進行分組(GROUP BY) university。
    • 然后,對于每個分組(即每個大學),計算出該大學中學生的最低gpa值(MIN(gpa))。
    • 最終,子查詢返回一個包含每個大學及其對應最低gpa值的結果集。
  1. 主查詢部分

SELECT device_id, university, gpa

FROM user_profile

WHERE (university, gpa) IN (子查詢結果)

ORDER BY university

    • 主查詢從user_profile表中選擇device_id、university和gpa這三個字段。
    • WHERE子句中的條件(university, gpa) IN (...)用于篩選出那些在user_profile表中,其university和gpa的組合與子查詢返回的結果集中的某個組合相匹配的記錄。也就是說,只選擇每個大學中gpa最低的學生記錄。
    • 最后,ORDER BY university將結果按照university字段進行升序排序。

-----------------------------------------------------------

select emp_no,

birth_date,

first_name,

last_name,

gender,

hire_date

from employees

where hire_date = (select max(hire_date) from employees )?? ????//單一值用“=”,后查詢需“()”????

舉個例子: 假設user_profile表中有以下數據:

device_id

university

gpa

1

MIT

3.0

2

MIT

2.5

3

Stanford

3.5

4

Stanford

3.5

子查詢會返回:

university

min_gpa

MIT

2.5

Stanford

3.5

主查詢會根據這個結果篩選出:

device_id

university

gpa

2

MIT

2.5

3

Stanford

3.5

4

Stanford

3.5

這樣,我們就得到了每個大學中gpa最低的學生記錄,并且按照大學名稱排序。

13.CTE與滑動窗口函數

CTE(Common Table Expression,公共表表達式)

是一種臨時的結果集,可以在SQL查詢中被重復使用。它類似于一個臨時表,但它的作用范圍僅限于當前查詢。CTE可以簡化復雜的SQL查詢,使查詢更易于理解和維護。

CTE的語法結構如下:

WITH CTE_name (column1, column2, ...)

AS (

??? -- CTE的查詢定義

??? SELECT column1, column2, ...

??? FROM some_table

??? WHERE some_condition

)

SELECT column1, column2, ...

FROM CTE_name

WHERE some_condition;

滑動窗口函數的基本概念

滑動窗口函數通過 OVER 子句定義一個窗口(或范圍),并在該窗口內對數據進行計算。窗口可以基于行的順序、分組或特定的范圍來定義。常見的滑動窗口函數包括 ROW_NUMBER()RANK()DENSE_RANK()SUM()AVG()MIN()MAX() 等。

滑動窗口函數的語法

滑動窗口函數的語法結構如下:

關鍵點

  1. PARTITION BY
    • 將數據分成多個分區,窗口函數在每個分區內獨立計算。
    • 類似于 GROUP BY,但不會丟失行的細節。
  2. ORDER BY
    • 定義窗口內行的順序。
  3. ROWS RANGE
    • 定義窗口的范圍,可以是基于行數的范圍(ROWS)或基于值的范圍(RANGE)。

常見的滑動窗口函數

  1. ROW_NUMBER()
    • 為每一行分配一個唯一的序號,序號在每個分區內從1開始遞增。

  1. RANK()
    • 為每一行分配一個排名,排名在每個分區內從1開始遞增,相同值的行會分配相同的排名,但會跳過后續的排名。

  1. DENSE_RANK()
    • RANK() 類似,但不會跳過后續的排名。

  1. SUM()
    • 計算窗口內的總和。

  1. AVG()
    • 計算窗口內的平均值。

  1. MIN() MAX()
    • 計算窗口內的最小值和最大值。

示例

假設我們有一個銷售記錄表 sales,包含以下列:id(銷售記錄ID)、sale_date(銷售日期)、amount(銷售金額)。我們想計算每個銷售日期的累計銷售額。


滑動窗口函數的優勢

  • 靈活的窗口定義:可以通過 PARTITION BYORDER BY ROWS/RANGE 定義靈活的窗口。
  1. 強大的分析能力:可以輕松實現復雜的分析,如累計和、移動平均、排名等。
  2. 保持行的細節:與傳統的聚合函數不同,滑動窗口函數不會丟失行的細節。

14.日期函數與滑動窗口 應用

你正在搭建一個用戶活躍度的畫像,其中一個與活躍度相關的特征是最長連續登錄天數

請用SQL實現“202311-2023131日用戶最長的連續登錄天數

登陸表?tb_dau

fdate

user_id

2023-01-01

10000

2023-01-02

10000

2023-01-04

10000

輸出:

user_id

max_consec_days

10000

2

WITH continueDay as(

? ? select

? ? ? ? fdate,user_id,

? ? ? ? DATE_SUB(fdate, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY fdate) DAY) AS org

? ? FROM tb_dau

? ? where fdate between '2023-01-01' and '2023-1-31'

),

continueLogin as(

? ? select

? ? ? ? user_id,

? ? ? ? count(*) as consec

? ? from continueDay

? ? group by user_id,org

)

SELECT

? ? user_id,

? ? MAX(consec) AS max_consec_days

FROM

? ? continueLogin

GROUP BY

? ? user_id;

思路:

通過 DATE_SUB(fdate, INTERVAL ROW_NUMBER() OVER (PARTITION BY user_id ORDER BY fdate) DAY) 創建一個分組標識grp。如果日期是連續的,值會相同。例如:

2023-01-01 和 2023-01-02 的 grp 都是 2022-12-30。

2023-01-04 的 grp 是 2022-12-31。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/80156.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/80156.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/80156.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【軟考-高級】【信息系統項目管理師】【論文基礎】采購管理過程輸入輸出及工具技術的使用方法

采購管理概念 項目采購管理包括從項目團隊外部采購或獲取所需產品、服務或成果的各個過程。項目采購管理包括編制和管理協議所需的管理和控制過程&#xff0c;例如合同、訂購單、協議備忘錄&#xff08;MOA&#xff09;和服務水平協議&#xff08;SLA&#xff09;。 采購管理…

C++ 手寫一個內存池

內存池是一種內存管理技術&#xff0c;它預先分配一大塊內存&#xff0c;之后將其按需分割成多個小塊供程序使用。下面將詳細闡述它的好處以及適用場景。 內存池的好處 減少內存碎片&#xff1a;在動態內存分配時&#xff0c;頻繁地分配和釋放不同大小的內存塊&#xff0c;會…

LeetCode 3341.到達最后一個房間的最少時間 I:Dijkstra算法(類似深搜)-簡短清晰的話描述

【LetMeFly】3341.到達最后一個房間的最少時間 I&#xff1a;Dijkstra算法&#xff08;類似深搜&#xff09;-簡短清晰的話描述 力扣題目鏈接&#xff1a;https://leetcode.cn/problems/find-minimum-time-to-reach-last-room-i/ 有一個地窖&#xff0c;地窖中有 n x m 個房間…

學習Linux的第四天

今天我們來學習Linux的網絡配置&#xff0c;以及鏈表的知識開個小頭 三種網絡配置模式 橋接模式&#xff08;用的最多&#xff09; 2.Nat模式 3. 僅主機模式&#xff08;Nat模式的功能外&#xff0c;只能在局域網通信&#xff0c;不能訪問外網&#xff09; 橋接模式&#xf…

【 window.addEventListener(‘message‘, handleMessage)無效的問題】

在react native加載中可能出現 window.addEventListener(‘message’, handleMessage)無效&#xff0c;無法監聽到在react-native-webview中通過postMessage發送的消息&#xff0c;可以通過下面的方法來處理 window.addEventListener(message, handleMessage);document.addEven…

css識別\n換行

在CSS中&#xff0c;\n 通常不會被識別為換行符。如果你希望在CSS中實現換行效果&#xff0c;可以使用以下幾種方法&#xff1a; 使用 white-space 屬性&#xff1a; 設置 white-space: pre 或 white-space: pre-wrap&#xff0c;這樣文本中的換行符 \n 會被保留并顯示為換行。…

電容知識小結

1.同樣是電容&#xff0c;1uf的陶瓷電容和1uf的鋁電解電容是不一樣的&#xff1b; 2.實際的電容等效為ESR C ESL;ESR等效電阻和ESL等效電感&#xff1b; 3.鋁電解電容&#xff0c;瓷片電容和鉭電容。 4.電容是容納和釋放電荷的電子器件&#xff1b; 5.電容的工作&#xff1a;…

[逆向工程]什么是HOOK(鉤子)技術(二十一)

[逆向工程]什么是HOOK&#xff08;鉤子&#xff09;技術&#xff08;二十一&#xff09; HOOK&#xff08;鉤子&#xff09;是一種系統級或應用級的消息攔截與處理機制&#xff0c;廣泛用于監控、修改或增強程序行為。其核心思想是在特定事件&#xff08;如鍵盤輸入、函數調用…

java后端知識點復習

# 復習匯總 ### &#x1f9d1;?&#x1f4bb; User java關于高并發下的銀行轉賬問題&#xff0c;根據具體的例子來講解清楚 --- ### &#x1f916; Assistant --- ### &#x1f9d1;?&#x1f4bb; User java關于高并發下的銀行轉賬問題&#xff0c;根據具體的例子來講…

PostgreSQL安裝與升級cron插件

cron插件是PostgreSQL數據庫一個好用的定時任務管理的插件。 注&#xff1a;以下命令均在debian linux bookworm版本系統上驗證通過。 apt安裝cron插件 #獲取軟件包驗證的公鑰 wget --quiet -O - https://www.postgresql.org/media/keys/ACCC4CF8.asc | sudo apt-key add - #…

66、微服務保姆教程(九)微服務的高可用性

微服務的高可用性與擴展 服務的高可用性 集群搭建與負載均衡。服務的故障容錯與自愈。分布式事務與一致性 分布式事務的挑戰與解決方案。使用 RocketMQ 實現分布式事務。微服務的監控與可觀測性 metrics 和日志的收集與分析。sentinel 的監控功能。容器化與云原生 將微服務部署…

6. HTML 錨點鏈接與頁面導航

在開發長頁面或文檔類網站時,錨點鏈接(Anchor Links)是一個非常實用的功能。通過學習 HTML 錨點技術,將會掌握如何在同一頁面內實現快速跳轉,以及如何優化長頁面的導航體驗。以下是基于給定素材的學習總結和實踐心得 一、什么是錨點鏈接? 錨點鏈接(也稱為頁面內鏈接)允…

【iOS】源碼閱讀(三)——內存對齊原理

文章目錄 前言獲取內存大小的三種常用方式sizeofclass_getInstanceSizemalloc_size 總結 前言 之前學習alloc相關源碼&#xff0c;涉及到內存對齊的相關內容&#xff0c;今天筆者詳細學習了一下相關內容并寫了此篇博客。 獲取內存大小的三種常用方式 獲取內存大小的方式有很多…

新手學編程前端好還是后端

在當今數字化的時代&#xff0c;編程成為了一項備受追捧的技能。對于那些剛剛踏入編程世界的新手來說&#xff0c;常常會面臨一個重要的抉擇&#xff1a;是選擇前端開發&#xff0c;還是后端開發&#xff1f;這就像是站在一個分岔路口&#xff0c;每一條路都充滿了未知和機遇。…

【面試 · 一】vue大集合

目錄 vue2 基礎屬性 組件通信 全局狀態管理 vueX 路由 路由守衛 vue3 基礎屬性 組件通信 全局狀態管理 Pinia 路由 路由守衛 vue2、vue3生命周期 setup vue2 基礎屬性 data&#xff1a;用于定義組件的初始數據&#xff0c;必須是一個函數&#xff0c;返回一個對…

nginx之proxy_redirect應用

一、功能說明 proxy_redirect 是 Nginx 反向代理中用于修改后端返回的響應頭中 Location 和 Refresh 字段的核心指令&#xff0c;主要解決以下問題&#xff1a;協議/地址透傳錯誤&#xff1a;當后端返回的 Location 包含內部 IP、HTTP 協議或非標準端口時&#xff0c;需修正為…

[Qt] mvd使用的注意事項

在使用mvd時&#xff0c;我們可能會有這種需求&#xff0c;比如有一項的數據是文件類型&#xff0c;然后我們要彈出一個文件對話框&#xff0c;選擇一個文件路徑然后把文件路徑展示出來。 我們可能寫出如下代碼 #include "MyStyledItemDeletegate.h" #include <Q…

LeetCode 220 存在重復元素 III 題解

LeetCode 220 存在重復元素 III 題解 題目描述 給定一個整數數組 nums 和兩個整數 k 和 t&#xff0c;請判斷數組中是否存在兩個不同的索引 i 和 j&#xff0c;使得&#xff1a; abs(nums[i] - nums[j]) < tabs(i - j) < k 方法思路&#xff1a;桶排序 滑動窗口 核…

路由器詳細講解

目錄 一、路由器的定義和基本功能 二、路由器的分類 三、路由器的工作原理 四、路由器的配置 五、路由器的選購要點 路由器是一種網絡設備&#xff0c;它在計算機網絡中扮演著至關重要的角色&#xff0c;主要用于連接不同的網絡&#xff0c;并根據數據包的目的地址選擇合適…

Spring MVC @CookieValue 注解怎么用?

CookieValue 注解的作用 CookieValue 注解用于將 HTTP 請求中特定 Cookie 的值綁定到 Controller 方法的參數上。 Cookies 是由服務器發送到用戶瀏覽器并保存在本地的一小塊數據。瀏覽器在后續向同一服務器發送請求時&#xff0c;會通過 Cookie 請求頭將這些數據再帶回給服務…