恒生电子后端笔试:选择题、SQL 与 DP 常数优化
- 轮次
- 笔试
- 时间
- 2026-09
- 来源
- 牛客网
《面试题目》
- 选择题:覆盖面很广,考点分散。
- 编程题:SQL 题,题干长、逻辑复杂。
- 编程题:动态规划题,按组样例反复重建 dp 数组会超时。
《参考解析》
同一份 O(n) 逻辑,为什么一组 TLE 一组 AC:原帖这场笔试最值得记的就是这个现象——算法思路和计算过程完全没动,只是把 dp 数组从”每组样例前新建 vector”改成”C 风格数组或复用容器加清空”,就从 27% 的 TLE 变成 AC。原因在常数因子:每组样例重新构造 vector 意味着一次堆分配加一次释放,元素多的时候还会触发缺页和初始化开销,多组样例叠加起来就吃掉了全部时间预算;复用同一块内存只清一次,清零还能被编译器优化成 memset。同类可优化的点还有一串:容器先 reserve 避免反复扩容搬移、循环里不要构造临时 string 或反复查 map、把不变量和取模提到循环外、输入量大时用快读替掉 cin 或者关掉流同步、函数调用密集时考虑内联。但顺序不能颠倒——先确认复杂度本身没错,再谈常数优化;如果复杂度就高了,怎么抠常数都是白搭。
SQL 编程题怎么准备:笔试里的 SQL 考点高度集中,练熟这几类基本够用:多表连接(要能讲清 inner join 和 left join 的差别,以及过滤条件写在 ON 和写在 WHERE 会改变结果)、分组聚合配合 having、窗口函数(row_number/rank/dense_rank 排名、lag/lead 取前后行、sum over 求累计与分组占比)、以及”取每组最新一条”这类经典需求(group by 加 max,或窗口行号再筛)。容易丢分的细节是口径:并列名次怎么定义、时间范围是闭区间还是开区间、去重规则、NULL 参与比较(= NULL 永远不成立,必须用 IS NULL)。写的时候先按业务问题拆成几步中间结果,用 CTE 一层层表达,比一上来就堆 join 更稳也更好检查。
选择题和填空怎么拿分:这类卷子的结构通常是”选择题杂而广 + 填空送分 + 三道编程定胜负”。选择与不定项覆盖语言基础、数据结构、计算机网络、操作系统四大块,题目不难但范围大,性价比最高的复习方式是把每个方向的高频结论过一遍并做错题复盘,而不是死磕某个偏门难点;不定项还要特别注意”部分正确算错”的判分方式,宁可少选。填空往往是把概念补全,属于必拿分,做题顺序上应该先扫完再回头啃需要推演的题。整套卷子的时间分配建议是先填空、再选择、最后按”有把握 → 有可能 → 没思路”的顺序做编程,某道题卡住超过预定时间就切走,别像原帖那样在一道 SQL 上耗掉其他题的时间。