交大丁戊組複試教戰手冊NYCU CS 192 / 193 · 116 學年甄試
作戰計畫 自我介紹稿 預測題
首頁 > 複試準備 > 題庫與口試
丁組 10/26(一)性向測驗+學長面談10/27(二)丁組教授口試・戊組測驗與口試整理 2013–2025 年公開心得與共筆
0%
已掌握 0 / 0 題
在題目上按「掌握」或在閃卡按「會了」

練習場

讀累了就來玩。題目取自本頁的題庫與知識庫,成績只存在你自己的瀏覽器。

第 0 / 0 張

一、情報總覽

性向測驗歷年都不計分,它是學長和教授決定「下午要問你什麼」的問卷。寫不完是常態;你寫下的每一句都會被追問,所以要寫你做過的、寫得深,不必寫滿。2020 年考生記錄監考學長說它佔複試 0 分。

你的時程(依報名時整理的簡章)

日期丁組(192)戊組(193)
10/26(一)上午性向測驗;下午系資訊中心參訪與學長面談(歷年兩場:系統類、Web 類)—
10/27(二)教授口試(3 位,約 7–10 分鐘)上午性向測驗(約 1 小時);下午教授口試(5–10 位,常站著,約 7 分鐘)
10/27 丁組教授口試和戊組可能撞時段。今天先看系上公告的分組時間表;撞到就當天一早找工作人員說明你兩組都有,歷年都有考生丁戊一起面。

歷年流程觀察

關卡形式重點
丁組性向測驗3 小時;約 12–15 面、50–66 題,全問答依資訊中心分組出題:WWW、Git/DevOps、Container/K8s、Linux/BSD、Mail、Net、VM、PC。2018 年第一張是說明頁:要配合系計中、要值班、指導老師是系計中主任
丁組學長面談兩場,各 10–20 分鐘;小房間 3–6 人、大會議室 10–20 人圍著你自介 40 秒到 1 分鐘,拿你早上的考卷和備審追問;考卷上不確定的答案會被問爆
丁組教授口試3 位教授,7–10 分鐘,坐著通常比學長場和緩:經歷、專題、動機、想去哪組、舊專案還是新專案
戊組性向測驗1 小時,A3 雙面;選擇+簡答+程式,部分英文SQL、Python 遞迴/generator、子網、概念解釋、個資倫理
戊組教授口試5–10 位教授,約 7 分鐘,節奏快問備審,也會挑考卷寫不好的地方;常問「你和前面考生有什麼不同」

丁組與戊組在做什麼

  • 丁組:進系資訊中心當助教、值班、維運全系服務。學長想找一進來就能扛一個組的人。
  • 戊組:在校級資訊技術服務中心實習,開發校務系統(以網頁為主),會碰到校務敏感資料,所以看重程式能力、軟體設計思維與資安倫理。歷年心得提到校內系統常用 PHP Laravel+Vue.js。

系資訊中心現在的組別=今年考卷的大綱

組別應備知識加分項目你的對應經驗
Net計概、網路規劃與管理、VLAN/STP/OSPF機房維運、SDN、CCNA臺師大資訊中心網路組:設備設定、無線維運、弱點掃描;dashboard.ntnu.cc 整合 658 台 AP
SystemAnsible、C/Python/Go/Rust、K8s開源貢獻、GitOps、ObservabilityHomelab K8s(Calico)、Tor relay 與 Tor Project 貢獻、NOJV 沙盒
WWWGit、前後端TypeScript、Vue、Laravel、K8sntnu.cc、mailerz、dashboard、NOJV
PC計概、UNIX 指令Proxmox VE、VyOS、Windows ServerProxmox VE Homelab
Mail/DNS郵件原理、DNS郵件與域名維運mailerz(Workers+D1)、ntnu.cc 子網域服務、Cloudflare DNS
HPC計算機系統管理Slurm QOS、Spack/Conda較弱,備概念即可
LDAPldapsearch/ldapmodify、PKI/OpenSSLFreeIPA、Keycloak、step-caiPAS、後量子計畫(TLS/PKI)

預測:HPC 和 LDAP 是近年的新組別,今年很可能出 Slurm、cgroup 資源限制、LDAP 登入與憑證管理題。Net 題年年加深(114 年出了 routing table+nftables、STP 收斂、OSPF LSA),這是你最該拿下的區塊。

二、性向測驗作答策略

你的目標是設計下午的面試題目:把學長引到你最強的 Net、資安、自架服務,避開 BSD、Mail 實戰、HPC 這些你沒有上線經驗的區塊。

丁組 3 小時時間配置

時間做什麼
0:00–0:10先翻完整份考卷,每題標 ○(做過)△(懂概念)×(不會)
0:10–1:30只寫 ○:Net、Linux、Container/K8s、DNS、資安、做過的 WWW 題。每題寫「定義+我的實例+指令或設定+踩過的坑」
1:30–2:30寫 △:只寫說得清楚的部分,並標註「沒有上線經驗,以下是我的理解」
2:30–3:00自由發揮題(最拿手的服務)寫滿;回頭檢查有沒有寫錯

五條作答規則

  1. 不會就留白。114 年共筆和 2019 年心得都這樣建議:不熟的寫了會被問爆。
  2. 每題帶一個「我做過」。例如寫 VLAN 時加一句「在臺師大資訊中心處理過 SSID 對應 VLAN」,這句就是你下午的面試入口。只寫你真的做過的。
  3. 寫指令,不要只寫名詞。看到 ip route get、ss -tlnp、tcpdump -ni,學長就知道你真的做過。
  4. 能畫就畫:拓撲、封包流向、架構圖。
  5. 誠實寫邊界。「我的 mail 經驗是用 Cloudflare Workers 做發信服務,沒有維運過 Postfix」這種句子反而加分。

你的區塊優先序

優先區塊原因
1Net、排錯情境題資訊中心工讀主線;去年考了 VPN、公網連不上
2Linux、Container/K8s、監控Homelab、Tor relay、NOJV 沙盒
3DNS、TLS/PKI、資安金盾獎、iPAS、後量子計畫
4WWW 後端/DB/瀏覽器ntnu.cc、dashboard、NOJV;去年考 ORM、Callback Hell、渲染
5Mail、VM、LDAP寫概念,標明經驗邊界
6BSD、HPC會的才寫

戊組 1 小時

  • 帶手錶;2019 年有考生沒看時間而沒寫完。
  • 先寫概念題(快),再寫 SQL 與子網(穩分),最後寫程式題。程式題用 Python,短而易讀。
  • 英文題可以用中文答。個資倫理題(能不能擅自把師生照片放上校務系統)一律答:不行,要告知目的、取得同意,符合個資法與校內規範。
  • 下午教授會拿考卷問「這題怎麼沒寫」;沒有依序作答就在題號旁標「答於第 X 頁」。

知識庫:依系統條列

題庫背不完,知識庫是讓你遇到沒看過的題目也答得出來的底。每個系統分成核心概念、常用指令、數字與連接埠、常見陷阱四塊,考前掃過一遍,重點放在你最弱的 Mail、BSD、HPC。

網路基礎與 TCP/IP

核心概念
  • OSI 七層對應 TCP/IP 四層:L2 是 MAC 與 frame,L3 是 IP 封包,L4 是 TCP/UDP。
  • 封裝順序:應用資料 → TCP header → IP header → Ethernet header+FCS。
  • ARP:同網段用廣播問「這個 IP 的 MAC 是誰」;跨網段的封包送到 gateway 的 MAC。
  • TCP:三向交握、序號與 ACK、滑動視窗、壅塞控制(slow start、CUBIC、BBR)、主動關閉方進入 TIME_WAIT。
  • UDP:無連線、不重送;DNS、DHCP、NTP、QUIC、VoIP 用它。
  • MTU 1500、TCP MSS 1460;Path MTU Discovery 依賴 ICMP「需要分段」訊息,全擋 ICMP 會造成大封包黑洞。
  • traceroute 靠 TTL 遞減;Linux 預設送 UDP,Windows 的 tracert 送 ICMP。
  • IPv6:128 位元、LAN 一律 /64、SLAAC 自動設定、NDP 取代 ARP、沒有廣播只有 multicast。
常用指令
  • ip a、ip route、ip neigh:位址、路由、ARP 表
  • ss -tunap:連線與監聽中的 port
  • ping、mtr -T -P 443 host、traceroute
  • tcpdump -ni eth0 'port 53'、tcpdump -w x.pcap 再用 Wireshark
  • iperf3 -s/iperf3 -c host:頻寬測試
  • ethtool eth0:速度、雙工、錯誤計數
數字與連接埠
  • 私有位址:10.0.0.0/8、172.16.0.0/12、192.168.0.0/16;CGNAT 100.64.0.0/10;link-local 169.254.0.0/16。
  • /24=256、/25=128、/26=64、/27=32、/28=16、/29=8、/30=4(可用數再減 2);/31 用於點對點。
  • 22 SSH、25 SMTP、53 DNS、67/68 DHCP、80/443 HTTP(S)、110/995 POP3、123 NTP、143/993 IMAP、161/162 SNMP、179 BGP、389/636 LDAP、514 syslog、587 submission、853 DoT。
  • 3306 MySQL、5432 PostgreSQL、6379 Redis、6443 K8s API、2379 etcd、9100 node_exporter、9090 Prometheus、51820 WireGuard。
常見陷阱
  • ping 不通不代表服務掛了,可能只是擋 ICMP;改用 TCP 測。
  • 能 ping IP 但打不開網址,先懷疑 DNS。
  • 小封包通、大封包不通,是 MTU 問題(VPN、PPPoE、隧道最常見)。
  • 雙網卡主機的回程路由走錯卡,會被狀態式防火牆或 rp_filter 丟掉。

交換與路由

核心概念
  • Switch 依 MAC table 轉送,未知目的就 flood;一個 VLAN 就是一個廣播網域。
  • 802.1Q tag 4 bytes,VLAN ID 12 位元(1–4094);access port 屬單一 VLAN,trunk 帶多個,native VLAN 不帶 tag。
  • STP(802.1D)防迴圈:選 Root Bridge → 各台選 Root Port → 各網段選 Designated Port → 其餘 Blocking。RSTP(802.1w)秒級收斂,MSTP 可多個 instance。
  • LACP(802.3ad)把多條實體線綁成一條邏輯鏈路。
  • L3 switch 用 SVI 做 VLAN 間路由;校園常見核心、匯聚、接取三層架構。
  • 路由選擇順序:最長前綴匹配 → 管理距離(Cisco:直連 0、靜態 1、eBGP 20、OSPF 110、RIP 120、iBGP 200)→ metric。
  • OSPF:link-state、Dijkstra、Area 0 為骨幹;廣播網路選 DR/BDR;Hello 10 秒、Dead 40 秒;cost=參考頻寬÷介面頻寬。
  • OSPF 鄰居狀態:Down → Init → 2-Way → ExStart → Exchange → Loading → Full。
  • LSA:1 Router、2 Network、3 Summary、4 ASBR Summary、5 External、7 NSSA。Stub 擋 4、5;Totally Stubby 擋 3、4、5 並注入 default;NSSA 允許引入外部路由(Type 7)。
  • BGP:path vector、TCP 179、AS_PATH 防迴圈;常見選路順序 Weight → Local Preference → AS_PATH 長度 → Origin → MED。防劫持靠 RPKI ROV 與 IRR 過濾。
常用指令
  • show mac address-table、show vlan brief、show interfaces status
  • show spanning-tree、show etherchannel summary
  • show ip route、show ip ospf neighbor、show ip ospf interface、show ip bgp summary
  • Linux:bridge vlan show、bridge fdb show、ip -d link
常見陷阱
  • 使用者自己接小 switch 造成迴圈 → 廣播風暴;接取端開 PortFast 時一定要配 BPDU Guard。
  • trunk 兩端 allowed VLAN 或 native VLAN 不一致,某些 VLAN 會不通。
  • OSPF 鄰居卡 ExStart 多半是 MTU 不一致。
  • 非骨幹 area 沒接到 Area 0,要用 virtual link。

網路服務:DHCP、NAT、防火牆、VPN

核心概念
  • DHCP:Discover → Offer → Request → Ack;跨網段靠 relay(ip helper,可帶 option 82);DHCP snooping 防偽 DHCP 伺服器。
  • NAT:SNAT 改來源、DNAT 改目的(port forwarding)、masquerade 是自動取出口 IP 的 SNAT;狀態記在 conntrack 表。
  • netfilter 五個 hook:prerouting、input、forward、output、postrouting。DNAT 在 prerouting,SNAT 在 postrouting。
  • nftables 由 table → chain → rule 組成,取代 iptables 的 filter、nat、mangle、raw 四表。
  • 狀態式防火牆核心一行:ct state established,related accept。
  • VPN:IPsec(IKEv2,UDP 500/4500 NAT-T,ESP)、OpenVPN(TLS,預設 UDP 1194)、WireGuard(UDP,金鑰即身分,AllowedIPs 同時是路由表)、SSL VPN(多走 443)。
  • Split tunnel 只把內網流量送進 VPN;full tunnel 全部都走。
  • 負載平衡:L4 看 IP 和 port,L7 看 HTTP;HA 用 VRRP(keepalived)飄浮 IP。
  • NTP 是基礎服務:log 對時、Kerberos、TOTP、憑證驗證都依賴它。
  • 網管協定:SNMP v2c 只有 community 字串,v3 才有驗證與加密;流量分析用 NetFlow、sFlow、IPFIX。
  • 802.1X:supplicant(終端)→ authenticator(switch/AP)→ RADIUS 驗證,走 EAP。
常用指令
  • nft list ruleset、iptables -t nat -L -n -v
  • conntrack -L:目前的連線追蹤
  • sysctl net.ipv4.ip_forward、sysctl net.ipv4.conf.all.rp_filter
  • wg show、ipsec statusall(strongSwan)
  • dhclient -v、journalctl -u isc-dhcp-server
常見陷阱
  • 規則寫在記憶體裡沒持久化,重開機就消失。
  • Docker 會自己改 iptables,publish 的 port 可能繞過 ufw。
  • VPN 用戶家裡網段和機房重疊,路由會打架。
  • conntrack 表滿了會開始丟新連線(大流量 NAT 主機要調 nf_conntrack_max)。

無線網路

核心概念
  • 2.4 GHz 穿透好、範圍大,只有 1、6、11 三個不重疊頻道;5 GHz 頻道多、速度快、穿透差,部分頻道要做 DFS 雷達迴避;6 GHz 是 Wi-Fi 6E 起。
  • 世代:802.11n=Wi-Fi 4、ac=Wi-Fi 5、ax=Wi-Fi 6(OFDMA、BSS Coloring)、be=Wi-Fi 7(MLO 多鏈路)。
  • 頻寬 20/40/80/160 MHz;高密度場域用窄頻寬、多頻道、降功率、多 AP。
  • 品質指標:RSSI、SNR、channel utilization、每台 AP 的 client 數、重傳率。
  • 安全:WPA2-PSK、WPA3-SAE、Enterprise(802.1X,EAP-PEAP 或 EAP-TLS);eduroam 用 RADIUS 階層轉送到各校認證。
  • 架構:控制器集中管理、雲端管理;漫遊輔助 802.11r/k/v。
