/images/avatar.png

C++ 演算法面試常函式

簡介

這邊介紹我自己在解題會用到的小抄以及解題想法。

解題思路

  1. 看題目:先想資料範圍、資料儲存形式、正負與大小會不會有影響、加總、乘積會不會超過 INT_MAX 等,這個是當下要跟面試官討論的部分
    1. 想題目的 edge case
    2. Overflow
  2. 先講暴力破解方法,並且分析時間跟空間複雜度
  3. 開始想資料結構和演算法優化
    1. One-pointer
      • Greedy
      • Prefix sum
    2. Two-pointer
      • 兩邊慢慢集中到中間
      • Sliding window
      • 快慢指標
    3. Sort
      • Binary search
    4. Divide and Conquer
    5. DP
      • Retrieve
      • Top-down/Bottom-up

常用資料結構

以下先提供各種小抄:

VSCode Markdown 開發環境

正文

介紹一下 VSCode 寫 Markdown 的環境設定,會有各種 Extension 安裝

Markdown All in One

最重要的套件,功能包含像是各種快捷健 (ctrl + b = 粗體),list 按下 enter 會自動補另外一個 list,截圖直接 ctrl + v 可以直接產生 image.png 並且直接展示在 markdown 文件。

SSL/TLS 基礎了解跟應用

正文

先看相關的影片了解 HTTPS 怎麼用 TLS/SSL 加密的。

  • 非對稱加密:伺服器有一組私鑰和公鑰,對方可以用公鑰加密,但一定要用你的私鑰才能解密
  • CA 憑證:伺服器會有一個,由第三方認證,上面有公鑰和私鑰

CA 是為了確定你是跟真的那個網站做連線。

RFC 6724 怎麼決定 DNS 解析的 IP 順序的

正文

DNS 常常用在解析 domain,獲得 domain 的 IP,常常會認為 Domain 可能最多只有一組 IPv4 and IPv6,但我們實際用指令來看 Yahoo:


kola@kola-VivoBook-ASUSLaptop-X412FAC-X412FA:~$ dig yahoo.com

; <<>> DiG 9.18.39-0ubuntu0.24.04.2-Ubuntu <<>> yahoo.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 8652
;; flags: qr rd ra; QUERY: 1, ANSWER: 6, AUTHORITY: 0, ADDITIONAL: 1

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 65494
;; QUESTION SECTION:
;yahoo.com.			IN	A

;; ANSWER SECTION:
yahoo.com.		1800	IN	A	74.6.231.21
yahoo.com.		1800	IN	A	74.6.231.20
yahoo.com.		1800	IN	A	98.137.11.164
yahoo.com.		1800	IN	A	98.137.11.163
yahoo.com.		1800	IN	A	74.6.143.26
yahoo.com.		1800	IN	A	74.6.143.25

;; Query time: 247 msec
;; SERVER: 127.0.0.53#53(127.0.0.53) (UDP)
;; WHEN: Tue Jan 27 19:01:37 CST 2026
;; MSG SIZE  rcvd: 134
信息

你用 dig google.com 查看 Google 只會看到一個 IP,是因為 Google 利用精準的 GeoDNS 與 Anycast 技術,在 DNS 回應階段就已經完成了「最佳路徑」的選擇。Client 端能做的選擇很少,主要是決定要走 IPv4 還是 IPv6。

Syslog 解釋

正文

根據維基百科定義,syslog 是一個系統日誌相關的通訊協定,定義紀錄擋訊息格式的標準,最早在 1980 由 Eric Paul Allman 發明的。

信息

Eric Allman 是現代電子郵件傳輸系統的奠基者,在 1980 年代初期,網際網路尚未統一,存在著 ARPANET、UUCP 等互不相容的網路。Allman 在加州大學柏克萊分校 (UC Berkeley) 開發了 sendmail(前身是 delivermail)。 它是第一個能夠在這些不同網路架構之間「路由」電子郵件的軟體 (MTA)。在很長一段時間裡,網際網路上 80% 以上 的電子郵件都是靠 Sendmail 傳送的。

藉由丟棄封包來防禦欺騙封包 - Bad Packets Come Back, Worse Ones Don't 論文解析

簡介

防禦 DDoS 常見的防禦方式包含

  1. 有狀態的防禦方式,像是防火牆的 Connection Tracking Table,但記憶體容易被吃完
  2. 無狀態的防禦方式,像是
    • 故意送錯誤的回硬,像是錯誤的 ACK 看對面是不是正常用戶,就會有自己的 TCP Stack,也就是當你的電腦收到一個「序號不對」的封包時,你的 OS 內核會自動觸發修正機制,回傳一個帶有正確預期序號 (Expected Sequence Number) 的 ACK 封包,告訴對方:「嘿,你送錯了,我現在其實是收到這裡…」
    • Packet Fingerprinting: 檢查封包有沒有長的怪怪的

我們這篇討論丟棄封包這個策略,這種策略是一種主動式流量驗證」(Active Traffic Verification),特別是利用 TCP 協議的重傳機制 (Retransmission) 作為「挑戰-應答」(Challenge-Response) 的訊號。