全真模拟面试 + 知识地图

最后一天。一场 45 分钟的全真模拟,一张闭卷知识地图,为这八周画上句号。

学 0 min
练 60 min
盘 60 min
共 120 分钟

安排

  1. 01找人做 45 分钟模拟面试;没有人就自问自答并录像

  2. 02题目从底部 24 题自测清单里随机抽

练 · 120 min

  1. 45 分钟模拟面试(10 分钟自我介绍 + 20 分钟八股 + 15 分钟手写)
    参考答案

    时间分配照做并卡表:自我介绍 10 分钟(D55 的 3 分钟版扩讲)、八股 20 分钟(从 D50/D51 的 40 问里随机抽 4-5 题)、手写 15 分钟(1-2 题,边写边讲)。评分自检三问:每题是否在 60-90 秒内收口?手写时有没有沉默超过 10 秒(正确的做法是边写边说思路)?有没有主动反问澄清需求(模拟设计题时尤其要练)?

  2. 回看录像,标出卡壳的每一处
    参考答案

    逐处卡壳归因三类:知识缺(回题单补)、表达缺(口述稿没写熟,重写再录)、紧张(多来几轮就脱敏)。每处写一句具体动作,如「窗口框架那题重画图」,别写「下次注意」。

  3. 闭卷画一张完整的 SQL 知识地图
    参考答案

    地图骨架照八周主线:单表查询 -> NULL 三值逻辑 -> 聚合分组 -> 多表连接 -> 子查询与 CTE -> 窗口函数 -> 索引与执行计划 -> 事务与 MVCC -> 建模与设计,九个一级分支;每个一级分支下再展开二级(如「窗口」下挂:排名三兄弟 / 偏移 / 累计 / 框架 / 连续区间)。

  4. 画不出来的分支就是接下来 30 天的维护重点,列成清单
    参考答案

    画不出来的分支 = 见过但没内化。按「面试出现频率 x 自己薄弱程度」排成清单,前 3 项就是接下来 30 天前三周的主攻目标--这张清单比模拟面试的分数更值钱。

  5. 制定后续 30 天维护计划:每天 20 分钟,只做错题重刷 + 一道新题
    参考答案

    20 分钟拆两半:10 分钟错题重刷(从 mistakes.md 随机抽,写不出来才算没刷过)+ 10 分钟一道新题。写进日历、设上每日提醒--没进日历的计划等于没有计划。

过关标准 知识地图覆盖八周全部主题;维护清单已写进日历。

今日复盘

  1. 写第一条简历亮点:数据建模相关(用 D31 的 ER 图和 D30 的约束设计当素材)
    参考答案

    句式模板:「主导设计 __(X 张核心表)的数据模型,通过 __(约束设计 / 价格快照 / 类目层级),实现 __(量化结果:脏数据率从 X% 降到 Y% / 口径统一后报表争议清零)」。素材用 D30 的约束清单和 D31 的 ER 图--每个字段的类型和可空性都是你亲手定的,追问到任何一层都有话接。

  2. 60 分钟闭卷手写 8 题(从 D27 的题型里随机抽)
    参考答案

    先判断题型属于哪个家族,SQL 就是框架默写--这是限时手写的全部秘密。口述模板:子查询排好编号 / 算好累计,外层再筛。

    -- D27 的题型基本落在四个家族,闭卷时先认题型再套框架:
    -- ① 分组内编号(每组 TOP N / 第 N 个)② 连续区间(差值分组法)
    -- ③ 累计(sum over)④ 偏移(lag/lead,如环比、连续 3 天上涨)
    
    -- ① 每个用户消费额前 3 的订单
    select id, user_id, total_amount
    from (select id, user_id, total_amount,
                 row_number() over (partition by user_id order by total_amount desc) as rn
          from orders) t
    where rn <= 3;
    
    -- ② 连续登录 7 天及以上的用户(日期 - 编号,连续的日子里这个差值不变)
    select user_id
    from (select user_id,
                 login_at::date - (row_number() over (partition by user_id order by login_at::date))::int as grp
          from (select distinct user_id, login_at::date from user_logins) t) g
    group by user_id, grp
    having count(*) >= 7;
    
    -- ③ 贡献 80% GMV 的头部用户(累计占比)
    with u as (select user_id, sum(total_amount) as gmv from orders where status = 2 group by 1)
    select user_id, gmv
    from (select user_id, gmv,
                 sum(gmv) over (order by gmv desc) * 100.0 / sum(gmv) over () as 累计占比
          from u) t
    where 累计占比 <= 80;
    
    -- ④ 每个用户的第 2 笔订单
    select id, user_id, created_at
    from (select id, user_id, created_at,
                 row_number() over (partition by user_id order by created_at) as rn
          from orders) t
    where rn = 2;
  3. 背景 -> 现象 -> 定位过程 -> 计划对比 -> 方案 -> 结果数据 -> 反思