常見陷阱
  • 同頻干擾與 sticky client(裝置黏著遠處 AP 不放)。
  • DHCP pool 不夠:大教室上課時大量裝置拿不到 IP。
  • Captive portal 與 HSTS 網站衝突,使用者看不到登入頁。
  • 「Wi-Fi 很慢」常常不是無線問題,而是上行、DNS 或出口頻寬。

Linux 系統管理(含 BSD 對照)

核心概念
  • 開機:UEFI/BIOS → GRUB → kernel+initramfs → systemd(PID 1)→ target。
  • systemd unit 類型:service、socket、timer、mount、target;修改用 systemctl edit 產生 override,不改原檔。
  • 程序:fork/exec、zombie(父程序沒 wait)、orphan(被 PID 1 收養);訊號 SIGHUP 1、SIGKILL 9、SIGTERM 15。
  • 權限:rwx 與 owner/group/other;setuid、setgid、sticky bit(/tmp);umask;ACL(setfacl);sudo 用 visudo 編輯。
  • 帳號:/etc/passwd、/etc/shadow、/etc/group;登入流程經過 PAM,帳號查詢順序看 nsswitch.conf。
  • 網路設定:netplan、NetworkManager(nmcli)、systemd-networkd;DNS 常由 systemd-resolved 管。
  • 排程:cron 五欄(分 時 日 月 週)或 systemd timer。
  • 隔離與限制:namespace、cgroups v2、capability、seccomp、SELinux/AppArmor、ulimit、OOM killer。
  • 日誌:journald、rsyslog、logrotate。
  • SSH:金鑰登入、~/.ssh/config、ProxyJump 跳板、通道 -L/-R/-D。
  • FreeBSD 對照:設定集中在 /etc/rc.conf、第三方軟體在 /usr/local、套件 pkg/ports、隔離用 jail、防火牆 pf/ipfw、檔案系統常用 ZFS。
常用指令
  • systemctl status|restart|enable svc、journalctl -u svc -b -f、systemd-analyze blame
  • top/htop、vmstat 1、iostat -x 1、free -m、uptime
  • ps auxf、pstree、kill -TERM pid、lsof -p pid、strace -p pid
  • id、getent passwd user、last、journalctl _COMM=sshd
  • apt/dpkg -l、dnf/rpm -qa、FreeBSD pkg info、service x restart
數字與檔案
  • load average 要和 CPU 核數比較;包含等待 IO 的 D 狀態程序。
  • 重要檔案:/etc/fstab、/etc/hosts、/etc/resolv.conf、/etc/ssh/sshd_config、/etc/security/limits.conf。
  • /proc 看程序與核心狀態、/sys 看裝置、/var/log 看傳統 log。
常見陷阱
  • 磁碟沒滿但寫不進去:inode 用完(df -i)。
  • 刪了大檔空間沒回來:檔案仍被程序開著(lsof +L1)。
  • 改了 sshd 設定直接重啟把自己鎖在外面;先 sshd -t 檢查並保留一個連線。
  • cron 的環境變數與 PATH 和互動 shell 不同。

儲存、檔案系統與備份

核心概念
  • 分割表:MBR 最大 2 TB、最多 4 個主分割;GPT 沒有這些限制。
  • LVM:PV → VG → LV,可線上擴充與快照。
  • RAID:0 條帶無容錯;1 鏡像;5 單同位,大容量碟重建期間再壞一顆就全毀;6 雙同位;10 鏡像加條帶,效能與容錯兼顧。RAID 不是備份。
  • 檔案系統:ext4 通用;XFS 只能擴不能縮;Btrfs 與 ZFS 是 copy-on-write,有快照與 checksum,ZFS 還整合 volume manager 與 RAID-Z。
  • 硬連結指向同一個 inode,不能跨檔案系統;軟連結存的是路徑。
  • 網路儲存:NFS(檔案層,v4 有狀態、可配 Kerberos)、SMB(Windows 檔案分享)、iSCSI(區塊層,target/initiator/LUN)、Ceph(RBD 區塊、CephFS 檔案、RGW 物件)。
  • 備份:3-2-1 原則;全量、增量、差異;RPO(可容忍遺失多少資料)與 RTO(多久要恢復);定期還原演練。
常用指令
  • lsblk、blkid、findmnt、df -h、df -i、du -xh --max-depth=1
  • pvs/vgs/lvs、pvresize、lvextend -r -l +100%FREE vg/lv
  • mdadm --detail /dev/md0、cat /proc/mdstat、smartctl -a /dev/sda
  • zpool status、zfs snapshot pool/fs@x、zfs send | zfs recv
  • restic backup、borg create、rsync -aHAX --delete
常見陷阱
  • fstab 寫錯導致開不了機;網路磁碟加 nofail、_netdev。
  • 擴了 LV 忘了擴檔案系統(-r 會一起做)。
  • 備份從來沒還原過,等於沒有備份。

虛擬化

核心概念
  • Type 1(ESXi、Xen、Hyper-V、KVM)直接管硬體;Type 2(VirtualBox、VMware Workstation)跑在作業系統上。KVM 是讓 Linux 本身成為 hypervisor 的核心模組,搭配 QEMU。
  • 硬體輔助:Intel VT-x、AMD-V;記憶體轉譯 EPT/NPT;IOMMU(VT-d)做 PCI 直通;SR-IOV 讓一張網卡切成多個虛擬功能。
  • 半虛擬化驅動 virtio(磁碟、網路)效能遠勝模擬硬體。
  • 磁碟格式:qcow2 支援快照與精簡配置,raw 效能較好。
  • 虛擬網路:Linux bridge、VLAN-aware bridge、NAT、Open vSwitch。
  • Live migration:先複製記憶體、反覆補 dirty page、最後短暫停機切換;需要共享儲存與相容的 CPU 型號。
  • 叢集:quorum 防 split-brain,fencing 確保壞掉的節點真的停了。
  • Proxmox VE:KVM 加 LXC、corosync 叢集、可整合 Ceph、vzdump 與 Proxmox Backup Server 備份、cloud-init 範本。
  • 資源超賣:vCPU overcommit 會造成 steal time;記憶體 ballooning、KSM;大型 VM 注意 NUMA。
常用指令
  • virsh list --all、virsh dominfo、qemu-img info/convert
  • Proxmox:qm list、qm migrate、pct list、pvecm status、vzdump
  • lscpu | grep -i virt、egrep -c '(vmx|svm)' /proc/cpuinfo
常見陷阱
  • CPU type 設 host 效能最好,但不同世代主機間無法 live migrate。
  • 兩節點叢集沒有仲裁,一台掛了另一台也會失去 quorum。
  • 快照不是備份,長期掛著還會拖慢磁碟。

容器與 Kubernetes

容器核心
  • 容器=namespace(看得到什麼)+cgroups(用得了多少)+分層 rootfs(overlayfs)。
  • 標準:OCI image spec 與 runtime spec;runc 是參考實作。
  • Docker 呼叫鏈:CLI → dockerd → containerd → runc。
  • Dockerfile:multi-stage build、把少變動的層放前面以利快取、.dockerignore、非 root 使用者、固定版本或 digest。
  • 網路模式:bridge(docker0+veth+NAT)、host、none、overlay。
  • 資料:volume 由 Docker 管理,bind mount 直接掛主機路徑。
Kubernetes 架構
  • 控制平面:kube-apiserver(唯一入口)、etcd(狀態)、scheduler、controller-manager。
  • 節點:kubelet、kube-proxy、container runtime(CRI:containerd、CRI-O)。1.24 起移除 dockershim。
  • 核心精神:宣告期望狀態,controller 不斷把實際狀態拉回期望狀態。
  • 工作負載:Pod、Deployment(無狀態)、StatefulSet(有狀態、固定名稱)、DaemonSet(每節點一份)、Job/CronJob。
  • 服務:Service(ClusterIP、NodePort、LoadBalancer、Headless)、Ingress 或 Gateway API、CoreDNS。
  • 設定:ConfigMap、Secret(只是 base64,不是加密,要開 etcd 加密或用外部 vault)。
  • 儲存:PV、PVC、StorageClass 動態配置。
  • 網路模型:每個 Pod 一個 IP,Pod 之間不經 NAT 互通;由 CNI(Calico、Flannel、Cilium)實作;NetworkPolicy 也由 CNI 執行。
  • 權限:Role/ClusterRole、RoleBinding/ClusterRoleBinding、ServiceAccount。
  • 健康與資源:liveness、readiness、startup 探針;requests 用來排程、limits 是上限;QoS 分 Guaranteed、Burstable、BestEffort。
  • 工具:Helm、Kustomize;輕量叢集 k3s、kind、minikube。
常用指令
  • kubectl get pods -A -o wide、kubectl describe pod x、kubectl logs x -p
  • kubectl exec -it x -- sh、kubectl top pod、kubectl get events --sort-by=.lastTimestamp
  • kubectl rollout status|undo deploy/x、kubectl auth can-i verb resource --as user
  • 節點上:crictl ps、crictl logs;備份:etcdctl snapshot save
狀態與陷阱
  • Pending:資源不足或 nodeSelector/taint 不合。
  • ImagePullBackOff:image 名稱、tag 或 registry 認證錯。
  • CrashLoopBackOff:程式一啟動就退出;OOMKilled:記憶體 limit 太低。
  • Service 沒有 endpoint:selector 標籤沒對到 Pod。
  • 沒設 requests/limits,一個 Pod 就能吃光整個節點。

自動化、CI/CD 與監控

自動化與部署
  • Ansible:agentless(走 SSH)、inventory、playbook、role、handler、module 具冪等性;變數優先序要小心。
  • Terraform:宣告式 IaC、state 檔記錄現況、plan 後 apply。
  • CI/CD:GitLab CI(.gitlab-ci.yml、stages、jobs、runner)、GitHub Actions;快取與 artifact。
  • GitOps:Git 是唯一事實來源,Flux 或 Argo CD 在叢集內拉取並同步。
  • 部署策略:rolling、blue-green、canary、feature flag;一定要能回滾。
  • 秘密管理:CI secret、Vault、Sealed Secrets;絕不進 repo。
監控與 SRE
  • 三支柱:metrics、logs、traces;標準化工具 OpenTelemetry。
  • Prometheus:pull 模式、exporter(node_exporter、blackbox_exporter)、PromQL(計數器用 rate())、Alertmanager 分組與靜音;Grafana 做儀表板。
  • Log:Loki 或 ELK/OpenSearch;集中、可搜尋、有保存期限。
  • 方法論:Google 四個黃金訊號(Latency、Traffic、Errors、Saturation);USE 看資源、RED 看服務。
  • SLI → SLO → SLA;error budget 用完就先修穩定度;減少 toil;postmortem 不究責。
  • 告警要可行動、附 runbook,避免告警疲勞。

DNS

核心概念
  • 解析鏈:stub resolver → recursive resolver(快取)→ root → TLD → authoritative。
  • 紀錄:A、AAAA、CNAME(不能放在 zone apex,也不能和同名其他紀錄並存)、MX(數字小的優先)、TXT、NS、SOA(serial、refresh、retry、expire、negative TTL)、PTR(反解,in-addr.arpa)、SRV、CAA(限定可發憑證的 CA)。
  • TTL 決定快取多久;要改紀錄前先把 TTL 調低。
  • 預設 UDP 53;回應過大或 zone transfer 用 TCP;EDNS0 放寬 UDP 大小。
  • 主從同步:AXFR(全量)、IXFR(增量)、NOTIFY,以 TSIG 驗證。
  • DNSSEC:RRSIG、DNSKEY、父區的 DS 形成信任鏈;保證真偽,不提供隱私。
  • 加密傳輸:DoT(853)、DoH(443)、DoQ。
  • Split-horizon(views)讓內外網查到不同答案。
  • 軟體:BIND、Unbound(遞迴)、PowerDNS、NSD、CoreDNS(K8s)。
常用指令
  • dig example.com A、dig @1.1.1.1 example.com、dig +trace example.com
  • dig -x 140.122.x.x(反解)、dig example.com MX +short
  • delv example.com(驗 DNSSEC)、resolvectl status
  • BIND:named-checkconf、named-checkzone、rndc reload
攻擊與陷阱
  • 快取汙染、open resolver 反射放大、DNS tunneling 外傳資料、懸空 CNAME 被搶註(subdomain takeover)。
  • 改完 zone 忘了加 SOA serial,從伺服器不會更新。
  • 只有 AAAA 正確、IPv6 卻不通時,部分用戶會連不上。

電子郵件

核心概念
  • 角色:MUA(郵件軟體)、MSA(收使用者送信,587)、MTA(伺服器間轉送,25)、MDA(投遞到信箱,常用 LMTP)、IMAP/POP3 伺服器。
  • SMTP 對話:EHLO → STARTTLS → MAIL FROM → RCPT TO → DATA → QUIT;2xx 成功、4xx 暫時失敗會重試、5xx 永久失敗退信。
  • Envelope From(Return-Path)和信頭 From 不同:SPF 檢查前者,DMARC 要求與信頭 From 對齊。
  • SPF:TXT v=spf1 ... -all,最多 10 次 DNS 查詢。DKIM:公鑰放 selector._domainkey。DMARC:_dmarc TXT 設 p=none/quarantine/reject 與回報地址。
  • 傳輸安全:STARTTLS 可被降級;MTA-STS 與 DANE(TLSA+DNSSEC)強制加密。
  • 寄件 IP 要有正確 PTR 反解,HELO 名稱要合理,不然容易被當垃圾信。
  • Postfix:main.cf、master.cf;queue 有 incoming、active、deferred、hold;mynetworks 與 smtpd_recipient_restrictions 決定誰能 relay。
  • Dovecot:passdb 驗密碼、userdb 給 uid 與信箱路徑;Sieve 做伺服器端過濾與轉寄。
  • 反垃圾:rspamd 或 SpamAssassin、RBL、greylisting、對外寄信限速。
  • 轉寄會讓 SPF 失敗,用 SRS 改寫寄件者,或靠 ARC。
  • 信箱格式:mbox 一個資料夾一個檔,Maildir 一封信一個檔。
常用指令
  • postqueue -p、postsuper -d QUEUEID、postcat -q QUEUEID、postconf -n
  • grep QUEUEID /var/log/mail.log 串起一封信的完整路徑
  • doveadm user alice、doveadm auth test alice
  • swaks --to x@example.com --server mx.example.com 測寄信
  • openssl s_client -starttls smtp -connect mx.example.com:25
常見陷阱
  • Open relay:未驗證就替任何人寄外部信,很快被列入黑名單。
  • SPF 用 ~all 與 -all 的差別,以及 include 太多超過查詢上限。
  • 使用者說「對方沒收到」:先拿寄件時間、收件地址、有無退信,再查 log。

LDAP 與身分驗證

