SQL 與 Python 廣告科技面試題:完整指南

最後更新: 8月2026
  • 廣告科技領域的面試主要考察中級 SQL、Python(含 pandas)以及分析能力。
  • 掌握 SQL 中的 JOIN、GROUP BY、子查詢和視窗函數以及 pandas 中的等效函數至關重要。
  • 了解準確率、F1 或 ROC-AUC 等模型評估指標,對於進階分析職位來說具有重要價值。
  • 有效的準備方法包括理論學習、大量的實踐練習以及學習如何大聲解釋推理過程。

廣告科技面試題:SQL 與 Python

如果你正在準備廣告技術、數位分析或數據分析方向的面試,遲早都會遇到令人頭痛的技術測試。公司會透過這個測驗來檢驗你是否真正掌握了履歷表上列出的技能:例如用 SQL 提取數據,用 Python 處理和分析數據,以及一些分析思考能力,以免在大量的表格和腳本中迷失方向。

好消息是,技術面試並非神秘莫測:它們通常都圍繞著SQL、Python 和模型評估這幾個核心概念。如果你能透徹理解這些基礎知識,透過實際案例練習鞏固所學,並學會清晰地闡述你的思路,那麼你就能比其他候選人更具優勢。

為什麼技術面試令人恐懼(以及如何緩解恐懼)

人工智慧參數
相關文章:
人工智慧的參數及其如何塑造模型

在廣告科技領域的資料分析師或產品經理職位上,技術面試通常會結合概念性問題和實際操作練習。你可能會被要求解釋某個 SQL 子句的功能,或是解決一個涉及程序化廣告活動資料的商業案例。

通常情況下,你會從三個方面接受評估:中級 SQL 技能(JOIN、GROUP BY、子查詢、視窗函數)、以資料為導向的 Python 程式設計技能(pandas、資料清洗、聚合、合併)以及解讀結果和溝通分析的能力。他們尋找的不是資深資料科學家,而是能夠以穩健可靠的方式處理資料的人才。

許多求職者常犯的錯誤是只注重死記硬背語法,而忽略了練習完整的習題,例如 HackerRank、StrataScratch 等平台或公司內部測試中常見的那些題目。你的目標應該是,在面試前就已經解決過幾十個非常相似的查詢和腳本。

廣告技術和資料分析師面試中通常需要具備 SQL 水準。

在廣告科技或數位行銷領域,分析師職位通常要求應徵者精通經典關係型 SQL:能夠從多個表格中提取資料、合併、分組、篩選資料並建立有用的指標。他們不會要求你具備資料庫管理技能,但你應該能夠熟練地處理中等複雜程度的查詢。

通常,測試會包含結合了INNER JOIN、LEFT JOIN、帶有 WHERE 子句的篩選器、帶有 GROUP BY 的聚合以及使用 HAVING 子句對聚合結果進行條件判斷的查詢。在此基礎上,在更高級的場景中,經常會看到用於排名、累積總和和行比較的子查詢和視窗函數。

在廣告科技領域,你很可能會回答一些業務問題,例如「哪些廣告系列的點擊率高於行業平均水平?」或「哪些發布商的展示次數比上個月有所下降?」要有效率地解決這些問題,通常需要對相關子查詢和視窗函數有一定的了解。

常見的 SQL 基礎問題(以及如何解答)

幾乎所有與資料相關的技術面試都會包含一些基本的SQL理論題。他們並非想刁難你,而是為了確保你有紮實的基礎。

最常見的問題之一是WHERE 和 HAVING的區別。最簡單的解釋是,WHERE在分組之前篩選單一行,而 HAVING 篩選已經聚合過的分組。此外,需要注意的是,涉及聚合函數(COUNT、SUM、AVG 等)的條件應該放在 HAVING 子句中,而不是 WHERE 子句中。

另一個經典問題是: JOIN有哪些類型,以及何時使用哪種類型:INNER JOIN、LEFT JOIN、RIGHT JOIN、FULL OUTER JOIN,以及在某些情況下使用的 CROSS JOIN 或自連接。在資料分析中,當需要保留完整的主資料集(例如,所有使用者)時,即使輔助表中沒有關聯的記錄(例如,購買記錄),也廣泛使用 LEFT JOIN。

