Data Analyst Interview Preparation Guide - Junior Level (FAANG Standard)
This guide is based on general FAANG interview practices and may not reflect specific company procedures.
Junior-level Data Analyst interviews at FAANG companies follow a structured multi-stage process designed to assess technical SQL proficiency, statistical thinking, product analytics intuition, and collaboration skills. The process typically spans 4-6 weeks from initial application to offer and includes recruiter screening, multiple technical assessments, product/business case analysis, and behavioral evaluation. Each round builds on previous assessments to evaluate your ability to work independently on data problems while contributing to team success.
Interview Rounds
Recruiter Screening
What to Expect
Your initial conversation with a technical recruiter to assess basic qualifications, motivation, and communication skills. This round determines whether you move forward in the process. The recruiter will ask about your background, why you're interested in the role, your experience with the required tools, and your availability. This is your chance to demonstrate enthusiasm and articulate how your experience aligns with the role. Recruiter screens typically last 20-30 minutes and are relatively straightforward if you're qualified.
Tips & Advice
Prepare a clear 30-second elevator pitch about who you are and why you want to work at the company. Research the company's data products and mention specific examples. For a junior level candidate, emphasize your eagerness to learn, foundational strength in SQL and analytics, and ability to work collaboratively. Have specific examples ready of your hands-on experience with data tools. Be honest about your strengths and areas for growth—recruiters appreciate authenticity. Ask thoughtful questions about the team, the types of data problems they solve, and how the role contributes to the company's mission.
Focus Topics
Motivation & Fit
Authentic interest in the role, the team, and the company. Be ready to explain why this opportunity excites you and how it aligns with your career goals.
Practice Interview
Study Questions
Clear Communication & Professionalism
Ability to speak clearly, listen actively, answer questions directly, and ask thoughtful follow-up questions. Avoid rambling or going off-topic.
Practice Interview
Study Questions
Company Product Knowledge
Basic understanding of what the company does, its key products and services, and how data analytics drives decisions in that context. For FAANG companies, know their major product lines and business models.
Practice Interview
Study Questions
Resume Alignment & Background Story
Ability to articulate your data analytics experience, relevant projects, and technical skills in a way that connects to the job description. Know your resume inside and out and be prepared to discuss specific projects where you worked with SQL, dashboards, or statistical analysis.
Practice Interview
Study Questions
SQL & Data Querying Technical Screen
What to Expect
A technical phone or video interview focused on your SQL proficiency. You'll be asked to write SQL queries to solve data problems, typically using a shared coding environment or whiteboard. Questions range from basic to intermediate complexity and test your ability to work with joins, aggregations, filtering, and window functions. You'll need to think aloud, explain your approach, and handle edge cases. This round directly tests your core technical foundation as a data analyst.
Tips & Advice
Practice the six-step SQL problem-solving process: (1) Restate the question to confirm understanding, (2) Explore the data by asking questions about column types and unique identifiers, (3) Identify relevant columns, (4) Define what the output should look like, (5) Write code incrementally, and (6) Explain your solution. Start by talking through your approach before coding—this gives the interviewer a chance to redirect you if needed and shows organized thinking. Use proper formatting and clear variable names. If you hit a blocker, say it out loud and work through it methodically rather than sitting in silence. Test your logic mentally with edge cases (empty results, duplicates, NULL values). For intermediate queries, consider efficiency: when should you use a CTE versus a subquery? When should you use window functions instead of self-joins? Practice on LeetCode, HackerRank, and CodeWars daily. Time yourself to build speed under pressure.
Focus Topics
Data Cleaning & Handling Edge Cases
Dealing with NULL values, duplicates, type mismatches, and data inconsistencies in queries. Validating results and checking for anomalies. Using CASE statements for data transformation.
Practice Interview
Study Questions
Window Functions: ROW_NUMBER, RANK, DENSE_RANK, LAG, LEAD, SUM OVER
Intermediate-level SQL using window functions to perform calculations over subsets of data without collapsing rows. Understanding PARTITION BY and ORDER BY within window functions.
Practice Interview
Study Questions
Subqueries & Common Table Expressions (CTEs)
Using subqueries in WHERE, FROM, and SELECT clauses. Building readable queries using CTEs (WITH clauses) to break complex logic into steps.
Practice Interview
Study Questions
SQL Fundamentals: SELECT, WHERE, GROUP BY, ORDER BY
Mastery of basic SQL syntax for filtering rows, selecting columns, grouping data, and ordering results. These are the building blocks for every query.
Practice Interview
Study Questions
Aggregation & Grouping: SUM, COUNT, AVG, MAX, MIN, HAVING
Ability to aggregate data across groups, handle NULL values in aggregations, filter on aggregated results using HAVING, and distinguish between WHERE and HAVING clauses.
Practice Interview
Study Questions
SQL Joins: INNER, LEFT, RIGHT, FULL, CROSS
Deep understanding of different join types, when to use each, how they handle NULL values, and common pitfalls like duplicate rows from multiple joins. Ability to visualize Venn diagrams conceptually.
Practice Interview
Study Questions
Data Analysis & Business Metrics Round
What to Expect
An interview focused on your ability to think like a data analyst who understands business impact. You'll be given real-world scenarios and asked to design metrics, analyze performance, or solve a business problem using data. For example: 'How would you measure success for a new feature?' or 'We're seeing a drop in user engagement—how would you investigate?' You'll be expected to ask clarifying questions, break down the problem, identify relevant metrics, and explain what insights you'd look for. This round assesses your product intuition and ability to connect data to business decisions.
Tips & Advice
Start by asking clarifying questions: What are we trying to achieve? What defines success? What data do we have access to? What's the business context? Then structure your answer using a framework: problem → metrics → data approach → insights you'd look for. For a junior-level candidate, focus on defining clear, measurable KPIs and explaining your reasoning. Don't overthink this—simple, logical metrics are better than complex ones. Use real-world examples from the company's products if possible. For instance, if interviewing at YouTube, mention watch time and retention as potential success metrics. Walk through how you'd validate assumptions (e.g., 'I'd check if the metric is moving in the direction we expect'). For a junior analyst, it's acceptable to say 'I'd escalate this to a senior analyst' for very complex statistical questions, but show that you understand the basic approach. Be clear and structured in your communication; this is as much a communication test as a thinking test.
Focus Topics
Trend Analysis & Anomaly Detection
Recognizing when metrics are moving in expected vs. unexpected directions. Identifying root causes of changes (seasonal effects, external events, product changes). Using visualizations to communicate trends.
Practice Interview
Study Questions
Dashboard & Reporting Design Principles
Understanding what information to present to different stakeholders, how to design dashboards for clarity, and best practices for data visualization. Knowing when to use different chart types.
Practice Interview
Study Questions
Exploratory Data Analysis (EDA) Approach
Systematic methodology for understanding a dataset: asking questions, identifying patterns, detecting anomalies, and forming hypotheses. Knowing what to look for in data and how to validate assumptions.
Practice Interview
Study Questions
Feature Analysis & Launch Evaluation
Ability to design a framework for evaluating whether a new feature is successful. Identifying key metrics to track, timeframes for evaluation, and potential confounding factors. Understanding basic A/B testing concepts.
Practice Interview
Study Questions
Defining Key Performance Indicators (KPIs) & Business Metrics
Understanding how to translate business goals into measurable metrics. Knowledge of common metrics across different products (engagement, retention, conversion, growth) and when each is appropriate. Distinguishing between lagging and leading indicators.
Practice Interview
Study Questions
Statistics & A/B Testing Round
What to Expect
An interview assessing your understanding of statistical concepts and experimental design. You'll be asked to explain hypothesis testing, interpret p-values and confidence intervals, evaluate the design of an A/B test, or solve problems involving statistical reasoning. For example: 'We ran an A/B test and found a 2% improvement in conversion rate with a p-value of 0.08. Should we launch?' You're expected to explain not just the answer but the reasoning behind it. This round tests whether you understand the 'why' behind statistics, not just memorized formulas.
Tips & Advice
Focus on conceptual understanding over formulas. Be able to explain p-values, confidence intervals, Type I and Type II errors, and statistical significance in plain English using real-world examples. For the A/B test evaluation example above, walk through: Is the p-value below our significance threshold (typically 0.05)? Are we confident the difference is real? What's the practical significance—is a 2% improvement worth the effort? For a junior analyst, it's acceptable to ask clarifying questions like 'How many users were in the test?' or 'How long did the test run?' Show that you understand confounding factors. Practice interpreting real A/B test results and explaining them to a non-technical audience. Use real examples from your past work if possible. Stay away from overly complex statistics; junior-level interviews focus on core concepts like hypothesis testing and basic statistical validation.
Focus Topics
Common Statistical Distributions & Tests
Basic understanding of normal distribution, binomial distribution, and when to use t-tests, chi-square tests, or non-parametric tests. Not requiring deep knowledge but knowing what test to apply to different data types.
Practice Interview
Study Questions
A/B Testing Design & Evaluation
Ability to evaluate an A/B test design for flaws: proper randomization, adequate sample size, appropriate test duration, control for confounding factors. Understanding when to use one-tailed vs. two-tailed tests. Identifying issues like multiple comparison problem or peeking.
Practice Interview
Study Questions
Confidence Intervals & Statistical Significance
Understanding what a 95% confidence interval means, how it differs from a point estimate, and how to use it for decision-making. Knowing the relationship between sample size, variability, and confidence interval width.
Practice Interview
Study Questions
Type I & Type II Errors (False Positives & False Negatives)
Understanding the trade-off between Type I error (false positive: launching a feature that doesn't actually help) and Type II error (false negative: missing a genuinely good feature). Knowing how to calculate power and sample size.
Practice Interview
Study Questions
Hypothesis Testing Fundamentals
Understanding null and alternative hypotheses, p-values, significance levels, and when to reject the null hypothesis. Ability to interpret p-values correctly and explain what they mean (probability of observing results if null hypothesis is true, not probability that hypothesis is true).
Practice Interview
Study Questions
Tools & Dashboard Implementation Round
What to Expect
An interview or practical assignment evaluating your proficiency with business intelligence and visualization tools (Tableau, Power BI, Looker, etc.) and your ability to build reports and dashboards that communicate insights effectively. You may be asked to take a dataset and build a dashboard, interpret an existing dashboard and suggest improvements, or walk through dashboards you've built previously. This round assesses both technical tool skills and your ability to think about user needs and data storytelling.
Tips & Advice
Be hands-on with at least one BI tool (preferably the one the company uses). Practice building dashboards from scratch that tell a clear story, not just display all available data. For each dashboard, be able to articulate: Who is the user? What decision are they trying to make? What's the key insight? What metrics are most important? Learn best practices: use consistent color schemes, label axes clearly, avoid clutter, and highlight what matters. When discussing dashboards, explain your design choices. For example: 'I used a line chart for this metric because we care about trends over time, and a table for detailed numbers because stakeholders need exact values for forecasting.' Know how to filter data, create calculated fields, and build drill-down capabilities. Be comfortable with Excel too—many analysts use it for ad-hoc analysis. If you're given a dataset during the interview, walk through your dashboard-building process out loud, not just silently building. Explain your metrics, filters, and design choices. For a junior analyst, it's more important to build something clear and useful than something visually stunning.
Focus Topics
Advanced Excel Skills
Proficiency with pivot tables, VLOOKUP/INDEX-MATCH, formulas for calculations, data validation, and conditional formatting. Understanding Excel's role in ad-hoc analysis before moving to BI tools.
Practice Interview
Study Questions
Data Storytelling & Insight Communication
Ability to use dashboards and visualizations to tell a story, not just display data. Highlighting key insights, using narrative to guide the viewer, and connecting data to business impact.
Practice Interview
Study Questions
Dashboard Design & Best Practices
Understanding principles of effective visualization: choosing appropriate chart types, using color meaningfully, minimizing clutter, labeling clearly, and designing for the user's needs. Knowing when to use tables vs. charts.
Practice Interview
Study Questions
Tableau or Power BI Proficiency
Hands-on ability to connect to data sources, build charts and dashboards, create calculated fields, apply filters, and design interactive views. Understanding the tool's capabilities and limitations.
Practice Interview
Study Questions
Behavioral & Collaboration Round
What to Expect
An interview assessing your soft skills, teamwork, communication, and fit with the company culture. You'll be asked about your experience working with teams, handling feedback, dealing with ambiguity, collaborating across departments, and how you approach learning. For junior-level candidates, the focus is on demonstrating coachability, curiosity, and ability to work well with senior colleagues. FAANG companies assess 'culture fit' or company-specific principles (e.g., Amazon's Leadership Principles, Google's Googleyness). You'll discuss past situations using the STAR method: Situation, Task, Action, Result.
Tips & Advice
Prepare 3-5 strong stories showcasing technical skills AND teamwork. Use the STAR method: clearly set the Situation, define your Task, describe the specific Actions you took, and quantify the Results. For junior-level roles, stories should emphasize learning from feedback, collaborating with teammates, and taking initiative within a team context. Avoid stories where you solve everything alone or where you're the hero—show how you worked with others. Have stories ready for scenarios like: 'Tell me about a time you received critical feedback,' 'Describe a time you worked with someone who had a different approach,' 'Tell me about a project where things didn't go as planned,' 'When have you had to work cross-functionally with teams outside your area?' Practice out loud and time yourself to around 2 minutes per story. Be ready to answer why you're interested in the company and role specifically, not generically. Research the company culture and mission. For FAANG companies, familiarize yourself with their core values or principles. Ask thoughtful questions about the team, growth opportunities, and what success looks like in the first 6 months. Show genuine curiosity about learning and growing as an analyst.
Focus Topics
Handling Ambiguity & Imperfect Information
Ability to work effectively when requirements are unclear, data is incomplete, or the best approach is uncertain. Examples of how you've navigated ambiguous situations.
Practice Interview
Study Questions
Initiative & Problem-Solving
Examples of taking ownership of tasks, identifying problems proactively, and suggesting solutions. Showing initiative without waiting to be told what to do.
Practice Interview
Study Questions
Communication & Clarity
Ability to explain technical concepts to non-technical stakeholders, write clear reports, present findings effectively, and communicate proactively when there are blockers or ambiguity.
Practice Interview
Study Questions
Coachability & Learning Mindset
Demonstrating openness to feedback, ability to learn from mistakes, and eagerness to develop skills. Examples of how you've improved based on feedback or learned a new tool/skill.
Practice Interview
Study Questions
Collaboration & Teamwork
Ability to work effectively with engineers, product managers, and other analysts. Examples of cross-functional projects, how you handle disagreements, and your approach to receiving feedback from teammates.
Practice Interview
Study Questions
Frequently Asked Data Analyst Interview Questions
Given a small sample table with a few missing cells across two columns, decide whether the missingness in each column looks most consistent with MCAR, MAR, or MNAR based on what else you can see in the rows, and name two diagnostics you'd run to confirm your read on a larger dataset.
Sample Answer
Direct answer
On a small sample table with age missing for one user and country missing for another, look at what else is known about each row before concluding anything: if the missingness seems tied to specific OTHER observed fields (say, both missing values belong to users with very short last_active_days, suggesting incomplete signups rather than a random gap), that points toward missing at random (MAR) rather than missing completely at random (MCAR); if there's no such pattern at all, MCAR is the more plausible working assumption, though a sample this small can't rule out much with confidence either way.
Reading the indicators in a small sample
The judgment here is necessarily provisional: with only a handful of missing values, you're looking for suggestive patterns, not statistical proof. Check whether the missing values cluster on particular values of other observed columns (a specific signup channel, a specific date range, a specific last_active_days value) rather than spreading randomly across the table; a cluster is a hint worth chasing further, while a scattered, unpatterned handful of missing values in an otherwise unremarkable small sample is consistent with MCAR, though genuinely inconclusive at this size.
Worked example
In a four-row sample: age is missing for the user with last_active_days of 5, and country is missing for the user with last_active_days of 30. If this were the ENTIRE evidence, it's genuinely ambiguous at n=4, but the diagnostics worth running on a larger version of the same table would be: does age missingness correlate with recency of signup or activity level across many more rows (pointing toward MAR via activity level as the observed explanation), or does it look scattered across every level of activity (more consistent with MCAR)? The two concrete diagnostics to propose here are a missingness-versus-last_active_days crosstab and a simple bar chart of missingness rate by signup cohort, both cheap to run once you have more than four rows to work with.
Trade-offs and pitfalls
Resist over-interpreting a genuinely small sample: the honest answer at n=4 is "here's a hypothesis and here's how I'd test it on the full dataset," not a confident MCAR-versus-MAR conclusion drawn from four rows.
Write an ANSI SQL query that computes the percentage of users exposed to a feature flag by segment. Schema:
feature_flags(user_id bigint, flag_name varchar, flag_value boolean, flagged_at date)
users(user_id bigint, country varchar, plan varchar)
Return percentage_exposed per country and plan combination over the last 30 days.
Sample Answer
Approach: Count distinct users in each (country, plan) who were exposed (flag_value = true) to the given flag at least once in the last 30 days, divide by the total distinct users in that segment (active users in same 30-day window or all users — here we assume users present in users table and active if they had any flagging event or you can use all users). Use LEFT JOIN to include segments with zero exposures.
-- ANSI SQL: percentage of users exposed to a feature flag by country & plan over last 30 days
WITH recent_flags AS (
SELECT user_id
, flag_name
, flag_value
, flagged_at
FROM feature_flags
WHERE flagged_at >= CURRENT_DATE - INTERVAL '30' DAY
AND flag_name = 'your_flag_name' -- replace with actual flag
),
exposed_users AS (
-- users who had flag_value = true at least once in window
SELECT DISTINCT rf.user_id
FROM recent_flags rf
WHERE rf.flag_value = TRUE
),
segment_totals AS (
-- total users in each segment (join users; optionally restrict to users who had any event)
SELECT u.country, u.plan, COUNT(DISTINCT u.user_id) AS total_users
FROM users u
-- optionally restrict to users who appear in recent_flags:
-- JOIN (SELECT DISTINCT user_id FROM recent_flags) r ON u.user_id = r.user_id
GROUP BY u.country, u.plan
),
segment_exposed AS (
SELECT u.country, u.plan, COUNT(DISTINCT e.user_id) AS exposed_users
FROM users u
LEFT JOIN exposed_users e ON u.user_id = e.user_id
GROUP BY u.country, u.plan
)
SELECT
st.country,
st.plan,
se.exposed_users,
st.total_users,
CASE
WHEN st.total_users = 0 THEN 0
ELSE ROUND( (CAST(se.exposed_users AS DECIMAL) / st.total_users) * 100, 2)
END AS percentage_exposed
FROM segment_totals st
JOIN segment_exposed se
ON st.country = se.country
AND st.plan = se.plan
ORDER BY st.country, st.plan;
Key points:
- We count distinct users to avoid double-counting repeated exposures.
- Use a 30-day window via CURRENT_DATE - INTERVAL '30' DAY (ANSI-compatible).
- CAST to decimal before division and ROUND to 2 decimals for percent.
Edge cases: - Segments with zero users handled to avoid divide-by-zero.
- If you want denominator = active users only, uncomment the join in segment_totals to restrict to users with events in the window.
Alternatives: - Use MAX(flag_value) per user to detect exposure in a single grouping step.
- If flagging timestamps matter (first exposure), compute MIN(flagged_at) per user.
Tell me about a time you had to re-prioritize your workload to deliver a business-critical insight under a tight deadline. Describe what information you used to decide, how you communicated the change to stakeholders, how you executed the work, and what trade-offs you accepted.
Sample Answer
STAR skeleton. Situation: name the competing priorities you were already carrying and what suddenly made one piece of work business-critical, a real trigger, not just "it became urgent." Task: the specific insight you were asked to deliver and the actual deadline. Action: cover the four things this question asks for directly, what information you used to decide to reprioritize, not just "I decided it was important," how you communicated the change to whoever owned the work you deprioritized, how you actually executed under the compressed timeline, and what trade-offs you knowingly accepted, stated specifically, not just "I worked extra hours." Result: the outcome, ideally with a number, and what happened to the deprioritized work afterward, since that's often left out and it matters.
Worked example. I was two weeks into a planned quarterly cohort-retention analysis, roughly 60% done, when our VP of Sales asked, on a Tuesday, for an analysis of why a specific enterprise renewal, a $400,000 annual contract, was showing unusual usage decline, needed before a Thursday renewal call. The information I used to decide to reprioritize wasn't just "a VP asked": I checked the account's contract value against our team's current quarter revenue-at-risk list, confirmed it was already flagged internally as a top-5 renewal risk, and got a one-line confirmation from my manager that this took priority over the cohort analysis for the week, so the decision wasn't made on my read of urgency alone.
How I communicated the change: I messaged the stakeholder waiting on the cohort analysis, our head of product, the same day, not at the next scheduled check-in, explaining specifically what displaced it, a $400K renewal risk with a Thursday deadline, and gave a concrete new delivery date, Friday the 12th instead of the original Friday the 5th (five business days later, stated so it was checkable, not an open-ended "I'll get to it when I can").
How I executed: with roughly a day and a half of real working time before Thursday, I skipped the broader cohort-level analysis I'd normally run and went straight to the one account, pulling its usage logs for the trailing 90 days and comparing feature-by-feature usage against the account's usage at renewal 12 months prior. I found a specific driver within the first afternoon: usage of the account's primary integrated feature had dropped 40%, from roughly 1,200 to 720 weekly actions, starting exactly the week a key admin user's account was deprovisioned during an internal reorg on their side, pointing to an onboarding gap for their new admin rather than a product satisfaction problem. I validated that read by checking two comparable accounts that had gone through a similar admin transition and seen a partial usage recovery within 6 weeks once a new admin was properly onboarded.
Trade-offs I accepted: I explicitly decided not to investigate two secondary, less time-sensitive drop patterns the same data surfaced, flagging them in my notes for follow-up rather than chasing them before Thursday, since they weren't relevant to the renewal conversation and pursuing them would have meant either missing the deadline or doing the primary analysis shallowly. I also accepted that the cohort-retention analysis would ship five business days later than originally planned, and said so plainly rather than quietly hoping to make up the time.
Result: the sales team used the finding to reframe the Thursday call around a specific onboarding fix, getting the new admin properly set up, rather than a discount negotiation, the renewal closed the following week at full value, and the cohort analysis shipped Friday the 12th, five business days after its original Friday-the-5th deadline, with no material impact since I'd flagged the delay to the stakeholder in advance.
What separates a strong answer from a mediocre one. A mediocre answer says "I dropped what I was doing and got it done," which shows responsiveness but nothing about judgment, since agreeing to reprioritize for anyone senior who asks isn't actually a skill, it's compliance. A strong answer shows the specific check that confirmed the reprioritization was actually warranted, here cross-referencing the revenue-at-risk list rather than taking urgency at face value, names the trade-off given up explicitly rather than implying everything got done, and closes the loop on the deprioritized work rather than letting the story end at "I delivered the urgent thing."
The same shape shows up outside a data role: a product manager asked to drop a roadmap review to urgently investigate a pricing complaint from a large customer would run the identical arc, confirm the account's actual size and risk before assuming urgency, tell the roadmap stakeholder the same day with a new date, execute against the narrower urgent question rather than a broader one, and be explicit about what got pushed as a result.
Explain Simpson's paradox and provide a concrete A/B testing example with hypothetical numbers where aggregating across segments yields the opposite conclusion from segment-level analysis. Describe how you would detect such paradoxes and resolve the correct interpretation for product decisions.
Sample Answer
Direct answer
Simpson's paradox is when a trend that appears in an aggregated dataset reverses, or disappears, once the data is broken into meaningful subgroups. It happens when a subgroup variable is both correlated with the outcome and unevenly distributed across the groups being compared, so the aggregate is really comparing different mixes of subgroups rather than like-for-like. In A/B testing this can flip an experiment's headline verdict if traffic composition differs between arms.
Structured elaboration
Mechanism. The paradox needs two ingredients: a segment (e.g. new vs returning users) whose baseline conversion rate differs a lot, and a segment mix that differs between the two experiment arms, whether from a randomization bug, non-random routing, or the arms genuinely attracting different user mixes (for example, if the treatment changes something only new users see first). When the high-baseline segment is overrepresented in one arm, that arm's aggregate gets pulled up regardless of the true within-segment treatment effect.
Two distinct causes worth separating. (1) A randomization or logging bug that skews segment composition between arms even though the metric itself has a uniform effect. This should be treated like Sample Ratio Mismatch: a data-quality problem to fix, not a real result to interpret. (2) A genuine, real segment-mix or heterogeneous-effect situation (e.g. the arms were deliberately targeted differently, or the treatment interacts with user tenure). This is a real result that needs segment-aware reporting, not a bug.
Worked example
Two segments with very different baseline conversion, and arms that got very different mixes of each:
| Segment | Control | Treatment |
|---|---|---|
| High-intent users | 380 / 900 = 42.2% | 45 / 100 = 45.0% |
| Low-intent users | 6 / 100 = 6.0% | 63 / 900 = 7.0% |
| Aggregate | 386 / 1,000 = 38.6% | 108 / 1,000 = 10.8% |
(All counts verified by direct computation.) Notice: treatment wins in both segments individually (45.0% > 42.2%, and 7.0% > 6.0%), but because control's traffic was mostly high-intent users (who convert well regardless of arm) and treatment's traffic was mostly low-intent users (who convert poorly regardless of arm), the aggregate makes it look like control is dramatically better. Reading only the aggregate row would lead to killing a feature that actually helped every segment it touched.
Detection. Treat segment-mix balance as a standard experiment health check alongside SRM: compare the proportion of each key segment (device, new/returning, geography) between arms, and flag if that mix itself differs significantly between arms (a chi-square test of segment distribution by arm is a direct way to check this). Separately, fit the metric with an interaction term, metric∼arm+segment+arm:segment, to see whether the treatment effect actually differs by segment (heterogeneity) as opposed to just the segment mix differing (composition).
Resolution. If the segment-mix imbalance traces back to a bug (bad routing, non-random assignment), that invalidates the experiment; the fix is to correct randomization and rerun, not to reweight around the bug. If the imbalance is real and expected (e.g. the two arms intentionally target different populations, or a feature launch changes what fraction of traffic is new users), report segment-level effects explicitly rather than a single aggregate number, and if a single summary number is still needed, use a standardized/weighted average that applies one fixed reference mix (e.g. last month's traffic composition) to both arms instead of letting each arm's own live mix drive the number.
Trade-offs & pitfalls
- Don't go looking for a favorable segment cut after seeing an unfavorable aggregate result; that's post-hoc fishing and needs the same multiple-comparisons discipline as any other exploratory subgroup analysis. Segment checks belong in the pre-registered analysis plan, run regardless of which way the aggregate goes.
- Trusting an aggregate number without ever looking at segment balance is the classic wrong turn, and it's especially dangerous because the aggregate looks perfectly clean (large N, tight CI) even while hiding a completely reversed within-segment story.
- Not every segment-level difference is Simpson's paradox; if segment mix is balanced across arms and the aggregate and segment-level conclusions agree, that's just a normal heterogeneous-effect finding, worth reporting, but not a paradox to resolve.
A product team is designing an experiment that changes the homepage layout and needs to decide the unit of randomization: user id, session id, cookie, device, or household. For each candidate unit, describe the trade-offs (bias, cross-unit contamination, measurement noise) and explain how hash-based deterministic bucketing works in practice, including operational pitfalls such as changing hashing keys or salts mid-experiment. Recommend how you would detect and correct unit-mismatch problems after the experiment has run.
Sample Answer
Direct answer
The randomization unit should be the largest identity that is (a) stable over the experiment window and (b) matches the unit at which you will measure and report the outcome. For a homepage layout change with user-scoped conversion metrics, that is almost always user id when you have reliable logged-in identity; fall back to device id for logged-out mobile traffic, and treat cookie and session id as fallback-only units because they leak identity across the very boundary you are trying to hold fixed. The mechanism that turns "unit" into an actual bucket assignment is deterministic hash-based bucketing, and its main operational failure mode is touching the hash inputs (the salt or key) mid-experiment. Before any of that, though, you have to define who is even eligible to be in the experiment at all.
Structured elaboration
Defining the eligible population before choosing a unit
Unit choice is a second-order question; the first-order question is which units are even eligible to enter the experiment. For a mobile-only feature (say, a redesign shipped exclusively in the mobile app to a US audience), a desktop-only visitor cannot receive the treatment no matter which arm they land in, so randomizing across your full user base and then measuring outcomes at the account level silently dilutes the experiment: ineligible units get logged into both arms with a null "effect" (they cannot experience the change either way), which pulls the estimated treatment effect toward zero and inflates the sample size needed to detect a real one. The eligible population for a mobile-only US feature is the set of units that are (a) on the mobile platform that ships the feature, (b) in the targeted market (US), and (c) past whatever version or capability gate the feature requires; everyone outside that eligible population should be excluded from the experiment entirely, not folded into control by default. This is a distinct failure mode from picking the wrong unit: a design can choose a perfectly good unit (user id) and still be broken if a third of the "users" randomized into it were structurally incapable of ever seeing the treatment, whether the unit ultimately chosen within that eligible population is user, device, or session id.
Trade-offs by candidate unit
| Unit | Bias risk | Cross-unit contamination | Measurement noise | When it fits |
|---|---|---|---|---|
| User id | Low, if identity is stable and logged-in coverage is high | Low: one identity, one assignment across devices/sessions | Low: outcome aggregates cleanly to the assignment unit | User-scoped metrics (conversion per user, retention) with strong login coverage |
| Device id | Moderate: a shared household device mixes two people's behavior | Moderate: a device is stable, but a person moving across devices is not held fixed | Moderate | Logged-out or app-only surfaces where device is the closest stable identity |
| Cookie | Moderate to high: cleared on privacy sweeps, differs per browser | High: the same person can carry two cookies (two browsers) or none (private mode), landing in both arms or neither | High: undercounts multi-device, overcounts churny cookie population | Legacy web-only experiments with no login signal, used with caveats |
| Session id | High | High: the same user gets reassigned every new session, so the "treatment" a user experiences is not stable | High: session-level noise dominates any user-level signal | Only for genuinely session-scoped questions (e.g., a single-session UI micro-test) |
| Household | Low for spillover, but a distinct effective-sample-size cost | Low: contains treatment inside the family unit when family members influence each other's behavior | High variance per unit relative to user-level randomization, because you have fewer households than users | Shared-consumption products (streaming, shared carts) where one member's exposure changes another's behavior |
The two axes that matter are: does this unit stay attached to one treatment condition for the life of the experiment, and does it match the level at which you will later compute the metric. Session-level randomization on a homepage layout change fails both: a returning user can see version A on Monday and version B on Wednesday, so "the effect of the layout" is not well defined for that person, and if you then report a user-level conversion rate you are averaging over users who experienced a mix of both conditions.
Target-segment and control-group selection for a personalization test
Personalization experiments add a further wrinkle on top of eligibility and unit choice: because the treatment itself varies per person (each user's personalized experience differs from every other user's), you have to be explicit about two more things: which segment of the eligible population the test targets, and what the control group actually receives. A common setup: the target segment is the subset of eligible users with enough interaction history for the personalization model to act on (say, users with a minimum number of prior sessions); users below that threshold cannot be meaningfully personalized and should either be excluded from the test or routed to a defined fallback, rather than silently folded into a "control" group that has nothing to do with the personalization decision being tested. The control group, correspondingly, should receive a clearly defined non-personalized baseline (a fixed default ranking or layout), not "whatever the legacy system happened to show," so the measured effect is attributable to personalization itself rather than to incidental differences between the two code paths. Get target-segment or control-group definition wrong (an ill-specified segment boundary, or a control group that partially overlaps with treatment logic) and the measured lift reflects a spurious selection effect rather than the personalization algorithm's real value, no matter how correctly the underlying randomization unit and hash mechanism were implemented.
How hash-based deterministic bucketing works
In practice you do not store a per-user assignment row for every experiment. Instead you compute
bucket(u)=hash(u∥salt)modN
where u is the chosen unit id (user id, device id, etc.), the salt is a string unique to this experiment (often the experiment name or id), and N is the number of buckets (commonly 100 or 1000 for fine-grained traffic allocation). Buckets are then mapped to arms, e.g. buckets 0-49 to control and 50-99 to treatment for a 50/50 split. Because the hash is deterministic, the same unit id always lands in the same bucket for the same salt, which is what makes the assignment reproducible without a lookup table, and salting per-experiment is what makes assignment to experiment A independent of assignment to experiment B (so the same user can be validly in many concurrent, non-interacting experiments).
Operational pitfalls
- Changing the salt or hashing key mid-experiment. This is the single most common self-inflicted wound. It re-shuffles every unit into a new bucket, silently reassigning some fraction of users from control to treatment (or the reverse) partway through. The experiment now mixes users with a clean single-arm history and users who were exposed to both arms, which is exactly the session-level contamination problem from the table above, except it is invisible unless you log assignment history.
- Reusing a salt across experiments. If two unrelated experiments accidentally share a salt (or one is a substring of the identifier used in the other), their bucket assignments become correlated instead of independent, which breaks the assumption that concurrent experiments do not interfere with each other.
- Changing N or the bucket-to-arm mapping. Even without touching the salt, resizing the traffic split mid-flight (e.g., ramping from 5% to 50%) moves units across the arm boundary unless the mapping is designed to be monotonic (new traffic is added to existing arms rather than everyone being rehashed).
- Identity churn. A user id that gets merged, deleted, or re-issued (account merge, logout/login cycles that mint a new anonymous id) effectively becomes a new hash input mid-experiment, which has the same effect as a salt change for that user.
A finer-grained alternative: per-impression randomization
Every unit above is a person-shaped identity. Some teams instead randomize at the impression level, assigning a fresh coin flip to each page view or ranking request rather than to a person. This is occasionally used for high-frequency, low-persistence decisions (e.g., which of several ranking variants to serve on a given request) where you explicitly do not want a stable per-user experience. It is a different trade entirely from the table above: it eliminates any notion of "this user's assigned arm" (so it cannot answer a question about a durable, user-perceived change like a homepage layout), and it introduces strong intra-user correlation in the outcome data, since one person's many impressions are not independent draws, which inflates the effective variance if you naively treat impressions as independent observations in the analysis. Per-impression randomization is the right tool only when the thing being tested is meant to vary within a single user's experience; for a homepage layout, where the goal is to measure how a stable person-level experience changes behavior, it is the wrong granularity.
Detecting and correcting unit-mismatch after the fact
- Assignment-churn audit. From the exposure logs, compute the fraction of units that were logged under more than one arm during the experiment window. A near-zero rate is expected; anything material indicates contamination.
- Pre-period balance check. Compare the two arms on metrics measured before the experiment started (metrics that could not possibly be affected by treatment). An imbalance signals a broken randomization, not a broken hash necessarily, but it is the same diagnostic.
- Sample ratio mismatch check on the realized split, i.e., does the observed 50/50 (or intended ratio) actually hold at the analysis unit. A skew is a strong signal that the bucketing pipeline itself misbehaved.
- Timeline reconstruction. If churn is found, check the deployment log for the experiment: a salt, key, or bucket-count change on a specific date will produce a visible step change in the churn-rate-by-day series.
- Correction paths, in order of preference. Analyze by first-observed assignment only (treat each unit's initial exposure as its assignment, i.e., an intention-to-treat style rule, and accept the resulting dilution of the effect estimate); if the break has a clean date, restrict the analysis window to the stable period before or after it; if contamination is pervasive, drop the experiment's results for the affected window and rerun rather than trying to model around a broken assignment mechanism, since any post hoc adjustment for a data-dependent unit-mismatch is itself a source of bias.
Worked example
Suppose an app-only feature was randomized by session id and you are asked to sanity-check it before trusting the readout. You pull exposure logs and count, per user, the distinct arms they were logged under: 92,000 users saw only control, 91,500 saw only treatment, and 6,500 saw both. Churn rate is 6,500/(92,000+91,500+6,500)≈3.4%. That is a directly computed, reproducible number from the logs, not an assumption, and a value that high on a homepage-layout test (where the same person plausibly returns within the experiment window) is enough on its own to recommend re-running at user-id granularity rather than trying to salvage the session-level readout.
Trade-offs and pitfalls
- Choosing the "purest" unit (household) is not free: fewer independent units means higher variance per unit, so the same absolute effect needs more households than it would need users to reach the same precision. Unit choice is a bias-versus-noise trade, not a pure bias fix.
- A cookie- or device-based fallback is a compromise you should name explicitly to stakeholders, not a silent substitute for user id; report the estimated multi-device contamination rate alongside the headline result.
- An eligible population that is defined too loosely (e.g., randomizing all traffic instead of just the mobile-only, in-market segment) produces the same kind of diluted, biased-toward-zero readout as a bad unit choice, even when the unit itself is correct.
- Do not "fix" detected contamination by re-including the mixed-exposure users with a different weighting scheme chosen after seeing which way it moves the result; decide the exclusion or ITT rule before looking at the treatment effect.
After an instrumentation or ETL change, you discover a specific cohort or segment has been silently undercounted (or rows silently dropped) for some time, while the aggregate metrics looked normal enough not to trigger existing alerts. Describe how you would quantify the size and scope of the bias, what you would do to remediate it, and what you would add to your monitoring so a similar defect doesn't go undetected again.
Sample Answer
Quantify the bias by comparing the affected segment against a control segment that wasn't touched by the change, rather than trusting the overall aggregate, since a silent undercount for one cohort can be small enough in the total to hide behind normal day-to-day noise while still being large relative to that specific cohort.
Approach
Compare the affected cohort's metric trend before and after the suspected change against an unaffected control cohort's trend over the same period; a divergence that appears only in the affected cohort, and only after the change, is strong evidence the change itself caused the undercount rather than a coincidental broader shift.
Worked example
An instrumentation change duplicates events for roughly 5% of users in one specific country; the overall engagement metric barely moves (that country is a small share of total traffic), but a country-level breakdown shows engagement in that one country jumping in a way no other country shows, and the jump timing lines up exactly with the instrumentation deploy date, pinpointing both the cause and the affected scope.
Trade-offs and pitfalls
Remediation has to address both the historical data and the ongoing pipeline: backfilling or annotating the historically affected rows (rather than silently overwriting them, so the correction itself stays auditable) and re-instrumenting or reverting the change that caused the bias going forward. The preventive lesson is usually the more valuable output of this exercise: whatever check would have caught this sooner (a per-segment, not just an aggregate, monitoring rule) should be added, since the whole reason this class of defect is dangerous is that it hides behind an aggregate that looks fine.
Write SQL returning customers whose total spend is above the overall average spend across all customers, using a derived table or subquery. Why does this comparison require a subquery rather than a single-pass GROUP BY?
Sample Answer
Filtering to "above the group's own average" needs the average itself computed first, in a separate pass, since a plain WHERE clause can't reference an aggregate over the very rows it's filtering; a subquery (or CTE, a Common Table Expression) is what supplies that already-computed reference value.
Structured elaboration
SELECT customer_id, total_spend
FROM customers
WHERE total_spend > (SELECT AVG(total_spend) FROM customers);
The inner query computes a single number (the overall average) independently of the outer query's row-by-row filtering; that number is then used as a constant threshold for the outer WHERE clause. This is fundamentally different from a GROUP BY + HAVING pattern, which filters GROUPS by a per-group aggregate; here there's only one group (the whole table), and the "aggregate" being compared against is a single scalar value shared across every row being filtered.
Worked example
Given customers with total_spend of 100, 300, and 50: the average is (100+300+50)/3 ≈ 150. The query correctly returns only the customer with total_spend 300, since 100 and 50 both fall below the average.
Trade-offs and pitfalls
For "above THIS customer's own segment average" rather than the overall average, this pattern needs a correlated subquery instead (one that references the outer row's segment inside the inner query), or a window function like AVG(total_spend) OVER (PARTITION BY segment), which computes the average per partition without collapsing rows via GROUP BY at all: SELECT customer_id, total_spend FROM (SELECT customer_id, total_spend, AVG(total_spend) OVER (PARTITION BY segment) AS segment_avg FROM customers) t WHERE total_spend > segment_avg;. PARTITION BY segment computes the AVG separately for each segment, but unlike GROUP BY, it doesn't collapse rows into one output row per segment; every original customer row survives, now carrying its own segment's average alongside it, so the outer WHERE can compare each customer's own spend against their own segment's average directly.
You suspect a colleague's report has a hidden bias from how the data was sampled, and it's already circulating with stakeholders. How do you raise that in a way that leads to a joint investigation rather than putting them on the defensive?
Sample Answer
Direct answer
Go to the colleague privately first, before doing anything more public, and frame the concern as a question about the sampling method rather than a conclusion about their competence. Bring the specific evidence, propose a joint, falsifiable check that would settle whether the bias is real, and only then decide together how to handle the already-circulated report.
Structured elaboration
- Verify before you raise it. Confirm the specific gap yourself (which source, what kind of gap) so you are not escalating a hunch. Raising a vague suspicion is more likely to read as an attack than raising a concrete, checkable one.
- Private channel first. Do not raise it in the stakeholder meeting or a public thread. The goal at this stage is a shared understanding between the two of you, not a public correction.
- Lead with evidence, not the conclusion. Ask how the sample was chosen and show what you noticed, rather than opening with "your report is biased." The evidence does the work; you are not the one delivering a verdict.
- Propose a joint, falsifiable test. Agree in advance on a specific check that would settle the question either way, for example, re-running the analysis with a more complete data source and comparing results. If the two produce materially different conclusions, that is evidence of the bias; if not, the original report holds and nothing was lost.
- Handle the stakeholder-facing correction together. If the test confirms the bias, present the fix as a normal part of the quality process, credit the colleague's original work, and avoid framing it as catching an error.
Worked example
A colleague circulated a cohort analysis to stakeholders built from a single data source you know has intermittent collection gaps. Rather than flagging it in the stakeholder thread, you ask to talk privately: "I noticed this cohort uses source A, do you know if that source had full coverage this quarter?" You show the specific evidence (gap periods, affected date ranges) and ask how the sample was chosen. Together you agree on the joint test: re-run the same cohort analysis using a second, more complete source and compare the two results. If the numbers move meaningfully, you have confirmed a real bias and both go to stakeholders together with an updated report and a data-quality caveat; if the numbers hold steady, the original report stands and the check cost an afternoon, not a reputation.
Trade-offs & pitfalls
- Raising it directly in the stakeholder meeting "to protect the org from a bad decision" scores a point in the moment but damages the working relationship and makes the colleague defensive on the next collaboration.
- Staying silent because raising it feels confrontational lets a real bias ship into decisions uncorrected, which is a worse outcome for the partnership than a slightly awkward private conversation.
- The senior move here is designing the joint test so the evidence settles the question, rather than relying on how persuasively you phrase the concern. A well-chosen test does the convincing; the conversation itself does not have to.
- A remaining pitfall: proposing a fix without proposing how to verify it worked. A joint investigation that ends without a joint, agreed check on the outcome tends to resurface as the same disagreement later.
Design an internal 'analytics champions' program to improve data literacy across business units: selection criteria, training path for champions, expected deliverables (e.g., local dashboards, training sessions), incentives, and a 12-month support plan to keep champions engaged and effective.
Sample Answer
Requirements & goals:
- Increase data literacy across business units so teams can interpret reports, ask better questions, and act on insights.
- Create a sustainable network of 12–20 “analytics champions” (1–3 per BU) who deliver local dashboards, run training, and feed product/metric improvements.
- Measurable: champion-run sessions, dashboard adoption, reduction in analyst ticket backlog, and improvement on a literacy assessment.
Selection criteria (scorecard, 0–5 each):
- Domain influence & credibility (how well they persuade peers)
- Basic analytical aptitude (comfort with Excel/BI, interpreted via short skills quiz)
- Time availability (10% capacity)
- Learning mindset / communication skills
- Manager buy-in (sponsor support)
Top candidates: weighted score + manager nomination + short interview.
Training path (8 weeks, blended):
- Foundation (2 weeks): data literacy, metrics taxonomy, data governance, common pitfalls.
- Tools (3 weeks): hands-on labs in SQL + chosen BI (Tableau/Power BI) — build a simple dashboard.
- Storytelling & Teaching (1 week): presenting insights, running workshops, diagnosing questions.
- Capstone (2 weeks): deliver a local dashboard + conduct a 40-min pilot training to peers; assessed by Data Team.
Expected deliverables:
- Local dashboard(s) aligned to central metric taxonomy (updated monthly, automated).
- Monthly drop-in office hours / 1x 60-min training per month.
- Quarterly “insight brief” (1 page) highlighting 2–3 findings and recommended actions.
- Participation in cross-BU champion sync and governance feedback loop.
Incentives:
- Role recognition (title badge, profile on internal site)
- Professional development stipend + access to paid BI courses
- Quarterly performance bonus tied to adoption metrics
- Time allocation guarantee (10% FTE) + manager scorecard for support
12-month support & engagement plan:
Months 0–3: Onboarding cohort, mentor pairing with senior analyst, tooling sandbox, weekly check-ins.
Months 4–6: Biweekly community of practice (CoP), monthly office hours with central analytics, access to ticket triage queue for escalations.
Months 7–9: Advanced workshops (A/B basics, forecasting), stretch projects (cross-BU analytics), recognition awards.
Months 10–12: Measure outcomes (dashboard usage, training attendance, literacy assessment), iterate selection/training, plan next cohort.
Ongoing: governance channel, template library, shared SQL/dashboard repo, KPI dashboard for champion program performance.
Trade-offs: balancing breadth vs. depth — start small, measure impact, then scale.
You maintain a 10-year sales time series and notice the trend shifts after a pricing change. Describe statistical methods to detect structural breaks (e.g., Chow test, CUSUM, Bayesian change point detection) and how you'd attribute the break to pricing versus coincident events.
Sample Answer
Direct answer
Detecting a structural break means testing whether a series' underlying parameters (mean, trend, variance) shifted at some point, using methods like the Chow test (tests a hypothesized break date), CUSUM (accumulates deviations to flag a sustained shift), or Bayesian change point detection (estimates a posterior distribution over where a break most likely occurred); attributing the break to a specific cause (like a pricing change) versus a coincident event requires comparing the break's timing and shape against what you'd expect that specific cause to produce, ideally with a control series that wasn't exposed to the same cause.
Structured elaboration
- Chow test: tests a SPECIFIC, pre-specified candidate break date by comparing the fit of one regression over the whole series against two separate regressions split at that date; an F-test determines whether the split significantly improves fit. Use it when you already have a hypothesis for WHEN the break happened (e.g. the exact date of a pricing change).
- CUSUM: accumulates signed deviations from a reference/target value over time and flags when the cumulative sum crosses a threshold; naturally suited to detecting a SUSTAINED shift (as opposed to a single outlier), and doesn't require knowing the break date in advance.
- Bayesian change point detection: puts a prior over possible break locations (and possibly the number of breaks) and returns a posterior distribution, which is useful when you're not confident there's exactly one break, or want an honest measure of uncertainty about WHERE the break occurred rather than a single point estimate.
- Attributing the break to pricing vs a coincident event: check whether the break's TIMING lines up precisely with the pricing change date (a break that starts 3 weeks before the price change is a red flag that something else is driving it); check whether the break's DIRECTION and MAGNITUDE make sense for the mechanism (a price increase should plausibly reduce volume, not increase it, absent some other explanation); and, most powerfully, compare against a CONTROL series not exposed to the pricing change (a comparable product/region where price didn't change) - if the control also shows a break at the same time, the true cause is more likely something coincident (a seasonal event, a macro shift) than the pricing change itself.
Worked example (executed)
Run against a synthetic 300-point series (seed=0) with an abrupt level shift of +5 at index 100, followed by a separate GRADUAL linear ramp of +5 starting at index 200 and completing by index 300, both with unit-variance Gaussian noise:
import numpy as np, ruptures as rpt
np.random.seed(0)
n = 300
x = np.zeros(n)
x[:100] = np.random.normal(0, 1, 100)
x[100:200] = np.random.normal(5, 1, 100)
ramp = np.linspace(0, 5, 100)
x[200:300] = 5 + ramp + np.random.normal(0, 1, 100)
algo = rpt.Pelt(model="rbf").fit(x.reshape(-1, 1))
result = algo.predict(pen=10)
print("result =", result)
Executed output: result = [100, 235, 300]. PELT located the abrupt shift's true onset (index 100) EXACTLY, but only flagged the gradual ramp at index 235 - thirty-five periods after its true onset at index 200 - a genuine, informative result: algorithms tuned for abrupt shifts (Chow test at a hypothesized date, standard CUSUM/PELT) can systematically under-detect or mis-locate a GRADUAL regime change, since there's no single sharp point where the "before" and "after" distributions are maximally separated. If a pricing change caused a gradual behavioral adaptation rather than an immediate jump, methods built around detecting sharp breaks will underperform, and a trend-based or rolling-regression approach may localize the shift better.
Trade-offs & pitfalls
At the scale of many series at once (e.g. 10 million SKU-store combinations), running full changepoint detection on every series individually is computationally prohibitive; a practical architecture screens cheaply first (a simple rolling-mean-shift heuristic) and reserves the expensive Bayesian/PELT-style methods for the subset flagged as plausible candidates, with human review prioritized toward breaks that are both large in magnitude AND business-critical, rather than trying to review every detected break. After a deployment or pricing change specifically, build the investigation triage into a repeatable runbook (a rollback threshold, a standard set of first checks) rather than an ad hoc analysis each time, since "did our recent change cause this" is a recurring question, not a one-off.
Recommended Additional Resources
- LeetCode Database Problems: Practice SQL queries on LeetCode's database section (easy to hard difficulty levels). Focus on daily practice with 2-3 problems per day.
- HackerRank SQL Challenges: Solve SQL challenges on HackerRank, which provides automated feedback and allows you to compare solutions with other users.
- CodeWars: Practice coding challenges in SQL and Python to build problem-solving speed and learn efficient approaches from community solutions.
- Cracking the Coding Interview (6th Edition) by Gayle Laakmann McDowell: While focused on software engineers, the chapters on SQL and data analysis questions are valuable. Focus on Part VI (Knowledge Based) for SQL and data analysis.
- Designing Data-Intensive Applications by Martin Kleppmann: Advanced but useful for understanding data concepts underlying real-world analytics systems.
- Google's Data Analytics Professional Certificate (Coursera): Covers SQL, Tableau, and foundational analytics concepts. Good for structured learning if you need basics.
- Mode Analytics SQL Tutorial: Free, practical SQL tutorial with real datasets to practice querying.
- Tableau Public Gallery & Tableau Desktop: Download Tableau Public for free, explore dashboards others have built, and practice building your own with public datasets (Kaggle, Google Public Datasets).
- Kaggle Datasets: Use Kaggle for hands-on practice with real datasets. Combine SQL practice with EDA and visualization projects.
- Thinking with Data by Max Shron: Short book on frameworks for answering business questions with data. Excellent for structuring your approach to case study interviews.
- Statistics Resources: Khan Academy's statistics course for foundational concepts, StatQuest videos on YouTube for clear explanations of p-values and hypothesis testing.
- A/B Testing Resources: Read case studies of real A/B tests on company blogs (Google Research Blog, Netflix Tech Blog, Airbnb Engineering) to understand how companies design and interpret experiments.
- Company Research: Familiarize yourself with target company's products, recent data-related blog posts, and engineering blogs. Understand what problems they likely solve with data analytics.
Search Results
Google Data Analyst Interview Guide 2025 (Process, Questions ...
Prepare for the 2025 Google data analyst interview with a full breakdown of stages, SQL and product questions, preparation tips, and salary insights.
20 Data Science Interview Questions With Examples - Tredence
Prepare for your next data science interview with these 20 essential data science interview questions and real-world examples.
SQL Interview Questions: A Data Analyst's Guide for Success
With this guide, you'll learn more about SQL technical screenings, what type of screening you might encounter, and some common types of questions that come ...
65+ Data Analyst Interview Questions and Answers for 2026
Ready to Crush Your Data Analyst Interview? Dive into Invaluable Questions for Top-notch Preparation. Elevate Your Career Now!
Most Asked Scenario-Based Questions in Data Analyst Interviews ...
... guide data analyst interview, real world data analyst scenarios, how to answer scenario-based questions, interview tips data analytics, junior data analyst ...
Meta (Facebook) Data Scientist Interview Guide - Exponent
Interview Prep · Write SQL queries daily · Review A/B testing design and randomization methods · Brush up on probability, statistics, and regression basics.
This interview preparation guide was generated using AI-powered research from the sources listed above. While we strive for accuracy, we recommend verifying critical information from official company sources.
Want to create your own tailored preparation guide using our deep research?
Get Started for FreeInterview-Ready Courses
Visual-first, interactive, structured learning paths