核心概念
  • LDAP 是樹狀目錄(DIT):DN 例如 uid=alice,ou=people,dc=example,dc=edu;objectClass 決定能有哪些屬性(posixAccount、inetOrgPerson)。
  • 操作:bind、search(base、scope、filter 如 (&(objectClass=posixAccount)(uid=alice)))、add、modify、delete;資料交換格式 LDIF。
  • 連接埠 389(可 StartTLS)、636(LDAPS)。
  • OpenLDAP:slapd、線上設定 cn=config、overlay(memberOf、ppolicy)、syncrepl 複寫、multi-provider 高可用。
  • Linux 主機接 LDAP:SSSD(有快取、可離線登入)或 nslcd,透過 NSS 查帳號、PAM 驗密碼。
  • Kerberos:KDC 發 TGT 再換服務票證;時間差超過約 5 分鐘就失敗。FreeIPA 整合 LDAP、Kerberos、CA 與 DNS;Active Directory 本質上也是 LDAP+Kerberos+DNS。
  • Web SSO:SAML 2.0(XML、IdP 與 SP)、OAuth 2.0(授權)、OIDC(身分,ID token 是 JWT);常見實作 Keycloak。
  • MFA:TOTP(依賴時間同步)、WebAuthn/FIDO2(防釣魚)。
常用指令
  • ldapsearch -x -H ldaps://ldap.example -D "cn=admin,dc=example,dc=edu" -W -b "dc=example,dc=edu" "(uid=alice)"
  • ldapmodify -f change.ldif、ldapadd、ldapwhoami、ldappasswd
  • slapcat(備份)、slapadd(還原)
  • getent passwd alice、id alice、sssctl user-checks alice、kinit/klist
常見陷阱
  • 用明文 389 bind,密碼在網路上裸奔。
  • Client 沒裝 CA,LDAPS/StartTLS 驗證失敗。
  • SSSD 快取讓已停用的帳號還能登入一段時間。

TLS、PKI 與後量子密碼