基本 SQL 查詢及其邏輯範例

為了讓您了解「最低合理」水平,您應該能夠從記憶體中編寫查詢,例如選擇特定列、篩選行和對結果進行排序。最基本的常見問題包括:如何從表中提取所有列、如何僅選擇某些列,或如何使用 AS 應用易讀別名。

常常被問到如何使用WHERE 子句處理多個條件,例如結合使用 AND、OR 和 NOT,或如何對數值和日期使用比較運算子(<、<=、>、>=、=)。許多公司強調NULL值過濾,在這種情況下,僅僅使用等號是不夠的;還需要使用 IS NULL 或 IS NOT NULL。

另一種經典的過濾方式是基於文字的,使用LIKE函數和通配符 % 和 _ 進行模式匹配。例如,您可以尋找名稱包含特定字詞的行銷活動,或電子郵件地址以特定網域結尾的使用者。需要注意的是,LIKE '%text%'會在字串中的任何位置搜尋該模式。

最後,本基礎部分通常會介紹如何使用 UPDATE 語句更新記錄,如何使用 WHERE 子句篩選要修改的行,以及如何使用DELETE FROM 語句並清除條件來刪除行。務必始終強調使用特定 WHERE 子句的重要性,以避免意外刪除表中一半的資料。

中間查詢:GROUP BY、HAVING、子查詢和 UNION

一旦你晉升到初級以上級別,幾乎所有公司都會開始重視你對GROUP BY、聚合函數以及 HAVING 子句結合使用的篩選功能的掌握程度。你將每天使用這些功能來產生廣告活動、受眾群體和創意素材的效果報告。

  Ruby 程式設計:初學者快速入門指南

它的運作方式如下:GROUP BY 子句以一個或多個列對行進行分組,您可以對這些群組套用SUM、COUNT、AVG、MIN 和 MAX 等函數來計算指標。 HAVING 子句接下來用於僅保留滿足特定條件的群組,例如,銷售額超過某個門檻的客戶。

另一個重複出現的主題是子查詢:即在一個查詢中嵌套另一個查詢。它們通常用於根據先前步驟中計算出的值進行篩選,例如選擇銷售額高於全球平均水平的客戶或展示次數高於 90% 分位數的廣告活動。

你常會被問到UNION 和 UNION ALL的差別。 UNION 將兩個具有相同模式的結果集合併,並刪除重複項;UNION ALL 也執行相同的操作,但會保留所有行,即使它們重複出現。在資料分析中,出於效能考量以及為了保留所有原始記錄,你通常會更傾向於使用 UNION ALL。

視窗函數:SQL 的另一個飛躍

視窗函數已成為一定程度的技術測試標準,尤其是在廣告科技相關職位上,需要分析一段時間內的趨勢、廣告活動排名或投資總額。

關鍵在於,視窗函數會計算與目前行相關的一組行的值,但不會像 GROUP BY 那樣折疊結果。換句話說,你仍然可以看到每一行,但同時也會看到基於「視窗」資料計算的聚合值。

典型的語法是使用函數(SUM、AVG、RANK 等),後面跟著 OVER,並在 OVER 中定義分區(PARTITION BY)和排序(ORDER BY)。例如,計算銷售人員的銷售排名或每日累積展示次數。

如果您想展現您的熟練程度,您應該熟悉RANK、DENSE_RANK、ROW_NUMBER、LAG 和 LEAD等函數。這些函數對於根據廣告系列的效果進行排名、比較每個週期與前一個週期,或識別關鍵指標的同比變化非常有用。

CTE、累計總數和移動平均值

在現代求職面試中,SQL 程式碼的可讀性備受重視。因此,你常被問到公共表表達式 (CTE)。 CTE 本質上是一種命名的臨時表,使用 WITH 子句定義,並且僅在查詢執行期間存在。

CTE(公用表表達式)用於將複雜的查詢分解成邏輯區塊,並重複使用中間結果。例如,您可以先在 CTE 中計算每個廣告活動的每日指標,然後在主查詢中對該結果執行額外的聚合或篩選操作。