核心概念
  • 對稱加密 AES-GCM、ChaCha20-Poly1305;非對稱 RSA、ECDSA、Ed25519;雜湊 SHA-256;金鑰交換 ECDHE(X25519)。
  • TLS 1.3:1-RTT 握手、只保留有前向保密的金鑰交換、密碼套件精簡到 5 個、0-RTT 有重放風險;SNI 明文,ECH 用來加密它。
  • X.509 欄位:subject、SAN(瀏覽器只認 SAN)、issuer、有效期、key usage;憑證鏈 root → intermediate → leaf,伺服器要附上中繼憑證。
  • 撤銷:CRL、OCSP、OCSP stapling。
  • ACME(Let's Encrypt):HTTP-01 或 DNS-01(萬用字元必須用 DNS-01);憑證效期越來越短,必須自動化。
  • 內部 PKI:root 離線保存、intermediate 簽發;step-ca、cert-manager;服務間用 mTLS。
  • 後量子:NIST 在 2024 年公布 FIPS 203 ML-KEM、FIPS 204 ML-DSA、FIPS 205 SLH-DSA。
  • 混合金鑰交換(如 X25519MLKEM768)同時跑傳統與後量子,兩者都破才會失守;因為有「現在收集、日後解密」的威脅,金鑰交換優先遷移,簽章與憑證鏈之後。
  • 後量子 key share 讓 ClientHello 多出約 1 KB、跨越多個封包,寫死只讀第一個封包的中間設備可能出錯。
  • OpenSSH 9.0 起預設 sntrup761x25519,10.0 起預設 mlkem768x25519。
常用指令
  • openssl s_client -connect host:443 -servername host -showcerts
  • openssl x509 -in a.crt -noout -text、-dates、-subject
  • openssl req -new -newkey rsa:2048 -nodes -keyout k.key -out r.csr
  • openssl verify -CAfile chain.pem leaf.crt、testssl.sh host、curl -v https://host
常見陷阱
  • 漏送中繼憑證:桌面瀏覽器可能自己補,手機與程式會失敗。
  • 憑證過期沒有監控,最常見的停機原因之一。
  • 私鑰權限太寬或進了 repo。

HPC 與 Slurm

核心概念
  • 元件:slurmctld(控制)、slurmd(每個運算節點)、slurmdbd(帳務資料庫)、munge(節點間認證)。
  • 概念:partition(節點分組)、job 與 step、GRES(GPU 等資源)、TRES、QOS(每人上限、最長時間、優先權)、fairshare、backfill 排程。
  • 資源強制:cgroup plugin 限 CPU、記憶體、GPU 裝置;pam_slurm_adopt 讓沒有工作在跑的使用者 SSH 不進節點。
  • 軟體環境:Environment Modules/Lmod、Spack、Conda、Apptainer(Singularity)容器。
  • 平行運算:MPI 跨節點、OpenMP 共享記憶體;高速網路 InfiniBand、RDMA。
  • 平行檔案系統:Lustre、BeeGFS、IBM Storage Scale(GPFS)。
  • GPU:nvidia-smi、驅動與 CUDA 版本相容性、MIG 切分。
常用指令
  • sinfo、squeue -u $USER、sbatch job.sh、srun --gres=gpu:1 --pty bash
  • scancel id、sacct -j id、scontrol show job id
  • sacctmgr show qos、sacctmgr modify qos normal set MaxTRESPerUser=gres/gpu=2
#!/bin/bash
#SBATCH -J train
#SBATCH -p gpu
#SBATCH --gres=gpu:1
#SBATCH -c 8
#SBATCH --mem=32G
#SBATCH -t 04:00:00
module load cuda
python train.py

HTTP 與 Web 架構

核心概念
  • 方法語意:GET、HEAD 安全且冪等;PUT、DELETE 冪等;POST 不冪等;PATCH 部分更新。
  • 狀態碼:200、201、204;301、302、304、307、308;400、401(沒登入)、403(沒權限)、404、409、429;500、502(上游回錯)、503、504(上游逾時)。
  • 重要標頭:Cache-Control、ETag、Set-Cookie(HttpOnly、Secure、SameSite)、CORS 系列、CSP、HSTS。
  • HTTP/1.1 keep-alive;HTTP/2 單連線多工與 header 壓縮;HTTP/3 跑在 QUIC(UDP)上,解決 TCP 層的 head-of-line blocking。
  • API 風格:REST(資源、無狀態、統一介面)、gRPC(HTTP/2+Protobuf)、GraphQL;即時通訊用 WebSocket 或 SSE。
  • 驗證:session+cookie 或 token(JWT);第三方授權用 OAuth 2.0 授權碼流程加 PKCE。
  • 架構元件:反向代理(nginx、HAProxy)、CDN、快取(Redis)、訊息佇列(RabbitMQ、Kafka);要水平擴展,應用層必須無狀態。
  • Laravel:Eloquent ORM、Query Builder、Blade、Artisan、migration;Vue 常搭配做前端。
  • Serverless:Cloudflare Workers 跑在 V8 isolate,冷啟動很低;KV 是最終一致;D1 是 SQLite。
  • 12-Factor:設定放環境變數、log 當成事件串流輸出、程序無狀態。

資料庫

核心概念
  • ACID;隔離等級由低到高 Read Uncommitted、Read Committed、Repeatable Read、Serializable,分別處理髒讀、不可重複讀、幻讀。MySQL InnoDB 預設 Repeatable Read,PostgreSQL 預設 Read Committed。
  • MVCC 讓讀不擋寫。
  • 正規化 1NF、2NF、3NF 消除重複;為效能可適度反正規化。
  • 索引:B+ tree;複合索引遵守最左前綴;覆蓋索引免回表;低選擇性欄位不值得加。用 EXPLAIN 看執行計畫。
  • JOIN:INNER、LEFT、RIGHT、FULL、CROSS;聚合用 GROUP BY,對聚合結果篩選用 HAVING;視窗函數 ROW_NUMBER() OVER (...)。
  • 鎖:行鎖;悲觀 SELECT ... FOR UPDATE;樂觀 version 欄位;注意死結與鎖的順序。
  • 擴展:主從複寫與讀寫分離(注意複寫延遲)、分片。
  • 備份:邏輯(mysqldump、pg_dump)、實體、binlog/WAL 做 point-in-time recovery。
  • NoSQL:KV(Redis)、文件(MongoDB)、寬欄(Cassandra)、圖(Neo4j);CAP 取捨。
  • 應用層:ORM 的 N+1、連線池、參數化查詢防 SQL injection。
必背 SQL
SELECT dept, COUNT(*) AS n
FROM emp
GROUP BY dept
HAVING COUNT(*) > 5
ORDER BY n DESC;

SELECT m.name, o.id
FROM members m
LEFT JOIN orders o ON o.member_id = m.id
WHERE o.created_at >= '2026-01-01';

BEGIN;
SELECT * FROM rooms WHERE id = 3 FOR UPDATE;
INSERT INTO booking (...) VALUES (...);
COMMIT;

注意:LEFT JOIN 後在 WHERE 篩右表欄位,會把沒對到的列濾掉,效果變成 INNER JOIN;要保留就把條件移到 ON。

前端與瀏覽器

核心概念
  • 渲染管線:DOM+CSSOM → render tree → layout(reflow)→ paint → composite;改 transform、opacity 只觸發 composite。
  • Script 載入:一般 script 阻塞解析;defer 解析完依序執行;async 下載完立即執行。
  • 效能指標 Core Web Vitals:LCP、INP、CLS。
  • JavaScript:單執行緒、event loop、microtask(Promise)先於 macrotask(setTimeout);closure;this 依呼叫方式決定,arrow function 取外層;原型鏈;var、let、const。
  • 模組與建置:ES modules、Vite、webpack、tree shaking。
  • 框架:React(虛擬 DOM、hooks)、Vue(以 Proxy 實作響應式、單檔元件);SPA、SSR、SSG(Next、Nuxt)。
  • CSS:權重、盒模型與 box-sizing、flex(一維)、grid(二維)、media query、rem/em/vw。
  • 瀏覽器安全:同源政策、CORS、CSP、XSS、CSRF、點擊劫持(CSP frame-ancestors)。
  • 儲存:cookie(每次請求都送)、localStorage、sessionStorage、IndexedDB。
  • 無障礙:語意標籤、圖片 alt、表單 label、ARIA、鍵盤可操作、對比度。
  • 大量資料:分頁、虛擬捲動、懶載入、debounce 與 throttle。

Git 與軟體工程

Git
  • 物件:blob、tree、commit、tag;ref 與 HEAD;工作區 → 暫存區 → 倉庫。
  • merge(fast-forward 或三方合併)與 rebase;cherry-pick 挑單一 commit。
  • 撤銷:revert 產生反向 commit,可安全用於共用分支;reset --soft/--mixed/--hard 會改歷史。
  • 救援:reflog 找回刪掉的分支或 reset 前的狀態;stash 暫存;bisect 二分找出錯的 commit。
  • 流程:Git Flow、GitHub Flow、GitLab Flow、trunk-based。
  • Conventional Commits 與 SemVer(MAJOR.MINOR.PATCH)。
  • 密鑰外洩:先撤銷並更換金鑰,再用 git filter-repo 清歷史並 force push。
軟體工程
  • 測試金字塔:大量單元測試、適量整合測試、少量 E2E;test double 有 stub、spy、mock、fake;TDD 紅、綠、重構。覆蓋率是參考,不是目標。
  • 設計原則:SOLID、DRY、KISS、組合優於繼承;架構 MVC、MVVM;常見模式 Factory、Observer、Strategy、Singleton。
  • 品質:code review、linter 與 formatter、CI 品質門檻。
  • 流程:Scrum(sprint、standup、review、retro)、Kanban。

資安基礎

原則與管理
  • CIA(機密性、完整性、可用性)、縱深防禦、最小權限、零信任。
  • OWASP Top 10(2021 版)第一名是 Broken Access Control,另有 Cryptographic Failures、Injection、Insecure Design、Security Misconfiguration、Vulnerable Components、Authentication Failures、Integrity Failures、Logging Failures、SSRF。
  • 弱點管理:CVE 編號、CVSS 嚴重度、EPSS 被利用機率、CISA KEV 已被利用清單;排序看「對外暴露+有人在打」。
  • 事件應變(NIST):準備 → 偵測與分析 → 遏制、根除、復原 → 事後檢討。
  • ISO 27001:ISMS 管理系統、PDCA、2022 版 Annex A 共 93 項控制措施。
  • 台灣法規:資通安全管理法(公務機關依等級 A 到 E 有不同義務)、個人資料保護法。
  • 密碼儲存:bcrypt、scrypt、Argon2 加 salt,不能用單純雜湊。
攻擊與防禦
  • Web:SQL injection、XSS、CSRF、SSRF、IDOR、路徑穿越、不安全的反序列化、惡意檔案上傳。
  • 網路:DDoS(流量型、協定型、應用層)、ARP spoofing、DNS 汙染、BGP 劫持、中間人攻擊。
  • 偵測:IDS/IPS(Suricata、Snort)、SIEM、EDR、集中 log 並保存。
  • 帳號:MFA、帳號與權限定期盤點、離職即停權。
  • 主機加固:關閉不用的服務、即時更新、只開必要 port、SSH 只用金鑰。

三、題庫一:網路與排錯

排錯題只有一個骨架:先切範圍,再由下往上一層一層排除,每一步講出用什麼指令、看到什麼代表什麼。最後補一句「修完後寫進維運文件、加上監控告警」,學長就知道你是維運的人。

VPN 連不上

當你連不上機房的 VPN,你會怎麼處理?去年題

先問三件事:只有我還是大家都連不上?從什麼時候開始?我現在在哪個網路?大家都不行就查伺服器端,只有我不行就查客戶端。

  1. 我的網路本身:ping 1.1.1.1、dig vpn.example.edu。飯店、咖啡廳常有 captive portal 或擋 UDP。
  2. 碰得到 VPN 端點嗎:TCP 類(SSL VPN)用 nc -vz host 443;UDP 類(WireGuard 51820、OpenVPN 1194、IPsec 500/4500)用 nc 判斷不準,改看客戶端日誌或 tcpdump -ni any udp port 51820 有沒有回包。換手機熱點是最快的對照組。
  3. 認證與憑證:帳密過期、MFA、憑證過期(openssl x509 -enddate -noout -in client.crt)、系統時間偏移(TOTP 與憑證都會失敗,看 timedatectl)。
  4. 握手狀態:WireGuard 看 wg show 的 latest handshake;OpenVPN 看 journalctl -u openvpn-client@x,TLS 錯誤與 AUTH_FAILED 意義不同。
  5. 連上了但進不去:ip route 看路由有沒有推進來(split tunnel);網段重疊(家裡 192.168.1.0/24,機房也是);DNS 有沒有推內部解析;MTU 用 ping -M do -s 1372 10.x.x.x 測,小包通大包不通就是 MTU。
  6. 伺服器端(大家都不行時):服務活著嗎(systemctl status、ss -ulnp)、防火牆規則被改、憑證或 CRL 過期、IP pool 用完、授權人數滿、上游線路斷。
  7. 一定要進去:走頻外管道(IPMI/iDRAC、跳板機、另一條專線)或請值班同事到現場;不要為了進去臨時開公網 port。
接你的經驗:「我的 Homelab 沒有公網 IP,SSH 走 Cloudflare Tunnel 的子網域,所以我也遇過 tunnel 斷掉、需要第二條進入路徑的情況。」被追問就講你留的備援入口。

公網連不上服務

從公網連不上你的服務,你會怎麼解決?請介紹用的指令。去年題

答題結構:從外到內、由下往上,每一層一個指令。

層指令看到什麼代表什麼
0 重現手機 4G:curl -v https://svc.example.com確定是外面進不來,不是自己的網路
1 DNSdig +short A svc @1.1.1.1、dig +trace、dig AAAAIP 錯、剛改還在 TTL 內、SERVFAIL(DNSSEC);有 AAAA 但 IPv6 不通時用 curl -4/curl -6 對照
2 路由mtr -T -P 443 <ip>、traceroute斷在哪一跳;ICMP 可能被擋,所以用 TCP 模式
3 Portnc -vz <ip> 443、nmap -Pn -p 443 <ip>很快回 RST:到了主機但沒人聽或被 reject;timeout:中途被丟(防火牆、security group、NAT 沒轉)
4 服務ss -tlnp、systemctl status、journalctl -u svc、curl -v localhost:8080只聽 127.0.0.1、程式掛了、資源用光(df -h、free -m)
5 主機防火牆nft list ruleset、iptables -L -n -v、ufw status規則被改、預設 drop、重開機後沒持久化
6 邊界雲端 security group、校內邊界防火牆、NAT port forward校內服務對外要申請例外;反向代理回 502/504
7 TLSopenssl s_client -connect host:443 -servername host憑證過期、SNI 錯、中繼憑證沒帶
8 封包主機上 tcpdump -ni eth0 tcp port 443SYN 有到、SYN-ACK 有出去但對方沒收到:非對稱路由、預設閘道錯、rp_filter
9 容器docker ps 的 port mapping、kubectl get svc,ingress沒 publish port、Service selector 沒對到 Pod、NetworkPolicy 擋掉
接你的經驗:Cloudflare 後面的服務要會讀錯誤碼:521 原站拒絕連線、522 原站逾時、525 與原站 TLS 握手失敗。你正在做的 nojv-maintenance(原站掛掉時由 Worker 回維護頁)就是面向使用者的降級設計,可以在最後帶到。Tor relay 是你向校方申請連線例外的實例。

子網、L2、STP

192.168.1.64/27,gateway 是第一個 IP,請問可用範圍、mask 與 gateway?2022 丁戊組常考

每塊 32 個位址。網路 192.168.1.64、廣播 192.168.1.95、可用 .65–.94(30 個)、mask 255.255.255.224、gateway 192.168.1.65。

另一題 192.0.2.96/19:/19 在第三個 octet 每塊 32,2 落在 0–31,所以網路 192.0.0.0、廣播 192.0.31.255、mask 255.255.224.0。

速算:區塊大小 = 256 − 遮罩在該 octet 的值;網路位址 = 不大於該值的最大區塊倍數。

兩台機器用網路線直接互連可以通嗎?怎麼設定?2022 丁

可以。兩邊設同網段,例如 10.0.0.1/30 與 10.0.0.2/30,不需要 gateway(不出網段)。現代網卡有 Auto-MDIX,直線即可;舊設備要跨接線。沒設 IP 時兩邊會拿 169.254.0.0/16 link-local,也能互通。

兩個 MAC address 撞到會發生什麼事?2024 丁

Switch 的 MAC table 會在兩個 port 之間來回跳(MAC flapping),兩台都時通時不通,封包送錯人。只在同一個 L2 網段內發生。偵測:switch log 的 flapping 警告;防護:port security、DHCP snooping+Dynamic ARP Inspection、802.1X。這也是 MAC spoofing 的原理。

看拓撲判斷 STP 收斂後的樣子;A、B 電腦連得上嗎?2024 丁

  1. 選 Root Bridge:Bridge ID 最小者(先比 priority,預設 32768;同 priority 比 MAC)。
  2. 每台非 root 選 Root Port:到 root 路徑成本最小的 port(同成本比對方 Bridge ID,再比 port ID)。
  3. 每個網段選 Designated Port:離 root 最近的那一端。
  4. 其餘 port 全部 Blocking;在圖上標 R、D、×。A、B 是否相通:看 blocking 後是否仍有一條路徑,並檢查是否同 VLAN、同網段。

追問:loop 會造成廣播風暴和 MAC table 不穩;PortFast 只開在接終端的 port 並搭配 BPDU Guard;RSTP/MSTP 收斂比傳統 STP 快。校園最常見的 loop 是使用者自己接小 switch。

VLAN 是什麼?如何穩定切換到別的 VLAN 和 IP?2018 丁

VLAN 在同一台實體 switch 上切出多個廣播網域。Access port 屬於單一 VLAN、trunk port 用 802.1Q tag 帶多個 VLAN;native VLAN 不帶 tag,要注意 VLAN hopping。換 VLAN:switch 改 port 的 access VLAN(或使用者連到對應 SSID),端點 DHCP release/renew 拿新網段;伺服器要換就先加新 IP、改 DNS、等 TTL、再拔舊 IP。

OSPF、路由、nftables

看拓撲:哪幾台是 ABR、ASBR?LSA 3、4、5 是什麼?如何把它們彙總成 default route?2024 丁

  • ABR:同時接 Area 0 與其他 area 的 router。ASBR:把外部路由(static、BGP、別的協定)redistribute 進 OSPF 的 router。
  • LSA 類型:1 Router、2 Network(DR 發)、3 Summary(ABR 把 area 間路由帶過去)、4 ASBR Summary(告訴別的 area ASBR 在哪)、5 External(ASBR 發的外部路由)、7 NSSA External。
  • 彙總成 default:把該 area 設成 Totally Stubby,ABR 上 area 3 stub no-summary(Cisco),area 內其他 router area 3 stub。Stub 擋 4、5;Totally Stubby 擋 3、4、5,由 ABR 送進 default。需要引入外部路由時改用 NSSA(Type 7)。
  • 「不要把某些 LSA 送到其他 area」:Type 1、2 本來就不出 area;彙總用 area X range(ABR)和 summary-address(ASBR),過濾用 area X filter-list。

Area 3 的 ABR 建立不了 neighbor,下面的機器也連不出去,為什麼?2024 丁

Area ID 不同、Hello/Dead timer 不同、驗證不同、子網或遮罩不同、stub flag 不一致、MTU 不同(卡在 ExStart)、router-id 重複、介面被設 passive、ACL 擋了 224.0.0.5/6。如果 Area 3 沒有直接接到 Area 0,ABR 必須用 virtual link 接回 backbone。驗證指令:show ip ospf neighbor、show ip ospf interface、debug adjacency。

給 routing table 與 nftables 規則,判斷 5 組封包最後的 src/dst 與進出介面,或為什麼離不開機器。2024 丁

  1. 進來的封包:prerouting(DNAT 在這)→ 路由決策 → 目的是本機走 input,否則走 forward → postrouting(SNAT/masquerade 在這)。
  2. 本機發出:output → 路由決策 → postrouting。
  3. 路由看最長前綴;有 ip rule 先看 policy routing。實機驗證:ip route get 8.8.8.8 from 10.0.0.5 iif eth1。
  4. 離不開機器的常見原因:沒有匹配路由或沒有 default、forward chain 預設 drop、net.ipv4.ip_forward=0、rp_filter 因反向路徑不符而丟。

考場上先畫一張 chain 流程圖,再逐組標出經過哪些規則。

如何防止 BGP Hijacking?2024 面試

RPKI(發 ROA,自己做 Route Origin Validation 丟掉 invalid)、IRR 過濾客戶路由、prefix limit、ROA 設好 max-length、加入 MANRS、用 BGP 監控服務告警。

接你的經驗:TWIGF、APIGA 的網路治理背景。可以說這是技術加社群協作的問題:RPKI 要每個 AS 都做才有效。

情境與架構設計

教授想從 A 網段辦公室連 B 網段實驗室伺服器,連不上;教授上得了外網,系計中也戳得到伺服器。可能原因(最多三個)?2024 丁

關鍵:兩邊各自正常,問題在 A→B 這條路徑,或伺服器對 A 的特別處理。

  1. 伺服器主機防火牆只放特定網段(實驗室和系計中),或服務只聽在內部介面。
  2. VLAN 間 ACL:L3 switch 或防火牆沒放行 A→B。
  3. 回程路由:伺服器是雙網卡,回給 A 的封包走另一張卡(非對稱路由),被狀態式防火牆或 rp_filter 丟掉;或伺服器有一條寫錯的靜態路由吃掉 A 網段。

其他:內部 DNS view 對 A 網段回錯 IP、伺服器 IP 和 A 網段某台撞到。驗證:伺服器上 tcpdump -ni any host <教授IP>,看 SYN 有沒有到、回應從哪張卡出去。

實驗室有台新 router,你沒有網路線,只有一台電腦和兩條從牆壁出來的線,怎麼設定?2024 丁

  1. 先弄清楚兩個牆孔各接到哪:看配線架標籤,或電腦插上去看 DHCP 拿到什麼網段、lldpctl 看對端 switch 與 port。
  2. 一條接 router WAN。
  3. 電腦不用線也能進管理介面:連 router 出廠預設 Wi-Fi(底部標籤),或用 console/USB。設完先改管理密碼、關 WAN 端管理、更新韌體。
  4. 陷阱:不要把兩條牆壁線同時插 router 的 LAN 和 WAN(或兩個 LAN),若在同一 VLAN 會形成 loop,或 router 的 DHCP 跑進大樓網路變成 rogue DHCP。

網路架構設計:兩間電腦教室 70 台;收到資安通報時追查問題電腦;伺服器有對外 Web 和只限內網的服務。2021 丁

  • 電腦教室:每間一個 VLAN、各 /25(126 個可用),L3 switch 當 gateway;DHCP 依 MAC 保留固定 IP(座位對應 IP,方便考試與追查);教室間 ACL 隔離,考試時可只放行考試伺服器;部署用 PXE。
  • 資安通報追查:通報給公網 IP+時間 → 有 NAT 就查 NAT log 對到內部 IP → DHCP lease 或 gateway ARP 表對到 MAC → switch show mac address-table address <mac> 對到 port → 配線對到房間牆孔。時間戳一定要對齊,所以設備都要 NTP、log 要集中保存。進階是 802.1X 把帳號綁到連線。
  • 伺服器服務分區:Web/反向代理放 DMZ,DB 與內部服務放內部 VLAN,防火牆只開 DMZ→DB 必要 port;管理介面(SSH、IPMI)另開管理網段。

傳統產業要導入 IPv6 該注意什麼?2018 丁

位址規劃(一個 VLAN 一個 /64)、SLAAC 或 DHCPv6、RA Guard、防火牆規則 v4/v6 對等(常見漏洞是 v6 全開)、DNS AAAA、應用與設備支援度、監控和 log 要能處理 v6、先雙堆疊再逐步過渡、人員訓練。

描述你遇過的網路問題以及怎麼解決。2018 丁你的經驗

準備一個資訊中心真實案例,用 STAR:情境(哪棟、多少人受影響)、你的任務、你用的指令與判斷順序、結果與後續(文件、監控)。沒有參與處理的事件不要講成自己做的。

考前寫下這個案例的三個關鍵細節(設備、症狀、根因),學長一定追問。

舉出可以查網路狀態的指令。2019 丁

ip a、ip route、ip neigh、ss -tunap、ethtool eth0、mtr、tcpdump、dig、nmcli、iperf3。每個講一句用途。

四、題庫二:Linux、VM、Container、DevOps

這區的重點是講出底層機制:容器就是 namespace+cgroup+filesystem,K8s 就是一群 controller 在 watch API server。

Linux/BSD

說明 FreeBSD Jail、seccomp、Linux namespace、capability、systemd/init、rctl、eBPF 的用途與優缺點。2022 丁2023 丁

名詞一句話補充
namespace隔離「看得到什麼」:pid、net、mnt、uts、ipc、user、cgroup、time容器隔離的基礎
cgroups限制「用得了多少」:CPU、記憶體、IO、pidsv2 為單一階層;systemd slice 就是用它
capability把 root 權限切成小塊,例如 CAP_NET_ADMIN、CAP_NET_BIND_SERVICE容器預設丟掉大部分;CAP_SYS_ADMIN 幾乎等於 root
seccomp過濾程式能呼叫的 syscallDocker 有預設 profile;評測沙盒常用來禁網路、禁 fork
eBPF在 kernel hook 點執行經驗證器檢查過的小程式觀測(bpftrace)、網路(XDP、Cilium)、安全
systemd vs initSysV init 用依序執行的腳本與 runlevel;systemd 用 unit 依賴平行啟動systemd 另有 cgroup 追蹤、journald、timer、socket activation;缺點是範圍太大
FreeBSD jailBSD 的 OS 層級虛擬化,早於 Linux 容器每個 jail 有自己的檔案系統、IP、使用者
rctlFreeBSD 的資源限制(使用者、jail、程序)類似 cgroups
ZFSCopy-on-write 檔案系統+volume manager快照、checksum、send/recv、RAID-Z;吃記憶體
fstab/autofs開機靜態掛載 vs 存取時才掛autofs 常用於 NFS 家目錄

Linux 從 BIOS 到開機完成做了哪些事?2018 丁

  1. 韌體 POST,BIOS 讀 MBR/UEFI 讀 ESP 上的 bootloader。
  2. GRUB 載入 kernel 與 initramfs,帶 kernel 參數。
  3. Kernel 初始化硬體,initramfs 載入驅動、解密或組 RAID、掛上真正的 root。
  4. 執行 PID 1(systemd),依 default.target 平行啟動 unit,最後 getty/登入畫面。

指令:systemd-analyze blame、journalctl -b。

如果要在 Linux 自己做一個類似 Docker 的東西,會用到哪些工具?2021 丁

unshare/clone() 開 namespace;cgroups v2 限資源;準備 rootfs(overlayfs 疊 image layer)再 pivot_root;建 veth pair 一端放容器 netns、一端接 bridge,再用 nftables 做 NAT;丟掉 capability、套 seccomp、可加 user namespace 讓容器內 root 對應到主機一般使用者。要注意:重新掛 /proc、PID 1 要回收殭屍程序並轉發訊號、image 來源可信度。

如何限制使用者的資源?2021 丁2022 丁

程序層:ulimit//etc/security/limits.conf(pam_limits)。系統層:systemd 的 user-UID.slice 設 MemoryMax、CPUQuota、TasksMax(底層是 cgroups)。磁碟:quota(xfs_quota、ZFS quota)。BSD:rctl、login.conf。運算叢集:交給 Slurm 排程並用 cgroup 強制限制。

Linux 如何做系統備份與備援?2020 丁

RAID 不是備份:RAID 1/5/6/10 防硬碟壞,防不了誤刪和勒索。備份照 3-2-1(3 份、2 種媒體、1 份異地),工具 restic、borg、rsync、ZFS/LVM 快照;資料庫另外做邏輯備份與 binlog。關鍵是定期演練還原。備援(HA):keepalived(VRRP)飄浮 IP、Pacemaker、DB 主從複寫。

計中主機可能被學生惡意使用或當跳板攻擊別人,如何防範與偵測?2020 丁

  • 防範:最小權限、限制對外連線(例如擋 outbound 25、限制大量對外連線)、rate limit、fail2ban、只允許金鑰登入、即時更新、限制程序數與資源。
  • 偵測:NetFlow/sFlow 看異常對外流量、auditd、集中 log、IDS(Suricata)、監控 CPU 異常(挖礦)、外部 abuse 通報。
  • 處理:先隔離帳號與連線、保留證據、依校規通報。
接你的經驗:資訊中心的弱點掃描工作,可以講你如何把掃描結果交給管理者處理。

你知道的 Linux distribution 與特性?FreeBSD、OpenBSD、NetBSD 差異?pkg 與 ports?

  • Debian/Ubuntu:apt、穩定、社群大;RHEL/Rocky/Alma:企業長期支援、SELinux;Arch:rolling release;Alpine:musl、極小,常做容器基底。
  • FreeBSD:效能、ZFS、jail,常見於伺服器與儲存;OpenBSD:安全優先,pf 與 OpenSSH 出自這裡;NetBSD:可攜性,支援大量平台。
  • pkg 裝預先編譯的 binary;ports 從原始碼編譯,可調編譯選項。
你沒有 BSD 上線經驗,考卷上就寫「沒有實際維運 BSD,以下是對照 Linux 的理解」。不要寫設定檔細節。

用過哪些防火牆軟體?

nftables(iptables 的後繼)、ufw/firewalld(前端包裝)、BSD 的 pf、雲端的 security group、Cloudflare 的 WAF 規則。講你在哪台機器、為了什麼設過。

VM 虛擬化

NFS、Samba、iSCSI 在 datastore 上怎麼選?2021 丁2022 丁

NFS 是檔案層、Unix 原生,當共享 datastore 最簡單,支援快照(qcow2)。SMB 是 Windows 檔案分享,VM datastore 較少用。iSCSI 是區塊層(LUN),效能較好,但多台主機共用要有叢集檔案系統(VMFS)或 LVM 管理,Proxmox 上 iSCSI+LVM 沒有快照。更大規模用 Ceph。

Live migration 是什麼?不同代 CPU 會有什麼問題?2018 丁2020 丁

VM 不關機就搬到另一台主機:先複製記憶體,反覆複製被改過的 dirty page,最後短暫暫停、送完剩下的狀態再切過去。需要共享儲存(或同時搬儲存)。不同代 CPU 的問題:VM 若在新 CPU 上用了新指令集,搬到舊 CPU 會出錯。解法是 CPU 遮罩:VMware EVC、Proxmox 把 CPU type 設成 x86-64-v2 這類通用型號,不用 host。

vCPU 的意義?Intel、AMD 虛擬化指令集?2021 丁

vCPU 是主機上被排程的一條執行緒,可以超賣(overcommit),太多會造成 CPU steal time;大 VM 要注意 NUMA。硬體虛擬化:Intel VT-x、AMD-V;記憶體位址轉譯加速 EPT/NPT;裝置直通靠 IOMMU(VT-d、AMD-Vi)。

要加一台伺服器到叢集裡,需要注意什麼?2022 丁

CPU 廠牌與世代(影響 live migration)、記憶體、網卡數與速度、VLAN 與 MTU 一致、能存取共享儲存、軟體版本一致、時間同步、叢集 quorum(節點數以奇數為佳,Proxmox 用 corosync)。

接你的經驗:Proxmox VE Homelab、LVM 擴充磁碟的流程。

集中式 VM 平台和 VirtualBox 這種單機的差異?一台主機上多個 VM 各有網段並做 NAT?

集中式平台有 HA、live migration、共享儲存、集中管理與權限、排程備份、範本。網段:每個網段建一個 Linux bridge(或 VLAN-aware bridge),在主機上對 bridge 做 masquerade,或放一台 VyOS/pfSense VM 當路由器。

Container/K8s

容器化有什麼缺點?去年題

  1. 共用 kernel:隔離比 VM 弱,kernel 漏洞可能造成逃逸;也不能跑不同 kernel 的系統。
  2. 狀態保存:容器是暫時的,資料庫等有狀態服務要處理 volume、備份與遷移。
  3. 網路與除錯複雜:多一層 NAT、overlay、DNS;image 裡常沒有除錯工具,log 隨容器消失。
  4. 供應鏈風險:基底 image 帶漏洞、來源不明,要掃描(Trivy)與更新。
  5. 資源設定:沒設 limit 會互搶,設太低會被 OOM kill;PID 1 訊號處理問題。
  6. 維運成本:導入 orchestration 的學習曲線與 YAML 管理。
接你的經驗:NOJV 評測沙盒要跑不受信任的程式碼,容器隔離本身不夠,還要限 CPU 時間、記憶體、禁網路、限 syscall。只講你實際做過的那幾層,沒做的說「這是我知道的下一步」。

Container 有什麼優缺點?什麼情況不該用?VM 和 container 差在哪?2022 丁

VM 虛擬化硬體、各自 kernel、隔離強、開機慢、資源重;container 虛擬化 OS、共用 kernel、輕量、秒起、image 可攜。優點:環境一致、部署快、密度高。不該用:需要強隔離的多租戶、需要特殊 kernel 模組、大型有狀態系統且團隊沒有維運能力、GUI 桌面應用。

什麼是 CNI?聽過哪些?底層做了什麼?如何實作 Network Policy?2022 丁2023 丁

CNI 是 kubelet 呼叫網路插件的介面規格。Pod 建立時 CNI 會:建 veth pair,一端放 Pod 的 netns、一端留主機;由 IPAM 分 IP;設路由;跨節點則用 overlay(VXLAN、IPIP)或 BGP 宣告路由。

  • Calico:BGP/IPIP/VXLAN,NetworkPolicy 用 iptables/ipset 或 eBPF 實作。
  • Flannel:VXLAN,簡單,不支援 NetworkPolicy。
  • Cilium:eBPF,可做 L7 policy。
接你的經驗:你的 Homelab K8s 用 Calico。準備好「為什麼選 Calico」與你實際設過的東西。

下了 kubectl run busybox --image=busybox,K8s 背後做了什麼?越詳細越好。2022 丁2023 丁

  1. kubectl 讀 kubeconfig,送 POST 給 API server。
  2. API server 驗證身分(authn)、檢查權限(RBAC)、跑 admission controller,把 Pod 物件寫進 etcd。
  3. Scheduler watch 到沒有 nodeName 的 Pod,先 filter 再 score,把 Pod bind 到某個節點。
  4. 該節點的 kubelet watch 到,透過 CRI 叫 containerd:建 pod sandbox(pause 容器)、呼叫 CNI 設網路、拉 image、啟動容器。
  5. kubelet 回報狀態給 API server。
  6. 加分細節:busybox 預設沒有長駐程序,執行完就退出;Pod 的 restartPolicy 是 Always,所以會進入 CrashLoopBackOff。要讓它活著要加 -- sleep 3600。

如何用 x.509 憑證讓 manager 只能在 manager namespace 操作 ConfigMap?用什麼指令確認權限?2022 丁

  1. openssl genrsa 產私鑰,openssl req -new -subj "/CN=manager/O=managers" 產 CSR。
  2. 建 K8s CertificateSigningRequest,kubectl certificate approve,取回簽好的憑證。
  3. 在 manager namespace 建 Role:resources configmaps,verbs get、list、create、update、delete。
  4. 建 RoleBinding 綁 user manager(K8s 用憑證 CN 當 user、O 當 group)。
  5. kubectl config set-credentials 寫進 kubeconfig。
  6. 確認:kubectl auth can-i update configmaps -n manager --as manager(回 yes),換 -n default 應回 no。

只有一台機器,如何部署大量 container?2021 丁2022 丁

Docker Compose 或單節點 k3s;每個服務設 CPU/記憶體 limit;分網路隔離;前面放反向代理(Traefik、Caddy)依網域分流,避免 port 衝突;集中收 log 與 metrics;image 用相同基底減少空間;注意單點故障,資料要備份。

K8s 解決了什麼問題?導入時遇到什麼問題?2022 丁

解決:宣告式部署、自我修復、水平擴展、滾動更新與回滾、服務發現、設定與密鑰管理。問題:複雜度與學習曲線、網路除錯困難、有狀態儲存、版本升級、YAML 散亂、控制平面本身的資源開銷。小規模服務不一定值得。

新版 K8s 不支援 Docker runtime,管理者要注意什麼?2021 丁

K8s 1.24 移除了 dockershim,改用 containerd 或 CRI-O。Image 是 OCI 格式所以照用。受影響的是依賴 docker socket 的東西:CI 裡的 docker-in-docker、讀 Docker log 路徑的 log agent、監控工具。節點除錯改用 crictl。升級前先盤點、在測試叢集驗證。

備份 K8s cluster 要做哪些步驟?2022 丁

etcd 快照(etcdctl snapshot save)、控制平面憑證(/etc/kubernetes/pki)、manifest 放 Git(GitOps)、PersistentVolume 資料另外備份(Velero 或儲存端快照)。並演練還原。

DevOps/監控

SLA、SLO、SLI 是什麼?有參考 Google SRE 的 VALET 嗎?2022 丁

SLI 是量測的指標(例如成功請求比例、p99 延遲);SLO 是內部目標(例如 30 天 99.9%);SLA 是對外合約,違反有賠償,通常比 SLO 寬鬆。1 − SLO 是 error budget,用完就停止上新功能、先修穩定度。VALET:Volume、Availability、Latency、Errors、Tickets。

Prometheus、Grafana 是什麼?Traces 在 Observability 中扮演什麼角色?有沒有做過監控?2022 丁

Prometheus 定期 pull 各服務的 metrics 存進時序資料庫,用 PromQL 查詢,Alertmanager 發告警;Grafana 做儀表板。Observability 三支柱:metrics(發生了什麼)、logs(細節)、traces(一個請求跨服務的路徑與每段耗時,例如 OpenTelemetry、Jaeger)。

接你的經驗:Shallot 監控 Tor relay 共識狀態並用 Discord 即時告警;dashboard.ntnu.cc 整合全校 AP 狀態。這兩個就是你的監控實例。

用過哪些 CI/CD?請設計一個 CI/CD 流程(可畫圖)。2020 丁2022 丁

push/MR → lint 與單元測試 → build image → 漏洞掃描 → 推 registry → 部署 staging → 整合/E2E 測試 → 人工核准 → 部署 production(GitOps:Flux/Argo CD 從 Git 同步)→ 監控與一鍵回滾。秘密放 CI 的 secret 或 vault,不放 repo。

接你的經驗:ntnu.cc 與 nojv-maintenance 綁 repo 由 Cloudflare 自動部署。說清楚哪些步驟你有做、哪些是你知道的完整版。

DevOps 和 SRE 差在哪?2021 丁

DevOps 是文化與實踐:打破開發與維運的牆、自動化、持續交付。SRE 是 Google 提出的具體做法:用軟體工程解決維運,以 SLO 與 error budget 管理風險、限制 toil。常見說法是 SRE 是 DevOps 的一種實作。

Ansible 是什麼?和寫 shell script 有何不同?預測

Agentless(透過 SSH),用 inventory 定義主機、playbook 宣告期望狀態,module 是冪等的:跑兩次結果一樣,只改需要改的。Shell script 是命令式,重跑可能出錯,也難以管理多台。Role 可重用。資訊中心 System 組把它列為應備知識。

五、題庫三:Mail、DNS、LDAP、PKI、HPC

Mail 題的核心是講對信件流向與每一站的角色(MUA、MSA、MTA、MDA);你沒有維運 Postfix,答題時寫原理並標明經驗邊界。

Mail

A 寄信給 B,SMTP 的 flow 怎麼走?(A、B 都用 Outlook)2021 丁2022 丁

  1. A 的 Outlook(MUA)用 SMTP submission(587 STARTTLS 或 465)帶帳密送到 A 公司的 MSA/MTA。
  2. A 的 MTA 放進 queue,查 B 網域的 MX 紀錄。
  3. 連到 B 的 MX port 25:EHLO → STARTTLS → MAIL FROM → RCPT TO → DATA → QUIT,並簽 DKIM。
  4. B 的 MTA 檢查 SPF、DKIM、DMARC、黑名單與垃圾信過濾。
  5. 交給 MDA(例如 Dovecot LMTP)存進 B 的信箱(Maildir)。
  6. B 的 Outlook 用 IMAP(993)或 POP3(995)收信。

IMAP 和 POP3 差異?用 Outlook 時各自的 flow?Maildir 和 mbox?2018 丁2020 丁

POP3 把信下載到本機,預設從伺服器刪除,適合單一裝置;IMAP 信留在伺服器,資料夾與已讀狀態多裝置同步。mbox 一個資料夾一個大檔,需要鎖;Maildir 一封信一個檔案,併發安全、較好備份。

Open relay 是什麼?SPF 作用?如何防止垃圾郵件?安全的 mail server 有哪些設定?2020 丁2022 丁

  • Open relay:任何人不需驗證就能透過你的伺服器寄給外部網域,會被拿來發垃圾信、讓你上黑名單。
  • SPF:DNS TXT 列出哪些 IP 可以替這個網域寄信。DKIM:用私鑰簽信件,公鑰放 DNS。DMARC:告訴收件方 SPF/DKIM 失敗時怎麼處理,並回報。
  • 防垃圾信:RBL、greylisting、rspamd/SpamAssassin、對外寄信限速、PTR 反解要正確、HELO 檢查。
  • 安全設定:只在 submission 收認證、強制 TLS、MTA-STS 或 DANE、fail2ban、即時更新。

Postfix 的 queue(incoming、active、deferred)意義?用過哪些 table?Dovecot 的 userdb、passdb?2018 丁2020 丁

incoming:剛收進來的信;active:正在投遞(數量有上限);deferred:暫時失敗(4xx)等重試;另有 hold 與 maildrop。指令 postqueue -p、postsuper -d。Table:virtual、transport、access、canonical、aliases,後端可以是 hash、lmdb、LDAP、MySQL。Dovecot:passdb 負責驗證密碼,userdb 提供 uid、gid、家目錄與信箱位置。

給一段 mail log 找出退信原因;使用者說對方沒收到,你要問什麼?2018 丁2020 丁

先問:寄件時間、收件地址、主旨、有沒有收到退信。用 queue ID 串起整封信的 log:grep <queue-id> /var/log/mail.log。看 status=:sent、deferred(4xx 暫時,例如對方灰名單)、bounced(5xx 永久,例如 550 5.1.1 user unknown、被 SPF/DMARC 擋)。讀信件 Received 標頭由下往上看經過哪些主機。

架設大規模 mail server 你會怎麼規劃(畫架構圖)?用過 Google Workspace 或 Office 365 嗎?優點?2020 丁2021 丁

多筆 MX → 前端過濾層(rspamd)在負載平衡後 → MTA 叢集 → Dovecot proxy/director 依使用者導到後端儲存(共享儲存或 dsync 複寫)→ LDAP 認證;submission 與收信分開;監控 queue 長度。代管服務的優點:可用性、垃圾信過濾、行動裝置與協作整合、少維運;自建的優點:資料主權、客製、成本。

接你的經驗:mailerz 是用 Cloudflare Workers 和 D1 做的自架發信服務。講你處理過的寄件網域 DNS 設定,並說明你沒有維運過收信端。

DNS

DNS lookup 流程?DoT 與 DoH 差別,改善了什麼?2024 丁

Stub resolver 問 recursive resolver(先查 cache)→ root → TLD → authoritative,依 TTL 快取。DoT 用 TLS 跑在 853;DoH 把 DNS 包在 HTTPS 443。兩者都防路徑上的人偷看或竄改查詢;DoH 混在一般流量裡較難被擋,也讓企業較難監控與過濾。DNSSEC 解決的是真偽,不是隱私。

不安全的 DNS 服務會遭受什麼攻擊?怎麼解決?管過 DNS 嗎,有什麼可改進?2022 丁

攻擊防法
Cache poisoning(Kaminsky)來源 port 隨機化、DNSSEC 驗證
Open resolver 被拿來反射放大只對內部提供遞迴、Response Rate Limiting
Zone transfer 外洩限制 AXFR 對象、TSIG
DNS tunneling 外傳資料監控異常長查詢與頻率
Subdomain takeover(懸空 CNAME)定期盤點紀錄,服務下線時刪紀錄
接你的經驗:ntnu.cc 的子網域服務用 Cloudflare DNS API 自動建紀錄。可改進:API token 權限縮到單一 zone、懸空紀錄的回收機制、TTL 規劃。

DNS 反射攻擊如何運作?2020 丙2023 戊

攻擊者偽造來源 IP 為受害者,向大量 open resolver 送小查詢(要求大回應,例如 ANY 或 DNSSEC 紀錄),回應全部打到受害者,放大倍數可達數十倍。防法:resolver 不對外開放遞迴、RRL、ISP 做 BCP 38 來源位址過濾。考卷只寫原理與防禦。

LDAP/PKI/HPC

如果要讓系統可以用 OpenLDAP 登入,該如何設定?2021 丁2022 丁

用 SSSD(或 nslcd)接 NSS 與 PAM:設 ldap_uri、search base、TLS(ldaps 或 StartTLS,裝 CA);使用者物件要有 posixAccount 屬性。驗證:getent passwd alice、id alice、ldapsearch -x -H ldaps://ldap.example -b "dc=example,dc=edu" uid=alice。家目錄可配 autofs 掛 NFS,或 pam_mkhomedir。

高可用 OpenLDAP 怎麼架?2022 丁

syncrepl 複寫:multi-provider(mirror mode 或 N-way)兩台以上互為主,前面放 VIP 或 client 設定多個 URI;consumer 唯讀副本分散查詢。slapcat 定期備份;監控各節點 contextCSN 是否一致。

PKI 與憑證管理:簽憑證、檢查、續期、撤銷。預測

Root CA 離線保存,平常用 intermediate 簽;自動化用 ACME(step-ca 也支援);撤銷用 CRL 或 OCSP。指令:openssl x509 -in a.crt -noout -text、openssl verify -CAfile ca.crt a.crt、openssl s_client -showcerts。

接你的經驗:後量子遷移就是 PKI 與金鑰交換的下一次大遷移;混合式金鑰交換先換,簽章與憑證鏈之後才換。

Slurm 是什麼?如何限制使用者的 GPU 與運算資源?預測

slurmctld(控制)、slurmd(各節點)、slurmdbd(帳務)。用 partition 分機器、QOS 限制每人最多 GPU(MaxTRESPerUser=gres/gpu=2)與時間、fairshare 排優先;cgroup 強制限制 GPU 與記憶體;pam_slurm_adopt 讓沒有工作的人 SSH 不進運算節點。軟體環境用 module、Spack 或 Conda。

六、題庫四:WWW、Git、資安

去年 WWW 題(ORM、Callback Hell、借教室、瀏覽器渲染)都是概念加上設計取捨。答題時講「用什麼、為什麼、代價是什麼」。

後端與資料庫

你要開發借教室系統,兩個教授同時要借同一間教室,系統架構怎麼處理?去年題2020 丁

這是 race condition。如果先查「有沒有人借」再寫入,兩個請求可能同時查到空的(TOCTOU)。最終防線要放在資料庫:

  1. 唯一或排他約束:時段固定就對 (room_id, slot) 設 UNIQUE;時段可重疊用 PostgreSQL 的 exclusion constraint。第二筆會失敗,API 回 409 Conflict 並建議其他時段。
  2. Transaction+鎖:悲觀鎖 SELECT ... FOR UPDATE 鎖住該教室;或樂觀鎖用 version 欄位,更新時版本不符就重試。
  3. 序列化:每間教室一個佇列依序處理;多台應用伺服器可加 Redis 分散鎖(SET key val NX PX),但 DB 約束仍是最後保障。
  4. 業務規則:先到先得,或改成「申請→審核」流程並定優先序(例如課程優先),通知落選者。
CREATE EXTENSION btree_gist;
CREATE TABLE booking (
  id serial PRIMARY KEY,
  room_id int NOT NULL,
  professor_id int NOT NULL,
  during tstzrange NOT NULL,
  EXCLUDE USING gist (room_id WITH =, during WITH &&)
);

ORM 和 Query Builder 有什麼差別?去年題2021 丁2024 丁

ORM(Eloquent、Prisma、Django ORM)Query Builder(Laravel QB、Knex)
抽象層級資料表對應成物件與關聯用程式組出 SQL,結果是一般資料列
優點關聯好寫、少寫 SQL、換資料庫容易接近 SQL、可控、自動參數化防注入
缺點N+1、看不到實際 SQL、複雜查詢難、效能較差要自己處理關聯與物件映射

實務上 CRUD 用 ORM,報表與複雜查詢用 Query Builder 或 raw SQL,並開 query log 檢查。

N+1 query problem 是什麼?怎麼預防?2018 丁2024 丁

撈 100 篇文章(1 次),再逐篇查作者(100 次),共 101 次查詢。解法:eager loading(Laravel with('author')、Prisma include)、JOIN、用 WHERE id IN (...) 批次、GraphQL 用 DataLoader。偵測:query log、Laravel Debugbar、APM。

圖書館系統把 email serialize 出來,但不知道為什麼很慢。列出可能原因與解法。2022 丁

  • 序列化時觸發關聯的 lazy load(N+1)→ eager load。
  • 一次序列化全部資料沒分頁 → 分頁、只選需要的欄位。
  • 每筆呼叫外部服務(LDAP 查名字、加解密)→ 批次或快取。
  • 沒有索引的查詢 → 看 slow query log、EXPLAIN、加索引。

先量測再改:profiler、APM、query log,找到真正耗時的地方。

設計教授、實驗室和負責人的 RESTful API。2022 丁2023 丁

GET    /labs                 列表(?page=&q=)
POST   /labs                 新增
GET    /labs/{id}            單一
PATCH  /labs/{id}            部分更新,例如 {"managerId": 12}
DELETE /labs/{id}
GET    /professors/{id}/labs 教授的實驗室
PUT    /labs/{id}/manager    指定負責人

名詞用複數資源、動作用 HTTP method;狀態碼 200、201、204、400、401、403、404、409;回錯誤時有結構化訊息;分頁、過濾、版本(/v1)。

設計 DB schema:User 和 Group 雙向查詢;圖片與標籤。2021 丁2022 丁

多對多一律用中介表:

users(id PK, name)          groups(id PK, name UNIQUE)
user_groups(user_id FK, group_id FK, PRIMARY KEY(user_id, group_id))
CREATE INDEX ON user_groups(group_id);   -- 反向查詢也快

images(id PK, path)   tags(id PK, name UNIQUE)
image_tags(image_id FK, tag_id FK, PRIMARY KEY(image_id, tag_id))

理由:正規化避免重複;複合主鍵防重複關聯;兩個方向都有索引。

API Rate Limit:5 分鐘內最多 10 次,你會怎麼實作?2021 丁

Redis:固定視窗 INCR key+EXPIRE 300 最簡單,但視窗邊界會讓瞬間多一倍;滑動視窗用 sorted set 存時間戳,刪掉 5 分鐘前的再計數;或 token bucket。key 用使用者 ID 或 IP。超過回 429 並帶 Retry-After。也可在閘道層做:nginx limit_req、Cloudflare rate limiting。

OAuth 2.0、OpenID Connect、JWT、SSO 的差別?2021 丁2022 丁

OAuth 2.0 是授權:讓第三方拿 access token 代表使用者存取資源。OIDC 是建在 OAuth 上的身分驗證層,多了 ID token(JWT)與 userinfo。JWT 是一種自帶簽章的 token 格式,缺點是難撤銷,所以要短效期加 refresh token。SSO 是一次登入多系統通用的體驗,可用 SAML 或 OIDC 實作。

其他常見後端題

  • MVC:Model 資料與商業邏輯、View 呈現、Controller 接請求並協調。MVVM 用 ViewModel 雙向綁定(Vue)。
  • Transaction:ACID;隔離等級 Read Uncommitted、Read Committed、Repeatable Read、Serializable,分別防髒讀、不可重複讀、幻讀。
  • RDBMS vs NoSQL:關聯式有 schema、JOIN、交易;NoSQL(文件、KV、寬欄)彈性 schema、水平擴展,一致性通常較弱。
  • Sub-query vs JOIN:多數情況優化器結果相近;相關子查詢可能逐列執行而變慢;JOIN 可讀性與可優化性通常較好。
  • gRPC vs REST:gRPC 用 HTTP/2+Protobuf,有強型別與 streaming,適合服務間;REST 用 JSON,通用、瀏覽器友善。GraphQL 讓客戶端決定要哪些欄位。
  • Redis:快取、session、rate limit、佇列、排行榜、分散鎖。
  • 圖片裁切做前端還後端:前端減少上傳量與即時預覽;後端可信、統一格式、能防惡意檔案。實務是前端預覽裁切,後端再驗證與轉檔。

前端與瀏覽器

簡單介紹瀏覽器的渲染過程。去年題

  1. (拿到資源前)DNS → TCP → TLS → HTTP 回 HTML。
  2. 解析 HTML 建 DOM;遇到 CSS 建 CSSOM;一般 <script> 會阻塞解析,defer 在解析完才依序執行,async 下載完就執行。
  3. DOM+CSSOM 合成 Render Tree(display:none 不在裡面)。
  4. Layout(reflow):算每個元素的位置與大小。
  5. Paint:畫出像素到各圖層。
  6. Composite:GPU 合成圖層顯示。

優化:critical CSS、script 用 defer、動畫用 transform/opacity(只觸發 composite)、避免讀寫交錯造成 layout thrashing。

什麼是 Callback Hell?ES6 怎麼解決?去年題2018 丁2020 丁

非同步操作一層包一層,形成向右延伸的金字塔,難讀、錯誤處理分散、難以平行化。解法:Promise 鏈、async/await、Promise.all 平行處理、把 callback 拆成具名函式。

// callback hell
getUser(id, (e, u) => { getPosts(u, (e, p) => { getComments(p, (e, c) => { ... }) }) })

// async/await
try {
  const u = await getUser(id)
  const p = await getPosts(u)
  const c = await getComments(p)
} catch (e) { handle(e) }

Promise、async/await 實際上是什麼?為何 JS 有原生 event loop?2024 面試

Promise 是代表未來結果的物件,有 pending、fulfilled、rejected 三態。async 函式回傳 Promise,await 會暫停該函式、把後續放進 microtask。Event loop:call stack 清空後先跑完所有 microtask(Promise 回呼),再取一個 macrotask(setTimeout、I/O)。JS 誕生在瀏覽器,單執行緒操作 UI,必須不阻塞,所以 event loop 是語言執行環境的一部分;其他語言也有,只是在函式庫層(Python asyncio、Rust Tokio、Node 底層的 libuv)。

var、let、const 差別?function 與 arrow function 差別?2022 丁2023 丁

var 是函式作用域、會 hoisting(初始化為 undefined)、可重複宣告;let、const 是區塊作用域、有 TDZ;const 不能重新賦值,但物件內容可改。Arrow function 沒有自己的 this(取外層)、沒有 arguments、不能 new、沒有 prototype。

CORS 是什麼?Content Security Policy 是什麼?2022 丁2023 丁

CORS:瀏覽器的同源政策預設不讓 JS 讀跨來源回應,伺服器用 Access-Control-Allow-Origin 等標頭放行;非簡單請求會先送 OPTIONS preflight。CORS 保護的是使用者,不是伺服器。CSP:伺服器用標頭限制頁面能載入或執行哪些來源的腳本、樣式等,主要防 XSS;unsafe-inline 會削弱效果,改用 nonce 或 hash。

接你的經驗:ntnu.cc 自我安全稽核發現 CSP unsafe-inline 的中風險項目,講你怎麼判斷與處理。

CSRF、XSS 是什麼?怎麼防範?前後端分離時呢?2020 丁2021 丁

CSRF:誘使已登入的使用者瀏覽器送出非本意的請求(cookie 自動帶上)。防法:SameSite cookie、CSRF token、檢查 Origin。前後端分離若 token 放在 Authorization 標頭就不會自動帶,CSRF 風險低,但要注意 XSS 偷 token。XSS 分 stored、reflected、DOM-based;防法:輸出時依情境跳脫、框架預設跳脫、避免 innerHTML、CSP、cookie 設 HttpOnly。

其他常見前端題

  • debounce vs throttle:debounce 停止觸發一段時間後才執行一次(搜尋框);throttle 固定間隔最多執行一次(捲動、resize)。
  • SPA vs SSR、SEO:SPA 互動好但首屏慢、爬蟲可能看不到內容;解法 SSR/SSG(Nuxt、Next)、prerender、sitemap。SPA 缺點還有初次載入大、記憶體洩漏、要自己處理路由與狀態。
  • TCP 有雙向通訊,為什麼瀏覽器還要 WebSocket:瀏覽器 JS 不能開原生 TCP socket,只能用 HTTP;HTTP 是請求回應模式。WebSocket 用 HTTP Upgrade 在同一條連線上全雙工。
  • CSS 權重:!important > inline > id > class/屬性/偽類 > 元素;class="a b" 時權重相同,比在 CSS 檔中後出現的規則。
  • flex vs grid:flex 一維(一列或一欄),grid 二維(同時列與欄)。
  • RWD:<meta name="viewport" content="width=device-width, initial-scale=1">+media query+相對單位(rem、%、vw)。
  • 大量資料渲染:分頁、虛擬捲動、懶載入、伺服器端過濾與排序。

Git 與軟工

git rebase 可以做什麼?和 merge 差在哪?2022 丁2023 丁2024 丁

rebase 把分支上的 commit 重新接到新基底上,歷史變線性;rebase -i 可以 squash、改訊息、調順序。merge 保留分岔歷史並產生 merge commit。原則:已經推到共用分支的 commit 不要 rebase,否則別人的歷史會衝突。

敏感資訊被 commit 進 git 怎麼處理(列指令)?2021 丁

  1. 先撤銷並更換那組密鑰,因為已推上去就要當作外洩。
  2. 用 git filter-repo --path secrets.env --invert-paths(或 BFG)清掉歷史。
  3. git push --force,通知協作者重新 clone。
  4. 請平台清快取與 fork;加 .gitignore 與 pre-commit 秘密掃描(gitleaks)。

其他 Git 題

  • fetch vs pull:fetch 只下載遠端更新;pull = fetch+merge(或 rebase)。
  • HEAD:指向目前所在的 commit 或分支。
  • 找回刪除的 branch:git reflog 找到 commit,git branch name <sha>。
  • git flow/GitLab Flow:git flow 有 main、develop、feature、release、hotfix,適合有版本發佈的產品,對持續部署太重;GitLab Flow 用環境分支;trunk-based 適合 CI/CD。
  • Conventional Commits:feat:、fix:、docs: 等前綴,可自動產生 changelog 與版本號。
  • 避免 merge conflict:小而頻繁的 PR、常同步主線、模組邊界清楚、格式化工具統一。

測試中 mock、stub、spy 的差別?TDD?2022 丁2024 丁

Stub 回傳預先設定的值,用來控制輸入;Spy 包住真的函式並記錄呼叫次數與參數;Mock 事先設定期望的呼叫,測試時驗證是否發生。TDD:先寫會失敗的測試(Red)→ 寫最少的程式通過(Green)→ 重構(Refactor)。

接你的經驗:你是軟體工程課程助教,可以講課程教了哪些測試觀念、你怎麼帶。

引用新的 dependency 時有哪些考量?有沒有重構經驗?2022 丁

維護狀態(最近 commit、issue 回應)、授權、安全紀錄與相依數量、大小、是否真的需要(能自己寫幾十行就不引)、版本鎖定與更新策略。重構:先有測試保護、小步修改、行為不變。

資安

XSS、SQL injection 是什麼?怎麼防禦?2020 戊2022 戊

SQL injection:輸入被拼進 SQL 而改變語意。防法:參數化查詢/prepared statement、ORM、最小權限 DB 帳號、輸入驗證、WAF。XSS 見上方前端題。

你的服務發現過哪些安全問題?你的經驗

ntnu.cc 的稽核有兩個中風險:

  • 從 fallback 標頭取 IP 導致偽造:X-Forwarded-For 可以由客戶端偽造,只應信任來自可信代理的值;在 Cloudflare 後面應使用 CF-Connecting-IP,並確保原站只接受 Cloudflare 的連線。
  • CSP unsafe-inline:改用 nonce 或 hash。

講清楚發現方式、風險評估、修補與驗證。

IDS 和防毒差在哪?弱點掃描結果如何排優先?預測

IDS 看網路流量或主機行為比對特徵與異常;防毒看檔案與程序。排優先:CVSS 分數只是起點,再看是否對外暴露、是否已有公開利用(CISA KEV、EPSS)、資產重要性,先修「對外且有人在打」的。

接你的經驗:資訊中心弱點掃描。講你用的工具與處理流程,只講你實際參與的部分。

七、題庫五:戊組專屬

戊組考卷範圍比丁組小,SQL、Python 遞迴、子網、概念解釋年年出現。以下附可以直接寫上考卷的答案。

兩張表:員工(員工編號、公司部門、公司代號)、公司(公司編號、公司部門)。列出各部門名與總人數,依部門名排序。2024 戊

-- 只看有員工的部門
SELECT 公司部門, COUNT(*) AS 總人數
FROM 員工
GROUP BY 公司部門
ORDER BY 公司部門;

-- 沒有員工的部門也要列出(顯示 0)
SELECT c.公司部門, COUNT(e.員工編號) AS 總人數
FROM 公司 c
LEFT JOIN 員工 e ON e.公司部門 = c.公司部門
GROUP BY c.公司部門
ORDER BY c.公司部門;

重點:LEFT JOIN 時要 COUNT(e.員工編號),不能用 COUNT(*),否則空部門會算成 1。考卷上兩種都寫並說明差別。

SQL:會員與訂單兩張表,取出項目並依訂單時間排序;inner join 是什麼?2018 戊2022 戊

SELECT m.name, o.id, o.created_at, o.amount
FROM orders o
INNER JOIN members m ON m.id = o.member_id
ORDER BY o.created_at DESC;

INNER JOIN 只留兩邊都對得到的列;LEFT JOIN 保留左表全部,右表沒有就填 NULL。

Python generator 求輸出:gen('abc')2022 戊2023 戊2024 戊

def gen(s):
    if len(s) == 0:
        yield ""
    else:
        for subset in gen(s[1:]):
            yield subset
            yield s[0] + subset

推導:gen('')→ "";gen('c')→ "", "c";gen('bc')→ "", "b", "c", "bc";gen('abc')→ 每個再前綴 a:

(空行)
a
b
ab
c
ac
bc
abc

這是產生所有子集合(共 2³ = 8 個),第一行印出空字串。yield 讓函式變成惰性產生值的 generator。

給定 n 與 L,求 L 最後的內容。2020 戊

def f(n, L):
    if n > 0:
        L.append(n)
        if n % 2 == 1: n = n - 1
        else: n = n // 2
        f(n, L)

例如 n=10:[10, 5, 4, 2, 1];n=7:[7, 6, 3, 2, 1]。注意 Python 3 的 n / 2 會變成浮點數(5.0),考卷原題是虛擬碼,寫答案時註明。

寫一個函式:輸入非負整數,輸出二進位中 1 的個數。2024 戊

def popcount(n: int) -> int:
    count = 0
    while n:
        n &= n - 1      # 每次消掉最低位的 1
        count += 1
    return count
# 也可以:bin(n).count('1')

時間複雜度 O(1 的個數)。

寫 ipchecker:傳入 A、B 兩個 IP 與 mask,判斷是否在同一網段。2018 戊

def to_int(ip):
    a, b, c, d = map(int, ip.split('.'))
    return (a << 24) | (b << 16) | (c << 8) | d

def same_subnet(A, B, M):
    m = to_int(M)
    return (to_int(A) & m) == (to_int(B) & m)

same_subnet('192.168.1.70', '192.168.1.90', '255.255.255.224')  # True

讀入 zero_one.in(只有 0、1),輸出哪個較多,用三種語言。2020 戊

# Python
s = open('zero_one.in').read()
print('0' if s.count('0') > s.count('1') else '1')

/* C */
#include <stdio.h>
int main(void){
  FILE *f = fopen("zero_one.in", "r"); int c; long z = 0, o = 0;
  while ((c = fgetc(f)) != EOF){ if (c == '0') z++; else if (c == '1') o++; }
  fclose(f); puts(z > o ? "0" : "1"); return 0;
}

# Bash
z=$(tr -cd '0' < zero_one.in | wc -c); o=$(tr -cd '1' < zero_one.in | wc -c)
[ "$z" -gt "$o" ] && echo 0 || echo 1

其他程式題

  • 陣列前後半交換(2021):def swap(a): h = len(a)//2; return a[-h:] + a[:-h]。[1,2,3,4]→[3,4,1,2];[10,20,30,40,50]→[30,40,50,10,20](奇數時中間元素跟著後半段)。
  • 防止乘法 overflow(2018):if y != 0 and abs(x) > INT_MAX // abs(y): 溢位,先檢查再乘。
  • 英文段落統計字頻(2018):from collections import Counter; Counter(text.lower().split()),依題目格式輸出。
  • 合併兩個 JSON(2018):{**a, **b};JSON 基本型別:string、number、boolean、null、array、object。
  • 按鈕按下變成文字(2022):
    const btn = document.querySelector('#btn')
    btn.addEventListener('click', () => {
      const span = document.createElement('span')
      span.textContent = '已送出'
      btn.replaceWith(span)
    })
  • n×m 矩陣每欄已升序,求所有 > k 的總和(2022):先算每欄後綴和,每欄二分搜尋第一個 > k 的位置,加上該位置之後的後綴和。單次 O(m log n),預處理 O(nm),多個 k 時預處理只做一次。
  • n = 10^10000 能存成 double 嗎(2022):不能,double 最大約 1.8×10^308,會變成 inf。log 近似:存成字串,log10 n ≈ (位數 − 1) + log10(前幾位);這裡 log10 n = 10000,ln n = 10000 × ln 10 ≈ 23025.85。
  • stable sort(2023、2024):相同鍵值的元素排序後保持原相對順序。穩定:bubble、insertion、merge、counting、radix;不穩定:quick、heap、selection。

概念題速答(每題 2–3 句)

題目答案要點
mutable vs immutable可變物件建立後內容可改(Python list、dict),不可變不能改(int、str、tuple),「修改」其實是產生新物件。不可變物件可當 dict key、天生 thread-safe。
null safety(舉兩例)型別系統區分可為 null 與不可為 null,編譯期就擋掉 null 存取。Kotlin String?、TypeScript strictNullChecks、Rust Option<T>;語法 ?.、??。
thread-safe data structure多執行緒同時存取仍正確。Java ConcurrentHashMap、Python queue.Queue、Go channel;實作靠鎖、atomic、不可變。
microservice(舉例)把系統拆成可獨立部署的小服務,各自有資料、以 API 溝通。例:選課系統拆成帳號、課程、選課、通知。代價:分散式交易、網路延遲、監控複雜。轉換時先切邊界清楚的模組。
DevOps開發與維運整合的文化與自動化:CI/CD、IaC、監控。工具 Git、GitLab CI、Docker、K8s、Ansible、Prometheus。
雲端運算、三大廠商依需求取用、按量計費、彈性擴展;IaaS、PaaS、SaaS。AWS 服務最廣、Azure 與微軟生態整合、GCP 強在資料與 K8s。
Cloud Native、高可用容器、微服務、宣告式 API、自動化。高可用:消除單點、多副本、健康檢查、自動切換,用幾個 9 衡量。
OOP 三大特性封裝、繼承、多型。
OOP、FP、ConcurrentOOP 以物件組織狀態與行為;FP 以純函式、不可變資料、高階函式;Concurrent 處理多件事同時進行。2019 年題目問「為何並行比 OOP 好」,兩者不是同一維度,答題時指出這點再說明各自適用情境。
strong/weak、static/dynamic type強弱看是否允許隱式轉型(JS 弱、Python 強);靜態動態看型別何時檢查(Java、Go 編譯期;Python、JS 執行期)。
inheritance vs composition繼承是 is-a,耦合高;組合是 has-a,較彈性,偏好組合優於繼承。
JSON vs AJAXJSON 是資料格式;AJAX 是用 JS 非同步向伺服器要資料而不重新載入頁面的技術,回傳可以是 JSON 或 XML。
SOAP vs REST/JSONSOAP 是協定,XML 信封、WSDL、WS-Security,嚴謹但重,常見於金融與政府舊系統;REST 是架構風格,輕量、JSON。選擇看對接方、合約需求、效能與團隊熟悉度。
CSS p a vs p, a前者是後代選擇器(p 裡面的 a),後者是群組(所有 p 和所有 a)。
MAC 位址在哪層、網際網路上看得到來源 MAC 嗎第二層;看不到,每經過一台 router 都會換成該段的 MAC。
Top-down vs bottom-up設計:由整體拆解 vs 由元件組合;DP:遞迴+記憶化 vs 由小問題填表;parsing:LL vs LR。
無障礙網頁語意化 HTML、圖片 alt、表單 label、鍵盤可操作、對比足夠、ARIA,參考 WCAG。
生成式 AI(實際用例)學習資料分布、產生新內容的模型,如 LLM、擴散模型。用例:程式輔助、客服、文件摘要。
WordPressPHP+MySQL 的開源 CMS,主題與外掛生態大,外掛是常見的安全弱點。
Reactive programming以資料流與變化傳播撰寫程式,例:RxJS、Vue 的響應式資料。
能否擅自用師生照片或作品放上校務系統不行。需告知蒐集目的、取得同意、限於目的使用,符合個資法、著作權與校內規範。
接你的經驗:資策會實習做 RAG 資安長工具箱 POC,生成式 AI 題可以用這個當實際用例。

八、口試準備

口試只問兩種東西:你備審寫了什麼、你考卷寫了什麼。每個寫上去的經歷都要能講到第三層追問。

自我介紹稿

丁組 40 秒版(學長場):

教授、學長好,我是臺師大資工四年級的蘇恩立。我從 2024 年 2 月開始在臺師大資訊中心網路組工讀,負責網路設備設定與排錯、校園無線網路維護和弱點掃描。課外我在臺灣學術網路上架設了第一個 Tor 中繼節點並長期維運,也參與開源評測系統 NOJV 的沙盒與基礎建設。我想來丁組,是因為我想從一個協助者,變成能為一整套服務從設計、維運到交接全程負責的人。

丁組 1 分鐘版(教授場,在上面後面接):

……另外我在資策會資安科技研究所實習過,做 AI 資安研發;也參加教育部青年百億計畫到加拿大 BCIT 研習資安,得過金盾獎嶄露頭角獎。目前我和系上老師一起推動 TWNIC 的後量子遷移觀測計畫,研究後量子 TLS 和網路設備的相容性。如果進丁組,我希望以資訊中心的 SSH、郵件、VPN 為場域,研究這些服務怎麼安全地升級。

戊組 1 分鐘版:

教授好,我是臺師大資工四年級的蘇恩立。我做的東西都有真實使用者:社團和課程在用的短網址 ntnu.cc、整合全校 658 台 AP 狀態的網路品質監測平台 dashboard.ntnu.cc,這個專題拿到通識專題特優獎,還有已經用在課程考試的開源評測系統 NOJV。我也在臺師大資訊中心工讀快三年,熟悉校級資訊單位在預算、相容性和稽核規範下的工作方式。我想來戊組,在校計中把校務系統做得更安全、更好維運。
把稿子念出來計時。40 秒版控制在 170 字內。不要背得像念稿,記關鍵字就好。

備審延伸題

臺師大資訊中心工讀必問

  • 你實際負責什麼?哪些是你自己做的,哪些是協助?→ 分清楚。
  • 印象最深的故障是什麼?你怎麼排查?(準備一個真實案例,見網路題「描述你遇過的網路問題」)
  • 弱點掃描用什麼工具?掃到問題後流程是什麼?
  • ISO 27001 稽核你看到什麼?學到什麼?→ 文件化、變更管理、存取控制、證據保存。
  • 資訊中心預算和人力限制下,你看過哪些取捨?
只講你做過的。你沒有做過機房設備上架與整線,被問到就說沒有參與。

Tor relay(BeTheStar)必問

  • 為什麼學校會允許?→ 非出口節點(middle relay),流量不會以學校 IP 連到目的網站;你做了連線例外申請與資安風險評估。
  • relay、exit、bridge 差在哪?→ 中繼只轉送加密流量;exit 是最後一跳,對外連線,法律風險在此;bridge 不公開列名,供審查地區使用。
  • 主機怎麼加固?→ 只用金鑰登入、防火牆只開 ORPort、自動安全更新、專用使用者、ExitPolicy reject *:*。依你實際設定講。
  • Shallot 怎麼運作?告警條件是什麼?
  • 你發現的 Tor Metrics 錯誤是什麼?怎麼確認、怎麼回報?
  • 專題的原始題目是共識權重優化,為什麼轉向?→ 照實說:分析後發現影響權重的因素主要不在節點端,這是一個合理的負面結果,所以轉向基礎設施建置與社群推廣。不要包裝成成功。
你的交大備審寫的是 Tor Project 部落格「專訪」,但那其實是你寫的客座文章。被問到時主動說明「是我撰寫、刊登在官方部落格的客座文章」,避免被認為誇大。

NOJV 開源評測系統必問

  • 你負責哪部分?→ 評測沙盒與基礎建設。
  • 沙盒怎麼隔離不受信任的程式?限時限記憶體怎麼做?→ 只講實際用的機制。
  • 規模?→ 備審寫 186 位使用者;每學期約 300 位註冊、考試時約 150 人同時在線。
  • 系主任請你評估 GCP 上雲:規格、價格、HA 切換怎麼想?
  • 考試中當機怎麼辦?→ nojv-maintenance:原站掛掉時由 Cloudflare Worker 回維護頁;監控與告警。
  • 學生維護者自己修課考試,利益迴避怎麼處理?→ 權限分離、考試期間凍結權限、操作稽核 log。這還在規劃中,照實說。

dashboard.ntnu.cc 網路品質監測平台必問

  • 三人分工?你的 50% 是什麼?→ 系統架構、後端 API、MySQL 設計、AP/頻寬/環境資料擷取與排程、Docker 部署、Cloudflare Tunnel、權限控管、正式環境維運。
  • 658 台 AP 的資料從哪來?多久更新?資料量多大?
  • 為什麼用 MySQL 不用時序資料庫?→ 說明當時考量,並說若重做會考慮 Prometheus 或 TimescaleDB。
  • 使用者端測速怎麼做?結果可信嗎?
  • 有沒有真的幫資訊中心找到問題?

ntnu.cc、Homelab、其他

  • ntnu.cc 架構:Cloudflare Pages Functions+KV;為什麼選 serverless?缺點?(冷啟動、廠商綁定、除錯)
  • 子網域服務沒有使用者,不要主動強調;被問就說是實驗性功能。
  • Homelab:Proxmox VE、多台 Ubuntu VM、K8s(Calico、Temporal)、Cloudflare Tunnel;被問 LVM 擴充就講 pvresize/lvextend -r 流程。
  • 資策會實習:RAG 資安長工具箱 POC,問題是什麼、怎麼評估效果。
  • BCIT:高風險 app 評估、數位鑑識學到什麼。
  • 金盾獎:團隊分工與你的貢獻比例。

後量子遷移研究方向必問

  • 什麼是混合式金鑰交換?→ 同時做傳統 ECDH(X25519)與後量子 KEM(ML-KEM-768),兩者都破才會被破,例如 X25519MLKEM768。
  • 為什麼中間設備會出問題?→ 後量子金鑰讓 ClientHello 多出約 1KB,跨越單一封包;寫死只讀第一個封包、或解析有 bug 的防火牆、IPS、TLS 檢測設備可能中斷或降級連線。
  • 非 Web 協定現況?→ OpenSSH 9.0 起預設 sntrup761x25519,10.0 起預設 mlkem768x25519;VPN 與郵件的支援較不一致,這正是你想盤點的。
  • 為什麼要「先換金鑰交換、後換簽章」?→ 先防「現在收集、日後解密」;簽章只需在量子電腦出現前換好。
  • 這和丁組有什麼關係?→ 資訊中心的 SSH 工作站、郵件、VPN 就是最好的實驗場域。

動機與危險題

題目答題方向
為什麼選丁組?想從協助者變成為服務負責的人;資訊中心就是實驗室;學生營運、真實使用者。
丁組要值班、配合系計中,你可以嗎?可以,並具體說你在臺師大資訊中心已經習慣排班與處理臨時故障。
進來想去哪一組?Net 為主,System 為次;也願意依需求分配。
想維護舊專案還是做新專案?都要。舊專案讓你學到別人的好壞設計與維運現實,新專案練架構設計;維護舊系統時先補測試和文件,才敢重構。
和系計中的人意見不同怎麼辦?先理解既有決策的原因,用資料講,在測試環境驗證,最後尊重負責人的決定。
你覺得你適合丁組嗎?弱點是什麼?適合:網路維運與自架服務經驗。弱點:BSD 與大型郵件系統沒有上線經驗,入學前用 SA/NA 課程教材補。
(戊組)你和前面的考生有什麼不同?同時有網路維運與系統開發經驗,而且服務都有真實使用者。
為什麼不留在臺師大?正面講交大的資源(學生營運的資訊中心、SA/NA 課程),不批評母校。
同時錄取其他學校會選哪?誠實但正面:說明你最看重的是能為真實服務負責的訓練環境,這是丁組獨有的。
失敗或沒做出來的經驗?Tor 專題原題的負面結果,以及你怎麼轉向並仍產出貢獻。
臺灣好厲駭第 10 屆為什麼沒結訓?若被問,簡短照實說原因與你的取捨,不要辯解太久。
成績普通/英文?不主動提。被問就承認,接著講你把時間花在哪些實務上。

最後的反問(選一兩個)

  • (學長)新生第一學期通常怎麼分組與交接?有交接文件嗎?
  • (學長)目前資訊中心最想改善或重建的服務是什麼?
  • (教授)丁組的論文題目通常怎麼和中心業務結合?
  • (戊組教授)校計中目前的開發技術棧與部署流程是什麼?

九、預測考古題

依今年資訊中心的組別、近年題目趨勢與你的備審推估。前 10 題和你的經驗最相關,優先準備。

1. 校園無線網路使用者說很慢,你怎麼查?你的經驗

先切範圍(一人、一棟、全校)→ 用戶端訊號(RSSI、SNR)與連線速率 → 該 AP 的連線數與頻道使用率、同頻干擾 → DHCP pool 是否用完 → AP 上行與 switch port 錯誤計數 → DNS 與出口頻寬。dashboard.ntnu.cc 正好看得到 AP 狀態與測速。

2. 2.4 GHz 與 5 GHz 差異?頻道規劃?WPA2-Enterprise/802.1X?你的經驗

2.4 GHz 穿透好、範圍大、只有 1、6、11 三個不重疊頻道,干擾多;5 GHz 頻道多、速度快、穿透差。高密度用 5 GHz、降低功率、多 AP。802.1X:用戶端(supplicant)→ AP(authenticator)→ RADIUS 驗帳號,每人獨立金鑰,eduroam 就是這樣。

3. 一台 Linux 磁碟滿了怎麼查?你的經驗

df -h 看哪個分割區、df -i 看 inode、du -xh --max-depth=1 / | sort -h 找大目錄、lsof +L1 找已刪除但仍被開啟的檔案(常見是 log)、journald 用 journalctl --vacuum-size。擴充:pvresize → lvextend -r -l +100%FREE。

4. 伺服器 load 很高怎麼查?load average 的意義?

load 是可執行加上等待 IO(D 狀態)的程序數平均,要和 CPU 核數比較。top/htop 看 CPU 與 iowait、vmstat 1、iostat -x 1、pidstat、free -m 看是否 swap;找到程序後用 strace、perf top。

5. TCP 三向交握與四次揮手?TIME_WAIT 為什麼存在?

SYN → SYN-ACK → ACK;關閉 FIN → ACK → FIN → ACK。主動關閉方進入 TIME_WAIT(2MSL),確保最後的 ACK 能重送、讓舊封包消失不干擾新連線。大量 TIME_WAIT 用連線重用(keep-alive、連線池)解決。

6. DHCP 流程?rogue DHCP 怎麼防?

DORA:Discover、Offer、Request、Ack。跨網段用 DHCP relay(ip helper)。防 rogue:switch 開 DHCP snooping,只信任上行 port;它的綁定表也能搭配 DAI 防 ARP spoofing。

7. TLS 1.3 握手流程?和 1.2 差在哪?0-RTT 的風險?

ClientHello(含 key_share)→ ServerHello(key_share)+加密的憑證與 Finished,1-RTT 完成。比 1.2 少一個 RTT、移除 RSA 金鑰交換與弱演算法、強制前向保密。0-RTT 資料可能被重放,只能用在冪等請求。後量子的 key_share 就放在 ClientHello 裡。

8. HTTP/1.1、HTTP/2、HTTP/3 差異?

HTTP/2:二進位、多工、header 壓縮,但 TCP 層仍有 head-of-line blocking;HTTP/3 跑在 QUIC(UDP)上,各 stream 獨立、握手整合 TLS 1.3、連線遷移。中間設備擋 UDP 443 時會退回 HTTP/2。

9. SSH 怎麼加固?SSH CA 是什麼?

關密碼登入與 root 登入、只用金鑰、改用 Ed25519、fail2ban、限制來源、跳板機。SSH CA:用 CA 簽使用者與主機憑證,不必逐台發 authorized_keys,可設效期,離職撤銷容易,適合資訊中心規模。

10. 你維運的服務當過嗎?事後怎麼檢討?你的經驗

用 postmortem 格式:時間線、影響、根因、處置、後續行動,不責怪個人。挑一個真實事件(NOJV、Tor relay 或 Homelab)準備好。

11. Reverse proxy 和 load balancer 差在哪?L4 與 L7?

反向代理接客戶端請求轉給後端,可做 TLS 終止、快取、路由;負載平衡是把流量分給多台。L4 看 IP 與 port(快、不懂內容),L7 看 HTTP(可依路徑、header 分流)。

12. keepalived/VRRP 怎麼做 HA?split-brain 是什麼?

兩台共享一個虛擬 IP,主機定期發 VRRP 廣播,備機收不到就接手 IP。split-brain:網路分割使兩台都以為自己是主,要靠仲裁、fencing 或第三方健康檢查避免。

13. 集中 log 怎麼做?保存多久?

rsyslog/journald 轉送、Loki 或 ELK;設保存期限(依法規與資安規範)、存取權限、log 中的個資遮罩、時間同步。

14. K8s Pod 一直 CrashLoopBackOff 怎麼查?Service 類型?

kubectl describe pod 看 events、kubectl logs --previous、檢查 command、設定、liveness probe、OOMKilled。Service:ClusterIP(內部)、NodePort、LoadBalancer;HTTP 對外用 Ingress(或 Gateway API)。

15. Docker image 怎麼縮小、怎麼更安全?

multi-stage build、小基底(distroless、alpine)、合併層、.dockerignore、非 root 使用者、固定版本、掃描漏洞。

16. 資料庫備份與還原演練?

定期邏輯備份(mysqldump、pg_dump)或實體備份,加上 binlog/WAL 做 point-in-time recovery;異地保存;定期還原到測試環境驗證。

17. 索引怎麼運作?什麼時候不該加?

多數是 B+ tree,讓查詢從全表掃描變成 O(log n);複合索引遵守最左前綴。代價是寫入變慢、佔空間;低選擇性欄位或很少查詢的欄位不值得加。用 EXPLAIN 確認。

18. 一次幫 100 台電腦裝軟體,或不用還原卡保護教室電腦?2021 PC 組

大量部署:PXE+映像(Clonezilla、WDS)、Ansible、Windows 用 GPO 或 Intune。保護:一般使用者權限、Windows Unified Write Filter、AppLocker、每次開機或課後重新映像;Linux 用 overlayroot。兩門課要不同 OS:PXE 選單開不同映像,或雙系統、VDI。

19. 給 30 個學生在一台主機上開互相隔離的練習環境?

LXC 或容器加 cgroup 限資源、每人獨立網路 namespace 或 VLAN、磁碟 quota、到期自動回收;或在 Proxmox 用範本快速 clone VM。

20. 如何安全地讓自動化工具或 AI agent 操作伺服器?

專用帳號、最小權限、只允許特定指令、在沒有公網 IP 的隔離 VM 裡執行、操作稽核 log、重要動作需人工核准。你有把 Claude Code 部署到沒有公網 IP 的 VM 的經驗。

21. 憑證自動續期與過期事故怎麼避免?

ACME(certbot、Caddy、cert-manager)自動續期;監控所有憑證到期日並提前告警;憑證效期越來越短,手動續期遲早出事。

22. Zero Trust 是什麼?

不因為在內網就信任,每次存取都驗證身分、裝置狀態與權限,最小權限、持續監控。實例:Cloudflare Access 保護內部服務,取代 VPN。

23.(戊組)設計校務系統的權限與稽核?

RBAC(教師、學生、行政、管理者),敏感操作另需核准;最小權限;所有存取個資的動作寫稽核 log;資料分級、去識別化、保存期限;定期權限盤點。

24.(戊組)校園 SSO 用 SAML 還是 OIDC?

SAML 是 XML、成熟,傳統企業與學校系統多;OIDC 建在 OAuth 2.0、JSON 與 JWT,對行動 App 和現代 Web 較友善。新系統偏 OIDC,舊系統維持 SAML,IdP 兩者都支援。

25.(戊組)選課開放時 3 萬人同時湧入,系統怎麼撐?

壓力測試先找瓶頸;靜態資源放 CDN;課程資料快取;排隊機制或分批開放;讀寫分離;選課寫入用交易與約束防超選(同借教室題);限流;水平擴展應用伺服器;監控與降級頁面。

26. ARP 是什麼?ARP spoofing?

用 IP 問 MAC 的廣播協定,沒有驗證,所以可以偽造回應做中間人攻擊。防法:DAI、靜態 ARP(關鍵設備)、加密連線。

27. NAT 類型、port forwarding、hairpin NAT?

SNAT(內往外改來源)、DNAT(port forwarding 改目的)、masquerade(動態 SNAT)。Hairpin:內網用公網 IP 連回同一網段的伺服器,要額外規則或用 split DNS。

十、作戰計畫與來源

現在是凌晨,先睡覺。複試考的是累積,不是熬夜;睡飽比多看兩題有用。

考前時間表

時間做什麼
10/25(日)上午網路與排錯:把 VPN、公網連不上兩題對著空白紙默寫一次,講出指令。再看 OSPF、STP、nftables。
10/25 下午Linux、Container、K8s;讀一遍 WWW 去年題(ORM、Callback Hell、借教室、渲染)。
10/25 傍晚重讀自己的備審,每一個寫上去的數字與名詞都要能解釋。整理資訊中心的一個真實故障案例。
10/25 晚上自我介紹念出來計時三次;確認公告的時間地點與交通;準備物品;早睡。
10/26(一)提早到考場(2018 年報到 8:30–8:50);考完先記下自己考卷寫了哪些題,下午會被問。
10/26 晚上戊組:看 SQL、generator、子網、概念題速答表;丁組教授場的動機題。
10/27(二)戊組測驗、丁戊口試。

攜帶清單

  • 准考證(或報名系統的通知)、身分證、學生證
  • 原子筆兩支、鉛筆、橡皮擦、手錶(戊組必備)
  • 水、簡單食物;自己的備審資料一份(自己翻,不必交)
  • 穿著:素色襯衫+長褲即可,歷年約一半考生這樣穿
  • 新竹兩天,前一晚的住宿與回程交通先訂好

來源

題目年份依各篇心得發表時間標示(例如 2024 丁=114 學年度考試)。