另一個非常常見的做法是使用 SUM 函數作為視窗函數來計算累計總數。在廣告科技領域,經常會要求提供累積展示次數、點擊次數或支出金額,以便了解廣告活動隨時間推移的表現。

與此相關的是移動平均線,它將平均值作為視窗函數應用於偏移後的行幀(例如,前兩個日期和當前日期)。這是一種平滑時間序列和檢測趨勢的簡單方法,無需過度依賴每日峰值。

資料分析師通常需要具備一定的 Python 水平

大多數資料分析師職位(包括廣告科技領域)並不要求你成為機器學習專家,但確實希望你熟練Python 和 pandas 函式庫。通常,你會被要求載入資料集、清洗資料集、轉換資料集,並取得簡單的指標或視覺化圖表。

Python 測試通常專注於諸如從 CSV 檔案讀取資料、檢查空值和列類型、過濾行、建立新列、使用 groupby 進行聚合以及連接 DataFrame 等操作。在許多情況下,測試語句與 SQL 部分幾乎完全相同,只是採用了 pandas 的格式。

分析師測試中通常不會要求從頭開始建立複雜的模型,但他們可能會重視你使用 scikit-learn 連接來訓練基本模型的能力,以及最重要的,你對衡量模型性能的基本指標的了解。

你應該掌握的 pandas 基本操作

要成功完成任何 Python 資料練習,您必須熟練 DataFrame 的基本操作。第一步通常是使用`read_csv`載入文件,並使用 `head()`、`info()` 或 `describe()` 等方法探索其結構。

清理空值的部分通常也會出現:使用 isnull().sum() 計算每列有多少個空值,決定使用 dropna() 刪除整行或整列,還是使用 fillna() 填入缺失值,例如使用列的平均值或中位數。

至於篩選器,你需要根據數值或類別列建立條件,例如選擇銷售額超過特定金額的數據,或選擇滿足多個條件的行,並使用 & 和 | 運算子進行組合。關鍵在於熟練如何寫df 語句。

pandas 中的`groupby` 函數的解釋幾乎總是包含在內,因為它直接等價於 SQL 中的 `GROUP BY` 函數。你可以按一個或多個列進行分組,然後套用諸如 `sum`、`mean`、`count` 等聚合函數。 `groupby('column').agg()` 語法至關重要。

資料框之間的連接和合併

就像掌握 SQL 中的 JOIN 操作至關重要一樣,掌握pandas 中的pd.merge 函數也不可或缺。公司會想了解你是否知道如何連接共享一個鍵的資料集,例如,將使用者表與事件或購買記錄表連接起來。

合併函數接受兩個要連接的 DataFrame、鍵列(on)和連接類型(how)作為參數,連接類型可以是“left”、“right”、“inner”或“outer”,就像在 SQL 一樣。在資料分析中,左連接主要用於保留主資料集,並添加來自輔助表的屬性或指標。

  Ada 程式語言:7 個重要原因

在訪談中,最好提及一些細節,例如按鍵兩側出現重複鍵時該如何處理,或如何處理列名與參數後綴衝突的情況。這能展現出更高的成熟度。

典型的、更偏理論性的Python問題

除了 pandas 之外,許多面試還會包含一小段Python 通用問題,以檢視你對這門語言的理解。這些問題通常比較簡短,涉及 Python 的特性、記憶體管理、資料類型或一些簡單的語法點。

反覆出現的主題之一是Python 中的自動記憶體管理,它基於使用者不直接存取的私有堆和負責釋放不再有引用的物件的垃圾回收器。

人們也經常被要求將Python 與 Java進行比較,這並非為了宣布誰勝誰負,而是為了證明你理解它們之間的區別:Python 更具動態性,語法更簡潔,非常適合原型設計和數據科學,而 Java 則往往在企業和高性能生態系統中佔據主導地位。

其他常見問題包括lambda 表達式(用於簡單操作的匿名函數)、將物件序列化為位元組並檢索它們的序列化/反序列化過程,以及列表和元組之間的區別,其中列表是可變的,用方括號定義,而元組是不可變的,用圓號定義。

面試中更多關鍵的Python概念

在Python中,常會被問到如何刪除或複製物件。通常,只需解釋可以使用`del`語句刪除引用,淺拷貝使用`copy.copy()`,而深拷貝則需要`copy.deepcopy()`即可。

另一個可能會出現的概念,尤其是在後端配置文件中,是所謂的“狗堆效應”,它描述了許多用戶或進程同時攻擊資源(例如網站或快取)導致系統飽和的場景。

與生態系相關的問題還包括Python 可以使用哪些資料庫。最明智的做法是列舉一些常用的資料庫,例如 MySQL、PostgreSQL、SQLite、MongoDB 和 Oracle,並指出 Python 通常可以很好地與各種關係型和 NoSQL 資料庫引擎整合。

最後,經常會出現一些更簡單的問題,例如如何使用 sorted on items 對字典進行排序,命名空間是什麼以及它的用途是什麼(將名稱與不同作用域中的物件關聯起來),或者如何使用 subprocess 模組和 run() 或 Popen() 等函數啟動子程序。

Python 模型評估指標:您應該了解的最低限度知識

雖然許多分析師職位不要求你設計深度學習架構,但熟悉評估分類模型的基本指標是很常見的,尤其是在廣告技術中涉及資料產品、廣告活動歸因或詐欺偵測的情況下。

首先是混淆矩陣,它總結了二元或多類分類器的成功和失敗情況。在二元分類中,混淆矩陣分為真陽性 (TP)、真陰性 (TN)、假陽性 (FP) 和假陰性 (FN)。透徹理解這四個類別至關重要。

從矩陣中可以導出準確率(衡量正確預測佔總預測數的百分比)、精確率(真陽性/正例預測數)和召回率或靈敏度(真陽性/實際正例數)等指標。當類別不平衡時,後兩個指標尤其重要。

F1分數結合了準確率和召回率,並使用調和平均值進行計算,對過低的準確率或召回率進行懲罰。在假陽性和假陰性都會造成損失的場景中,例如詐欺檢測、線索評分或疾病檢測,F1 分數是一個常用的指標。

其他進階指標:ROC曲線下面積、對數損失、傑卡德係數等

對於資料科學或市場分析方面要求較高的職位,公司會檢視你是否掌握了更高階的指標,例如ROC-AUC,它衡量 ROC 曲線下的面積,反映模型區分類別的能力。

ROC曲線表示不同決策閾值下真陽性率(召回率)與偽陽性率(1-特異性)之間的關係。隨機模型的曲線會落在對角線上,而好的模型會更接近左上角。曲線下面積越大,模型的判別能力越好。

另一個常用的指標是對數損失(logloss),它評估預測機率的質量,並對過度自信和錯誤進行嚴厲懲罰。一個完美的模型的對數損失為 0,通常來說,對數損失越低越好。

他們可能還會問你關於杰卡德指數的問題,該指數衡量兩個集合之間的相似度,計算方法是用交集的大小除以並集的大小。它常用於評估分類器、分割器和推薦系統等。

在某些情況下,會提到增益圖和提升圖,它們顯示了僅使用部分人群(例如,模型評分最高的 20% 用戶)就能覆蓋多少目標受眾。這在行銷中被廣泛用於決定優先定位哪些目標群體。

柯爾莫戈羅夫-斯米爾諾夫檢定、基尼係數與深入評估

如果公司非常注重評分或風險模型,則可能會出現Kolmogorov-Smirnov (KS) 統計量等指標,該統計量衡量正負分數分佈之間的分離程度。

KS 值接近 100(以百分比表示)表示模型幾乎完美地區分了兩個群體;接近 0 的值則表示模型的區分能力與隨機猜測無異。實際上,現實世界中的模型通常介於兩者之間,需要相互比較以選擇最佳模型。

  初學者 C 語言程式設計:快速入門指南

基尼係數是另一個從 ROC-AUC 推導出的指標,公式為 Gini = 2 × AUC – 1。它在信貸和保險領域非常流行,也被解釋為不平等程度的衡量標準:基尼係數越高,模型將真正陽性結果集中在較高分數的能力就越強。

在更進階的面試中,你可能會被要求解釋如何使用scikit-learn在 Python 中實現這些指標(例如,confusion_matrix、accuracy_score、roc_auc_score、f1_score…),並根據問題的性質和類別不平衡情況,評論何時使用每個指標。

技術面試中如何整理你的回答

除了你寫的程式碼之外,面試官還會密切注意你的思考方式和表達能力。即使你知道正確答案,結構混亂的回答也會讓你看起來比實際資歷更淺。

回答技術問題的一個非常有效的方法是:首先,用一句話解釋概念;然後,提供一個具體的例子(最好與你自己的項目相關);如果相關,還可以提及其他方法或細微差別。這種方法同樣適用於 SQL、Python 或模型指標。

例如,如果有人問你 CTE 是做什麼用的,你可以說它是一個命名的臨時子查詢,可以提高複雜查詢的可讀性,還可以補充說,當你需要多次重用中間結果時,就可以使用它,並提到在某些情況下,即使嵌套子查詢不太清晰,它也可以被嵌套子查詢所替代。

大聲思考也至關重要。如果你遇到困難,不要保持沉默:把你正在嘗試做的事情、你缺少哪些資訊、你做了哪些假設都說出來。這有助於面試官了解你的思考過程,有時甚至能給你一些線索或澄清,讓你更容易繼續前進。

技術數據面試中最常見的錯誤

許多候選人被淘汰並非因為他們缺乏足夠的SQL或Python技能,而是因為準備不足和溝通失誤等因素共同作用的結果。充分了解常見的陷阱並避免它們至關重要。

第一種是死記硬背而不理解。如果你不能解釋在什麼情況下會使用這些工具,或者為什麼它們比其他替代方案更可取,那麼即使知道 RANK 或 lambda 函數的語法也用處不大。

另一個非常常見的錯誤是練習中未能評估數據品質。如果拿到的是資料集,在開始匯總資料之前,建議檢查是否有空值、重複值或異常值,這些都可能影響分析結果。這體現了良好的判斷力和實務經驗。

避免提出澄清性問題也是非常不利的。例如,在討論廣告活動的商業案例時,詢問季節性因素、目標時間範圍、衡量指標是按使用者還是按展示次數計算等等,都是非常合理的。保持沉默並妄加猜測往往會導致最終的解決方案與面試官的預期大相徑庭。

最後,要避免「過度編碼」的做法:明明查詢或腳本可以更簡單,卻創造了不必要的複雜解決方案。在實際工作環境中,清晰度、可維護性和效率才是關鍵,而不是像解謎一樣複雜的解決方案。

為期兩週的密集訓練計劃

如果面試前時間有限,你可以製定一個精簡的學習計劃,涵蓋三個關鍵領域:SQL、Python(含pandas庫)以及實際應用。 14天的時間不可能讓你創造奇蹟,但你可以達到紮實的技能水平和足夠的自信。

頭幾天最好把重點放在初級到中級的 SQL上:複習基本語法、JOIN、GROUP BY、子查詢以及最常用的視窗函數。要抽出時間閱讀範例並編寫自己的查詢。

第二階段,重點學習pandas:資料載入、清洗、篩選、分組、合併,以及使用 matplotlib 或 seaborn 進行一些簡單的視覺化。你不需要建立複雜的儀表板,但你需要能夠在 Python 中實現與 SQL 中相同的轉換操作。

然後抽出幾天時間,在 HackerRank 或技術面試題庫等平台上進行實作練習。目的是熟悉這種形式、時間限制以及在受控環境下編寫程式碼的壓力。

最後,試著進行一到兩次完整的面試模擬:使用公開資料集,提出合理的業務問題,用 SQL 或 Python 解決這些問題,並大聲解釋你的整個推理過程,從最初的探索到最終的結論。

透過理論複習、指導練習和實際練習的良好結合,你將在面試當天具備紮實的SQL 中級知識、用於數據分析的 Python 以及模型指標——這正是大多數廣告技術和數據分析公司所期望看到的。